From 5d7b65670282a4fad015e37d567cfa171b162052 Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期二, 20 五月 2025 12:25:19 +0800 Subject: [PATCH] 基础代码 --- pt-errand/src/main/java/com/ruoyi/errand/service/impl/CommunityServiceImpl.java | 271 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 271 insertions(+), 0 deletions(-) diff --git a/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CommunityServiceImpl.java b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CommunityServiceImpl.java new file mode 100644 index 0000000..2ae8dbb --- /dev/null +++ b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CommunityServiceImpl.java @@ -0,0 +1,271 @@ +package com.ruoyi.errand.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.errand.constant.DelFlagConstant; +import com.ruoyi.errand.domain.*; +import com.ruoyi.errand.mapper.*; +import com.ruoyi.errand.object.dto.sys.AddCommunityDTO; +import com.ruoyi.errand.object.dto.sys.CommunityPageListDTO; +import com.ruoyi.errand.object.dto.sys.EditCommunityDTO; +import com.ruoyi.errand.object.vo.app.CommunityListVO; +import com.ruoyi.errand.object.vo.sys.AllCommunityListVO; +import com.ruoyi.errand.object.vo.sys.CommunityPageListVO; +import com.ruoyi.errand.object.vo.sys.CommunitySysDetailVO; +import com.ruoyi.errand.object.vo.sys.CourierPageListVO; +import com.ruoyi.errand.service.CommunityService; +import org.springframework.beans.BeanUtils; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.util.Collections; +import java.util.List; +import java.util.Objects; + +@Service +public class CommunityServiceImpl extends ServiceImpl<CommunityMapper, Community> implements CommunityService { + + + private final CommunityCourierMapper communityCourierMapper; + private final OrderMapper orderMapper; + private final RegionMapper regionMapper; + private final CourierMapper courierMapper; + private final PhoneMapper phoneMapper; + + public CommunityServiceImpl(CommunityCourierMapper communityCourierMapper, OrderMapper orderMapper, RegionMapper regionMapper, CourierMapper courierMapper, PhoneMapper phoneMapper) { + this.communityCourierMapper = communityCourierMapper; + this.orderMapper = orderMapper; + this.regionMapper = regionMapper; + this.courierMapper = courierMapper; + this.phoneMapper = phoneMapper; + } + + @Override + public R<List<CommunityListVO>> getCommunity(Integer regionId) { + List<CommunityListVO> communityListVOS = this.getBaseMapper().selectListByRegionId(regionId); + return R.ok(communityListVOS); + + } + + @Override + public R<List<CommunityListVO>> getTotalCommunityList() { + List<CommunityListVO> communityListVOS = this.getBaseMapper().getTotalCommunityList(); + return R.ok(communityListVOS); + } + + @Override + public List<AllCommunityListVO> getAllCommunityList() { + List<Integer> list=communityCourierMapper.getAllCommunityList(); + return this.baseMapper.getAllCommunityList(list); + } + + @Override + public IPage<CommunityPageListVO> getCommunityPageList(CommunityPageListDTO dto) { + IPage<CommunityPageListVO> page = new Page<>(dto.getPageNum(),dto.getPageSize()); + IPage<CommunityPageListVO> iPage=this.baseMapper.getCommunityPageList(page,dto); + iPage.getRecords().forEach(x->{ + List<Order> orderList = orderMapper.selectList(new LambdaQueryWrapper<Order>() + .eq(Order::getCommunityId, x.getId()) + .eq(Order::getDelFlag, DelFlagConstant.UNDELETE) + .eq(Order::getPayStatus,2)); + if (orderList!=null&& !orderList.isEmpty()){ + x.setTotal(orderList.size());//总订单数 + LocalDateTime start = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); + LocalDateTime end = LocalDateTime.of(LocalDate.now(), LocalTime.MAX); + long today = orderList.stream().filter(order -> order.getOrderTime().isAfter(start.minusNanos(1))) + .filter(order -> order.getOrderTime().isBefore(end.plusNanos(1))).count(); + x.setToday((int) today);//今日订单数 + } + }); + + return iPage; + } + + @Override + @Transactional + public void add(AddCommunityDTO addCommunityDTO) { + + //城市地址是否存在 + Region region = regionMapper.selectById(addCommunityDTO.getRegionId()); + if (region==null){ + throw new ServiceException("所在城市id错误"); + } + //跑腿人员是否存在 + Courier courier = courierMapper.selectById(addCommunityDTO.getCourierId()); + if (courier==null|| Objects.equals(courier.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("跑腿人员不存在"); + } + //是否被绑定 + Long count = communityCourierMapper.selectCount(new LambdaQueryWrapper<CommunityCourier>() + .eq(CommunityCourier::getCourierId, addCommunityDTO.getCourierId())); + if (count>0){ + throw new ServiceException("跑腿人员已绑定"); + } + //添加小区 + Community community = new Community(); + BeanUtils.copyProperties(addCommunityDTO,community); + this.save(community); + if (addCommunityDTO.getServicePhone()!=null){ + //保存客服电话 + Phone phone = new Phone(); + phone.setType(2); + phone.setCommunity_id(community.getId()); + phone.setPhone(addCommunityDTO.getServicePhone()); + phoneMapper.insert(phone); + } + //保存跑腿员关系 + CommunityCourier communityCourier = new CommunityCourier(); + communityCourier.setCommunityId(community.getId()); + communityCourier.setCourierId(addCommunityDTO.getCourierId()); + communityCourier.setCreateTime(LocalDateTime.now()); + communityCourierMapper.insert(communityCourier); + + } + + @Override + @Transactional + public void edit(EditCommunityDTO editCommunityDTO) { + //检查小区是否存在 + Community community = this.baseMapper.selectById(editCommunityDTO.getId()); + if (community==null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("该小区不存在"); + } + //检查所在城市是否更改 + if (!Objects.equals(editCommunityDTO.getRegionId(), community.getRegionId())){ + //检查城市是否存在 + Region region = regionMapper.selectById(editCommunityDTO.getRegionId()); + if (region==null){ + throw new ServiceException("所在城市id错误"); + } + } + //检查客服电话是否更改 + if (editCommunityDTO.getServicePhone()!=null){ + Phone phone = phoneMapper.selectOne(new LambdaQueryWrapper<Phone>() + .eq(Phone::getCommunity_id, editCommunityDTO.getId()) + .eq(Phone::getType, 2)); + if (phone==null){ + //添加 + //保存客服电话 + phone = new Phone(); + phone.setType(2); + phone.setCommunity_id(community.getId()); + phone.setPhone(editCommunityDTO.getServicePhone()); + phoneMapper.insert(phone); + }else { + //修改 + phone.setPhone(editCommunityDTO.getServicePhone()); + phoneMapper.updateById(phone); + } + + } + //检查跑腿员是否存在 + Courier courier = courierMapper.selectById(editCommunityDTO.getCourierId()); + if (courier==null|| Objects.equals(courier.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("跑腿人员不存在"); + } + //检查跑腿员是否绑定 + Long count = communityCourierMapper.selectCount(new LambdaQueryWrapper<CommunityCourier>() + .eq(CommunityCourier::getCourierId, editCommunityDTO.getCourierId())); + if (count>0){ + throw new ServiceException("跑腿人员已绑定"); + } + //检查跑腿员是否更改 + CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>() + .eq(CommunityCourier::getCommunityId, editCommunityDTO.getId())); + if (communityCourier==null){ + //新增 + communityCourier = new CommunityCourier(); + communityCourier.setCommunityId(editCommunityDTO.getId()); + communityCourier.setCourierId(editCommunityDTO.getCourierId()); + }else { + //修改 + communityCourier.setCourierId(editCommunityDTO.getCourierId()); + communityCourierMapper.updateById(communityCourier); + } + + } + + @Override + public void delete(Integer id) { + Community community = this.baseMapper.selectById(id); + if (community==null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("未找到该小区"); + } + //删除关系 + CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>() + .eq(CommunityCourier::getCommunityId, id)); + if (communityCourier!=null){ + communityCourierMapper.deleteById(communityCourier.getId()); + } + //删除小区 + community.setDelFlag(DelFlagConstant.DELETE); + community.setUpdateTime(LocalDateTime.now()); + this.baseMapper.updateById(community); + } + + @Override + public void froze(Integer id) { + //冻结/解冻 + Community community = this.baseMapper.selectById(id); + if (community==null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("未找到该小区"); + } + community.setStatus(community.getStatus()==0?1:0); + community.setUpdateTime(LocalDateTime.now()); + this.baseMapper.updateById(community); + } + + @Override + public CommunitySysDetailVO detail(Integer id) { + Community community = this.getById(id); + if (community==null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)){ + throw new ServiceException("小区不存在"); + } + CommunitySysDetailVO vo = new CommunitySysDetailVO(); + BeanUtils.copyProperties(community,vo); + // + //所在城市Str 根据城市id查询整个字符 + String regionStr =getAllStrById(community.getRegionId()); + vo.setRegionStr(regionStr); + //跑腿员id和名称 + CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>().eq(CommunityCourier::getCommunityId, community.getId())); + if (communityCourier!=null){ + vo.setCourierId(communityCourier.getCourierId()); + Courier courier = courierMapper.selectById(vo.getCourierId()); + if (null!=courier && Objects.equals(courier.getDelFlag(), DelFlagConstant.UNDELETE)){ + vo.setCourierName(courier.getName()); + } + } + //客服电话 + Phone phone = phoneMapper.selectOne(new LambdaQueryWrapper<Phone>().eq(Phone::getCommunity_id, community.getId())); + if (phone!=null){ + vo.setServicePhone(phone.getPhone()); + } + return vo; + } + + private String getAllStrById(Integer regionId) { + if (regionId == null||regionId==0) { + return ""; + } + Region region = regionMapper.selectById(regionId); + if (region == null) { + return ""; + } + // 获取父级区域的完整名称 + String parentName = getAllStrById(region.getParentId()); + // 拼接当前区域名称 + if (parentName.isEmpty()) { + return region.getName(); + } else { + return parentName + "-" + region.getName(); + } + } +} \ No newline at end of file -- Gitblit v1.7.1