package com.xzx.gc.order.service; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.date.DateUtil; import cn.hutool.core.util.StrUtil; import cn.hutool.json.JSONArray; import com.alibaba.fastjson.JSON; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.gson.Gson; import com.xzx.gc.common.Result; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.OrderEnum; import com.xzx.gc.common.dto.gdmap.CreateFenceDto; import com.xzx.gc.common.dto.gdmap.GdReverseGEODto; import com.xzx.gc.common.exception.RestException; import com.xzx.gc.common.utils.BusinessUtil; import com.xzx.gc.common.utils.gdmap.GdMapUtil; import com.xzx.gc.entity.*; import com.xzx.gc.model.JsonResult; import com.xzx.gc.model.admin.AreaModel; import com.xzx.gc.model.admin.LongiLatiModel; import com.xzx.gc.model.admin.XzxElectronicFenceModel; import com.xzx.gc.model.admin.XzxPartnerFenceModel; import com.xzx.gc.model.order.FenceDto; import com.xzx.gc.order.mapper.FenceMapper; import com.xzx.gc.order.mapper.OtherUserMapper; import com.xzx.gc.util.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.servlet.http.HttpServletRequest; import java.util.*; import java.util.stream.Collectors; @Service @Transactional public class FenceService { @Autowired private FenceMapper fenceMapper; @Autowired private AddressLevelService addressLevelService; @Autowired private PartnerGaodeService partnerGaodeService; @Autowired private HttpServletRequest request; @Autowired private OtherUserMapper otherUserMapper; @Autowired private CityPartnerService service; @Autowired private BusinessUtil businessUtil; @Autowired private CityPartnerService cityPartnerService; @Autowired private PartnerFenceService partnerFenceService; public List findByUserId(String userId){ return fenceMapper.findByUserId(userId); } public Fence findById(String id){ return fenceMapper.selectByPrimaryKey(id); } public Fence findByGid(String gid){ Fence fence=new Fence(); fence.setGid(gid); fence.setDelFlag(Constants.DEL_NOT_FLAG); fence.setProhibit(false); Fence fence1 = fenceMapper.selectOne(fence); return fence1; } public Fence findByGidForbidden(String gid){ Fence fence=new Fence(); fence.setGid(gid); fence.setDelFlag(Constants.DEL_NOT_FLAG); Fence fence1 = fenceMapper.selectOne(fence); return fence1; } /** * 根据合伙人id查找所有围栏 * @param partnerId * @return */ public List findByPartnerId(String partnerId){ return fenceMapper.findByPartnerId(partnerId); } /** * 根据区域id查询 * @param areaId 区域统计 * @return */ public List findByAreaId(String areaId){ PartnerGaode byCityId=null; byCityId = partnerGaodeService.findByTownId(areaId); if(byCityId!=null){ List byPartnerId = findByPartnerId(byCityId.getPartnerId()); return byPartnerId; } return null; } /** * * @param townId * @param checkReceiver * @param lon * @param lat * @param checkFence 是否要监测围栏 不监测直接通过区id获取合伙人,单区域拥有多合伙人必须通过围栏才能判断 * @return */ public FenceDto getFence(String townId, boolean checkReceiver, String lon, String lat,boolean checkFence){ /** * 有2种情况 * 1:如果下单用户是处于岳麓区 则需要在岳麓区和天心区的合伙人里共同查找是属于哪个围栏内 * :如果下单用户是处于雨花区 则需要在雨花区和天心区的合伙人里共同查找是属于哪个围栏内 * 2:否则根据下单地址查找对应的围栏 * */ FenceDto fenceDto=new FenceDto(); if(businessUtil.isSpecialArea(townId)){ PartnerGaode partnerGaode = partnerGaodeService.findByTownId(Constants.TIANXIN_CODE); if(partnerGaode!=null){ fenceDto.setPartnerId(partnerGaode.getPartnerId()); partnerGaode.setTownId(townId); String fenceId = getFenceByGaode(partnerGaode, false,checkReceiver,lon,lat); if(StrUtil.isNotBlank(fenceId)) { fenceDto.setFenceId(fenceId); return fenceDto; }else { partnerGaode = partnerGaodeService.findByTownId(townId); if(partnerGaode==null){ return fenceDto; } partnerGaode.setTownId(townId); fenceDto.setPartnerId(partnerGaode.getPartnerId()); fenceId = getFenceByGaode(partnerGaode, false,checkReceiver,lon,lat); fenceDto.setFenceId(fenceId); } }else { partnerGaode = partnerGaodeService.findByTownId(townId); if(partnerGaode==null){ return fenceDto; } partnerGaode.setTownId(townId); fenceDto.setPartnerId(partnerGaode.getPartnerId()); String fenceId = getFenceByGaode(partnerGaode, false,checkReceiver,lon,lat); fenceDto.setFenceId(fenceId); } }else { PartnerGaode partnerGaode = partnerGaodeService.findByTownId(townId); if(partnerGaode==null){ return fenceDto; }else { fenceDto.setPartnerId(partnerGaode.getPartnerId()); partnerGaode.setTownId(townId); } if(!checkFence){ fenceDto.setFenceId(Constants.DEFAULT_ID); return fenceDto; } String fenceId = getFenceByGaode(partnerGaode, true,checkReceiver,lon,lat); fenceDto.setFenceId(fenceId); } return fenceDto; } /** * * @param partnerGaode * @param checkTownFence 是否检查行政区围栏 * @checkReceiver 是否检查自助下单在围栏内 * @param lon 经度 在没有地址ID的时候传参 * @param lat 纬度 * @return */ public String getFenceByGaode(PartnerGaode partnerGaode,boolean checkTownFence,boolean checkReceiver,String lon, String lat){ //查找合伙人所有的围栏 如果有行政区域围栏 则优先查找 否则调用高德api查找 List byPartnerId =findByPartnerId(partnerGaode.getPartnerId()); if(CollUtil.isNotEmpty(byPartnerId)){ //1:POI围栏,2:行政区围栏,3:圆形围栏,4:多边形围栏 if(checkTownFence) { List fences = byPartnerId.stream().filter(x -> OrderEnum.行政区围栏.getValue().equals(x.getFenceType())).collect(Collectors.toList()); if (CollUtil.isNotEmpty(fences)) { for (Fence fence : fences) { AddressLevelInfo byAdcode = addressLevelService.findByAdcode(fence.getTownCode()); if (byAdcode != null) { String level3Id = byAdcode.getLevel3Id(); String townshipId = partnerGaode.getTownId(); if (level3Id.equals(townshipId)) { return fence.getId().toString(); } } } } } //进行高德围栏查询 String key = partnerGaode.getPartnerKey(); Result inFence = GdMapUtil.isInFence(lon + "," + lat + "," + DateUtil.currentSeconds(), GdMapUtil.getDiu(key),key); if(inFence.getCode()==0){ //设置围栏id Fence fence = findByGid(inFence.getData().toString()); if(fence!=null){ String fenceId = fence.getId().toString(); if(checkReceiver){ String receiverId=request.getHeader("userId"); OtherUserInfo otherUserInfo = otherUserMapper.selectByPrimaryKey(receiverId); String townId = otherUserInfo.getTownId(); List strings2 = Arrays.asList(townId.split(",")); if (strings2.contains(fenceId)) { return fenceId; }else { return null; } } return fenceId; } }else{ return null; } } return null; } public List queryTownListByArea(String townCode,String eleId){ return fenceMapper.queryTownListByArea(townCode,eleId); } public List queryOrderTownListByArea(String townCode,String eleId){ return fenceMapper.queryOrderTownListByArea(townCode,eleId); } public boolean queryPartnerAreaIds(String partnerId,String townId){ boolean flag = false; //判断合伙人是否有天心区可建,岳麓区可以建围栏。 List townIds = service.queryTownIdsByPartnerId(partnerId); //特殊处理 boolean check=false; if(null!=townIds&&townIds.size()>0){ for (String tid:townIds) { if(tid.equals(Constants.TIANXIN_CODE)){ check=true; break; } } } int num = 0; if(!check){ num = fenceMapper.queryPartnerAreaIds(partnerId,townId); }else{ if(townId.equals(Constants.YUELU_CODE)||townId.equals(Constants.YUHUA_CODE)){ num=1; }else{ num = fenceMapper.queryPartnerAreaIds(partnerId,townId); } } if(num>0){ flag = true; } return flag; } public String queryAreaTownId(String keyword){ return fenceMapper.queryAreaTownId(keyword); } public String queryPartnerIdByTownId(String townId){ return fenceMapper.queryPartnerIdByTownId(townId); } public List queryFenceList(XzxElectronicFenceModel model){ List partnerIdList = service.queryPartnerByCurrent(); model.setPartnerIdList(partnerIdList); List list = fenceMapper.queryFenceList(model); for (XzxElectronicFenceModel model1:list) { String keyword = model1.getKeyword(); if(null!=keyword&&!"".equals(keyword)) { AreaModel m = new AreaModel(); m.setName(keyword.trim()); AreaModel map = service.queryAreaLongiLati(m); if(map!=null){ model1.setLongitude(map.getLongitude()); model1.setLatitude(map.getLatitude()); } }else{ String longLatiArr = model1.getLongLatiArr(); String longi=""; String lati=""; List> longlaL = new ArrayList<>(); if(null!=longLatiArr&&!"".equals(longLatiArr)){ String[] liststr = longLatiArr.split(";"); for (String str : liststr) { Map ageMap = new HashMap(); String[] stt = str.split(","); longi = stt[0]; lati = stt[1]; ageMap.put("longitude",longi); ageMap.put("latitude",lati); longlaL.add(ageMap); model1.setLongitude(longi); model1.setLatitude(lati); //break; } String jsonString = JSON.toJSONString(longlaL); model1.setLongLatiArr(jsonString); } } } return list; } public XzxElectronicFence queryElectronic(XzxElectronicFenceModel info){ return fenceMapper.queryElectronic(info); } public String queryLongiLatiForTownName(String key,String location,String longiLatiStr){ GdReverseGEODto gdReverseGEODto = new GdReverseGEODto(); gdReverseGEODto.setKey(key); boolean batch=false; if(StrUtil.isNotBlank(longiLatiStr)){ gdReverseGEODto.setLocation(longiLatiStr); batch=true; }else{ gdReverseGEODto.setLocation(location); } //非批量 Result areaInfo; if(!batch){ areaInfo = GdMapUtil.getAreaInfo(gdReverseGEODto, 3); if(areaInfo.getCode()==0) { return areaInfo.getData().toString(); } }else { areaInfo = GdMapUtil.getBatchAreaInfo(gdReverseGEODto); if(areaInfo.getCode()==0){ JSONArray regeocodes= (JSONArray) areaInfo.getData(); return checkAddressIp(regeocodes); } } throw new RestException("经纬度异常:"+areaInfo.getMsg()); } private String checkAddressIp(JSONArray regeocodes){ StringBuffer location=new StringBuffer(); String address=""; for (int i=0; i map = new HashMap<>();; map.put("name",info.getFenceName()); if(null!=longiLatiStr&&!"".equals(longiLatiStr)){ map.put("points",longiLatiStr); }else{ map.put("center",info.getLongitude()+","+info.getLatitude()); map.put("radius",String.valueOf(info.getRadius())); } //map.put("enable","true"); map.put("valid_time","2054-12-30"); map.put("repeat","Mon,Tues,Wed,Thur,Fri,Sat,Sun"); //map.put("time","00:00,11:59;13:00,20:59"); map.put("desc",info.getFenceName()); map.put("alert_condition","enter"); CreateFenceDto createFenceDto = BeanUtil.mapToBean(map, CreateFenceDto.class, true); Result result = GdMapUtil.updateFence(createFenceDto, key, gid); if(result.getCode()!=0){ throw new RestException("修改电子围栏失败:"+result.getMsg()); } } public List queryODByArea(String townCode){ return fenceMapper.queryODByArea(townCode); } public boolean update(Fence info) { int i = fenceMapper.updateByPrimaryKeySelective(info); return i>0?true:false; } public boolean save(Fence info) { int i = fenceMapper.insertSelective(info); return i>0?true:false; } public Fence queryById(Integer id) { return fenceMapper.selectByPrimaryKey(id); } /** * 根据用户下单地址和围栏ID转换成正确的订单所属区域 * @param userAddrTownId 用户下单地址 * @param fenceId 围栏Id * @return */ public String findTownId(String userAddrTownId,String fenceId){ if(businessUtil.isSpecialArea(userAddrTownId)){ /** * 如果用户下单区域是岳麓区 需要根据围栏的town_code查询区域ID */ return addressLevelService.findByAdcode(queryById(Convert.toInt(fenceId)).getTownCode()).getLevel3Id(); }else { return userAddrTownId; } } /** * 新增围栏 * @param model * @return */ public JsonResult addFence(XzxElectronicFenceModel model){ String partnerIds = model.getPartnerIds(); if(StrUtil.isBlank(partnerIds)){ return JsonResult.failMessage("必须填写关联合伙人!"); } model.setDelFlag(0); model.setCreateTime(DateUtil.now()); Fence info = BeanUtils.copy(model, Fence.class); if(null!=model.getFenceName()&&!"".equals(model.getFenceName())){ model.setFenceName(model.getFenceName().trim()); //是否有重名电子围栏 XzxElectronicFence oldInfo =queryElectronic(model); if(null!=oldInfo){ return JsonResult.failMessage("已经有相同的围栏名称,添加失败!"); }else{ String longiLatiStr = ""; String longiLatiStr2 = ""; if(model.getFenceType().equals(OrderEnum.多边形围栏.getValue())){ List longLatiArrList = model.getLongLatiArrList(); if(null!=longLatiArrList&&longLatiArrList.size()>0){ ObjectMapper mapper = new ObjectMapper(); List LongiLati = mapper.convertValue(longLatiArrList, new TypeReference>() { }); Gson gson = new Gson(); String str = gson.toJson(LongiLati); info.setLonglatiarr(str); for (LongiLatiModel lola:LongiLati) { if(null!=longiLatiStr&&!"".equals(longiLatiStr)){ longiLatiStr = longiLatiStr+";"+lola.getLongitude()+","+lola.getLatitude(); longiLatiStr2 = longiLatiStr2+"|"+lola.getLongitude()+","+lola.getLatitude(); }else{ longiLatiStr =lola.getLongitude()+","+lola.getLatitude(); longiLatiStr2 =lola.getLongitude()+","+lola.getLatitude(); } } }else { throw new RestException("请先添加经纬度"); } } info.setDelFlag(0); if(null!=info.getKeyword()&&!"".equals(info.getKeyword())){ AreaModel areaModel = new AreaModel(); areaModel.setName(info.getKeyword()); AreaModel map = cityPartnerService.queryAreaLongiLati(areaModel); info.setTownCode(map.getCode()); info.setLongitude(map.getLongitude()); info.setLatitude(map.getLatitude()); } PartnerFence pfInfo = new PartnerFence(); XzxPartnerFenceModel pfInfo1 = new XzxPartnerFenceModel(); if(null!=partnerIds&&!"".equals(partnerIds)){ String partnerId = partnerIds; if(null!=info.getKeyword()&&!"".equals(info.getKeyword())){ //校验该合伙人是否能创建电子围栏 String townId = queryAreaTownId(info.getKeyword()); if(null!=townId&&!"".equals(townId)){ if(townId.equals(Constants.YUELU_CODE)){ return JsonResult.failMessage("岳麓区不能建区域围栏!"); } if(townId.equals(Constants.YUHUA_CODE)){ return JsonResult.failMessage("雨花区不能建区域围栏!"); } boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ return JsonResult.failMessage("该合伙人不能创建该地区的电子围栏"); }else{ //判断是否有在该区域建行政区 if(model.getFenceType().equals(OrderEnum.行政区围栏.getValue())){ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),null); if(townList.size()>0){ return JsonResult.failMessage(info.getKeyword()+" 已经建立行政区围栏,不能在该区域内创建其他围栏"); } } } }else{ return JsonResult.failMessage("该合伙人不应属于该区域,无法创建电子围栏"); } }else{ String keyword=""; String[] keywordList = new String[20]; if(null!=longiLatiStr2&&!"".equals(longiLatiStr2)){ String location =info.getLonglatiarr(); CityPartner partner = cityPartnerService.queryById(partnerId); keyword = queryLongiLatiForTownName(partner.getPartnerKey(),location,longiLatiStr2); if(model.getFenceType().equals(OrderEnum.圆形围栏.getValue())){ keywordList=null; }else{ keywordList = keyword.split(","); } }else{ CityPartner partner = cityPartnerService.queryById(partnerId); String location = model.getLongitude()+","+model.getLatitude(); keyword = queryLongiLatiForTownName(partner.getPartnerKey(),location,null); if(model.getFenceType().equals(OrderEnum.圆形围栏.getValue())){ keywordList=null; }else{ keywordList = keyword.split(","); } } if(null!=keyword&&!"".equals(keyword)){ if(null!=keywordList){ if(keywordList.length>0){ for (String keywords:keywordList) { if(null!=keywords&&!"".equals(keywords)){ String[] obj = keywords.split("_"); String keyword1 = obj[1]; int num = Integer.parseInt(obj[0]); String townId = queryAreaTownId(keyword1); AreaModel areaModel1 = new AreaModel(); areaModel1.setName(keyword1); AreaModel map1 = cityPartnerService.queryAreaLongiLati(areaModel1); info.setTownCode(map1.getCode()); if(null!=townId&&!"".equals(townId)){ boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ String[] ll2= longiLatiStr.split(";"); String errorAddress = ll2[num]; return JsonResult.failMessage("该合伙人不应属于该区域,无法在经纬度为:"+errorAddress+" 创建电子围栏"); }else{ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),null); if(townList.size()>0){ String[] ll2= longiLatiStr.split(";"); String errorAddress = ll2[num]; return JsonResult.failMessage(keyword + " 已经建立行政区围栏,不能在:"+errorAddress+"该区域内创建其他围栏"); } } }else{ return JsonResult.failMessage("区域为空,不能创建电子围栏"); } }else{ continue; } } } }else{ String townId = queryAreaTownId(keyword); AreaModel areaModel1 = new AreaModel(); areaModel1.setName(keyword); AreaModel map1 = cityPartnerService.queryAreaLongiLati(areaModel1); info.setTownCode(map1.getCode()); if(null!=townId&&!"".equals(townId)){ boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ return JsonResult.failMessage("该合伙人不应属于该区域,无法创建电子围栏"); }else{ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),null); if(townList.size()>0){ return JsonResult.failMessage(keyword + " 已经建立行政区围栏,不能在该区域内创建其他围栏"); } } }else{ return JsonResult.failMessage("区域为空,不能创建电子围栏"); } } }else{ return JsonResult.failMessage("找不到该区域,不能创建电子围栏"); } } pfInfo.setFenceId(info.getId()+""); pfInfo.setPartnerId(partnerId); pfInfo1.setPartnerId(partnerId); if(model.getFenceType().equals(OrderEnum.行政区围栏.getValue())){ //判断行政区是否有其他围栏 List idsOD = queryODByArea(info.getTownCode()); if(idsOD.size()>0){ return JsonResult.failMessage(info.getKeyword()+"已经建立围栏,不能在该区域内创建行政区围栏!"); } }else{ // String resultJson = createGDFence(info,pfInfo1,FENCE_URL,longiLatiStr); CityPartner partner = cityPartnerService.queryById(pfInfo.getPartnerId()); String key = partner.getPartnerKey(); Map map = new HashMap<>(); map.put("name",info.getFenceName()); if(null!=longiLatiStr&&!"".equals(longiLatiStr)){ map.put("points",longiLatiStr); }else{ map.put("center",info.getLongitude()+","+info.getLatitude()); map.put("radius",String.valueOf(info.getRadius())); } map.put("enable","true"); map.put("valid_time","2054-12-30"); map.put("repeat","Mon,Tues,Wed,Thur,Fri,Sat,Sun"); //map.put("time","00:00,11:59;13:00,20:59"); map.put("desc",info.getFenceName()); map.put("alert_condition","enter;leave"); CreateFenceDto createFenceDto = BeanUtil.mapToBean(map, CreateFenceDto.class, true); Result resultJson = GdMapUtil.createFence(key, createFenceDto); if(resultJson.getCode()==0){ info.setGid(resultJson.getData()); }else{ return JsonResult.failMessage("高德创建电子围栏失败,原因:"+resultJson.getMsg()); } } }else{ return JsonResult.failMessage("新增电子围栏失败"); } info.setLonglatiarr(longiLatiStr); if(partnerIds.equals(Constants.DEFAULT_PARTNER_ID)){ //如果是岳麓区或雨花区的围栏 修改为天心区的 if(null!=info.getTownCode()&&!"".equals(info.getTownCode())){ if(businessUtil.isSpecialAreaByAdcode(info.getTownCode())){ info.setTownCode(Constants.TIANXIN_ADCODE); } } } //保存围栏 boolean bool = save(info); if(!bool){ return JsonResult.failMessage("新增电子围栏失败"); }else{ //是否关联合伙人 //修改关联表 pfInfo.setFenceId(info.getId()+""); pfInfo.setDelFlag(0); pfInfo.setCreateTime(DateUtil.now()); partnerFenceService.save(pfInfo); return JsonResult.success(pfInfo.getFenceId()); } } }else{ return JsonResult.failMessage("电子围栏名称不能为空!"); } } /** * 修改电子围栏 * @param model * @return */ public JsonResult updateFence(XzxElectronicFenceModel model){ String partnerIds = model.getPartnerIds(); if(StrUtil.isBlank(partnerIds)){ return JsonResult.failMessage("必须填写关联合伙人!"); } ObjectMapper objectMapper = new ObjectMapper(); objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); Fence info = objectMapper.convertValue(model, Fence.class); Fence oldInfo1 =queryById(info.getId()); info.setGid(oldInfo1.getGid()); if(null!=model.getFenceName()&&!"".equals(model.getFenceName())){ model.setFenceName(model.getFenceName().trim()); //是否有重名电子围栏 XzxElectronicFence oldInfo =queryElectronic(model); if(null!=oldInfo){ return JsonResult.failMessage("已经有相同的围栏名称,修改失败!"); }else{ String longiLatiStr = ""; String longiLatiStr2 = ""; if(model.getFenceType().equals("4")){ List longLatiArrList = model.getLongLatiArrList(); if(null!=longLatiArrList&&longLatiArrList.size()>0){ ObjectMapper mapper = new ObjectMapper(); List LongiLati = mapper.convertValue(longLatiArrList, new TypeReference>() { }); Gson gson = new Gson(); String str = gson.toJson(LongiLati); info.setLonglatiarr(str); for (LongiLatiModel lola:LongiLati) { if(null!=longiLatiStr&&!"".equals(longiLatiStr)){ longiLatiStr = longiLatiStr+";"+lola.getLongitude()+","+lola.getLatitude(); longiLatiStr2 = longiLatiStr2+"|"+lola.getLongitude()+","+lola.getLatitude(); }else{ longiLatiStr =lola.getLongitude()+","+lola.getLatitude(); longiLatiStr2 =lola.getLongitude()+","+lola.getLatitude(); } } }else { throw new RestException("请先添加经纬度"); } } if(model.getFenceType().equals("3")){ info.setKeyword(""); } info.setDelFlag(0); info.setCreateTime(DateUtil.now()); if(null!=info.getKeyword()&&!"".equals(info.getKeyword())){ AreaModel areaModel = new AreaModel(); areaModel.setName(info.getKeyword()); AreaModel map = cityPartnerService.queryAreaLongiLati(areaModel); info.setTownCode(map.getCode()); info.setLongitude(map.getLongitude()); info.setLatitude(map.getLatitude()); //该电子围栏是否包含该区域。 } PartnerFence pfInfo = new PartnerFence(); XzxPartnerFenceModel pfInfo1 = new XzxPartnerFenceModel(); if(null!=partnerIds&&!"".equals(partnerIds)){ String partnerId = partnerIds; if(null!=info.getKeyword()&&!"".equals(info.getKeyword())){ //校验该合伙人是否能创建电子围栏 String townId = queryAreaTownId(info.getKeyword()); if(null!=townId&&!"".equals(townId)){ boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ return JsonResult.failMessage("该合伙人不能创建该地区的电子围栏"); }else{ //判断是否有在该区域建行政区 if(model.getFenceType().equals("2")){ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),info.getId()+""); if(townList.size()>0){ return JsonResult.failMessage("该区域不能创建电子围栏"); } } } }else{ return JsonResult.failMessage("该区域不能创建电子围栏"); } }else{ String keyword=""; List keywordList =CollUtil.newArrayList(); if(null!=longiLatiStr2&&!"".equals(longiLatiStr2)){ String location =info.getLonglatiarr(); CityPartner partner = cityPartnerService.queryById(partnerId); keyword = queryLongiLatiForTownName(partner.getPartnerKey(),location,longiLatiStr2); keywordList = Arrays.asList(keyword.split(",")); }else{ CityPartner partner = cityPartnerService.queryById(partnerId); String location = model.getLongitude()+","+model.getLatitude(); keyword = queryLongiLatiForTownName(partner.getPartnerKey(),location,null); } if(null!=keyword&&!"".equals(keyword)){ if(CollUtil.isNotEmpty(keywordList)){ for (String keywords:keywordList) { String[] obj = keywords.split("_"); String keyword1 = obj[1]; int num = Integer.parseInt(obj[0]); String townId = queryAreaTownId(keyword1); AreaModel areaModel1 = new AreaModel(); areaModel1.setName(keyword1); AreaModel map1 = cityPartnerService.queryAreaLongiLati(areaModel1); info.setTownCode(map1.getCode()); if(null!=townId&&!"".equals(townId)){ boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ String[] ll2= longiLatiStr.split(";"); String errorAddress = ll2[num]; return JsonResult.failMessage("该合伙人不应属于该区域,无法在经纬度为:"+errorAddress+" 创建电子围栏"); }else{ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),null); if(townList.size()>0){ String[] ll2= longiLatiStr.split(";"); String errorAddress = ll2[num]; return JsonResult.failMessage(keyword + " 已经建立行政区围栏,不能在:"+errorAddress+"该区域内创建其他围栏"); } } }else{ return JsonResult.failMessage("区域为空,不能创建电子围栏"); } } }else{ String townId = queryAreaTownId(keyword); if(null!=townId&&!"".equals(townId)){ boolean boolflag = queryPartnerAreaIds(partnerId,townId); if(!boolflag){ return JsonResult.failMessage("该合伙人不能创建该地区的电子围栏"); }else{ //判断是否有在该区域建行政区 List townList = queryTownListByArea(info.getTownCode(),info.getId()+""); if(townList.size()>0){ return JsonResult.failMessage("该区域不能修改电子围栏"); } } }else{ return JsonResult.failMessage("该区域不能创建电子围栏"); } } }else{ return JsonResult.failMessage("该区域不能创建电子围栏"); } } pfInfo.setFenceId(info.getId()+""); pfInfo.setPartnerId(partnerId); pfInfo1.setPartnerId(partnerId); if(oldInfo1.getGid()!=null&&!"".equals(oldInfo1.getGid())){ String gid = oldInfo1.getGid(); updateGDFence(info,pfInfo1,longiLatiStr,gid); } }else{ return JsonResult.failMessage("修改电子围栏失败"); } info.setLonglatiarr(longiLatiStr); if(partnerIds.equals(Constants.DEFAULT_PARTNER_ID)){ //如果是岳麓区或雨花区的围栏 修改为天心区的 if(null!=info.getTownCode()&&!"".equals(info.getTownCode())){ if(businessUtil.isSpecialAreaByAdcode(info.getTownCode())){ info.setTownCode(Constants.TIANXIN_ADCODE); } } } boolean bool = update(info); if(!bool){ return JsonResult.failMessage("修改电子围栏失败"); }else{ //修改关联表 //pfInfo.setPartnerId(); pfInfo.setFenceId(info.getId()+""); pfInfo.setDelFlag(0); pfInfo.setUpdateTime(DateUtil.now()); partnerFenceService.updateByFenceId(pfInfo); return JsonResult.success(pfInfo.getFenceId()); } } }else{ return JsonResult.failMessage("电子围栏名称不能为空!"); } } /** * 删除高德围栏 * @param model */ public void deleteFence(XzxElectronicFenceModel model){ Fence info = queryById(model.getId()); info.setDelFlag(1); update(info); CityPartner partner= partnerFenceService.queryPartnerIds(model.getId()+""); if(null!=partner){ //删除高德围栏 String gid = info.getGid(); if(null!=gid&&!"".equals(gid)){ GdMapUtil.deleteFence(partner.getPartnerKey(),info.getGid()); } } //删除管理合伙人 partnerFenceService.deleteByFenceId(model.getId()+""); } }