加价分账

This commit is contained in:
kuang.yife 2022-11-25 10:23:39 +08:00
parent b11b8b9c2b
commit 63e7deccfe
7 changed files with 58 additions and 2 deletions

View File

@ -646,6 +646,9 @@ public class OrderDetailController extends BaseController {
// 判断工单状态是否为服务中以及是否已支付 // 判断工单状态是否为服务中以及是否已支付
OrderDetail orderDetail = orderDetailService.selectById(request.getOrderDetailId()); OrderDetail orderDetail = orderDetailService.selectById(request.getOrderDetailId());
OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId()); OrderMaster orderMaster = orderMasterService.selectById(orderDetail.getOrderMasterId());
if(orderDetail.getOrderStatus() != OrderStatus.FINISH_CHECK.code()){
return AjaxResult.success("发起成功");
}
if (orderDetail.getOrderStatus() != OrderStatus.SERVER.code() if (orderDetail.getOrderStatus() != OrderStatus.SERVER.code()
|| !orderMaster.getPayStatus().equals(PayStatus.PAID.getCode())) { || !orderMaster.getPayStatus().equals(PayStatus.PAID.getCode())) {
return AjaxResult.error("未支付订单或非服务中订单,发起完单失败"); return AjaxResult.error("未支付订单或非服务中订单,发起完单失败");

View File

@ -317,6 +317,39 @@ public class OrderDetailServiceImpl implements OrderDetailService {
} }
// 更新订单状态 // 更新订单状态
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code()); orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code());
// 找到所有的加价记录
List<FinancialChangeRecord> financialChangeRecords = financialChangeRecordService.selectByDetailIds(String.valueOf(orderDetailId));
if(!CollectionUtils.isEmpty(financialChangeRecords)){
ArrayList<DivMember> divMembers = new ArrayList<>();
financialChangeRecords.forEach(financialChangeRecord -> {
// 递增解决分账
financialDetail.forEach(detail->{
BigDecimal money;
// 剩余金额足够本次分账
if(financialChangeRecord.getLeftMoney().compareTo(detail.getPayMoney()) > 0){
money = detail.getPayMoney();
detail.setPayMoney(BigDecimal.ZERO);
}else {
// 剩余金额不够分账
money = financialChangeRecord.getLeftMoney();
detail.setPayMoney(detail.getPayMoney().subtract(money));
}
String memberId = AdapayUtils.getWorkerMemberId(detail.getPayeeId(), detail.getDeptId());
DivMember divMember = new DivMember(memberId, AdapayUtils.bigDecimalToString(money), false);
divMembers.add(divMember);
});
//调用分账
logger.info("子订单[code={}]分账信息: {}", orderDetail.getCode(), JSON.toJSONString(divMembers));
JSONObject response;
try {
response = adapayService.paymentConfirm(financialDetail.get(0).getDeptId(), financialChangeRecord.getRemark(), payment.getOrderNo() + "_" + System.currentTimeMillis(),
String.valueOf(financialChangeRecord.getLeftMoney()), divMembers, null, null);
logger.info("子订单[code={}]分账结果: {}", orderDetail.getCode(), response.toJSONString());
} catch (BaseAdaPayException e) {
throw new RuntimeException(e);
}
});
}
// 分账账户信息 // 分账账户信息
Map<String, DivMember> divMemberMap = new HashMap<>(); Map<String, DivMember> divMemberMap = new HashMap<>();
ArrayList<DivMember> divMembers = new ArrayList<>(); ArrayList<DivMember> divMembers = new ArrayList<>();

View File

@ -39,6 +39,17 @@ public class FinancialChangeRecord extends BaseEntity
@Excel(name = "1.本单报价 2.加单报价") @Excel(name = "1.本单报价 2.加单报价")
private Integer type; private Integer type;
@Excel(name = "剩余分账金额")
private BigDecimal leftMoney;
public BigDecimal getLeftMoney() {
return leftMoney;
}
public void setLeftMoney(BigDecimal leftMoney) {
this.leftMoney = leftMoney;
}
public void setId(String id) public void setId(String id)
{ {
this.id = id; this.id = id;
@ -102,6 +113,7 @@ public class FinancialChangeRecord extends BaseEntity
.append("status", getStatus()) .append("status", getStatus())
.append("payStatus", getPayStatus()) .append("payStatus", getPayStatus())
.append("type", getType()) .append("type", getType())
.append("leftMoney", getLeftMoney())
.toString(); .toString();
} }
} }

View File

@ -66,6 +66,7 @@ public class FinancialChangeRecordServiceImpl implements FinancialChangeRecordSe
@Override @Override
public int insertFinancialChangeRecord(FinancialChangeRecord financialChangeRecord) public int insertFinancialChangeRecord(FinancialChangeRecord financialChangeRecord)
{ {
financialChangeRecord.setLeftMoney(financialChangeRecord.getChangeMoney());
return financialChangeRecordMapper.insertFinancialChangeRecord(financialChangeRecord); return financialChangeRecordMapper.insertFinancialChangeRecord(financialChangeRecord);
} }

View File

@ -10,6 +10,7 @@ import com.ghy.payment.mapper.FinancialMasterMapper;
import com.ghy.payment.mapper.PaymentMapper; import com.ghy.payment.mapper.PaymentMapper;
import com.ghy.payment.service.FinancialDetailService; import com.ghy.payment.service.FinancialDetailService;
import com.ghy.payment.service.FinancialMasterService; import com.ghy.payment.service.FinancialMasterService;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -106,7 +107,9 @@ public class FinancialMasterServiceImpl implements FinancialMasterService {
List<FinancialMaster> result = financialMasterMapper.selectFinancialMasterList(param); List<FinancialMaster> result = financialMasterMapper.selectFinancialMasterList(param);
if(!CollectionUtils.isEmpty(result)){ if(!CollectionUtils.isEmpty(result)){
financialMasterMapper.updateOrderStatus(result.get(0).getOrderMasterCode(), PayStatus.PAID.getCode()); financialMasterMapper.updateOrderStatus(result.get(0).getOrderMasterCode(), PayStatus.PAID.getCode());
if(StringUtils.isEmpty(result.get(0).getPaymentId())){
financialMasterMapper.paySucceeded(paymentId, result.get(0).getId(), payType); financialMasterMapper.paySucceeded(paymentId, result.get(0).getId(), payType);
}
FinancialDetail request = new FinancialDetail(); FinancialDetail request = new FinancialDetail();
request.setFinancialMasterId(result.get(0).getId()); request.setFinancialMasterId(result.get(0).getId());
request.setPayStatus(PayStatus.PAID.getCode()); request.setPayStatus(PayStatus.PAID.getCode());

View File

@ -72,6 +72,8 @@ public class PayCallbackService implements CallBackService {
FinancialChangeRecord financialChangeRecord = new FinancialChangeRecord(); FinancialChangeRecord financialChangeRecord = new FinancialChangeRecord();
financialChangeRecord.setId(financialChangeRecordId); financialChangeRecord.setId(financialChangeRecordId);
financialChangeRecord.setPayStatus(1); financialChangeRecord.setPayStatus(1);
// 加价的支付paymentId回填到remark
financialChangeRecord.setRemark(payment.getId());
financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord); financialChangeRecordService.updateFinancialChangeRecord(financialChangeRecord);
// 修改子订单的payMoney // 修改子订单的payMoney

View File

@ -10,10 +10,11 @@
<result property="changeMoney" column="change_money" /> <result property="changeMoney" column="change_money" />
<result property="status" column="status" /> <result property="status" column="status" />
<result property="payStatus" column="pay_status" /> <result property="payStatus" column="pay_status" />
<result property="leftMoney" column="left_money" />
</resultMap> </resultMap>
<sql id="selectFinancialChangeRecordVo"> <sql id="selectFinancialChangeRecordVo">
select id, order_detail_id, change_money, status, pay_status, type, remark from financial_change_record select id, order_detail_id, change_money, status, pay_status, type, left_money, remark from financial_change_record
</sql> </sql>
<select id="selectNotPayRecordByDetailId" parameterType="Long" resultMap="FinancialChangeRecordResult"> <select id="selectNotPayRecordByDetailId" parameterType="Long" resultMap="FinancialChangeRecordResult">
@ -70,6 +71,7 @@
<if test="status != null">status = #{status},</if> <if test="status != null">status = #{status},</if>
<if test="payStatus != null">pay_status = #{payStatus},</if> <if test="payStatus != null">pay_status = #{payStatus},</if>
<if test="type != null">type = #{type},</if> <if test="type != null">type = #{type},</if>
<if test="leftMoney != null">left_money = #{leftMoney},</if>
<if test="remark != null">remark = #{remark},</if> <if test="remark != null">remark = #{remark},</if>
</trim> </trim>
where id = #{id} where id = #{id}