Commit 179a4240 by 杨浩

配送员端接口

parent c37edf85
package cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author : yanghao
* create at: 2025/10/15 16:27
* @description: 配送订单数
*/
@Data
public class DeliveryMyCountRespVO {
@Schema(description = "配送总订单数")
private Long allCount;
@Schema(description = "今日订单数")
private Long todayCount;
@Schema(description = "本月订单数")
private Long monthCount;
}
package cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order;
import cn.iocoder.foodnexus.framework.common.pojo.PageParam;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime;
import static cn.iocoder.foodnexus.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
/**
* @author : yanghao
* create at: 2025/10/15 17:07
* @description:
*/
@Data
public class DeliveryOrderPageReqVO extends PageParam {
@Schema(description = "接单时间段")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] acceptTime;
@Schema(description = "拣货状态")
private SaleOrderPickUpStatus pickUpStatus;
@Schema(description = "订单类型(1-配送单 2-退货单)")
private Integer type;
@Schema(description = "配送员id", hidden = true)
private Long deliveryStaffId;
}
package cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
/**
* @author : yanghao
* create at: 2025/10/15 16:29
* @description:
*/
@Data
public class DeliveryStatusCountRespVO {
@Schema(description = "拣货状态")
private SaleOrderPickUpStatus pickUpStatus;
@Schema(description = "对应订单数")
private Long count;
}
...@@ -91,4 +91,7 @@ public class ErpSaleOrderPageReqVO extends PageParam { ...@@ -91,4 +91,7 @@ public class ErpSaleOrderPageReqVO extends PageParam {
@Schema(description = "拣货状态") @Schema(description = "拣货状态")
private SaleOrderPickUpStatus pickUpStatus; private SaleOrderPickUpStatus pickUpStatus;
@Schema(description = "接单时间段")
private LocalDateTime[] acceptTime;
} }
\ No newline at end of file
...@@ -4,14 +4,18 @@ package cn.iocoder.foodnexus.module.erp.dal.mysql.sale; ...@@ -4,14 +4,18 @@ package cn.iocoder.foodnexus.module.erp.dal.mysql.sale;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.foodnexus.framework.mybatis.core.mapper.BaseMapperX;
import cn.iocoder.foodnexus.framework.mybatis.core.query.MPJLambdaWrapperX; import cn.iocoder.foodnexus.framework.mybatis.core.query.MPJLambdaWrapperX;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.DeliveryMyCountRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus; import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.github.yulichang.query.MPJQueryWrapper;
import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Mapper;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
/** /**
* ERP 销售订单 Mapper * ERP 销售订单 Mapper
...@@ -30,7 +34,8 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> { ...@@ -30,7 +34,8 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> {
.likeIfPresent(ErpSaleOrderDO::getRemark, reqVO.getRemark()) .likeIfPresent(ErpSaleOrderDO::getRemark, reqVO.getRemark())
.eqIfPresent(ErpSaleOrderDO::getCreator, reqVO.getCreator()) .eqIfPresent(ErpSaleOrderDO::getCreator, reqVO.getCreator())
.eqIfPresent(ErpSaleOrderDO::getDeliveryStaffId, reqVO.getDeliveryStaffId()) .eqIfPresent(ErpSaleOrderDO::getDeliveryStaffId, reqVO.getDeliveryStaffId())
.eqIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatus()) .betweenIfPresent(ErpSaleOrderDO::getAcceptTime, reqVO.getAcceptTime())
.eqIfPresent(ErpSaleOrderDO::getPickUpStatus, reqVO.getPickUpStatus().getType())
.eqIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptId()) .eqIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptId())
.inIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptIds()) .inIfPresent(ErpSaleOrderDO::getCustomerDeptId, reqVO.getCustomerDeptIds())
.orderByDesc(ErpSaleOrderDO::getId); .orderByDesc(ErpSaleOrderDO::getId);
...@@ -77,4 +82,24 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> { ...@@ -77,4 +82,24 @@ public interface ErpSaleOrderMapper extends BaseMapperX<ErpSaleOrderDO> {
return selectOne(ErpSaleOrderDO::getNo, no); return selectOne(ErpSaleOrderDO::getNo, no);
} }
default DeliveryMyCountRespVO queryMyCount(Long userId) {
MPJQueryWrapper<ErpSaleOrderDO> wrapper = new MPJQueryWrapper<>();
wrapper.select("COUNT(*) AS allCount");
wrapper.select("SUM(CASE WHEN YEAR (accept_time)=YEAR (CURDATE()) AND MONTH (accept_time)=MONTH (CURDATE()) THEN 1 ELSE 0 END) AS monthCount");
wrapper.select("SUM(CASE WHEN DATE (accept_time)=CURDATE() THEN 1 ELSE 0 END) AS todayCount");
wrapper.eq("delivery_staff_id", userId);
return this.selectJoinOne(DeliveryMyCountRespVO.class, wrapper);
}
default Long statusCount(String type, Long userId) {
return this.selectCount(Wrappers.<ErpSaleOrderDO>lambdaQuery()
.eq(ErpSaleOrderDO::getDeliveryStaffId, userId)
.eq(ErpSaleOrderDO::getPickUpStatus, type));
}
default Long statusCount(String type, Set<Long> deptIds) {
return this.selectCount(Wrappers.<ErpSaleOrderDO>lambdaQuery()
.in(ErpSaleOrderDO::getCustomerDeptId, deptIds)
.eq(ErpSaleOrderDO::getPickUpStatus, type));
}
} }
\ No newline at end of file
package cn.iocoder.foodnexus.module.erp.service.sale; package cn.iocoder.foodnexus.module.erp.service.sale;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.*;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO; import cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO;
...@@ -12,6 +11,7 @@ import java.math.BigDecimal; ...@@ -12,6 +11,7 @@ import java.math.BigDecimal;
import java.util.Collection; import java.util.Collection;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
/** /**
* ERP 销售订单 Service 接口 * ERP 销售订单 Service 接口
...@@ -152,4 +152,15 @@ public interface ErpSaleOrderService { ...@@ -152,4 +152,15 @@ public interface ErpSaleOrderService {
ErpSaleOrderItemDO queryItemByCustomerOrderItemId(Long customerOrderItemId); ErpSaleOrderItemDO queryItemByCustomerOrderItemId(Long customerOrderItemId);
void receiptByCustomerOrderId(Long id, List<Long> customerOrderItemId); void receiptByCustomerOrderId(Long id, List<Long> customerOrderItemId);
/**
* "个人中心 - 配送订单数"
*/
DeliveryMyCountRespVO queryMyCount(Long userId);
/**
* "接单大厅 - 配送状态订单数统计"
*/
List<DeliveryStatusCountRespVO> statusCount(Long userId, Set<Long> deptIds);
} }
\ No newline at end of file
package cn.iocoder.foodnexus.module.erp.service.sale; package cn.iocoder.foodnexus.module.erp.service.sale;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil; import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import cn.iocoder.foodnexus.framework.common.util.number.MoneyUtils;
import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils; import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import cn.iocoder.foodnexus.framework.redis.utils.RedisUtils; import cn.iocoder.foodnexus.framework.redis.utils.RedisUtils;
import cn.iocoder.foodnexus.module.erp.api.vo.warehouse.WarehouseInfo; import cn.iocoder.foodnexus.module.erp.api.vo.warehouse.WarehouseInfo;
import cn.iocoder.foodnexus.module.erp.controller.admin.purchase.vo.in.ErpPurchaseInSaveReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.*;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderSaveReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.out.ErpSaleOutSaveReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.out.ErpSaleOutSaveReqVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.product.ErpProductDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.purchase.ErpPurchaseOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOutDO;
...@@ -26,15 +20,11 @@ import cn.iocoder.foodnexus.module.erp.dal.redis.no.ErpNoRedisDAO; ...@@ -26,15 +20,11 @@ import cn.iocoder.foodnexus.module.erp.dal.redis.no.ErpNoRedisDAO;
import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus; import cn.iocoder.foodnexus.module.erp.api.enums.ErpAuditStatus;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus; import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import cn.iocoder.foodnexus.module.erp.service.finance.ErpAccountService; import cn.iocoder.foodnexus.module.erp.service.finance.ErpAccountService;
import cn.iocoder.foodnexus.module.erp.service.product.ErpProductService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseInService;
import cn.iocoder.foodnexus.module.erp.service.purchase.ErpPurchaseOrderService;
import cn.iocoder.foodnexus.module.order.api.CustomerOrderApi; import cn.iocoder.foodnexus.module.order.api.CustomerOrderApi;
import cn.iocoder.foodnexus.module.order.api.CustomerOrderRecordApi; import cn.iocoder.foodnexus.module.order.api.CustomerOrderRecordApi;
import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi; import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi;
import cn.iocoder.foodnexus.module.order.dto.*; import cn.iocoder.foodnexus.module.order.dto.*;
import cn.iocoder.foodnexus.module.order.enums.CustomerOrderStatus; import cn.iocoder.foodnexus.module.order.enums.CustomerOrderStatus;
import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService; import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService;
import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi; import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
...@@ -83,18 +73,12 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService { ...@@ -83,18 +73,12 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
private AdminUserApi adminUserApi; private AdminUserApi adminUserApi;
@Autowired @Autowired
private ErpPurchaseInService purchaseInService;
@Autowired
private CustomerOrderRecordApi orderRecordApi; private CustomerOrderRecordApi orderRecordApi;
@Autowired @Autowired
private CustomerOrderApi customerOrderApi; private CustomerOrderApi customerOrderApi;
@Autowired @Autowired
private ErpPurchaseOrderService purchaseOrderService;
@Autowired
private DeliveryStaffApi deliveryStaffApi; private DeliveryStaffApi deliveryStaffApi;
@Autowired @Autowired
...@@ -653,4 +637,31 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService { ...@@ -653,4 +637,31 @@ public class ErpSaleOrderServiceImpl implements ErpSaleOrderService {
} }
} }
/**
* "个人中心 - 配送订单数"
*/
@Override
public DeliveryMyCountRespVO queryMyCount(Long userId) {
return saleOrderMapper.queryMyCount(userId);
}
/**
* "接单大厅 - 配送状态订单数统计"
*/
@Override
public List<DeliveryStatusCountRespVO> statusCount(Long userId, Set<Long> deptIds) {
List<DeliveryStatusCountRespVO> result = new ArrayList<>();
for (SaleOrderPickUpStatus status : SaleOrderPickUpStatus.values()) {
DeliveryStatusCountRespVO count = new DeliveryStatusCountRespVO();
count.setPickUpStatus(status);
if (status.equals(SaleOrderPickUpStatus.PICK_UP) && CommonUtil.isNotEmpty(deptIds)) {
count.setCount(saleOrderMapper.statusCount(status.getType(), deptIds));
} else {
count.setCount(saleOrderMapper.statusCount(status.getType(), userId));
}
result.add(count);
}
return result;
}
} }
...@@ -38,9 +38,6 @@ public class AppDeliveryStaffController { ...@@ -38,9 +38,6 @@ public class AppDeliveryStaffController {
private DeliveryStaffService deliveryStaffService; private DeliveryStaffService deliveryStaffService;
@Resource @Resource
private DeliveryStaffCustomerService deliveryStaffCustomerService;
@Resource
private VehicleInfoService vehicleInfoService; private VehicleInfoService vehicleInfoService;
......
...@@ -10,9 +10,11 @@ import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi; ...@@ -10,9 +10,11 @@ import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi;
import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo; import cn.iocoder.foodnexus.module.order.dto.DeliveryStaffSimpleInfo;
import cn.iocoder.foodnexus.module.system.controller.admin.user.vo.user.UserSaveReqVO; import cn.iocoder.foodnexus.module.system.controller.admin.user.vo.user.UserSaveReqVO;
import cn.iocoder.foodnexus.module.system.dal.dataobject.user.AdminUserDO; import cn.iocoder.foodnexus.module.system.dal.dataobject.user.AdminUserDO;
import cn.iocoder.foodnexus.module.system.dal.redis.RedisKeyConstants;
import cn.iocoder.foodnexus.module.system.service.user.AdminUserService; import cn.iocoder.foodnexus.module.system.service.user.AdminUserService;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cache.annotation.Cacheable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import jakarta.annotation.Resource; import jakarta.annotation.Resource;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
...@@ -200,6 +202,7 @@ public class DeliveryStaffServiceImpl implements DeliveryStaffService, DeliveryS ...@@ -200,6 +202,7 @@ public class DeliveryStaffServiceImpl implements DeliveryStaffService, DeliveryS
} }
@Override @Override
@Cacheable(cacheNames = RedisKeyConstants.USER_ID_TO_DELIVERY_STAFF_ID, key = "#loginUserId")
public Long queryStaffIdByUserId(Long loginUserId) { public Long queryStaffIdByUserId(Long loginUserId) {
return Optional.ofNullable(deliveryStaffMapper.selectOne(DeliveryStaffDO::getUserId, loginUserId)) return Optional.ofNullable(deliveryStaffMapper.selectOne(DeliveryStaffDO::getUserId, loginUserId))
.map(DeliveryStaffDO::getId).orElse(null); .map(DeliveryStaffDO::getId).orElse(null);
......
...@@ -7,9 +7,12 @@ import cn.iocoder.foodnexus.module.order.enums.DeliveryMode; ...@@ -7,9 +7,12 @@ import cn.iocoder.foodnexus.module.order.enums.DeliveryMode;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*; import lombok.*;
import jakarta.validation.constraints.*; import jakarta.validation.constraints.*;
import org.springframework.format.annotation.DateTimeFormat;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import static cn.iocoder.foodnexus.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
@Schema(description = "管理后台 - 客户总订单新增/修改 Request VO") @Schema(description = "管理后台 - 客户总订单新增/修改 Request VO")
@Data @Data
public class CustomerOrderSaveReqVO { public class CustomerOrderSaveReqVO {
...@@ -61,9 +64,11 @@ public class CustomerOrderSaveReqVO { ...@@ -61,9 +64,11 @@ public class CustomerOrderSaveReqVO {
private Integer supplierCount; private Integer supplierCount;
@Schema(description = "预计配送开始时间") @Schema(description = "预计配送开始时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime planDeliveryStartTime; private LocalDateTime planDeliveryStartTime;
@Schema(description = "预计配送结束时间") @Schema(description = "预计配送结束时间")
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime planDeliveryEndTime; private LocalDateTime planDeliveryEndTime;
@Schema(description = "订单总金额(分)", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "订单总金额(分)", requiredMode = Schema.RequiredMode.REQUIRED)
......
package cn.iocoder.foodnexus.module.order.controller.app.delivery; package cn.iocoder.foodnexus.module.order.controller.app.delivery;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum; import cn.iocoder.foodnexus.framework.common.enums.UserSystemEnum;
import cn.iocoder.foodnexus.framework.common.pojo.CommonResult; import cn.iocoder.foodnexus.framework.common.pojo.CommonResult;
import cn.iocoder.foodnexus.framework.common.pojo.PageParam; import cn.iocoder.foodnexus.framework.common.pojo.PageParam;
import cn.iocoder.foodnexus.framework.common.pojo.PageResult; import cn.iocoder.foodnexus.framework.common.pojo.PageResult;
import cn.iocoder.foodnexus.framework.common.util.CommonUtil; import cn.iocoder.foodnexus.framework.common.util.CommonUtil;
import cn.iocoder.foodnexus.framework.common.util.collection.MapUtils;
import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils; import cn.iocoder.foodnexus.framework.common.util.object.BeanUtils;
import cn.iocoder.foodnexus.framework.common.validation.InEnum; import cn.iocoder.foodnexus.framework.common.validation.InEnum;
import cn.iocoder.foodnexus.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.foodnexus.framework.security.core.util.SecurityFrameworkUtils;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.DeliveryMyCountRespVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.DeliveryOrderPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderPageReqVO;
import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.ErpSaleOrderRespVO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpCustomerDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO; import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderDO;
import cn.iocoder.foodnexus.module.erp.dal.dataobject.sale.ErpSaleOrderItemDO;
import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus; import cn.iocoder.foodnexus.module.erp.enums.SaleOrderPickUpStatus;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpCustomerService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService; import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOrderService;
import cn.iocoder.foodnexus.module.erp.service.sale.ErpSaleOutService;
import cn.iocoder.foodnexus.module.erp.service.stock.ErpStockService;
import cn.iocoder.foodnexus.module.operations.dal.dataobject.deliverystaff.DeliveryStaffDO;
import cn.iocoder.foodnexus.module.operations.service.deliverystaff.DeliveryStaffService;
import cn.iocoder.foodnexus.module.operations.service.deliverystaffcustomer.DeliveryStaffCustomerService; import cn.iocoder.foodnexus.module.operations.service.deliverystaffcustomer.DeliveryStaffCustomerService;
import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi; import cn.iocoder.foodnexus.module.order.api.DeliveryStaffApi;
import cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.CustomerOrderRespVO; import cn.iocoder.foodnexus.module.order.controller.admin.customerorder.vo.CustomerOrderRespVO;
import cn.iocoder.foodnexus.module.order.controller.admin.customerorderitem.vo.CustomerOrderItemRespVO; import cn.iocoder.foodnexus.module.order.controller.admin.customerorderitem.vo.CustomerOrderItemRespVO;
import cn.iocoder.foodnexus.module.order.controller.app.delivery.vo.DeliveryOrderDetails; import cn.iocoder.foodnexus.module.order.controller.app.delivery.vo.DeliveryOrderDetails;
import cn.iocoder.foodnexus.module.order.controller.app.delivery.vo.DeliverySaleOrderRespVO; import cn.iocoder.foodnexus.module.order.controller.app.delivery.vo.DeliverySaleOrderRespVO;
import cn.iocoder.foodnexus.module.order.dal.dataobject.customerorder.CustomerOrderDO; import cn.iocoder.foodnexus.module.erp.controller.admin.sale.vo.order.DeliveryStatusCountRespVO;
import cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO; import cn.iocoder.foodnexus.module.order.dto.DeliveryOrderUpdateReqVO;
import cn.iocoder.foodnexus.module.order.service.customerorder.CustomerOrderService; import cn.iocoder.foodnexus.module.order.service.customerorder.CustomerOrderService;
import cn.iocoder.foodnexus.module.order.service.customerorderitem.CustomerOrderItemService; import cn.iocoder.foodnexus.module.order.service.customerorderitem.CustomerOrderItemService;
import cn.iocoder.foodnexus.module.product.dal.dataobject.spu.ProductSpuDO;
import cn.iocoder.foodnexus.module.product.service.spu.ProductSpuService;
import cn.iocoder.foodnexus.module.system.annotations.AppSystemAuth; import cn.iocoder.foodnexus.module.system.annotations.AppSystemAuth;
import cn.iocoder.foodnexus.module.system.api.user.AdminUserApi;
import cn.iocoder.foodnexus.module.system.api.user.dto.AdminUserRespDTO;
import cn.iocoder.foodnexus.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO; import cn.iocoder.foodnexus.module.system.controller.admin.dept.vo.dept.DeptSimpleRespVO;
import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag; import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.annotation.Resource;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Set;
import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success; import static cn.iocoder.foodnexus.framework.common.pojo.CommonResult.success;
import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertMultiMap; import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertMultiMap;
import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.foodnexus.framework.common.util.collection.CollectionUtils.convertSet;
import static cn.iocoder.foodnexus.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
/** /**
* @author : yanghao * @author : yanghao
* create at: 2025/10/14 17:56 * create at: 2025/10/14 17:56
* @description: 配送员 - 订单 - 接单 * @description: 配送员 - 订单
*/ */
@Tag(name = "配送员 - 订单 - 接单") @Tag(name = "配送员 - 订单")
@RestController @RestController
@RequestMapping("/delivery/sale-order") @RequestMapping("/delivery/sale-order")
@Validated @Validated
...@@ -83,8 +69,33 @@ public class DeliverySaleOrderController { ...@@ -83,8 +69,33 @@ public class DeliverySaleOrderController {
@Autowired @Autowired
private CustomerOrderItemService customerOrderItemService; private CustomerOrderItemService customerOrderItemService;
@GetMapping("/my-count")
@Operation(summary = "个人中心 - 配送订单数")
public CommonResult<DeliveryMyCountRespVO> queryMyCount() {
return success(saleOrderService.queryMyCount(getLoginUserId()));
}
@GetMapping("/status-count")
@Operation(summary = "接单大厅 - 配送状态订单数统计")
public CommonResult<List<DeliveryStatusCountRespVO>> statusCount() {
List<DeptSimpleRespVO> deptSimpleRespVOS = deliveryStaffCustomerService.queryDeptListByStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
Set<Long> deptIds = CommonUtil.listConvertSet(deptSimpleRespVOS, DeptSimpleRespVO::getId);
return success(saleOrderService.statusCount(getLoginUserId(), deptIds));
}
@GetMapping("/my-page")
@Operation(summary = "个人中心 - 订单")
public CommonResult<PageResult<DeliverySaleOrderRespVO>> queryMyPage(@Valid DeliveryOrderPageReqVO reqVO) {
if (reqVO.getType() == 1) {
reqVO.setDeliveryStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
ErpSaleOrderPageReqVO pageReqVO = BeanUtils.toBean(reqVO, ErpSaleOrderPageReqVO.class);
return success(BeanUtils.toBean(saleOrderService.getSaleOrderPage(pageReqVO), DeliverySaleOrderRespVO.class));
}
return success(new PageResult<>());
}
@GetMapping("/page") @GetMapping("/page")
@Operation(summary = "查询配送单") @Operation(summary = "接单大厅 - 查询配送单")
@Parameter(name = "pickUpStatus", description = "拣货状态(字典类型:sale_order_pick_up_status)", required = true, example = "1024") @Parameter(name = "pickUpStatus", description = "拣货状态(字典类型:sale_order_pick_up_status)", required = true, example = "1024")
public CommonResult<PageResult<DeliverySaleOrderRespVO>> getSaleOrderPage(@Valid PageParam pageReq, public CommonResult<PageResult<DeliverySaleOrderRespVO>> getSaleOrderPage(@Valid PageParam pageReq,
@InEnum(value = SaleOrderPickUpStatus.class) @InEnum(value = SaleOrderPickUpStatus.class)
...@@ -94,17 +105,17 @@ public class DeliverySaleOrderController { ...@@ -94,17 +105,17 @@ public class DeliverySaleOrderController {
pageReqVO.setPageNo(pageReq.getPageNo()); pageReqVO.setPageNo(pageReq.getPageNo());
pageReqVO.setPageSize(pageReq.getPageSize()); pageReqVO.setPageSize(pageReq.getPageSize());
if (SaleOrderPickUpStatus.PICK_UP.getType().equals(pickUpStatus) || SaleOrderPickUpStatus.TO_BE.getType().equals(pickUpStatus) ) { if (SaleOrderPickUpStatus.PICK_UP.getType().equals(pickUpStatus) || SaleOrderPickUpStatus.TO_BE.getType().equals(pickUpStatus) ) {
List<DeptSimpleRespVO> deptSimpleRespVOS = deliveryStaffCustomerService.queryDeptListByStaffId(deliveryStaffApi.queryStaffIdByUserId(SecurityFrameworkUtils.getLoginUserId())); List<DeptSimpleRespVO> deptSimpleRespVOS = deliveryStaffCustomerService.queryDeptListByStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
pageReqVO.setCustomerDeptIds(CommonUtil.listConvert(deptSimpleRespVOS, DeptSimpleRespVO::getId)); pageReqVO.setCustomerDeptIds(CommonUtil.listConvert(deptSimpleRespVOS, DeptSimpleRespVO::getId));
} else { } else {
pageReqVO.setDeliveryStaffId(deliveryStaffApi.queryStaffIdByUserId(SecurityFrameworkUtils.getLoginUserId())); pageReqVO.setDeliveryStaffId(deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
} }
pageReqVO.setPickUpStatus(SaleOrderPickUpStatus.getByType(pickUpStatus)); pageReqVO.setPickUpStatus(SaleOrderPickUpStatus.getByType(pickUpStatus));
return success(BeanUtils.toBean(saleOrderService.getSaleOrderPage(pageReqVO), DeliverySaleOrderRespVO.class)); return success(BeanUtils.toBean(saleOrderService.getSaleOrderPage(pageReqVO), DeliverySaleOrderRespVO.class));
} }
@GetMapping("/get") @GetMapping("/get")
@Operation(summary = "获得销售订单") @Operation(summary = "配送单详情")
@Parameter(name = "id", description = "编号", required = true, example = "1024") @Parameter(name = "id", description = "编号", required = true, example = "1024")
public CommonResult<DeliveryOrderDetails<DeliverySaleOrderRespVO>> getSaleOrder(@RequestParam("id") Long id) { public CommonResult<DeliveryOrderDetails<DeliverySaleOrderRespVO>> getSaleOrder(@RequestParam("id") Long id) {
ErpSaleOrderDO saleOrder = saleOrderService.getSaleOrder(id); ErpSaleOrderDO saleOrder = saleOrderService.getSaleOrder(id);
...@@ -123,7 +134,7 @@ public class DeliverySaleOrderController { ...@@ -123,7 +134,7 @@ public class DeliverySaleOrderController {
@Operation(summary = "确认接单") @Operation(summary = "确认接单")
@Parameter(name = "id", description = "配送单id(deliveryInfo.id)", required = true) @Parameter(name = "id", description = "配送单id(deliveryInfo.id)", required = true)
public CommonResult<Boolean> accept(@RequestParam("id") Long id) { public CommonResult<Boolean> accept(@RequestParam("id") Long id) {
saleOrderService.accept(id, deliveryStaffApi.queryStaffIdByUserId(SecurityFrameworkUtils.getLoginUserId())); saleOrderService.accept(id, deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
return success(Boolean.TRUE); return success(Boolean.TRUE);
} }
...@@ -132,7 +143,7 @@ public class DeliverySaleOrderController { ...@@ -132,7 +143,7 @@ public class DeliverySaleOrderController {
@Operation(summary = "确认取货") @Operation(summary = "确认取货")
@Parameter(name = "id", description = "配送单id(deliveryInfo.id)", required = true) @Parameter(name = "id", description = "配送单id(deliveryInfo.id)", required = true)
public CommonResult<Boolean> delivery(@RequestParam("id") Long id) { public CommonResult<Boolean> delivery(@RequestParam("id") Long id) {
saleOrderService.delivery(id, deliveryStaffApi.queryStaffIdByUserId(SecurityFrameworkUtils.getLoginUserId())); saleOrderService.delivery(id, deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
return success(Boolean.TRUE); return success(Boolean.TRUE);
} }
...@@ -140,7 +151,7 @@ public class DeliverySaleOrderController { ...@@ -140,7 +151,7 @@ public class DeliverySaleOrderController {
@PostMapping("/arrival") @PostMapping("/arrival")
@Operation(summary = "订单到货") @Operation(summary = "订单到货")
public CommonResult<Boolean> arrival(@RequestBody @Valid DeliveryOrderUpdateReqVO reqVO) { public CommonResult<Boolean> arrival(@RequestBody @Valid DeliveryOrderUpdateReqVO reqVO) {
saleOrderService.arrival(reqVO, deliveryStaffApi.queryStaffIdByUserId(SecurityFrameworkUtils.getLoginUserId())); saleOrderService.arrival(reqVO, deliveryStaffApi.queryStaffIdByUserId(getLoginUserId()));
return success(Boolean.TRUE); return success(Boolean.TRUE);
} }
......
...@@ -114,4 +114,9 @@ public interface RedisKeyConstants { ...@@ -114,4 +114,9 @@ public interface RedisKeyConstants {
*/ */
String CUSTOMER_VISIBLE_PRODUCT = "customer_visible_products"; String CUSTOMER_VISIBLE_PRODUCT = "customer_visible_products";
/**
* 用户绑定的配送员id
*/
String USER_ID_TO_DELIVERY_STAFF_ID = "user_id_to_delivery_staff_id";
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment