| | |
| | | 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.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; |
| | |
| | | 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.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; |
| | | |
| | | /** |
| | | * 志邦组织信息表Service实现 |
| | |
| | | */ |
| | | @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) { |
| | |
| | | @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 |
| | |
| | | } |
| | | 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()); |
| | |
| | | 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 |
| | |
| | | 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); |
| | |
| | | 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()) ){ |
| | |
| | | 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(),"对不起,已存在导入或者上下级重置任务正在执行中,请稍后再试!"); |
| | | } |
| | | 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(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); |
| | |
| | | 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); |
| | | } |
| | | } |
| | |
| | | shop.setSecondType(model.getSecondType()); |
| | | shop.setAttribute(model.getAttribute()); |
| | | shop.setParentIamId(model.getParentOrgId()); |
| | | shop.setScode(model.getScode()); |
| | | newList.add(shop); |
| | | }else { |
| | | shop.setEditor(loginUserInfo.getId()); |
| | |
| | | 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); |
| | |
| | | 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()); |
| | |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | |
| | | @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; |
| | | } |
| | | |
| | | } |