package com.panzhihua.service_community.service.impl; import java.math.BigDecimal; import java.net.URL; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.List; import javax.annotation.Resource; import javax.xml.bind.DatatypeConverter; import com.panzhihua.common.model.vos.community.bigscreen.BigScreenStaticsReserve; import com.panzhihua.common.model.vos.community.bigscreen.BigScreenStaticsReserveMonth; import com.panzhihua.common.model.vos.community.reserve.*; import com.panzhihua.service_community.dao.ComActReserveMapper; import com.panzhihua.service_community.dao.ComActReserveRecordMapper; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; 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.panzhihua.common.model.dtos.community.QuestnaireAnswersDTO; import com.panzhihua.common.model.dtos.community.reserve.PageReserveRegisterDetailedAdminDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActQuestnaireAnswerContentVO; import com.panzhihua.common.model.vos.community.ComActQuestnaireSubVO; import com.panzhihua.common.model.vos.community.reserve.ComActReserveRegisterDetailedAnswerVO; import com.panzhihua.common.model.vos.community.reserve.ComActReserveRegisterDetailedVO; import com.panzhihua.common.model.vos.community.reserve.HomeQuarantineRegisterStatisticsVO; import com.panzhihua.common.utlis.DateUtils; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.service_community.dao.ComActReserveAnswerContentMapper; import com.panzhihua.service_community.dao.ComActReserveSubMapper; import com.panzhihua.service_community.model.dos.ComActReserveAnswerContentDO; import com.panzhihua.service_community.model.dos.ComActReserveSubDO; import com.panzhihua.service_community.service.ComActReserveAnswerContentService; import lombok.extern.slf4j.Slf4j; /** * @auther lyq * @create 2021-08-23 10:33:32 * @describe 预约登记回答记录内容 服务实现类 */ @Slf4j @Service public class ComActReserveAnswerContentServiceImpl extends ServiceImpl implements ComActReserveAnswerContentService { @Resource private ComActReserveSubMapper comActReserveSubMapper; @Resource private ComActReserveRecordMapper comActReserveRecordMapper; @Resource private ComActReserveMapper comActReserveMapper; /** * 导出登记明细数据 * @param pageReserveRegisterDetailedAdminDTO 登记id * @return 登记明细数据 */ @Override public R exportRegisterAdmin(PageReserveRegisterDetailedAdminDTO pageReserveRegisterDetailedAdminDTO){ QuestnaireAnswersDTO result = new QuestnaireAnswersDTO(); result.setSubs(retrieveQuestnaireSub(pageReserveRegisterDetailedAdminDTO)); //查询用户回答 List vos = this.baseMapper.export(pageReserveRegisterDetailedAdminDTO); vos.forEach(vo->{ if(vo.getType()==4){ vo.setAnswerContent(vo.getAnswerContent().replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*")); } }); result.setAnswers(vos); return R.ok(result); } /** * 分页查询登记明细列表 * @param detailedAdminDTO 请求参数 * @return 登记明细列表 */ @Override public R registerDetailedListAdmin(PageReserveRegisterDetailedAdminDTO detailedAdminDTO){ IPage> resultPage = new Page<>(); IPage registerDetailedPage = this.baseMapper.pageRegisterDetailedListAdmin(new Page(detailedAdminDTO.getPageNum(),detailedAdminDTO.getPageSize()),detailedAdminDTO); resultPage.setCurrent(registerDetailedPage.getCurrent()); resultPage.setTotal(registerDetailedPage.getTotal()); resultPage.setSize(registerDetailedPage.getSize()); resultPage.setPages(registerDetailedPage.getPages()); List> resultMapList = new ArrayList<>(); int nub = 1; if(!registerDetailedPage.getRecords().isEmpty()){ for (ComActReserveRegisterDetailedVO registerDetailed:registerDetailedPage.getRecords()) { //渲染序号 HashMap map = new HashMap<>(); map.put("nub",nub + ""); //渲染登记时间 map.put("time", DateUtils.format(registerDetailed.getCreateAt(),DateUtils.ymdhms_format)); //渲染用户昵称 map.put("nickName",registerDetailed.getNickName()); //查询记录填写答案并装载到数据集中 List registerDetailedAnswerList = this.baseMapper.getRegisterDetailedAnswerList(registerDetailed.getId()); if(!registerDetailedAnswerList.isEmpty()){ for (ComActReserveRegisterDetailedAnswerVO detailed:registerDetailedAnswerList) { if(detailed.getType()==4){ detailed.setAnswerContent(detailed.getAnswerContent().replaceAll("(?<=\\w{3})\\w(?=\\w{4})", "*")); } if(!detailed.getType().equals(5)){ if(detailed.getType().equals(1)){ String key = detailed.getReserveSubId() + ""; String value = map.get(key); if(StringUtils.isNotEmpty(value)){ value = value + "," + detailed.getAnswerContent(); }else{ value = detailed.getAnswerContent(); } map.put(key,value); }else{ map.put(detailed.getReserveSubId() + "",detailed.getAnswerContent()); } } } } //渲染登记流水号 map.put("id",registerDetailed.getId() + ""); resultMapList.add(map); nub++; } } resultPage.setRecords(resultMapList); return R.ok(resultPage); } @Override public R registerDetailedListAdminExport(PageReserveRegisterDetailedAdminDTO detailedAdminDTO) { String communityPhone=comActReserveMapper.selectCommunityPhoneByReserveId(detailedAdminDTO.getReserveId()); List comActReserveRegisterDetailedVOS = this.baseMapper.pageRegisterDetailedListAdminExport(detailedAdminDTO); if(!comActReserveRegisterDetailedVOS.isEmpty()){ List reservePdfExportVOS=new ArrayList<>(); comActReserveRegisterDetailedVOS.forEach(comActReserveRegisterDetailedVO -> { List registerDetailedAnswerList = this.baseMapper.getRegisterDetailedAnswerList(comActReserveRegisterDetailedVO.getId()); if(!registerDetailedAnswerList.isEmpty()){ ReservePdfExportVO reservePdfExportVO=new ReservePdfExportVO(); reservePdfExportVO.setAddress(registerDetailedAnswerList.get(0).getAnswerContent()); reservePdfExportVO.setSign(registerDetailedAnswerList.get(1).getAnswerContent()); if(detailedAdminDTO.getPdfType()==1){ reservePdfExportVO.setTime(registerDetailedAnswerList.get(2).getAnswerContent()); } if(detailedAdminDTO.getPdfType()==2){ reservePdfExportVO.setPhone(registerDetailedAnswerList.get(2).getAnswerContent()); reservePdfExportVO.setTime(registerDetailedAnswerList.get(3).getAnswerContent()); reservePdfExportVO.setCommunityPhone(communityPhone); } reservePdfExportVOS.add(reservePdfExportVO); } }); return R.ok(reservePdfExportVOS); } return R.ok(); } /** * 分页查询居家隔离统计 * @param detailedAdminDTO * @return */ @Override public R pageRegisterHomeQuarantine(PageReserveRegisterDetailedAdminDTO detailedAdminDTO) { IPage> resultPage = new Page<>(); Page page = new Page(detailedAdminDTO.getPageNum(), detailedAdminDTO.getPageSize()); IPage statisticsVOIPage = this.baseMapper.pageRegisterHomeQuarantine(page, detailedAdminDTO); resultPage.setCurrent(statisticsVOIPage.getCurrent()); resultPage.setTotal(statisticsVOIPage.getTotal()); resultPage.setSize(statisticsVOIPage.getSize()); resultPage.setPages(statisticsVOIPage.getPages()); List records = statisticsVOIPage.getRecords(); List> resultMapList = new ArrayList<>(); if (!records.isEmpty()) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); int nub = 1; for (String record : records) { //渲染序号 HashMap map = new HashMap<>(); map.put("nub", nub + ""); List statisticsList = this.baseMapper.selectStatistics(detailedAdminDTO.getReserveId(), record); StringBuffer conditions = new StringBuffer(); //渲染首次登记时间 map.put("time", DateUtils.format(statisticsList.get(0).getCreateAt(), DateUtils.ymdhms_format)); statisticsList.forEach(e -> { String reserveSubContent = e.getReserveSubContent(); String dateString = dateFormat.format(e.getCreateAt()); if (reserveSubContent.contains("今日上午体温(℃)")) { int index = conditions.indexOf(dateString + " " + "上午体温"); if (index == -1) { conditions.append(dateString + " " + "上午体温:" + e.getAnswerContent() + "℃" + "\n"); } else { conditions.replace(index, conditions.indexOf("℃", index), dateString + " " + "上午体温:" + e.getAnswerContent()); } } else if (reserveSubContent.contains("今日下午体温(℃)")) { int index = conditions.indexOf(dateString + " " + "下午体温"); if (index == -1) { conditions.append(dateString + " " + "下午体温:" + e.getAnswerContent() + "℃" + "\n"); } else { conditions.replace(index, conditions.indexOf("℃", index), dateString + " " + "下午体温:" + e.getAnswerContent()); } } else if (reserveSubContent.contains("隔离情况")) { int index = conditions.indexOf(dateString + " " + "当日隔离情况"); if (index == -1) { conditions.append(dateString + " " + "当日隔离情况:" + e.getAnswerContent() + "\n"); conditions.append("————————" + "\n"); } else { conditions.replace(index, conditions.indexOf("\n", index), dateString + " " + "当日隔离情况:" + e.getAnswerContent()); } } else { map.put(e.getReserveSubId() + "", e.getAnswerContent()); } }); map.put("isolation", conditions.toString()); resultMapList.add(map); nub++; } } resultPage.setRecords(resultMapList); return R.ok(resultPage); } /** * 居家隔离导出 * @param detailedAdminDTO * @return */ @Override public R exportHomeQuarantine(PageReserveRegisterDetailedAdminDTO detailedAdminDTO) { HomeQuarantineRegisterExportVO exportVO = new HomeQuarantineRegisterExportVO(); //题目 exportVO.setSubs(retrieveQuestnaireSub(detailedAdminDTO)); //结果数据集合 List> resultList = new ArrayList<>(); List idCards = this.baseMapper.exportHomeQuarantine(detailedAdminDTO); if (!idCards.isEmpty()) { SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); for (String idCard : idCards) { //构建单个用户数据 List userData = new ArrayList<>(); List statisticsList = this.baseMapper.selectStatistics(detailedAdminDTO.getReserveId(), idCard); HomeQuarantineRegisterStatisticsVO firstStatisticsVO = statisticsList.get(0); userData.add(firstStatisticsVO.getNickName()); userData.add(DateUtils.format(firstStatisticsVO.getCreateAt(), DateUtils.ymdhms_format)); int size = statisticsList.size(); List lastStatisticsVOList = statisticsList.subList(size - 13, size); for (HomeQuarantineRegisterStatisticsVO statisticsVO : lastStatisticsVOList) { //判断当前的组件类型是否是图片上传,导出时需要导出图片 if (statisticsVO.getOptionType().equals(11)) { try { userData.add(new URL(statisticsVO.getAnswerContent())); } catch (Exception e) { userData.add(" "); log.error("导出转换图片失败!"); } continue; } //判断当前组件类型是否签名 if (statisticsVO.getOptionType().equals(12)) { try { userData.add(DatatypeConverter.parseBase64Binary(statisticsVO.getAnswerContent().substring(statisticsVO.getAnswerContent().indexOf(",") + 1))); } catch (Exception e) { userData.add(" "); log.error("导出转换图片失败!"); } continue; } userData.add(statisticsVO.getAnswerContent()); } StringBuffer conditions = new StringBuffer(); statisticsList.forEach(e -> { String reserveSubContent = e.getReserveSubContent(); String dateString = dateFormat.format(e.getCreateAt()); if (reserveSubContent.contains("今日上午体温(℃)")) { int index = conditions.indexOf(dateString + " " + "上午体温"); if (index == -1) { conditions.append(dateString + " " + "上午体温:" + e.getAnswerContent() + "℃" + "\n"); } else { conditions.replace(index, conditions.indexOf("℃", index), dateString + " " + "上午体温:" + e.getAnswerContent()); } } else if (reserveSubContent.contains("今日下午体温(℃)")) { int index = conditions.indexOf(dateString + " " + "下午体温"); if (index == -1) { conditions.append(dateString + " " + "下午体温:" + e.getAnswerContent() + "℃" + "\n"); } else { conditions.replace(index, conditions.indexOf("℃", index), dateString + " " + "下午体温:" + e.getAnswerContent()); } } else if (reserveSubContent.contains("隔离情况")) { int index = conditions.indexOf(dateString + " " + "当日隔离情况"); if (index == -1) { conditions.append(dateString + " " + "当日隔离情况:" + e.getAnswerContent() + "\n"); conditions.append("————————" + "\n"); } else { conditions.replace(index, conditions.indexOf("\n", index), dateString + " " + "当日隔离情况:" + e.getAnswerContent()); } } }); userData.add(conditions.toString()); resultList.add(userData); } } exportVO.setDataList(resultList); return R.ok(exportVO); } @Override public R bigScreenStaticsReserve(Long communityId) { BigScreenStaticsReserve bigScreenStaticsReserve=comActReserveRecordMapper.biggestScreen(communityId); bigScreenStaticsReserve.setReservePercent(BigDecimal.valueOf(bigScreenStaticsReserve.getReserveCount()*100d/ bigScreenStaticsReserve.getCount()).setScale(2,BigDecimal.ROUND_HALF_UP)); bigScreenStaticsReserve.setFirePercent(BigDecimal.valueOf(bigScreenStaticsReserve.getFireCount()*100d/ bigScreenStaticsReserve.getCount()).setScale(2,BigDecimal.ROUND_HALF_UP)); bigScreenStaticsReserve.setHomePercent(BigDecimal.valueOf(bigScreenStaticsReserve.getHomeCount()*100d/ bigScreenStaticsReserve.getCount()).setScale(2,BigDecimal.ROUND_HALF_UP)); bigScreenStaticsReserve.setGasPercent(BigDecimal.valueOf(bigScreenStaticsReserve.getGasCount()*100d/ bigScreenStaticsReserve.getCount()).setScale(2,BigDecimal.ROUND_HALF_UP)); List bigScreenStaticsReserveMonthList=this.getPoints(); bigScreenStaticsReserveMonthList.forEach(bigScreenStaticsReserveMonth -> { BigScreenStaticsReserveMonth bigScreenStaticsReserveMonth1=comActReserveRecordMapper.biggestScreenMonth(communityId,bigScreenStaticsReserveMonth.getX(), bigScreenStaticsReserveMonth.getYear()); bigScreenStaticsReserveMonth.setCount(bigScreenStaticsReserveMonth1.getCount()); bigScreenStaticsReserveMonth.setReserveCount(bigScreenStaticsReserveMonth1.getReserveCount()); bigScreenStaticsReserveMonth.setFireCount(bigScreenStaticsReserveMonth1.getFireCount()); bigScreenStaticsReserveMonth.setGasCount(bigScreenStaticsReserveMonth1.getGasCount()); bigScreenStaticsReserveMonth.setHomeCount(bigScreenStaticsReserveMonth1.getHomeCount()); }); bigScreenStaticsReserve.setBigScreenStaticsReserveMonthList(bigScreenStaticsReserveMonthList); return R.ok(bigScreenStaticsReserve); } private List retrieveQuestnaireSub(PageReserveRegisterDetailedAdminDTO detailedAdminDTO) { //查询题目 List list = comActReserveSubMapper.selectList(new QueryWrapper().lambda() .eq(ComActReserveSubDO::getReserveId, detailedAdminDTO.getReserveId()).orderByAsc(ComActReserveSubDO::getCreateAt).orderByAsc(ComActReserveSubDO::getId)); List listSubVo = new ArrayList<>(); list.forEach(subDo -> { if(!subDo.getType().equals(5)){ ComActQuestnaireSubVO comActQuestnaireSubVO = new ComActQuestnaireSubVO(); BeanUtils.copyProperties(subDo, comActQuestnaireSubVO); listSubVo.add(comActQuestnaireSubVO); } }); return listSubVo; } public List getPoints(){ List bigScreenStaticsReserveMonths=new ArrayList<>(); String nowMonth=DateUtils.getDateFormatString(new Date(),"MM"); String nowYear=DateUtils.getDateFormatString(new Date(),"yyyy"); String nowYearMonth=DateUtils.getDateFormatString(new Date(),"yyyyMM"); if(Integer.parseInt(nowYearMonth)<202212){ for(int i=9;i<=12;i++){ String aDate=""; if(i<10){ aDate = "0"+i; } else { aDate=i+""; } BigScreenStaticsReserveMonth bigScreenStaticsReserveMonth=new BigScreenStaticsReserveMonth(); bigScreenStaticsReserveMonth.setYear("2021"); bigScreenStaticsReserveMonth.setX(aDate); bigScreenStaticsReserveMonths.add(bigScreenStaticsReserveMonth); } } if(Integer.parseInt(nowYear)>2021){ for(int i=1;i<=Integer.parseInt(nowMonth);i++){ if(bigScreenStaticsReserveMonths.size()>=12){ bigScreenStaticsReserveMonths.remove(0); } String aDate=""; if(i<10){ aDate = "0"+i; } else { aDate=i+""; } BigScreenStaticsReserveMonth bigScreenStaticsReserveMonth=new BigScreenStaticsReserveMonth(); bigScreenStaticsReserveMonth.setX(aDate); bigScreenStaticsReserveMonth.setYear(nowYear); bigScreenStaticsReserveMonths.add(bigScreenStaticsReserveMonth); } } return bigScreenStaticsReserveMonths; } }