扫码详情

This commit is contained in:
PC 2026-01-26 15:51:52 +08:00
parent 303e903d69
commit b0dd4e46f6
6 changed files with 240 additions and 17 deletions

View File

@ -2,10 +2,7 @@ package com.cdzy.operations.controller;
import com.cdzy.common.model.request.PageParam;
import com.cdzy.common.model.response.JsonResult;
import com.cdzy.operations.model.dto.EbikeBikeInfoDto;
import com.cdzy.operations.model.dto.EbikeDto;
import com.cdzy.operations.model.dto.EbikeUserBikeInfo;
import com.cdzy.operations.model.dto.EbikeUserLockDto;
import com.cdzy.operations.model.dto.*;
import com.cdzy.operations.model.entity.EbikeBikeInfo;
import com.cdzy.operations.model.vo.*;
import com.cdzy.operations.service.EbikeBikeInfoService;
@ -198,4 +195,16 @@ public class EbikeBikeInfoController {
}
return JsonResult.success();
}
/**
* 车辆扫码详情
*
* @param bikeCode 车辆编号
* @return 结果
*/
@GetMapping("/scanInfo")
public JsonResult<EbikeScanInfoDto> info(@RequestParam("bikeCode") String bikeCode) {
EbikeScanInfoDto info = ebikeBikeInfoService.scanInfo(bikeCode);
return JsonResult.success(info);
}
}

View File

@ -97,7 +97,6 @@ public class EbikeBikeInfoDto implements Serializable {
/**
* 创建时间
*/
@Column(onInsertValue = "now()")
private LocalDateTime createdAt;
/**
@ -108,7 +107,6 @@ public class EbikeBikeInfoDto implements Serializable {
/**
* 修改时间
*/
@Column(onUpdateValue = "now()")
private LocalDateTime updatedAt;
/**

View File

@ -0,0 +1,162 @@
package com.cdzy.operations.model.dto;
import com.cdzy.operations.handler.PointDeserializer;
import com.cdzy.operations.handler.PointSerializer;
import com.cdzy.operations.handler.PointTypeHandler;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.mybatisflex.annotation.Column;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.locationtech.jts.geom.Point;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 车辆扫一扫详情
*
* @author attiya
* @since 2025-10-21
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class EbikeScanInfoDto implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 车辆详情ID
*/
private Long bikeInfoId;
/**
* 运营商ID
*/
private Long operatorId;
/**
* 运营区ID
*/
private Long regionId;
/**
* 运营区名称
*/
private String regionName;
/**
* 车辆编号与车辆二维码编号相同
*/
private String bikeCode;
/**
* 电池ID
*/
private Long batteryId;
/**
* 中控ID
*/
private Long ecuId;
/**
* 头盔ID
*/
private Long helmetId;
/**
* 定位
*/
@Column(typeHandler = PointTypeHandler.class)
@JsonSerialize(using = PointSerializer.class)
@JsonDeserialize(using = PointDeserializer.class)
private Point location;
/**
* 备注
*/
private String remarks;
/**
* 车辆状态
*/
private Integer status;
/**
* 车辆使用状态
*/
private Integer usageStatus;
/**
* 创建时间
*/
private LocalDateTime createdAt;
/**
* 创建人
*/
private Long createdBy;
/**
* 修改时间
*/
private LocalDateTime updatedAt;
/**
* 修改人
*/
private Long updatedBy;
/**
* 是否包含头盔
*/
private Boolean hasHelme;
/**
* 是否包含巡检
*/
private Boolean hasInspection = false;
/**
* 是否自己已接单巡检工单
*/
private Boolean inspectionAcceptSelf = false;
/**
* 是否包含换电
*/
private Boolean hasBatterySwap = false;
/**
* 是否自己已接单换电工单
*/
private Boolean batterySwapAcceptSelf = false;
/**
* 是否包含调度
*/
private Boolean hasDispatch = false;
/**
* 是否自己已接单调度工单
*/
private Boolean dispatchAcceptSelf = false;
/**
* 是否包含维修
*/
private Boolean hasRepair = false;
/**
* 是否自己已接单维修工单
*/
private Boolean repairAcceptSelf = false;
}

View File

@ -1,10 +1,7 @@
package com.cdzy.operations.service;
import com.cdzy.common.model.request.PageParam;
import com.cdzy.operations.model.dto.EbikeBikeInfoDto;
import com.cdzy.operations.model.dto.EbikeDto;
import com.cdzy.operations.model.dto.EbikeUserBikeInfo;
import com.cdzy.operations.model.dto.EbikeUserLockDto;
import com.cdzy.operations.model.dto.*;
import com.cdzy.operations.model.entity.EbikeBikeInfo;
import com.cdzy.operations.model.vo.*;
import com.ebike.feign.model.vo.EbikeLockVo;
@ -100,4 +97,11 @@ public interface EbikeBikeInfoService extends IService<EbikeBikeInfo> {
* @param ecuSn 中控编号
*/
EbikeEcuMsgDto getEcuMsg(String ecuSn);
/**
* 车辆扫码详情
* @param bikeCode 车辆编号
* @return 车辆详情
*/
EbikeScanInfoDto scanInfo(String bikeCode);
}

View File

@ -23,10 +23,7 @@ import com.cdzy.operations.mapper.EbikeDefaultBillingConfigurationMapper;
import com.cdzy.operations.mapper.EbikeRegionMapper;
import com.cdzy.operations.mapper.EbikeSiteMapper;
import com.cdzy.operations.mapper.EbikeSpecialBillingConfigurationMapper;
import com.cdzy.operations.model.dto.EbikeBikeInfoDto;
import com.cdzy.operations.model.dto.EbikeDto;
import com.cdzy.operations.model.dto.EbikeUserBikeInfo;
import com.cdzy.operations.model.dto.EbikeUserLockDto;
import com.cdzy.operations.model.dto.*;
import com.cdzy.operations.model.entity.EbikeBatteryInfo;
import com.cdzy.operations.model.entity.EbikeBikeInfo;
import com.cdzy.operations.model.entity.EbikeBikeOrder;
@ -546,7 +543,7 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
queryWrapper.clear();
queryWrapper.where(EBIKE_BIKE_INFO.ECU_ID.eq(ebikeEcuInfo.getEcuId()));
long count = this.mapper.selectCountByQuery(queryWrapper);
if (count > 0){
if (count > 0) {
throw new EbikeException("中控已绑定其他车辆,不能进行换绑");
}
queryWrapper.clear();
@ -573,10 +570,54 @@ public class EbikeBikeInfoServiceImpl extends ServiceImpl<EbikeBikeInfoMapper, E
ResGPSDto ecu = (ResGPSDto) redisUtil.getEcu(ecuSn);
ObjectMapper objectMapper = new ObjectMapper();
EbikeEcuMsgDto ebikeEcuMsgDto = objectMapper.convertValue(ecu, EbikeEcuMsgDto.class);
ebikeEcuMsgDto.setRealVoltage(ecu.getVoltage()/1000.0);
ebikeEcuMsgDto.setRealVoltage(ecu.getVoltage() / 1000.0);
return ebikeEcuMsgDto;
}
@Override
public EbikeScanInfoDto scanInfo(String bikeCode) {
QueryWrapper queryWrapper = QueryWrapper.create()
.select(EBIKE_BIKE_INFO.ALL_COLUMNS, EBIKE_REGION.REGION_NAME)
.leftJoin(EBIKE_REGION).on(EBIKE_REGION.REGION_ID.eq(EBIKE_BIKE_INFO.REGION_ID))
.where(EBIKE_BIKE_INFO.BIKE_CODE.eq(bikeCode));
EbikeScanInfoDto ebikeScanInfoDto = this.mapper.selectOneByQueryAs(queryWrapper, EbikeScanInfoDto.class);
queryWrapper.clear();
queryWrapper.where(EBIKE_BIKE_ORDER.BIKE_CODE.eq(bikeCode));
List<EbikeBikeOrder> list = orderMapper.selectListByQuery(queryWrapper);
long staffId = StpUtil.getLoginIdAsLong();
if (!list.isEmpty()) {
for (EbikeBikeOrder order : list) {
switch (order.getOrderType()) {
case BikeOrderType.INSPECTION -> {
ebikeScanInfoDto.setHasInspection(Boolean.TRUE);
if (order.getReceiverId() != null && staffId == order.getReceiverId()) {
ebikeScanInfoDto.setInspectionAcceptSelf(Boolean.TRUE);
}
}
case BikeOrderType.BATTERY_SWAP -> {
ebikeScanInfoDto.setHasBatterySwap(Boolean.TRUE);
if (order.getReceiverId() != null && staffId == order.getReceiverId()) {
ebikeScanInfoDto.setBatterySwapAcceptSelf(Boolean.TRUE);
}
}
case BikeOrderType.DISPATCH -> {
ebikeScanInfoDto.setHasDispatch(Boolean.TRUE);
if (order.getReceiverId() != null && staffId == order.getReceiverId()) {
ebikeScanInfoDto.setDispatchAcceptSelf(Boolean.TRUE);
}
}
case BikeOrderType.REPAIR -> {
ebikeScanInfoDto.setHasRepair(Boolean.TRUE);
if (order.getReceiverId() != null && staffId == order.getReceiverId()) {
ebikeScanInfoDto.setRepairAcceptSelf(Boolean.TRUE);
}
}
}
}
}
return ebikeScanInfoDto;
}
static EbikeSpecialDay getEbikeSpecialDay(List<EbikeSpecialDay> ebikeSpecialDays) {
LocalDate today = LocalDate.now();

View File

@ -1,9 +1,11 @@
package com.cdzy.operations;
import com.cdzy.common.model.dto.ResGPSDto;
import com.cdzy.operations.mapper.EbikeBikeOrderMapper;
import com.cdzy.operations.model.dto.EbikeBikeOrderDayCountDto;
import com.cdzy.operations.model.dto.EbikeBikeOrderMonthCountDto;
import com.cdzy.operations.model.dto.EbikeBikeOrderWeekCountDto;
import com.cdzy.operations.utils.RedisUtil;
import jakarta.annotation.Resource;
import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;
@ -16,6 +18,9 @@ class EbikeOperationsApplicationTests {
@Resource
private EbikeBikeOrderMapper orderMapper;
@Resource
private RedisUtil redisUtil;
@Test
void monthCount() {
List<EbikeBikeOrderMonthCountDto> monthCountDtos = orderMapper.monthCount(320131029184712704L);
@ -40,6 +45,10 @@ class EbikeOperationsApplicationTests {
}
}
@Test
void test() {
ResGPSDto ecu = (ResGPSDto) redisUtil.getEcu("2370171956");
System.out.println(ecu.getVoltage()/1000.0);
}
}