Merge remote-tracking branch 'origin/master'

This commit is contained in:
longbinbin
2024-12-06 15:30:05 +08:00
10 changed files with 100 additions and 13 deletions

View File

@ -11,6 +11,7 @@ import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
import java.math.BigDecimal;
import java.util.List; import java.util.List;
/** /**
@ -47,7 +48,7 @@ public class AppGoodsController {
@ApiOperation("查询价格") @ApiOperation("查询价格")
@PostMapping("/queryPrice") @PostMapping("/queryPrice")
public ApiResponse queryPrice(@RequestBody GoodsPriceQueryReq queryPriceData) { public ApiResponse<BigDecimal> queryPrice(@RequestBody GoodsPriceQueryReq queryPriceData) {
return goodsService.queryPrice(queryPriceData); return goodsService.queryPrice(queryPriceData);
} }
} }

View File

@ -36,8 +36,8 @@ public class AppMemberController {
@ApiOperation("登录") @ApiOperation("登录")
@PostMapping("/login") @PostMapping("/login")
@IgnoreToken @IgnoreToken
public ApiResponse<?> login(@RequestParam(value = "code", required = false) String code, public ApiResponse<?> login(@RequestParam(value = "code") String code,
@RequestParam(value = "userInfoDTO", required = false) WeChatUserInfoDTO userInfoDTO) throws Exception { @RequestParam(value = "userInfoDTO") WeChatUserInfoDTO userInfoDTO) throws Exception {
return memberService.login(code, userInfoDTO); return memberService.login(code, userInfoDTO);
} }

View File

@ -2,6 +2,7 @@ package com.ycwl.basic.controller.mobile;
import com.ycwl.basic.annotation.IgnoreToken; import com.ycwl.basic.annotation.IgnoreToken;
import com.ycwl.basic.constant.BaseContextHandler; import com.ycwl.basic.constant.BaseContextHandler;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
@ -29,10 +30,11 @@ public class AppOrderController {
@PostMapping("/page") @PostMapping("/page")
@IgnoreToken @IgnoreToken
public ApiResponse pageQuery(@RequestBody OrderReqQuery orderReqQuery) { public ApiResponse pageQuery(@RequestBody OrderReqQuery orderReqQuery) {
//TODO 添加用户openid查询条件,仅查询当前用户自己的订单 // TODO 添加用户openid查询条件,仅查询当前用户自己的订单
return orderService.appPageQuery(orderReqQuery); return orderService.appPageQuery(orderReqQuery);
} }
@ApiOperation("用户端订单详情查询") @ApiOperation("用户端订单详情查询")
@GetMapping("getOrderDetails/{id}") @GetMapping("getOrderDetails/{id}")
@IgnoreToken @IgnoreToken
@ -43,7 +45,7 @@ public class AppOrderController {
@ApiOperation("用户端订单新增") @ApiOperation("用户端订单新增")
@PostMapping("/addOrder") @PostMapping("/addOrder")
public ApiResponse<WxPayRespVO> addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) throws Exception { public ApiResponse<WxPayRespVO> addOrder(@RequestBody OrderAddOrUpdateReq orderAddReq) throws Exception {
return orderService.add(orderAddReq); return orderService.add(orderAddReq);
} }
@ -55,4 +57,10 @@ public class AppOrderController {
return orderService.getOrderCountByUserId(userId); return orderService.getOrderCountByUserId(userId);
} }
@ApiOperation(value = "发起退款", notes = "发起退款")
@PostMapping("/refundOrder")
public ApiResponse<?> refundOrder(@RequestBody RefundOrderReq refundOrderReq) {
return orderService.refundOrder(refundOrderReq);
}
} }

View File

@ -1,6 +1,7 @@
package com.ycwl.basic.controller.pc; package com.ycwl.basic.controller.pc;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
import com.ycwl.basic.model.pc.order.resp.OrderRespVO; import com.ycwl.basic.model.pc.order.resp.OrderRespVO;
import com.ycwl.basic.service.pc.OrderService; import com.ycwl.basic.service.pc.OrderService;
@ -24,6 +25,13 @@ public class OrderController {
@Autowired @Autowired
private OrderService orderService; private OrderService orderService;
@ApiOperation(value = "审核退款", notes = "审核退款")
@PostMapping("/auditRefundOrder")
public ApiResponse<?> auditRefundOrder(@RequestBody RefundOrderReq refundOrderReq) {
return orderService.auditRefundOrder(refundOrderReq);
}
@ApiOperation("分页查询订单") @ApiOperation("分页查询订单")
@PostMapping("page") @PostMapping("page")
public ApiResponse<PageInfo<OrderRespVO>> pageQuery(@RequestBody OrderReqQuery query) { public ApiResponse<PageInfo<OrderRespVO>> pageQuery(@RequestBody OrderReqQuery query) {

View File

@ -15,6 +15,7 @@ import lombok.NoArgsConstructor;
public enum OrderStateEnum { public enum OrderStateEnum {
NOT_PRESENTED(0, "未提出",1), NOT_PRESENTED(0, "未提出",1),
PASSED(1, "已通过",1), PASSED(1, "已通过",1),
TO_BE_REVIEWED(2, "待审核",1),
UNPAID(0, "未支付",2), UNPAID(0, "未支付",2),
PAID(1, "已支付",2), PAID(1, "已支付",2),
REFUNDED(2, "已退款",2), REFUNDED(2, "已退款",2),

View File

@ -0,0 +1,21 @@
package com.ycwl.basic.model.mobile.order;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @Author: songmingsong
* @CreateTime: 2024-12-06
* @Description: 退款
* @Version: 1.0
*/
@Data
@ApiModel("退款请求参数")
public class RefundOrderReq {
@ApiModelProperty("订单ID")
private Long orderId;
@ApiModelProperty("理由")
private String refundReason;
}

View File

@ -18,7 +18,10 @@ public class WechatMessageSubscribeForm {
* 用户的openID * 用户的openID
*/ */
private String openId; private String openId;
/**
* 消息模板
*/
private String templateId;
/** /**
* 默认跳到小程序首页 * 默认跳到小程序首页
*/ */

View File

@ -43,7 +43,7 @@ public class WxNotifyServiceImpl implements WxNotifyService {
/** /**
* 缓存accessToken * 缓存accessToken
*/ */
private Map<String, AccessTokenCacheEntity> cacheAccessTokenMap = new ConcurrentHashMap<>(); private final Map<String, AccessTokenCacheEntity> cacheAccessTokenMap = new ConcurrentHashMap<>();
@Override @Override
public String getAccessToken() { public String getAccessToken() {
@ -87,7 +87,7 @@ public class WxNotifyServiceImpl implements WxNotifyService {
// 拼接推送的模板 // 拼接推送的模板
WechatMssVO wxMssVO = new WechatMssVO(); WechatMssVO wxMssVO = new WechatMssVO();
wxMssVO.setTouser(info.getOpenId()); // 用户的openId wxMssVO.setTouser(info.getOpenId()); // 用户的openId
wxMssVO.setTemplate_id(wechatConfig.getTemplateId()); // 订阅消息模板id wxMssVO.setTemplate_id(info.getTemplateId()); // 订阅消息模板id
wxMssVO.setLang(info.getLang()); // 语言类型 wxMssVO.setLang(info.getLang()); // 语言类型
wxMssVO.setMiniprogram_state(info.getMiniprogram_state()); // 跳转小程序类型 wxMssVO.setMiniprogram_state(info.getMiniprogram_state()); // 跳转小程序类型
wxMssVO.setPage(info.getPage()); wxMssVO.setPage(info.getPage());

View File

@ -4,12 +4,15 @@ import cn.hutool.core.bean.BeanUtil;
import com.github.pagehelper.PageHelper; import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.constant.NumberConstant; import com.ycwl.basic.constant.NumberConstant;
import com.ycwl.basic.enums.BizCodeEnum;
import com.ycwl.basic.enums.OrderStateEnum; import com.ycwl.basic.enums.OrderStateEnum;
import com.ycwl.basic.enums.SourceTypeNameEnum; import com.ycwl.basic.enums.SourceTypeNameEnum;
import com.ycwl.basic.exception.AppException;
import com.ycwl.basic.mapper.pc.OrderMapper; import com.ycwl.basic.mapper.pc.OrderMapper;
import com.ycwl.basic.mapper.pc.SourceMapper; import com.ycwl.basic.mapper.pc.SourceMapper;
import com.ycwl.basic.mapper.pc.VideoMapper; import com.ycwl.basic.mapper.pc.VideoMapper;
import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq; import com.ycwl.basic.model.mobile.goods.GoodsPriceQueryReq;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.member.resp.MemberRespVO; import com.ycwl.basic.model.pc.member.resp.MemberRespVO;
import com.ycwl.basic.model.pc.order.entity.OrderItemEntity; import com.ycwl.basic.model.pc.order.entity.OrderItemEntity;
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
@ -113,7 +116,7 @@ public class OrderServiceImpl implements OrderService {
goodsName = videoRespVO.getTemplateName(); goodsName = videoRespVO.getTemplateName();
} else if (goodsType == NumberConstant.TWO) { } else if (goodsType == NumberConstant.TWO) {
SourceRespVO sourceRespVO = sourceMapper.getById(goodsId); SourceRespVO sourceRespVO = sourceMapper.getById(goodsId);
goodsName= SourceTypeNameEnum.getRemark( sourceRespVO.getType()); goodsName = SourceTypeNameEnum.getRemark(sourceRespVO.getType());
} }
/* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/ /* 成片的时候子订单只会有一个,素材的时候 子订单多个且价格与子订单数量无关,只与子订单商品对应景区定义的价格相同*/
@ -129,7 +132,7 @@ public class OrderServiceImpl implements OrderService {
.setOrderSn(orderId) .setOrderSn(orderId)
.setTotalPrice(BigDecimalUtil.convertToCents(price)) .setTotalPrice(BigDecimalUtil.convertToCents(price))
.setGoodsName(goodsName); .setGoodsName(goodsName);
return ApiResponse.success(wxPayService.createOrder(wxPayOrderReqVO)); return ApiResponse.success(wxPayService.createOrder(wxPayOrderReqVO));
} }
} }
@ -148,14 +151,16 @@ public class OrderServiceImpl implements OrderService {
* @param orderSn 订单编号也就是订单的ID * @param orderSn 订单编号也就是订单的ID
*/ */
@Override @Override
public void updateOrderState(Long orderSn, OrderStateEnum orderStateEnum, String refundReason) { public void updateOrderState(Long orderSn, OrderStateEnum orderStateEnum, String reason) {
OrderAddOrUpdateReq orderAddOrUpdateReq = new OrderAddOrUpdateReq(); OrderAddOrUpdateReq orderAddOrUpdateReq = new OrderAddOrUpdateReq();
orderAddOrUpdateReq.setId(orderSn); orderAddOrUpdateReq.setId(orderSn);
if (orderStateEnum.getType() == NumberConstant.ONE) { if (orderStateEnum.getType() == NumberConstant.ONE) {
orderAddOrUpdateReq.setRefundStatus(orderStateEnum.getState()); orderAddOrUpdateReq.setRefundStatus(orderStateEnum.getState());
orderAddOrUpdateReq.setRefundAt(new Date()); orderAddOrUpdateReq.setRefundAt(new Date());
if (Objects.nonNull(refundReason)) { if (orderStateEnum.getState() == OrderStateEnum.PASSED.getState()) {
orderAddOrUpdateReq.setRefundReason(refundReason); orderAddOrUpdateReq.setRemark(reason);
} else if (Objects.nonNull(reason)) {
orderAddOrUpdateReq.setRefundReason(reason);
} }
} else if (orderStateEnum.getType() == NumberConstant.TWO) { } else if (orderStateEnum.getType() == NumberConstant.TWO) {
int state = orderStateEnum.getState(); int state = orderStateEnum.getState();
@ -203,4 +208,24 @@ public class OrderServiceImpl implements OrderService {
return ApiResponse.success(orderAppRespVO); return ApiResponse.success(orderAppRespVO);
} }
@Override
public ApiResponse<?> refundOrder(RefundOrderReq refundOrderReq) {
this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.TO_BE_REVIEWED, refundOrderReq.getRefundReason());
return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK);
}
@Override
public ApiResponse<?> auditRefundOrder(RefundOrderReq refundOrderReq) {
this.updateOrderState(refundOrderReq.getOrderId(), OrderStateEnum.PASSED, refundOrderReq.getRefundReason());
// 调用微信发起退款
new Thread(() -> {
try {
wxPayService.refundOrder(refundOrderReq.getOrderId().toString());
} catch (Exception e) {
throw new AppException(BizCodeEnum.ADVANCE_PAYMENT_REFUND_FAILED,e.getMessage());
}
}).start();
return ApiResponse.buildResult(BizCodeEnum.REQUEST_OK);
}
} }

View File

@ -2,6 +2,7 @@ package com.ycwl.basic.service.pc;
import com.github.pagehelper.PageInfo; import com.github.pagehelper.PageInfo;
import com.ycwl.basic.enums.OrderStateEnum; import com.ycwl.basic.enums.OrderStateEnum;
import com.ycwl.basic.model.mobile.order.RefundOrderReq;
import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq; import com.ycwl.basic.model.pc.order.req.OrderAddOrUpdateReq;
import com.ycwl.basic.model.pc.order.req.OrderReqQuery; import com.ycwl.basic.model.pc.order.req.OrderReqQuery;
import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO; import com.ycwl.basic.model.pc.order.resp.OrderAppRespVO;
@ -17,9 +18,13 @@ import java.util.List;
*/ */
public interface OrderService { public interface OrderService {
ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query); ApiResponse<PageInfo<OrderRespVO>> pageQuery(OrderReqQuery query);
ApiResponse<List<OrderRespVO>> list(OrderReqQuery query); ApiResponse<List<OrderRespVO>> list(OrderReqQuery query);
ApiResponse<OrderRespVO> detail(Long orderId); ApiResponse<OrderRespVO> detail(Long orderId);
ApiResponse<WxPayRespVO> add(OrderAddOrUpdateReq query) throws Exception; ApiResponse<WxPayRespVO> add(OrderAddOrUpdateReq query) throws Exception;
ApiResponse<Integer> update(OrderAddOrUpdateReq query); ApiResponse<Integer> update(OrderAddOrUpdateReq query);
@ -32,4 +37,19 @@ public interface OrderService {
ApiResponse<OrderAppRespVO> appDetail(Long id); ApiResponse<OrderAppRespVO> appDetail(Long id);
/**
* 订单退款
*
* @param refundOrderReq
* @return
*/
ApiResponse<?> refundOrder(RefundOrderReq refundOrderReq);
/**
* 审核退款
*
* @param refundOrderReq
* @return
*/
ApiResponse<?> auditRefundOrder(RefundOrderReq refundOrderReq);
} }