You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
6.2 KiB
6.2 KiB
接口
@ApiOperation("批量处理挂起正向订单,进行补单")
@PostMapping("/completeUnReportOrder")
public ResultVO completeUnReportOrder(String startDate,String endDate){
taskServiceApi.completeUnReportOrder(startDate,endDate);
return ResultVO.success();
}
@ApiOperation("批量处理挂起反向订单,进行补单")
@PostMapping("/completeUnReportReverseOrder")
public ResultVO completeUnReportReverseOrder(){
taskServiceApi.completeUnReportReverseOrder();
return ResultVO.success();
}
正向补单
@Scheduled(fixedDelay=SIX_HOUR)
public void completeUnReportOrder() {
try{
log.info("批量处理挂起正向订单,进行补单");
// handleOrderTarckService.completeUnReportOrder();
handleOrderTarckService.completeUnReportOrderV2();
}catch (Exception e){
log.error("批量处理挂起订单,进行补单失败,原因:", e);
e.printStackTrace();
}
}
/**
* 新版本计算补单
*/
public void completeUnReportOrderV2() {
//处理前60天的挂起订单
Date startDate = ToolDateTime.startDateByDay(new Date(), -60);
Date endDate = ToolDateTime.startDateByDay(new Date(), 0);
// Date endDate = ToolDateTime.endDateByDay(new Date());
List<EquipmentChargeOrderDO> hangUpOrderList = equipmentChargeOrderDOMapper.queryHangUpOrder(startDate, endDate);//查询挂起订单
Stream.iterate(0, i -> i + 1).limit(hangUpOrderList.size()).forEach(i -> {
asyncTaskService.completeUnReportOrder(hangUpOrderList.get(i));
});
}
反向补单
@Scheduled(cron = "0 0 3 * * ?")
public void completeUnReportReverseOrder() {
try{
log.info("批量处理挂起反向订单,进行补单");
handleOrderTarckService.completeUnReportReverseOrder();
}catch (Exception e){
log.error("批量处理挂起反向订单,进行补单失败,原因:", e);
e.printStackTrace();
}
}
定时了定时任务每天3
点进行挂起反向订单的补单操作。
/**
* 批量处理挂起反向订单,进行补单
*/
public void completeUnReportReverseOrder() {
//处理指定 ~ 指定时间三天前 时间内的反向挂起的订单
// #{code} = push_reverse_orders.duration
// select value from t_biz_parameter where state = 1 and code = #{code} order by id desc limit 1
// select value from t_biz_parameter where state = 1 and code = 'push_reverse_orders.duration' order by id desc limit 1
// 返回值 : 72 小时
String time = equipmentChargeOrderDOMapper.getReverseFinishTime(Constant.REVERSE_ORDER_TIME);
int hour = new BigDecimal(time).intValue();
Date startDate = DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -(hour + 720));//33天之内的
Date endDate = DateUtil.offset(new Date(), DateField.HOUR_OF_DAY, -hour);//72小时前,也就是3天前
//查询这段时间内挂起的工单
/**
<select id="queryHangUpReverseOrder" resultMap="BaseResultMap">
SELECT
o.*
FROM
t_equipment_charge_order o left join t_station s on o.station_id = s.id
WHERE o.state = 5 and s.is_hlht = 1
<if test="startDate != null">
AND o.create_time >= #{startDate}
</if>
<if test="endDate != null">
AND o.create_time <= #{endDate}
</if>
ORDER BY o.id DESC
</select>
o.state = 5 订单状态 0 创建中 1准备充电中 2 充电中 3完成 4 取消 5挂起 6需要手动补单 7结算中
is_hlht=1 是否是互联互通站点 1是 0不是 , 注意:这里只处理了互联互通的!因为is_hlht=1,也就是说不是互联互通的挂单,调用这个接口补单是无效的!!!
*/
List<EquipmentChargeOrderDO> hangUpOrderList = equipmentChargeOrderDOMapper.queryHangUpReverseOrder(startDate, endDate);//查询挂起订单
Stream.iterate(0, i -> i + 1).limit(hangUpOrderList.size()).forEach(i -> {
CompletableFuture<Map<String, Object>> sendCoupon = CompletableFuture.supplyAsync(() -> {
//处理挂起订单进行补单
asyncTaskService.completeUnReportReverseOrder(hangUpOrderList.get(i));
return null;
}, handleReverseService);
});
}
从JAVA
代码来看,依赖这个接口实现补单功能有两个问题:
- 它只能实现
72
小时的补单,为什么一定要强调72
小时呢?为什么不是24
小时或者1
小时呢? - 它只能实现互联互通的补单,对于直连桩的无效,因为它根本就没有查询直联桩的补单信息!
/**
* 处理反向互通挂起订单
*/
public void completeUnReportReverseOrder(EquipmentChargeOrderDO orderDO) {
try {
//从mongo上获取最后一次推送的账单数据
NotificationChargeOrderInfoReqMongoDO notificationChargeOrderInfoReqMongoDO = notificationChargeOrderInfoReqDao.findOne(orderDO.getOrderNo());
if(notificationChargeOrderInfoReqMongoDO != null) {
completeWithPushedOrder(orderDO, notificationChargeOrderInfoReqMongoDO);
return;
}
//若是没有,则从mongo中获取最后一次充电中推送的数据 进行结算
ReverseOrderInfo reverseOrderInfo = reverseOrderInfoDao.findOne(orderDO.getOrderNo());
if(reverseOrderInfo != null) {
completeWithLastPushedOrder(orderDO, reverseOrderInfo);
}
} catch (Exception e) {
addOrderTrack(orderDO.getOrderNo(), orderDO.getUserId(), orderDO.getConnectorId().toString(), (byte) 3, (byte) 0, "补单失败,补单异常,异常信息");
log.error("反向订单" + orderDO.getOrderNo() + "补单异常,异常信息:", e);
}
}