package com.panzhihua.service_community.service.impl; 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; import java.util.Date; import java.util.List; import javax.annotation.Resource; import com.panzhihua.service_community.util.RSAUtils; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; 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.PageUserReserveDTO; import com.panzhihua.common.model.dtos.community.reserve.*; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActReserveCommitVO; import com.panzhihua.common.model.vos.community.bigscreen.IndexBackReserve; import com.panzhihua.common.model.vos.community.bigscreen.IndexReserve; 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.*; import com.panzhihua.common.utlis.Snowflake; import com.panzhihua.common.utlis.StringUtils; 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.ComActReserveRecordService; import com.panzhihua.service_community.service.ComActReserveService; import com.panzhihua.service_community.service.ComActReserveSubSelectionService; import cn.hutool.core.date.DateUtil; import lombok.extern.slf4j.Slf4j; /** * @auther lyq * @create 2021-08-23 10:33:11 * @describe 预约登记表服务实现类 */ @Slf4j @Service public class ComActReserveServiceImpl extends ServiceImpl 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; @Resource private ComActReserveSubSelectionService comActReserveSubSelectionService; @Resource private ComActReserveRecordService comActReserveRecordService; @Resource private ComMngPopulationDAO comMngPopulationDAO; @Resource private ComMngPopulationHouseDAO comMngPopulationHouseDAO; @Resource private ComMngPopulationCommunityTagsDAO comMngPopulationCommunityTagsDAO; @Resource private ComMngPopulationHouseUserDAO comMngPopulationHouseUserDAO; @Value("${domain.aesKey:}") private String aesKey; private final static String COMMIT="用户已提交"; @Override @Transactional public R commit(ComActReserveCommitVO comActReserveCommitVO) { if(comActReserveCommitVO!=null){ ComMngPopulationHouseDO comMngPopulationHouseDO=new ComMngPopulationHouseDO(); Long userId=comActReserveCommitVO.getUserId(); Date nowDate=DateUtil.date(); //查询预约登记记录 ComActReserveDO comActReserveDO=comActReserveMapper.selectById(comActReserveCommitVO.getId()); if(comActReserveDO!=null){ //查询当前用户是否已预约并判断是否能继续预约 if(comActReserveDO.getJoinAllCount()!=0){ Integer count=comActReserveRecordMapper.selectCount(new QueryWrapper() .eq("reserve_id",comActReserveCommitVO.getId()) .eq("status",ComActReserveRecordDO.status.cg)); if(count>=comActReserveDO.getJoinAllCount()){ return R.fail("预约已上限"); } } if(comActReserveCommitVO.getRecordId()!=null){ comActReserveRecordMapper.deleteById(comActReserveCommitVO.getRecordId()); comActReserveDO.setJoinCount(comActReserveDO.getJoinCount()-1); } List list=comActReserveRecordMapper.selectList(new QueryWrapper().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("提交失败,不可重复预约"); } else { List questnaiteSubVOS = JSON.parseArray(comActReserveCommitVO.getJsonObject(),QuestnaiteSubVO.class); if(!questnaiteSubVOS.isEmpty()){ String idCard=""; String houseId=""; String phone=""; Long questId=comActReserveCommitVO.getId(); List answerContentList=new ArrayList<>(); for(QuestnaiteSubVO questnaiteSub:questnaiteSubVOS){ //查询用户填写题目 ComActReserveSubDO questnaireSubDO = comActReserveSubMapper.selectOne(new QueryWrapper().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) || questnaiteSub.getType().equals(QuestnaiteSubVO.type.imgselect)){ //单选题处理 ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper() .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() .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.describe)&&!questnaiteSub.getType().equals(QuestnaiteSubVO.type.address)){ //问答题处理 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.card)){ idCard=questnaiteSub.getValues(); } if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.phone)){ phone=questnaiteSub.getValues(); } if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.address)){ houseId=questnaiteSub.getValues(); comMngPopulationHouseDO=comMngPopulationHouseDAO.selectById(houseId); ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO(); answerContentDO.setUserId(userId); answerContentDO.setCreateAt(nowDate); answerContentDO.setCreateBy(userId); answerContentDO.setReserveSubId(queSubId); answerContentDO.setType(2); if(comMngPopulationHouseDO!=null){ answerContentDO.setAnswerContent(comMngPopulationHouseDO.getAddress()); } else { answerContentDO.setAnswerContent(""); } answerContentList.add(answerContentDO); } } } if(!answerContentList.isEmpty()){ //判断实有人口情况 if(StringUtils.isNotEmpty(idCard)&&StringUtils.isNotEmpty(houseId)){ Integer count=comMngPopulationDAO.selectCount(new QueryWrapper().lambda().eq(ComMngPopulationDO::getCardNoStr,idCard)); if(count==0){ ComMngPopulationDO comMngPopulationDO=savePopulation(idCard); if(comMngPopulationHouseDO!=null){ comMngPopulationDO.setId(Snowflake.getId()); comMngPopulationDO.setAddress(comMngPopulationHouseDO.getAddress()); comMngPopulationDO.setActId(comMngPopulationHouseDO.getCommunityId()); comMngPopulationDO.setStreetId(comMngPopulationHouseDO.getStreetId()); comMngPopulationDO.setVillageId(comMngPopulationHouseDO.getVillageId()); comMngPopulationDO.setHouseId(comMngPopulationHouseDO.getId()); comMngPopulationDO.setOutOrLocal(1); comMngPopulationDO.setPhone(phone); comMngPopulationDO.setName(comActReserveCommitVO.getName()); comMngPopulationDO.setRoad(comMngPopulationHouseDO.getAlley()); comMngPopulationDO.setDoorNo(comMngPopulationHouseDO.getHouseNum()); comMngPopulationDO.setFloor(comMngPopulationHouseDO.getFloor()); comMngPopulationDO.setUnitNo(comMngPopulationHouseDO.getUnitNo()); comMngPopulationDO.setHouseNo(comMngPopulationHouseDO.getHouseNo()); comMngPopulationDAO.insert(comMngPopulationDO); ComMngPopulationCommunityTagsDO comMngPopulationCommunityTagsDO=new ComMngPopulationCommunityTagsDO(); comMngPopulationCommunityTagsDO.setCommunityId(comMngPopulationDO.getActId()); comMngPopulationCommunityTagsDO.setPopulationId(comMngPopulationDO.getId()); comMngPopulationCommunityTagsDO.setId(Snowflake.getId()); comMngPopulationCommunityTagsDO.setCreateAt(new Date()); comMngPopulationCommunityTagsDAO.insert(comMngPopulationCommunityTagsDO); ComMngPopulationHouseUserDO comMngPopulationHouseUserDO=new ComMngPopulationHouseUserDO(); comMngPopulationHouseUserDO.setId(Snowflake.getId()); comMngPopulationHouseUserDO.setPopulId(comMngPopulationDO.getId()); comMngPopulationHouseUserDO.setHouseId(Long.parseLong(houseId)); comMngPopulationHouseUserDO.setRelation(1); comMngPopulationHouseUserDO.setRelationId(1); comMngPopulationHouseUserDO.setResidence(1); comMngPopulationHouseUserDO.setCreateAt(new Date()); comMngPopulationHouseUserDAO.insert(comMngPopulationHouseUserDO); } } } //更新回答用户数量 Integer joinCount = comActReserveDO.getJoinCount(); comActReserveDO.setJoinCount(joinCount != null ? joinCount + 1 : 1); 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()); userAnswerDO.setUserId(userId); userAnswerDO.setType(comActReserveCommitVO.getType()); userAnswerDO.setCreateAt(nowDate); userAnswerDO.setJsonObject(comActReserveCommitVO.getJsonObject()); if(comActReserveCommitVO.getType()==ComActReserveRecordDO.type.yy){ userAnswerDO.setStatus(ComActReserveRecordDO.status.dcl); } else { userAnswerDO.setStatus(ComActReserveRecordDO.status.cg); } comActReserveRecordService.saveOrUpdate(userAnswerDO); //给答题记录赋值预约登记记录id answerContentList.forEach(answerContent -> { answerContent.setReserveRecordId(userAnswerDO.getId()); }); comActReserveAnswerContentService.saveBatch(answerContentList); //新增用户操作记录 ComActReserveOperationRecordDO comActReserveOperationRecordDO=new ComActReserveOperationRecordDO(); comActReserveOperationRecordDO.setReserveId(comActReserveCommitVO.getId()); comActReserveOperationRecordDO.setReserveRecordId(userAnswerDO.getId()); comActReserveOperationRecordDO.setType(ComActReserveOperationRecordDO.type.br); comActReserveOperationRecordDO.setCreateAt(DateUtil.date()); comActReserveOperationRecordDO.setReserveTime(comActReserveCommitVO.getReserveTime()); comActReserveOperationRecordDO.setReserveContent(COMMIT); comActReserveOperationRecordDO.setPhone(comActReserveCommitVO.getPhone()); comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.ytj); comActReserveOperationRecordDO.setUserId(comActReserveCommitVO.getUserId()); comActReserveOperationRecordDO.setRemark(comActReserveCommitVO.getContent()); comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO); return R.ok("提交成功"); } } } } } return R.fail("参数错误"); } @Override public R commitNoToken(ComActReserveCommitVO comActReserveCommitVO) { if(comActReserveCommitVO!=null){ ComActReserveDO comActReserveDO=new ComActReserveDO(); Date nowDate=DateUtil.date(); //查询预约登记记录 List list=comActReserveMapper.selectList(new QueryWrapper().lambda().eq(ComActReserveDO::getCommunityId,comActReserveCommitVO.getCommunityId()).eq(ComActReserveDO::getTitle,"返攀登记")); if(!list.isEmpty()){ comActReserveDO=list.get(0); } comActReserveCommitVO.setId(comActReserveDO.getId()); if(comActReserveDO!=null){ List questnaiteSubVOS = JSON.parseArray(comActReserveCommitVO.getJsonObject(),QuestnaiteSubVO.class); if(!questnaiteSubVOS.isEmpty()){ Long questId=comActReserveCommitVO.getId(); List answerContentList=new ArrayList<>(); for(QuestnaiteSubVO questnaiteSub:questnaiteSubVOS){ //查询用户填写题目 ComActReserveSubDO questnaireSubDO = comActReserveSubMapper.selectOne(new QueryWrapper().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.phone)||questnaiteSub.getType().equals(QuestnaiteSubVO.type.name)||questnaiteSub.getType().equals(QuestnaiteSubVO.type.card)){ try { questnaiteSub.setValues(RSAUtils.decrypt(questnaiteSub.getValues(),"MIICeAIBADANBgkqhkiG9w0BAQEFAASCAmIwggJeAgEAAoGBAJJuFUH/4m9H5hCCzxtd9BxpjWlG9gbejqiJpV0XJKaU1V7xDBJasswxPY7Zc15RoxWClPoKPwKrbWKm49dgBJebJq5xd4sLCSbboxRkKxpRiJHMZ4LJjYa5h9Ei9RyfoUzqGHqH4UrDy3m3IwPiP19cIBqoU50shyQf92ZpcGZhAgMBAAECgYEAiadU8pODoUs82x6tZbPALQmJN4PO+wwznfqv6sA74yGdKECAMazz0oMjtGt1SiCCqFD2jcweCftvvELZg3mvNg1V0vRQRD1ZCA8HDp8DXm20d11K3+RX39tR4KgyyM3HsSEhkUDujMxKIpYjyiB5iEtV7Ja9bZ2fROszq+mUIqUCQQDQQf6vWRMLBqfnDcU77vuDGOhXbjkF2ytLxLW3fbKaW3GWvC3n93zPM+mcvWSXgkl448+jFjpMktm1Vn+w+YX3AkEAs/+bbRbod6AcVbLu8C5E44qDRoRpu+LF7Cphp8tlSAIRjm2yGP5acMWGRUtH9MF2QJYPF0PgDzdmUSVqWnCAZwJBALnSuRri4wAKn1SmT+ALfLZcSiyBODZGeppv2ijw6qWahH8YR+ncRaxoyMFHqPMbmM1akJIXqktbGREaLnPOIb8CQQCdJycJaL3Qa98xR4dr9cm5rF6PO96g5w6M8jfO6ztjUkMHymh7f99wpFRlvaN2Y06edyV315ARWPohEPy5N44zAkBlLuDHLm1TkTTAfdlL5r2OcdjpaJYloTdn05Mp3+J+w1zTX8k6Mz8lFZtLUcoMeTfQ9rm/+u2KwxS8NljtSZWH")); } catch (Exception e) { e.printStackTrace(); } } //根据上传的类型查询不同的题目选项 if(questnaiteSub.getType().equals(QuestnaiteSubVO.type.danxuan) || questnaiteSub.getType().equals(QuestnaiteSubVO.type.imgselect)){ //单选题处理 ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper() .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.setCreateAt(nowDate); 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() .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.setCreateAt(nowDate); 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.describe)){ //问答题处理 String values = questnaiteSub.getValues(); ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO(); answerContentDO.setCreateAt(nowDate); answerContentDO.setReserveSubId(queSubId); answerContentDO.setType(2); answerContentDO.setAnswerContent(values); answerContentList.add(answerContentDO); } } } if(!answerContentList.isEmpty()){ //更新回答用户数量 Integer joinCount = comActReserveDO.getJoinCount(); comActReserveDO.setJoinCount(joinCount != null ? joinCount + 1 : 1); comActReserveMapper.updateById(comActReserveDO); //新增用户答题记录 ComActReserveRecordDO userAnswerDO = new ComActReserveRecordDO(); userAnswerDO.setContent(comActReserveCommitVO.getContent()!=null?comActReserveCommitVO.getContent():""); userAnswerDO.setName(comActReserveCommitVO.getName()!=null?comActReserveCommitVO.getName():""); userAnswerDO.setCommunityId(comActReserveCommitVO.getCommunityId()); userAnswerDO.setPhone(comActReserveCommitVO.getPhone()!=null?comActReserveCommitVO.getPhone():""); userAnswerDO.setReserveId(questId); userAnswerDO.setReserveTime(comActReserveCommitVO.getReserveTime()!=null?comActReserveCommitVO.getReserveTime():new Date()); userAnswerDO.setType(comActReserveCommitVO.getType()!=null? comActReserveCommitVO.getType() : 2); userAnswerDO.setCreateAt(nowDate); userAnswerDO.setJsonObject(comActReserveCommitVO.getJsonObject()); userAnswerDO.setStatus(ComActReserveRecordDO.status.cg); comActReserveRecordService.saveOrUpdate(userAnswerDO); //给答题记录赋值预约登记记录id answerContentList.forEach(answerContent -> { answerContent.setReserveRecordId(userAnswerDO.getId()); }); comActReserveAnswerContentService.saveBatch(answerContentList); //新增用户操作记录 ComActReserveOperationRecordDO comActReserveOperationRecordDO=new ComActReserveOperationRecordDO(); comActReserveOperationRecordDO.setReserveId(comActReserveCommitVO.getId()); comActReserveOperationRecordDO.setReserveRecordId(userAnswerDO.getId()); comActReserveOperationRecordDO.setType(ComActReserveOperationRecordDO.type.br); comActReserveOperationRecordDO.setCreateAt(DateUtil.date()); comActReserveOperationRecordDO.setReserveTime(comActReserveCommitVO.getReserveTime()); comActReserveOperationRecordDO.setReserveContent(COMMIT); //comActReserveOperationRecordDO.setPhone(comActReserveCommitVO.getPhone()); comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.ytj); //comActReserveOperationRecordDO.setRemark(comActReserveCommitVO.getContent()); comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO); return R.ok("提交成功"); } } } } return R.fail("参数错误"); } @Override public R homeQuarantineCommitNoToken(ComActReserveCommitVO comActReserveCommitVO) { if(comActReserveCommitVO!=null){ ComActReserveDO comActReserveDO=new ComActReserveDO(); Date nowDate=DateUtil.date(); //查询预约登记记录 List list=comActReserveMapper.selectList(new QueryWrapper().lambda().eq(ComActReserveDO::getCommunityId,comActReserveCommitVO.getCommunityId()).eq(ComActReserveDO::getTitle,"居家隔离")); if(!list.isEmpty()){ comActReserveDO=list.get(0); } comActReserveCommitVO.setId(comActReserveDO.getId()); if(comActReserveDO!=null){ List questnaiteSubVOS = JSON.parseArray(comActReserveCommitVO.getJsonObject(),QuestnaiteSubVO.class); if(!questnaiteSubVOS.isEmpty()){ Long questId=comActReserveCommitVO.getId(); List answerContentList=new ArrayList<>(); for(QuestnaiteSubVO questnaiteSub:questnaiteSubVOS){ //查询用户填写题目 ComActReserveSubDO questnaireSubDO = comActReserveSubMapper.selectOne(new QueryWrapper().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) || questnaiteSub.getType().equals(QuestnaiteSubVO.type.imgselect)){ //单选题处理 ComActReserveSubSelectionDO subSelectionDO = comActReserveSubSelectionMapper.selectOne(new QueryWrapper() .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.setCreateAt(nowDate); 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() .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.setCreateAt(nowDate); 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.describe)){ //问答题处理 String values = questnaiteSub.getValues(); ComActReserveAnswerContentDO answerContentDO = new ComActReserveAnswerContentDO(); answerContentDO.setCreateAt(nowDate); answerContentDO.setReserveSubId(queSubId); answerContentDO.setType(2); answerContentDO.setAnswerContent(values); answerContentList.add(answerContentDO); } } } if(!answerContentList.isEmpty()){ //更新回答用户数量 Integer joinCount = comActReserveDO.getJoinCount(); comActReserveDO.setJoinCount(joinCount != null ? joinCount + 1 : 1); comActReserveMapper.updateById(comActReserveDO); //新增用户答题记录 ComActReserveRecordDO userAnswerDO = new ComActReserveRecordDO(); userAnswerDO.setContent(comActReserveCommitVO.getContent()!=null?comActReserveCommitVO.getContent():""); userAnswerDO.setName(comActReserveCommitVO.getName()!=null?comActReserveCommitVO.getName():""); userAnswerDO.setCommunityId(comActReserveCommitVO.getCommunityId()); userAnswerDO.setPhone(comActReserveCommitVO.getPhone()!=null?comActReserveCommitVO.getPhone():""); userAnswerDO.setReserveId(questId); userAnswerDO.setReserveTime(comActReserveCommitVO.getReserveTime()!=null?comActReserveCommitVO.getReserveTime():new Date()); userAnswerDO.setType(comActReserveCommitVO.getType()!=null? comActReserveCommitVO.getType() : 2); userAnswerDO.setCreateAt(nowDate); userAnswerDO.setJsonObject(comActReserveCommitVO.getJsonObject()); userAnswerDO.setStatus(ComActReserveRecordDO.status.cg); comActReserveRecordService.saveOrUpdate(userAnswerDO); //给答题记录赋值预约登记记录id answerContentList.forEach(answerContent -> { answerContent.setReserveRecordId(userAnswerDO.getId()); }); comActReserveAnswerContentService.saveBatch(answerContentList); //新增用户操作记录 ComActReserveOperationRecordDO comActReserveOperationRecordDO=new ComActReserveOperationRecordDO(); comActReserveOperationRecordDO.setReserveId(comActReserveCommitVO.getId()); comActReserveOperationRecordDO.setReserveRecordId(userAnswerDO.getId()); comActReserveOperationRecordDO.setType(ComActReserveOperationRecordDO.type.br); comActReserveOperationRecordDO.setCreateAt(DateUtil.date()); comActReserveOperationRecordDO.setReserveTime(comActReserveCommitVO.getReserveTime()); comActReserveOperationRecordDO.setReserveContent(COMMIT); //comActReserveOperationRecordDO.setPhone(comActReserveCommitVO.getPhone()); comActReserveOperationRecordDO.setStatus(ComActReserveOperationRecordDO.status.ytj); //comActReserveOperationRecordDO.setRemark(comActReserveCommitVO.getContent()); comActReserveOperationRecordMapper.insert(comActReserveOperationRecordDO); return R.ok("提交成功"); } } } } return R.fail("参数错误"); } /** * 社区后台-分页查询预约登记列表 * @param pageReserveDTO 请求参数 * @return 预约登记列表 */ @Override public R pageReserveAdmin(PageReserveAdminDTO pageReserveDTO){ IPage reservePage = this.baseMapper.pageReserveAdmin(new Page(pageReserveDTO.getPageNum(),pageReserveDTO.getPageSize()),pageReserveDTO); reservePage.getRecords().forEach(reserve -> { //判断广告位置 StringBuilder sb = new StringBuilder(); if(reserve.getAdverPositionTop().equals(ComActQuestnaireDO.isOk.yes)){ sb.append("首页顶部,"); } if(reserve.getAdverPositionApplication().equals(ComActQuestnaireDO.isOk.yes)){ sb.append("首页应用,"); } String advertPosition = sb.toString(); if(advertPosition.length() > 0){ reserve.setAdvertPosition(advertPosition.substring(0,advertPosition.length()-1)); }else{ reserve.setAdvertPosition("无"); } }); return R.ok(reservePage); } /** * 社区后台-新增预约登记信息 * @param addReserveDTO 请求参数 * @return 新增结果 */ @Override @Transactional(rollbackFor = Exception.class) public R addReserveAdmin(AddReserveAdminDTO addReserveDTO){ Date nowDate = new Date(); Long userId = addReserveDTO.getUserId(); //新增预约登记信息 ComActReserveDO reserveDO = new ComActReserveDO(); BeanUtils.copyProperties(addReserveDTO,reserveDO); reserveDO.setStatus(ComActReserveDO.status.dfb); reserveDO.setCreateAt(nowDate); reserveDO.setCreateBy(userId); if(addReserveDTO.getIsPublish().equals(ComActReserveDO.isOk.yes)){ reserveDO.setStatus(ComActReserveDO.status.jxz); reserveDO.setPublishTime(nowDate); } this.baseMapper.insert(reserveDO); //根据上传的json数据录入选项以及题目到数据库 if(StringUtils.isEmpty(addReserveDTO.getJsonObject())){ return R.fail("组件json数据为空,录入失败"); } List reserveSubVOS = JSON.parseArray(addReserveDTO.getJsonObject(),QuestnaiteSubVO.class); reserveSubVOS.forEach(reserveSub -> { ComActReserveSubDO comActReserveSubDO = new ComActReserveSubDO(); comActReserveSubDO.setType(reserveSub.getType()); comActReserveSubDO.setContent(reserveSub.getLabel()); comActReserveSubDO.setSort(reserveSub.getSort()); comActReserveSubDO.setReserveId(reserveDO.getId()); comActReserveSubDO.setCreateBy(userId); comActReserveSubDO.setCreateAt(nowDate); comActReserveSubDO.setKey(reserveSub.getKey()); comActReserveSubMapper.insert(comActReserveSubDO); ArrayList subSelectionList = Lists.newArrayList(); if(reserveSub.getOptions() != null && !reserveSub.getOptions().isEmpty()) { List subOptions = reserveSub.getOptions(); for(int i=0; i reserveSubVOS = JSON.parseArray(editReserveDTO.getJsonObject(),QuestnaiteSubVO.class); if(reserveSubVOS.isEmpty()){ return R.fail("组件json数据为空,录入失败"); } reserveSubVOS.forEach(reserveSub -> { ComActReserveSubDO comActReserveSubDO = new ComActReserveSubDO(); comActReserveSubDO.setType(reserveSub.getType()); comActReserveSubDO.setContent(reserveSub.getLabel()); comActReserveSubDO.setSort(reserveSub.getSort()); comActReserveSubDO.setReserveId(reserveDO.getId()); comActReserveSubDO.setCreateBy(userId); comActReserveSubDO.setCreateAt(nowDate); comActReserveSubDO.setKey(reserveSub.getKey()); comActReserveSubMapper.insert(comActReserveSubDO); ArrayList subSelectionList = Lists.newArrayList(); if(reserveSub.getOptions() != null && !reserveSub.getOptions().isEmpty()) { List subOptions = reserveSub.getOptions(); for(int i=0; i 0){ return R.ok(); }else{ return R.fail(); } } /** * 社区后台-继续预约登记 * @param editReserveDTO 请求参数 * @return 修改结果 */ @Override public R editReserveInfoAdmin(EditComActReserveInfoDTO editReserveDTO){ Date nowDate = new Date(); Long userId = editReserveDTO.getUserId(); Long reserveId = editReserveDTO.getId(); //查询预约登记信息 ComActReserveDO reserveDO = this.baseMapper.selectById(reserveId); if(reserveDO == null){ return R.fail("未查询到预约登记记录"); } BeanUtils.copyProperties(editReserveDTO,reserveDO); reserveDO.setStatus(ComActReserveDO.status.jxz); reserveDO.setUpdateAt(nowDate); reserveDO.setUpdateBy(userId); reserveDO.setEndTime(null); if(this.baseMapper.updateById(reserveDO) > 0){ return R.ok(); }else{ return R.fail(); } } /** * 社区后台-根据预约登记id查询详情 * @param reserveId 预约登记id * @return 预约登记详情 */ @Override public R detailReserveAdmin(Long reserveId) { ComActReserveDetailAdminVO reserveDetailAdminVO = new ComActReserveDetailAdminVO(); //查询预约登记信息 ComActReserveDO reserveDO = this.baseMapper.selectById(reserveId); BeanUtils.copyProperties(reserveDO,reserveDetailAdminVO); return R.ok(reserveDetailAdminVO); } /** * 社区后台-根据社区id统计预约类数据 * @param makeStatisticsDTO 请求参数 * @return 统计预约类数据 */ @Override public R makeStatisticsAdmin(ComActReserveMakeStatisticsDTO makeStatisticsDTO){ Long communityId = makeStatisticsDTO.getCommunityId(); ComActReserveMakeStatisticsAdminVO makeStatisticsAdminVO = new ComActReserveMakeStatisticsAdminVO(); //查询预约登记统计汇总左边数据 List leftStatisticsList = this.baseMapper.getReserveMakeLeftStatistics(communityId); if(!leftStatisticsList.isEmpty()){ makeStatisticsAdminVO.setLeftStatisticsList(leftStatisticsList); } //查询预约登记统计汇总右边数据 List rightStatisticsList = getRightStatisticsList(makeStatisticsDTO); if(!rightStatisticsList.isEmpty()){ makeStatisticsAdminVO.setRightStatisticsList(rightStatisticsList); } return R.ok(makeStatisticsAdminVO); } /** * 社区后台-查询预约统计汇总右边数据 * @param makeStatisticsDTO 请求参数 * @return 预约统计汇总右边数据 */ private List getRightStatisticsList(ComActReserveMakeStatisticsDTO makeStatisticsDTO){ Long communityId = makeStatisticsDTO.getCommunityId(); //查询预约登记统计汇总右边数据 List rightStatisticsList = this.baseMapper.getReserveMakeRightStatistics(makeStatisticsDTO); if(!rightStatisticsList.isEmpty()){ rightStatisticsList.forEach(rightStatistics -> { String date = rightStatistics.getReserveTime(); Integer count = this.baseMapper.getReserveRecordCount(communityId,date + " 00:00:00",date + " 23:59:59"); rightStatistics.setAllCount(count); //计算百分比 BigDecimal tag = BigDecimal.ZERO; if(count >= 0){ tag = BigDecimal.valueOf(rightStatistics.getCount()).divide(BigDecimal.valueOf(count),2, RoundingMode.HALF_UP).multiply(BigDecimal.valueOf(100)); } rightStatistics.setTag(tag); }); } return rightStatisticsList; } /** * 社区后台-查询导出预约统计汇总数据 * @param makeStatisticsDTO 请求参数 * @return 统计预约类数据 */ @Override public R makeStatisticsExportAdmin(ComActReserveMakeStatisticsDTO makeStatisticsDTO){ return R.ok(getRightStatisticsList(makeStatisticsDTO)); } /** * 删除预约登记信息 * @param reserveId 预约登记id * @return 删除结果 */ @Override public R deleteReserveAdmin(Long reserveId){ //查询预约登记信息 ComActReserveDO reserveDO = this.baseMapper.selectById(reserveId); if(reserveDO == null){ return R.fail("未查询到预约登记信息"); } reserveDO.setIsDel(ComActReserveDO.isOk.yes); reserveDO.setUpdateAt(new Date()); if(this.baseMapper.updateById(reserveDO) > 0){ return R.ok(); }else{ return R.fail(); } } /** * 查询社区所有预约信息列表 * @param communityId 社区id * @return 预约信息列表 */ @Override public R listReserveAdmin(Long communityId){ return R.ok(this.baseMapper.listReserveAdmin(communityId)); } @Override 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(); if(isBack!=1){ comActReserveDO.setViewNum(comActReserveDO.getViewNum()+1); BeanUtils.copyProperties(comActReserveDO,comActReserveDetailVO); List list=comActReserveRecordMapper.selectList(new QueryWrapper().eq("user_id",userId).eq("reserve_id",id).in("status",1,2).orderByDesc("create_at")); List secondlist=comActReserveRecordMapper.selectList(new QueryWrapper().eq("user_id",userId).eq("reserve_id",id).orderByDesc("create_at")); //判断当前数据是否可重复提交 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); } ComActReserveRecordDO comActReserveRecordDO =comActReserveRecordMapper.selectById(recordId); if(comActReserveRecordDO!=null){ BeanUtils.copyProperties(comActReserveRecordDO,comActReserveDetailVO); } //更新浏览量 comActReserveMapper.updateById(comActReserveDO); return R.ok(comActReserveDetailVO); } return R.fail("未查询到数据"); } @Override public R pageReserveList(PageUserReserveDTO pageUserReserveDTO) { IPage ipage = comActReserveRecordMapper.pageReserveList(new Page<>(pageUserReserveDTO.getPageNum(), pageUserReserveDTO.getPageSize()),pageUserReserveDTO); OperationDetailDTO operationDetailDTO = new OperationDetailDTO(); ipage.getRecords().forEach(page -> { operationDetailDTO.setReserveRecordId(page.getId()); List 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)); } @Override public IndexReserve indexReserve(Long communityId) { List comActReserveDOS=this.comActReserveMapper.selectList(new QueryWrapper().lambda().eq(ComActReserveDO::getCommunityId,communityId).orderByDesc(ComActReserveDO::getCreateAt).like(ComActReserveDO::getTitle,"返攀登记").eq(ComActReserveDO::getStatus,ComActReserveDO.status.jxz)); if(!comActReserveDOS.isEmpty()){ IndexBackReserve indexBackReserve=new IndexBackReserve(); indexBackReserve.setCount(this.comActReserveRecordMapper.selectCount(new QueryWrapper().lambda().eq(ComActReserveRecordDO::getReserveId,comActReserveDOS.get(0).getId()))); } return null; } public ComMngPopulationDO savePopulation(String idCard){ ComMngPopulationDO comMngPopulationDO=new ComMngPopulationDO(); comMngPopulationDO.setDeath("1"); comMngPopulationDO.setCardNoStr(idCard); comMngPopulationDO.setCardNo(idCard); comMngPopulationDO.setSex(getSex(idCard)); comMngPopulationDO.setBirthday(getBirthday(idCard)); return comMngPopulationDO; } public Integer getSex(String idCard){ char c = idCard.charAt(idCard.length() - 2); Integer gender = Integer.parseInt(String.valueOf(c)); if(gender % 2 == 1){ return 1; }else{ return 2; } } public String getBirthday(String idCard){ return idCard.substring(6).substring(0, 4)+"-"+idCard.substring(10).substring(0, 2)+"-"+idCard.substring(12).substring(0,2); } 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(); } } } } }