pull/1121/head
parent
7327b36175
commit
e92685e322
|
|
@ -15,6 +15,7 @@ import com.ruoyi.common.exception.ServiceException;
|
||||||
import com.ruoyi.common.utils.SecurityUtils;
|
import com.ruoyi.common.utils.SecurityUtils;
|
||||||
import com.ruoyi.framework.notice.fs.FsNotice;
|
import com.ruoyi.framework.notice.fs.FsNotice;
|
||||||
import com.ruoyi.web.controller.xkt.vo.order.*;
|
import com.ruoyi.web.controller.xkt.vo.order.*;
|
||||||
|
import com.ruoyi.xkt.domain.StoreOrder;
|
||||||
import com.ruoyi.xkt.domain.StoreOrderDetail;
|
import com.ruoyi.xkt.domain.StoreOrderDetail;
|
||||||
import com.ruoyi.xkt.dto.express.ExpressCancelReqDTO;
|
import com.ruoyi.xkt.dto.express.ExpressCancelReqDTO;
|
||||||
import com.ruoyi.xkt.dto.express.ExpressInterceptReqDTO;
|
import com.ruoyi.xkt.dto.express.ExpressInterceptReqDTO;
|
||||||
|
|
@ -268,6 +269,42 @@ public class StoreOrderController extends XktBaseController {
|
||||||
return success(afterSaleApplyResult.getStoreOrderId());
|
return success(afterSaleApplyResult.getStoreOrderId());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasAnyRoles('seller,store')||@ss.hasSupplierSubRole()")
|
||||||
|
@Log(title = "订单", businessType = BusinessType.OTHER)
|
||||||
|
@ApiOperation("申请平台介入")
|
||||||
|
@PostMapping("platform-involve/apply")
|
||||||
|
public R<Long> applyPlatformInvolve(@Valid @RequestBody PlatformInvolveApplyReqVO vo) {
|
||||||
|
Long orderId = vo.getStoreOrderId();
|
||||||
|
Long userId = SecurityUtils.getUserId();
|
||||||
|
Long storeId = SecurityUtils.getStoreId();
|
||||||
|
StoreOrder order = storeOrderService.getById(orderId);
|
||||||
|
Assert.notNull(order, "订单不存在");
|
||||||
|
if (Objects.equals(order.getStoreId(), storeId)
|
||||||
|
|| Objects.equals(order.getOrderUserId(), userId)) {
|
||||||
|
storeOrderService.applyPlatformInvolve(orderId, vo.getPlatformInvolveReason());
|
||||||
|
return R.ok(orderId);
|
||||||
|
}
|
||||||
|
return R.fail("无权限");
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin')")
|
||||||
|
@Log(title = "订单", businessType = BusinessType.OTHER)
|
||||||
|
@ApiOperation("平台介入完成(管理员)")
|
||||||
|
@PostMapping("platform-involve/complete")
|
||||||
|
public R<Long> completePlatformInvolve(@Valid @RequestBody PlatformInvolveCompleteVO vo) {
|
||||||
|
storeOrderService.completePlatformInvolve(vo.getStoreOrderId(), vo.getPlatformInvolveResult());
|
||||||
|
return R.ok(vo.getStoreOrderId());
|
||||||
|
}
|
||||||
|
|
||||||
|
@PreAuthorize("@ss.hasAnyRoles('seller')")
|
||||||
|
@Log(title = "订单", businessType = BusinessType.OTHER)
|
||||||
|
@ApiOperation("售后完成(用户)")
|
||||||
|
@PostMapping("refund/complete")
|
||||||
|
public R<Long> completeRefundByUser(@Valid @RequestBody RefundCompleteVO vo) {
|
||||||
|
storeOrderService.completeRefundByUser(vo.getStoreOrderId());
|
||||||
|
return R.ok(vo.getStoreOrderId());
|
||||||
|
}
|
||||||
|
|
||||||
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
@PreAuthorize("@ss.hasAnyRoles('admin,general_admin,store')||@ss.hasSupplierSubRole()")
|
||||||
@Log(title = "订单", businessType = BusinessType.OTHER)
|
@Log(title = "订单", businessType = BusinessType.OTHER)
|
||||||
@ApiOperation("确认退款")
|
@ApiOperation("确认退款")
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.ruoyi.web.controller.xkt.vo.order;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author liangyq
|
||||||
|
* @date 2025-07-12
|
||||||
|
*/
|
||||||
|
@ApiModel
|
||||||
|
@Data
|
||||||
|
public class PlatformInvolveApplyReqVO {
|
||||||
|
|
||||||
|
@NotNull(message = "订单ID不能为空")
|
||||||
|
@ApiModelProperty(value = "订单ID", required = true)
|
||||||
|
private Long storeOrderId;
|
||||||
|
|
||||||
|
@NotNull(message = "平台介入原因不能为空")
|
||||||
|
@ApiModelProperty(value = "平台介入原因", required = true)
|
||||||
|
private String platformInvolveReason;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,25 @@
|
||||||
|
package com.ruoyi.web.controller.xkt.vo.order;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author liangyq
|
||||||
|
* @date 2025-07-12
|
||||||
|
*/
|
||||||
|
@ApiModel
|
||||||
|
@Data
|
||||||
|
public class PlatformInvolveCompleteVO {
|
||||||
|
|
||||||
|
@NotNull(message = "订单ID不能为空")
|
||||||
|
@ApiModelProperty(value = "订单ID", required = true)
|
||||||
|
private Long storeOrderId;
|
||||||
|
|
||||||
|
@NotNull(message = "平台介入处理结果不能为空")
|
||||||
|
@ApiModelProperty(value = "平台介入处理结果", required = true)
|
||||||
|
private String platformInvolveResult;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,21 @@
|
||||||
|
package com.ruoyi.web.controller.xkt.vo.order;
|
||||||
|
|
||||||
|
import io.swagger.annotations.ApiModel;
|
||||||
|
import io.swagger.annotations.ApiModelProperty;
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @author liangyq
|
||||||
|
* @date 2025-07-12
|
||||||
|
*/
|
||||||
|
@ApiModel
|
||||||
|
@Data
|
||||||
|
public class RefundCompleteVO {
|
||||||
|
|
||||||
|
@NotNull(message = "订单ID不能为空")
|
||||||
|
@ApiModelProperty(value = "订单ID", required = true)
|
||||||
|
private Long storeOrderId;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -446,6 +446,12 @@ public class StoreOrderInfoVO {
|
||||||
@ApiModelProperty(value = "档口地址")
|
@ApiModelProperty(value = "档口地址")
|
||||||
private String storeAddress;
|
private String storeAddress;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "平台介入原因")
|
||||||
|
private String platformInvolveReason;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "平台介入结果")
|
||||||
|
private String platformInvolveResult;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ApiModel
|
@ApiModel
|
||||||
|
|
|
||||||
|
|
@ -250,6 +250,12 @@ public class StoreOrderPageItemVO extends StoreOrderDTO {
|
||||||
@ApiModelProperty(value = "订单明细")
|
@ApiModelProperty(value = "订单明细")
|
||||||
private List<Detail> orderDetails;
|
private List<Detail> orderDetails;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "平台介入原因")
|
||||||
|
private String platformInvolveReason;
|
||||||
|
|
||||||
|
@ApiModelProperty(value = "平台介入结果")
|
||||||
|
private String platformInvolveResult;
|
||||||
|
|
||||||
@ApiModel
|
@ApiModel
|
||||||
@Data
|
@Data
|
||||||
public static class Detail {
|
public static class Detail {
|
||||||
|
|
|
||||||
|
|
@ -92,7 +92,7 @@ public class StoreOrderQueryVO extends BasePageVO {
|
||||||
private String prodArtNum;
|
private String prodArtNum;
|
||||||
|
|
||||||
@NotNull(message = "来源页面不能为空")
|
@NotNull(message = "来源页面不能为空")
|
||||||
@ApiModelProperty(value = "来源页面[1:卖家订单列表 2:档口订单列表]", required = true)
|
@ApiModelProperty(value = "来源页面[1:卖家订单列表 2:档口/平台订单列表]", required = true)
|
||||||
private Integer srcPage;
|
private Integer srcPage;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -155,6 +155,14 @@ public class StoreOrder extends SimpleEntity {
|
||||||
* 凭证日期
|
* 凭证日期
|
||||||
*/
|
*/
|
||||||
private Date voucherDate;
|
private Date voucherDate;
|
||||||
|
/**
|
||||||
|
* 平台介入原因
|
||||||
|
*/
|
||||||
|
private String platformInvolveReason;
|
||||||
|
/**
|
||||||
|
* 平台介入结果
|
||||||
|
*/
|
||||||
|
private String platformInvolveResult;
|
||||||
/**
|
/**
|
||||||
* 版本号
|
* 版本号
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -173,6 +173,14 @@ public class StoreOrderDTO {
|
||||||
* 更新时间
|
* 更新时间
|
||||||
*/
|
*/
|
||||||
private Date updateTime;
|
private Date updateTime;
|
||||||
|
/**
|
||||||
|
* 平台介入原因
|
||||||
|
*/
|
||||||
|
private String platformInvolveReason;
|
||||||
|
/**
|
||||||
|
* 平台介入结果
|
||||||
|
*/
|
||||||
|
private String platformInvolveResult;
|
||||||
/**
|
/**
|
||||||
* 版本号
|
* 版本号
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,9 @@ public enum EOrderAction {
|
||||||
REJECT_AFTER_SALE(9, "拒绝售后"),
|
REJECT_AFTER_SALE(9, "拒绝售后"),
|
||||||
CONFIRM_AFTER_SALE(10, "确认售后"),
|
CONFIRM_AFTER_SALE(10, "确认售后"),
|
||||||
REFUND(11, "退款"),
|
REFUND(11, "退款"),
|
||||||
|
APPLY_PLATFORM_INVOLVE(12, "申请平台介入"),
|
||||||
|
COMPLETE_PLATFORM_INVOLVE(13, "平台介入完成"),
|
||||||
|
USER_COMPLETE_AFTER_SALE(14, "用户确认售后完成"),
|
||||||
;
|
;
|
||||||
|
|
||||||
private final Integer value;
|
private final Integer value;
|
||||||
|
|
|
||||||
|
|
@ -45,6 +45,14 @@ public interface IStoreOrderService {
|
||||||
*/
|
*/
|
||||||
StoreOrder getByOrderNo(String orderNo);
|
StoreOrder getByOrderNo(String orderNo);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过ID获取订单
|
||||||
|
*
|
||||||
|
* @param id
|
||||||
|
* @return
|
||||||
|
*/
|
||||||
|
StoreOrder getById(Long id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 获取订单详情
|
* 获取订单详情
|
||||||
*
|
*
|
||||||
|
|
@ -218,4 +226,27 @@ public interface IStoreOrderService {
|
||||||
* @param storeId
|
* @param storeId
|
||||||
*/
|
*/
|
||||||
void checkOrderStore(Collection<Long> storeOrderDetailIds, Long storeId);
|
void checkOrderStore(Collection<Long> storeOrderDetailIds, Long storeId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 申请平台介入
|
||||||
|
*
|
||||||
|
* @param storeOrderId
|
||||||
|
* @param platformInvolveReason
|
||||||
|
*/
|
||||||
|
void applyPlatformInvolve(Long storeOrderId, String platformInvolveReason);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 平台介入完成
|
||||||
|
*
|
||||||
|
* @param storeOrderId
|
||||||
|
* @param platformInvolveResult
|
||||||
|
*/
|
||||||
|
void completePlatformInvolve(Long storeOrderId, String platformInvolveResult);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 售后完成
|
||||||
|
*
|
||||||
|
* @param storeOrderId
|
||||||
|
*/
|
||||||
|
void completeRefundByUser(Long storeOrderId);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -359,6 +359,11 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
||||||
.eq(StoreOrder::getOrderNo, orderNo));
|
.eq(StoreOrder::getOrderNo, orderNo));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StoreOrder getById(Long id) {
|
||||||
|
return storeOrderMapper.selectById(id);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public StoreOrderInfoDTO getInfo(Long storeOrderId) {
|
public StoreOrderInfoDTO getInfo(Long storeOrderId) {
|
||||||
StoreOrder order = storeOrderMapper.selectById(storeOrderId);
|
StoreOrder order = storeOrderMapper.selectById(storeOrderId);
|
||||||
|
|
@ -1349,6 +1354,103 @@ public class StoreOrderServiceImpl implements IStoreOrderService {
|
||||||
storeOrderIds.forEach(id -> checkOrderStore(id, storeId));
|
storeOrderIds.forEach(id -> checkOrderStore(id, storeId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void applyPlatformInvolve(Long storeOrderId, String platformInvolveReason) {
|
||||||
|
StoreOrder order = getAndBaseCheck(storeOrderId);
|
||||||
|
if (!EOrderStatus.AFTER_SALE_IN_PROGRESS.getValue().equals(order.getOrderStatus())
|
||||||
|
&& !EOrderStatus.AFTER_SALE_REJECTED.getValue().equals(order.getOrderStatus())) {
|
||||||
|
throw new ServiceException(CharSequenceUtil.format("订单[{}]状态异常", order.getId()));
|
||||||
|
}
|
||||||
|
order.setOrderStatus(EOrderStatus.PLATFORM_INTERVENED.getValue());
|
||||||
|
order.setPlatformInvolveReason(platformInvolveReason);
|
||||||
|
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||||
|
if (orderSuccess == 0) {
|
||||||
|
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||||
|
}
|
||||||
|
//操作记录
|
||||||
|
addOperationRecords(order.getId(),
|
||||||
|
EOrderAction.APPLY_PLATFORM_INVOLVE,
|
||||||
|
null,
|
||||||
|
EOrderAction.APPLY_PLATFORM_INVOLVE,
|
||||||
|
SecurityUtils.getUserIdSafe(),
|
||||||
|
new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void completePlatformInvolve(Long storeOrderId, String platformInvolveResult) {
|
||||||
|
StoreOrder order = getAndBaseCheck(storeOrderId);
|
||||||
|
if (!EOrderStatus.PLATFORM_INTERVENED.getValue().equals(order.getOrderStatus())) {
|
||||||
|
throw new ServiceException(CharSequenceUtil.format("订单[{}]状态异常", order.getId()));
|
||||||
|
}
|
||||||
|
List<StoreOrderDetail> incompleteOrderDetails = storeOrderDetailMapper.selectList(Wrappers
|
||||||
|
.lambdaQuery(StoreOrderDetail.class)
|
||||||
|
.eq(StoreOrderDetail::getStoreOrderId, order.getId())
|
||||||
|
//售后未完成明细
|
||||||
|
.ne(StoreOrderDetail::getDetailStatus, EOrderStatus.AFTER_SALE_COMPLETED)
|
||||||
|
.eq(SimpleEntity::getDelFlag, Constants.UNDELETED));
|
||||||
|
List<Long> storeOrderDetailIds = new ArrayList<>(incompleteOrderDetails.size());
|
||||||
|
for (StoreOrderDetail storeOrderDetail : incompleteOrderDetails) {
|
||||||
|
storeOrderDetail.setDetailStatus(EOrderStatus.AFTER_SALE_COMPLETED.getValue());
|
||||||
|
int orderDetailSuccess = storeOrderDetailMapper.updateById(prepareUpdate(storeOrderDetail));
|
||||||
|
if (orderDetailSuccess == 0) {
|
||||||
|
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||||
|
}
|
||||||
|
storeOrderDetailIds.add(storeOrderDetail.getId());
|
||||||
|
}
|
||||||
|
order.setOrderStatus(EOrderStatus.AFTER_SALE_COMPLETED.getValue());
|
||||||
|
order.setPlatformInvolveResult(platformInvolveResult);
|
||||||
|
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||||
|
if (orderSuccess == 0) {
|
||||||
|
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||||
|
}
|
||||||
|
//操作记录
|
||||||
|
addOperationRecords(order.getId(),
|
||||||
|
EOrderAction.COMPLETE_PLATFORM_INVOLVE,
|
||||||
|
storeOrderDetailIds,
|
||||||
|
EOrderAction.COMPLETE_PLATFORM_INVOLVE,
|
||||||
|
SecurityUtils.getUserIdSafe(),
|
||||||
|
new Date());
|
||||||
|
}
|
||||||
|
|
||||||
|
@Transactional(rollbackFor = Exception.class)
|
||||||
|
@Override
|
||||||
|
public void completeRefundByUser(Long storeOrderId) {
|
||||||
|
StoreOrder order = getAndBaseCheck(storeOrderId);
|
||||||
|
if (!EOrderStatus.AFTER_SALE_IN_PROGRESS.getValue().equals(order.getOrderStatus())
|
||||||
|
&& !EOrderStatus.AFTER_SALE_REJECTED.getValue().equals(order.getOrderStatus())) {
|
||||||
|
throw new ServiceException(CharSequenceUtil.format("订单[{}]状态异常", order.getId()));
|
||||||
|
}
|
||||||
|
List<StoreOrderDetail> incompleteOrderDetails = storeOrderDetailMapper.selectList(Wrappers
|
||||||
|
.lambdaQuery(StoreOrderDetail.class)
|
||||||
|
.eq(StoreOrderDetail::getStoreOrderId, order.getId())
|
||||||
|
//售后未完成明细
|
||||||
|
.ne(StoreOrderDetail::getDetailStatus, EOrderStatus.AFTER_SALE_COMPLETED)
|
||||||
|
.eq(SimpleEntity::getDelFlag, Constants.UNDELETED));
|
||||||
|
List<Long> storeOrderDetailIds = new ArrayList<>(incompleteOrderDetails.size());
|
||||||
|
for (StoreOrderDetail storeOrderDetail : incompleteOrderDetails) {
|
||||||
|
storeOrderDetail.setDetailStatus(EOrderStatus.AFTER_SALE_COMPLETED.getValue());
|
||||||
|
int orderDetailSuccess = storeOrderDetailMapper.updateById(prepareUpdate(storeOrderDetail));
|
||||||
|
if (orderDetailSuccess == 0) {
|
||||||
|
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||||
|
}
|
||||||
|
storeOrderDetailIds.add(storeOrderDetail.getId());
|
||||||
|
}
|
||||||
|
order.setOrderStatus(EOrderStatus.AFTER_SALE_COMPLETED.getValue());
|
||||||
|
int orderSuccess = storeOrderMapper.updateById(prepareUpdate(order));
|
||||||
|
if (orderSuccess == 0) {
|
||||||
|
throw new ServiceException(Constants.VERSION_LOCK_ERROR_COMMON_MSG);
|
||||||
|
}
|
||||||
|
//操作记录
|
||||||
|
addOperationRecords(order.getId(),
|
||||||
|
EOrderAction.USER_COMPLETE_AFTER_SALE,
|
||||||
|
storeOrderDetailIds,
|
||||||
|
EOrderAction.USER_COMPLETE_AFTER_SALE,
|
||||||
|
SecurityUtils.getUserIdSafe(),
|
||||||
|
new Date());
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 添加操作记录
|
* 添加操作记录
|
||||||
*
|
*
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue