package com.panzhihua.service_jinhui_community.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; 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.ComActWorkGuideDTO; import com.panzhihua.common.model.dtos.community.PageActWorkGuideDTO; import com.panzhihua.common.model.vos.R; import com.panzhihua.common.model.vos.community.ComActWorkGuideAppletsVO; import com.panzhihua.common.model.vos.community.ComActWorkGuideDetailAppletsVO; import com.panzhihua.common.model.vos.community.ComActWorkGuideMaterialVO; import com.panzhihua.common.model.vos.community.ComActWorkGuideVO; import com.panzhihua.common.model.vos.community.questnaire.QuestnaiteSubSelectionVO; import com.panzhihua.common.model.vos.community.questnaire.QuestnaiteSubVO; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.service_jinhui_community.dao.*; import com.panzhihua.service_jinhui_community.entity.*; import com.panzhihua.service_jinhui_community.model.dos.ComActDO; import com.panzhihua.service_jinhui_community.service.JinhuiComActWorkGuideService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; import java.util.stream.Collectors; /** * @auther llming * @describe 办事指南 */ @Service public class JinhuiComActWorkGuideServiceImpl extends ServiceImpl implements JinhuiComActWorkGuideService { static String AK = "W3x8DhCWKc2UFIwYgclpRBdL6BeGLLQt"; // 百度地图密钥 @Resource JinhuiComActWorkGuideMaterialDao workGuideMaterialDAO; @Resource private JinhuiComActWorkGuideClassifyDao comActWorkGuideClassifyDAO; @Resource ComActDAO comActDAO; @Resource private JinhuiComActQuestnaireSubDao questnaireSubDao; @Resource private JinhuiComActQuestnaireSubSelectionServiceImpl questnaireSubSelectionService; @Override public R addWorkGuide(ComActWorkGuideDTO workGuideDTO, String userId) { JinhuiComActWorkGuide comActWorkGuideDO = new JinhuiComActWorkGuide(); BeanUtils.copyProperties(workGuideDTO, comActWorkGuideDO); comActWorkGuideDO.setCreateBy(userId); comActWorkGuideDO.setCreateAt(new Date()); // 统计该调查问卷填报题目数量 int count = 0; List questnaiteSubVOS =null; if(!StringUtils.isEmpty(workGuideDTO.getJsonObject())) { questnaiteSubVOS= JSON.parseArray(workGuideDTO.getJsonObject(), QuestnaiteSubVO.class); if (questnaiteSubVOS!=null) { count = questnaiteSubVOS.size(); } } comActWorkGuideDO.setCount(count); // 保存办事指南材料 comActWorkGuideDO.getMaterials().forEach(material -> { JinhuiComActWorkGuideMaterial workGuideMaterialDO = new JinhuiComActWorkGuideMaterial(); workGuideMaterialDO.setMaterialName(material.getMaterialName()); workGuideMaterialDO.setWorkGuideId(comActWorkGuideDO.getId()); workGuideMaterialDAO.insert(workGuideMaterialDO); }); int quesCount = this.baseMapper.insert(comActWorkGuideDO); if (quesCount != 1) { return R.fail("创建失败"); } if (questnaiteSubVOS!=null) { questnaiteSubVOS.forEach(sub -> { JinhuiComActQuestnaireSub comActQuestnaireSubDO = new JinhuiComActQuestnaireSub(); comActQuestnaireSubDO.setType(sub.getType()+""); comActQuestnaireSubDO.setContent(sub.getLabel()); comActQuestnaireSubDO.setSort(sub.getSort()+""); comActQuestnaireSubDO.setQueId(comActWorkGuideDO.getId()); comActQuestnaireSubDO.setCreateBy(userId); comActQuestnaireSubDO.setKey(sub.getKey()); questnaireSubDao.insert(comActQuestnaireSubDO); ArrayList subSelectionList = Lists.newArrayList(); if (sub.getOptions() != null && !sub.getOptions().isEmpty()) { List subOptions = sub.getOptions(); for (int i = 0; i < subOptions.size(); i++) { QuestnaiteSubSelectionVO subSelect = subOptions.get(i); JinhuiComActQuestnaireSubSelection subSelectionDO = new JinhuiComActQuestnaireSubSelection(); subSelectionDO.setQueSubId(comActQuestnaireSubDO.getId()+""); if (subSelect.getType().equals(1)) { // 添加选项名称 subSelectionDO.setOptionName(subSelect.getOptionName()); } else { subSelectionDO.setOptionName(String.valueOf(Character.toChars('A' + i))); } subSelectionDO.setContent(subSelect.getLabel()); subSelectionDO.setQueId(comActWorkGuideDO.getId()); subSelectionDO.setCreateBy(userId); subSelectionDO.setType(subSelect.getType()+""); subSelectionDO.setKey(subSelect.getKey()); subSelectionDO.setUrl(subSelect.getUrl()); subSelectionList.add(subSelectionDO); } } questnaireSubSelectionService.saveBatch(subSelectionList); }); } return R.ok(); } @Override public R editWorkGuide(ComActWorkGuideDTO workGuideDTO, String userId) { if (workGuideDTO.getId() == 0L) { return R.fail("Id有误!"); } JinhuiComActWorkGuide workGuideDO = this.baseMapper.selectById(workGuideDTO.getId()); if (workGuideDO == null) { return R.fail("Id有误!"); } BeanUtils.copyProperties(workGuideDTO, workGuideDO); workGuideDO.setUpdateBy(userId+""); workGuideDO.setUpdateAt(new Date()); if (workGuideDTO.getMaterials().size() == 0) {// 若编辑材料为null,执行删除操作 workGuideMaterialDAO.delete(new LambdaQueryWrapper() .eq(JinhuiComActWorkGuideMaterial::getWorkGuideId, workGuideDTO.getId())); } else {// 若材料不为空,但是少了数据条数,也要执行删除 List workGuideMaterialDOS = workGuideMaterialDAO.selectList(new LambdaQueryWrapper() .eq(JinhuiComActWorkGuideMaterial::getWorkGuideId, workGuideDTO.getId())); // 1、筛选vo里面和db里,需要删除的材料数据 List voMaterialIds = workGuideDTO.getMaterials().stream().filter(materialVo -> materialVo.getId() != null) .map(ComActWorkGuideMaterialVO::getId).collect(Collectors.toList()); List deleteMaterialIds = workGuideMaterialDOS.stream() .filter(workGuideMaterialDO -> !voMaterialIds.contains(workGuideMaterialDO.getId())) .map(JinhuiComActWorkGuideMaterial::getId).collect(Collectors.toList()); if (deleteMaterialIds.size() != 0) { workGuideMaterialDAO.deleteBatchIds(deleteMaterialIds); } workGuideDTO.getMaterials().forEach(materialsVO -> { if (materialsVO.getId() != null && materialsVO.getId() != 0L) { JinhuiComActWorkGuideMaterial workGuideMaterialDO1 = workGuideMaterialDOS.stream() .filter(workGuideMaterialDO -> workGuideMaterialDO.getId().equals(materialsVO.getId())) .findFirst().orElse(null); if (workGuideMaterialDO1 != null) {// 2、如果db有,执行编辑 workGuideMaterialDO1.setMaterialName(materialsVO.getMaterialName()); workGuideMaterialDAO.updateById(workGuideMaterialDO1); } } else {// 3、如果db没有,执行新增 JinhuiComActWorkGuideMaterial newWorkGuideMaterialDO = new JinhuiComActWorkGuideMaterial(); newWorkGuideMaterialDO.setMaterialName(materialsVO.getMaterialName()); newWorkGuideMaterialDO.setWorkGuideId(workGuideDO.getId()); workGuideMaterialDAO.insert(newWorkGuideMaterialDO); } }); } // 统计该调查问卷填报题目数量 int count = 0; List questnaiteSubVOS = JSON.parseArray(workGuideDO.getJsonObject(), QuestnaiteSubVO.class); if (questnaiteSubVOS!=null && questnaiteSubVOS.size()>0 ) { count = questnaiteSubVOS.size(); } workGuideDO.setCount(count); workGuideDO.setJsonObject(workGuideDO.getJsonObject()); this.baseMapper.updateById(workGuideDO); // 删除原调查问卷题目以及选项,重新进行新增 baseMapper.deleteQuesSubAll(workGuideDO.getId()); baseMapper.deleteQuesSubAll2(workGuideDO.getId()); // 重新新增题目以及题目选项 if (questnaiteSubVOS!=null && questnaiteSubVOS.size()>0 ) { questnaiteSubVOS.forEach(sub -> { JinhuiComActQuestnaireSub comActQuestnaireSubDO = new JinhuiComActQuestnaireSub(); comActQuestnaireSubDO.setType(sub.getType()+""); comActQuestnaireSubDO.setContent(sub.getLabel()); comActQuestnaireSubDO.setSort(sub.getSort()+""); comActQuestnaireSubDO.setKey(sub.getKey()); comActQuestnaireSubDO.setQueId(workGuideDO.getId()); comActQuestnaireSubDO.setCreateBy(userId); questnaireSubDao.insert(comActQuestnaireSubDO); ArrayList subSelectionList = Lists.newArrayList(); if (sub.getOptions() != null && !sub.getOptions().isEmpty()) { List subOptions = sub.getOptions(); for (int i = 0; i < subOptions.size(); i++) { QuestnaiteSubSelectionVO subSelect = subOptions.get(i); JinhuiComActQuestnaireSubSelection subSelectionDO = new JinhuiComActQuestnaireSubSelection(); subSelectionDO.setQueSubId(comActQuestnaireSubDO.getId()+""); if (subSelect.getType().equals(1)) { // 添加选项名称 subSelectionDO.setOptionName(subSelect.getOptionName()); } else { subSelectionDO.setOptionName(String.valueOf(Character.toChars('A' + i))); } subSelectionDO.setKey(subSelect.getKey()); subSelectionDO.setContent(subSelect.getLabel()); subSelectionDO.setQueId(workGuideDO.getId()); subSelectionDO.setCreateBy(userId); subSelectionDO.setType(subSelect.getType()+""); subSelectionList.add(subSelectionDO); } } questnaireSubSelectionService.saveBatch(subSelectionList); }); } return R.ok(); } @Override public R detailWorkGuide(String workGuideId, String communityId) { JinhuiComActWorkGuide workGuideDO = this.baseMapper.selectById(workGuideId); if (workGuideDO == null) { return R.fail("Id有误!"); } ComActWorkGuideVO vo = new ComActWorkGuideVO(); BeanUtils.copyProperties(workGuideDO, vo); if(!StringUtils.isEmpty(communityId)) { ComActDO comActDO = comActDAO.selectById(communityId); if (comActDO != null) { vo.setAddress(comActDO.getAddress()); vo.setPhone(comActDO.getContactsPhone()); vo.setLon(comActDO.getLng()); vo.setLat(comActDO.getLat()); } List workGuideMaterialDOS = workGuideMaterialDAO.selectList(new LambdaQueryWrapper() .eq(JinhuiComActWorkGuideMaterial::getWorkGuideId, workGuideId)); workGuideMaterialDOS.forEach(workGuideMaterialDO -> { ComActWorkGuideMaterialVO workGuideMaterialVO = new ComActWorkGuideMaterialVO(); workGuideMaterialVO.setId(workGuideMaterialDO.getId()); workGuideMaterialVO.setMaterialName(workGuideMaterialDO.getMaterialName()); vo.getMaterials().add(workGuideMaterialVO); }); } return R.ok(vo); } @Override public R pageWorkGuide(PageActWorkGuideDTO pageActWorkGuideDTO) { Page page = new Page<>(); Long pageNum = pageActWorkGuideDTO.getPageNum(); Long pageSize = pageActWorkGuideDTO.getPageSize(); if (null == pageNum || 0 == pageNum) { pageNum = 1l; } if (null == pageSize || 0 == pageSize) { pageSize = 10l; } page.setSize(pageSize); page.setCurrent(pageNum); IPage iPage = this.baseMapper.pageWorkGuide(page, pageActWorkGuideDTO); if (!iPage.getRecords().isEmpty()) { iPage.getRecords().forEach(comActWorkGuideVO -> { JinhuiComActWorkGuideClassify comActWorkGuideClassifyDO = comActWorkGuideClassifyDAO.selectById(comActWorkGuideVO.getClassify()); if (comActWorkGuideClassifyDO != null) { comActWorkGuideVO.setClassifyName(comActWorkGuideClassifyDO.getClassifyName()); } }); } return R.ok(iPage); } @Override public R delectWorkGuide(String workGuideId) { this.baseMapper.deleteById(workGuideId); workGuideMaterialDAO.delete(new LambdaQueryWrapper() .eq(JinhuiComActWorkGuideMaterial::getWorkGuideId, workGuideId)); return R.ok(); } /** * 办事指南列表-按分类查询 * @param pageActWorkGuideDTO 请求参数 * @return 办事指南分类列表 */ @Override public R listWorkGuide(PageActWorkGuideDTO pageActWorkGuideDTO){ //结果数据集合 List resultList = new ArrayList<>(); List workGuideClassifyList = comActWorkGuideClassifyDAO.listWorkGuideClassify(pageActWorkGuideDTO.getAreaCode()); final String isOnLine=pageActWorkGuideDTO.getIsOnLine(); //通过办事指南分类查询分类下办事指南 workGuideClassifyList.forEach(workGuideClassify -> { List workGuideList = this.baseMapper.getWorkGuideListByClassifyId(workGuideClassify.getId()+"",null,isOnLine); if(workGuideList != null && workGuideList.size() > 0){ workGuideClassify.setGuideDetailList(workGuideList); //分类下办事指南数据大于0加入到结果集中向小程序展示 resultList.add(workGuideClassify); } }); return R.ok(resultList); } /** * 根据办事指南分类id查询办事指南列表 * @param classifyId 办事指南分类id * @return 办事指南列表数据 */ @Override public R listWorkGuideByClassifyId(String classifyId){ return R.ok(this.baseMapper.getWorkGuideListByClassifyId(classifyId,null,null)); } }