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

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 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.format.DateTimeFormatter;
import java.time.format.DateTimeFormatterBuilder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.*;
import java.util.concurrent.atomic.AtomicLong;
import java.util.stream.Collectors;
@ -359,13 +356,18 @@ public class OrderDetailServiceImpl implements OrderDetailService {
// 找到 type=平台抽成 的子财务单 用来承担手续费
List<FinancialDetail> details = financialDetailService.selectByFinancialMasterIdAndType(financialMasterId, FinancialDetailType.PLATFORM_FEE.getCode());
FinancialDetail platformFeeFD = details.get(0);
FinancialDetail update = new FinancialDetail();
update.setId(platformFeeFD.getId());
update.setPayMoney(platformFeeFD.getPayMoney());
FinancialDetail fdUpdate = new FinancialDetail();
fdUpdate.setId(platformFeeFD.getId());
fdUpdate.setPayMoney(platformFeeFD.getPayMoney());
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;
@ -404,8 +406,8 @@ public class OrderDetailServiceImpl implements OrderDetailService {
if (feeAmt.compareTo(platformFeeFD.getPayMoney()) < 0 && !"0.00".equals(fee_amt)) {
// 0.00<改价单的手续费<=平台抽成金额
// 用平台抽成来补偿改价单的手续费 修改平台抽成子财务单金额
update.setPayMoney(update.getPayMoney().subtract(feeAmt));
int i = financialDetailService.updateFinancialDetail(update);
fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(feeAmt));
int i = financialDetailService.updateFinancialDetail(fdUpdate);
compensate = i > 0;
} else {
logger.warn("主订单[code={}]的平台抽成金额不足以承担子订单[code={}]的[改价单]的手续费",
@ -469,9 +471,10 @@ public class OrderDetailServiceImpl implements OrderDetailService {
Assert.isTrue(status, response.getString("error_msg"));
// 待提现金额里加入子财务单金额
dtx = dtx.add(fdPayMoney);
// 修改平台抽成子财务单金额
update.setPayMoney(update.getPayMoney().subtract(fee));
financialDetailService.updateFinancialDetail(update);
fdUpdate.setPayMoney(fdUpdate.getPayMoney().subtract(fee));
financialDetailService.updateFinancialDetail(fdUpdate);
}
// --------------------- 子财务单分账部分 end ---------------------

View File

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

View File

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

View File

@ -21,6 +21,8 @@ import org.springframework.util.CollectionUtils;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.time.DayOfWeek;
import java.time.LocalDate;
import java.util.Collections;
import java.util.Date;
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 {
orderService.overTimeOrder(orderStatus);
}catch (Exception e){
} catch (Exception e) {
log.error("over time order task error is {}", ExceptionUtil.getExceptionMessage(e));
e.printStackTrace();
}
}
/**
* 自动确认完成订单
* */
public void finishOrder(){
*/
public void finishOrder() {
try {
orderService.autoFinishOrder();
}catch (Exception e){
} catch (Exception 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);
}
}