From b2d360d9113b6955287108ca9e90d76a1f3c1419 Mon Sep 17 00:00:00 2001 From: liukangdong <898885815@qq.com> Date: 星期日, 29 九月 2024 15:05:11 +0800 Subject: [PATCH] Merge branch 'master' of http://139.186.142.91:10010/r/productDev/zbomyoujia --- server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java | 546 ++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 files changed, 529 insertions(+), 17 deletions(-) diff --git a/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java b/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java index bf00898..44ba5fd 100644 --- a/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java +++ b/server/service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java @@ -1,5 +1,6 @@ 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; @@ -8,16 +9,21 @@ 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.ShopMapper; +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.Member; -import com.doumee.dao.business.model.Shop; +import com.doumee.dao.business.model.*; import com.doumee.dao.business.vo.ShopTree; import com.doumee.dao.business.vo.ShopTreeVo; -import com.doumee.dao.system.model.SystemUser; +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; @@ -26,6 +32,7 @@ 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; @@ -34,10 +41,12 @@ import org.springframework.util.CollectionUtils; import org.springframework.web.multipart.MultipartFile; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Objects; +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; /** * 蹇楅偊缁勭粐淇℃伅琛⊿ervice瀹炵幇 @@ -46,11 +55,22 @@ */ @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) { @@ -80,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 @@ -237,6 +262,8 @@ } 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()); @@ -244,7 +271,30 @@ queryWrapper.orderByAsc(sortData.getProperty()); } } - return PageData.from(shopMapper.selectPage(page, queryWrapper)); + 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 @@ -253,6 +303,7 @@ 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); @@ -274,7 +325,22 @@ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�"); } Date date =new Date(); - List<Shop> updateShops = new ArrayList<>(); + 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()) ){ @@ -298,20 +364,264 @@ 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); } - return "瀵煎叆鎴愬姛"; }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(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ユ垨鑰呬笂涓嬬骇閲嶇疆浠诲姟姝e湪鎵ц涓紝璇风◢鍚庡啀璇曪紒"); + } + 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); @@ -332,11 +642,28 @@ 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<>(); - Date date =new Date(); List<Shop> updateShops = new ArrayList<>(); for(int i=0;i<dataList.size();i++){ ShopImport model = dataList.get(i); @@ -365,12 +692,12 @@ shopMapper.updateById(s); } } - return "瀵煎叆鎴愬姛"; }catch (BusinessException e){ throw e; }catch (Exception e){ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯"); }finally { + executor.shutdown(); redisTemplate.delete(Constants.RedisKeys.IMPORTING_SHOP); } } @@ -417,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()); @@ -425,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); @@ -556,10 +885,16 @@ 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(parent.getNamePath()+"/"+s.getName()); - s.setIdPath(parent.getIdPath()+s.getId()+"/"); - shopMapper.updateById(s); + 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()); @@ -567,4 +902,181 @@ } } } + + + + @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,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") + .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(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>(); + if(Objects.nonNull(memberId)){ + Member member = memberMapper.selectById(memberId); + //濡傛灉浜哄憳娌℃湁缁忕含搴︿俊鎭紝鍒欎笉鏌ヨ璺濈 + if(Objects.nonNull(member)&&Objects.nonNull(member.getLatitude())&&Objects.nonNull(member.getLongitude())){ + 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); + 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::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<>(); + 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 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); + 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; + } + } -- Gitblit v1.9.3