记得上下班打卡 | git大法好,push需谨慎

Commit d96ecf79 authored by 张国柄's avatar 张国柄

会员退款申请API逻辑完善;

parent 210cde2e
...@@ -23,7 +23,7 @@ public class AdamMemberOrderRefundParam implements Serializable { ...@@ -23,7 +23,7 @@ public class AdamMemberOrderRefundParam implements Serializable {
private BigDecimal refundAmt; private BigDecimal refundAmt;
@NotNull(message = "请选择是否能继续购买会员") @NotNull(message = "请选择是否能继续购买会员")
@ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]") @ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]")
private Integer buyMark; private Integer renewable;
@NotBlank(message = "请输入退款原因") @NotBlank(message = "请输入退款原因")
@ApiModelProperty(required = true, value = "退款原因") @ApiModelProperty(required = true, value = "退款原因")
private String reason; private String reason;
......
...@@ -74,12 +74,15 @@ public class AdamMemberOrderAdminController extends BaseController { ...@@ -74,12 +74,15 @@ public class AdamMemberOrderAdminController extends BaseController {
AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper); AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper);
if (null == memberOrder) { if (null == memberOrder) {
return this.error("订单不存在"); return AjaxResult.warn("订单不存在");
}
if (memberOrder.getState() != 1) {
return AjaxResult.warn(String.format("该订单[%s]不支持退款,请核实订单状态", parameter.getOrderNo()));
} }
if (memberOrder.getPricePaid().compareTo(parameter.getRefundAmt()) < 0) { if (memberOrder.getPricePaid().compareTo(parameter.getRefundAmt()) < 0) {
return this.error("退款金额超出订单实际支付金额"); return AjaxResult.warn("退款金额超出订单实际支付金额");
} }
return this.toAjax(adamMemberOrderAdminService.refundProcessing(parameter, memberOrder)); return adamMemberOrderAdminService.refundProcessing(parameter, memberOrder);
} }
} }
package com.liquidnet.client.admin.zhengzai.adam.service; package com.liquidnet.client.admin.zhengzai.adam.service;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.service.adam.dto.MemberOrderDto; import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam; import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq; import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
...@@ -24,5 +25,5 @@ public interface IAdamMemberOrderAdminService extends IService<AdamMemberOrder> ...@@ -24,5 +25,5 @@ public interface IAdamMemberOrderAdminService extends IService<AdamMemberOrder>
MemberOrderDetailAdminVo getMemberOrderDetail(String orderNo); MemberOrderDetailAdminVo getMemberOrderDetail(String orderNo);
boolean refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder); AjaxResult refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder);
} }
...@@ -3,9 +3,16 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl; ...@@ -3,9 +3,16 @@ package com.liquidnet.client.admin.zhengzai.adam.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.fasterxml.jackson.databind.JsonNode;
import com.liquidnet.client.admin.common.core.domain.AjaxResult;
import com.liquidnet.client.admin.common.utils.ShiroUtils;
import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberOrderAdminService; import com.liquidnet.client.admin.zhengzai.adam.service.IAdamMemberOrderAdminService;
import com.liquidnet.common.cache.redis.util.RedisUtil;
import com.liquidnet.commons.lang.util.BeanUtil; import com.liquidnet.commons.lang.util.BeanUtil;
import com.liquidnet.commons.lang.util.HttpUtil;
import com.liquidnet.commons.lang.util.IDGenerator; import com.liquidnet.commons.lang.util.IDGenerator;
import com.liquidnet.commons.lang.util.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.MemberOrderDto; import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam; import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq; import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
...@@ -16,6 +23,7 @@ import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo; ...@@ -16,6 +23,7 @@ import com.liquidnet.service.adam.dto.vo.AdamUserMemberVo;
import com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo; import com.liquidnet.service.adam.dto.vo.admin.MemberOrderDetailAdminVo;
import com.liquidnet.service.adam.entity.*; import com.liquidnet.service.adam.entity.*;
import com.liquidnet.service.adam.mapper.*; import com.liquidnet.service.adam.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value; import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -24,9 +32,12 @@ import org.springframework.util.LinkedMultiValueMap; ...@@ -24,9 +32,12 @@ import org.springframework.util.LinkedMultiValueMap;
import java.beans.IntrospectionException; import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.stream.IntStream;
/** /**
* @author AnJiabin <anjiabin@zhengzai.tv> * @author AnJiabin <anjiabin@zhengzai.tv>
...@@ -37,6 +48,7 @@ import java.util.Map; ...@@ -37,6 +48,7 @@ import java.util.Map;
* @Copyright: LightNet @ Copyright (c) 2021 * @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/6/6 16:25 * @date 2021/6/6 16:25
*/ */
@Slf4j
@Service @Service
public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrderMapper, AdamMemberOrder> implements IAdamMemberOrderAdminService { public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrderMapper, AdamMemberOrder> implements IAdamMemberOrderAdminService {
@Autowired @Autowired
...@@ -49,6 +61,11 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -49,6 +61,11 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
private AdamUserMapper adamUserMapper; private AdamUserMapper adamUserMapper;
@Autowired @Autowired
private AdamMemberOrderExtMapper adamMemberOrderExtMapper; private AdamMemberOrderExtMapper adamMemberOrderExtMapper;
@Autowired
private AdamMemberRefundMapper adamMemberRefundMapper;
@Autowired
private RedisUtil redisUtil;
@Value("${liquidnet.url-refund.apply}") @Value("${liquidnet.url-refund.apply}")
private String applyUrl; private String applyUrl;
...@@ -111,7 +128,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -111,7 +128,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
@Override @Override
@Transactional @Transactional
public boolean refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) { public AjaxResult refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) {
LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>(); LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>();
linkedMultiValueMap.add("code", memberOrder.getPayNo()); linkedMultiValueMap.add("code", memberOrder.getPayNo());
...@@ -124,10 +141,48 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder ...@@ -124,10 +141,48 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
linkedMultiValueMap.add("priceTotal", String.valueOf(memberOrder.getPricePaid())); linkedMultiValueMap.add("priceTotal", String.valueOf(memberOrder.getPricePaid()));
linkedMultiValueMap.add("reason", param.getReason()); linkedMultiValueMap.add("reason", param.getReason());
// String postResult = HttpUtil.post(applyUrl, linkedMultiValueMap); log.info("会员退款:支付中心请求参数:{}", linkedMultiValueMap);
String postResult = HttpUtil.post(applyUrl, linkedMultiValueMap);
log.info("会员退款:支付中心返回数据:{}", postResult);
JsonNode postResultJNode = JsonUtils.fromJson(postResult, JsonNode.class);
if (!postResultJNode.get("success").asBoolean()) {
return AjaxResult.warn("会员退款请求支付中心失败");
}
// 退款请求成功,修改订单状态,同步REDIS
LocalDateTime now = LocalDateTime.now();
AdamMemberRefund memberRefund = new AdamMemberRefund();
memberRefund.setRefundNo(IDGenerator.nextTimeId2().concat("VR"));
memberRefund.setOrderNo(memberOrder.getOrderNo());
memberRefund.setRefundPrice(param.getRefundAmt());
memberRefund.setRefundReason(param.getReason());
memberRefund.setRenewable(param.getRenewable());
memberRefund.setRefundState(0);
memberRefund.setRefundNo(postResultJNode.get("refundCode").asText());
memberRefund.setOperator(ShiroUtils.getLoginName());
memberRefund.setCreatedAt(now);
adamMemberRefundMapper.insert(memberRefund);
AdamMemberOrder updateInfoMemberOrder = new AdamMemberOrder();
updateInfoMemberOrder.setMid(memberOrder.getMid());
updateInfoMemberOrder.setState(4);
updateInfoMemberOrder.setUpdatedAt(now);
adamMemberOrderMapper.updateById(updateInfoMemberOrder);
String moKey = AdamRedisConst.INFO_MEMBER_ORDER + memberOrder.getUid();
ArrayList<AdamMemberOrderVo> vos = (ArrayList<AdamMemberOrderVo>) redisUtil.get(moKey);
int idx = IntStream.range(0, vos.size())
.filter(i -> vos.get(i).getOrderNo().equals(memberOrder.getOrderNo()))
.findFirst().orElse(-1);
AdamMemberOrderVo vo = vos.get(idx);
vo.setState(4);
vo.setUpdatedAt(now);
vos.set(idx, vo);
redisUtil.set(moKey, vos);
return true; return AjaxResult.success();
} }
} }
...@@ -55,7 +55,7 @@ public class AdamMemberOrder implements Serializable { ...@@ -55,7 +55,7 @@ public class AdamMemberOrder implements Serializable {
*/ */
private Integer days; private Integer days;
/** /**
* 订单状态:0未支付 1已支付 2已超时 5已退款 * 订单状态:0-未支付,1-已支付,2-已关闭,3-超时付,4-退款中,5-已退款
*/ */
private Integer state; private Integer state;
/** /**
......
package com.liquidnet.service.adam.entity;
import java.math.BigDecimal;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import java.time.LocalDateTime;
import java.io.Serializable;
import lombok.Data;
import lombok.EqualsAndHashCode;
/**
* <p>
* 会员退款
* </p>
*
* @author liquidnet
* @since 2021-09-07
*/
@Data
@EqualsAndHashCode(callSuper = false)
public class AdamMemberRefund implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "mid", type = IdType.AUTO)
private Long mid;
/**
* 退款请求编号
*/
private String refundNo;
/**
* 对应支付中心order_code
*/
private String orderNo;
/**
* 退款金额
*/
private BigDecimal refundPrice;
/**
* 退款描述
*/
private String refundReason;
/**
* 继续购买[1-可以|2-不可]
*/
private Integer renewable;
/**
* 退款状态[0-发起退款|1-已退款|2-关闭|3-退款失败|9-退款中]
*/
private Integer refundState;
/**
* 支付中心退款编号
*/
private String repayNo;
/**
* 支付中心退款描述
*/
private String repayReason;
/**
* 操作人
*/
private String operator;
private LocalDateTime createdAt;
private LocalDateTime updatedAt;
/**
* 完成时间
*/
private LocalDateTime completeAt;
private String comment;
}
package com.liquidnet.service.adam.mapper;
import com.liquidnet.service.adam.entity.AdamMemberRefund;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 会员退款 Mapper 接口
* </p>
*
* @author liquidnet
* @since 2021-09-07
*/
public interface AdamMemberRefundMapper extends BaseMapper<AdamMemberRefund> {
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.liquidnet.service.adam.mapper.AdamMemberRefundMapper">
</mapper>
...@@ -367,7 +367,6 @@ alter table adam_member_order add payment_id varchar(64) null comment '支付中 ...@@ -367,7 +367,6 @@ alter table adam_member_order add payment_id varchar(64) null comment '支付中
alter table adam_member_order add area varchar(100) null comment '地区' after birthday; alter table adam_member_order add area varchar(100) null comment '地区' after birthday;
# 会员退款 # 会员退款
drop table if exists adam_member_refund; drop table if exists adam_member_refund;
create table adam_member_refund create table adam_member_refund
...@@ -379,7 +378,7 @@ create table adam_member_refund ...@@ -379,7 +378,7 @@ create table adam_member_refund
refund_price decimal(8, 2) comment '退款金额', refund_price decimal(8, 2) comment '退款金额',
refund_reason varchar(200) comment '退款描述', refund_reason varchar(200) comment '退款描述',
renewable tinyint comment '继续购买[1-可以|2-不可]', renewable tinyint comment '继续购买[1-可以|2-不可]',
refund_state tinyint comment '退款状态[0-发起退款|1-已退款|2-取消退款|3-退款失败|9-退款中]', refund_state tinyint comment '退款状态[0-发起退款|1-已退款|2-关闭|3-退款失败|9-退款中]',
# payment_type varchar(30) comment '支付渠道(即UPPER(CONCAT(device_from,pay_type)))', # payment_type varchar(30) comment '支付渠道(即UPPER(CONCAT(device_from,pay_type)))',
repay_no varchar(64) comment '支付中心退款编号', repay_no varchar(64) comment '支付中心退款编号',
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment