update 订单退款明细

This commit is contained in:
2023-09-15 14:00:45 +08:00
parent 923aaa3537
commit cadfa31c98
6 changed files with 298 additions and 250 deletions

View File

@@ -122,6 +122,9 @@ public class OrderService {
@Resource @Resource
private IPileMerchantInfoService pileMerchantInfoService; private IPileMerchantInfoService pileMerchantInfoService;
@Resource
private IMemberWalletLogService memberWalletLogService;
@Resource @Resource
private RedisCache redisCache; private RedisCache redisCache;
@@ -293,69 +296,6 @@ public class OrderService {
log.info("订单号:{}发送停机指令成功", dto.getOrderCode()); log.info("订单号:{}发送停机指令成功", dto.getOrderCode());
} }
/**
* 微信支付回调
*
* @param request
* @param body
* @throws Exception
*/
// public void wechatPayCallback(HttpServletRequest request, WechatPayNotifyParameter body) throws Exception {
// // 获取微信支付成功返回的信息
// Map<String, Object> map = wechatPayService.wechatPayCallbackInfo(request, body);
// String type = (String) map.get("type");
// BigDecimal amount = (BigDecimal) map.get("amount"); // 微信给的amount单位是分
// amount = amount.divide(new BigDecimal("100"), 2, BigDecimal.ROUND_HALF_UP); // 转换为元
//
// String orderCode = (String) map.get("orderCode");
// String memberId = (String) map.get("memberId");
// if (StringUtils.equals(type, ScenarioEnum.ORDER.getValue())) { // 1-订单支付
// // 支付订单成功
// // orderCode = (String) map.get("orderCode");
// PayOrderSuccessCallbackDTO callbackDTO = PayOrderSuccessCallbackDTO.builder()
// .orderCode(orderCode)
// .payAmount(amount)
// .payMode(OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue())
// .acquirer(AcquirerEnum.WECHAT_PAY.getValue())
// .build();
// // 订单支付成功 支付回调
// orderBasicInfoService.payOrderSuccessCallback(callbackDTO);
//
// // 记录订单支付流水
// // OrderPayRecord orderPayRecord = OrderPayRecord.builder()
// // .orderCode(orderCode)
// // .payMode(OrderPayRecordEnum.WECHATPAY_PAYMENT.getValue())
// // .payAmount(amount)
// // .acquirer(AcquirerEnum.WECHAT_PAY.getValue())
// // .createBy(null)
// // .build();
// // orderPayRecordService.batchInsert(Lists.newArrayList(orderPayRecord));
// } else if (StringUtils.equals(type, ScenarioEnum.BALANCE.getValue())) { // 2-充值余额
// // 充值余额成功
// // memberId = (String) map.get("memberId");
// UpdateMemberBalanceDTO dto = new UpdateMemberBalanceDTO();
// dto.setMemberId(memberId);
// dto.setType(MemberWalletEnum.TYPE_IN.getValue());
// dto.setSubType(MemberWalletEnum.SUBTYPE_TOP_UP.getValue());
// dto.setUpdatePrincipalBalance(amount);
// memberBasicInfoService.updateMemberBalance(dto);
// }
//
// // 微信支付订单 记录会员交易流水
// MemberTransactionRecord record = MemberTransactionRecord.builder()
// .orderCode(orderCode)
// .scenarioType(type)
// .memberId(memberId)
// .actionType(ActionTypeEnum.FORWARD.getValue())
// .payMode(PayModeEnum.PAYMENT_OF_WECHATPAY.getValue())
// .paymentInstitutions(PaymentInstitutionsEnum.WECHAT_PAY.getValue())
// .amount(amount) // 单位元
// .outTradeNo(String.valueOf(map.get("out_trade_no")))
// .transactionId(String.valueOf(map.get("transaction_id")))
// .build();
// memberTransactionRecordService.insertSelective(record);
// }
/** /**
* 微信退款 * 微信退款
* *
@@ -458,86 +398,9 @@ public class OrderService {
// 支付流水 // 支付流水
List<OrderDetailInfoVO.PayRecord> payRecords = orderPayRecordService.selectOrderPayInfoList(orderCode); List<OrderDetailInfoVO.PayRecord> payRecords = orderPayRecordService.selectOrderPayInfoList(orderCode);
vo.setPayRecordList(payRecords); vo.setPayRecordList(payRecords);
/*List<OrderPayRecord> orderPayRecordList = orderPayRecordService.getOrderPayRecordList(orderCode);
if (CollectionUtils.isNotEmpty(orderPayRecordList)) {
List<OrderDetailInfoVO.PayRecord> payRecordList = Lists.newArrayList();
for (OrderPayRecord orderPayRecord : orderPayRecordList) {
OrderDetailInfoVO.PayRecord payInfo = new OrderDetailInfoVO.PayRecord();
// 余额支付如果是由本金和赠送一起支付的,合并为一个
BigDecimal bigDecimal = orderPayRecordList.stream()
.map(OrderPayRecord::getPayAmount)
.reduce(BigDecimal.ZERO, BigDecimal::add);
payInfo.setPayAmount(bigDecimal.toString());
payInfo.setPayStatus(orderBasicInfo.getPayStatus());
payInfo.setPayTime(DateUtils.formatDateTime(orderBasicInfo.getPayTime()));
if (orderPayRecord.getRefundAmount() != null) {
payInfo.setRefundAmount(orderPayRecord.getRefundAmount().toString());
}
String payMode = orderPayRecord.getPayMode();
if (StringUtils.equals(payMode, OrderPayRecordEnum.PRINCIPAL_BALANCE_PAYMENT.getValue())
|| StringUtils.equals(payMode, OrderPayRecordEnum.GIFT_BALANCE_PAYMENT.getValue())) {
// 使用余额支付
payInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue());
payInfo.setPayModeDesc(OrderPayModeEnum.PAYMENT_OF_BALANCE.getLabel());
} else if (StringUtils.equals(payMode, OrderPayRecordEnum.WECHATPAY_PAYMENT.getValue())){
// 使用微信支付
payInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue());
payInfo.setPayModeDesc(OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getLabel());
// 判断是微信支付还是汇付支付
MemberTransactionRecord record = memberTransactionRecordService.selectByOrderCode(orderCode, ActionTypeEnum.FORWARD.getValue());
if (record != null) {
String paymentInstitutions = record.getPaymentInstitutions();
if (StringUtils.equals(paymentInstitutions, PaymentInstitutionsEnum.WECHAT_PAY.getValue())) {
// 查微信支付回调记录
WxpayCallbackRecord wxpayCallbackRecord = wxpayCallbackRecordService.selectByOrderCode(orderCode);
if (wxpayCallbackRecord != null) {
payInfo.setOutTradeNo(wxpayCallbackRecord.getOutTradeNo());
payInfo.setTransactionId(wxpayCallbackRecord.getTransactionId());
}
} else if (StringUtils.equals(paymentInstitutions, PaymentInstitutionsEnum.ADAPAY.getValue())) {
// 查询汇付支付回调
AdapayCallbackRecord adapayCallbackRecord = adapayCallbackRecordService.selectByOrderCode(orderCode);
if (adapayCallbackRecord != null) {
payInfo.setOutTradeNo(adapayCallbackRecord.getPaymentId());
payInfo.setTransactionId(adapayCallbackRecord.getOutTransId());
}
}
}
// 查微信支付回调记录
WxpayCallbackRecord wxpayCallbackRecord = wxpayCallbackRecordService.selectByOrderCode(orderCode);
if (wxpayCallbackRecord != null) {
payInfo.setOutTradeNo(wxpayCallbackRecord.getOutTradeNo());
payInfo.setTransactionId(wxpayCallbackRecord.getTransactionId());
}
} else if (StringUtils.equals(payMode, OrderPayRecordEnum.WHITELIST_PAYMENT.getValue())){
// 使用白名单支付
payInfo.setPayMode(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getValue());
payInfo.setPayModeDesc(OrderPayModeEnum.PAYMENT_OF_WHITELIST.getLabel());
}
payRecordList.add(payInfo);
}
vo.setPayRecordList(payRecordList);
}*/
// 查询退款明细 // 查询退款明细
List<OrderDetailInfoVO.OrderRefundInfo> orderRefundInfoList = Lists.newArrayList(); List<OrderDetailInfoVO.OrderRefundInfo> orderRefundInfoList = getOrderRefundInfoList(orderBasicInfo);
List<PaymentReverseResponse> paymentReverseResponses = orderBasicInfoService.queryOrderAdapayRefund(orderBasicInfo);
if (CollectionUtils.isNotEmpty(paymentReverseResponses)) {
OrderDetailInfoVO.OrderRefundInfo refundInfo;
for (PaymentReverseResponse reverseResponse : paymentReverseResponses) {
refundInfo = new OrderDetailInfoVO.OrderRefundInfo();
refundInfo.setReverseId(reverseResponse.getId());
refundInfo.setPaymentId(reverseResponse.getPayment_id());
refundInfo.setReverseAmt(reverseResponse.getReverse_amt());
LocalDateTime createdTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getCreated_time()));
refundInfo.setCreatedTime(DateUtils.formatDateTime(createdTime));
LocalDateTime succeedTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getSucceed_time()));
refundInfo.setSucceedTime(DateUtils.formatDateTime(succeedTime));
orderRefundInfoList.add(refundInfo);
}
}
vo.setOrderRefundInfoList(orderRefundInfoList); vo.setOrderRefundInfoList(orderRefundInfoList);
// 查订单明细 // 查订单明细
@@ -567,6 +430,36 @@ public class OrderService {
return vo; return vo;
} }
/**
* 获取退款明细列表
* @param orderBasicInfo
* @return
*/
private List<OrderDetailInfoVO.OrderRefundInfo> getOrderRefundInfoList(OrderBasicInfo orderBasicInfo) {
List<OrderDetailInfoVO.OrderRefundInfo> orderRefundInfoList = Lists.newArrayList();
if (OrderPayModeEnum.PAYMENT_OF_BALANCE.getValue().equals(orderBasicInfo.getPayMode())) {
// 查新member_wallet_log订单退款记录
// memberWalletLogService.
} else if (OrderPayModeEnum.PAYMENT_OF_WECHATPAY.getValue().equals(orderBasicInfo.getPayMode())) {
List<PaymentReverseResponse> paymentReverseResponses = orderBasicInfoService.queryOrderAdapayRefund(orderBasicInfo);
if (CollectionUtils.isNotEmpty(paymentReverseResponses)) {
OrderDetailInfoVO.OrderRefundInfo refundInfo;
for (PaymentReverseResponse reverseResponse : paymentReverseResponses) {
refundInfo = new OrderDetailInfoVO.OrderRefundInfo();
refundInfo.setReverseId(reverseResponse.getId());
refundInfo.setPaymentId(reverseResponse.getPayment_id());
refundInfo.setReverseAmt(reverseResponse.getReverse_amt());
LocalDateTime createdTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getCreated_time()));
refundInfo.setCreatedTime(DateUtils.formatDateTime(createdTime));
LocalDateTime succeedTime = DateUtils.timestampToDatetime(Long.parseLong(reverseResponse.getSucceed_time()));
refundInfo.setSucceedTime(DateUtils.formatDateTime(succeedTime));
orderRefundInfoList.add(refundInfo);
}
}
}
return orderRefundInfoList;
}
/** /**
* 微信支付退款回调 * 微信支付退款回调
* *

View File

@@ -1,17 +1,18 @@
package com.jsowell.pile.domain; package com.jsowell.pile.domain;
import java.math.BigDecimal;
import java.util.Date;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Builder; import lombok.Builder;
import lombok.Data; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/** /**
* 会员钱包流水表 * 会员钱包流水表
*/ */
@Data @Getter
@Setter
@Builder @Builder
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@@ -47,7 +48,7 @@ public class MemberWalletLog {
private String category; private String category;
/** /**
* 关联订单编号 * 关联订单
*/ */
private String relatedOrderCode; private String relatedOrderCode;
@@ -59,5 +60,5 @@ public class MemberWalletLog {
/** /**
* 创建时间 * 创建时间
*/ */
private LocalDateTime createTime; private Date createTime;
} }

View File

@@ -1,33 +1,67 @@
package com.jsowell.pile.mapper; package com.jsowell.pile.mapper;
import com.jsowell.pile.domain.MemberWalletLog; import com.jsowell.pile.domain.MemberWalletLog;
import com.jsowell.pile.dto.UniAppQueryMemberBalanceDTO; import com.jsowell.pile.dto.UniAppQueryMemberBalanceDTO;
import com.jsowell.pile.vo.uniapp.MemberBalanceVO; import com.jsowell.pile.vo.uniapp.MemberBalanceVO;
import com.jsowell.pile.vo.uniapp.MemberWalletLogVO; import com.jsowell.pile.vo.uniapp.MemberWalletLogVO;
import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List; import java.util.List;
@Repository
public interface MemberWalletLogMapper { public interface MemberWalletLogMapper {
// int deleteByPrimaryKey(Integer id); /**
* delete by primary key
*
* @param id primaryKey
* @return deleteCount
*/
int deleteByPrimaryKey(Integer id);
// int insert(MemberWalletLog record); /**
* insert record to table
*
* @param record the record
* @return insert count
*/
int insert(MemberWalletLog record);
// int insertSelective(MemberWalletLog record); /**
* insert record to table selective
*
* @param record the record
* @return insert count
*/
int insertSelective(MemberWalletLog record);
// MemberWalletLog selectByPrimaryKey(Integer id); /**
* select by primary key
*
* @param id primary key
* @return object by primary key
*/
MemberWalletLog selectByPrimaryKey(Integer id);
// int updateByPrimaryKeySelective(MemberWalletLog record); /**
* update record selective
*
* @param record the updated record
* @return update count
*/
int updateByPrimaryKeySelective(MemberWalletLog record);
// int updateByPrimaryKey(MemberWalletLog record); /**
* update record
*
* @param record the updated record
* @return update count
*/
int updateByPrimaryKey(MemberWalletLog record);
void batchInsert(@Param("list") List<MemberWalletLog> logList); void batchInsert(@Param("list") List<MemberWalletLog> logList);
/** /**
* 查询用户账户余额变动信息 * 查询用户账户余额变动信息
*
* @param memberId 会员id * @param memberId 会员id
* @param type 1-进账2-出账 不传查全部 * @param type 1-进账2-出账 不传查全部
*/ */
@@ -35,6 +69,7 @@ public interface MemberWalletLogMapper {
/** /**
* 小程序查询会员余额明细 * 小程序查询会员余额明细
*
* @param dto * @param dto
* @return * @return
*/ */
@@ -42,6 +77,7 @@ public interface MemberWalletLogMapper {
/** /**
* 批量查询用户可退款金额 * 批量查询用户可退款金额
*
* @param memberIds * @param memberIds
* @return * @return
*/ */

View File

@@ -1,16 +1,18 @@
package com.jsowell.pile.service; package com.jsowell.pile.service;
import com.jsowell.pile.domain.MemberWalletLog;
public interface IMemberWalletLogService { public interface IMemberWalletLogService {
// int deleteByPrimaryKey(Integer id); int deleteByPrimaryKey(Integer id);
//
// int insert(MemberWalletLog record); int insert(MemberWalletLog record);
//
// int insertSelective(MemberWalletLog record); int insertSelective(MemberWalletLog record);
//
// MemberWalletLog selectByPrimaryKey(Integer id); MemberWalletLog selectByPrimaryKey(Integer id);
//
// int updateByPrimaryKeySelective(MemberWalletLog record); int updateByPrimaryKeySelective(MemberWalletLog record);
//
// int updateByPrimaryKey(MemberWalletLog record); int updateByPrimaryKey(MemberWalletLog record);
} }

View File

@@ -13,34 +13,34 @@ public class MemberWalletLogServiceImpl implements IMemberWalletLogService {
@Resource @Resource
private MemberWalletLogMapper memberWalletLogMapper; private MemberWalletLogMapper memberWalletLogMapper;
// @Override @Override
// public int deleteByPrimaryKey(Integer id) { public int deleteByPrimaryKey(Integer id) {
// return memberWalletLogMapper.deleteByPrimaryKey(id); return memberWalletLogMapper.deleteByPrimaryKey(id);
// } }
//
// @Override @Override
// public int insert(MemberWalletLog record) { public int insert(MemberWalletLog record) {
// return memberWalletLogMapper.insert(record); return memberWalletLogMapper.insert(record);
// } }
//
// @Override @Override
// public int insertSelective(MemberWalletLog record) { public int insertSelective(MemberWalletLog record) {
// return memberWalletLogMapper.insertSelective(record); return memberWalletLogMapper.insertSelective(record);
// } }
//
// @Override @Override
// public MemberWalletLog selectByPrimaryKey(Integer id) { public MemberWalletLog selectByPrimaryKey(Integer id) {
// return memberWalletLogMapper.selectByPrimaryKey(id); return memberWalletLogMapper.selectByPrimaryKey(id);
// } }
//
// @Override @Override
// public int updateByPrimaryKeySelective(MemberWalletLog record) { public int updateByPrimaryKeySelective(MemberWalletLog record) {
// return memberWalletLogMapper.updateByPrimaryKeySelective(record); return memberWalletLogMapper.updateByPrimaryKeySelective(record);
// } }
//
// @Override @Override
// public int updateByPrimaryKey(MemberWalletLog record) { public int updateByPrimaryKey(MemberWalletLog record) {
// return memberWalletLogMapper.updateByPrimaryKey(record); return memberWalletLogMapper.updateByPrimaryKey(record);
// } }
} }

View File

@@ -10,20 +10,136 @@
<result column="sub_type" jdbcType="VARCHAR" property="subType" /> <result column="sub_type" jdbcType="VARCHAR" property="subType" />
<result column="amount" jdbcType="DECIMAL" property="amount" /> <result column="amount" jdbcType="DECIMAL" property="amount" />
<result column="category" jdbcType="CHAR" property="category" /> <result column="category" jdbcType="CHAR" property="category" />
<result column="related_order_code" jdbcType="VARCHAR" property="relatedOrderCode" />
<result column="create_by" jdbcType="VARCHAR" property="createBy" /> <result column="create_by" jdbcType="VARCHAR" property="createBy" />
<result column="create_time" jdbcType="TIMESTAMP" property="createTime" /> <result column="create_time" jdbcType="TIMESTAMP" property="createTime" />
</resultMap> </resultMap>
<sql id="Base_Column_List"> <sql id="Base_Column_List">
<!--@mbg.generated--> <!--@mbg.generated-->
id, id, member_id, `type`, sub_type, amount, category, related_order_code, create_by,
member_id,
`type`,
sub_type,
amount,
category,
create_by,
create_time create_time
</sql> </sql>
<select id="selectByPrimaryKey" parameterType="java.lang.Integer" resultMap="BaseResultMap">
<!--@mbg.generated-->
select
<include refid="Base_Column_List" />
from member_wallet_log
where id = #{id,jdbcType=INTEGER}
</select>
<delete id="deleteByPrimaryKey" parameterType="java.lang.Integer">
<!--@mbg.generated-->
delete from member_wallet_log
where id = #{id,jdbcType=INTEGER}
</delete>
<insert id="insert" keyColumn="id" keyProperty="id" parameterType="com.jsowell.pile.domain.MemberWalletLog" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into member_wallet_log (member_id, `type`, sub_type,
amount, category, related_order_code,
create_by, create_time)
values (#{memberId,jdbcType=VARCHAR}, #{type,jdbcType=VARCHAR}, #{subType,jdbcType=VARCHAR},
#{amount,jdbcType=DECIMAL}, #{category,jdbcType=CHAR}, #{relatedOrderCode,jdbcType=VARCHAR},
#{createBy,jdbcType=VARCHAR}, #{createTime,jdbcType=TIMESTAMP})
</insert>
<insert id="insertSelective" keyColumn="id" keyProperty="id" parameterType="com.jsowell.pile.domain.MemberWalletLog" useGeneratedKeys="true">
<!--@mbg.generated-->
insert into member_wallet_log
<trim prefix="(" suffix=")" suffixOverrides=",">
<if test="memberId != null">
member_id,
</if>
<if test="type != null">
`type`,
</if>
<if test="subType != null">
sub_type,
</if>
<if test="amount != null">
amount,
</if>
<if test="category != null">
category,
</if>
<if test="relatedOrderCode != null">
related_order_code,
</if>
<if test="createBy != null">
create_by,
</if>
<if test="createTime != null">
create_time,
</if>
</trim>
<trim prefix="values (" suffix=")" suffixOverrides=",">
<if test="memberId != null">
#{memberId,jdbcType=VARCHAR},
</if>
<if test="type != null">
#{type,jdbcType=VARCHAR},
</if>
<if test="subType != null">
#{subType,jdbcType=VARCHAR},
</if>
<if test="amount != null">
#{amount,jdbcType=DECIMAL},
</if>
<if test="category != null">
#{category,jdbcType=CHAR},
</if>
<if test="relatedOrderCode != null">
#{relatedOrderCode,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
#{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
#{createTime,jdbcType=TIMESTAMP},
</if>
</trim>
</insert>
<update id="updateByPrimaryKeySelective" parameterType="com.jsowell.pile.domain.MemberWalletLog">
<!--@mbg.generated-->
update member_wallet_log
<set>
<if test="memberId != null">
member_id = #{memberId,jdbcType=VARCHAR},
</if>
<if test="type != null">
`type` = #{type,jdbcType=VARCHAR},
</if>
<if test="subType != null">
sub_type = #{subType,jdbcType=VARCHAR},
</if>
<if test="amount != null">
amount = #{amount,jdbcType=DECIMAL},
</if>
<if test="category != null">
category = #{category,jdbcType=CHAR},
</if>
<if test="relatedOrderCode != null">
related_order_code = #{relatedOrderCode,jdbcType=VARCHAR},
</if>
<if test="createBy != null">
create_by = #{createBy,jdbcType=VARCHAR},
</if>
<if test="createTime != null">
create_time = #{createTime,jdbcType=TIMESTAMP},
</if>
</set>
where id = #{id,jdbcType=INTEGER}
</update>
<update id="updateByPrimaryKey" parameterType="com.jsowell.pile.domain.MemberWalletLog">
<!--@mbg.generated-->
update member_wallet_log
set member_id = #{memberId,jdbcType=VARCHAR},
`type` = #{type,jdbcType=VARCHAR},
sub_type = #{subType,jdbcType=VARCHAR},
amount = #{amount,jdbcType=DECIMAL},
category = #{category,jdbcType=CHAR},
related_order_code = #{relatedOrderCode,jdbcType=VARCHAR},
create_by = #{createBy,jdbcType=VARCHAR},
create_time = #{createTime,jdbcType=TIMESTAMP}
where id = #{id,jdbcType=INTEGER}
</update>
<insert id="batchInsert"> <insert id="batchInsert">
insert into member_wallet_log (member_id, `type`, insert into member_wallet_log (member_id, `type`,
@@ -81,7 +197,7 @@
where where
<if test="list != null and list.size() != 0"> <if test="list != null and list.size() != 0">
member_id in member_id in
<foreach collection="list" item="memberId" open="(" separator="," close=")"> <foreach close=")" collection="list" item="memberId" open="(" separator=",">
#{memberId,jdbcType=VARCHAR} #{memberId,jdbcType=VARCHAR}
</foreach> </foreach>
</if> </if>