| | |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.zy.acs.common.hk.state.HkState; |
| | | import com.zy.acs.common.hk.state.HkStateActionState; |
| | | import com.zy.acs.common.hk.state.HkStateBatteryState; |
| | | import com.zy.acs.common.hk.action.type.HkActionType; |
| | | import com.zy.acs.common.hk.state.type.HkActionStatusType; |
| | | import com.zy.acs.common.utils.RedisSupport; |
| | | import com.zy.acs.framework.common.Cools; |
| | | import com.zy.acs.manager.core.domain.TaskPosDto; |
| | | import com.zy.acs.manager.manager.entity.Action; |
| | | import com.zy.acs.manager.manager.entity.Segment; |
| | | import com.zy.acs.manager.manager.enums.ActionStsType; |
| | |
| | | |
| | | syncFinishedActions(state); |
| | | |
| | | if (!isOrderCompleted(state)) { |
| | | List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>() |
| | | .eq(Segment::getGroupId, state.getOrderId()) |
| | | .orderByAsc(Segment::getSerial)); |
| | | |
| | | if (!isOrderCompleted(state, segmentList)) { |
| | | return; |
| | | } |
| | | |
| | | settleCompletedOrder(state); |
| | | settleCompletedOrder(state, segmentList); |
| | | } |
| | | |
| | | private void syncFinishedActions(HkState state) { |
| | |
| | | } |
| | | } |
| | | |
| | | private boolean isOrderCompleted(HkState state) { |
| | | private boolean isOrderCompleted(HkState state, List<Segment> segmentList) { |
| | | if (isChargeOrder(segmentList) && isChargeTaskCompleted(state)) { |
| | | return true; |
| | | } |
| | | |
| | | if (!Cools.isEmpty(state.getNodeStates()) || !Cools.isEmpty(state.getEdgeStates())) { |
| | | return false; |
| | | } |
| | |
| | | return true; |
| | | } |
| | | |
| | | private void settleCompletedOrder(HkState state) { |
| | | private void settleCompletedOrder(HkState state, List<Segment> segmentList) { |
| | | String orderId = state.getOrderId(); |
| | | String completeKey = buildCompleteKey(state); |
| | | if (redis.getObject(HK_ORDER_COMPLETE_FLAG, completeKey) != null) { |
| | | return; |
| | | } |
| | | |
| | | List<Segment> segmentList = segmentService.list(new LambdaQueryWrapper<Segment>() |
| | | .eq(Segment::getGroupId, orderId) |
| | | .orderByAsc(Segment::getSerial)); |
| | | if (Cools.isEmpty(segmentList)) { |
| | | log.warn("hk state order completed but no segment found, agvNo={}, orderId={}, orderUpdateId={}", |
| | | state.getSerialNumber(), orderId, state.getOrderUpdateId()); |
| | |
| | | return lastNodeSequenceId >= expectedLastNodeSequenceId; |
| | | } |
| | | |
| | | private boolean isChargeOrder(List<Segment> segmentList) { |
| | | if (Cools.isEmpty(segmentList)) { |
| | | return false; |
| | | } |
| | | return segmentList.stream() |
| | | .map(Segment::getPosType) |
| | | .map(TaskPosDto::queryPosType) |
| | | .anyMatch(TaskPosDto.PosType.TO_CHARGE::equals); |
| | | } |
| | | |
| | | private boolean isChargeTaskCompleted(HkState state) { |
| | | HkStateBatteryState batteryState = state.getBatteryState(); |
| | | if (batteryState != null && Boolean.TRUE.equals(batteryState.getCharging())) { |
| | | return true; |
| | | } |
| | | |
| | | if (Cools.isEmpty(state.getActionStates())) { |
| | | return false; |
| | | } |
| | | |
| | | for (HkStateActionState actionState : state.getActionStates()) { |
| | | if (actionState == null || Cools.isEmpty(actionState.getActionType())) { |
| | | continue; |
| | | } |
| | | if (!HkActionType.START_CHARGING.getCode().equalsIgnoreCase(actionState.getActionType())) { |
| | | continue; |
| | | } |
| | | if (actionState.getActionStatus() == HkActionStatusType.FINISHED) { |
| | | return true; |
| | | } |
| | | } |
| | | return false; |
| | | } |
| | | |
| | | private Long parseActionId(String hkActionId) { |
| | | if (Cools.isEmpty(hkActionId) || hkActionId.length() < 2) { |
| | | return null; |