| | |
| | | package com.panzhihua.service_community.service.impl; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | 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.panzhihua.service_community.model.dos.ComActWorkGuideDO; |
| | | import com.panzhihua.service_community.model.dos.ComActWorkGuideMaterialDO; |
| | | import com.panzhihua.service_community.service.ComActWorkGuideService; |
| | | import net.sf.json.xml.XMLSerializer; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.stereotype.Service; |
| | | |
| | | import javax.annotation.Resource; |
| | | import java.io.BufferedReader; |
| | | import java.io.IOException; |
| | | import java.io.InputStreamReader; |
| | | import java.net.MalformedURLException; |
| | | import java.net.URL; |
| | | import java.net.URLConnection; |
| | | import java.text.DecimalFormat; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | import java.util.stream.Collectors; |
| | | |
| | | /** |
| | | * @auther llming |
| | | * @describe 办事指南 |
| | | */ |
| | | @Service |
| | | public class ComActWorkGuideServiceImpl extends ServiceImpl<ComActWorkGuideDAO, ComActWorkGuideDO> implements ComActWorkGuideService { |
| | | public class ComActWorkGuideServiceImpl extends ServiceImpl<ComActWorkGuideDAO, ComActWorkGuideDO> |
| | | implements ComActWorkGuideService { |
| | | static String AK = "W3x8DhCWKc2UFIwYgclpRBdL6BeGLLQt"; // 百度地图密钥 |
| | | @Resource |
| | | ComActWorkGuideMaterialDAO workGuideMaterialDAO; |
| | | @Resource |
| | | private ComActWorkGuideClassifyDAO comActWorkGuideClassifyDAO; |
| | | @Resource |
| | | ComActDAO comActDAO; |
| | | |
| | |
| | | BeanUtils.copyProperties(workGuideDTO, comActWorkGuideDO); |
| | | comActWorkGuideDO.setCreateBy(userId); |
| | | this.baseMapper.insert(comActWorkGuideDO); |
| | | //保存办事指南材料 |
| | | // 保存办事指南材料 |
| | | workGuideDTO.getMaterials().forEach(material -> { |
| | | ComActWorkGuideMaterialDO workGuideMaterialDO = new ComActWorkGuideMaterialDO(); |
| | | workGuideMaterialDO.setMaterialName(material.getMaterialName()); |
| | |
| | | BeanUtils.copyProperties(workGuideDTO, workGuideDO); |
| | | workGuideDO.setUpdateBy(userId); |
| | | this.baseMapper.updateById(workGuideDO); |
| | | if (workGuideDTO.getMaterials().size() == 0) {//若编辑材料为null,执行删除操作 |
| | | if (workGuideDTO.getMaterials().size() == 0) {// 若编辑材料为null,执行删除操作 |
| | | workGuideMaterialDAO.delete(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideDTO.getId())); |
| | | } else {// 若材料不为空,但是少了数据条数,也要执行删除 |
| | | List<ComActWorkGuideMaterialDO> workGuideMaterialDOS = |
| | | workGuideMaterialDAO.selectList(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideDTO.getId())); |
| | | } else {//若材料不为空,但是少了数据条数,也要执行删除 |
| | | List<ComActWorkGuideMaterialDO> workGuideMaterialDOS = workGuideMaterialDAO.selectList(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideDTO.getId())); |
| | | //1、筛选vo里面和db里,需要删除的材料数据 |
| | | List<Long> voMaterialIds = workGuideDTO.getMaterials().stream() |
| | | .filter(materialVo -> materialVo.getId() != null) |
| | | .map(ComActWorkGuideMaterialVO::getId) |
| | | .collect(Collectors.toList()); |
| | | // 1、筛选vo里面和db里,需要删除的材料数据 |
| | | List<Long> voMaterialIds = |
| | | workGuideDTO.getMaterials().stream().filter(materialVo -> materialVo.getId() != null) |
| | | .map(ComActWorkGuideMaterialVO::getId).collect(Collectors.toList()); |
| | | List<Long> deleteMaterialIds = workGuideMaterialDOS.stream() |
| | | .filter(workGuideMaterialDO -> !voMaterialIds.contains(workGuideMaterialDO.getId())) |
| | | .map(ComActWorkGuideMaterialDO::getId) |
| | | .collect(Collectors.toList()); |
| | | .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有,执行编辑 |
| | | 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没有,执行新增 |
| | | } else {// 3、如果db没有,执行新增 |
| | | ComActWorkGuideMaterialDO newWorkGuideMaterialDO = new ComActWorkGuideMaterialDO(); |
| | | newWorkGuideMaterialDO.setMaterialName(materialsVO.getMaterialName()); |
| | | newWorkGuideMaterialDO.setWorkGuideId(workGuideDO.getId()); |
| | |
| | | } |
| | | |
| | | @Override |
| | | public R detailWorkGuide(Long workGuideId, Long conmunityId) { |
| | | public R detailWorkGuide(Long workGuideId, Long communityId) { |
| | | ComActWorkGuideDO workGuideDO = this.baseMapper.selectById(workGuideId); |
| | | if (workGuideDO == null) { |
| | | return R.fail("Id有误!"); |
| | | } |
| | | ComActWorkGuideVO vo = new ComActWorkGuideVO(); |
| | | BeanUtils.copyProperties(workGuideDO, vo); |
| | | ComActDO comActDO = comActDAO.selectById(conmunityId); |
| | | if (comActDO != null){ |
| | | 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<String> list = getCoordinate(vo.getAddress()); |
| | | if (list !=null && list.size() > 0){ |
| | | vo.setLon(list.get(0)); |
| | | vo.setLat(list.get(1)); |
| | | } |
| | | List<ComActWorkGuideMaterialDO> workGuideMaterialDOS = workGuideMaterialDAO.selectList(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | |
| | | List<ComActWorkGuideMaterialDO> workGuideMaterialDOS = |
| | | workGuideMaterialDAO.selectList(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideId)); |
| | | workGuideMaterialDOS.forEach(workGuideMaterialDO -> { |
| | | ComActWorkGuideMaterialVO workGuideMaterialVO = new ComActWorkGuideMaterialVO(); |
| | |
| | | page.setSize(pageSize); |
| | | page.setCurrent(pageNum); |
| | | IPage<ComActWorkGuideVO> 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); |
| | | } |
| | | |
| | |
| | | public R delectWorkGuide(Long workGuideId) { |
| | | this.baseMapper.deleteById(workGuideId); |
| | | workGuideMaterialDAO.delete(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>() |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideId)); |
| | | .eq(ComActWorkGuideMaterialDO::getWorkGuideId, workGuideId)); |
| | | return R.ok(); |
| | | } |
| | | |
| | | // 调用百度地图API根据地址,获取坐标 |
| | | public static List<String> getCoordinate(String address) { |
| | | List<String> list = new ArrayList<>(); |
| | | if (address != null && !"".equals(address)) { |
| | | address = address.replaceAll("\\s*", "").replace("#", "栋"); |
| | | String url = "http://api.map.baidu.com/geocoder/v3/?address=" + address + "&output=json&ak=" + AK; |
| | | String json = loadJSON(url); |
| | | // json = "{" + json; |
| | | // json = json + "}"; |
| | | if (json != null && !"".equals(json)) { |
| | | XMLSerializer xmlSerializer = new XMLSerializer(); |
| | | //将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识) |
| | | String result = xmlSerializer.read(json).toString(); |
| | | JSONObject obj = JSONObject.parseObject(json); |
| | | if ("0".equals(obj.getString("status"))) { |
| | | double lng = obj.getJSONObject("result").getJSONObject("location").getDouble("lng"); // 经度 |
| | | double lat = obj.getJSONObject("result").getJSONObject("location").getDouble("lat"); // 纬度 |
| | | DecimalFormat df = new DecimalFormat("#.######"); |
| | | list.add(df.format(lng)); |
| | | list.add(df.format(lat)); |
| | | return list; |
| | | } |
| | | /** |
| | | * 办事指南列表-按分类查询 |
| | | * @param pageActWorkGuideDTO 请求参数 |
| | | * @return 办事指南分类列表 |
| | | */ |
| | | @Override |
| | | public R listWorkGuide(PageActWorkGuideDTO pageActWorkGuideDTO){ |
| | | //结果数据集合 |
| | | List<ComActWorkGuideAppletsVO> resultList = new ArrayList<>(); |
| | | |
| | | List<ComActWorkGuideAppletsVO> workGuideClassifyList = comActWorkGuideClassifyDAO.listWorkGuideClassify(); |
| | | //通过办事指南分类查询分类下办事指南 |
| | | workGuideClassifyList.forEach(workGuideClassify -> { |
| | | List<ComActWorkGuideDetailAppletsVO> workGuideList = this.baseMapper.getWorkGuideListByClassifyId(workGuideClassify.getId(),10L); |
| | | if(workGuideList != null && workGuideList.size() > 0){ |
| | | workGuideClassify.setGuideDetailList(workGuideList); |
| | | //分类下办事指南数据大于0加入到结果集中向小程序展示 |
| | | resultList.add(workGuideClassify); |
| | | } |
| | | } |
| | | return null; |
| | | }); |
| | | return R.ok(resultList); |
| | | } |
| | | |
| | | public static String loadJSON(String url) { |
| | | StringBuilder json = new StringBuilder(); |
| | | try { |
| | | URL oracle = new URL(url); |
| | | URLConnection yc = oracle.openConnection(); |
| | | BufferedReader in = new BufferedReader(new InputStreamReader(yc.getInputStream(), "UTF-8")); |
| | | String inputLine = null; |
| | | while ((inputLine = in.readLine()) != null) { |
| | | json.append(inputLine); |
| | | } |
| | | in.close(); |
| | | } catch (MalformedURLException e) {} catch (IOException e) {} |
| | | return json.toString(); |
| | | /** |
| | | * 根据办事指南分类id查询办事指南列表 |
| | | * @param classifyId 办事指南分类id |
| | | * @return 办事指南列表数据 |
| | | */ |
| | | @Override |
| | | public R listWorkGuideByClassifyId(Long classifyId){ |
| | | return R.ok(this.baseMapper.getWorkGuideListByClassifyId(classifyId,null)); |
| | | } |
| | | |
| | | } |