package com.panzhihua.service_community.service.impl;
|
|
import com.alibaba.fastjson.JSONObject;
|
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;
|
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 {
|
static String AK = "W3x8DhCWKc2UFIwYgclpRBdL6BeGLLQt"; // 百度地图密钥
|
@Resource
|
ComActWorkGuideMaterialDAO workGuideMaterialDAO;
|
@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<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());
|
List<Long> 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(Long workGuideId, Long conmunityId) {
|
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){
|
vo.setAddress(comActDO.getAddress());
|
vo.setPhone(comActDO.getContactsPhone());
|
}
|
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>()
|
.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<ComActWorkGuideVO> iPage = this.baseMapper.pageWorkGuide(page, pageActWorkGuideDTO);
|
return R.ok(iPage);
|
}
|
|
@Override
|
public R delectWorkGuide(Long workGuideId) {
|
this.baseMapper.deleteById(workGuideId);
|
workGuideMaterialDAO.delete(new LambdaQueryWrapper<ComActWorkGuideMaterialDO>()
|
.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;
|
}
|
}
|
}
|
return null;
|
}
|
|
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();
|
}
|
|
}
|