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

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

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

parent 210cde2e
......@@ -23,7 +23,7 @@ public class AdamMemberOrderRefundParam implements Serializable {
private BigDecimal refundAmt;
@NotNull(message = "请选择是否能继续购买会员")
@ApiModelProperty(required = true, value = "是否能继续购买会员[1-是|2-否]")
private Integer buyMark;
private Integer renewable;
@NotBlank(message = "请输入退款原因")
@ApiModelProperty(required = true, value = "退款原因")
private String reason;
......
......@@ -74,12 +74,15 @@ public class AdamMemberOrderAdminController extends BaseController {
AdamMemberOrder memberOrder = adamMemberOrderAdminService.getOne(queryWrapper);
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) {
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;
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.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
......@@ -24,5 +25,5 @@ public interface IAdamMemberOrderAdminService extends IService<AdamMemberOrder>
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;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
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.common.cache.redis.util.RedisUtil;
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.JsonUtils;
import com.liquidnet.service.adam.constant.AdamRedisConst;
import com.liquidnet.service.adam.dto.MemberOrderDto;
import com.liquidnet.service.adam.dto.admin.AdamMemberOrderRefundParam;
import com.liquidnet.service.adam.dto.admin.MemberOrderListReq;
......@@ -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.entity.*;
import com.liquidnet.service.adam.mapper.*;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Service;
......@@ -24,9 +32,12 @@ import org.springframework.util.LinkedMultiValueMap;
import java.beans.IntrospectionException;
import java.lang.reflect.InvocationTargetException;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.IntStream;
/**
* @author AnJiabin <anjiabin@zhengzai.tv>
......@@ -37,6 +48,7 @@ import java.util.Map;
* @Copyright: LightNet @ Copyright (c) 2021
* @date 2021/6/6 16:25
*/
@Slf4j
@Service
public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrderMapper, AdamMemberOrder> implements IAdamMemberOrderAdminService {
@Autowired
......@@ -49,6 +61,11 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
private AdamUserMapper adamUserMapper;
@Autowired
private AdamMemberOrderExtMapper adamMemberOrderExtMapper;
@Autowired
private AdamMemberRefundMapper adamMemberRefundMapper;
@Autowired
private RedisUtil redisUtil;
@Value("${liquidnet.url-refund.apply}")
private String applyUrl;
......@@ -111,7 +128,7 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
@Override
@Transactional
public boolean refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) {
public AjaxResult refundProcessing(AdamMemberOrderRefundParam param, AdamMemberOrder memberOrder) {
LinkedMultiValueMap<String, String> linkedMultiValueMap = new LinkedMultiValueMap<>();
linkedMultiValueMap.add("code", memberOrder.getPayNo());
......@@ -124,10 +141,48 @@ public class AdamMemberOrderAdminServiceImpl extends ServiceImpl<AdamMemberOrder
linkedMultiValueMap.add("priceTotal", String.valueOf(memberOrder.getPricePaid()));
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 {
*/
private Integer days;
/**
* 订单状态:0未支付 1已支付 2已超时 5已退款
* 订单状态:0-未支付,1-已支付,2-已关闭,3-超时付,4-退款中,5-已退款
*/
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 '支付中
alter table adam_member_order add area varchar(100) null comment '地区' after birthday;
# 会员退款
drop table if exists adam_member_refund;
create table adam_member_refund
......@@ -379,7 +378,7 @@ create table adam_member_refund
refund_price decimal(8, 2) comment '退款金额',
refund_reason varchar(200) comment '退款描述',
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)))',
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