pull/1121/head
parent
1aa40f8e58
commit
1c2bbe2727
|
|
@ -2,6 +2,8 @@ package com.ruoyi.web.controller.xkt;
|
|||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.collection.ListUtil;
|
||||
import cn.hutool.core.date.DateField;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import com.alibaba.fastjson2.JSON;
|
||||
import com.github.pagehelper.Page;
|
||||
import com.ruoyi.common.annotation.Log;
|
||||
|
|
@ -43,10 +45,7 @@ import org.springframework.validation.annotation.Validated;
|
|||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import javax.validation.Valid;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
import java.util.Set;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
|
@ -179,6 +178,28 @@ public class StoreOrderController extends XktBaseController {
|
|||
return success(PageVO.of(pageDTO, StoreOrderPageItemVO.class));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('store,seller')||@ss.hasSupplierSubRole()")
|
||||
@ApiOperation(value = "订单物流信息")
|
||||
@GetMapping(value = "/count/{srcPage}")
|
||||
public R<StoreOrderCountVO> count(@PathVariable("srcPage") Long srcPage) {
|
||||
StoreOrderCountQueryDTO queryDTO = new StoreOrderCountQueryDTO();
|
||||
if (1 == srcPage) {
|
||||
queryDTO.setOrderUserId(SecurityUtils.getUserId());
|
||||
} else {
|
||||
Long storeId = SecurityUtils.getStoreId();
|
||||
if (storeId == null && !SecurityUtils.isAdmin()) {
|
||||
//没有权限
|
||||
return R.fail();
|
||||
}
|
||||
queryDTO.setStoreId(storeId);
|
||||
}
|
||||
//半年内
|
||||
Date now = new Date();
|
||||
queryDTO.setCreateTimeBegin(DateUtil.offset(now, DateField.MONTH, -6));
|
||||
queryDTO.setCreateTimeEnd(now);
|
||||
return success(BeanUtil.toBean(storeOrderService.count(queryDTO), StoreOrderCountVO.class));
|
||||
}
|
||||
|
||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||
@Log(title = "订单", businessType = BusinessType.OTHER)
|
||||
@ApiOperation("发货-有单号(已打印快递单)")
|
||||
|
|
@ -229,7 +250,7 @@ public class StoreOrderController extends XktBaseController {
|
|||
storeOrderService.checkOrderStore(vo.getStoreOrderDetailIds(), SecurityUtils.getStoreId());
|
||||
}
|
||||
ExpressShippingLabelDTO dto = storeOrderService.printOrder(vo.getStoreOrderId(),
|
||||
vo.getStoreOrderDetailIds(), vo.getExpressId(), SecurityUtils.getUserId());
|
||||
vo.getStoreOrderDetailIds(), vo.getExpressId(), vo.getNeedShip(), SecurityUtils.getUserId());
|
||||
return success(DesensitizationUtil.desensitize(BeanUtil.toBean(dto, ExpressShippingLabelVO.class)));
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,69 @@
|
|||
package com.ruoyi.web.controller.xkt.vo.order;
|
||||
|
||||
import io.swagger.annotations.ApiModel;
|
||||
import io.swagger.annotations.ApiModelProperty;
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-07-23
|
||||
*/
|
||||
@ApiModel
|
||||
@Data
|
||||
public class StoreOrderCountVO {
|
||||
/**
|
||||
* 全部订单
|
||||
*/
|
||||
@ApiModelProperty(value = "全部订单")
|
||||
private Integer all;
|
||||
/**
|
||||
* 售后订单(退款/售后)
|
||||
*/
|
||||
@ApiModelProperty(value = "售后订单(退款/售后)")
|
||||
private Integer afterSale;
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
@ApiModelProperty(value = "已取消")
|
||||
private Integer cancelled;
|
||||
/**
|
||||
* 待付款
|
||||
*/
|
||||
@ApiModelProperty(value = "待付款")
|
||||
private Integer pendingPayment;
|
||||
/**
|
||||
* 待发货
|
||||
*/
|
||||
@ApiModelProperty(value = "待发货")
|
||||
private Integer pendingShipment;
|
||||
/**
|
||||
* 已发货
|
||||
*/
|
||||
@ApiModelProperty(value = "已发货")
|
||||
private Integer shipped;
|
||||
/**
|
||||
* 已完成
|
||||
*/
|
||||
@ApiModelProperty(value = "已完成")
|
||||
private Integer completed;
|
||||
/**
|
||||
* 售后中
|
||||
*/
|
||||
@ApiModelProperty(value = "售后中")
|
||||
private Integer afterSaleInProgress;
|
||||
/**
|
||||
* 售后拒绝
|
||||
*/
|
||||
@ApiModelProperty(value = "售后拒绝")
|
||||
private Integer afterSaleRejected;
|
||||
/**
|
||||
* 平台介入
|
||||
*/
|
||||
@ApiModelProperty(value = "平台介入")
|
||||
private Integer platformIntervened;
|
||||
/**
|
||||
* 售后完成
|
||||
*/
|
||||
@ApiModelProperty(value = "售后完成")
|
||||
private Integer afterSaleCompleted;
|
||||
}
|
||||
|
|
@ -27,4 +27,7 @@ public class StoreOrderPrintReqVO {
|
|||
@NotNull(message = "物流ID不能为空")
|
||||
@ApiModelProperty(value = "物流ID", required = true)
|
||||
private Long expressId;
|
||||
|
||||
@ApiModelProperty(value = "打印成功后立即发货", required = true)
|
||||
private Boolean needShip;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -34,6 +34,9 @@ public class StoreOrderQueryVO extends BasePageVO {
|
|||
*/
|
||||
@ApiModelProperty(value = "订单号(模糊)")
|
||||
private String orderNo;
|
||||
|
||||
@ApiModelProperty(value = "售后订单原订单号")
|
||||
private String originOrderNo;
|
||||
/**
|
||||
* 订单类型[1:销售订单 2:退货订单]
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -0,0 +1,55 @@
|
|||
package com.ruoyi.xkt.dto.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-07-23
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderCountDTO {
|
||||
/**
|
||||
* 全部订单
|
||||
*/
|
||||
private Integer all;
|
||||
/**
|
||||
* 售后订单(退款/售后)
|
||||
*/
|
||||
private Integer afterSale;
|
||||
/**
|
||||
* 已取消
|
||||
*/
|
||||
private Integer cancelled;
|
||||
/**
|
||||
* 待付款
|
||||
*/
|
||||
private Integer pendingPayment;
|
||||
/**
|
||||
* 待发货
|
||||
*/
|
||||
private Integer pendingShipment;
|
||||
/**
|
||||
* 已发货
|
||||
*/
|
||||
private Integer shipped;
|
||||
/**
|
||||
* 已完成
|
||||
*/
|
||||
private Integer completed;
|
||||
/**
|
||||
* 售后中
|
||||
*/
|
||||
private Integer afterSaleInProgress;
|
||||
/**
|
||||
* 售后拒绝
|
||||
*/
|
||||
private Integer afterSaleRejected;
|
||||
/**
|
||||
* 平台介入
|
||||
*/
|
||||
private Integer platformIntervened;
|
||||
/**
|
||||
* 售后完成
|
||||
*/
|
||||
private Integer afterSaleCompleted;
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.ruoyi.xkt.dto.order;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author liangyq
|
||||
* @date 2025-07-23
|
||||
*/
|
||||
@Data
|
||||
public class StoreOrderCountQueryDTO {
|
||||
/**
|
||||
* 档口ID
|
||||
*/
|
||||
private Long storeId;
|
||||
/**
|
||||
* 下单用户ID
|
||||
*/
|
||||
private Long orderUserId;
|
||||
/**
|
||||
* 开始时间
|
||||
*/
|
||||
private Date createTimeBegin;
|
||||
/**
|
||||
* 结束时间
|
||||
*/
|
||||
private Date createTimeEnd;
|
||||
}
|
||||
|
|
@ -27,6 +27,10 @@ public class StoreOrderQueryDTO extends BasePageDTO {
|
|||
* 订单号(模糊)
|
||||
*/
|
||||
private String orderNo;
|
||||
/**
|
||||
* 售后订单原订单号
|
||||
*/
|
||||
private String originOrderNo;
|
||||
/**
|
||||
* 订单类型[1:销售订单 2:退货订单]
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -2,6 +2,8 @@ package com.ruoyi.xkt.mapper;
|
|||
|
||||
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
|
||||
import com.ruoyi.xkt.domain.StoreOrder;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderCountDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderCountQueryDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderPageItemDTO;
|
||||
import com.ruoyi.xkt.dto.order.StoreOrderQueryDTO;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
|
@ -18,4 +20,6 @@ public interface StoreOrderMapper extends BaseMapper<StoreOrder> {
|
|||
List<StoreOrderPageItemDTO> listStoreOrderPageItem(StoreOrderQueryDTO queryDTO);
|
||||
|
||||
List<StoreOrder> listNeedContinueRefundOrder();
|
||||
|
||||
StoreOrderCountDTO countOrder(StoreOrderCountQueryDTO queryDTO);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -94,6 +94,14 @@ public interface IStoreOrderService {
|
|||
*/
|
||||
Page<StoreOrderPageItemDTO> page(StoreOrderQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 订单统计
|
||||
*
|
||||
* @param queryDTO
|
||||
* @return
|
||||
*/
|
||||
StoreOrderCountDTO count(StoreOrderCountQueryDTO queryDTO);
|
||||
|
||||
/**
|
||||
* 准备支付订单
|
||||
*
|
||||
|
|
@ -150,11 +158,12 @@ public interface IStoreOrderService {
|
|||
* @param storeOrderId
|
||||
* @param storeOrderDetailIds
|
||||
* @param expressId
|
||||
* @param needShip
|
||||
* @param operatorId
|
||||
* @return
|
||||
*/
|
||||
ExpressShippingLabelDTO printOrder(Long storeOrderId, List<Long> storeOrderDetailIds, Long expressId,
|
||||
Long operatorId);
|
||||
Boolean needShip, Long operatorId);
|
||||
|
||||
/**
|
||||
* 确认收货
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.ruoyi.common.core.domain.entity.SysUser;
|
|||
import com.ruoyi.common.exception.ServiceException;
|
||||
import com.ruoyi.common.utils.SecurityUtils;
|
||||
import com.ruoyi.common.utils.bean.BeanValidators;
|
||||
import com.ruoyi.common.utils.spring.SpringUtils;
|
||||
import com.ruoyi.system.mapper.SysUserMapper;
|
||||
import com.ruoyi.xkt.domain.*;
|
||||
import com.ruoyi.xkt.dto.express.*;
|
||||
|
|
@ -594,6 +595,11 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public StoreOrderCountDTO count(StoreOrderCountQueryDTO queryDTO) {
|
||||
return storeOrderMapper.countOrder(queryDTO);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public StoreOrderExt preparePayOrder(Long storeOrderId, EPayChannel payChannel) {
|
||||
|
|
@ -898,9 +904,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
return new StoreOrderExt(order, orderDetails);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@Override
|
||||
public ExpressShippingLabelDTO printOrder(Long storeOrderId, List<Long> storeOrderDetailIds, Long expressId,
|
||||
Long operatorId) {
|
||||
Boolean needShip, Long operatorId) {
|
||||
Assert.notEmpty(storeOrderDetailIds);
|
||||
ExpressManager expressManager = expressService.getExpressManager(expressId);
|
||||
Express express = expressService.getById(expressId);
|
||||
|
|
@ -982,6 +989,10 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
|||
//操作记录
|
||||
addOperationRecords(order.getId(), EOrderAction.EXPRESS_SHIP, orderDetailIdList, EOrderAction.EXPRESS_SHIP,
|
||||
"打印快递单", operatorId, new Date());
|
||||
if (Boolean.TRUE.equals(needShip)) {
|
||||
//立即发货
|
||||
SpringUtils.getAopProxy(this).shipOrderByPlatform(storeOrderId, storeOrderDetailIds, operatorId);
|
||||
}
|
||||
return shippingLabelDTO;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -24,6 +24,9 @@
|
|||
<if test="orderNo != null and orderNo !=''">
|
||||
AND so.order_no LIKE CONCAT('%', #{orderNo}, '%')
|
||||
</if>
|
||||
<if test="originOrderNo != null and originOrderNo !=''">
|
||||
AND EXISTS (SELECT 1 FROM store_order so1 WHERE so1.id = so.origin_order_id AND so1.order_no = #{originOrderNo} AND so1.del_flag = '0')
|
||||
</if>
|
||||
<if test="orderType != null">
|
||||
AND so.order_type = #{orderType}
|
||||
</if>
|
||||
|
|
@ -70,4 +73,33 @@
|
|||
AND sod.pay_status = 2
|
||||
)
|
||||
</select>
|
||||
<select id="countOrder" parameterType="com.ruoyi.xkt.dto.order.StoreOrderCountQueryDTO"
|
||||
resultType="com.ruoyi.xkt.dto.order.StoreOrderCountDTO">
|
||||
SELECT
|
||||
SUM(1) AS `all`,
|
||||
SUM(CASE WHEN `order_type` = 2 THEN 1 ELSE 0 END) AS `after_sale`,
|
||||
SUM(CASE WHEN `order_status` = 10 THEN 1 ELSE 0 END) AS `cancelled`,
|
||||
SUM(CASE WHEN `order_status` = 11 THEN 1 ELSE 0 END) AS `pending_payment`,
|
||||
SUM(CASE WHEN `order_status` = 12 THEN 1 ELSE 0 END) AS `pending_shipment`,
|
||||
SUM(CASE WHEN `order_status` = 13 THEN 1 ELSE 0 END) AS `shipped`,
|
||||
SUM(CASE WHEN `order_status` = 14 THEN 1 ELSE 0 END) AS `completed`,
|
||||
SUM(CASE WHEN `order_status` = 21 THEN 1 ELSE 0 END) AS `after_sale_in_progress`,
|
||||
SUM(CASE WHEN `order_status` = 22 THEN 1 ELSE 0 END) AS `after_sale_rejected`,
|
||||
SUM(CASE WHEN `order_status` = 23 THEN 1 ELSE 0 END) AS `platform_intervened`,
|
||||
SUM(CASE WHEN `order_status` = 24 THEN 1 ELSE 0 END) AS `after_sale_completed`
|
||||
FROM
|
||||
store_order
|
||||
<where>
|
||||
del_flag = '0'
|
||||
<if test="storeId != null">
|
||||
AND store_id = #{storeId}
|
||||
</if>
|
||||
<if test="orderUserId != null">
|
||||
AND order_user_id = #{orderUserId}
|
||||
</if>
|
||||
<if test="createTimeBegin != null and createTimeEnd != null">
|
||||
AND create_time BETWEEN #{createTimeBegin}' AND #{createTimeEnd}
|
||||
</if>
|
||||
</where>
|
||||
</select>
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue