子订单增加分账/提现状态

This commit is contained in:
HH 2023-02-03 01:18:25 +08:00
parent bbfc76472b
commit a5f274652f
6 changed files with 106 additions and 42 deletions

View File

@ -77,4 +77,17 @@ public class OrderDetail extends BaseEntity {
private Integer shelveStatus; private Integer shelveStatus;
private Integer ledgerAccountStatus; private Integer ledgerAccountStatus;
/**
* draw_cash_status
* 0 未分账
* 1 已分账
* 2 已到账
*/
private Integer drawCashStatus;
/**
* 发起提现时间 draw_cash_date
*/
private Date drawCashDate;
} }

View File

@ -44,10 +44,7 @@ import java.math.RoundingMode;
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;
import java.util.ArrayList; import java.util.*;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicLong; import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -359,13 +356,18 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 找到 type=平台抽成 的子财务单 用来承担手续费 // 找到 type=平台抽成 的子财务单 用来承担手续费
List<FinancialDetail> details = financialDetailService.selectByFinancialMasterIdAndType(financialMasterId, FinancialDetailType.PLATFORM_FEE.getCode()); List<FinancialDetail> details = financialDetailService.selectByFinancialMasterIdAndType(financialMasterId, FinancialDetailType.PLATFORM_FEE.getCode());
FinancialDetail platformFeeFD = details.get(0); FinancialDetail platformFeeFD = details.get(0);
FinancialDetail update = new FinancialDetail(); FinancialDetail fdUpdate = new FinancialDetail();
update.setId(platformFeeFD.getId()); fdUpdate.setId(platformFeeFD.getId());
update.setPayMoney(platformFeeFD.getPayMoney()); fdUpdate.setPayMoney(platformFeeFD.getPayMoney());
logger.debug("子订单[code={}]的完单流程开始", odCode); logger.debug("子订单[code={}]的完单流程开始", odCode);
// 更新订单状态 // 修改订单状态
orderDetailMapper.updateStatus(orderDetailId, OrderStatus.FINISH.code()); OrderDetail odUpdate = new OrderDetail();
odUpdate.setId(orderDetailId);
odUpdate.setOrderStatus(OrderStatus.FINISH.code());
odUpdate.setDrawCashDate(new Date());
odUpdate.setDrawCashStatus(1);
orderDetailMapper.updateOrderDetail(odUpdate);
// 加价单手续费补偿成功与否 // 加价单手续费补偿成功与否
boolean compensate = false; boolean compensate = false;
@ -404,8 +406,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
if (feeAmt.compareTo(platformFeeFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) { if (feeAmt.compareTo(platformFeeFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) {
// 0.00<改价单的手续费<=平台抽成金额 // 0.00<改价单的手续费<=平台抽成金额
// 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额 // 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额
update.setPayMoney(update.getPayMoney().subtract(feeAmt)); fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(feeAmt));
int i = financialDetailService.updateFinancialDetail(update); int i = financialDetailService.updateFinancialDetail(fdUpdate);
compensate = i > 0; compensate = i > 0;
} else { } else {
logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费", logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费",
@ -469,9 +471,10 @@ public class OrderDetailServiceImpl implements OrderDetailService {
Assert.isTrue(status, response.getString("error_msg")); Assert.isTrue(status, response.getString("error_msg"));
// 待提现金额里加入子财务单金额 // 待提现金额里加入子财务单金额
dtx = dtx.add(fdPayMoney); dtx = dtx.add(fdPayMoney);
// 修改平台抽成子财务单金额 // 修改平台抽成子财务单金额
update.setPayMoney(update.getPayMoney().subtract(fee)); fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(fee));
financialDetailService.updateFinancialDetail(update); financialDetailService.updateFinancialDetail(fdUpdate);
} }
// --------------------- 子财务单分账部分 end --------------------- // --------------------- 子财务单分账部分 end ---------------------

View File

@ -5,27 +5,29 @@
<mapper namespace="com.ghy.order.mapper.OrderDetailMapper"> <mapper namespace="com.ghy.order.mapper.OrderDetailMapper">
<resultMap id="OrderDetailResult" type="com.ghy.order.domain.OrderDetail"> <resultMap id="OrderDetailResult" type="com.ghy.order.domain.OrderDetail">
<id property="id" column="id"/> <id property="id" column="id"/>
<result property="code" column="code"/> <result property="code" column="code"/>
<result property="orderMasterId" column="order_master_id"/> <result property="orderMasterId" column="order_master_id"/>
<result property="orderMasterCode" column="order_master_code"/> <result property="orderMasterCode" column="order_master_code"/>
<result property="customerId" column="customer_id"/> <result property="customerId" column="customer_id"/>
<result property="orderType" column="order_type"/> <result property="orderType" column="order_type"/>
<result property="orderStatus" column="order_status"/> <result property="orderStatus" column="order_status"/>
<result property="workerId" column="worker_id"/> <result property="workerId" column="worker_id"/>
<result property="revTime" column="rev_time"/> <result property="revTime" column="rev_time"/>
<result property="expectTimeStart" column="expect_time_start"/> <result property="expectTimeStart" column="expect_time_start"/>
<result property="expectTimeEnd" column="expect_time_end"/> <result property="expectTimeEnd" column="expect_time_end"/>
<result property="workBeginTime" column="work_begin_time"/> <result property="workBeginTime" column="work_begin_time"/>
<result property="workFinishTime" column="work_finish_time"/> <result property="workFinishTime" column="work_finish_time"/>
<result property="clockInLocation" column="clock_in_location"/> <result property="drawCashDate" column="draw_cash_date"/>
<result property="shelveStatus" column="shelve_status"/> <result property="drawCashStatus" column="draw_cash_status"/>
<result property="ledgerAccountStatus" column="ledger_account_status"/> <result property="clockInLocation" column="clock_in_location"/>
<result property="createBy" column="create_by"/> <result property="shelveStatus" column="shelve_status"/>
<result property="createTime" column="create_time"/> <result property="ledgerAccountStatus" column="ledger_account_status"/>
<result property="updateBy" column="update_by"/> <result property="createBy" column="create_by"/>
<result property="updateTime" column="update_time"/> <result property="createTime" column="create_time"/>
<result property="remark" column="remark"/> <result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap> </resultMap>
<sql id="selectOrderDetail"> <sql id="selectOrderDetail">
@ -42,6 +44,8 @@
expect_time_end, expect_time_end,
work_begin_time, work_begin_time,
work_finish_time, work_finish_time,
draw_cash_date,
draw_cash_status,
clock_in_location, clock_in_location,
ledger_account_status, ledger_account_status,
shelve_status, shelve_status,
@ -66,6 +70,8 @@
od.expect_time_end, od.expect_time_end,
od.work_begin_time, od.work_begin_time,
od.work_finish_time, od.work_finish_time,
od.draw_cash_date,
od.draw_cash_status,
od.clock_in_location, od.clock_in_location,
od.ledger_account_status, od.ledger_account_status,
od.shelve_status, od.shelve_status,
@ -124,6 +130,9 @@
<if test="shelveStatus == null"> <if test="shelveStatus == null">
AND od.shelve_status = 0 AND od.shelve_status = 0
</if> </if>
<if test="drawCashStatus != null">
AND od.draw_cash_status = ${drawCashStatus}
</if>
</where> </where>
order by od.create_time order by od.create_time
<trim suffixOverrides=","> <trim suffixOverrides=",">
@ -223,6 +232,8 @@
<if test="useTimeNotRange">expect_time_end = null,</if> <if test="useTimeNotRange">expect_time_end = null,</if>
<if test="workBeginTime != null">work_begin_time = #{workBeginTime},</if> <if test="workBeginTime != null">work_begin_time = #{workBeginTime},</if>
<if test="workFinishTime != null">work_finish_time = #{workFinishTime},</if> <if test="workFinishTime != null">work_finish_time = #{workFinishTime},</if>
<if test="drawCashDate != null">draw_cash_date = #{drawCashDate},</if>
<if test="drawCashStatus != null">draw_cash_status = #{drawCashStatus},</if>
<if test="clockInLocation != null and clockInLocation != ''">clock_in_location = #{clockInLocation},</if> <if test="clockInLocation != null and clockInLocation != ''">clock_in_location = #{clockInLocation},</if>
<if test="remark != null">remark = #{remark},</if> <if test="remark != null">remark = #{remark},</if>
<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if> <if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>

View File

@ -8,4 +8,7 @@ public interface OrderService {
// 自动完成和分账 // 自动完成和分账
void autoFinishOrder(); void autoFinishOrder();
// 自动修改提现状态
void autoChangeDrawCashStatus();
} }

View File

@ -21,6 +21,8 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource; import javax.annotation.Resource;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Collections; import java.util.Collections;
import java.util.Date; import java.util.Date;
import java.util.List; import java.util.List;
@ -177,4 +179,27 @@ public class OrderServiceImpl implements OrderService {
} }
} }
} }
@Override
public void autoChangeDrawCashStatus() {
LocalDate now = LocalDate.now();
DayOfWeek dayOfWeek = now.getDayOfWeek();
if (dayOfWeek.getValue() > 5) {
return;
}
OrderDetail orderDetail = new OrderDetail();
orderDetail.setDrawCashStatus(1);
List<OrderDetail> orderDetails = orderDetailService.selectOrderDetailList(orderDetail);
long before24h = System.currentTimeMillis() - (24 * 60 * 60 * 1000);
for (OrderDetail od : orderDetails) {
if (od.getDrawCashDate().getTime() < before24h) {
OrderDetail update = new OrderDetail();
update.setId(od.getId());
update.setOrderStatus(2);
orderDetailService.updateOrderDetail(update);
logger.info("订单[{}]自动提现成功", od.getCode());
}
}
}
} }

View File

@ -15,25 +15,34 @@ public class OrderTask {
/** /**
* 超时状态刷新 * 超时状态刷新
* */ */
public void overTimeOrder(String orderStatus){ public void overTimeOrder(String orderStatus) {
try { try {
orderService.overTimeOrder(orderStatus); orderService.overTimeOrder(orderStatus);
}catch (Exception e){ } catch (Exception e) {
log.error("over time order task error is {}", ExceptionUtil.getExceptionMessage(e)); log.error("over time order task error is {}", ExceptionUtil.getExceptionMessage(e));
e.printStackTrace();
} }
} }
/** /**
* 自动确认完成订单 * 自动确认完成订单
* */ */
public void finishOrder(){ public void finishOrder() {
try { try {
orderService.autoFinishOrder(); orderService.autoFinishOrder();
}catch (Exception e){ } catch (Exception e) {
log.error("auto finish order task error is {}", ExceptionUtil.getExceptionMessage(e)); log.error("auto finish order task error is {}", ExceptionUtil.getExceptionMessage(e));
e.printStackTrace(); }
}
/**
* 自动修改提现状态
*/
public void autoChangeDrawCashStatus() {
try {
orderService.autoChangeDrawCashStatus();
} catch (Exception e) {
log.error(e.getMessage(), e);
} }
} }