| 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<PageInfo<HomeServiceInfo>> findByLevel(HttpServletRequest request,@RequestBody HomeServiceLevelDTO homeServiceLevelDTO) {  | 
|         PageHelper.startPage(homeServiceLevelDTO.getPageNo(),homeServiceLevelDTO.getPageSize());  | 
|         List<HomeServiceInfo> list = homeServiceInfoService.findByLevel(homeServiceLevelDTO.getLevel());  | 
|         //第二级 返回围栏等信息  | 
|         if(2==homeServiceLevelDTO.getLevel().intValue()) {  | 
|             for (HomeServiceInfo homeServiceInfo : list) {  | 
|                 List<PartnerFenceDTO> listRel = new ArrayList<>();  | 
|                 List<HomeServiceRef> 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<PartnerFenceDTO> collect = listRel.stream().filter(x -> x.getRefType().intValue() == 2 && x.getPartnerId().equals(partnerId)).collect(Collectors.toList());  | 
|                         if (CollUtil.isNotEmpty(collect)) {  | 
|                             List<String> 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<String> fenceIds = new ArrayList<>();  | 
|                             fenceIds.add(fenceId);  | 
|                             partnerFenceDTO.setFenceIds(fenceIds);  | 
|                             listRel.add(partnerFenceDTO);  | 
|                         }  | 
|                     }  | 
|                 }  | 
|                 homeServiceInfo.setList(listRel);  | 
|             }  | 
|         }  | 
|         PageInfo<HomeServiceInfo> pageInfo=new PageInfo<>(list);  | 
|         return Result.success(pageInfo);  | 
|     }  | 
|   | 
|     @ApiOperation(value = "到家服务分页查询分类")  | 
|     @PostMapping("/admin/front/homeService/page")  | 
|     public Result<PageInfo<HomeServiceInfo>> page(HttpServletRequest request,@RequestBody HomeServicePageDTO homeServicePageDTO) {  | 
|         PageInfo<HomeServiceInfo> 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<HomeServiceInfo> 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<List<HomeServiceInfo>> 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<AddressInfo> 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<HomeServiceInfo> 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<HomeServiceInfo> byParentId = homeServiceInfoService.findByParentId(id,Constants.SHOW_FLAG);  | 
|                         homeServiceInfo.setChilds(byParentId);  | 
|                     }  | 
|                 }  | 
|             }  | 
|         }  | 
|   | 
|         return Result.success(second);  | 
|   | 
|     }  | 
| }  |