From e3a2245265516fef78b4737d6fffc939e7c5e0af Mon Sep 17 00:00:00 2001 From: huliguo <2023611923@qq.com> Date: 星期四, 03 七月 2025 17:56:07 +0800 Subject: [PATCH] bug修改 --- pt-errand/src/main/java/com/ruoyi/errand/service/impl/CourierServiceImpl.java | 112 ++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 files changed, 101 insertions(+), 11 deletions(-) diff --git a/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CourierServiceImpl.java b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CourierServiceImpl.java index 09ff25c..c5930db 100644 --- a/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CourierServiceImpl.java +++ b/pt-errand/src/main/java/com/ruoyi/errand/service/impl/CourierServiceImpl.java @@ -2,12 +2,16 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +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.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.exception.ServiceException; +import com.ruoyi.errand.constant.AppUserStatusConstant; import com.ruoyi.errand.constant.DelFlagConstant; +import com.ruoyi.errand.constant.IsFirstLoginConstant; +import com.ruoyi.errand.constant.IsFirstOrder; import com.ruoyi.errand.domain.*; import com.ruoyi.errand.mapper.*; import com.ruoyi.errand.object.dto.sys.AddCourierDTO; @@ -36,6 +40,7 @@ import java.time.LocalDateTime; import java.time.LocalTime; import java.time.temporal.TemporalAdjusters; +import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Objects; @@ -56,6 +61,10 @@ private AppUserMapper appUserMapper; @Autowired private CommunityMapper communityMapper; + @Autowired + private AppUserService appUserService; + @Autowired + private CourierMapper courierMapper; @Override @@ -79,8 +88,15 @@ @Override public IPage<CourierOrderListVO> getCourierOrderList(Integer pageNum, Integer pageSize, Integer orderStatus) { AppUser appuser = (AppUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + if(appuser.getCourierId()==null){ + throw new ServiceException("您已不是跑腿员"); + } IPage<CourierOrderListVO> page=new Page<>(pageNum, pageSize); - return this.baseMapper.getCourierOrderList(page,orderStatus,appuser.getCourierId()); + CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>().eq(CommunityCourier::getCourierId, appuser.getCourierId())); + if (communityCourier==null){ + throw new ServiceException("您还未绑定需代办的小区"); + } + return this.baseMapper.getCourierOrderList(page,appuser.getCourierId(),orderStatus,communityCourier.getCommunityId()); } @Override @@ -88,6 +104,13 @@ AppUser appuser = (AppUser) SecurityContextHolder.getContext().getAuthentication().getPrincipal(); if (appuser.getCourierId()==null){ throw new ServiceException("您还不是跑腿员"); + } + Courier courier = courierMapper.selectById(appuser.getCourierId()); + if (courier==null || courier.getDelFlag().equals(DelFlagConstant.DELETE)){ + throw new ServiceException("绑定的跑腿账号已失效"); + } + if (courier.getStatus().equals(0)){ + throw new ServiceException("跑腿账号已在离职中,不能接单"); } CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>().eq(CommunityCourier::getCourierId, appuser.getCourierId())); if(communityCourier==null){ @@ -107,6 +130,7 @@ //修改订单状态 order.setOrderStatus(2); + order.setCourierId(appuser.getCourierId()); order.setReceivingTime(LocalDateTime.now()); orderMapper.updateById(order); @@ -161,7 +185,8 @@ List<Order> orderList = orderMapper.selectList(new LambdaUpdateWrapper<Order>() .eq(Order::getCourierId, x.getId()) .eq(Order::getDelFlag,DelFlagConstant.UNDELETE) - .eq(Order::getPayMethod,2)); + .notIn(Order::getOrderStatus,Arrays.asList(1,3)) + .eq(Order::getPayStatus,2)); if (orderList!=null&& !orderList.isEmpty()){ //当天接单量 LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); @@ -202,7 +227,8 @@ List<Order> orderList = orderMapper.selectList(new LambdaUpdateWrapper<Order>() .eq(Order::getCourierId, id) .eq(Order::getDelFlag,DelFlagConstant.UNDELETE) - .eq(Order::getPayMethod,2)); + .notIn(Order::getOrderStatus,Arrays.asList(1,3)) //未接单 取消掉的不要 + .eq(Order::getPayStatus,2)); if (orderList!=null&& !orderList.isEmpty()){ //当天接单量 LocalDateTime todayStart = LocalDateTime.of(LocalDate.now(), LocalTime.MIN); @@ -238,13 +264,20 @@ return vo; } - + private static final String DEFAULT_AVATAR_URL = "http://qijishenghuiyuan.obs.cn-southwest-2.myhuaweicloud.com/admin/aedfbbb41280471f8d9fa7905298b65f.png"; @Override public void add(AddCourierDTO addCourierDTO) { AppUser appUser = appUserMapper.selectOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, addCourierDTO.getPhone()). eq(AppUser::getDelFlag, DelFlagConstant.UNDELETE)); if (appUser == null) { - throw new ServiceException("请先注册小程序"); + appUser=new AppUser(); + appUser.setPhone(addCourierDTO.getPhone()); + appUser.setDelFlag(DelFlagConstant.UNDELETE); + appUser.setStatus(AppUserStatusConstant.NORMAL); + appUser.setAvatar(DEFAULT_AVATAR_URL); + appUser.setFirstLogin(IsFirstLoginConstant.YES); + appUser.setFirstOrder(IsFirstOrder.YES); + appUser.setName(addCourierDTO.getPhone()); } //手机号是否存在 Courier courier = this.getBaseMapper().selectOne(new LambdaQueryWrapper<Courier>().eq(Courier::getPhone, addCourierDTO.getPhone()) @@ -269,6 +302,7 @@ //保存跑腿人员 Courier courier1 = new Courier(); BeanUtils.copyProperties(addCourierDTO, courier1); + courier1.setCreateTime(LocalDateTime.now()); this.save(courier1); //绑定小区 if (addCourierDTO.getCommunityId() != null) { @@ -277,6 +311,8 @@ communityCourier.setCourierId(courier1.getId()); communityCourierMapper.insert(communityCourier); } + appUser.setCourierId(courier1.getId()); + appUserService.saveOrUpdate(appUser); } @Override @@ -288,7 +324,7 @@ } //是否更改了手机号 if (!courier.getPhone().equals(editCourierDTO.getPhone())) { - //更改了手机号 + /*//更改了手机号 AppUser appUser = appUserMapper.selectOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getPhone, editCourierDTO.getPhone()). eq(AppUser::getDelFlag, DelFlagConstant.UNDELETE)); if (appUser == null) { @@ -298,18 +334,22 @@ .eq(Courier::getDelFlag, DelFlagConstant.UNDELETE)); if (courier1 != null ) { throw new ServiceException("该手机号的跑腿员已存在"); - } + }*/ + throw new ServiceException("不能修该手机号"); } //是否更改了小区 CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>().eq(CommunityCourier::getCourierId, editCourierDTO.getId())); if (communityCourier != null) { //之前有绑定小区 if (editCourierDTO.getCommunityId() == null) { - //现在没有绑定,之前的要解绑 + //现在没有绑定 + extracted(courier.getId(), "该跑腿员还有订单未完成,无法变更小区"); + //解绑之前的 communityCourierMapper.deleteById(communityCourier.getId()); }else if (!editCourierDTO.getCommunityId().equals(communityCourier.getCommunityId())) { //现在绑定了,不和之前的一样 + extracted(courier.getId(), "该跑腿员还有订单未完成,无法变更小区"); //绑定的小区是否存在 Community community = communityMapper.selectById(editCourierDTO.getCommunityId()); if (community == null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)) { @@ -323,8 +363,29 @@ } //修改 communityCourier.setCommunityId(editCourierDTO.getCommunityId()); + communityCourier.setCourierId(editCourierDTO.getId()); communityCourier.setUpdateTime(LocalDateTime.now()); communityCourierMapper.updateById(communityCourier); + } + }else { + //之前没绑定 现在绑定 + if (editCourierDTO.getCommunityId() != null) { + Community community = communityMapper.selectById(editCourierDTO.getCommunityId()); + if (community == null|| Objects.equals(community.getDelFlag(), DelFlagConstant.DELETE)) { + throw new ServiceException("绑定的小区不存在"); + } + //绑定的小区是否被别人绑定了 + CommunityCourier communityCourier1 = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>() + .eq(CommunityCourier::getCommunityId, editCourierDTO.getCommunityId())); + if (communityCourier1 != null) { + throw new ServiceException("该小区已被绑定"); + } + //修改 + communityCourier = new CommunityCourier(); + communityCourier.setCommunityId(editCourierDTO.getCommunityId()); + communityCourier.setCourierId(editCourierDTO.getId()); + communityCourier.setUpdateTime(LocalDateTime.now()); + communityCourierMapper.insert(communityCourier); } } //修改 @@ -333,11 +394,27 @@ } + private void extracted(Integer courier, String message) { + //判断该小区订单是否完成 + Long count = orderMapper.selectCount(new LambdaUpdateWrapper<Order>() + .eq(Order::getCourierId, courier) + .eq(Order::getPayStatus, 2) + .eq(Order::getDelFlag, DelFlagConstant.UNDELETE) + .eq(Order::getOrderStatus, 2)); + if (count > 0) { + throw new ServiceException(message); + } + } + @Override public void froze(Integer id) { Courier courier= this.getById(id); if (courier == null||courier.getDelFlag().equals(DelFlagConstant.DELETE)) { throw new ServiceException("该跑腿员不存在"); + } + //如果是离职,判断是否还有订单在进行中 + if (courier.getStatus().equals(1)){ + extracted(id, "该跑腿员还有订单未完成,无法离职"); } courier.setStatus(courier.getStatus()==0?1:0); courier.setUpdateTime(LocalDateTime.now()); @@ -350,11 +427,24 @@ if (courier == null||courier.getDelFlag().equals(DelFlagConstant.DELETE)) { throw new ServiceException("该跑腿员不存在"); } + + //判断是否还有订单在进行中 + extracted(id, "该跑腿员还有订单未完成,无法注销"); + //判断跑腿员是否绑定了小区 CommunityCourier communityCourier = communityCourierMapper.selectOne(new LambdaQueryWrapper<CommunityCourier>().eq(CommunityCourier::getCourierId, id)); if (communityCourier != null) { communityCourierMapper.deleteById(communityCourier.getId());//解绑 } + //判断用户是否存在,删除用户中跑腿员的信息 + AppUser appUser = appUserMapper.selectOne(new LambdaQueryWrapper<AppUser>().eq(AppUser::getCourierId, id).eq(AppUser::getDelFlag, DelFlagConstant.UNDELETE)); + UpdateWrapper<AppUser> updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", appUser.getId()) + .set("courier_id", null); + + appUserMapper.update(null, updateWrapper); + + //删除跑腿员 courier.setDelFlag(DelFlagConstant.DELETE); courier.setUpdateTime(LocalDateTime.now()); this.updateById(courier); @@ -370,9 +460,9 @@ private static long countByTimeRange(List<Order> orderList, LocalDateTime start, LocalDateTime end) { return orderList.stream() - .filter(order -> order.getOrderTime() != null) // 过滤空时间 - .filter(order -> order.getOrderTime().isAfter(start.minusNanos(1))) // 大于等于 start - .filter(order -> order.getOrderTime().isBefore(end.plusNanos(1))) // 小于等于 end + .filter(order -> order.getReceivingTime() != null) // 过滤空时间 + .filter(order -> order.getReceivingTime().isAfter(start.minusNanos(1))) // 大于等于 start + .filter(order -> order.getReceivingTime().isBefore(end.plusNanos(1))) // 小于等于 end .count(); } -- Gitblit v1.7.1