package com.panzhihua.service_community.service.impl;
|
|
import cn.hutool.core.date.DateUtil;
|
import com.alibaba.fastjson.JSON;
|
import com.alibaba.fastjson.JSONObject;
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
import com.panzhihua.common.model.dtos.community.PageUserReserveDTO;
|
import com.panzhihua.common.model.vos.R;
|
import com.panzhihua.common.model.vos.community.ComActReserveCommitVO;
|
import com.panzhihua.common.model.vos.community.questnaire.QuestnaiteSubVO;
|
import com.panzhihua.service_community.dao.*;
|
import com.panzhihua.service_community.model.dos.*;
|
import com.panzhihua.service_community.service.ComActReserveAnswerContentService;
|
import com.panzhihua.service_community.service.ComActReserveService;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import javax.annotation.Resource;
|
import java.util.ArrayList;
|
import java.util.Date;
|
import java.util.List;
|
|
/**
|
* @auther lyq
|
* @create 2021-08-23 10:33:11
|
* @describe 预约登记表服务实现类
|
*/
|
@Slf4j
|
@Service
|
public class ComActReserveServiceImpl extends ServiceImpl<ComActReserveMapper, ComActReserveDO> implements ComActReserveService {
|
@Resource
|
private ComActReserveMapper comActReserveMapper;
|
@Resource
|
private ComActReserveSubMapper comActReserveSubMapper;
|
@Resource
|
private ComActReserveSubSelectionMapper comActReserveSubSelectionMapper;
|
@Resource
|
private ComActReserveAnswerContentService comActReserveAnswerContentService;
|
@Resource
|
private ComActReserveRecordMapper comActReserveRecordMapper;
|
@Resource
|
private ComActReserveOperationRecordMapper comActReserveOperationRecordMapper;
|
|
private final static String COMMIT="用户已提交";
|
@Override
|
@Transactional
|
public R commit(ComActReserveCommitVO comActReserveCommitVO) {
|
if(comActReserveCommitVO!=null){
|
Long userId=comActReserveCommitVO.getUserId();
|
Date nowDate=DateUtil.date();
|
ComActReserveDO comActReserveDO=comActReserveMapper.selectById(comActReserveCommitVO.getId());
|
if(comActReserveDO!=null){
|
List<ComActReserveRecordDO> list=comActReserveRecordMapper.selectList(new QueryWrapper<ComActReserveRecordDO>().eq("reserve_id",comActReserveCommitVO.getId()).eq("user_id",comActReserveCommitVO.getUserId()).in("status",1,2,3));
|
if(!list.isEmpty()&&comActReserveDO.getIsRepeat()==ComActReserveDO.isRepeat.no){
|
return R.fail("提交失败,不可重复预约");
|
}
|
else {
|
List<QuestnaiteSubVO> questnaiteSubVOS = JSON.parseArray(comActReserveCommitVO.getJsonObject(),QuestnaiteSubVO.class);
|
if(!questnaiteSubVOS.isEmpty()){
|
Long questId=comActReserveCommitVO.getId();
|
List<ComActReserveAnswerContentDO> answerContentList=new ArrayList<>();
|
for(QuestnaiteSubVO questnaiteSub:questnaiteSubVOS){
|
//查询用户填写题目
|
ComActReserveSubDO questnaireSubDO = comActReserveSubMapper.selectOne(new QueryWrapper<ComActReserveSubDO>().lambda()
|
.eq(ComActReserveSubDO::getReserveId,questId).eq(ComActReserveSubDO::getKey,questnaiteSub.getKey()));
|
if(questnaireSubDO == null){
|
log.error("未查询到调查问卷题目,题目名称:" + questnaiteSub.getLabel() + "题目key:" + questnaiteSub.getKey());
|
continue;
|
}
|
|
Long queSubId = questnaireSubDO.getId();
|
//根据上传的类型查询不同的题目选项
|
if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.danxuan)){
|
|
//单选题处理
|
ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper<ComActReserveSubSelectionDO>()
|
.lambda().eq(ComActReserveSubSelectionDO::getReserveSubId,queSubId).eq(ComActReserveSubSelectionDO::getReserveId,questId)
|
.eq(ComActReserveSubSelectionDO::getKey,questnaiteSub.getValues()));
|
if(subSelectionDO == null){
|
log.error("未查询到调查问卷选项,题目名称:" + questnaiteSub.getLabel() + "选项key:" + questnaiteSub.getValues());
|
continue;
|
}
|
|
ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO();
|
answerContentDO.setUserId(userId);
|
answerContentDO.setCreateAt(nowDate);
|
answerContentDO.setCreateBy(userId);
|
answerContentDO.setReserveSelectionId(subSelectionDO.getId());
|
answerContentDO.setReserveSubId(queSubId);
|
answerContentDO.setType(1);
|
answerContentDO.setChoice(subSelectionDO.getOptionName());
|
answerContentDO.setAnswerContent(subSelectionDO.getContent());
|
answerContentList.add(answerContentDO);
|
}else if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.duoxuan)){
|
//多选题处理
|
String values = questnaiteSub.getValues();
|
String []value = values.split(",");
|
for (int i = 0; i < value.length; i++) {
|
ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper<ComActReserveSubSelectionDO>()
|
.lambda().eq(ComActReserveSubSelectionDO::getReserveSubId,queSubId).eq(ComActReserveSubSelectionDO::getReserveId,questId)
|
.eq(ComActReserveSubSelectionDO::getKey,value[i]));
|
if(subSelectionDO == null){
|
log.error("未查询到调查问卷选项,题目名称:" + questnaiteSub.getLabel() + "选项key:" + questnaiteSub.getValues());
|
continue;
|
}
|
ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO();
|
answerContentDO.setUserId(userId);
|
answerContentDO.setCreateAt(nowDate);
|
answerContentDO.setCreateBy(userId);
|
answerContentDO.setReserveSelectionId(subSelectionDO.getId());
|
answerContentDO.setReserveSubId(queSubId);
|
answerContentDO.setType(1);
|
answerContentDO.setChoice(subSelectionDO.getOptionName());
|
answerContentDO.setAnswerContent(subSelectionDO.getContent());
|
answerContentList.add(answerContentDO);
|
}
|
}else if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.wenda)){
|
//问答题处理
|
String values = questnaiteSub.getValues();
|
ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO();
|
answerContentDO.setUserId(userId);
|
answerContentDO.setCreateAt(nowDate);
|
answerContentDO.setCreateBy(userId);
|
answerContentDO.setReserveSubId(queSubId);
|
answerContentDO.setType(2);
|
answerContentDO.setAnswerContent(values);
|
answerContentList.add(answerContentDO);
|
}
|
}
|
if(!answerContentList.isEmpty()){
|
comActReserveAnswerContentService.saveBatch(answerContentList);
|
|
//更新回答用户数量
|
Integer joinCount = comActReserveDO.getJoinCount();
|
comActReserveDO.setJoinCount(joinCount != null ? joinCount + 1 : 1);
|
comActReserveMapper.updateById(comActReserveDO);
|
|
//新增用户答题记录
|
ComActReserveRecordDO userAnswerDO = new ComActReserveRecordDO();
|
userAnswerDO.setPhone(comActReserveCommitVO.getPhone());
|
userAnswerDO.setReserveId(questId);
|
userAnswerDO.setUserId(userId);
|
userAnswerDO.setType(comActReserveCommitVO.getType());
|
userAnswerDO.setCreateAt(nowDate);
|
userAnswerDO.setJsonObject(comActReserveCommitVO.getJsonObject());
|
userAnswerDO.setStatus(ComActReserveRecordDO.status.dcl);
|
comActReserveRecordMapper.insert(userAnswerDO);
|
//新增用户操作记录
|
ComActReserveOperationRecordDO comActReserveOperationRecordDO=new ComActReserveOperationRecordDO();
|
comActReserveOperationRecordDO.setReserveId(comActReserveCommitVO.getId());
|
comActReserveOperationRecordDO.setReserveRecordId(userAnswerDO.getId());
|
comActReserveOperationRecordDO.setType(ComActReserveOperationRecordDO.type.br);
|
comActReserveOperationRecordDO.setReserveTime(DateUtil.date());
|
comActReserveOperationRecordDO.setReserveContent(COMMIT);
|
comActReserveOperationRecordDO.setPhone(comActReserveCommitVO.getPhone());
|
comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.ytj);
|
comActReserveOperationRecordDO.setUserId(comActReserveCommitVO.getUserId());
|
comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO);
|
}
|
}
|
}
|
|
}
|
|
}
|
return R.fail("参数错误");
|
}
|
|
@Override
|
public R pageReserveList(PageUserReserveDTO pageUserReserveDTO) {
|
return R.ok(comActReserveRecordMapper.pageReserveList(new Page<ComActReserveDO>(pageUserReserveDTO.getPageNum(), pageUserReserveDTO.getPageSize()),pageUserReserveDTO));
|
}
|
}
|