This commit is contained in:
donqi 2022-07-22 22:29:15 +08:00
commit ce09120724
14 changed files with 317 additions and 45 deletions

View File

@ -23,7 +23,6 @@ import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderGoodsService;
import com.ghy.order.service.OrderMasterService;
import com.ghy.payment.domain.FinancialDetail;
import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.service.FinancialDetailService;
import com.ghy.system.domain.SysArea;
import com.ghy.system.service.ISysAreaService;
@ -80,7 +79,7 @@ public class OrderDetailController extends BaseController {
return prefix;
}
// @RequiresPermissions("order:detail:list")
// @RequiresPermissions("order:detail:list")
@PostMapping("/list")
@ResponseBody
public TableDataInfo list(OrderDetail orderDetail) {
@ -91,7 +90,7 @@ public class OrderDetailController extends BaseController {
@PostMapping("/app/detail")
@ResponseBody
public AjaxResult appDetail(@RequestBody OrderDetail request){
public AjaxResult appDetail(@RequestBody OrderDetail request) {
try {
// 子单信息
OrderDetail detail = orderDetailService.selectById(request.getId());
@ -123,7 +122,7 @@ public class OrderDetailController extends BaseController {
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
for(OrderGoods orderGoods : orderStandardList){
for (OrderGoods orderGoods : orderStandardList) {
OrderStandard orderStandard = new OrderStandard();
orderStandard.setStandardName(orderGoods.getGoodsName());
orderStandard.setStandardNum(orderGoods.getGoodsNum());
@ -161,7 +160,7 @@ public class OrderDetailController extends BaseController {
orderListResponse.setCustomerRemark(orderMaster.getRemark());
return AjaxResult.success(orderListResponse);
}catch (Exception e){
} catch (Exception e) {
e.printStackTrace();
logger.error(ExceptionUtil.getExceptionMessage(e));
return AjaxResult.error();
@ -170,12 +169,12 @@ public class OrderDetailController extends BaseController {
@PostMapping("/app/list")
@ResponseBody
public TableDataInfo appList(@RequestBody OrderDetail orderDetail){
public TableDataInfo appList(@RequestBody OrderDetail orderDetail) {
startPage();
List<OrderListResponse> orderListResponses = new ArrayList<>();
List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetail);
list.forEach(detail->{
list.forEach(detail -> {
// 主单信息
OrderMaster orderMaster = orderMasterService.selectById(detail.getOrderMasterId());
@ -205,7 +204,7 @@ public class OrderDetailController extends BaseController {
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
for(OrderGoods orderGoods : orderStandardList){
for (OrderGoods orderGoods : orderStandardList) {
OrderStandard orderStandard = new OrderStandard();
orderStandard.setStandardName(orderGoods.getGoodsName());
orderStandard.setStandardNum(orderGoods.getGoodsNum());
@ -313,4 +312,29 @@ public class OrderDetailController extends BaseController {
public String checkOrderDetailCodeUnique(OrderDetail orderDetail) {
return orderDetailService.checkOrderDetailCodeUnique(orderDetail);
}
/**
* 消费者申请取消子订单
*
* @param orderDetailId 子订单ID
*/
@PostMapping("/cancel")
@ResponseBody
public AjaxResult cancel(Long orderDetailId) {
orderDetailService.cancel(orderDetailId);
return AjaxResult.success();
}
/**
* 师傅审核取消子订单申请
*
* @param orderDetailId 子订单ID
* @param agree 0=不同意 1=同意
*/
@PostMapping("/cancel/agree")
@ResponseBody
public AjaxResult cancelAgree(Long orderDetailId, Integer agree) {
orderDetailService.cancelAgree(orderDetailId, agree);
return AjaxResult.success();
}
}

View File

@ -8,7 +8,8 @@ public enum PayStatus {
WAIT_PAY(0, "待支付"),
PAID(1, "已支付"),
CANCEL(2, "已取消");
CANCEL(2, "已取消"),
REFUND(3, "已退款");
private final Integer code;
private final String desc;

View File

@ -1,7 +1,6 @@
package com.ghy.order.mapper;
import com.ghy.order.domain.OrderDetail;
import com.ghy.order.domain.OrderGoods;
import org.apache.ibatis.annotations.Param;
import java.util.List;
@ -64,4 +63,20 @@ public interface OrderDetailMapper {
* @return OrderDetail实体集合信息
*/
List<OrderDetail> getByOrderIdList(@Param("orderIdList") List<Long> orderIdList);
/**
* 更新子订单状态
*
* @param orderDetailId 子订单ID
* @param orderStatus 状态码
*/
int updateStatus(@Param("id") Long orderDetailId, @Param("orderStatus") int orderStatus);
/**
* 通过主订单ID批量更新子订单
* 可更新字段: orderStatus
*
* @param orderDetail 子订单
*/
int updateByOrderMasterId(OrderDetail orderDetail);
}

View File

@ -70,4 +70,26 @@ public interface OrderDetailService {
*/
Map<Long, List<OrderDetail>> byOrderIdInMap(List<Long> orderIdList);
/**
* 消费者申请取消子订单
*
* @param orderDetailId 子订单ID
*/
void cancel(Long orderDetailId);
/**
* 师傅审核取消子订单申请
*
* @param orderDetailId 子订单ID
* @param agree 0=不同意 1=同意
*/
void cancelAgree(Long orderDetailId, Integer agree);
/**
* 通过主订单ID批量更新子订单
* 可更新字段: orderStatus
*
* @param orderDetail 子订单
*/
void updateByOrderMasterId(OrderDetail orderDetail);
}

View File

@ -85,15 +85,6 @@ public interface OrderMasterService {
*/
void finish(Long orderMasterId) throws BaseAdaPayException;
/**
* 发起提现
*
* @param deptId 公司ID
* @param memberId Adapay实名账户ID
* @param amount 提现金额
*/
void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException;
/**
* 消费者申请取消主订单
*

View File

@ -1,16 +1,32 @@
package com.ghy.order.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.ghy.common.adapay.model.AdapayStatusEnum;
import com.ghy.common.constant.UserConstants;
import com.ghy.common.core.text.Convert;
import com.ghy.common.enums.OrderStatus;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.utils.AdapayUtils;
import com.ghy.order.domain.OrderDetail;
import com.ghy.order.domain.OrderMaster;
import com.ghy.order.mapper.OrderDetailMapper;
import com.ghy.order.mapper.OrderMasterMapper;
import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderMasterService;
import com.ghy.payment.domain.FinancialDetail;
import com.ghy.payment.domain.FinancialMaster;
import com.ghy.payment.service.AdapayService;
import com.ghy.payment.service.FinancialDetailService;
import com.ghy.payment.service.FinancialMasterService;
import com.huifu.adapay.core.exception.BaseAdaPayException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
@ -21,11 +37,12 @@ import java.util.Map;
import java.util.concurrent.atomic.AtomicLong;
import static java.time.temporal.ChronoField.*;
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
@Service
public class OrderDetailServiceImpl implements OrderDetailService {
private static final Logger logger = LoggerFactory.getLogger(OrderDetailServiceImpl.class);
private static final AtomicLong INDEX = new AtomicLong(1L);
public static final DateTimeFormatter MINI_FORMATTER = new DateTimeFormatterBuilder()
@ -35,9 +52,16 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Resource
private OrderDetailMapper orderDetailMapper;
@Resource
private OrderMasterMapper orderMasterMapper;
@Resource
private AdapayService adapayService;
@Resource
private OrderMasterService orderMasterService;
@Resource
private FinancialMasterService financialMasterService;
@Resource
private FinancialDetailService financialDetailService;
@Override
public int insertOrderDetail(OrderDetail orderDetail) {
@ -46,7 +70,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Override
public int updateOrderDetail(OrderDetail orderDetail) {
if(orderDetail.getOrderStatus() == null){
if (orderDetail.getOrderStatus() == null) {
return orderDetailMapper.updateOrderDetail(orderDetail);
}
int orderStatus = orderDetail.getOrderStatus();
@ -60,9 +84,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
flag = false;
}
}
if(flag){
if (flag) {
OrderMaster orderMaster = orderMasterMapper.selectById(detailInfo.getOrderMasterId());
if(orderMaster.getOrderStatus() != OrderStatus.PLAIN.code()){
if (orderMaster.getOrderStatus() != OrderStatus.PLAIN.code()) {
orderMaster.setOrderStatus(orderStatus);
orderMasterMapper.updateOrderMaster(orderMaster);
}
@ -111,16 +135,16 @@ public class OrderDetailServiceImpl implements OrderDetailService {
@Override
public Map<Long, List<OrderDetail>> byOrderIdInMap(List<Long> orderIdList) {
Map<Long, List<OrderDetail>> longByOrderDetailListMap = new HashMap<>();
if(orderIdList != null && orderIdList.size() > 0){
if (orderIdList != null && orderIdList.size() > 0) {
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderIdList(orderIdList);
if(orderDetailList != null && orderDetailList.size() > 0){
for(OrderDetail orderDetail : orderDetailList){
if (orderDetailList != null && orderDetailList.size() > 0) {
for (OrderDetail orderDetail : orderDetailList) {
List<OrderDetail> orderDetailListByMapCrw = longByOrderDetailListMap.get(orderDetail.getOrderMasterId());
if(orderDetailListByMapCrw != null && orderDetailListByMapCrw.size() > 0){
if (orderDetailListByMapCrw != null && orderDetailListByMapCrw.size() > 0) {
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
orderDetailListByMapNew.add(orderDetail);
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
}else {
} else {
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
orderDetailListByMapNew.add(orderDetail);
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
@ -131,4 +155,111 @@ public class OrderDetailServiceImpl implements OrderDetailService {
return longByOrderDetailListMap;
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancel(Long orderDetailId) {
OrderDetail orderDetail = selectById(orderDetailId);
Assert.notNull(orderDetail, "找不到对应的子订单");
// 查询出所有的子订单 如果除了这个子订单以外 没有其它未取消的订单 就走主订单取消流程
List<OrderDetail> orderDetails = orderDetailMapper.selectByOrderMasterId(orderDetail.getOrderMasterId());
boolean allCancel = true;
for (OrderDetail od : orderDetails) {
if (!od.getId().equals(orderDetailId)) {
if (!od.getOrderStatus().equals(OrderStatus.CANCEL.code())) {
allCancel = false;
}
}
}
if (allCancel) {
logger.info("主订单[id={}]下所有的子订单都被取消 直接进入主订单取消流程", orderDetail.getOrderMasterId());
orderMasterService.cancel(orderDetail.getOrderMasterId());
return;
}
switch (orderDetail.getOrderStatus()) {
case 0:
case 1: // 待接单和待排期状态可直接取消
updateStatus(orderDetailId, OrderStatus.CANCEL.code());
// 发起退款
try {
refund(orderDetail);
} catch (BaseAdaPayException e) {
logger.error("子订单[code={}]退款失败", orderDetail.getCode(), e);
}
break;
case 2: // 待上门状态需要师傅同意才能取消
updateStatus(orderDetailId, OrderStatus.GOING_CANCEL.code());
break;
case 3: // 服务中状态需要师傅同意才能取消
updateStatus(orderDetailId, OrderStatus.SERVER_CANCEL.code());
break;
case 4: // 待确认状态需要师傅同意才能取消
updateStatus(orderDetailId, OrderStatus.FINISH_CHECK_CANCEL.code());
break;
default: // 其他状态不可取消
throw new IllegalArgumentException("这个子订单不能取消了");
}
}
private void refund(OrderDetail orderDetail) throws BaseAdaPayException {
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(orderDetail.getId());
BigDecimal payMoney = financialDetail.getPayMoney();
// 把子订单对应的子财务单状态更新为已退款
FinancialDetail update = new FinancialDetail();
update.setId(financialDetail.getId());
update.setPayStatus(PayStatus.REFUND.getCode());
financialDetailService.updateFinancialDetail(update);
if (BigDecimal.ZERO.compareTo(payMoney) > -1) {
logger.info("子订单[code={}]待退款金额<=0不需要退款", orderDetail.getCode());
return;
}
// 发起退款
OrderMaster orderMaster = orderMasterMapper.selectById(orderDetail.getOrderMasterId());
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt);
logger.debug("子订单退款结果: " + response.toJSONString());
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
// 如果退款失败 这里携带失败原因抛出异常 回滚订单状态
Assert.isTrue(status, response.getString("error_msg"));
logger.info("子订单[code={}]退款成功", orderDetail.getCode());
}
private void updateStatus(Long orderDetailId, int orderStatus) {
orderDetailMapper.updateStatus(orderDetailId, orderStatus);
}
@Override
@Transactional(rollbackFor = Exception.class)
public void cancelAgree(Long orderDetailId, Integer agree) {
OrderDetail orderDetail = selectById(orderDetailId);
Assert.notNull(orderDetail, "找不到对应的子订单");
if (Integer.valueOf(1).equals(agree)) {
// 师傅同意取消订单
// 修改主订单状态为已取消
updateStatus(orderDetailId, OrderStatus.CANCEL.code());
// 发起退款
try {
refund(orderDetail);
} catch (BaseAdaPayException e) {
logger.error("子订单[code={}]退款失败", orderDetail.getCode(), e);
}
} else {
// 师傅不同意取消订单
Integer orderStatus = orderDetail.getOrderStatus();
// 修改主订单状态为原来的状态
updateStatus(orderDetailId, Math.abs(orderStatus));
}
}
@Override
public void updateByOrderMasterId(OrderDetail orderDetail) {
orderDetailMapper.updateByOrderMasterId(orderDetail);
}
}

View File

@ -10,10 +10,13 @@ import com.ghy.common.core.text.Convert;
import com.ghy.common.enums.AdapayOrderType;
import com.ghy.common.enums.FinancialDetailType;
import com.ghy.common.enums.OrderStatus;
import com.ghy.common.enums.PayStatus;
import com.ghy.common.utils.AdapayUtils;
import com.ghy.order.domain.OrderDetail;
import com.ghy.order.domain.OrderMaster;
import com.ghy.order.mapper.OrderMasterMapper;
import com.ghy.order.request.AppOrderRequest;
import com.ghy.order.service.OrderDetailService;
import com.ghy.order.service.OrderMasterService;
import com.ghy.payment.domain.FinancialDetail;
import com.ghy.payment.domain.FinancialMaster;
@ -51,6 +54,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
@Resource
private OrderMasterMapper orderMasterMapper;
@Resource
private OrderDetailService orderDetailService;
@Resource
private FinancialMasterService financialMasterService;
@Resource
private FinancialDetailService financialDetailService;
@ -121,8 +126,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
}
@Override
public int updateStatus(Long orderMasterId, int status) {
return orderMasterMapper.updateStatus(orderMasterId, status);
public int updateStatus(Long orderMasterId, int orderStatus) {
return orderMasterMapper.updateStatus(orderMasterId, orderStatus);
}
@Override
@ -158,7 +163,12 @@ public class OrderMasterServiceImpl implements OrderMasterService {
String memberId;
switch (financialDetail.getFinancialDetailType()) {
case 0:
// 上门师傅结单 分账同下
// 上门师傅结单 要判断一下这个单是否已退款
if (financialDetail.getPayStatus().equals(PayStatus.REFUND.getCode())) {
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
}
break;
case 1:
// 大师傅/店铺提成
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
@ -214,7 +224,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString());
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
// 如果确认支付失败 这里抛出异常
Assert.isTrue(status, response.getString("error_msg"));
@ -238,12 +249,16 @@ public class OrderMasterServiceImpl implements OrderMasterService {
* @param memberId Adapay实名账户ID
* @param amount 提现金额
*/
public void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException {
private void drawCash(Long deptId, String memberId, String amount) throws BaseAdaPayException {
String orderNo = AdapayUtils.createOrderNo(AdapayOrderType.DRAW_CASH);
JSONObject response = adapayService.drawCash(deptId, orderNo, "T1", amount, memberId, "订单结算", null);
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
Assert.isTrue(status, response.getString("error_msg"));
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
if (!status) {
//如果提现失败 把信息记录到error日志里
logger.error("提现失败: deptId={}, memberId={}, amount={}, 失败原因:{}", deptId, memberId, amount, response.getString("error_msg"));
}
}
@Override
@ -254,7 +269,13 @@ public class OrderMasterServiceImpl implements OrderMasterService {
switch (orderMaster.getOrderStatus()) {
case 0: // 待接单状态可直接取消
case 1: // 待排期状态可直接取消
// 把主订单状态设置为已取消
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
// 把所有子订单状态设置为已取消
OrderDetail update = new OrderDetail();
update.setOrderMasterId(orderMasterId);
update.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(update);
// 发起退款
try {
refund(orderMaster);
@ -282,8 +303,13 @@ public class OrderMasterServiceImpl implements OrderMasterService {
Assert.notNull(orderMaster, "找不到对应的订单");
if (Integer.valueOf(1).equals(agree)) {
// 师傅同意取消订单
// 修改主订单状态为已取消
// 把主订单状态设置为已取消
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
// 把所有子订单状态设置为已取消
OrderDetail update = new OrderDetail();
update.setOrderMasterId(orderMasterId);
update.setOrderStatus(OrderStatus.CANCEL.code());
orderDetailService.updateByOrderMasterId(update);
// 发起退款
try {
refund(orderMaster);
@ -303,7 +329,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
*
* @param orderMaster 主订单
*/
public void refund(OrderMaster orderMaster) throws BaseAdaPayException {
private void refund(OrderMaster orderMaster) throws BaseAdaPayException {
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
// 支付状态
Integer payStatus = financialMaster.getPayStatus();
@ -327,8 +353,24 @@ public class OrderMasterServiceImpl implements OrderMasterService {
return;
}
// 把主财务单状态设置为已退款
FinancialMaster fmUpdate = new FinancialMaster();
fmUpdate.setId(financialMaster.getId());
fmUpdate.setPayStatus(PayStatus.REFUND.getCode());
financialMasterService.updateFinancialMaster(fmUpdate);
// 把所有子财务单状态设置为已退款
FinancialDetail fdUpdate = new FinancialDetail();
fdUpdate.setFinancialMasterId(financialMaster.getId());
fdUpdate.setPayStatus(PayStatus.REFUND.getCode());
financialDetailService.updateByFinancialMasterId(fdUpdate);
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt);
logger.info("退款结果: " + response.toJSONString());
logger.debug("退款结果: " + response.toJSONString());
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
// 如果退款失败 这里携带失败原因抛出异常 回滚订单状态
Assert.isTrue(status, response.getString("error_msg"));
logger.info("订单[code={}]退款成功", orderMaster.getCode());
}
}

View File

@ -155,6 +155,22 @@
WHERE id = #{id}
</update>
<update id="updateStatus">
UPDATE order_detail
SET order_status = #{orderStatus},
update_time = SYSDATE()
WHERE id = #{id}
</update>
<update id="updateByOrderMasterId">
UPDATE order_detail
<set>
<if test="orderStatus != null">order_status = #{orderStatus},</if>
update_time = SYSDATE()
</set>
WHERE order_master_id = #{orderMasterId}
</update>
<insert id="insertOrderDetail" parameterType="com.ghy.order.domain.OrderDetail" useGeneratedKeys="true" keyProperty="id">
INSERT INTO order_detail(
<if test="code != null and code != ''">code,</if>

View File

@ -67,7 +67,7 @@ public class FinancialDetail extends BaseEntity {
@Excel(name = "支付方式,微信/支付宝/线下", cellType = Excel.ColumnType.NUMERIC)
private Integer payType;
@Excel(name = "支付状态, 未付款/已付款", cellType = Excel.ColumnType.NUMERIC)
@Excel(name = "支付状态, 0未付款/1已付款/2已取消/3已退", cellType = Excel.ColumnType.NUMERIC)
private Integer payStatus;
@Excel(name = "付款时间", cellType = Excel.ColumnType.STRING)
@ -77,8 +77,6 @@ public class FinancialDetail extends BaseEntity {
private String endTime;
public FinancialDetail() {
}

View File

@ -82,4 +82,12 @@ public interface FinancialDetailMapper {
* @param reverseId 撤销支付ID
*/
void payReverseSucceeded(String reverseId);
/**
* 通过主财务单ID批量更新子财务单
* 可更新字段: payType, payStatus, payTime
*
* @param financialDetail 子财务单
*/
void updateByFinancialMasterId(FinancialDetail financialDetail);
}

View File

@ -89,4 +89,12 @@ public interface FinancialDetailService {
* @param reverseId 撤销支付ID
*/
void payReverseSucceeded(String reverseId);
/**
* 通过主财务单ID批量更新子财务单
* 可更新字段: payType, payStatus, payTime
*
* @param financialDetail 子财务单
*/
void updateByFinancialMasterId(FinancialDetail financialDetail);
}

View File

@ -114,6 +114,11 @@ public class FinancialDetailServiceImpl implements FinancialDetailService {
financialDetailMapper.payReverseSucceeded(reverseId);
}
@Override
public void updateByFinancialMasterId(FinancialDetail financialDetail) {
financialDetailMapper.updateByFinancialMasterId(financialDetail);
}
@Override
public Map<Long, FinancialDetail> byOrderIdInMap(List<Long> orderIdList) {
Map<Long, FinancialDetail> longFinancialDetailHashMap = new HashMap<>();

View File

@ -37,7 +37,7 @@ public class PayReverseCallbackService implements CallBackService {
logger.debug("撤销支付 callback: {}", event);
PayReverseCallback callback = JSON.parseObject(event.getData(), PayReverseCallback.class);
if (AdapayStatusEnum.succeeded.code.equals(callback.getStatus())) {
// 将子财务单支付状态设置为1 表示退款成功
// 将子财务单支付状态设置为3 表示退款成功
financialDetailService.payReverseSucceeded(callback.getId());
}
}

View File

@ -108,10 +108,21 @@
<update id="payReverseSucceeded">
UPDATE financial_detail SET
pay_status = 1
pay_status = 3
WHERE reverse_id = #{reverseId}
</update>
<update id="updateByFinancialMasterId">
UPDATE financial_detail
<set>
<if test="payType != null">pay_type = #{payType},</if>
<if test="payStatus != null">pay_status = #{payStatus},</if>
<if test="payTime != null">pay_time = #{payTime},</if>
update_time = SYSDATE()
</set>
WHERE financial_master_id = #{financialMasterId}
</update>
<select id="selectByOrderDetailId" resultMap="FinancialDetailResult">
<include refid="selectFinancialDetail" />
WHERE