管理后台售后处理

pull/1/head
czc 2 years ago
parent 0d4dabb19a
commit 585025c8ae

@ -247,4 +247,10 @@ public class Constants
public static final Integer INCOMPLETE = 0;
public static final Integer COMPLETE = 1;
}
public static class OptType {
public static final Integer AGREE = 1;
public static final Integer REFUSE = 2;
public static final Integer GIVING = 3;
}
}

@ -691,6 +691,7 @@ public class H5OrderService {
* @param orderId id
* @return
*/
@Transactional
public String cancelRefund(Long orderId) {
Order order = orderMapper.selectById(orderId);
if (order == null){

@ -2,10 +2,16 @@ package com.cyl.manager.oms.controller;
import java.util.List;
import com.cyl.manager.oms.pojo.request.DealWithAftersaleRequest;
import com.cyl.manager.oms.pojo.request.ManagerAftersaleOrderRequest;
import com.cyl.manager.oms.pojo.vo.ManagerRefundOrderVo;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.core.redis.RedisService;
import com.ruoyi.common.utils.SecurityUtils;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.extern.slf4j.Slf4j;
import org.springframework.data.domain.PageImpl;
import org.springframework.data.domain.Pageable;
import org.springframework.data.domain.Page;
@ -38,11 +44,14 @@ import com.ruoyi.common.utils.poi.ExcelUtil;
@Api(description ="订单售后接口列表")
@RestController
@RequestMapping("/oms/aftersale")
@Slf4j
public class AftersaleController extends BaseController {
@Autowired
private AftersaleService service;
@Autowired
private AftersaleConvert convert;
@Autowired
private RedisService redisService;
@ApiOperation("查询订单售后列表")
@PreAuthorize("@ss.hasPermi('oms:aftersale:list')")
@ -93,4 +102,25 @@ public class AftersaleController extends BaseController {
public ResponseEntity<Integer> remove(@PathVariable Long id) {
return ResponseEntity.ok(service.deleteById(id));
}
@ApiOperation("售后订单操作")
@PostMapping("/dealWith")
public ResponseEntity<String> updateStatus(@RequestBody DealWithAftersaleRequest request){
LoginUser user = SecurityUtils.getLoginUser();
String redisKey = "manager_oms_order_updateOrderStatus_" + user.getUserId();
String redisValue = user.getUserId() + "_" + System.currentTimeMillis();
try {
redisService.lock(redisKey, redisValue, 60);
return ResponseEntity.ok(service.dealWith(request, user));
} catch (Exception e) {
log.error("售后订单操作发生异常", e);
throw new RuntimeException(e.getMessage());
} finally {
try {
redisService.unLock(redisKey, redisValue);
} catch (Exception e) {
log.error("", e);
}
}
}
}

@ -0,0 +1,23 @@
package com.cyl.manager.oms.pojo.request;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
@Data
@ApiModel(value = "商城售后订单处理操作请求体")
public class DealWithAftersaleRequest {
@ApiModelProperty(name = "orderId",value = "订单id",required = true,dataType = "Long")
@NotBlank(message = "订单id不能为空")
private Long orderId;
@ApiModelProperty(name = "optType",value = "操作类型 1同意 2拒绝 3确认收货",required = true,dataType = "String")
@NotNull(message = "操作类型不能为空")
private Integer optType;
@ApiModelProperty(name = "remark",value = "拒绝理由 操作类型为2时必填",required = true,dataType = "String")
private String remark;
}

@ -72,4 +72,7 @@ import java.util.List;
@ApiModelProperty(name = "productInfo", value = "售后单商品数据")
private List<ManagerOrderProductVO> productList;
@ApiModelProperty(name = "handleMan", value = "处理人员")
private String handleMan;
}

@ -6,15 +6,24 @@ import java.util.*;
import java.util.stream.Collectors;
import cn.hutool.core.collection.CollectionUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.cyl.manager.oms.domain.Order;
import com.cyl.manager.oms.domain.OrderItem;
import com.cyl.manager.oms.domain.OrderOperateHistory;
import com.cyl.manager.oms.mapper.OrderItemMapper;
import com.cyl.manager.oms.mapper.OrderMapper;
import com.cyl.manager.oms.mapper.OrderOperateHistoryMapper;
import com.cyl.manager.oms.pojo.request.DealWithAftersaleRequest;
import com.cyl.manager.oms.pojo.request.ManagerAftersaleOrderRequest;
import com.cyl.manager.oms.pojo.vo.ManagerOrderProductVO;
import com.cyl.manager.oms.pojo.vo.ManagerRefundOrderVo;
import com.github.pagehelper.PageHelper;
import com.ruoyi.common.constant.Constants;
import com.ruoyi.common.core.domain.model.LoginUser;
import com.ruoyi.common.enums.AftersaleStatus;
import com.ruoyi.common.enums.OrderRefundStatus;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Pageable;
import org.apache.commons.lang3.StringUtils;
@ -22,6 +31,7 @@ import org.springframework.stereotype.Service;
import com.cyl.manager.oms.mapper.AftersaleMapper;
import com.cyl.manager.oms.domain.Aftersale;
import com.cyl.manager.oms.pojo.query.AftersaleQuery;
import org.springframework.transaction.annotation.Transactional;
/**
* Service
@ -40,6 +50,9 @@ public class AftersaleService {
@Autowired
private OrderItemMapper orderItemMapper;
@Autowired
private OrderOperateHistoryMapper orderOperateHistoryMapper;
/**
*
*
@ -124,4 +137,83 @@ public class AftersaleService {
public int deleteById(Long id) {
return aftersaleMapper.deleteById(id);
}
/**
*
* @param request
* @param user
* @return
*/
@Transactional
public String dealWith(DealWithAftersaleRequest request, LoginUser user) {
Order order = orderMapper.selectById(request.getOrderId());
if (order == null){
throw new RuntimeException("无该订单");
}
//目前售后类型只有退款,没有退货退款
//所以目前只需要查看是否有待处理的售后单
QueryWrapper<Aftersale> aftersaleQw = new QueryWrapper<>();
aftersaleQw.eq("status", AftersaleStatus.APPLY.getType());
Aftersale aftersale = aftersaleMapper.selectOne(aftersaleQw);
if (aftersale == null){
throw new RuntimeException("没有售后单");
}
//售后状态与售后类型是否对应
boolean ifAgree = Constants.OptType.AGREE.equals(request.getOptType());
boolean ifRefuse = Constants.OptType.REFUSE.equals(request.getOptType());
if (ifAgree || ifRefuse){
if (!AftersaleStatus.APPLY.getType().equals(aftersale.getStatus())){
throw new RuntimeException("订单状态有误,请刷新后重试");
}
}
//拒绝则理由必填
if (ifRefuse && StrUtil.isBlank(request.getRemark())){
throw new RuntimeException("请填写拒绝理由");
}
LocalDateTime optDate = LocalDateTime.now();
//要创建的订单操作记录status后续判断再设置
OrderOperateHistory optHistory = new OrderOperateHistory();
optHistory.setOrderId(order.getId());
optHistory.setOperateMan("后台管理员");
optHistory.setCreateTime(optDate);
optHistory.setCreateBy(user.getUserId());
optHistory.setUpdateBy(user.getUserId());
optHistory.setUpdateTime(optDate);
//封装售后wrapper
UpdateWrapper<Aftersale> aftersaleWrapper = new UpdateWrapper<>();
aftersaleWrapper.eq("order_id", request.getOrderId());
aftersaleWrapper.set("handle_man", user.getUser().getNickName());
aftersaleWrapper.set("update_time", optDate);
aftersaleWrapper.set("handle_time", optDate);
aftersaleWrapper.set("update_by", user.getUserId());
//封装订单wrapper
UpdateWrapper<Order> orderWrapper = new UpdateWrapper<>();
orderWrapper.eq("id", request.getOrderId());
orderWrapper.set("update_time", optDate);
orderWrapper.set("update_by", user.getUserId());
//更新订单、售后单,创建操作记录
if (ifRefuse){
aftersaleWrapper.set("status", AftersaleStatus.REJECT.getType());
aftersaleWrapper.set("handle_note", request.getRemark());
orderWrapper.set("aftersale_status", OrderRefundStatus.NO_REFUND.getType());
optHistory.setOrderStatus(14);
}else if (ifAgree){
aftersaleWrapper.set("status", AftersaleStatus.WAIT.getType());
orderWrapper.set("aftersale_status", OrderRefundStatus.WAIT.getType());
optHistory.setOrderStatus(12);
}
int rows = aftersaleMapper.update(null, aftersaleWrapper);
if (rows < 1){
throw new RuntimeException("更新售后单失败");
}
rows = orderMapper.update(null, orderWrapper);
if (rows < 1){
throw new RuntimeException("更新订单失败");
}
rows = orderOperateHistoryMapper.insert(optHistory);
if (rows < 1){
throw new RuntimeException("创建订单操作记录失败");
}
return "操作成功";
}
}

@ -80,8 +80,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
a.status aftersaleStatus,
a.handle_time handleTime,
a.handle_note note,
a.handle_man,
c.nickname nickName,
c.phone phone
c.phone_hidden phone
FROM oms_aftersale a
left join ums_member c on a.member_id = c.id
<where>

Loading…
Cancel
Save