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.OrderGoodsService;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
import com.ghy.payment.domain.FinancialDetail;
|
import com.ghy.payment.domain.FinancialDetail;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
|
||||||
import com.ghy.payment.service.FinancialDetailService;
|
import com.ghy.payment.service.FinancialDetailService;
|
||||||
import com.ghy.system.domain.SysArea;
|
import com.ghy.system.domain.SysArea;
|
||||||
import com.ghy.system.service.ISysAreaService;
|
import com.ghy.system.service.ISysAreaService;
|
||||||
|
|
@ -80,7 +79,7 @@ public class OrderDetailController extends BaseController {
|
||||||
return prefix;
|
return prefix;
|
||||||
}
|
}
|
||||||
|
|
||||||
// @RequiresPermissions("order:detail:list")
|
// @RequiresPermissions("order:detail:list")
|
||||||
@PostMapping("/list")
|
@PostMapping("/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo list(OrderDetail orderDetail) {
|
public TableDataInfo list(OrderDetail orderDetail) {
|
||||||
|
|
@ -91,7 +90,7 @@ public class OrderDetailController extends BaseController {
|
||||||
|
|
||||||
@PostMapping("/app/detail")
|
@PostMapping("/app/detail")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public AjaxResult appDetail(@RequestBody OrderDetail request){
|
public AjaxResult appDetail(@RequestBody OrderDetail request) {
|
||||||
try {
|
try {
|
||||||
// 子单信息
|
// 子单信息
|
||||||
OrderDetail detail = orderDetailService.selectById(request.getId());
|
OrderDetail detail = orderDetailService.selectById(request.getId());
|
||||||
|
|
@ -123,7 +122,7 @@ public class OrderDetailController extends BaseController {
|
||||||
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
|
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
|
||||||
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
|
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
|
||||||
|
|
||||||
for(OrderGoods orderGoods : orderStandardList){
|
for (OrderGoods orderGoods : orderStandardList) {
|
||||||
OrderStandard orderStandard = new OrderStandard();
|
OrderStandard orderStandard = new OrderStandard();
|
||||||
orderStandard.setStandardName(orderGoods.getGoodsName());
|
orderStandard.setStandardName(orderGoods.getGoodsName());
|
||||||
orderStandard.setStandardNum(orderGoods.getGoodsNum());
|
orderStandard.setStandardNum(orderGoods.getGoodsNum());
|
||||||
|
|
@ -161,7 +160,7 @@ public class OrderDetailController extends BaseController {
|
||||||
orderListResponse.setCustomerRemark(orderMaster.getRemark());
|
orderListResponse.setCustomerRemark(orderMaster.getRemark());
|
||||||
|
|
||||||
return AjaxResult.success(orderListResponse);
|
return AjaxResult.success(orderListResponse);
|
||||||
}catch (Exception e){
|
} catch (Exception e) {
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
logger.error(ExceptionUtil.getExceptionMessage(e));
|
logger.error(ExceptionUtil.getExceptionMessage(e));
|
||||||
return AjaxResult.error();
|
return AjaxResult.error();
|
||||||
|
|
@ -170,12 +169,12 @@ public class OrderDetailController extends BaseController {
|
||||||
|
|
||||||
@PostMapping("/app/list")
|
@PostMapping("/app/list")
|
||||||
@ResponseBody
|
@ResponseBody
|
||||||
public TableDataInfo appList(@RequestBody OrderDetail orderDetail){
|
public TableDataInfo appList(@RequestBody OrderDetail orderDetail) {
|
||||||
|
|
||||||
startPage();
|
startPage();
|
||||||
List<OrderListResponse> orderListResponses = new ArrayList<>();
|
List<OrderListResponse> orderListResponses = new ArrayList<>();
|
||||||
List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetail);
|
List<OrderDetail> list = orderDetailService.selectOrderDetailList(orderDetail);
|
||||||
list.forEach(detail->{
|
list.forEach(detail -> {
|
||||||
|
|
||||||
// 主单信息
|
// 主单信息
|
||||||
OrderMaster orderMaster = orderMasterService.selectById(detail.getOrderMasterId());
|
OrderMaster orderMaster = orderMasterService.selectById(detail.getOrderMasterId());
|
||||||
|
|
@ -205,7 +204,7 @@ public class OrderDetailController extends BaseController {
|
||||||
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
|
SysArea sysArea = sysAreaService.selectById(customerAddress.getCountryId());
|
||||||
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
|
String completeAddress = sysArea.getMergerName().replaceAll(",", "") + customerAddress.getAddress();
|
||||||
|
|
||||||
for(OrderGoods orderGoods : orderStandardList){
|
for (OrderGoods orderGoods : orderStandardList) {
|
||||||
OrderStandard orderStandard = new OrderStandard();
|
OrderStandard orderStandard = new OrderStandard();
|
||||||
orderStandard.setStandardName(orderGoods.getGoodsName());
|
orderStandard.setStandardName(orderGoods.getGoodsName());
|
||||||
orderStandard.setStandardNum(orderGoods.getGoodsNum());
|
orderStandard.setStandardNum(orderGoods.getGoodsNum());
|
||||||
|
|
@ -313,4 +312,29 @@ public class OrderDetailController extends BaseController {
|
||||||
public String checkOrderDetailCodeUnique(OrderDetail orderDetail) {
|
public String checkOrderDetailCodeUnique(OrderDetail orderDetail) {
|
||||||
return orderDetailService.checkOrderDetailCodeUnique(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, "待支付"),
|
WAIT_PAY(0, "待支付"),
|
||||||
PAID(1, "已支付"),
|
PAID(1, "已支付"),
|
||||||
CANCEL(2, "已取消");
|
CANCEL(2, "已取消"),
|
||||||
|
REFUND(3, "已退款");
|
||||||
|
|
||||||
private final Integer code;
|
private final Integer code;
|
||||||
private final String desc;
|
private final String desc;
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,6 @@
|
||||||
package com.ghy.order.mapper;
|
package com.ghy.order.mapper;
|
||||||
|
|
||||||
import com.ghy.order.domain.OrderDetail;
|
import com.ghy.order.domain.OrderDetail;
|
||||||
import com.ghy.order.domain.OrderGoods;
|
|
||||||
import org.apache.ibatis.annotations.Param;
|
import org.apache.ibatis.annotations.Param;
|
||||||
|
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
@ -64,4 +63,20 @@ public interface OrderDetailMapper {
|
||||||
* @return OrderDetail实体集合信息。
|
* @return OrderDetail实体集合信息。
|
||||||
*/
|
*/
|
||||||
List<OrderDetail> getByOrderIdList(@Param("orderIdList") List<Long> orderIdList);
|
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);
|
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;
|
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;
|
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.constant.UserConstants;
|
||||||
import com.ghy.common.core.text.Convert;
|
import com.ghy.common.core.text.Convert;
|
||||||
import com.ghy.common.enums.OrderStatus;
|
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.OrderDetail;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.mapper.OrderDetailMapper;
|
import com.ghy.order.mapper.OrderDetailMapper;
|
||||||
import com.ghy.order.mapper.OrderMasterMapper;
|
import com.ghy.order.mapper.OrderMasterMapper;
|
||||||
import com.ghy.order.service.OrderDetailService;
|
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.stereotype.Service;
|
||||||
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
import org.springframework.util.Assert;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
|
import java.math.BigDecimal;
|
||||||
import java.time.LocalDateTime;
|
import java.time.LocalDateTime;
|
||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.time.format.DateTimeFormatterBuilder;
|
import java.time.format.DateTimeFormatterBuilder;
|
||||||
|
|
@ -21,11 +37,12 @@ import java.util.Map;
|
||||||
import java.util.concurrent.atomic.AtomicLong;
|
import java.util.concurrent.atomic.AtomicLong;
|
||||||
|
|
||||||
import static java.time.temporal.ChronoField.*;
|
import static java.time.temporal.ChronoField.*;
|
||||||
import static java.time.temporal.ChronoField.SECOND_OF_MINUTE;
|
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
public class OrderDetailServiceImpl implements OrderDetailService {
|
public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
|
|
||||||
|
private static final Logger logger = LoggerFactory.getLogger(OrderDetailServiceImpl.class);
|
||||||
|
|
||||||
private static final AtomicLong INDEX = new AtomicLong(1L);
|
private static final AtomicLong INDEX = new AtomicLong(1L);
|
||||||
|
|
||||||
public static final DateTimeFormatter MINI_FORMATTER = new DateTimeFormatterBuilder()
|
public static final DateTimeFormatter MINI_FORMATTER = new DateTimeFormatterBuilder()
|
||||||
|
|
@ -35,9 +52,16 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private OrderDetailMapper orderDetailMapper;
|
private OrderDetailMapper orderDetailMapper;
|
||||||
|
|
||||||
@Resource
|
@Resource
|
||||||
private OrderMasterMapper orderMasterMapper;
|
private OrderMasterMapper orderMasterMapper;
|
||||||
|
@Resource
|
||||||
|
private AdapayService adapayService;
|
||||||
|
@Resource
|
||||||
|
private OrderMasterService orderMasterService;
|
||||||
|
@Resource
|
||||||
|
private FinancialMasterService financialMasterService;
|
||||||
|
@Resource
|
||||||
|
private FinancialDetailService financialDetailService;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int insertOrderDetail(OrderDetail orderDetail) {
|
public int insertOrderDetail(OrderDetail orderDetail) {
|
||||||
|
|
@ -46,7 +70,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int updateOrderDetail(OrderDetail orderDetail) {
|
public int updateOrderDetail(OrderDetail orderDetail) {
|
||||||
if(orderDetail.getOrderStatus() == null){
|
if (orderDetail.getOrderStatus() == null) {
|
||||||
return orderDetailMapper.updateOrderDetail(orderDetail);
|
return orderDetailMapper.updateOrderDetail(orderDetail);
|
||||||
}
|
}
|
||||||
int orderStatus = orderDetail.getOrderStatus();
|
int orderStatus = orderDetail.getOrderStatus();
|
||||||
|
|
@ -60,9 +84,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
flag = false;
|
flag = false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(flag){
|
if (flag) {
|
||||||
OrderMaster orderMaster = orderMasterMapper.selectById(detailInfo.getOrderMasterId());
|
OrderMaster orderMaster = orderMasterMapper.selectById(detailInfo.getOrderMasterId());
|
||||||
if(orderMaster.getOrderStatus() != OrderStatus.PLAIN.code()){
|
if (orderMaster.getOrderStatus() != OrderStatus.PLAIN.code()) {
|
||||||
orderMaster.setOrderStatus(orderStatus);
|
orderMaster.setOrderStatus(orderStatus);
|
||||||
orderMasterMapper.updateOrderMaster(orderMaster);
|
orderMasterMapper.updateOrderMaster(orderMaster);
|
||||||
}
|
}
|
||||||
|
|
@ -111,16 +135,16 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
@Override
|
@Override
|
||||||
public Map<Long, List<OrderDetail>> byOrderIdInMap(List<Long> orderIdList) {
|
public Map<Long, List<OrderDetail>> byOrderIdInMap(List<Long> orderIdList) {
|
||||||
Map<Long, List<OrderDetail>> longByOrderDetailListMap = new HashMap<>();
|
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);
|
List<OrderDetail> orderDetailList = orderDetailMapper.getByOrderIdList(orderIdList);
|
||||||
if(orderDetailList != null && orderDetailList.size() > 0){
|
if (orderDetailList != null && orderDetailList.size() > 0) {
|
||||||
for(OrderDetail orderDetail : orderDetailList){
|
for (OrderDetail orderDetail : orderDetailList) {
|
||||||
List<OrderDetail> orderDetailListByMapCrw = longByOrderDetailListMap.get(orderDetail.getOrderMasterId());
|
List<OrderDetail> orderDetailListByMapCrw = longByOrderDetailListMap.get(orderDetail.getOrderMasterId());
|
||||||
if(orderDetailListByMapCrw != null && orderDetailListByMapCrw.size() > 0){
|
if (orderDetailListByMapCrw != null && orderDetailListByMapCrw.size() > 0) {
|
||||||
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
|
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
|
||||||
orderDetailListByMapNew.add(orderDetail);
|
orderDetailListByMapNew.add(orderDetail);
|
||||||
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
|
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
|
||||||
}else {
|
} else {
|
||||||
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
|
List<OrderDetail> orderDetailListByMapNew = new ArrayList<>();
|
||||||
orderDetailListByMapNew.add(orderDetail);
|
orderDetailListByMapNew.add(orderDetail);
|
||||||
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
|
longByOrderDetailListMap.put(orderDetail.getOrderMasterId(), orderDetailListByMapNew);
|
||||||
|
|
@ -131,4 +155,111 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
||||||
return longByOrderDetailListMap;
|
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.AdapayOrderType;
|
||||||
import com.ghy.common.enums.FinancialDetailType;
|
import com.ghy.common.enums.FinancialDetailType;
|
||||||
import com.ghy.common.enums.OrderStatus;
|
import com.ghy.common.enums.OrderStatus;
|
||||||
|
import com.ghy.common.enums.PayStatus;
|
||||||
import com.ghy.common.utils.AdapayUtils;
|
import com.ghy.common.utils.AdapayUtils;
|
||||||
|
import com.ghy.order.domain.OrderDetail;
|
||||||
import com.ghy.order.domain.OrderMaster;
|
import com.ghy.order.domain.OrderMaster;
|
||||||
import com.ghy.order.mapper.OrderMasterMapper;
|
import com.ghy.order.mapper.OrderMasterMapper;
|
||||||
import com.ghy.order.request.AppOrderRequest;
|
import com.ghy.order.request.AppOrderRequest;
|
||||||
|
import com.ghy.order.service.OrderDetailService;
|
||||||
import com.ghy.order.service.OrderMasterService;
|
import com.ghy.order.service.OrderMasterService;
|
||||||
import com.ghy.payment.domain.FinancialDetail;
|
import com.ghy.payment.domain.FinancialDetail;
|
||||||
import com.ghy.payment.domain.FinancialMaster;
|
import com.ghy.payment.domain.FinancialMaster;
|
||||||
|
|
@ -51,6 +54,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
@Resource
|
@Resource
|
||||||
private OrderMasterMapper orderMasterMapper;
|
private OrderMasterMapper orderMasterMapper;
|
||||||
@Resource
|
@Resource
|
||||||
|
private OrderDetailService orderDetailService;
|
||||||
|
@Resource
|
||||||
private FinancialMasterService financialMasterService;
|
private FinancialMasterService financialMasterService;
|
||||||
@Resource
|
@Resource
|
||||||
private FinancialDetailService financialDetailService;
|
private FinancialDetailService financialDetailService;
|
||||||
|
|
@ -121,8 +126,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int updateStatus(Long orderMasterId, int status) {
|
public int updateStatus(Long orderMasterId, int orderStatus) {
|
||||||
return orderMasterMapper.updateStatus(orderMasterId, status);
|
return orderMasterMapper.updateStatus(orderMasterId, orderStatus);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -158,7 +163,12 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
String memberId;
|
String memberId;
|
||||||
switch (financialDetail.getFinancialDetailType()) {
|
switch (financialDetail.getFinancialDetailType()) {
|
||||||
case 0:
|
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:
|
case 1:
|
||||||
// 大师傅/店铺提成
|
// 大师傅/店铺提成
|
||||||
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
||||||
|
|
@ -214,7 +224,8 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
AdapayUtils.bigDecimalToString(confirmAmt), divMembers, null, null);
|
||||||
logger.info("订单[code={}]分账结果: {}", orderMaster.getCode(), response.toJSONString());
|
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"));
|
Assert.isTrue(status, response.getString("error_msg"));
|
||||||
|
|
||||||
|
|
@ -238,12 +249,16 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
* @param memberId Adapay实名账户ID
|
* @param memberId Adapay实名账户ID
|
||||||
* @param amount 提现金额
|
* @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);
|
String orderNo = AdapayUtils.createOrderNo(AdapayOrderType.DRAW_CASH);
|
||||||
JSONObject response = adapayService.drawCash(deptId, orderNo, "T1", amount, memberId, "订单结算", null);
|
JSONObject response = adapayService.drawCash(deptId, orderNo, "T1", amount, memberId, "订单结算", null);
|
||||||
|
|
||||||
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
boolean status = AdapayStatusEnum.pending.code.equals(response.getString("status")) ||
|
||||||
Assert.isTrue(status, response.getString("error_msg"));
|
AdapayStatusEnum.succeeded.code.equals(response.getString("status"));
|
||||||
|
if (!status) {
|
||||||
|
//如果提现失败 把信息记录到error日志里
|
||||||
|
logger.error("提现失败: deptId={}, memberId={}, amount={}, 失败原因:{}", deptId, memberId, amount, response.getString("error_msg"));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
@ -254,7 +269,13 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
switch (orderMaster.getOrderStatus()) {
|
switch (orderMaster.getOrderStatus()) {
|
||||||
case 0: // 待接单状态可直接取消
|
case 0: // 待接单状态可直接取消
|
||||||
case 1: // 待排期状态可直接取消
|
case 1: // 待排期状态可直接取消
|
||||||
|
// 把主订单状态设置为已取消
|
||||||
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||||
|
// 把所有子订单状态设置为已取消
|
||||||
|
OrderDetail update = new OrderDetail();
|
||||||
|
update.setOrderMasterId(orderMasterId);
|
||||||
|
update.setOrderStatus(OrderStatus.CANCEL.code());
|
||||||
|
orderDetailService.updateByOrderMasterId(update);
|
||||||
// 发起退款
|
// 发起退款
|
||||||
try {
|
try {
|
||||||
refund(orderMaster);
|
refund(orderMaster);
|
||||||
|
|
@ -282,8 +303,13 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
Assert.notNull(orderMaster, "找不到对应的订单");
|
Assert.notNull(orderMaster, "找不到对应的订单");
|
||||||
if (Integer.valueOf(1).equals(agree)) {
|
if (Integer.valueOf(1).equals(agree)) {
|
||||||
// 师傅同意取消订单
|
// 师傅同意取消订单
|
||||||
// 修改主订单状态为已取消
|
// 把主订单状态设置为已取消
|
||||||
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||||
|
// 把所有子订单状态设置为已取消
|
||||||
|
OrderDetail update = new OrderDetail();
|
||||||
|
update.setOrderMasterId(orderMasterId);
|
||||||
|
update.setOrderStatus(OrderStatus.CANCEL.code());
|
||||||
|
orderDetailService.updateByOrderMasterId(update);
|
||||||
// 发起退款
|
// 发起退款
|
||||||
try {
|
try {
|
||||||
refund(orderMaster);
|
refund(orderMaster);
|
||||||
|
|
@ -303,7 +329,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
*
|
*
|
||||||
* @param orderMaster 主订单
|
* @param orderMaster 主订单
|
||||||
*/
|
*/
|
||||||
public void refund(OrderMaster orderMaster) throws BaseAdaPayException {
|
private void refund(OrderMaster orderMaster) throws BaseAdaPayException {
|
||||||
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
|
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMaster.getId());
|
||||||
// 支付状态
|
// 支付状态
|
||||||
Integer payStatus = financialMaster.getPayStatus();
|
Integer payStatus = financialMaster.getPayStatus();
|
||||||
|
|
@ -327,8 +353,24 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
||||||
return;
|
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);
|
String refundAmt = AdapayUtils.bigDecimalToString(payMoney);
|
||||||
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), refundAmt);
|
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}
|
WHERE id = #{id}
|
||||||
</update>
|
</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 id="insertOrderDetail" parameterType="com.ghy.order.domain.OrderDetail" useGeneratedKeys="true" keyProperty="id">
|
||||||
INSERT INTO order_detail(
|
INSERT INTO order_detail(
|
||||||
<if test="code != null and code != ''">code,</if>
|
<if test="code != null and code != ''">code,</if>
|
||||||
|
|
|
||||||
|
|
@ -67,7 +67,7 @@ public class FinancialDetail extends BaseEntity {
|
||||||
@Excel(name = "支付方式,微信/支付宝/线下", cellType = Excel.ColumnType.NUMERIC)
|
@Excel(name = "支付方式,微信/支付宝/线下", cellType = Excel.ColumnType.NUMERIC)
|
||||||
private Integer payType;
|
private Integer payType;
|
||||||
|
|
||||||
@Excel(name = "支付状态, 未付款/已付款", cellType = Excel.ColumnType.NUMERIC)
|
@Excel(name = "支付状态, 0未付款/1已付款/2已取消/3已退款", cellType = Excel.ColumnType.NUMERIC)
|
||||||
private Integer payStatus;
|
private Integer payStatus;
|
||||||
|
|
||||||
@Excel(name = "付款时间", cellType = Excel.ColumnType.STRING)
|
@Excel(name = "付款时间", cellType = Excel.ColumnType.STRING)
|
||||||
|
|
@ -77,8 +77,6 @@ public class FinancialDetail extends BaseEntity {
|
||||||
|
|
||||||
private String endTime;
|
private String endTime;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public FinancialDetail() {
|
public FinancialDetail() {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -82,4 +82,12 @@ public interface FinancialDetailMapper {
|
||||||
* @param reverseId 撤销支付ID
|
* @param reverseId 撤销支付ID
|
||||||
*/
|
*/
|
||||||
void payReverseSucceeded(String reverseId);
|
void payReverseSucceeded(String reverseId);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 通过主财务单ID批量更新子财务单
|
||||||
|
* 可更新字段: payType, payStatus, payTime
|
||||||
|
*
|
||||||
|
* @param financialDetail 子财务单
|
||||||
|
*/
|
||||||
|
void updateByFinancialMasterId(FinancialDetail financialDetail);
|
||||||
}
|
}
|
||||||
|
|
@ -89,4 +89,12 @@ public interface FinancialDetailService {
|
||||||
* @param reverseId 撤销支付ID
|
* @param reverseId 撤销支付ID
|
||||||
*/
|
*/
|
||||||
void payReverseSucceeded(String reverseId);
|
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);
|
financialDetailMapper.payReverseSucceeded(reverseId);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void updateByFinancialMasterId(FinancialDetail financialDetail) {
|
||||||
|
financialDetailMapper.updateByFinancialMasterId(financialDetail);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Map<Long, FinancialDetail> byOrderIdInMap(List<Long> orderIdList) {
|
public Map<Long, FinancialDetail> byOrderIdInMap(List<Long> orderIdList) {
|
||||||
Map<Long, FinancialDetail> longFinancialDetailHashMap = new HashMap<>();
|
Map<Long, FinancialDetail> longFinancialDetailHashMap = new HashMap<>();
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ public class PayReverseCallbackService implements CallBackService {
|
||||||
logger.debug("撤销支付 callback: {}", event);
|
logger.debug("撤销支付 callback: {}", event);
|
||||||
PayReverseCallback callback = JSON.parseObject(event.getData(), PayReverseCallback.class);
|
PayReverseCallback callback = JSON.parseObject(event.getData(), PayReverseCallback.class);
|
||||||
if (AdapayStatusEnum.succeeded.code.equals(callback.getStatus())) {
|
if (AdapayStatusEnum.succeeded.code.equals(callback.getStatus())) {
|
||||||
// 将子财务单支付状态设置为1 表示退款成功
|
// 将子财务单支付状态设置为3 表示退款成功
|
||||||
financialDetailService.payReverseSucceeded(callback.getId());
|
financialDetailService.payReverseSucceeded(callback.getId());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -108,10 +108,21 @@
|
||||||
|
|
||||||
<update id="payReverseSucceeded">
|
<update id="payReverseSucceeded">
|
||||||
UPDATE financial_detail SET
|
UPDATE financial_detail SET
|
||||||
pay_status = 1
|
pay_status = 3
|
||||||
WHERE reverse_id = #{reverseId}
|
WHERE reverse_id = #{reverseId}
|
||||||
</update>
|
</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">
|
<select id="selectByOrderDetailId" resultMap="FinancialDetailResult">
|
||||||
<include refid="selectFinancialDetail" />
|
<include refid="selectFinancialDetail" />
|
||||||
WHERE
|
WHERE
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue