main^2
黄海 12 months ago
parent bca946549b
commit 24530b023d

@ -22,6 +22,7 @@ import java.util.stream.Stream;
/**
*
*
* @author hzh
* @date 2023/6/6
*/
@ -63,13 +64,34 @@ public class ManualOrderStatusHandlerController {
return ResultVO.success();
}
//【2024-08-13 Modify by HuangHai】
@ApiOperation("批量处理挂起反向订单,进行补单")
@PostMapping("/completeUnReportReverseOrder")
public ResultVO completeUnReportReverseOrder(){
handleOrderTarckService.completeUnReportReverseOrder();
public ResultVO completeUnReportReverseOrder(String startDate, String endDate) {
Date startTime = ToolDateTime.startDateByDay(new Date(), -60);
Date endTime = ToolDateTime.startDateByDay(new Date(), 0);
DateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
if (StringUtils.isNotEmpty(startDate)) {
startTime = format.parse(startDate);
}
if (StringUtils.isNotEmpty(endDate)) {
endTime = format.parse(endDate);
}
} catch (ParseException e) {
return ResultVO.custom("时间格式错误", 500);
}
handleOrderTarckService.completeUnReportReverseOrder(startTime,endTime);
return ResultVO.success();
}
// @ApiOperation("批量处理挂起反向订单,进行补单")
// @PostMapping("/completeUnReportReverseOrder")
// public ResultVO completeUnReportReverseOrder(){
// handleOrderTarckService.completeUnReportReverseOrder();
// return ResultVO.success();
// }
@ApiOperation("启明:批量处理结算中正向订单,进行结算、扣费")
@PostMapping("/handleInSettlementOrder")
@ -84,7 +106,9 @@ public class ManualOrderStatusHandlerController {
return ResultVO.custom("时间格式错误", 500);
}
List<EquipmentChargeOrderDO> inSettlementOrderList = equipmentChargeOrderDOMapper.queryInSettlementOrder(endTime);
inSettlementOrderList.forEach(p->{asyncTaskService.handleInSettlementOrder(p.getPlatformOrderNo(),p.getPayStatus().intValue());});
inSettlementOrderList.forEach(p -> {
asyncTaskService.handleInSettlementOrder(p.getPlatformOrderNo(), p.getPayStatus().intValue());
});
return ResultVO.success();
}

@ -103,56 +103,70 @@ public class AsyncTaskService {
.setWorkQueue(new LinkedBlockingQueue<>(100))
.build();
// @Async(value = "asyncTaskExecutor")
public void completeUnReportOrderOld(EquipmentChargeOrderDO hangUpOrderList) {
try {
EquipmentOrder equipmentOrder = equipmentOrderDao.findOne(hangUpOrderList.getOrderNo());//查询订单下发结束命令前的最新一笔订单信息
if (equipmentOrder == null) {
log.info("completeUnReportOrder补单订单号:{},mongo未查询到信息", hangUpOrderList.getOrderNo());
equipmentChargeOrderDOMapper.setPatchStateByOrderNo(hangUpOrderList.getOrderNo());
return;
}
if (!"0".equals(hangUpOrderList.getPayStatus().toString())) {
log.info("completeUnReportOrder补单订单号:{},已经支付", hangUpOrderList.getOrderNo());
return;
}
log.info("订单号{},补单开始", hangUpOrderList.getOrderNo());
EquipmentChargeOrderDO lastOrderInfo = beforeStopLastOrderInfo(equipmentOrder, hangUpOrderList);
addSettle(lastOrderInfo, equipmentOrder, equipmentOrder.getEquipmentSn()); //补单
log.info("订单号{},补单结束", hangUpOrderList.getOrderNo());
} catch (Exception e) {
log.error("订单号" + hangUpOrderList.getOrderNo() + ",补单异常,异常信息:", e);
}
}
/**
*
*
* @param hangUpOrderList
*/
@Async(value = "asyncTaskExecutor")
public void completeUnReportOrder(EquipmentChargeOrderDO hangUpOrderList) {
//EquipmentChargeOrderDO :订单表 t_equipment_charge_order
// hangUpOrderList :似乎是挂起的订单列表,为什么是列表呢?不是一条记录,一个订单吗?
try {
//通过t_equipment_charge_order表中查找order_no=2020092315154430479
//在后到MongoDb中去查找订单信息
EquipmentOrder equipmentOrder = equipmentOrderDao.findOne(hangUpOrderList.getOrderNo());//查询订单下发结束命令前的最新一笔订单信息
if (equipmentOrder == null) {
log.info("completeUnReportOrder补单失败订单号:{},mongo未查询到信息", hangUpOrderList.getOrderNo());
//把mongo无记录的订单的状态置为需要手动补单的订单
//mysql数据表t_equipment_charge_order修改
/**
-- 0 1 2 3 4 5 6 7
UPDATE t_equipment_charge_order SET state = 6 WHERE order_no = #{orderNo}
*/
equipmentChargeOrderDOMapper.setPatchStateByOrderNo(hangUpOrderList.getOrderNo());
return;
}
/**
t_equipment_charge_order
pay_status 0 1 2 3
*/
if ("2".equals(hangUpOrderList.getPayStatus().toString())) {
log.info("completeUnReportOrder补单失败订单号:{},已经支付", hangUpOrderList.getOrderNo());
//记录日志 : t_equipment_charge_order_track
//order_no:订单号
//user_id:用户ID
//connector_sn:枪号
//state:状态 0创建中 1启动中 2充电中 3充电完成 4充电异常 5订单挂起 7结算中 101扫码启动(设备认证) 102用户启动充电 103用户主动停止
//succ_stat 操作结果 0 成功 1失败
addOrderTrack(hangUpOrderList.getOrderNo(), hangUpOrderList.getUserId(), hangUpOrderList.getConnectorId().toString(), (byte) 3, (byte) 0, "补单失败,订单已经支付,无法进行二次结算");
return;
}
// t_equipment_charge_order
// select count(*) from t_account_water where order_id = #{orderNo} and type = 1
// type=1 类型 0充值 1充电扣款 2充值赠送 3后台充值 4退款 5后台转出 6后台转入 7账户清零 8用户申请退款 9退款驳回
// 查询流水,若是已有流水,则不进行二次结算
Integer count = equipmentChargeOrderDOMapper.getWaterCountByOrderNo(hangUpOrderList.getOrderNo());
if (count > 0) {
log.info("completeUnReportOrder补单失败订单号:{},订单已有流水,无法进行二次结算", hangUpOrderList.getOrderNo());
//记录日志
addOrderTrack(hangUpOrderList.getOrderNo(), hangUpOrderList.getUserId(), hangUpOrderList.getConnectorId().toString(), (byte) 3, (byte) 0, "补单失败,订单已有流水,无法进行二次结算");
return;
}
log.info("订单号{},补单开始", hangUpOrderList.getOrderNo());
//补全停止前最新一次的订单信息
//equipmentOrder : 来自MongoDb
//hangUpOrderList: 来自Mysql中需要补单的订单
EquipmentChargeOrderDO lastOrderInfo = beforeStopLastOrderInfo(equipmentOrder, hangUpOrderList);
//执行新版本的补单操作
addSettleV2(lastOrderInfo, equipmentOrder, equipmentOrder.getEquipmentSn()); //补单
log.info("订单号{},补单结束", hangUpOrderList.getOrderNo());
} catch (Exception e) {
//记录日志
addOrderTrack(hangUpOrderList.getOrderNo(), hangUpOrderList.getUserId(), hangUpOrderList.getConnectorId().toString(), (byte) 3, (byte) 0, "补单失败,补单异常,异常信息");
log.error("订单号" + hangUpOrderList.getOrderNo() + ",补单异常,异常信息:", e);
}
@ -182,12 +196,15 @@ public class AsyncTaskService {
}
}
@Async(value = "asyncTaskExecutor")
public void handleInSettlementOrder(String startChargeSeq, Integer payStatus) {
openApiServiceApi.handleInSettlementOrder(startChargeSeq, payStatus);
}
/**
*
*
* @param orderDO
* @param reverseOrderInfo
*/
@ -220,6 +237,7 @@ public class AsyncTaskService {
/**
*
*
* @param orderDO
* @param pushedOrderDO
*/
@ -301,6 +319,7 @@ public class AsyncTaskService {
/**
*
*
* @return
*/
private EquipmentChargeOrderDO updateOrderOutlayInfoReverseV2(NotifyChargeOrderInfoBO notifyChargeOrderInfoBO, EquipmentChargeOrderDTO orderDTO, EquipmentChargeOrderDO orderInfo) {
@ -364,6 +383,7 @@ public class AsyncTaskService {
/**
* -
*
* @param orderNo
* @param chargeDetail
*/
@ -431,6 +451,7 @@ public class AsyncTaskService {
/**
*
*
* @param detailStartTime
* @return
*/
@ -528,31 +549,53 @@ public class AsyncTaskService {
*
*/
public EquipmentChargeOrderDO beforeStopLastOrderInfo(EquipmentOrder equipmentOrder, EquipmentChargeOrderDO orderInfo) {
//处理分时段电量, 通俗点说就是把一个Double[]转化为一个以逗号分隔开的字符串
String timeShare = timeShareComputeStr(equipmentOrder.getMultiChargeDegree());
orderInfo.setChargeBeginTime(Optional.ofNullable(equipmentOrder.getChargeBeginTime()).orElse(orderInfo.getChargeBeginTime()));
//充电分时度数
orderInfo.setChargeTimesDegree(timeShare);
//充电开始时间
orderInfo.setChargeBeginTime(Optional.ofNullable(equipmentOrder.getChargeBeginTime()).orElse(orderInfo.getChargeBeginTime()));
//充电结束时间
orderInfo.setChargeEndTime(equipmentOrder.getChargeEndTime());
//充电时长
orderInfo.setChargeDuration(equipmentOrder.getChargeDuration());
//充电开始度数
orderInfo.setChargeBeginDegree(equipmentOrder.getChargeBeginDegree());
//充电结束度数
orderInfo.setChargeEndDegree(equipmentOrder.getChargeEndDegree());
//充电度数
orderInfo.setChargeDegree(equipmentOrder.getChargeDegree());
//充电开始soc
orderInfo.setChargeBeginSoc(Double.valueOf(equipmentOrder.getChargeBeginSoc()).intValue());
//充电结束soc
orderInfo.setChargeEndSoc(Double.valueOf(equipmentOrder.getChargeEndSoc()).intValue());
//充电当前soc
orderInfo.setChargeCurSoc(Double.valueOf(equipmentOrder.getChargeEndSoc()).intValue());
//充电策略
orderInfo.setChargeStrategy(equipmentOrder.getChargeStrategy());
//充电策略参数
orderInfo.setChargeStrategyParam(equipmentOrder.getChargeStrategyParam());
//启动方式 0本地刷卡启动 1后台启动 2本地管理员启动
orderInfo.setBootMode(equipmentOrder.getBootMode());
//车辆vin码
orderInfo.setChargeVin(equipmentOrder.getChargeVin());
//充电电量
orderInfo.setChargeAh(equipmentOrder.getChargeDegree() * 100);
//结束编码
orderInfo.setFinishCode(44);
//结束类型
orderInfo.setFinishType(2);
//结束原因
orderInfo.setFinishMsg("补单结束");
//订单结束时间
orderInfo.setFinishTime(ToolDateTime.getDate());
return orderInfo;
}
/**
*
*
* @param orderNo
* @param userId id
* @param connectorSn
@ -667,6 +710,7 @@ public class AsyncTaskService {
/**
* orderDTO
*
* @param settle
* @return
*/
@ -679,6 +723,7 @@ public class AsyncTaskService {
/**
*
*
* @param orderDTO
* @param orderInfo
* @return
@ -742,6 +787,7 @@ public class AsyncTaskService {
/**
*
*
* @param orderDTO
* @param orderInfo
*/
@ -773,6 +819,7 @@ public class AsyncTaskService {
/**
*
*
* @param chargeTimesDegree
* @return
*/
@ -786,6 +833,7 @@ public class AsyncTaskService {
/**
*
*
* @param orderNo
* @param msg
* @param code
@ -1005,6 +1053,7 @@ public class AsyncTaskService {
/**
*
*
* @param orderDTO
* @param orderInfo
*/

@ -171,10 +171,16 @@ public class HandleOrderTarckService {
});
}
//【2024-08-13 Modify by HuangHai】
/**
*
*/
public void completeUnReportReverseOrder(){
Date startDate = ToolDateTime.startDateByDay(new Date(), -60);
Date endDate = ToolDateTime.startDateByDay(new Date(), 0);
completeUnReportReverseOrder(startDate,endDate);
}
public void completeUnReportReverseOrder(Date startDate,Date endDate) {
//处理指定 ~ 指定时间三天前 时间内的反向挂起的订单
// #{code} = push_reverse_orders.duration
// select value from t_biz_parameter where state = 1 and code = #{code} order by id desc limit 1
@ -182,8 +188,8 @@ public class HandleOrderTarckService {
// 返回值 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天前
//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">

Loading…
Cancel
Save