Merge branch 'master' of https://gitee.com/op-souls/ghy-all
This commit is contained in:
commit
ce09120724
|
|
@ -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();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
||||
/**
|
||||
* 消费者申请取消主订单
|
||||
*
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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>
|
||||
|
|
|
|||
|
|
@ -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() {
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -82,4 +82,12 @@ public interface FinancialDetailMapper {
|
|||
* @param reverseId 撤销支付ID
|
||||
*/
|
||||
void payReverseSucceeded(String reverseId);
|
||||
|
||||
/**
|
||||
* 通过主财务单ID批量更新子财务单
|
||||
* 可更新字段: payType, payStatus, payTime
|
||||
*
|
||||
* @param financialDetail 子财务单
|
||||
*/
|
||||
void updateByFinancialMasterId(FinancialDetail financialDetail);
|
||||
}
|
||||
|
|
@ -89,4 +89,12 @@ public interface FinancialDetailService {
|
|||
* @param reverseId 撤销支付ID
|
||||
*/
|
||||
void payReverseSucceeded(String reverseId);
|
||||
|
||||
/**
|
||||
* 通过主财务单ID批量更新子财务单
|
||||
* 可更新字段: payType, payStatus, payTime
|
||||
*
|
||||
* @param financialDetail 子财务单
|
||||
*/
|
||||
void updateByFinancialMasterId(FinancialDetail financialDetail);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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<>();
|
||||
|
|
|
|||
|
|
@ -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());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue