parent
8d3a159405
commit
fb30737591
|
|
@ -108,7 +108,7 @@ public class AfterServiceRecordController extends BaseController {
|
|||
public AjaxResult addSave(@RequestBody AfterServiceRecord afterServiceRecord) {
|
||||
logger.info("新增售后记录:{}", afterServiceRecord);
|
||||
OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId());
|
||||
if(orderDetail.getDrawCashTime() != null){
|
||||
if (orderDetail.getDrawCashTime() != null) {
|
||||
return AjaxResult.error("已发起分账子单,请联系师傅处理线下售后!");
|
||||
}
|
||||
return toAjax(afterServiceRecordService.insertAfterServiceRecord(afterServiceRecord));
|
||||
|
|
@ -134,10 +134,6 @@ public class AfterServiceRecordController extends BaseController {
|
|||
public AjaxResult editSave(@RequestBody AfterServiceRecord afterServiceRecord) {
|
||||
logger.info("修改售后记录:{}", afterServiceRecord);
|
||||
try {
|
||||
OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId());
|
||||
if(orderDetail.getDrawCashTime() != null){
|
||||
return AjaxResult.error("已发起分账子单,请联系师傅处理线下售后!");
|
||||
}
|
||||
return toAjax(afterServiceRecordService.updateAfterServiceRecord(afterServiceRecord));
|
||||
} catch (Exception exception) {
|
||||
logger.error(ExceptionUtils.getStackTrace(exception));
|
||||
|
|
|
|||
|
|
@ -292,6 +292,7 @@ public class OrderController extends BaseController {
|
|||
@ResponseBody
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
public AjaxResult assign(@RequestBody AppOrderAssignRequest request) throws BaseAdaPayException {
|
||||
logger.info("分配订单请求参数:{}", request);
|
||||
OrderMaster om = orderMasterService.selectById(request.getOrderMasterId());
|
||||
Assert.notNull(om, "订单不存在");
|
||||
FinancialMaster fm = financialMasterService.selectByOrderMasterId(om.getId());
|
||||
|
|
@ -689,7 +690,7 @@ public class OrderController extends BaseController {
|
|||
response.setServingOrderNum(orderDetailService.countOrderDetailList(orderDetail));
|
||||
// 统计待确认单量
|
||||
orderDetail.setOrderStatus(null);
|
||||
orderDetail.setOrderStatusList(new ArrayList<Integer>(){{
|
||||
orderDetail.setOrderStatusList(new ArrayList<Integer>() {{
|
||||
add(4);
|
||||
add(5);
|
||||
}});
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.ghy.common.core.text.Convert;
|
|||
import com.ghy.common.enums.PayStatus;
|
||||
import com.ghy.common.enums.RefundType;
|
||||
import com.ghy.common.exception.base.BaseException;
|
||||
import com.ghy.common.utils.AdapayUtils;
|
||||
import com.ghy.common.utils.ObjectUtils;
|
||||
import com.ghy.order.domain.AfterServiceImgs;
|
||||
import com.ghy.order.domain.AfterServiceRecord;
|
||||
|
|
@ -140,6 +141,8 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
|||
private int agreeRefund(AfterServiceRecord afterServiceRecord) throws BaseAdaPayException {
|
||||
OrderDetail orderDetail = orderDetailService.selectById(afterServiceRecord.getOrderDetailId());
|
||||
Assert.notNull(orderDetail, "子单不存在!");
|
||||
// DrawCashTime不为空说明已经发起过分账
|
||||
Assert.isTrue(orderDetail.getDrawCashTime() == null, "子单已发起分账,请联系师傅处理线下售后!");
|
||||
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(afterServiceRecord.getOrderDetailId());
|
||||
Assert.notNull(financialDetail, "财务子单不存在!");
|
||||
OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId());
|
||||
|
|
@ -155,34 +158,84 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
|||
} else {
|
||||
refundMoney = afterServiceRecord.getRefund();
|
||||
}
|
||||
if (refundMoney.compareTo(financialDetail.getPayMoney()) < 0) {
|
||||
// 申请退款金额 < 子单金额
|
||||
afterServiceRecord.setOriginalRefund(refundMoney);
|
||||
financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(refundMoney));
|
||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
||||
// 更新主/子财务单金额
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
financialDetailService.updateFinancialDetail(financialDetail);
|
||||
// 发起支付撤销
|
||||
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(),
|
||||
String.valueOf(refundMoney), RefundType.RAS);
|
||||
if (!AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
|
||||
log.error("发起退款异常,异常信息:{}", response);
|
||||
if ("reverse_amt_over".equals(response.getString("error_code"))) {
|
||||
throw new BaseException("退款金额超出订单金额");
|
||||
} else {
|
||||
throw new BaseException("发起退款失败");
|
||||
|
||||
// 是不是大师傅的子单
|
||||
boolean isMaster = orderMaster.getWorkerId().equals(orderDetail.getWorkerId());
|
||||
if (isMaster) {
|
||||
// 如果这是大师傅的子单 退款金额最大可以等于主单服务金额
|
||||
// 判断退款金额 >= 主单服务金额
|
||||
boolean refundAll = refundMoney.compareTo(financialMaster.getServerMoney()) > -1;
|
||||
List<OrderDetail> orderDetails = orderDetailService.selectByOrderMasterId(orderMaster.getId());
|
||||
// 判断是否有派单给子师傅
|
||||
boolean noneSubWorker = true;
|
||||
for (OrderDetail od : orderDetails) {
|
||||
if (!orderMaster.getWorkerId().equals(od.getWorkerId())) {
|
||||
noneSubWorker = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (refundAll && noneSubWorker) {
|
||||
// 如果退款金额 >= 主单服务金额 并且 没有派单给子师傅 则退整个主单
|
||||
orderMasterService.cancelAgree(orderMaster.getId(), 1);
|
||||
afterServiceRecord.setOriginalRefund(financialMaster.getPayMoney());
|
||||
} else if (refundAll) {
|
||||
// 如果退款金额 >= 主单服务金额 但是有派单给子师傅
|
||||
afterServiceRecord.setOriginalRefund(financialMaster.getServerMoney());
|
||||
// 退款金额就是主单服务金额
|
||||
String reverseAmt = AdapayUtils.bigDecimalToString(financialMaster.getServerMoney());
|
||||
|
||||
// 更新主财务单 PayMoney=PayMoney-ServerMoney ,ServerMoney=0
|
||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(financialMaster.getServerMoney()));
|
||||
financialMaster.setServerMoney(BigDecimal.ZERO);
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
|
||||
// 发起支付撤销
|
||||
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
|
||||
} else {
|
||||
// 如果退款金额 < 主单服务金额
|
||||
afterServiceRecord.setOriginalRefund(refundMoney);
|
||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
||||
financialMaster.setServerMoney(financialMaster.getServerMoney().subtract(refundMoney));
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
String reverseAmt = AdapayUtils.bigDecimalToString(refundMoney);
|
||||
// 发起支付撤销
|
||||
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
|
||||
}
|
||||
} else {
|
||||
// 子单全额退款 直接走取消流程
|
||||
orderDetailService.cancelAgree(orderDetail.getId(), 1);
|
||||
afterServiceRecord.setOriginalRefund(financialDetail.getPayMoney());
|
||||
// 是子师傅的子单 退款金额最大可以等于子单的派单金额
|
||||
if (refundMoney.compareTo(financialDetail.getPayMoney()) > -1) {
|
||||
// 子单全额退款 直接走取消流程
|
||||
orderDetailService.cancelAgree(orderDetail.getId(), 1);
|
||||
afterServiceRecord.setOriginalRefund(financialDetail.getPayMoney());
|
||||
} else {
|
||||
afterServiceRecord.setOriginalRefund(refundMoney);
|
||||
financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(refundMoney));
|
||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
||||
// 更新主/子财务单金额
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
financialDetailService.updateFinancialDetail(financialDetail);
|
||||
|
||||
// 发起支付撤销
|
||||
String reverseAmt = AdapayUtils.bigDecimalToString(financialMaster.getServerMoney());
|
||||
payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt);
|
||||
}
|
||||
}
|
||||
afterServiceRecord.setRefundApplyTime(new Date());
|
||||
return afterServiceRecordMapper.updateAfterServiceRecord(afterServiceRecord);
|
||||
}
|
||||
|
||||
private void payReverse(Long deptId, String paymentId, String reverseAmt) throws BaseAdaPayException {
|
||||
JSONObject response = adapayService.payReverse(deptId, paymentId, reverseAmt, RefundType.RAS);
|
||||
if (!AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
|
||||
log.error("发起退款异常,异常信息:{}", response);
|
||||
if ("reverse_amt_over".equals(response.getString("error_code"))) {
|
||||
throw new BaseException("退款金额超出订单金额");
|
||||
} else {
|
||||
throw new BaseException("发起退款失败");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 批量删除售后记录
|
||||
*
|
||||
|
|
|
|||
|
|
@ -303,7 +303,7 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
// 先把这个子单的加价单全退了
|
||||
for (FinancialChangeRecord fcr : fcrList) {
|
||||
if (PayStatus.PAID.getCode().equals(fcr.getPayStatus()) || PayStatus.PAYED_ADD.getCode().equals(fcr.getPayStatus())) {
|
||||
executor.execute(() -> financialChangeRecordService.refund(orderMaster.getDeptId(), fcr));
|
||||
executor.execute(() -> financialChangeRecordService.refund(orderMaster.getDeptId(), fcr.getId()));
|
||||
// 主/子财务单里也加上了加价单的金额 所以这里减掉
|
||||
masterMoney = masterMoney.subtract(fcr.getChangeMoney());
|
||||
detailMoney = detailMoney.subtract(fcr.getChangeMoney());
|
||||
|
|
|
|||
|
|
@ -311,7 +311,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
orderDetailService.updateByOrderMasterId(update);
|
||||
// 发起退款 -- 如果是未付款的单,不需要退款
|
||||
FinancialMaster financialMaster = financialMasterService.selectByOrderMasterId(orderMasterId);
|
||||
if(PayStatus.PAID.getCode().equals(financialMaster.getPayStatus())){
|
||||
if (PayStatus.PAID.getCode().equals(financialMaster.getPayStatus())) {
|
||||
refund(orderMaster);
|
||||
}
|
||||
break;
|
||||
|
|
@ -381,14 +381,12 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
Assert.isTrue(paid, "订单未支付");
|
||||
Assert.hasText(financialMaster.getPaymentId(), "找不到订单的支付记录,请联系管理员");
|
||||
|
||||
// 改主订单的订单状态和支付状态
|
||||
updateStatus(orderMasterId, OrderStatus.CANCEL.code());
|
||||
// 改主订单的支付状态
|
||||
updatePayStatus(orderMasterId, PayStatus.REFUND.getCode());
|
||||
// 改子订单的订单状态和支付状态
|
||||
// 改子订单的支付状态
|
||||
OrderDetail odUpdate = new OrderDetail();
|
||||
odUpdate.setOrderMasterId(orderMasterId);
|
||||
odUpdate.setPayStatus(PayStatus.REFUND.getCode());
|
||||
odUpdate.setOrderStatus(OrderStatus.CANCEL.code());
|
||||
orderDetailService.updateByOrderMasterId(odUpdate);
|
||||
|
||||
// 主订单金额=订单原价+加价
|
||||
|
|
@ -396,40 +394,37 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
List<FinancialChangeRecord> fcrList = financialChangeRecordService.selectByMasterId(orderMasterId);
|
||||
for (FinancialChangeRecord fcr : fcrList) {
|
||||
// 把已支付的加价单退了 并从主单金额里减去
|
||||
if (PayStatus.PAID.getCode().equals(fcr.getPayStatus())) {
|
||||
financialChangeRecordService.refund(orderMaster.getDeptId(), fcr);
|
||||
if (financialChangeRecordService.refund(orderMaster.getDeptId(), fcr.getId())) {
|
||||
payMoney = payMoney.subtract(fcr.getChangeMoney());
|
||||
}
|
||||
}
|
||||
|
||||
// 修改主财务单状态
|
||||
financialMasterService.updatePayStatus(financialMaster.getId(), PayStatus.REVERSING.getCode());
|
||||
// 修改子财务单状态
|
||||
List<FinancialDetail> fdList = financialDetailService.selectByFinancialMasterId(financialMaster.getId());
|
||||
for (FinancialDetail fd : fdList) {
|
||||
// 如果有已退款或正在退款的子财务单 从主单金额里减去
|
||||
if (PayStatus.REFUND.getCode().equals(fd.getPayStatus()) ||
|
||||
PayStatus.REFUNDING.getCode().equals(fd.getPayStatus()) ||
|
||||
PayStatus.REVERSING.getCode().equals(fd.getPayStatus())) {
|
||||
payMoney = payMoney.subtract(fd.getPayMoney());
|
||||
} else if (PayStatus.PAID.getCode().equals(fd.getPayStatus()) ||
|
||||
PayStatus.PAYED_ADD.getCode().equals(fd.getPayStatus())) {
|
||||
// 修改子单状态
|
||||
financialDetailService.updatePayStatus(fd.getId(), PayStatus.REVERSING.getCode());
|
||||
if (PayStatus.PAID.getCode().equals(fd.getPayStatus())) {
|
||||
financialDetailService.updatePayStatus(fd.getId(), PayStatus.REFUND.getCode());
|
||||
}
|
||||
}
|
||||
|
||||
if (payMoney.compareTo(BigDecimal.ZERO) < 1) {
|
||||
logger.info("无需退款 reverseAmt={}", payMoney);
|
||||
logger.info("主订单[{}]无需退款 reverseAmt={}", orderMasterId, payMoney);
|
||||
}
|
||||
|
||||
String reverseAmt = payMoney.setScale(2, RoundingMode.DOWN).toString();
|
||||
JSONObject response = adapayService.payReverse(orderMaster.getDeptId(), financialMaster.getPaymentId(), reverseAmt, RefundType.ROM);
|
||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status")) ||
|
||||
AdapayStatusEnum.pending.code.equals(response.getString("status"))) {
|
||||
// 主订单退款 直接修改主财务单状态为退款中
|
||||
// 保存reverseId
|
||||
String reverseId = response.getString("id");
|
||||
financialMaster.setPayStatus(PayStatus.REVERSING.getCode());
|
||||
financialMaster.setReverseId(reverseId);
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
FinancialMaster fm2up = new FinancialMaster();
|
||||
fm2up.setId(financialMaster.getId());
|
||||
fm2up.setReverseId(reverseId);
|
||||
financialMasterService.updateFinancialMaster(fm2up);
|
||||
} else {
|
||||
logger.error("FM[{}]撤销支付失败: {}", financialMaster.getId(), response.toJSONString());
|
||||
logger.error("主订单[{}]退款失败: {}", orderMasterId, response);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -84,4 +84,6 @@ public interface FinancialMasterMapper {
|
|||
* @param reverseId 撤销支付ID
|
||||
*/
|
||||
void refundSucceeded(@Param("reverseId") String reverseId);
|
||||
|
||||
int updatePayStatus(@Param(value = "id") Long id, @Param(value = "payStatus") int payStatus);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -75,9 +75,9 @@ public interface FinancialChangeRecordService {
|
|||
* 但不修改财务单的金额<br>
|
||||
*
|
||||
* @param deptId 公司ID
|
||||
* @param fcr 加价单
|
||||
* @param id 加价单ID
|
||||
*/
|
||||
boolean refund(Long deptId, FinancialChangeRecord fcr);
|
||||
boolean refund(Long deptId, Long id);
|
||||
|
||||
/**
|
||||
* 退款成功时 退款回调接口里会调用这个方法
|
||||
|
|
|
|||
|
|
@ -100,4 +100,6 @@ public interface FinancialMasterService {
|
|||
FinancialMaster selectByPaymentId(String paymentId);
|
||||
|
||||
void refundSucceeded(String reverseId);
|
||||
|
||||
int updatePayStatus(Long id, int payStatus);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -132,7 +132,11 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
|
|||
}
|
||||
|
||||
@Override
|
||||
public boolean refund(Long deptId, FinancialChangeRecord fcr) {
|
||||
public boolean refund(Long deptId, Long id) {
|
||||
FinancialChangeRecord fcr = selectFinancialChangeRecordById(id);
|
||||
if (fcr == null) {
|
||||
return false;
|
||||
}
|
||||
FinancialChangeRecord update = new FinancialChangeRecord();
|
||||
update.setId(fcr.getId());
|
||||
update.setPayStatus(PayStatus.REFUNDING.getCode());
|
||||
|
|
@ -144,7 +148,8 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
|
|||
try {
|
||||
response = adapayService.payReverse(deptId, fcr.getPaymentId(), reverseAmt, RefundType.RCG);
|
||||
} catch (BaseAdaPayException e) {
|
||||
throw new RuntimeException(e);
|
||||
log.error("加价单退款失败: {}", e.getMessage(), e);
|
||||
return false;
|
||||
}
|
||||
boolean status = AdapayStatusEnum.succeeded.code.equals(response.getString("status")) ||
|
||||
AdapayStatusEnum.pending.code.equals(response.getString("status"));
|
||||
|
|
|
|||
|
|
@ -160,6 +160,11 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
|
|||
financialMasterMapper.refundSucceeded(reverseId);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updatePayStatus(Long id, int payStatus) {
|
||||
return financialMasterMapper.updatePayStatus(id, payStatus);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<FinancialMaster> selectByOrderMasterIds(Set<Long> orderMasterIds) {
|
||||
if (CollectionUtils.isEmpty(orderMasterIds)) {
|
||||
|
|
|
|||
|
|
@ -140,6 +140,13 @@
|
|||
WHERE reverse_id = #{reverseId}
|
||||
</update>
|
||||
|
||||
<update id="updatePayStatus">
|
||||
UPDATE financial_master SET
|
||||
pay_status = #{payStatus} ,
|
||||
update_time = NOW()
|
||||
WHERE id = #{id}
|
||||
</update>
|
||||
|
||||
<insert id="insertFinancialMaster" parameterType="com.ghy.payment.domain.FinancialMaster" useGeneratedKeys="true" keyProperty="id">
|
||||
INSERT INTO financial_master(
|
||||
<if test="deptId != null">dept_id,</if>
|
||||
|
|
|
|||
Loading…
Reference in New Issue