package com.doumee.service.business.impl; 
 | 
  
 | 
import com.doumee.biz.system.SystemDictDataBiz; 
 | 
import com.doumee.core.annotation.excel.ExcelImporter; 
 | 
import com.doumee.core.constants.ResponseStatus; 
 | 
import com.doumee.core.exception.BusinessException; 
 | 
import com.doumee.core.model.LoginUserInfo; 
 | 
import com.doumee.core.model.PageData; 
 | 
import com.doumee.core.model.PageWrap; 
 | 
import com.doumee.core.utils.Constants; 
 | 
import com.doumee.core.utils.Utils; 
 | 
import com.doumee.dao.admin.request.CategoryImport; 
 | 
import com.doumee.dao.admin.request.FcodeImport; 
 | 
import com.doumee.dao.admin.request.ShopImport; 
 | 
import com.doumee.dao.admin.request.UpdateShopSortDTO; 
 | 
import com.doumee.dao.business.CategorySegMapper; 
 | 
import com.doumee.dao.business.MemberMapper; 
 | 
import com.doumee.dao.business.SegmentsMapper; 
 | 
import com.doumee.dao.business.UsersMapper; 
 | 
import com.doumee.dao.business.join.ShopJoinMapper; 
 | 
import com.doumee.dao.business.model.*; 
 | 
import com.doumee.dao.business.vo.ShopTree; 
 | 
import com.doumee.dao.business.vo.ShopTreeVo; 
 | 
import com.doumee.dao.business.vo.UnitCodeVo; 
 | 
import com.doumee.dao.web.reqeust.EditShopDTO; 
 | 
import com.doumee.dao.web.reqeust.ShopQueryByLLDTO; 
 | 
import com.doumee.service.business.ShopService; 
 | 
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; 
 | 
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; 
 | 
import com.baomidou.mybatisplus.core.metadata.IPage; 
 | 
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; 
 | 
import com.github.yulichang.wrapper.MPJLambdaWrapper; 
 | 
import org.apache.commons.lang3.StringUtils; 
 | 
import org.apache.shiro.SecurityUtils; 
 | 
import org.springframework.beans.BeanUtils; 
 | 
import org.springframework.beans.factory.annotation.Autowired; 
 | 
import org.springframework.data.redis.core.RedisTemplate; 
 | 
import org.springframework.scheduling.annotation.Async; 
 | 
import org.springframework.stereotype.Service; 
 | 
import org.springframework.transaction.annotation.Transactional; 
 | 
import org.springframework.util.CollectionUtils; 
 | 
import org.springframework.web.multipart.MultipartFile; 
 | 
  
 | 
import java.math.BigDecimal; 
 | 
import java.util.*; 
 | 
import java.util.concurrent.Callable; 
 | 
import java.util.concurrent.ExecutorService; 
 | 
import java.util.concurrent.Executors; 
 | 
import java.util.stream.Collectors; 
 | 
  
 | 
/** 
 | 
 * 志邦组织信息表Service实现 
 | 
 * @author 江蹄蹄 
 | 
 * @date 2024/07/04 14:40 
 | 
 */ 
 | 
@Service 
 | 
public class ShopServiceImpl implements ShopService { 
 | 
    ExecutorService executor = Executors.newFixedThreadPool(1); 
 | 
    @Autowired 
 | 
    private RedisTemplate<String, Object> redisTemplate; 
 | 
    @Autowired 
 | 
    private ShopJoinMapper shopMapper; 
 | 
  
 | 
    @Autowired 
 | 
    private SegmentsMapper segmentsMapper; 
 | 
    @Autowired 
 | 
    private CategorySegMapper categorySegMapper; 
 | 
    @Autowired 
 | 
    private UsersMapper usersMapper; 
 | 
    @Autowired 
 | 
    private SystemDictDataBiz systemDictDataBiz; 
 | 
    @Autowired 
 | 
    private MemberMapper memberMapper; 
 | 
  
 | 
    @Override 
 | 
    public Long create(Shop shop) { 
 | 
        shopMapper.insert(shop); 
 | 
        return shop.getId(); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteById(Long id) { 
 | 
        shopMapper.deleteById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void delete(Shop shop) { 
 | 
        UpdateWrapper<Shop> deleteWrapper = new UpdateWrapper<>(shop); 
 | 
        shopMapper.delete(deleteWrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void deleteByIdInBatch(List<Long> ids) { 
 | 
        if (CollectionUtils.isEmpty(ids)) { 
 | 
            return; 
 | 
        } 
 | 
        shopMapper.deleteBatchIds(ids); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateById(Shop shop) { 
 | 
        shopMapper.updateById(shop); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateByIdInBatch(List<Shop> shops) { 
 | 
        if (CollectionUtils.isEmpty(shops)) { 
 | 
            return; 
 | 
        } 
 | 
        for (Shop shop: shops) { 
 | 
            this.updateById(shop); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Shop findById(Long id) { 
 | 
        return shopMapper.selectById(id); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Shop findOne(Shop shop) { 
 | 
        QueryWrapper<Shop> wrapper = new QueryWrapper<>(shop); 
 | 
        return shopMapper.selectOne(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Shop> findList(Shop shop) { 
 | 
        QueryWrapper<Shop> wrapper = new QueryWrapper<>(shop); 
 | 
        return shopMapper.selectList(wrapper); 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public List<Shop> listByParent(String piamId) { 
 | 
        QueryWrapper<Shop> wrapper = new QueryWrapper<>(); 
 | 
        wrapper .select("shop.*,(select count(b.id) from shop b where b.isdeleted=0 and b.parent_iam_id = shop.org_id) as childNum") 
 | 
                .lambda() 
 | 
                .eq(StringUtils.isNotBlank(piamId),Shop::getParentIamId,piamId) 
 | 
                .isNull(StringUtils.isBlank(piamId),Shop::getParentIamId) 
 | 
//                .eq(Shop::getIsdeleted,Constants.ZERO) 
 | 
                .orderByAsc(Shop::getOrderNum); 
 | 
        List<Shop> list = shopMapper.selectList(wrapper); 
 | 
        if(list!=null){ 
 | 
            for (Shop shop :list){ 
 | 
                shop.setIsLeaf(shop.getChildNum()<=0); 
 | 
                shop.setHasChildren(shop.getChildNum()>0); 
 | 
//                shop.setChildList(shopMapper.selectList(new QueryWrapper<Shop>().lambda().eq(Shop::getParentIamId,shop.getOrgId()))); 
 | 
            } 
 | 
        } 
 | 
        return  list; 
 | 
  
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public PageData<Shop> findPage(PageWrap<Shop> pageWrap) { 
 | 
        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Shop.class); 
 | 
        queryWrapper.leftJoin(" shop t1 on t1.org_id = t.parent_iam_id"); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        if (pageWrap.getModel().getId() != null) { 
 | 
            queryWrapper.eq(Shop::getId, pageWrap.getModel().getId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreator() != null) { 
 | 
            queryWrapper.eq(Shop::getCreator, pageWrap.getModel().getCreator()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCreateDate() != null) { 
 | 
            queryWrapper.ge(Shop::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); 
 | 
            queryWrapper.le(Shop::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditor() != null) { 
 | 
            queryWrapper.eq(Shop::getEditor, pageWrap.getModel().getEditor()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getEditDate() != null) { 
 | 
            queryWrapper.ge(Shop::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); 
 | 
            queryWrapper.le(Shop::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getIsdeleted() != null) { 
 | 
            queryWrapper.eq(Shop::getIsdeleted, pageWrap.getModel().getIsdeleted()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getRemark() != null) { 
 | 
            queryWrapper.eq(Shop::getRemark, pageWrap.getModel().getRemark()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getOrgId() != null) { 
 | 
            queryWrapper.eq(Shop::getOrgId, pageWrap.getModel().getOrgId()); 
 | 
        } 
 | 
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()),Shop::getName, pageWrap.getModel().getName()); 
 | 
        if (pageWrap.getModel().getOrgOldId() != null) { 
 | 
            queryWrapper.eq(Shop::getOrgOldId, pageWrap.getModel().getOrgOldId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getParentId() != null) { 
 | 
            queryWrapper.eq(Shop::getParentId, pageWrap.getModel().getParentId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getStatus() != null) { 
 | 
            queryWrapper.eq(Shop::getStatus, pageWrap.getModel().getStatus()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getOrderNum() != null) { 
 | 
            queryWrapper.eq(Shop::getOrderNum, pageWrap.getModel().getOrderNum()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSourceCode() != null) { 
 | 
            queryWrapper.eq(Shop::getSourceCode, pageWrap.getModel().getSourceCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getCode() != null) { 
 | 
            queryWrapper.eq(Shop::getCode, pageWrap.getModel().getCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getType() != null) { 
 | 
            queryWrapper.eq(Shop::getType, pageWrap.getModel().getType()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getAttribute() != null) { 
 | 
            queryWrapper.eq(Shop::getAttribute, pageWrap.getModel().getAttribute()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getWeixinId() != null) { 
 | 
            queryWrapper.eq(Shop::getWeixinId, pageWrap.getModel().getWeixinId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getDingdingId() != null) { 
 | 
            queryWrapper.eq(Shop::getDingdingId, pageWrap.getModel().getDingdingId()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSyncDate() != null) { 
 | 
            queryWrapper.ge(Shop::getSyncDate, Utils.Date.getStart(pageWrap.getModel().getSyncDate())); 
 | 
            queryWrapper.le(Shop::getSyncDate, Utils.Date.getEnd(pageWrap.getModel().getSyncDate())); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSyncInfo() != null) { 
 | 
            queryWrapper.eq(Shop::getSyncInfo, pageWrap.getModel().getSyncInfo()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getFcode() != null) { 
 | 
            queryWrapper.eq(Shop::getFcode, pageWrap.getModel().getFcode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getScode() != null) { 
 | 
            queryWrapper.eq(Shop::getScode, pageWrap.getModel().getScode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getZcode() != null) { 
 | 
            queryWrapper.eq(Shop::getZcode, pageWrap.getModel().getZcode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getGlCode() != null) { 
 | 
            queryWrapper.eq(Shop::getGlCode, pageWrap.getModel().getGlCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getGlName() != null) { 
 | 
            queryWrapper.eq(Shop::getGlName, pageWrap.getModel().getGlName()); 
 | 
        } 
 | 
            queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCountry()),Shop::getCountry, pageWrap.getModel().getCountry()); 
 | 
        if (pageWrap.getModel().getProvinceCode() != null) { 
 | 
            queryWrapper.eq(Shop::getProvinceCode, pageWrap.getModel().getProvinceCode()); 
 | 
        } 
 | 
            queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getProvinceName()),Shop::getProvinceName, pageWrap.getModel().getProvinceName()); 
 | 
        if (pageWrap.getModel().getCityCode() != null) { 
 | 
            queryWrapper.eq(Shop::getCityCode, pageWrap.getModel().getCityCode()); 
 | 
        } 
 | 
            queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCityName()),Shop::getCityName, pageWrap.getModel().getCityName()); 
 | 
        if (pageWrap.getModel().getAreaCode() != null) { 
 | 
            queryWrapper.eq(Shop::getAreaCode, pageWrap.getModel().getAreaCode()); 
 | 
        } 
 | 
            queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getAreaName()),Shop::getAreaName, pageWrap.getModel().getAreaName()); 
 | 
        if (pageWrap.getModel().getUnitCode() != null) { 
 | 
            queryWrapper.eq(Shop::getUnitCode, pageWrap.getModel().getUnitCode()); 
 | 
        } 
 | 
        if (pageWrap.getModel().getSecondType() != null) { 
 | 
            queryWrapper.eq(Shop::getSecondType, pageWrap.getModel().getSecondType()); 
 | 
        } 
 | 
        queryWrapper.apply(StringUtils.isNotBlank(pageWrap.getModel().getParentName()), 
 | 
                    "(t1.name like '%"+pageWrap.getModel().getParentName()+"%' or t1.code like '%"+pageWrap.getModel().getParentName()+"%' )" ); 
 | 
        queryWrapper.exists(StringUtils.isNotBlank(pageWrap.getModel().getSiteCode()), 
 | 
                    "(select c.id from category_seg c where c.isdeleted=0 and (c.org_id=t.code or c.scode =t1.code ) limit 1)" ); 
 | 
        for(PageWrap.SortData sortData: pageWrap.getSorts()) { 
 | 
            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { 
 | 
                queryWrapper.orderByDesc(sortData.getProperty()); 
 | 
            } else { 
 | 
                queryWrapper.orderByAsc(sortData.getProperty()); 
 | 
            } 
 | 
        } 
 | 
        PageData<Shop> pageData = PageData.from(shopMapper.selectPage(page, queryWrapper)); 
 | 
        //查询经营范围信息 
 | 
        List<CategorySeg> categorySegAllList = categorySegMapper.selectList(new QueryWrapper<CategorySeg>().lambda() 
 | 
                .isNotNull(CategorySeg::getOrgId) 
 | 
                .eq(CategorySeg::getIsdeleted,Constants.ZERO)); 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categorySegAllList)){ 
 | 
            for (Shop shop:pageData.getRecords()) { 
 | 
                if(StringUtils.isBlank(shop.getOrgId())){ 
 | 
                    continue; 
 | 
                } 
 | 
                List<CategorySeg> categorySegList = categorySegAllList.stream().filter(i->i.getOrgId().equals(shop.getOrgId())).collect(Collectors.toList()); 
 | 
                List<UnitCodeVo> unitCodeVoList =systemDictDataBiz.getUnitList(); 
 | 
                List<String> seqNameList = new ArrayList<>(); 
 | 
                for(CategorySeg model : categorySegList){ 
 | 
                    String seqName = systemDictDataBiz.getUnitName(model.getUnitCode(),unitCodeVoList); 
 | 
                    if(Objects.nonNull(seqName)){ 
 | 
                        seqNameList.add(seqName); 
 | 
                    } 
 | 
                } 
 | 
                shop.setSeqNameList(seqNameList); 
 | 
            } 
 | 
        } 
 | 
  
 | 
        return pageData; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public long count(Shop shop) { 
 | 
        QueryWrapper<Shop> wrapper = new QueryWrapper<>(shop); 
 | 
        return shopMapper.selectCount(wrapper); 
 | 
    } 
 | 
    @Override 
 | 
//    @Async 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public String importFcodeBatch(MultipartFile file){ 
 | 
        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        if(importing!=null && importing){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在导入或者上下级重置任务正在执行中,请稍后再试!"); 
 | 
        } 
 | 
        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_SHOP,true); 
 | 
        try { 
 | 
            LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
            ExcelImporter ie = null; 
 | 
            List<FcodeImport> dataList =null; 
 | 
            try { 
 | 
                ie = new ExcelImporter(file,0,0); 
 | 
                dataList = ie.getDataList(FcodeImport.class,null); 
 | 
            }  catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            if(dataList == null || dataList.size() ==0){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!"); 
 | 
            } 
 | 
            Date date =new Date(); 
 | 
            List<FcodeImport> finalDataList = dataList; 
 | 
            Callable<String> task = () -> { 
 | 
                dealFcodeDataBiz(finalDataList,date,loginUserInfo); 
 | 
                return "异步任务完成"; 
 | 
            }; 
 | 
            executor.submit(task); 
 | 
            return "导入成功"; 
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void dealFcodeDataBiz(List<FcodeImport> dataList, Date date, LoginUserInfo loginUserInfo) { 
 | 
        try { 
 | 
            for(int i=0;i<dataList.size();i++){ 
 | 
                FcodeImport model = dataList.get(i); 
 | 
                if(StringUtils.isBlank(model.getOrgId())  ){ 
 | 
                    continue; 
 | 
                } 
 | 
                Shop shop = shopMapper.selectOne(new QueryWrapper<Shop>().lambda().eq(Shop::getOrgId,model.getOrgId())); 
 | 
                if(shop == null){ 
 | 
                    continue; 
 | 
                } 
 | 
                shop.setCountry(model.getCountry()); 
 | 
                shop.setProvinceCode(model.getProvinceCode()); 
 | 
                shop.setProvinceName(model.getProvinceName()); 
 | 
                shop.setCityCode(model.getCityCode()); 
 | 
                shop.setCityName(model.getCityName()); 
 | 
                shop.setTown(model.getTown()); 
 | 
                shop.setEditDate(date); 
 | 
                shop.setEditor(loginUserInfo.getId()); 
 | 
                shop.setAreaCode(model.getAreaCode()); 
 | 
                shop.setAreaName(model.getAreaName()); 
 | 
                shop.setRegAddr(model.getRegAddr()); 
 | 
                shop.setLegalPhone(model.getLegalPhone()); 
 | 
                shop.setLegalIdcode(model.getLegalIdcode()); 
 | 
                shop.setLegalName(model.getLegalName()); 
 | 
                shop.setTaxRegCode(model.getTaxRegCode()); 
 | 
                shopMapper.updateById(shop); 
 | 
            } 
 | 
  
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        }finally { 
 | 
            executor.shutdown(); 
 | 
            redisTemplate.delete(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public String importCategoryBatch(MultipartFile file){ 
 | 
        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        if(importing!=null && importing){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在导入或者上下级重置任务正在执行中,请稍后再试!"); 
 | 
        } 
 | 
        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_SHOP,true); 
 | 
        try { 
 | 
            LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
            ExcelImporter ie = null; 
 | 
            List<CategoryImport> dataList =null; 
 | 
            try { 
 | 
                ie = new ExcelImporter(file,0,0); 
 | 
                dataList = ie.getDataList(CategoryImport.class,null); 
 | 
            }  catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            if(dataList == null || dataList.size() ==0){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!"); 
 | 
            } 
 | 
            Date date =new Date(); 
 | 
            List<CategoryImport> finalDataList = dataList; 
 | 
            Callable<String> task = () -> { 
 | 
                dealCategoryDataBiz(finalDataList,date,loginUserInfo); 
 | 
                return "异步任务完成"; 
 | 
            }; 
 | 
            executor.submit(task); 
 | 
            return "导入成功"; 
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Async 
 | 
    public void dealCategoryDataBiz(List<CategoryImport> dataList, Date date, LoginUserInfo loginUserInfo) { 
 | 
        try { 
 | 
            List<CategorySeg> categorySegList = new ArrayList<>(); 
 | 
            List<Segments> segmentsList = new ArrayList<>(); 
 | 
            Map<String,List<String>> siteCodes = new HashMap<>(); 
 | 
            List<String> orgIdList = new ArrayList<>(); 
 | 
            for(int i=0;i<dataList.size();i++){ 
 | 
                CategoryImport model = dataList.get(i); 
 | 
                if(StringUtils.isBlank(model.getOrgId())  ){ 
 | 
                    continue; 
 | 
                } 
 | 
                orgIdList.add(model.getOrgId()); 
 | 
                dealSegmentData(date,model,loginUserInfo,segmentsList); 
 | 
                categorySegList.add(initInsertCategorySeg(date,model,loginUserInfo,siteCodes)); 
 | 
            } 
 | 
            if(orgIdList.size()>0){ 
 | 
                categorySegMapper.delete(new UpdateWrapper<CategorySeg>().lambda() .in(CategorySeg::getOrgId,orgIdList)); 
 | 
            } 
 | 
            if(siteCodes.size()>0){ 
 | 
                for(Map.Entry<String ,List<String>> entry : siteCodes.entrySet()){ 
 | 
                    String key = entry.getKey(); 
 | 
                    List<String> codes = entry.getValue(); 
 | 
                    Shop ts = null; 
 | 
                    String tcode =key.substring(2); 
 | 
                    if(StringUtils.startsWith(key,"f_")){ 
 | 
                        ts = shopMapper.selectOne(new QueryWrapper<Shop>().lambda() 
 | 
                                .eq(Shop::getCode,tcode) 
 | 
                                .eq(Shop::getSecondType,Constants.TWO )); 
 | 
                    } 
 | 
                    if(StringUtils.startsWith(key,"f_")){ 
 | 
                        ts = shopMapper.selectOne(new QueryWrapper<Shop>().lambda() 
 | 
                                .eq(Shop::getCode,tcode) 
 | 
                                .eq(Shop::getSecondType,Constants.ONE )); 
 | 
                    } 
 | 
                    if(ts!=null){ 
 | 
                        ts.setSiteCode(String.join("; ", codes) +";"); 
 | 
                        shopMapper.updateById(ts); 
 | 
                    } 
 | 
                } 
 | 
            } 
 | 
            if(categorySegList.size()>0){ 
 | 
                int temp = 0; 
 | 
                while(temp < categorySegList.size()){ 
 | 
                    int index; 
 | 
                    if(temp + 500 <= categorySegList.size()){ 
 | 
                        index = temp+500; 
 | 
                    }else{ 
 | 
                        index = categorySegList.size(); 
 | 
                    } 
 | 
                    categorySegMapper.insert(categorySegList.subList(temp,index)); 
 | 
                    temp = index; 
 | 
                } 
 | 
            } 
 | 
            if(segmentsList.size()>0){ 
 | 
                int temp = 0; 
 | 
                while(temp < segmentsList.size()){ 
 | 
                    int index; 
 | 
                    if(temp + 500 <= segmentsList.size()){ 
 | 
                        index = temp+500; 
 | 
                    }else{ 
 | 
                        index = segmentsList.size(); 
 | 
                    } 
 | 
                    segmentsMapper.insert(segmentsList.subList(temp,index)); 
 | 
                    temp = index; 
 | 
                } 
 | 
            } 
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        }finally { 
 | 
            executor.shutdown(); // 关闭ExecutorService 
 | 
            redisTemplate.delete(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void dealSegmentData(Date date, CategoryImport model, LoginUserInfo loginUserInfo, List<Segments> segmentsList) { 
 | 
  
 | 
        if(StringUtils.isNotBlank(model.getSegId())){ 
 | 
            //如果战区不为空 
 | 
            if(newSegment(model.getSegId(),Constants.ZERO,segmentsList) && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda() 
 | 
                    .eq(Segments::getSegmentId,model.getSegId()) 
 | 
                    .eq(Segments::getUnitCode,model.getUnitCode()) 
 | 
                    .eq(Segments::getType,Constants.ZERO)) ==0){ 
 | 
                segmentsList.add(initSegmentData(model,date,loginUserInfo,Constants.ZERO)); 
 | 
            } 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(model.getSegId2())){ 
 | 
            //如果省区不为空 
 | 
            if(newSegment(model.getSegId2(),Constants.ONE,segmentsList) && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda() 
 | 
                    .eq(Segments::getSegmentId,model.getSegId2()) 
 | 
                    .eq(Segments::getParentId,model.getSegId()) 
 | 
                    .eq(Segments::getUnitCode,model.getUnitCode()) 
 | 
                    .eq(Segments::getType,Constants.ONE)) ==0){ 
 | 
                segmentsList.add(initSegmentData(model,date,loginUserInfo,Constants.ONE)); 
 | 
            } 
 | 
        } 
 | 
        if(StringUtils.isNotBlank(model.getSegId3())){ 
 | 
            //如果片区不为空 
 | 
            if(newSegment(model.getSegId3(),Constants.TWO,segmentsList) && segmentsMapper.selectCount(new QueryWrapper<Segments>().lambda() 
 | 
                    .eq(Segments::getSegmentId,model.getSegId3()) 
 | 
                    .eq(Segments::getUnitCode,model.getUnitCode()) 
 | 
                    .eq(Segments::getParentId,model.getSegId2()) 
 | 
                    .eq(Segments::getType,Constants.TWO)) ==0){ 
 | 
                segmentsList.add(initSegmentData(model,date,loginUserInfo,Constants.TWO)); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private boolean newSegment(String segId2, int one, List<Segments> segmentsList) { 
 | 
        for(Segments s : segmentsList){ 
 | 
            if(StringUtils.equals(s.getSegmentId(),segId2) && Constants.equalsInteger(one,s.getType())){ 
 | 
                return false; 
 | 
            } 
 | 
        } 
 | 
        return true; 
 | 
    } 
 | 
  
 | 
    private Segments initSegmentData(CategoryImport model, Date date, LoginUserInfo loginUserInfo, int type) { 
 | 
        Segments data = new Segments(); 
 | 
        data.setCreateDate(date); 
 | 
        data.setEditDate(date); 
 | 
        data.setCreator(loginUserInfo.getId()); 
 | 
        data.setEditor(loginUserInfo.getId()); 
 | 
        data.setIsdeleted(Constants.ZERO); 
 | 
        data.setStatus(Constants.ZERO); 
 | 
        data.setUnitCode(model.getUnitCode()); 
 | 
        data.setType(type); 
 | 
        if(type ==Constants.ZERO){ 
 | 
            data.setName(model.getSegName()); 
 | 
            data.setSegmentId(model.getSegId()); 
 | 
            data.setParentId(null); 
 | 
            data.setRemark(model.getSegName()); 
 | 
        }else if(type ==Constants.ONE){ 
 | 
            data.setName(model.getSegName2()); 
 | 
            data.setSegmentId(model.getSegId2()); 
 | 
            data.setParentId(model.getSegId()); 
 | 
            data.setRemark(model.getSegName()+"/"+model.getSegName2()); 
 | 
        }else{ 
 | 
            data.setName(model.getSegName3()); 
 | 
            data.setSegmentId(model.getSegId3()); 
 | 
            data.setParentId(model.getSegId2()); 
 | 
            data.setRemark(model.getSegName()+"/"+model.getSegName2()+"/"+model.getSegName3()); 
 | 
        } 
 | 
        return data; 
 | 
    } 
 | 
  
 | 
    private CategorySeg initInsertCategorySeg(Date date, CategoryImport model, LoginUserInfo loginUserInfo,Map<String,List<String>> siteCodes) { 
 | 
        CategorySeg data = new CategorySeg(); 
 | 
        data.setCreateDate(date); 
 | 
        data.setEditDate(date); 
 | 
        data.setCreator(loginUserInfo.getId()); 
 | 
        data.setEditor(loginUserInfo.getId()); 
 | 
        data.setIsdeleted(Constants.ZERO); 
 | 
        data.setOrgId(model.getOrgId()); 
 | 
        data.setSegId(model.getSegId()); 
 | 
        data.setSegId2(model.getSegId2()); 
 | 
        data.setSegId3(model.getSegId3()); 
 | 
        data.setSegName(model.getSegName()); 
 | 
        data.setSegName2(model.getSegName2()); 
 | 
        data.setSegName3(model.getSegName3()); 
 | 
        data.setShipToAddress(model.getShipToAddress()); 
 | 
        data.setShipToPhone(model.getShipToPhone()); 
 | 
        data.setShipToPerson(model.getShipToPerson()); 
 | 
        data.setBrandId(model.getBrandId()); 
 | 
        data.setUnitCode(model.getUnitCode()); 
 | 
        data.setSiteCode(model.getSiteCode()); 
 | 
        data.setScode(model.getScode()); 
 | 
        dealSiteCode(model,siteCodes); 
 | 
  
 | 
        return data; 
 | 
    } 
 | 
  
 | 
    private void dealSiteCode(CategoryImport model, Map<String, List<String>> siteCodes) { 
 | 
        List<String> tList = siteCodes.get(model.getOrgId()); 
 | 
        if(tList == null){ 
 | 
            tList = new ArrayList<>(); 
 | 
        } 
 | 
        if(isNewSiteCode(model.getSiteCode(),tList)){ 
 | 
            tList.add(model.getSiteCode()); 
 | 
            siteCodes.put("f_"+model.getOrgId(),tList); 
 | 
        } 
 | 
        tList = siteCodes.get(model.getScode()); 
 | 
        if(tList == null){ 
 | 
            tList = new ArrayList<>(); 
 | 
        } 
 | 
        if(isNewSiteCode(model.getSiteCode(),tList)){ 
 | 
            tList.add(model.getSiteCode()); 
 | 
            siteCodes.put("s_"+model.getScode(),tList); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private boolean isNewSiteCode(String siteCode, List<String> tList) { 
 | 
        if(tList!=null){ 
 | 
            for(String s :tList){ 
 | 
                if(StringUtils.equals(s,siteCode)){ 
 | 
                    return false; 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
        return  true; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
//    @Async 
 | 
    @Transactional(rollbackFor = {BusinessException.class,Exception.class}) 
 | 
    public String importBatch(MultipartFile file){ 
 | 
        Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        if(importing!=null && importing){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,已存在导入或者上下级重置任务正在执行中,请稍后再试!"); 
 | 
        } 
 | 
        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_SHOP,true); 
 | 
        try { 
 | 
            LoginUserInfo loginUserInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); 
 | 
            ExcelImporter ie = null; 
 | 
            List<ShopImport> dataList =null; 
 | 
            try { 
 | 
                ie = new ExcelImporter(file,1,0); 
 | 
                dataList = ie.getDataList(ShopImport.class,null); 
 | 
            }  catch (Exception e) { 
 | 
                e.printStackTrace(); 
 | 
            } 
 | 
            if(dataList == null || dataList.size() ==0){ 
 | 
                throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,录入数据为空!"); 
 | 
            } 
 | 
            Date date =new Date(); 
 | 
            List<ShopImport> finalDataList = dataList; 
 | 
            Callable<String> task = () -> { 
 | 
                dealShopDataBiz(finalDataList,date,loginUserInfo); 
 | 
                return "异步任务完成"; 
 | 
            }; 
 | 
            executor.submit(task); 
 | 
  
 | 
            return "导入成功"; 
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        } 
 | 
    } 
 | 
  
 | 
    private void dealShopDataBiz(List<ShopImport> dataList, Date date, LoginUserInfo loginUserInfo) { 
 | 
        try { 
 | 
            List<Shop> list =  shopMapper.selectJoinList(Shop.class,new MPJLambdaWrapper<Shop>() 
 | 
                    .selectAll(Shop.class) 
 | 
            ); 
 | 
            List<Shop> insertShops = new ArrayList<>(); 
 | 
            List<Shop> updateShops = new ArrayList<>(); 
 | 
            for(int i=0;i<dataList.size();i++){ 
 | 
                ShopImport model = dataList.get(i); 
 | 
                if(StringUtils.isBlank(model.getName()) 
 | 
                        &&StringUtils.isBlank(model.getCode()) ){ 
 | 
                    continue; 
 | 
                } 
 | 
                Shop shop = checkModelParam(model,insertShops,updateShops,i,loginUserInfo,list,date); 
 | 
            } 
 | 
            if(insertShops .size() >0){ 
 | 
                int temp = 0; 
 | 
                while(temp < insertShops.size()){ 
 | 
                    int index; 
 | 
                    if(temp + 500 <= insertShops.size()){ 
 | 
                        index = temp+500; 
 | 
                    }else{ 
 | 
                        index = insertShops.size(); 
 | 
                    } 
 | 
                    shopMapper.insert(insertShops.subList(temp,index)); 
 | 
                    temp = index; 
 | 
                } 
 | 
            } 
 | 
            if(updateShops .size() >0){ 
 | 
                for(Shop s : updateShops){ 
 | 
                    //遍历更新数据 
 | 
                    shopMapper.updateById(s); 
 | 
                } 
 | 
            } 
 | 
        }catch (BusinessException e){ 
 | 
            throw e; 
 | 
        }catch (Exception e){ 
 | 
            throw  new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"信息导入失败,请稍后重试"); 
 | 
        }finally { 
 | 
            executor.shutdown(); 
 | 
            redisTemplate.delete(Constants.RedisKeys.IMPORTING_SHOP); 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
    private Shop checkModelParam(ShopImport model, List<Shop> newList, List<Shop> updateList, int index, LoginUserInfo loginUserInfo 
 | 
            , List<Shop> list,Date date) { 
 | 
        if(StringUtils.isBlank(model.getOrgId())){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织编码】信息不完整,请检查表格内容!"); 
 | 
        } 
 | 
        if(StringUtils.isBlank(model.getName())){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织名称】信息不完整,请检查表格内容!"); 
 | 
        } 
 | 
        if( Constants.formatIntegerNum(model.getType()) <1 || Constants.formatIntegerNum(model.getType()) >3 ){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织一级类型】信息不正确,请填写1-5正确的类型值,请检查表格内容!"); 
 | 
        } 
 | 
        if( model.getSecondType()!=null && (Constants.formatIntegerNum(model.getSecondType()) <1 || Constants.formatIntegerNum(model.getSecondType()) >5) ){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织二级类型】信息不正确,请填写1-5正确的类型值,请检查表格内容!"); 
 | 
        } 
 | 
        if( Constants.formatIntegerNum(model.getType()) <1 || Constants.formatIntegerNum(model.getType()) >5 ){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织类型】信息不正确,请填写1-5正确的类型值,请检查表格内容!"); 
 | 
        } 
 | 
        if( model.getAttribute() !=null && (Constants.formatIntegerNum(model.getAttribute()) <1 || Constants.formatIntegerNum(model.getAttribute()) >5 )){ 
 | 
            throw  new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"对不起,第"+(index+3)+"行【组织属性】信息不正确,请填写1-5正确的属性值,请检查表格内容!"); 
 | 
        } 
 | 
        Shop shop = getShopByOrgID(model.getOrgId(),list); 
 | 
        if(shop == null){ 
 | 
            shop = new Shop(); 
 | 
            shop.setCreator(loginUserInfo.getId()); 
 | 
            shop.setCreateDate(date); 
 | 
            shop.setEditor(loginUserInfo.getId()); 
 | 
            shop.setEditDate(date); 
 | 
            shop.setOrgId(model.getOrgId()); 
 | 
            shop.setName(model.getName()); 
 | 
            shop.setCode(model.getCode()); 
 | 
            shop.setUnitCode(model.getUnitCode()); 
 | 
            shop.setStatus(model.getStatus()); 
 | 
            if(Constants.equalsInteger(model.getStatus(),Constants.TWO)){ 
 | 
                shop.setIsdeleted(Constants.ONE); 
 | 
            }else{ 
 | 
                shop.setIsdeleted(Constants.ZERO); 
 | 
            } 
 | 
            shop.setType(model.getType()); 
 | 
            shop.setSecondType(model.getSecondType()); 
 | 
            shop.setAttribute(model.getAttribute()); 
 | 
            shop.setParentIamId(model.getParentOrgId()); 
 | 
            newList.add(shop); 
 | 
        }else { 
 | 
            shop.setEditor(loginUserInfo.getId()); 
 | 
            shop.setEditDate(date); 
 | 
            shop.setType(model.getType()); 
 | 
            shop.setSecondType(model.getSecondType()); 
 | 
            shop.setName(model.getName()); 
 | 
            shop.setCode(model.getCode()); 
 | 
            shop.setUnitCode(model.getUnitCode()); 
 | 
            if(Constants.equalsInteger(model.getStatus(),Constants.TWO)){ 
 | 
                shop.setIsdeleted(Constants.ONE); 
 | 
            }else{ 
 | 
                shop.setIsdeleted(Constants.ZERO); 
 | 
            } 
 | 
            shop.setStatus(model.getStatus()); 
 | 
            shop.setAttribute(model.getAttribute()); 
 | 
            shop.setParentIamId(model.getParentOrgId()); 
 | 
            updateList.add(shop); 
 | 
        } 
 | 
        return  shop; 
 | 
    } 
 | 
  
 | 
    private Shop getShopByOrgID(String orgId, List<Shop> list) { 
 | 
        if(list ==null || list.size() ==0){ 
 | 
            return null; 
 | 
        } 
 | 
        for(Shop s :list){ 
 | 
            if(StringUtils.equals(s.getOrgId(),orgId)){ 
 | 
                return s; 
 | 
            } 
 | 
        } 
 | 
        return null; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updateSort(UpdateShopSortDTO dto) { 
 | 
        Shop shop = shopMapper.selectById(dto.getId()); 
 | 
        if(Objects.isNull(shop)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
  
 | 
        List<Shop> shopPool; 
 | 
        if (shop.getParentId() == null) { 
 | 
            shopPool = shopMapper.selectList(new QueryWrapper<Shop>().lambda() 
 | 
                    .eq(Shop::getIsdeleted,Constants.ZERO) 
 | 
                    .isNull(Shop::getParentId) 
 | 
                    .orderByAsc(Shop::getOrderNum) 
 | 
            ); 
 | 
        } else { 
 | 
            shopPool = shopMapper.selectList(new QueryWrapper<Shop>().lambda() 
 | 
                    .eq(Shop::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(Shop::getParentId,shop.getParentId()) 
 | 
                    .orderByAsc(Shop::getOrderNum) 
 | 
            ); 
 | 
        } 
 | 
        int currentMenuIndex = 0; 
 | 
        for (int i = 0; i < shopPool.size(); i++) { 
 | 
            if (shopPool.get(i).getId().equals(dto.getId())) { 
 | 
                currentMenuIndex = i; 
 | 
                break; 
 | 
            } 
 | 
        } 
 | 
        // 上移 
 | 
        if ("top".equals(dto.getDirection())) { 
 | 
            if (currentMenuIndex - 1 < 0) { 
 | 
                return; 
 | 
            } 
 | 
            Shop preMenu = shopPool.get(currentMenuIndex - 1); 
 | 
            shopPool.remove(currentMenuIndex - 1); 
 | 
            shopPool.add(currentMenuIndex, preMenu); 
 | 
        } 
 | 
        // 下移 
 | 
        else { 
 | 
            if (currentMenuIndex + 1 > shopPool.size() - 1) { 
 | 
                return; 
 | 
            } 
 | 
            Shop nextMenu = shopPool.remove(currentMenuIndex + 1); 
 | 
            shopPool.add(currentMenuIndex, nextMenu); 
 | 
        } 
 | 
        for (int i = 0; i < shopPool.size(); i++) { 
 | 
            shopPool.get(i).setOrderNum(i); 
 | 
        } 
 | 
  
 | 
        for (Shop updShop:shopPool) { 
 | 
            shopMapper.updateById(updShop); 
 | 
        } 
 | 
    } 
 | 
    @Override 
 | 
    public   List<ShopTreeVo> shopTree(Integer type){ 
 | 
        MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.selectAll(Shop.class); 
 | 
        queryWrapper.select("t1.name_path",Shop::getParentNamePath); 
 | 
        queryWrapper.select("t1.id_path",Shop::getParentIdPath); 
 | 
        queryWrapper.select("t1.type",Shop::getParentType); 
 | 
        queryWrapper.leftJoin(Shop.class,Shop::getId,Shop::getParentId); 
 | 
        queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO); 
 | 
        queryWrapper.eq(type!=null,Shop::getType,type); 
 | 
        queryWrapper.orderByAsc(true,"t.order_num"); 
 | 
        List<ShopTreeVo> shopList = shopMapper.selectJoinList(ShopTreeVo.class,queryWrapper); 
 | 
        ShopTree treeBuild = new ShopTree(shopList); 
 | 
        shopList = treeBuild.buildTree(); 
 | 
        return shopList; 
 | 
    } 
 | 
    @Override 
 | 
    public   List<ShopTreeVo> shopTreeCache(Integer type){ 
 | 
  
 | 
        return (List<ShopTreeVo>) redisTemplate.opsForValue().get(Constants.RedisKeys.SHOP_TREE); 
 | 
    } 
 | 
    @Override 
 | 
    @Async 
 | 
    public   void dealShopNamePath(){ 
 | 
        redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_SHOP,true); 
 | 
        try { 
 | 
            List<ShopTreeVo> shopList = shopTree(null); 
 | 
            updateNamePath(null,shopList); 
 | 
        }catch (Exception e){ 
 | 
  
 | 
        }finally { 
 | 
  
 | 
            redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_SHOP,false); 
 | 
        } 
 | 
  
 | 
    } 
 | 
    /** 
 | 
     * 递归处理组织编码和名称完整路径问题 
 | 
     * @param parent 
 | 
     * @param shopList 
 | 
     */ 
 | 
    private void updateNamePath(Shop parent,List<ShopTreeVo> shopList) { 
 | 
        if(shopList!=null && shopList.size()>0){ 
 | 
            for(ShopTreeVo shop : shopList){ 
 | 
                Shop s = new Shop(); 
 | 
                s.setId(shop.getId()); 
 | 
                s.setName(shop.getName()); 
 | 
                if(parent == null){ 
 | 
                    s.setNamePath(s.getName()); 
 | 
                    s.setIdPath(s.getId()+"/"); 
 | 
                    shopMapper.updateById(s); 
 | 
                }else{ 
 | 
                    String idPath = StringUtils.defaultString(parent.getIdPath(),"")+ shop.getId()+"/"; 
 | 
                    String namePath =StringUtils.defaultString(parent.getNamePath(),"")+"/"+shop.getName(); 
 | 
                    s.setParentId(parent.getId()); 
 | 
                    s.setNamePath(namePath); 
 | 
                    s.setIdPath(idPath); 
 | 
                    if(!(Constants.equalsLong(parent.getId(),shop.getParentId()) 
 | 
                            && StringUtils.equals(idPath,shop.getIdPath()) 
 | 
                            &&StringUtils.equals(namePath,shop.getNamePath())) ){ 
 | 
                        shopMapper.updateById(s); 
 | 
                    } 
 | 
                } 
 | 
                if(shop.getChildList()!=null && shop.getChildList().size()>0){ 
 | 
                    updateNamePath(s,shop.getChildList()); 
 | 
                } 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
  
 | 
  
 | 
    @Override 
 | 
    public PageData<Shop> queryShopByLL(PageWrap<Shop> pageWrap) { 
 | 
        if(Objects.isNull(pageWrap.getModel()) 
 | 
                || Objects.isNull(pageWrap.getModel().getLatitude()) 
 | 
                || Objects.isNull(pageWrap.getModel().getLongitude())){ 
 | 
            return null; 
 | 
        } 
 | 
        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); 
 | 
        MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>(); 
 | 
        queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " + 
 | 
                " ,  (6371 * ACOS(COS(RADIANS("+pageWrap.getModel().getLatitude()+")) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS("+pageWrap.getModel().getLongitude()+")) + SIN(RADIANS("+pageWrap.getModel().getLatitude()+")) * SIN(RADIANS(latitude)) ) ) as distance  " ) 
 | 
                .eq("isdeleted",Constants.ZERO) 
 | 
                .isNotNull("LATITUDE") 
 | 
                .isNotNull("LONGITUDE") 
 | 
                .eq("TYPE",Constants.TWO) 
 | 
                .eq("SECOND_TYPE",Constants.THREE) 
 | 
                .eq("STATUS",Constants.ONE) 
 | 
                .orderByAsc(" distance "); 
 | 
        Utils.MP.blankToNull(pageWrap.getModel()); 
 | 
        PageData<Shop> pageData = PageData.from(shopMapper.selectPage(page, queryWrapper)); 
 | 
        String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) + 
 | 
        StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode()); 
 | 
        for (Shop shop:pageData.getRecords()) { 
 | 
            this.dealDistance(shop); 
 | 
            //查询门店下导购数据 
 | 
            List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId()) 
 | 
                    .eq(Users::getIsdeleted,Constants.ZERO) 
 | 
                    .eq(Users::getStatus,Constants.ONE) 
 | 
            ); 
 | 
            for (Users users:usersList) { 
 | 
                if(StringUtils.isNotBlank(users.getImgurl())){ 
 | 
                    users.setImgurlFull(prefix + users.getImgurl()); 
 | 
                } 
 | 
            } 
 | 
            shop.setUsersList(usersList); 
 | 
        } 
 | 
        return pageData; 
 | 
    } 
 | 
  
 | 
    /** 
 | 
     * 处理门店距离显示 
 | 
     * @param shop 
 | 
     */ 
 | 
    public void dealDistance(Shop shop){ 
 | 
        if(Objects.isNull(shop.getDistance())){ 
 | 
            shop.setDistanceStr("-"); 
 | 
        }else{ 
 | 
            //距离小于1公里 显示米 
 | 
            if(shop.getDistance().compareTo(BigDecimal.ONE)<Constants.ZERO){ 
 | 
                BigDecimal distanceM = shop.getDistance().multiply(new BigDecimal(1000).setScale(0)); 
 | 
                //100米之内 
 | 
                if(distanceM.compareTo(new BigDecimal(100))<0){ 
 | 
                    shop.setDistanceStr("<100米"); 
 | 
                }else{ 
 | 
                    shop.setDistanceStr(distanceM.divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "m"); 
 | 
                } 
 | 
            }else{ 
 | 
                shop.setDistanceStr(shop.getDistance().divide(BigDecimal.valueOf(1)).setScale(2,BigDecimal.ROUND_HALF_UP) + "km"); 
 | 
            } 
 | 
        } 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public Shop shopDetail(Long id,Long memberId) { 
 | 
        QueryWrapper<Shop> queryWrapper = new QueryWrapper<Shop>(); 
 | 
        if(Objects.nonNull(memberId)){ 
 | 
            Member member = memberMapper.selectById(memberId); 
 | 
            //如果人员没有经纬度信息,则不查询距离 
 | 
            if(Objects.nonNull(member)&&Objects.nonNull(member.getLatitude())&&Objects.nonNull(member.getLongitude())){ 
 | 
                queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE " + 
 | 
                        " ,  (6371 * ACOS(COS(RADIANS("+member.getLatitude()+")) * COS(RADIANS(latitude)) * COS(RADIANS(longitude) - RADIANS("+member.getLongitude()+")) + SIN(RADIANS("+member.getLatitude()+")) * SIN(RADIANS(latitude)) ) ) as distance  " ); 
 | 
            } 
 | 
        } 
 | 
        queryWrapper.eq("id",id); 
 | 
        Shop shop = shopMapper.selectOne(queryWrapper); 
 | 
        if(Objects.isNull(shop)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        String prefix = StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.RESOURCE_PATH).getCode()) + 
 | 
                StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.OBJCET_STORAGE,Constants.USERS_FILE).getCode()); 
 | 
        List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId()) 
 | 
                .eq(Users::getIsdeleted,Constants.ZERO) 
 | 
                .eq(Users::getStatus,Constants.ONE) 
 | 
        ); 
 | 
        this.dealDistance(shop); 
 | 
        for (Users users:usersList) { 
 | 
            if(StringUtils.isNotBlank(users.getImgurl())){ 
 | 
                users.setImgurlFull(prefix + users.getImgurl()); 
 | 
            } 
 | 
        } 
 | 
        shop.setUsersList(usersList); 
 | 
        //查询经营范围信息 
 | 
        List<CategorySeg> categorySegList = categorySegMapper.selectList(new QueryWrapper<CategorySeg>().lambda().eq(CategorySeg::getOrgId,shop.getOrgId()).eq(CategorySeg::getIsdeleted,Constants.ZERO)); 
 | 
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(categorySegList)){ 
 | 
            List<UnitCodeVo> unitCodeVoList =systemDictDataBiz.getUnitList(); 
 | 
            List<String> seqNameList = new ArrayList<>(); 
 | 
            for(CategorySeg model : categorySegList){ 
 | 
                String seqName = systemDictDataBiz.getUnitName(model.getUnitCode(),unitCodeVoList); 
 | 
                if(Objects.nonNull(seqName)){ 
 | 
                    seqNameList.add(seqName); 
 | 
                } 
 | 
            } 
 | 
            shop.setSeqNameList(seqNameList); 
 | 
        } 
 | 
        return shop; 
 | 
    } 
 | 
  
 | 
    @Override 
 | 
    public void updShop(EditShopDTO editShopDTO) { 
 | 
        if(Objects.isNull(editShopDTO) 
 | 
        || Objects.isNull(editShopDTO.getId())){ 
 | 
            throw new BusinessException(ResponseStatus.BAD_REQUEST); 
 | 
        } 
 | 
        Shop shop = shopMapper.selectById(editShopDTO.getId()); 
 | 
        if(Objects.isNull(shop)){ 
 | 
            throw new BusinessException(ResponseStatus.DATA_EMPTY); 
 | 
        } 
 | 
        Shop updShop = new Shop(); 
 | 
        BeanUtils.copyProperties(editShopDTO,updShop); 
 | 
        shopMapper.updateById(updShop); 
 | 
    } 
 | 
  
 | 
} 
 |