101captain
2021-11-11 78d1c9ee9b0c49f77c29d0535cb93c6d62c42f3a
springcloud_k8s_panzhihuazhihuishequ/service_community/src/main/java/com/panzhihua/service_community/service/impl/ComActReserveServiceImpl.java
@@ -10,8 +10,10 @@
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.google.common.collect.Lists;
import com.panzhihua.common.model.dtos.community.OperationDetailDTO;
import com.panzhihua.common.model.dtos.community.reserve.*;
import com.panzhihua.common.model.vos.R;
import com.panzhihua.common.model.vos.community.ComActReserveIndexVo;
import com.panzhihua.common.model.vos.community.questnaire.QuestnaiteSubSelectionVO;
import com.panzhihua.common.model.vos.community.questnaire.QuestnaiteSubVO;
import com.panzhihua.common.model.vos.community.reserve.*;
@@ -35,6 +37,10 @@
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
@@ -83,6 +89,15 @@
            ComActReserveDO comActReserveDO=comActReserveMapper.selectById(comActReserveCommitVO.getId());
            if(comActReserveDO!=null){
                //查询当前用户是否已预约并判断是否能继续预约
                if(comActReserveDO.getJoinAllCount()!=0){
                    Integer count=comActReserveRecordMapper.selectCount(new QueryWrapper<ComActReserveRecordDO>()
                            .eq("reserve_id",comActReserveCommitVO.getId())
                            .eq("status",ComActReserveRecordDO.status.cg));
                    if(count>=comActReserveDO.getJoinAllCount()){
                        return R.fail("预约已上限");
                    }
                }
                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()&&list.size()>1&&comActReserveDO.getIsRepeat()==ComActReserveDO.isRepeat.no){
                    return R.fail("提交失败,不可重复预约");
@@ -103,7 +118,7 @@
                            Long queSubId = questnaireSubDO.getId();
                            //根据上传的类型查询不同的题目选项
                            if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.danxuan)){
                            if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.danxuan) || questnaiteSub.getType().equals(QuestnaiteSubVO.type.imgselect)){
                                //单选题处理
                                ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper<ComActReserveSubSelectionDO>()
@@ -148,16 +163,19 @@
                                    answerContentList.add(answerContentDO);
                                }
                            }else{
                                //问答题处理
                                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(!questnaiteSub.getType().equals(QuestnaiteSubVO.type.describe)){
                                    //问答题处理
                                    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()){
@@ -167,6 +185,9 @@
                            comActReserveMapper.updateById(comActReserveDO);
                            //新增用户答题记录
                            ComActReserveRecordDO userAnswerDO = new ComActReserveRecordDO();
                            userAnswerDO.setContent(comActReserveCommitVO.getContent());
                            userAnswerDO.setName(comActReserveCommitVO.getName());
                            userAnswerDO.setCommunityId(comActReserveCommitVO.getCommunityId());
                            userAnswerDO.setPhone(comActReserveCommitVO.getPhone());
                            userAnswerDO.setReserveId(questId);
                            userAnswerDO.setReserveTime(comActReserveCommitVO.getReserveTime());
@@ -198,6 +219,7 @@
                            comActReserveOperationRecordDO.setPhone(comActReserveCommitVO.getPhone());
                            comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.ytj);
                            comActReserveOperationRecordDO.setUserId(comActReserveCommitVO.getUserId());
                            comActReserveOperationRecordDO.setRemark(comActReserveCommitVO.getContent());
                            comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO);
                        return R.ok("提交成功");
                        }
@@ -295,6 +317,7 @@
                    subSelectionDO.setCreateAt(nowDate);
                    subSelectionDO.setType(subSelect.getType());
                    subSelectionDO.setKey(subSelect.getKey());
                    subSelectionDO.setUrl(subSelect.getUrl());
                    subSelectionList.add(subSelectionDO);
                }
            }
@@ -548,31 +571,44 @@
    }
    @Override
    public R getById(Long id,Long userId,Long recordId) {
    public R getById(Long id,Long userId,Long recordId,Integer isBack) {
        ComActReserveDO comActReserveDO=comActReserveMapper.selectById(id);
        if(comActReserveDO!=null){
            comActReserveDO.setViewNum(comActReserveDO.getViewNum()+1);
            ComActReserveDetailVO comActReserveDetailVO=new ComActReserveDetailVO();
            BeanUtils.copyProperties(comActReserveDO,comActReserveDetailVO);
            List<ComActReserveRecordDO> list=comActReserveRecordMapper.selectList(new QueryWrapper<ComActReserveRecordDO>().eq("user_id",userId).eq("reserve_id",id).in("status",1,2).orderByDesc("reserve_time"));
            List<ComActReserveRecordDO> secondlist=comActReserveRecordMapper.selectList(new QueryWrapper<ComActReserveRecordDO>().eq("user_id",userId).eq("reserve_id",id).orderByDesc("reserve_time"));
            //判断当前数据是否可重复提交
            if(comActReserveDO.getIsRepeat()==ComActReserveDetailVO.isOk.y||list.isEmpty()){
                comActReserveDetailVO.setIsOk(ComActReserveDetailVO.isOk.n);
            }else {
                comActReserveDetailVO.setIsOk(ComActReserveDetailVO.isOk.y);
            if(isBack!=1){
                comActReserveDO.setViewNum(comActReserveDO.getViewNum()+1);
                BeanUtils.copyProperties(comActReserveDO,comActReserveDetailVO);
                List<ComActReserveRecordDO> list=comActReserveRecordMapper.selectList(new QueryWrapper<ComActReserveRecordDO>().eq("user_id",userId).eq("reserve_id",id).in("status",1,2).orderByDesc("reserve_time"));
                List<ComActReserveRecordDO> secondlist=comActReserveRecordMapper.selectList(new QueryWrapper<ComActReserveRecordDO>().eq("user_id",userId).eq("reserve_id",id).orderByDesc("reserve_time"));
                //判断当前数据是否可重复提交
                if(comActReserveDO.getIsRepeat()==ComActReserveDetailVO.isOk.y||list.isEmpty()){
                    comActReserveDetailVO.setIsOk(ComActReserveDetailVO.isOk.n);
                }else {
                    comActReserveDetailVO.setIsOk(ComActReserveDetailVO.isOk.y);
                }
                //如果用户已提交返回最新一条记录 列表时间倒序排列
                if(!list.isEmpty()){
                    comActReserveDetailVO.setJsonObject(list.get(0).getJsonObject());
                    comActReserveDetailVO.setReserveTime(list.get(0).getReserveTime());
                }
                if(!secondlist.isEmpty()&&recordId!=null){
                    secondlist.forEach(comActReserveRecordDO -> {
                        if(comActReserveRecordDO.getId().equals(recordId)){
                            comActReserveDetailVO.setRecordStatus(comActReserveRecordDO.getStatus());
                        }
                    });
                }
                //更新浏览量
                comActReserveMapper.updateById(comActReserveDO);
                return R.ok(comActReserveDetailVO);
            }
            //如果用户已提交返回最新一条记录 列表时间倒序排列
            if(!list.isEmpty()){
                comActReserveDetailVO.setJsonObject(list.get(0).getJsonObject());
                comActReserveDetailVO.setReserveTime(list.get(0).getReserveTime());
            ComActReserveRecordDO comActReserveRecordDO =comActReserveRecordMapper.selectById(recordId);
            if(comActReserveRecordDO!=null){
                BeanUtils.copyProperties(comActReserveRecordDO,comActReserveDetailVO);
            }
            if(!secondlist.isEmpty()&&recordId!=null){
                secondlist.forEach(comActReserveRecordDO -> {
                    if(comActReserveRecordDO.getId().equals(recordId)){
                        comActReserveDetailVO.setRecordStatus(comActReserveRecordDO.getStatus());
                    }
                });
            }
            //更新浏览量
            comActReserveMapper.updateById(comActReserveDO);
            return R.ok(comActReserveDetailVO);
        }
        return R.fail("未查询到数据");
@@ -581,6 +617,57 @@
    @Override
    public R pageReserveList(PageUserReserveDTO pageUserReserveDTO) {
        return R.ok(comActReserveRecordMapper.pageReserveList(new Page<ComActReserveDO>(pageUserReserveDTO.getPageNum(), pageUserReserveDTO.getPageSize()),pageUserReserveDTO));
        IPage<ComActReserveAppletsVO> ipage = comActReserveRecordMapper.pageReserveList(new Page<>(pageUserReserveDTO.getPageNum(), pageUserReserveDTO.getPageSize()),pageUserReserveDTO);
        OperationDetailDTO operationDetailDTO = new OperationDetailDTO();
        ipage.getRecords().forEach(page -> {
            operationDetailDTO.setReserveRecordId(page.getId());
            List<ComOperationListVO> operationList = comActReserveRecordMapper.queryAll(operationDetailDTO);
            page.setOperationList(operationList);
        });
        return R.ok(ipage);
    }
    /**
     * 小程序查询所有进行中的预约登记
     * @param communityId   社区id
     * @return  社区所有进行中的预约登记列表
     */
    @Override
    public R reserveListApplets(Long communityId){
        return R.ok(this.baseMapper.getReserveIndexList(communityId));
    }
    public static void getFileByBytes(byte[] bytes, String filePath, String fileName) {
        BufferedOutputStream bos = null;
        FileOutputStream fos = null;
        File file = null;
        try {
            File dir = new File(filePath);
            if (!dir.exists()) {// 判断文件目录是否存在
                dir.mkdirs();
            }
            file = new File(filePath + fileName);
            fos = new FileOutputStream(file);
            bos = new BufferedOutputStream(fos);
            bos.write(bytes);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (bos != null) {
                try {
                    bos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (fos != null) {
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
}