| | |
| | | package com.xiaopeng.maintenance.service.impl; |
| | | |
| | | import com.alibaba.fastjson2.JSONArray; |
| | | import com.alibaba.fastjson2.JSONObject; |
| | | import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; |
| | | import com.baomidou.mybatisplus.extension.plugins.pagination.Page; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.xiaopeng.api.feignClient.account.XpOperationUserClient; |
| | | import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; |
| | | import com.xiaopeng.api.model.account.XpOperationsUser; |
| | | import com.xiaopeng.api.model.maintenance.XpChargingRecord; |
| | | import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; |
| | | import com.xiaopeng.api.model.vehicleConvoy.XpVehicle; |
| | | import com.xiaopeng.maintenance.model.query.XpChargingRecordPageQuery; |
| | | import com.xiaopeng.api.vo.automaticPilot.VehiclePosition; |
| | | import com.xiaopeng.common.core.domain.R; |
| | | import com.xiaopeng.common.core.utils.SensitiveDataCryptoUtil; |
| | | import com.xiaopeng.common.core.web.page.PageInfo; |
| | | import com.xiaopeng.evi.oss.service.AliOssService; |
| | | import com.xiaopeng.maintenance.dto.XpChargingRecordStartDTO; |
| | | import com.xiaopeng.maintenance.dto.XpChargingRecordStopDTO; |
| | | import com.xiaopeng.maintenance.mapper.XpChargingRecordMapper; |
| | | import com.xiaopeng.maintenance.model.query.XpChargingRecordPageQuery; |
| | | import com.xiaopeng.maintenance.model.vo.XpChargingRecordVO; |
| | | import com.xiaopeng.maintenance.service.IXpChargingRecordService; |
| | | import com.xiaopeng.maintenance.utils.AliOssDownloadUtil; |
| | | import com.xiaopeng.maintenance.vo.ChargingStatusVO; |
| | | import org.apache.commons.lang3.StringUtils; |
| | | import org.springframework.beans.BeanUtils; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | | import org.springframework.data.mongodb.core.MongoTemplate; |
| | | import org.springframework.data.mongodb.core.query.Criteria; |
| | | import org.springframework.data.mongodb.core.query.Query; |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.io.UnsupportedEncodingException; |
| | | import java.time.LocalDateTime; |
| | | import java.util.*; |
| | | import java.util.stream.Collectors; |
| | |
| | | private XpVehicleClient xpVehicleClient; |
| | | @Autowired |
| | | private XpOperationUserClient xpOperationUserClient; |
| | | @Autowired |
| | | private MongoTemplate mongoTemplate; |
| | | |
| | | @Autowired |
| | | private AliOssService aliOssService; |
| | | @Autowired |
| | | private AliOssDownloadUtil aliOssDownloadUtil; |
| | | |
| | | @Override |
| | | public void startCharging(XpChargingRecordStartDTO dto, Long id) { |
| | | // 创建车辆充电记录 |
| | |
| | | xpChargingRecord.setVehicleId(dto.getVehicleId()); |
| | | xpChargingRecord.setStartTime(LocalDateTime.now()); |
| | | xpChargingRecord.setStartOperationsUserId(id); |
| | | xpChargingRecord.setTaskId(dto.getTaskId()); |
| | | // 查询车辆信息 |
| | | XpVehicle xpVehicle = xpVehicleClient.queryById(dto.getVehicleId()).getData(); |
| | | if(Objects.nonNull(xpVehicle)){ |
| | | // 查询车辆的续航里程 |
| | | String vin = SensitiveDataCryptoUtil.decryptIfPossible(xpVehicle.getVehicleVin()); |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class); |
| | | if(Objects.nonNull(vehiclePosition)){ |
| | | xpChargingRecord.setStartMileageRange(vehiclePosition.getMileageRange()); |
| | | }else { |
| | | xpChargingRecord.setStartMileageRange(0F); |
| | | } |
| | | } |
| | | this.save(xpChargingRecord); |
| | | } |
| | | |
| | | @Override |
| | | public void stopCharging(XpChargingRecordStopDTO dto, Long id) { |
| | | public XpChargingRecord stopCharging(XpChargingRecordStopDTO dto, Long id) { |
| | | // 查询车辆充电记录 进行修改 |
| | | XpChargingRecord xpChargingRecord = this.getById(dto.getId()); |
| | | // 查询车辆信息 |
| | | XpVehicle xpVehicle = xpVehicleClient.queryById(xpChargingRecord.getVehicleId()).getData(); |
| | | xpChargingRecord.setVehicleId(null); |
| | | xpChargingRecord.setEndChargingPicture(dto.getEndChargingPicture()); |
| | | xpChargingRecord.setEndRemainingBattery(dto.getEndRemainingBattery()); |
| | | xpChargingRecord.setEndTime(LocalDateTime.now()); |
| | | xpChargingRecord.setEndOperationsUserId(id); |
| | | if(Objects.nonNull(xpVehicle)){ |
| | | // 查询车辆的续航里程 |
| | | String vin = SensitiveDataCryptoUtil.decryptIfPossible(xpVehicle.getVehicleVin()); |
| | | VehiclePosition vehiclePosition = mongoTemplate.findOne(new Query(Criteria.where("vin").is(vin)), VehiclePosition.class); |
| | | if(Objects.nonNull(vehiclePosition)){ |
| | | xpChargingRecord.setStartMileageRange(vehiclePosition.getMileageRange()); |
| | | }else { |
| | | xpChargingRecord.setStartMileageRange(0F); |
| | | } |
| | | } |
| | | this.updateById(xpChargingRecord); |
| | | return xpChargingRecord; |
| | | } |
| | | |
| | | @Override |
| | | public XpChargingRecordVO chargingDetail(Long id) { |
| | | public XpChargingRecordVO chargingDetail(Long id) throws UnsupportedEncodingException { |
| | | // 查询车辆充电记录 |
| | | XpChargingRecord xpChargingRecord = this.getById(id); |
| | | XpChargingRecordVO xpChargingRecordVO = new XpChargingRecordVO(); |
| | |
| | | XpVehicle xpVehicle = xpVehicleClient.queryById(xpChargingRecord.getVehicleId()).getData(); |
| | | if (Objects.nonNull(xpVehicle)) { |
| | | xpChargingRecordVO.setPlateNumber(xpVehicle.getPlateNumber()); |
| | | xpChargingRecordVO.setVehiclePictures(xpVehicle.getVehiclePictures()); |
| | | String vehiclePictures =xpVehicle.getVehiclePictures(); |
| | | if (StringUtils.isNotBlank(vehiclePictures)) { |
| | | JSONObject jsonObject = JSONObject.parseObject(vehiclePictures); |
| | | // 1 |
| | | String downloadUrl = jsonObject.getString("url");; |
| | | try { |
| | | downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | } catch (UnsupportedEncodingException e) { |
| | | log.error("获取图片下载地址失败", e); |
| | | } |
| | | jsonObject.put("url", downloadUrl); |
| | | xpChargingRecordVO.setVehiclePictures(jsonObject.toJSONString()); |
| | | } |
| | | xpChargingRecordVO.setAcceptOrTest(xpVehicle.getAcceptOrTest()); |
| | | xpChargingRecordVO.setVehicleColor(xpVehicle.getVehicleColor()); |
| | | } |
| | |
| | | if (Objects.nonNull(operationsUserEnd)) { |
| | | xpChargingRecordVO.setOperatorEndName(operationsUserEnd.getNickName()); |
| | | } |
| | | xpChargingRecordVO.setStartMileageRange(Objects.nonNull(xpChargingRecord.getStartMileageRange()) ? xpChargingRecord.getStartMileageRange() : 0F); |
| | | xpChargingRecordVO.setEndMileageRange(Objects.nonNull(xpChargingRecord.getEndMileageRange()) ? xpChargingRecord.getEndMileageRange() : 0F); |
| | | |
| | | // 图片封装 |
| | | try { |
| | | // 开始 |
| | | String startChargingPicture = xpChargingRecordVO.getStartChargingPicture(); |
| | | if (StringUtils.isNotBlank(startChargingPicture)) { |
| | | JSONArray jsonArray = JSONArray.parseArray(startChargingPicture); |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | if (Objects.isNull(jsonObject)) { |
| | | continue; |
| | | } |
| | | String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | jsonObject.put("url", downloadUrl); |
| | | } |
| | | xpChargingRecordVO.setStartChargingPicture(JSONArray.toJSONString(jsonArray)); |
| | | } |
| | | // 结束 |
| | | String endChargingPicture = xpChargingRecordVO.getEndChargingPicture(); |
| | | if (StringUtils.isNotBlank(endChargingPicture)) { |
| | | JSONArray jsonArray = JSONArray.parseArray(endChargingPicture); |
| | | for (int i = 0; i < jsonArray.size(); i++) { |
| | | JSONObject jsonObject = jsonArray.getJSONObject(i); |
| | | if (Objects.isNull(jsonObject)) { |
| | | continue; |
| | | } |
| | | String downloadUrl = aliOssService.getDownloadUrl(jsonObject.getString("id"), jsonObject.getString("name"), true); |
| | | jsonObject.put("url", downloadUrl); |
| | | } |
| | | xpChargingRecordVO.setEndChargingPicture(JSONArray.toJSONString(jsonArray)); |
| | | } |
| | | } catch (Exception e) { |
| | | e.printStackTrace(); |
| | | } |
| | | |
| | | return xpChargingRecordVO; |
| | | } |
| | | |
| | | @Override |
| | | public PageInfo<XpChargingRecordVO> queryChargingByVehicleId(XpChargingRecordPageQuery query) { |
| | | public PageInfo<XpChargingRecordVO> queryChargingByVehicleId(XpChargingRecordPageQuery query){ |
| | | // 1. 如果有操作人姓名过滤条件,先查询符合条件的用户ID列表 |
| | | List<Long> userIds = null; |
| | | if (StringUtils.isNotBlank(query.getOperationsUserName())) { |
| | |
| | | String userName = userNameMap.get(chargingRecord.getEndOperationsUserId()); |
| | | vo.setOperatorEndName(userName); |
| | | } |
| | | |
| | | |
| | | vo.setVehiclePictures(aliOssDownloadUtil.getPictureJSONObject(vo.getVehiclePictures())); |
| | | |
| | | vo.setStartChargingPicture(aliOssDownloadUtil.getPictureJsonArray(vo.getStartChargingPicture())); |
| | | vo.setEndChargingPicture(aliOssDownloadUtil.getPictureJsonArray(vo.getEndChargingPicture())); |
| | | records.add(vo); |
| | | } |
| | | } |
| | |
| | | // 查询车辆当前充电信息 |
| | | XpChargingRecord xpChargingRecord = this.getOne(new LambdaQueryWrapper<XpChargingRecord>() |
| | | .eq(XpChargingRecord::getVehicleId, vehicleId) |
| | | .isNull(XpChargingRecord::getTaskId) |
| | | .orderByDesc(XpChargingRecord::getCreateTime) |
| | | .last("LIMIT 1")); |
| | | |