Merge remote-tracking branch 'origin/master'
This commit is contained in:
commit
b43681d0d8
|
|
@ -2,29 +2,35 @@ package com.ghy.callback;
|
|||
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.ghy.common.adapay.model.Event;
|
||||
import com.ghy.payment.domain.ReverseRecord;
|
||||
import com.ghy.payment.mapper.ReverseRecordMapper;
|
||||
import com.ghy.payment.service.CallBackService;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* 退款回调
|
||||
*
|
||||
* @author HH 2022/5/30
|
||||
*/
|
||||
@Slf4j
|
||||
@Service("refundCallbackService")
|
||||
public class RefundCallbackService implements CallBackService {
|
||||
|
||||
private static final Logger logger = LoggerFactory.getLogger(RefundCallbackService.class);
|
||||
@Resource
|
||||
private ReverseRecordMapper reverseRecordMapper;
|
||||
|
||||
@Override
|
||||
public void onCallback(Event event) {
|
||||
logger.debug("退款 callback: {}", event.toString());
|
||||
log.debug("退款 callback: {}", event.toString());
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onResponse(JSONObject response) {
|
||||
logger.debug("退款 Response: {}", response.toString());
|
||||
log.debug("退款 Response: {}", response.toString());
|
||||
reverseRecordMapper.insert(JSONObject.toJavaObject(response, ReverseRecord.class));
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -40,7 +40,6 @@ import com.huifu.adapay.core.exception.BaseAdaPayException;
|
|||
import org.apache.commons.lang3.exception.ExceptionUtils;
|
||||
import org.apache.commons.lang3.time.DateUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
|
|
@ -303,33 +302,17 @@ public class OrderController extends BaseController {
|
|||
// 接单师傅
|
||||
Worker acceptWorker = workerService.selectById(request.getWorkerId());
|
||||
Assert.notNull(acceptWorker, "查询接单师傅信息失败");
|
||||
om.setAllSelfAssigned(0);
|
||||
|
||||
// 校验接单师傅和派单师傅是不是同一个Team
|
||||
if (!om.getWorkerId().equals(request.getWorkerId())) {
|
||||
fm.setServerMoney(fm.getServerMoney().subtract(request.getTotalPay()));
|
||||
if (om.getWorkerId().equals(request.getWorkerId())) {
|
||||
// 自己接单 子单金额=0
|
||||
request.setTotalPay(BigDecimal.ZERO);
|
||||
} else {
|
||||
Assert.isTrue(fm.getServerMoney().compareTo(request.getTotalPay()) < 0, "派单金额不能大于订单总金额");
|
||||
boolean checkInTeam = workerService.checkInTeam(assignWorker.getWorkerId(), acceptWorker.getWorkerId());
|
||||
Assert.isTrue(checkInTeam, "接单师傅不在本团队");
|
||||
} else {
|
||||
// 自己接单 -- 计算剩余金额
|
||||
om.setAllSelfAssigned(1);
|
||||
BigDecimal realPay = fm.getPayMoney();
|
||||
for (FinancialDetail financialDetail : financialDetailService.selectByFinancialMasterId(fm.getId())) {
|
||||
if (FinancialDetailType.ORDER_FEE.getCode().equals(financialDetail.getFinancialDetailType())) {
|
||||
om.setAllSelfAssigned(0);
|
||||
om.setOrderStatus(OrderStatus.GOING.code());
|
||||
}
|
||||
realPay = realPay.subtract(financialDetail.getPayMoney());
|
||||
}
|
||||
request.setTotalPay(realPay);
|
||||
fm.setServerMoney(BigDecimal.ZERO);
|
||||
}
|
||||
|
||||
// 判断是否全部派完
|
||||
if (orderMasterService.isAllAssign(om.getId())) {
|
||||
om.setHasDispatchedAll(1);
|
||||
}
|
||||
orderMasterService.updateOrderMaster(om);
|
||||
|
||||
// 创建子订单
|
||||
OrderDetail od = new OrderDetail();
|
||||
od.setDeptId(om.getDeptId());
|
||||
|
|
@ -343,7 +326,6 @@ public class OrderController extends BaseController {
|
|||
od.setRevTime(om.getRevTime());
|
||||
od.setExpectTimeStart(om.getExpectTimeStart());
|
||||
od.setExpectTimeEnd(om.getExpectTimeEnd());
|
||||
// od.setRemark(om.getRemark());
|
||||
orderDetailService.insertOrderDetail(od);
|
||||
|
||||
// 批量生成订单商品
|
||||
|
|
@ -359,28 +341,55 @@ public class OrderController extends BaseController {
|
|||
orderGoodsService.insertOrderGoods(orderGoods);
|
||||
});
|
||||
|
||||
Assert.isTrue(BigDecimal.ZERO.compareTo(request.getTotalPay()) < 0, "订单计算出错 请联系管理员");
|
||||
|
||||
//为接单师傅生成子财务单
|
||||
FinancialDetail fd = new FinancialDetail(fm.getDeptId(), financialDetailService.createCode(), fm.getId(),
|
||||
fm.getCode(), od.getId(), od.getCode(), request.getTotalPay(), FinancialDetailType.ORDER_FEE.getCode(), acceptWorker.getWorkerId(),
|
||||
fm.getPayType(), fm.getPayStatus(), fm.getPayTime());
|
||||
financialDetailService.insertFinancialDetail(fd);
|
||||
|
||||
// 更新财务主单金额
|
||||
financialMasterService.updateFinancialMaster(fm);
|
||||
if (BigDecimal.ZERO.equals(request.getTotalPay())) {
|
||||
// 更新财务主单服务金额
|
||||
FinancialMaster fm2up = new FinancialMaster();
|
||||
fm2up.setId(fm.getId());
|
||||
fm2up.setServerMoney(fm.getServerMoney().subtract(request.getTotalPay()));
|
||||
financialMasterService.updateFinancialMaster(fm2up);
|
||||
}
|
||||
|
||||
// 保存订单操作记录
|
||||
OrderBehavior orderBehavior = new OrderBehavior().setOrderMasterId(om.getId()).setOrderMasterCode(om.getCode())
|
||||
.setWorkerId(assignWorker.getWorkerId()).setWorkerName(assignWorker.getName()).setBehavior(OrderBehaviorEnum.ASSIGN_ORDER);
|
||||
orderBehaviorService.insert(orderBehavior);
|
||||
|
||||
// 更新主订单
|
||||
OrderMaster om2up = new OrderMaster();
|
||||
// 判断是否全部派完
|
||||
if (orderMasterService.isAllAssign(om.getId())) {
|
||||
om2up.setId(om.getId());
|
||||
Set<Long> workIds = orderDetailService.selectByOrderMasterId(om.getId()).stream().map(OrderDetail::getWorkerId).collect(Collectors.toSet());
|
||||
if (workIds.size() == 1 && workIds.contains(om.getWorkerId())) {
|
||||
// 派完单 并且只有自己接单
|
||||
om2up.setHasDispatchedAll(1);
|
||||
om2up.setOrderStatus(OrderStatus.GOING.code());
|
||||
} else {
|
||||
// 派完单 但是有其他师傅接单
|
||||
om2up.setHasDispatchedAll(0);
|
||||
om2up.setOrderStatus(OrderStatus.RECEIVE.code());
|
||||
}
|
||||
} else {
|
||||
// 未派完单
|
||||
om2up.setHasDispatchedAll(0);
|
||||
}
|
||||
orderMasterService.updateOrderMaster(om2up);
|
||||
|
||||
// 通知师傅新订单
|
||||
try {
|
||||
Map<String,Object> params = new HashMap<>();
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("thing1", "新订单通知");
|
||||
params.put("thing5", "收到师傅派单,请及时处理!");
|
||||
params.put("thing5", "收到师傅派单,请及时处理!");
|
||||
wxMsgService.sendWxMsg(acceptWorker.getOpenId(), WxMsgEnum.ORDER_PLAN, params);
|
||||
}catch (Exception e){
|
||||
e.printStackTrace();
|
||||
} catch (Exception e) {
|
||||
logger.error(e.getMessage(), e);
|
||||
}
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
|
@ -465,13 +474,13 @@ public class OrderController extends BaseController {
|
|||
}
|
||||
// 通知师傅新订单
|
||||
try {
|
||||
Map<String,Object> params = new HashMap<>();
|
||||
Map<String, Object> params = new HashMap<>();
|
||||
params.put("character_string22", orderMaster.getCode());
|
||||
params.put("thing19",customer.getName());
|
||||
params.put("thing19", customer.getName());
|
||||
params.put("time1", com.ghy.common.utils.DateUtils.parseDateToStr("yyyy年MM月dd日 HH:mm", new Date()));
|
||||
params.put("thing5", "有新订单,请及时处理!");
|
||||
wxMsgService.sendWxMsg(worker.getOpenId(), WxMsgEnum.NEW_ORDER, params);
|
||||
}catch (Exception e){
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return AjaxResult.success(orderMaster);
|
||||
|
|
@ -678,14 +687,14 @@ public class OrderController extends BaseController {
|
|||
// 统计待确认单量
|
||||
orderDetail.setOrderStatus(null);
|
||||
orderDetail.setWorkFinishTimeExisted(true);
|
||||
orderDetail.setDrawCashStatusList(new ArrayList<Integer>(){{
|
||||
orderDetail.setDrawCashStatusList(new ArrayList<Integer>() {{
|
||||
add(0);
|
||||
add(1);
|
||||
}});
|
||||
response.setWaitSureOrderNum(orderDetailService.countOrderDetailList(orderDetail));
|
||||
// 统计已完成子单量
|
||||
orderDetail.setOrderStatus(OrderStatus.FINISH.code());
|
||||
orderDetail.setDrawCashStatusList(new ArrayList<Integer>(){{
|
||||
orderDetail.setDrawCashStatusList(new ArrayList<Integer>() {{
|
||||
add(2);
|
||||
}});
|
||||
response.setFinishedOrderNum(orderDetailService.countOrderDetailList(orderDetail));
|
||||
|
|
@ -850,7 +859,7 @@ public class OrderController extends BaseController {
|
|||
return AjaxResult.success(orderListResponses);
|
||||
}
|
||||
|
||||
public List<OrderListResponse> getMasterAfterList(OrderMaster orderMaster) {
|
||||
public List<OrderListResponse> getMasterAfterList(OrderMaster orderMaster) {
|
||||
|
||||
// 查所有售后的单
|
||||
AfterServiceRecord afterServiceRecord = new AfterServiceRecord();
|
||||
|
|
@ -876,8 +885,8 @@ public class OrderController extends BaseController {
|
|||
StringBuilder orderMasterIds = new StringBuilder();
|
||||
orderDetailList.stream().map(OrderDetail::getOrderMasterId).distinct()
|
||||
.collect(Collectors.toList()).forEach(id -> {
|
||||
orderMasterIds.append(id).append(",");
|
||||
});
|
||||
orderMasterIds.append(id).append(",");
|
||||
});
|
||||
String orderIds = orderMasterIds.toString();
|
||||
if (StringUtils.isNotEmpty(orderIds)) {
|
||||
orderMaster.setOrderMasterIds(orderIds.substring(0, orderIds.length() - 1));
|
||||
|
|
|
|||
|
|
@ -735,6 +735,13 @@ public class OrderMasterController extends BaseController {
|
|||
@PostMapping("/cancel")
|
||||
@ResponseBody
|
||||
public AjaxResult cancel(Long orderMasterId) throws BaseAdaPayException {
|
||||
// 校验
|
||||
List<OrderDetail> orderDetails = orderDetailService.selectByOrderMasterId(orderMasterId);
|
||||
for (OrderDetail detail : orderDetails) {
|
||||
if (detail.getOrderStatus() != 6) {
|
||||
return AjaxResult.error("退单请入详情内操作!");
|
||||
}
|
||||
}
|
||||
orderMasterService.applyForCancel(orderMasterId);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,7 +33,7 @@ public class PayReverseCallback {
|
|||
private String confirmedAmt;
|
||||
@JSONField(name = "refunded_amt")
|
||||
private String refundedAmt;
|
||||
@JSONField(name = "createdTime")
|
||||
@JSONField(name = "created_time")
|
||||
private String created_time;
|
||||
@JSONField(name = "succeed_time")
|
||||
private String succeedTime;
|
||||
|
|
|
|||
|
|
@ -132,7 +132,7 @@ public class AfterServiceRecordServiceImpl implements IAfterServiceRecordService
|
|||
}
|
||||
if (refundMoney.compareTo(financialDetail.getPayMoney()) < 0) {
|
||||
// 申请退款金额 < 子单金额
|
||||
financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(afterServiceRecord.getAgreedRefund()));
|
||||
financialDetail.setPayMoney(financialDetail.getPayMoney().subtract(refundMoney));
|
||||
financialMaster.setPayMoney(financialMaster.getPayMoney().subtract(refundMoney));
|
||||
// 更新主/子财务单金额
|
||||
financialMasterService.updateFinancialMaster(financialMaster);
|
||||
|
|
|
|||
|
|
@ -28,6 +28,7 @@ import com.ghy.payment.service.FinancialChangeRecordService;
|
|||
import com.ghy.payment.service.FinancialDetailService;
|
||||
import com.ghy.payment.service.FinancialMasterService;
|
||||
import com.huifu.adapay.core.exception.BaseAdaPayException;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
|
|
@ -35,7 +36,6 @@ import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
|
|||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.Assert;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -137,7 +137,9 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
break;
|
||||
}
|
||||
}
|
||||
if (flag) {
|
||||
// 判断主单是否全部派单
|
||||
boolean allAssign = orderMasterService.isAllAssign(detailInfo.getOrderMasterId());
|
||||
if (flag && allAssign) {
|
||||
OrderMaster orderMaster = orderMasterMapper.selectById(detailInfo.getOrderMasterId());
|
||||
if (ObjectUtils.isEmpty(orderDetail.getExpectTimeStart())) {
|
||||
orderMaster.setOrderStatus(orderStatus);
|
||||
|
|
@ -412,15 +414,18 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
if (payment == null) {
|
||||
throw new BaseException("找不到支付记录");
|
||||
}
|
||||
List<FinancialDetail> financialDetails = financialDetailService.selectListByOrderDetailId(orderDetailId);
|
||||
if (CollectionUtils.isEmpty(financialDetails)) {
|
||||
throw new BaseException("找不到子财务单");
|
||||
}
|
||||
// 子订单对应的子财务单只有一条 直接取出
|
||||
FinancialDetail financialDetail = financialDetails.get(0);
|
||||
FinancialDetail financialDetail = financialDetailService.selectByOrderDetailId(orderDetailId);
|
||||
if (financialDetail == null) {
|
||||
throw new BaseException("FinancialDetail is null!!!");
|
||||
}
|
||||
if (financialDetail.getPayStatus() != 1) {
|
||||
throw new BaseException("订单不是“已支付”状态");
|
||||
}
|
||||
|
||||
// 修改子订单状态为完成
|
||||
updateStatus(orderDetailId, OrderStatus.FINISH.code());
|
||||
|
||||
Long financialMasterId = financialDetail.getFinancialMasterId();
|
||||
// 找到 type=平台抽成 的子财务单 用来承担手续费
|
||||
List<FinancialDetail> details = financialDetailService.selectByFinancialMasterIdAndType(financialMasterId, FinancialDetailType.PLATFORM_FEE.getCode());
|
||||
|
|
@ -444,51 +449,57 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
// --------------------- 改价单分账部分 start ---------------------
|
||||
// 查询子订单的加价记录
|
||||
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
|
||||
if (!CollectionUtils.isEmpty(financialChangeRecords)) {
|
||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||
if (CollectionUtils.isNotEmpty(financialChangeRecords)) {
|
||||
// 改价记录只会有一条 直接取出
|
||||
FinancialChangeRecord fcRecord = financialChangeRecords.get(0);
|
||||
addPrice = fcRecord.getChangeMoney();
|
||||
// 待提现金额里加入改价单金额
|
||||
dtx = dtx.add(fcRecord.getChangeMoney());
|
||||
// 这里先自己承担手续费 后面再用平台抽成来补偿
|
||||
DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), true);
|
||||
divMembers.add(divMember);
|
||||
//调用分账
|
||||
logger.info("子订单[code={}]的[改价单]发起分账", odCode);
|
||||
JSONObject response = adapayService.paymentConfirm(financialDetail.getDeptId(), fcRecord.getRemark(),
|
||||
payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
||||
AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), divMembers, null, null);
|
||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { // 分账成功
|
||||
logger.info("子订单[code={}]的[改价单]分账成功", odCode);
|
||||
// 这是被扣掉的手续费 按理说这里肯定大于0
|
||||
String fee_amt = response.getString("fee_amt");
|
||||
feeAmt = new BigDecimal(fee_amt);
|
||||
if (feeAmt.compareTo(platformFeeFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) {
|
||||
// 当 0.00<改价单的手续费<=平台抽成金额 时
|
||||
// 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额
|
||||
fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(feeAmt));
|
||||
int i = financialDetailService.updateFinancialDetail(fdUpdate);
|
||||
compensate = i > 0;
|
||||
} else {
|
||||
logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费",
|
||||
orderDetail.getOrderMasterCode(), odCode);
|
||||
// 平台抽成不足以承担改价单手续费了 那没办法了只能自己承担
|
||||
// 待提现金额里减去改价单手续费
|
||||
dtx = dtx.subtract(feeAmt);
|
||||
}
|
||||
} else { // 分账失败
|
||||
if (AdapayErrorCode.CONFIRM_AMT_OVER_LIMIT.equals(response.getString("error_code"))) {
|
||||
// 当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额
|
||||
// 这里有两种可能 1.可能是之前算错了手续费的旧订单
|
||||
// 2.可能是之前执行过完单流程 改价单分账成功了 但是子财务单分账失败了
|
||||
// 所以直接跳过
|
||||
logger.info("子订单[code={}] 跳过[改价单]分账", odCode);
|
||||
} else {
|
||||
logger.error("子订单[code={}]的[改价单 paymentId={}]分账失败: {}", odCode, fcRecord.getRemark(), response.toJSONString());
|
||||
// 其它错误抛异常
|
||||
throw new IllegalArgumentException(response.getString("error_msg"));
|
||||
boolean paid = PayStatus.PAID.getCode().equals(fcRecord.getPayStatus());
|
||||
boolean payedAdd = PayStatus.PAYED_ADD.getCode().equals(fcRecord.getPayStatus());
|
||||
if (paid || payedAdd) {
|
||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||
addPrice = fcRecord.getChangeMoney();
|
||||
// 待提现金额里加入改价单金额
|
||||
dtx = dtx.add(fcRecord.getChangeMoney());
|
||||
// 这里先自己承担手续费 后面再用平台抽成来补偿
|
||||
DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), true);
|
||||
divMembers.add(divMember);
|
||||
//调用分账
|
||||
logger.info("子订单[code={}]的[改价单]发起分账", odCode);
|
||||
JSONObject response = adapayService.paymentConfirm(financialDetail.getDeptId(), fcRecord.getRemark(),
|
||||
payment.getOrderNo() + "_" + System.currentTimeMillis(),
|
||||
AdapayUtils.bigDecimalToString(fcRecord.getChangeMoney()), divMembers, null, null);
|
||||
if (AdapayStatusEnum.succeeded.code.equals(response.getString("status"))) { // 分账成功
|
||||
logger.info("子订单[code={}]的[改价单]分账成功", odCode);
|
||||
// 这是被扣掉的手续费 按理说这里肯定大于0
|
||||
String fee_amt = response.getString("fee_amt");
|
||||
feeAmt = new BigDecimal(fee_amt);
|
||||
if (feeAmt.compareTo(platformFeeFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) {
|
||||
// 当 0.00<改价单的手续费<=平台抽成金额 时
|
||||
// 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额
|
||||
fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(feeAmt));
|
||||
int i = financialDetailService.updateFinancialDetail(fdUpdate);
|
||||
compensate = i > 0;
|
||||
} else {
|
||||
logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费",
|
||||
orderDetail.getOrderMasterCode(), odCode);
|
||||
// 平台抽成不足以承担改价单手续费了 那没办法了只能自己承担
|
||||
// 待提现金额里减去改价单手续费
|
||||
dtx = dtx.subtract(feeAmt);
|
||||
}
|
||||
} else { // 分账失败
|
||||
if (AdapayErrorCode.CONFIRM_AMT_OVER_LIMIT.equals(response.getString("error_code"))) {
|
||||
// 当前确认金额 > 支付金额 - 已支付确认金额 - 已支付撤销金额
|
||||
// 这里有两种可能 1.可能是之前算错了手续费的旧订单
|
||||
// 2.可能是之前执行过完单流程 改价单分账成功了 但是子财务单分账失败了
|
||||
// 所以直接跳过
|
||||
logger.info("子订单[code={}] 跳过[改价单]分账", odCode);
|
||||
} else {
|
||||
logger.error("子订单[code={}]的[改价单 paymentId={}]分账失败: {}", odCode, fcRecord.getRemark(), response.toJSONString());
|
||||
// 其它错误抛异常
|
||||
throw new IllegalArgumentException(response.getString("error_msg"));
|
||||
}
|
||||
}
|
||||
} else {
|
||||
addPrice = BigDecimal.ZERO;
|
||||
}
|
||||
} else {
|
||||
addPrice = BigDecimal.ZERO;
|
||||
|
|
@ -577,7 +588,6 @@ public class OrderDetailServiceImpl implements OrderDetailService {
|
|||
// 修改订单状态
|
||||
OrderDetail odUpdate = new OrderDetail();
|
||||
odUpdate.setId(orderDetailId);
|
||||
odUpdate.setOrderStatus(OrderStatus.FINISH.code());
|
||||
odUpdate.setDrawCashTime(new Date());
|
||||
odUpdate.setDrawCashStatus(1);
|
||||
// 保存提现ID 用于同步Adapay提现状态
|
||||
|
|
|
|||
|
|
@ -182,10 +182,14 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
// 确认支付总金额
|
||||
BigDecimal confirmAmt = BigDecimal.ZERO;
|
||||
|
||||
// 大师傅/店铺提成=订单总金额 - 上门师傅结单金额 - 平台提成 - 订单超时罚金 - 分销金额 - 退款金额 - 订单加价
|
||||
BigDecimal bigWorkerAmt = financialMaster.getPayMoney();
|
||||
|
||||
// key:memberId(分账账户ID) value:分账金额
|
||||
HashMap<String, BigDecimal> memberMap = new HashMap<>();
|
||||
|
||||
for (FinancialDetail financialDetail : financialDetails) {
|
||||
bigWorkerAmt = bigWorkerAmt.subtract(financialDetail.getPayMoney());
|
||||
String memberId;
|
||||
switch (financialDetail.getFinancialDetailType()) {
|
||||
case 0:
|
||||
|
|
@ -193,9 +197,7 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
break;
|
||||
case 1:
|
||||
// 大师傅/店铺提成
|
||||
memberId = AdapayUtils.getWorkerMemberId(financialDetail.getPayeeId(), orderMaster.getDeptId());
|
||||
memberMap.merge(memberId, financialDetail.getPayMoney(), BigDecimal::add);
|
||||
confirmAmt = confirmAmt.add(financialDetail.getPayMoney());
|
||||
// 没有大师傅/店铺提成了 不再考虑这个case 2023/04/17
|
||||
break;
|
||||
case 2:
|
||||
// 平台提成 并且是手续费承担方
|
||||
|
|
@ -225,6 +227,14 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
}
|
||||
}
|
||||
|
||||
List<FinancialChangeRecord> fcrList = financialChangeRecordService.selectByMasterId(orderMasterId);
|
||||
for (FinancialChangeRecord fcr : fcrList) {
|
||||
if (PayStatus.PAID.getCode().equals(fcr.getPayStatus()) || PayStatus.PAYED_ADD.getCode().equals(fcr.getPayStatus())) {
|
||||
confirmAmt = confirmAmt.subtract(fcr.getChangeMoney());
|
||||
}
|
||||
}
|
||||
memberMap.put(AdapayUtils.getWorkerMemberId(orderMaster.getWorkerId(), orderMaster.getDeptId()), bigWorkerAmt);
|
||||
|
||||
// 分账账户
|
||||
ArrayList<DivMember> divMembers = new ArrayList<>();
|
||||
for (Map.Entry<String, BigDecimal> entry : memberMap.entrySet()) {
|
||||
|
|
@ -445,11 +455,12 @@ public class OrderMasterServiceImpl implements OrderMasterService {
|
|||
Assert.notNull(orderMaster, "OrderMaster is null!!!");
|
||||
// 先判断主订单是否派完单
|
||||
List<OrderGoods> masterGoods = orderGoodsService.selectByOrderMasterId(orderMasterId);
|
||||
long masterCount = masterGoods.stream().mapToInt(OrderGoods::getGoodsNum).sum();
|
||||
long detailCount = orderDetailService.selectByOrderMasterId(orderMasterId).stream().mapToInt(x -> {
|
||||
List<OrderGoods> detailGoods = orderGoodsService.selectByOrderDetailId(x.getId());
|
||||
return detailGoods.stream().mapToInt(OrderGoods::getGoodsNum).sum();
|
||||
}).sum();
|
||||
return masterCount == detailCount;
|
||||
for (OrderGoods orderGoods : masterGoods) {
|
||||
// 是否有未派完的子单
|
||||
if (!orderGoods.getGoodsNum().equals(orderGoods.getServerGoodsNum())) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.ghy.payment.domain;
|
|||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.ghy.common.annotation.Excel;
|
||||
import com.ghy.common.core.domain.BaseEntity;
|
||||
import com.ghy.common.enums.PayStatus;
|
||||
import com.ghy.common.enums.PayTypeEnum;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
|
@ -45,9 +47,15 @@ public class FinancialMaster extends BaseEntity {
|
|||
@Excel(name = "服务金额", cellType = Excel.ColumnType.STRING)
|
||||
private BigDecimal serverMoney;
|
||||
|
||||
/**
|
||||
* @see PayTypeEnum
|
||||
*/
|
||||
@Excel(name = "支付方式,微信/支付宝/线下", cellType = Excel.ColumnType.NUMERIC)
|
||||
private Integer payType;
|
||||
|
||||
/**
|
||||
* @see PayStatus
|
||||
*/
|
||||
@Excel(name = "支付状态, 未付款/已付款", cellType = Excel.ColumnType.NUMERIC)
|
||||
private Integer payStatus;
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
package com.ghy.payment.domain;
|
||||
|
||||
import com.alibaba.fastjson.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* 退款记录
|
||||
*/
|
||||
@Data
|
||||
public class ReverseRecord {
|
||||
private String id;
|
||||
private Long deptId;
|
||||
private String status;
|
||||
@JSONField(name = "order_no")
|
||||
private String orderNo;
|
||||
@JSONField(name = "payment_id")
|
||||
private String paymentId;
|
||||
@JSONField(name = "reverse_amt")
|
||||
private String reverseAmt;
|
||||
@JSONField(name = "reversed_amt")
|
||||
private String reversedAmt;
|
||||
@JSONField(name = "confirmed_amt")
|
||||
private String confirmedAmt;
|
||||
@JSONField(name = "refunded_amt")
|
||||
private String refundedAmt;
|
||||
@JSONField(name = "error_code")
|
||||
private String errorCode;
|
||||
@JSONField(name = "error_msg")
|
||||
private String errorMsg;
|
||||
@JSONField(name = "error_type")
|
||||
private String errorType;
|
||||
@JSONField(name = "created_time")
|
||||
private String createdTime;
|
||||
private Date createTime;
|
||||
}
|
||||
|
|
@ -0,0 +1,8 @@
|
|||
package com.ghy.payment.mapper;
|
||||
|
||||
import com.ghy.payment.domain.ReverseRecord;
|
||||
|
||||
public interface ReverseRecordMapper {
|
||||
|
||||
int insert(ReverseRecord record);
|
||||
}
|
||||
|
|
@ -543,6 +543,7 @@ public class AdapayService {
|
|||
reverseParams.put("notify_url", adapayProperties.getNotifyUrl());
|
||||
reverseParams.put("order_no", type.code + System.currentTimeMillis());
|
||||
JSONObject response = (JSONObject) PaymentReverse.create(reverseParams, deptId.toString());
|
||||
response.put("deptId", deptId);
|
||||
executor.execute(() -> payReverseCallbackService.onResponse(response));
|
||||
return response;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,7 +70,9 @@ public interface FinancialChangeRecordService {
|
|||
int updatePayStatus(Long id, Integer payStatus);
|
||||
|
||||
/**
|
||||
* 加价单发起全额退款
|
||||
* 加价单发起全额退款<br>
|
||||
* 修改支付状态为 PayStatus.REFUNDING<br>
|
||||
* 但不修改财务单的金额<br>
|
||||
*
|
||||
* @param deptId 公司ID
|
||||
* @param fcr 加价单
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="com.ghy.payment.mapper.ReverseRecordMapper">
|
||||
|
||||
<sql id="select_columns">
|
||||
SELECT id, status, order_no, payment_id, reverse_amt, reversed_amt, confirmed_amt, refunded_amt,
|
||||
error_code, error_msg, error_type, created_time, create_time, dept_id
|
||||
FROM reverse_record
|
||||
</sql>
|
||||
|
||||
<insert id="insert" parameterType="com.ghy.payment.domain.ReverseRecord">
|
||||
INSERT INTO reverse_record(id, status, order_no, payment_id, reverse_amt, reversed_amt, confirmed_amt, refunded_amt,
|
||||
error_code, error_msg, error_type, created_time, dept_id)
|
||||
VALUES (#{id}, #{status}, #{orderNo}, #{paymentId}, #{reverseAmt}, #{reversedAmt}, #{confirmedAmt},
|
||||
#{refundedAmt}, #{errorCode}, #{errorMsg}, #{errorType}, #{createdTime}, #{deptId})
|
||||
</insert>
|
||||
|
||||
</mapper>
|
||||
Loading…
Reference in New Issue