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);  
 | 
  
 | 
    }  
 | 
}  
 |