package com.xzx.gc.system.controller; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollUtil; import cn.hutool.core.convert.Convert; import cn.hutool.core.util.StrUtil; import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageInfo; import com.xzx.gc.common.Result; import com.xzx.gc.common.annotations.PassToken; import com.xzx.gc.common.constant.CommonEnum; import com.xzx.gc.common.constant.Constants; import com.xzx.gc.common.constant.ExceptionEnum; import com.xzx.gc.common.dto.gdmap.GdReverseGEODto; import com.xzx.gc.common.dto.log.OperationAppLog; import com.xzx.gc.common.exception.RestException; import com.xzx.gc.common.request.BaseController; import com.xzx.gc.common.utils.gdmap.GdMapUtil; import com.xzx.gc.entity.*; import com.xzx.gc.model.IdDTO; import com.xzx.gc.model.order.FenceDto; import com.xzx.gc.model.order.PartnerFenceDTO; import com.xzx.gc.model.system.HomeServiceAddDTO; import com.xzx.gc.model.system.HomeServiceFindDTO; import com.xzx.gc.model.system.HomeServiceLevelDTO; import com.xzx.gc.model.system.HomeServicePageDTO; import com.xzx.gc.system.service.*; import com.xzx.gc.util.BeanUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.HttpServletRequest; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @Api(tags = "到家服务分类管理") @RestController @Slf4j public class HomeServiceInfoController extends BaseController { @Autowired private HomeServiceInfoService homeServiceInfoService; @Autowired private FenceService fenceService; @Autowired private AddressLevelService addressLevelService; @Autowired private AddressService addressService; @Autowired private PartnerFenceService partnerFenceService; @Autowired private HomeServiceRefService homeServiceRefService; @ApiOperation(value = "到家服务添加分类") @PostMapping("/admin/front/homeService/add") public Result add(HttpServletRequest request, @RequestBody HomeServiceAddDTO homeServiceAddDTO) { if(homeServiceAddDTO.getParentId()==null){ homeServiceAddDTO.setParentId(Constants.TOP_ID); } Long id=homeServiceInfoService.add(homeServiceAddDTO); OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SYS_MODUL_NAME).operateAction("到家服务添加分类-"+id).build(); mqUtil.sendApp(build); return Result.success(); } @ApiOperation(value = "到家服务编辑分类") @PostMapping("/admin/front/homeService/update") public Result update(HttpServletRequest request, @RequestBody HomeServiceAddDTO homeServiceAddDTO) { Long id = homeServiceAddDTO.getId(); HomeServiceInfo byId = homeServiceInfoService.findById(id); BeanUtil.copyProperties(byId,homeServiceAddDTO,BeanUtils.getNotNullPropertyNames(homeServiceAddDTO)); homeServiceInfoService.update(homeServiceAddDTO); OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SYS_MODUL_NAME).operateAction("到家服务编辑分类-"+ homeServiceAddDTO.getId()).build(); mqUtil.sendApp(build); return Result.success(); } @ApiOperation(value = "到家服务根据层级分页查询") @PostMapping("/admin/front/homeService/findByLevel") public Result> findByLevel(HttpServletRequest request,@RequestBody HomeServiceLevelDTO homeServiceLevelDTO) { PageHelper.startPage(homeServiceLevelDTO.getPageNo(),homeServiceLevelDTO.getPageSize()); List list = homeServiceInfoService.findByLevel(homeServiceLevelDTO.getLevel()); //第二级 返回围栏等信息 if(2==homeServiceLevelDTO.getLevel().intValue()) { for (HomeServiceInfo homeServiceInfo : list) { List listRel = new ArrayList<>(); List byServiceId = homeServiceRefService.findByServiceId(homeServiceInfo.getId()); for (HomeServiceRef homeServiceRef : byServiceId) { String fenceId = homeServiceRef.getFenceId(); String partnerId = homeServiceRef.getPartnerId(); Short refType = homeServiceRef.getRefType(); if (1 == refType.intValue()) { PartnerFenceDTO partnerFenceDTO = new PartnerFenceDTO(); partnerFenceDTO.setPartnerId(partnerId); partnerFenceDTO.setRefType(refType); listRel.add(partnerFenceDTO); } else if (2 == refType.intValue()) { List collect = listRel.stream().filter(x -> x.getRefType().intValue() == 2 && x.getPartnerId().equals(partnerId)).collect(Collectors.toList()); if (CollUtil.isNotEmpty(collect)) { List fenceIds = collect.get(0).getFenceIds(); fenceIds.add(fenceId); for (PartnerFenceDTO partnerFenceDTO : listRel) { if (partnerFenceDTO.getPartnerId().equals(partnerId) && partnerFenceDTO.getRefType().intValue() == 2) { partnerFenceDTO.setFenceIds(fenceIds); } } } else { PartnerFenceDTO partnerFenceDTO = new PartnerFenceDTO(); partnerFenceDTO.setPartnerId(partnerId); partnerFenceDTO.setRefType(refType); List fenceIds = new ArrayList<>(); fenceIds.add(fenceId); partnerFenceDTO.setFenceIds(fenceIds); listRel.add(partnerFenceDTO); } } } homeServiceInfo.setList(listRel); } } PageInfo pageInfo=new PageInfo<>(list); return Result.success(pageInfo); } @ApiOperation(value = "到家服务分页查询分类") @PostMapping("/admin/front/homeService/page") public Result> page(HttpServletRequest request,@RequestBody HomeServicePageDTO homeServicePageDTO) { PageInfo page = homeServiceInfoService.page(homeServicePageDTO); return Result.success(page); } @ApiOperation(value = "到家服务删除分类") @PostMapping("/admin/front/homeService/delete") public Result delete(HttpServletRequest request,@RequestBody IdDTO idDTO) { Long id = Convert.toLong(idDTO.getId()); HomeServiceInfo byId = homeServiceInfoService.findById(id); Short level = byId.getLevel(); if(2==level.intValue()){ List byParentId = homeServiceInfoService.findByParentId(id,null); if(CollUtil.isNotEmpty(byParentId)){ throw new RestException("请先删除其下的子类"); } //删除关联关系 homeServiceRefService.deleteByServiceId(id); } homeServiceInfoService.deleteById(id); OperationAppLog build = OperationAppLog.builder().appPrograme(CommonEnum.后台.getValue()).opreateName(getAdminName(request)) .methodName(Constants.SYS_MODUL_NAME).operateAction("到家服务删除分类-"+ id).build(); mqUtil.sendApp(build); return Result.success(); } @ApiOperation(value = "到家服务查询") @PostMapping("/homeService/find") @PassToken public Result> find(HttpServletRequest request,@RequestBody HomeServiceFindDTO homeServiceFindDTO) { //确定用户的围栏 Long addressId = homeServiceFindDTO.getAddressId(); String townShipId=null; String lon; String lat; if(addressId!=null){ AddressInfo byId = addressService.findById(addressId); townShipId=byId.getTownshipId(); lon=byId.getLongitude(); lat=byId.getLatitude(); }else { lon=homeServiceFindDTO.getLongitude(); lat=homeServiceFindDTO.getLatitude(); GdReverseGEODto gdReverseGEODto = new GdReverseGEODto(); gdReverseGEODto.setKey(Constants.GD_MAP_KEY); gdReverseGEODto.setLocation(homeServiceFindDTO.getLongitude() + "," + homeServiceFindDTO.getLatitude()); Result areaInfo = GdMapUtil.getAreaInfo(gdReverseGEODto, 0); if (areaInfo.getCode() == 0) { AddressInfo addressInfo = areaInfo.getData(); String adcode = addressInfo.getAdcode(); AddressLevelInfo byAdcode = addressLevelService.findByAdcode(adcode); if(byAdcode!=null) { townShipId = byAdcode.getLevel3Id(); } } else { return Result.error(Convert.toInt(ExceptionEnum.可忽略异常.getValue()),areaInfo.getMsg()); } } List second=new ArrayList<>(); if (StrUtil.isNotBlank(townShipId)) { FenceDto fence = fenceService.getFence(townShipId, false, lon,lat, true); if (StrUtil.isNotBlank(fence.getFenceId())) { second = homeServiceInfoService.findSecond(null, fence.getFenceId()); if(CollUtil.isEmpty(second)){ PartnerFence partnerIdByFenceId = partnerFenceService.findPartnerIdByFenceId(fence.getFenceId()); if(partnerIdByFenceId!=null){ second = homeServiceInfoService.findSecond(partnerIdByFenceId.getPartnerId(),null); } } //设置子类 if(CollUtil.isNotEmpty(second)){ for (HomeServiceInfo homeServiceInfo : second) { Long id = homeServiceInfo.getId(); List byParentId = homeServiceInfoService.findByParentId(id,Constants.SHOW_FLAG); homeServiceInfo.setChilds(byParentId); } } } } return Result.success(second); } }