Browse Source

增加售后退款流程

sj
sj 2 years ago
parent
commit
3ba933257e
  1. 8
      yudao-server/src/main/resources/application-local.yaml
  2. 3
      zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppStoreAfterSalesController.java
  3. 4
      zsw-bxg/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java
  4. 18
      zsw-bxg/src/main/java/co/yixiang/modules/sales/StoreAfterSalesController.java
  5. 32
      zsw-bxg/src/main/java/co/yixiang/modules/sales/service/impl/StoreAfterSalesServiceImpl.java

8
yudao-server/src/main/resources/application-local.yaml

@ -270,14 +270,16 @@ dubbo:
bxg: bxg:
shop: shop:
# API_URL: http://192.168.10.113:48080/bxgApp # API_URL: http://192.168.10.113:48080/bxgApp
API_URL: http://675b568e.r6.cpolar.top API_URL: http://45288535.r5.cpolar.top
SITE_URL: http://192.168.10.113:48080/bxgApp SITE_URL: http://192.168.10.113:48080/bxgApp
UNI_SITE_URL: http://192.168.10.113:48080/bxgApp UNI_SITE_URL: http://192.168.10.113:48080/bxgApp
ADMIN_API_URL: http://192.168.10.113:48080/bxg ADMIN_API_URL: http://192.168.10.113:48080/bxg
# 快递100 参数 # 快递100 参数
kuaidi100: kuaidi100:
enable: true enable: true
key: mmbOboEj7168 # key: mmbOboEj7168
customer: A6D46C8A03A4127C78DF0E377D721702 # customer: A6D46C8A03A4127C78DF0E377D721702
key: JUIqcuah6354
customer: 72E85D8E7C67AEDB980F46C2B4194C27
secret: 13fcbe029263431293f5658cbf3259d3 secret: 13fcbe029263431293f5658cbf3259d3
userid: 79978ee033e640dca101450508620182 userid: 79978ee033e640dca101450508620182

3
zsw-bxg/src/main/java/co/yixiang/app/modules/user/rest/AppStoreAfterSalesController.java

@ -75,6 +75,9 @@ public class AppStoreAfterSalesController {
return ApiResult.resultPage(total.intValue(), totalPage.intValue(), map.get("list")); return ApiResult.resultPage(total.intValue(), totalPage.intValue(), map.get("list"));
} }
@AppLog(value = "查看售後详情", type = 1) @AppLog(value = "查看售後详情", type = 1)
@AuthCheck @AuthCheck
@GetMapping("/store/detail/{key}/{id}") @GetMapping("/store/detail/{key}/{id}")

4
zsw-bxg/src/main/java/co/yixiang/modules/order/rest/StoreOrderController.java

@ -12,6 +12,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.NumberUtil; import cn.hutool.core.util.NumberUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.framework.common.exception.YshopException;
import co.yixiang.annotation.AnonymousAccess; import co.yixiang.annotation.AnonymousAccess;
import co.yixiang.dozer.service.IGenerator; import co.yixiang.dozer.service.IGenerator;
import co.yixiang.enums.OrderInfoEnum; import co.yixiang.enums.OrderInfoEnum;
@ -344,7 +345,8 @@ public class StoreOrderController {
ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(), ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(),
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode()); expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode());
if (!expressInfo.isSuccess()) { if (!expressInfo.isSuccess()) {
throw new BadRequestException(expressInfo.getReason()); // throw new BadRequestException(expressInfo.getReason());
throw new YshopException(expressInfo.getReason());
} }
return new ResponseEntity<>(expressInfo, HttpStatus.OK); return new ResponseEntity<>(expressInfo, HttpStatus.OK);
} }

18
zsw-bxg/src/main/java/co/yixiang/modules/sales/StoreAfterSalesController.java

@ -1,5 +1,8 @@
package co.yixiang.modules.sales; package co.yixiang.modules.sales;
import cn.iocoder.yudao.framework.common.pojo.ApiResult;
import cn.iocoder.yudao.framework.security.core.annotations.AuthCheck;
import co.yixiang.app.modules.order.param.ExpressParam;
import co.yixiang.dozer.service.IGenerator; import co.yixiang.dozer.service.IGenerator;
import co.yixiang.logging.aop.log.Log; import co.yixiang.logging.aop.log.Log;
import co.yixiang.modules.mp.service.WeixinPayService; import co.yixiang.modules.mp.service.WeixinPayService;
@ -8,6 +11,8 @@ import co.yixiang.modules.sales.param.SalesCheckDto;
import co.yixiang.modules.sales.param.YxStoreAfterSalesDto; import co.yixiang.modules.sales.param.YxStoreAfterSalesDto;
import co.yixiang.modules.sales.service.StoreAfterSalesService; import co.yixiang.modules.sales.service.StoreAfterSalesService;
import co.yixiang.modules.sales.param.YxStoreAfterSalesQueryCriteria; import co.yixiang.modules.sales.param.YxStoreAfterSalesQueryCriteria;
import co.yixiang.tools.express.ExpressService;
import co.yixiang.tools.express.dao.ExpressInfo;
import io.swagger.annotations.Api; import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
@ -40,6 +45,8 @@ public class StoreAfterSalesController {
private final WeixinPayService weixinPayService; private final WeixinPayService weixinPayService;
private final IGenerator generator; private final IGenerator generator;
private final ExpressService expressService;
/** /**
* 审核 * 审核
*/ */
@ -73,6 +80,15 @@ public class StoreAfterSalesController {
public void download(HttpServletResponse response, YxStoreAfterSalesQueryCriteria criteria) throws IOException { public void download(HttpServletResponse response, YxStoreAfterSalesQueryCriteria criteria) throws IOException {
storeAfterSalesService.download(generator.convert(storeAfterSalesService.queryAll(criteria), YxStoreAfterSalesDto.class), response); storeAfterSalesService.download(generator.convert(storeAfterSalesService.queryAll(criteria), YxStoreAfterSalesDto.class), response);
} }
@Log("获取物流信息")
@PostMapping("/order/express")
@ApiOperation(value = "获取物流信息", notes = "获取物流信息")
public ResponseEntity<ExpressInfo> express(@RequestBody ExpressParam expressInfoDo) {
ExpressInfo expressInfo = expressService.getExpressInfo(expressInfoDo.getOrderCode(),
expressInfoDo.getShipperCode(), expressInfoDo.getLogisticCode());
return new ResponseEntity<>(expressInfo,HttpStatus.OK);
}
@GetMapping(value = "/sales/List") @GetMapping(value = "/sales/List")
@Log("查询售后") @Log("查询售后")
@ -82,6 +98,8 @@ public class StoreAfterSalesController {
return new ResponseEntity<>(storeAfterSalesService.queryAll(criteria,pageable),HttpStatus.OK); return new ResponseEntity<>(storeAfterSalesService.queryAll(criteria,pageable),HttpStatus.OK);
} }
@PostMapping @PostMapping
@Log("新增售后") @Log("新增售后")
@ApiOperation("新增售后") @ApiOperation("新增售后")

32
zsw-bxg/src/main/java/co/yixiang/modules/sales/service/impl/StoreAfterSalesServiceImpl.java

@ -14,6 +14,7 @@ import co.yixiang.event.TemplateEvent;
import co.yixiang.event.TemplateListenEnum; import co.yixiang.event.TemplateListenEnum;
import co.yixiang.exception.ErrorRequestException; import co.yixiang.exception.ErrorRequestException;
import co.yixiang.modules.cart.vo.YxStoreCartQueryVo; import co.yixiang.modules.cart.vo.YxStoreCartQueryVo;
import co.yixiang.modules.mp.service.WeixinPayService;
import co.yixiang.modules.order.domain.YxStoreOrder; import co.yixiang.modules.order.domain.YxStoreOrder;
import co.yixiang.modules.order.domain.YxStoreOrderCartInfo; import co.yixiang.modules.order.domain.YxStoreOrderCartInfo;
import co.yixiang.modules.order.service.YxStoreOrderService; import co.yixiang.modules.order.service.YxStoreOrderService;
@ -71,6 +72,8 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
private final StoreAfterSalesItemMapper storeAfterSalesItemMapper; private final StoreAfterSalesItemMapper storeAfterSalesItemMapper;
private final StoreAfterSalesStatusMapper storeAfterSalesStatusMapper; private final StoreAfterSalesStatusMapper storeAfterSalesStatusMapper;
private final IGenerator generator; private final IGenerator generator;
private final WeixinPayService weixinPayService;
@Autowired @Autowired
private ApplicationEventPublisher publisher; private ApplicationEventPublisher publisher;
@ -95,7 +98,7 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
BigDecimal totalAmountOfGoods = NumberUtil.mul(cartInfo.getTruePrice(), cartInfo.getCartNum()); BigDecimal totalAmountOfGoods = NumberUtil.mul(cartInfo.getTruePrice(), cartInfo.getCartNum());
//商品优惠总金额 //商品优惠总金额
BigDecimal commodityDiscountAmount; BigDecimal commodityDiscountAmount;
if (totalAmountOfGoods.compareTo(BigDecimal.ZERO)==0){ if (totalAmountOfGoods.compareTo(BigDecimal.ZERO)==0){ //仅仅用了积分,订单金额是0
commodityDiscountAmount=new BigDecimal(0); commodityDiscountAmount=new BigDecimal(0);
}else { }else {
commodityDiscountAmount = NumberUtil.mul(NumberUtil.div(totalAmountOfGoods, NumberUtil.sub(yxStoreOrder.getTotalPrice(), yxStoreOrder.getPayPostage())), yxStoreOrder.getCouponPrice()); commodityDiscountAmount = NumberUtil.mul(NumberUtil.div(totalAmountOfGoods, NumberUtil.sub(yxStoreOrder.getTotalPrice(), yxStoreOrder.getPayPostage())), yxStoreOrder.getCouponPrice());
@ -318,8 +321,8 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
//操作记录 //操作记录
StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus(); StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus();
storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId()); storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
storeAfterSalesStatus.setChangeType(2); storeAfterSalesStatus.setChangeType(2); //发货
storeAfterSalesStatus.setChangeMessage("售后订单生成"); storeAfterSalesStatus.setChangeMessage("用户退货单已发货生成");
storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now())); storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
storeAfterSalesStatus.setOperator("用户操作"); storeAfterSalesStatus.setOperator("用户操作");
storeAfterSalesStatusMapper.insert(storeAfterSalesStatus); storeAfterSalesStatusMapper.insert(storeAfterSalesStatus);
@ -336,9 +339,9 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
@Override @Override
public Object salesCheck(Long salesId, String orderCode, Integer approvalStatus, String consignee, String phoneNumber, String address) { public Object salesCheck(Long salesId, String orderCode, Integer approvalStatus, String consignee, String phoneNumber, String address) {
StoreAfterSales storeAfterSales = baseMapper.selectOne(Wrappers.<StoreAfterSales>lambdaQuery().eq(StoreAfterSales::getOrderCode, orderCode).eq(StoreAfterSales::getId, salesId)); StoreAfterSales storeAfterSales = baseMapper.selectOne(Wrappers.<StoreAfterSales>lambdaQuery().eq(StoreAfterSales::getOrderCode, orderCode).eq(StoreAfterSales::getId, salesId));
if (approvalStatus == 0) { if (approvalStatus == 0) { //同意申请
storeAfterSales.setState(AfterSalesStatusEnum.STATUS_1.getValue()); storeAfterSales.setState(AfterSalesStatusEnum.STATUS_1.getValue());
if (storeAfterSales.getServiceType() == 1) { if (storeAfterSales.getServiceType() == 1) { //退货退款
if (StringUtils.isEmpty(consignee) || StringUtils.isEmpty(phoneNumber) || StringUtils.isEmpty(address)) { if (StringUtils.isEmpty(consignee) || StringUtils.isEmpty(phoneNumber) || StringUtils.isEmpty(address)) {
throw new ErrorRequestException("请输入收货人信息"); throw new ErrorRequestException("请输入收货人信息");
} }
@ -350,23 +353,30 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus(); StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus();
storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId()); storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
storeAfterSalesStatus.setChangeType(1); storeAfterSalesStatus.setChangeType(1);
storeAfterSalesStatus.setChangeMessage("平台审核成功"); storeAfterSalesStatus.setChangeMessage("平台审核已通过");
storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now())); storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
storeAfterSalesStatus.setOperator("admin"); storeAfterSalesStatus.setOperator("admin");
storeAfterSalesStatusMapper.insert(storeAfterSalesStatus); storeAfterSalesStatusMapper.insert(storeAfterSalesStatus);
} else { if (storeAfterSales.getServiceType() == 0){ //退款
StoreAfterSales sales =this.makeMoney(storeAfterSales.getId(),storeAfterSales.getOrderCode());
BigDecimal bigDecimal = new BigDecimal("100");
int payPrice = bigDecimal.multiply(sales.getRefundAmount()).intValue();
weixinPayService.refundOrder(orderCode, payPrice);
}
} else { //拒绝申请
storeAfterSales.setState(AfterSalesStatusEnum.STATUS_1.getValue()); storeAfterSales.setState(AfterSalesStatusEnum.STATUS_1.getValue());
storeAfterSales.setSalesState(2); storeAfterSales.setSalesState(2);
//操作记录 //操作记录
StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus(); StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus();
storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId()); storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
storeAfterSalesStatus.setChangeType(4); storeAfterSalesStatus.setChangeType(4);
storeAfterSalesStatus.setChangeMessage("平台审核失败"); storeAfterSalesStatus.setChangeMessage("平台审核未通过");
storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now())); storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
storeAfterSalesStatus.setOperator("admin"); storeAfterSalesStatus.setOperator("admin");
storeAfterSalesStatusMapper.insert(storeAfterSalesStatus); storeAfterSalesStatusMapper.insert(storeAfterSalesStatus);
this.makeMoney(storeAfterSales.getId(),storeAfterSales.getOrderCode()); this.makeMoney(storeAfterSales.getId(),storeAfterSales.getOrderCode());
} }
return baseMapper.updateById(storeAfterSales) > 0; return baseMapper.updateById(storeAfterSales) > 0;
} }
@ -376,10 +386,10 @@ public class StoreAfterSalesServiceImpl extends BaseServiceImpl<StoreAfterSalesM
StoreAfterSales storeAfterSales = baseMapper.selectOne(Wrappers.<StoreAfterSales>lambdaQuery().eq(StoreAfterSales::getOrderCode, orderCode).eq(StoreAfterSales::getId, salesId)); StoreAfterSales storeAfterSales = baseMapper.selectOne(Wrappers.<StoreAfterSales>lambdaQuery().eq(StoreAfterSales::getOrderCode, orderCode).eq(StoreAfterSales::getId, salesId));
storeAfterSales.setState(AfterSalesStatusEnum.STATUS_3.getValue()); storeAfterSales.setState(AfterSalesStatusEnum.STATUS_3.getValue());
baseMapper.updateById(storeAfterSales); baseMapper.updateById(storeAfterSales);
//操作记录 //操作记录/
StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus(); StoreAfterSalesStatus storeAfterSalesStatus = new StoreAfterSalesStatus();
storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId()); storeAfterSalesStatus.setStoreAfterSalesId(storeAfterSales.getId());
storeAfterSalesStatus.setChangeType(3); storeAfterSalesStatus.setChangeType(3); /** 操作类型 0售后订单生成 1后台审核成功 2用户发货 3打款 4审核失败 5用户撤销*/
storeAfterSalesStatus.setChangeMessage("平台打款成功"); storeAfterSalesStatus.setChangeMessage("平台打款成功");
storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now())); storeAfterSalesStatus.setChangeTime(Timestamp.valueOf(LocalDateTime.now()));
storeAfterSalesStatus.setOperator("admin"); storeAfterSalesStatus.setOperator("admin");

Loading…
Cancel
Save