package com.panzhihua.service_community.service.impl; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import javax.annotation.Resource; import com.panzhihua.common.utlis.AgeUtils; import com.panzhihua.common.utlis.StringUtils; import com.panzhihua.service_community.dao.ComActWorkGuideClassifyDAO; import com.panzhihua.service_community.model.dos.ComActWorkGuideClassifyDO; import com.panzhihua.common.model.vos.community.ComActWorkGuideAppletsVO; import com.panzhihua.common.model.vos.community.ComActWorkGuideDetailAppletsVO; import com.panzhihua.service_community.dao.ComActWorkGuideClassifyDAO; import com.panzhihua.service_community.service.ComActWorkGuideClassifyService; import org.springframework.beans.BeanUtils; import org.springframework.stereotype.Service; 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.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.ComActWorkGuideMaterialVO; import com.panzhihua.common.model.vos.community.ComActWorkGuideVO; import com.panzhihua.service_community.dao.ComActDAO; import com.panzhihua.service_community.dao.ComActWorkGuideDAO; import com.panzhihua.service_community.dao.ComActWorkGuideMaterialDAO; import com.panzhihua.service_community.model.dos.ComActDO; import com.panzhihua.service_community.model.dos.ComActWorkGuideDO; import com.panzhihua.service_community.model.dos.ComActWorkGuideMaterialDO; import com.panzhihua.service_community.service.ComActWorkGuideService; /** * @auther llming * @describe 办事指南 */ @Service public class ComActWorkGuideServiceImpl extends ServiceImpl implements ComActWorkGuideService { static String AK = "W3x8DhCWKc2UFIwYgclpRBdL6BeGLLQt"; // 百度地图密钥 @Resource ComActWorkGuideMaterialDAO workGuideMaterialDAO; @Resource private ComActWorkGuideClassifyDAO comActWorkGuideClassifyDAO; @Resource ComActDAO comActDAO; @Override public R addWorkGuide(ComActWorkGuideDTO workGuideDTO, Long userId) { ComActWorkGuideDO comActWorkGuideDO = new ComActWorkGuideDO(); BeanUtils.copyProperties(workGuideDTO, comActWorkGuideDO); comActWorkGuideDO.setCreateBy(userId); this.baseMapper.insert(comActWorkGuideDO); // 保存办事指南材料 workGuideDTO.getMaterials().forEach(material -> { ComActWorkGuideMaterialDO workGuideMaterialDO = new ComActWorkGuideMaterialDO(); workGuideMaterialDO.setMaterialName(material.getMaterialName()); workGuideMaterialDO.setWorkGuideId(comActWorkGuideDO.getId()); workGuideMaterialDAO.insert(workGuideMaterialDO); }); return R.ok(); } @Override public R editWorkGuide(ComActWorkGuideDTO workGuideDTO, Long userId) { if (workGuideDTO.getId() == 0L) { return R.fail("Id有误!"); } ComActWorkGuideDO workGuideDO = this.baseMapper.selectById(workGuideDTO.getId()); if (workGuideDO == null) { return R.fail("Id有误!"); } BeanUtils.copyProperties(workGuideDTO, workGuideDO); workGuideDO.setUpdateBy(userId); this.baseMapper.updateById(workGuideDO); if (workGuideDTO.getMaterials().size() == 0) {// 若编辑材料为null,执行删除操作 workGuideMaterialDAO.delete(new LambdaQueryWrapper() .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideDTO.getId())); } else {// 若材料不为空,但是少了数据条数,也要执行删除 List workGuideMaterialDOS = workGuideMaterialDAO.selectList(new LambdaQueryWrapper() .eq(ComActWorkGuideMaterialDO::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(ComActWorkGuideMaterialDO::getId).collect(Collectors.toList()); if (deleteMaterialIds.size() != 0) { workGuideMaterialDAO.deleteBatchIds(deleteMaterialIds); } workGuideDTO.getMaterials().forEach(materialsVO -> { if (materialsVO.getId() != null && materialsVO.getId() != 0L) { ComActWorkGuideMaterialDO 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没有,执行新增 ComActWorkGuideMaterialDO newWorkGuideMaterialDO = new ComActWorkGuideMaterialDO(); newWorkGuideMaterialDO.setMaterialName(materialsVO.getMaterialName()); newWorkGuideMaterialDO.setWorkGuideId(workGuideDO.getId()); workGuideMaterialDAO.insert(newWorkGuideMaterialDO); } }); } return R.ok(); } @Override public R detailWorkGuide(String workGuideId, String communityId) { ComActWorkGuideDO 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(ComActWorkGuideMaterialDO::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 -> { ComActWorkGuideClassifyDO comActWorkGuideClassifyDO = comActWorkGuideClassifyDAO.selectById(comActWorkGuideVO.getClassify()); if (comActWorkGuideClassifyDO != null) { comActWorkGuideVO.setClassifyName(comActWorkGuideClassifyDO.getClassifyName()); } }); } return R.ok(iPage); } @Override public R delectWorkGuide(Long workGuideId) { this.baseMapper.deleteById(workGuideId); workGuideMaterialDAO.delete(new LambdaQueryWrapper() .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideId)); return R.ok(); } /** * 办事指南列表-按分类查询 * @param pageActWorkGuideDTO 请求参数 * @return 办事指南分类列表 */ @Override public R listWorkGuide(PageActWorkGuideDTO pageActWorkGuideDTO){ //结果数据集合 List resultList = new ArrayList<>(); List workGuideClassifyList = comActWorkGuideClassifyDAO.listWorkGuideClassify(pageActWorkGuideDTO.getAreaCode()); //通过办事指南分类查询分类下办事指南 workGuideClassifyList.forEach(workGuideClassify -> { List workGuideList = this.baseMapper.getWorkGuideListByClassifyId(workGuideClassify.getId(),10L); 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(Long classifyId){ return R.ok(this.baseMapper.getWorkGuideListByClassifyId(classifyId,null)); } }