liukangdong
2024-09-29 b2d360d9113b6955287108ca9e90d76a1f3c1419
server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -41,6 +41,7 @@
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;
@@ -99,6 +100,11 @@
    @Override
    public void updateById(Shop shop) {
        shopMapper.updateById(shop);
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getCardImg,null)
                .isNotNull(Users::getCardImg)
                .eq(Users::getDepartmentId,shop.getId())
        );
    }
    @Override
@@ -358,6 +364,8 @@
                shop.setLegalPhone(model.getLegalPhone());
                shop.setLegalIdcode(model.getLegalIdcode());
                shop.setLegalName(model.getLegalName());
                shop.setFcode(model.getFcode());
                shop.setScode(model.getScode());
                shop.setTaxRegCode(model.getTaxRegCode());
                shopMapper.updateById(shop);
            }
@@ -736,6 +744,7 @@
            shop.setSecondType(model.getSecondType());
            shop.setAttribute(model.getAttribute());
            shop.setParentIamId(model.getParentOrgId());
            shop.setScode(model.getScode());
            newList.add(shop);
        }else {
            shop.setEditor(loginUserInfo.getId());
@@ -744,6 +753,7 @@
            shop.setSecondType(model.getSecondType());
            shop.setName(model.getName());
            shop.setCode(model.getCode());
            shop.setScode(model.getScode());
            shop.setUnitCode(model.getUnitCode());
            if(Constants.equalsInteger(model.getStatus(),Constants.TWO)){
                shop.setIsdeleted(Constants.ONE);
@@ -897,33 +907,32 @@
    @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;
//        }
        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" +
//                        " ,CONVERT (ST_Distance_Sphere (point ("+pageWrap.getModel().getLongitude()+", "+pageWrap.getModel().getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance ")
        queryWrapper.select("ID,NAME,ADDRESS,PROVINCE_NAME,CITY_NAME,AREA_NAME,TOWN,AREA_NAME,LEGAL_PHONE ")
        queryWrapper.select("ID,NAME,LINK_PHONE,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")
                .isNotNull("LATITUDE")
                .isNotNull("LONGITUDE")
                .eq("TYPE",Constants.TWO)
                .eq("SECOND_TYPE",Constants.THREE)
                .eq("STATUS",Constants.ONE);
//                .orderByAsc(" distance ")
                .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)
                    .eq(Users::getType,Constants.ZERO)
            );
            for (Users users:usersList) {
                if(StringUtils.isNotBlank(users.getImgurl())){
@@ -935,6 +944,29 @@
        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(0,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>();
@@ -942,8 +974,8 @@
            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," +
                        " CONVERT (ST_Distance_Sphere (point ("+member.getLongitude()+", "+member.getLatitude()+" ), point ( LONGITUDE, LATITUDE )) /1000,decimal(15,2)) as distance ");
                queryWrapper.select(" * " +
                        " ,  (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);
@@ -956,8 +988,8 @@
        List<Users> usersList =usersMapper.selectList(new QueryWrapper<Users>().lambda().eq(Users::getDepartmentId,shop.getId())
                .eq(Users::getIsdeleted,Constants.ZERO)
                .eq(Users::getStatus,Constants.ONE)
                .eq(Users::getType,Constants.ZERO)
        );
        this.dealDistance(shop);
        for (Users users:usersList) {
            if(StringUtils.isNotBlank(users.getImgurl())){
                users.setImgurlFull(prefix + users.getImgurl());
@@ -965,7 +997,7 @@
        }
        shop.setUsersList(usersList);
        //查询经营范围信息
        List<CategorySeg> categorySegList = categorySegMapper.selectList(new QueryWrapper<CategorySeg>().lambda().eq(CategorySeg::getOrgId,shop.getOrgId()).eq(CategorySeg::getIsdeleted,Constants.ZERO));
        List<CategorySeg> categorySegList = categorySegMapper.selectList(new QueryWrapper<CategorySeg>().lambda().eq(CategorySeg::getScode,shop.getScode()).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<>();
@@ -975,7 +1007,8 @@
                    seqNameList.add(seqName);
                }
            }
            shop.setSeqNameList(seqNameList);
            Set<String> hs = new HashSet<String>(seqNameList);
            shop.setSeqNameList(new ArrayList<String>(hs));
        }
        return shop;
    }
@@ -993,6 +1026,57 @@
        Shop updShop = new Shop();
        BeanUtils.copyProperties(editShopDTO,updShop);
        shopMapper.updateById(updShop);
        usersMapper.update(new UpdateWrapper<Users>().lambda()
                .set(Users::getCardImg,null)
                .isNotNull(Users::getCardImg)
                .eq(Users::getDepartmentId,shop.getId())
        );
    }
    @Override
    public List<Shop> getUserShopList(Long userId) {
        Users users = usersMapper.selectById(userId);
        if(Objects.isNull(users)){
            return new ArrayList<>();
        }
        Shop userShop = shopMapper.selectById(users.getDepartmentId());
        if(Objects.isNull(userShop)){
            return new ArrayList<>();
        }
        Boolean manageShop = true;
        if(users.getRoleCodes().indexOf(StringUtils.trimToNull(systemDictDataBiz.queryByCode(Constants.ZBOM_CUSTOMIZED,Constants.USERS_MANAGE_CODE).getCode()))>=0){
            manageShop = false;
        }
        List<Shop> shopList = shopMapper.selectList(new QueryWrapper<Shop>()
                .lambda()
                .eq(Shop::getScode,userShop.getScode())
                .eq(Shop::getType,Constants.TWO)
                .eq(Shop::getSecondType,Constants.THREE)
                .apply(manageShop,"1=2")
        );
        //查询经营范围信息
        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:shopList) {
                if(StringUtils.isBlank(shop.getOrgId())){
                    continue;
                }
                List<CategorySeg> categorySegList = categorySegAllList.stream().filter(i->i.getScode().equals(shop.getScode())).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);
                    }
                }
                Set<String> hs = new HashSet<String>(seqNameList);
                shop.setSeqNameList(new ArrayList<String>(hs));
            }
        }
        return shopList;
    }
}