xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/ElectronicFenceAddDto.java
@@ -10,6 +10,7 @@ import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -24,7 +25,8 @@ private String cityCode; @ApiModelProperty(value = "围栏编号唯一 规则:城市首字母-类型简写-4位自增流水号(如 SZ-OP-001)") private String electronicNumber; @ApiModelProperty(value = "面积") private BigDecimal area; @ApiModelProperty(value = "围栏状态 0=草稿 1=待启用 2=启用中 3=已停用 草稿传0 发布传1") @NotNull(message = "围栏状态不能为空") private Integer status; @@ -35,7 +37,6 @@ private Integer effectType; @ApiModelProperty(value = "生效时间") @NotNull(message = "生效时间不能为空") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime effectTime; @@ -44,7 +45,6 @@ private Integer failureType; @ApiModelProperty(value = "失效时间") @NotNull(message = "失效时间不能为空") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime failureTime; xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/operation/ElectronicFenceUpdateDto.java
@@ -38,7 +38,6 @@ private Integer effectType; @ApiModelProperty(value = "生效时间") @NotNull(message = "生效时间不能为空") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime effectTime; @@ -47,7 +46,6 @@ private Integer failureType; @ApiModelProperty(value = "失效时间") @NotNull(message = "失效时间不能为空") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") private LocalDateTime failureTime; xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpElectronicClientFallbackFactory.java
@@ -12,6 +12,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.stereotype.Component; import org.springframework.web.bind.annotation.RequestBody; import java.util.Collection; import java.util.List; @@ -54,7 +55,7 @@ } @Override public R copy(Integer id) { public R<Long> copy(@RequestBody Integer id) { log.error("复制电子围栏失败:{}", cause.getMessage()); return R.fail("复制电子围栏失败"); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpSystemSettingClientFallbackFactory.java
@@ -3,6 +3,7 @@ import com.xiaopeng.api.feignClient.operation.SysLogClient; import com.xiaopeng.api.feignClient.operation.XpSystemSettingClient; import com.xiaopeng.api.model.operation.SysOperLog; import com.xiaopeng.api.model.operation.XpFeedbackType; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; @@ -25,6 +26,12 @@ log.error("获取自动结束行程时间失败:{}", cause.getMessage()); return R.fail("获取自动结束行程时间失败,"+cause.getMessage()); } @Override public R<XpFeedbackType> getFeedbackTypeById(Long id) { log.error("获取反馈类型名称失败:{}", cause.getMessage()); return R.fail(null); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpElectronicClient.java
@@ -12,10 +12,7 @@ import com.xiaopeng.common.core.web.page.PageInfo; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PutMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.*; import java.util.Collection; import java.util.List; @@ -40,8 +37,8 @@ /** * 电子围栏详情 */ @GetMapping("/api/v1/electronicFence/queryById") R<ElectronicFenceDetailVo> queryById(Long id); @PostMapping("/api/v1/electronicFence/queryById") R<ElectronicFenceDetailVo> queryById(@RequestParam("id")Long id); /** * 编辑电子围栏 */ @@ -50,8 +47,8 @@ /** * 复制电子围栏 */ @PutMapping("/api/v1/electronicFence/copy") R copy(Integer id); @PostMapping("/api/v1/electronicFence/copy") R<Long> copy(@RequestParam("id") Integer id); /** * 根据ID列表批量查询电子围栏 xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpSystemSettingClient.java
@@ -1,11 +1,13 @@ package com.xiaopeng.api.feignClient.operation; import com.xiaopeng.api.factory.operation.XpSystemSettingClientFallbackFactory; import com.xiaopeng.api.model.operation.XpFeedbackType; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.Mapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; @FeignClient(contextId = "XpSystemSettingClient", value = ServiceNameConstantsEnum.XP_OPERATION_SERVICE, fallbackFactory = XpSystemSettingClientFallbackFactory.class) @@ -22,4 +24,10 @@ @GetMapping("/api/v1/mini-program/support/getOrderFinishTime") R<Integer> getOrderFinishTime(); /** * 获取反馈类型 * @return */ @GetMapping("/base/v1/mini-program/getFeedbackTypeById/{id}") R<XpFeedbackType> getFeedbackTypeById(@PathVariable("id")Long id); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpElectronicFenceArea.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import java.math.BigDecimal; import java.time.LocalDateTime; import java.io.Serializable; @@ -37,7 +39,8 @@ @ApiModelProperty(value = "围栏id") private Long electronicId; @ApiModelProperty(value = "面积") private BigDecimal area; @ApiModelProperty(value = "区域名称") private String areaName; xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrderEvaluate.java
@@ -49,9 +49,9 @@ private LocalDateTime evaluateTime; @ApiModelProperty(value = "问题类型id") private Integer feedbackTypeId; private Long feedbackTypeId; @ApiModelProperty(value = "反馈内容") private Integer feedbackContent; private String feedbackContent; @ApiModelProperty(value = "图片 json格式") private Integer feedbackPictures; private String feedbackPictures; } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
@@ -14,6 +14,7 @@ import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.service.TokenService; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -39,6 +40,8 @@ public class XpElectronicFenceManagementController { @Resource private TokenService tokenService; @Resource private XpElectronicClient xpElectronicClient; @@ -56,6 +59,7 @@ @ApiOperation(value = "新增电子围栏") @Transactional public R add(@Validated @RequestBody ElectronicFenceAddDto dto) { return xpElectronicClient.add(dto); } @@ -75,10 +79,10 @@ /** * 电子围栏详情 */ @GetMapping("/queryById") @PostMapping("/queryById") @ResponseBody @ApiOperation(value = "电子围栏详情") public R<ElectronicFenceDetailVo> queryById(Long id) { public R<ElectronicFenceDetailVo> queryById(@RequestParam("id")Long id) { return xpElectronicClient.queryById(id); } @@ -96,11 +100,9 @@ /** * 复制电子围栏 */ @GetMapping("/copy") @ResponseBody @PostMapping("/copy") @ApiOperation(value = "复制电子围栏") @Transactional public R copy(Integer id) { public R<Long> copy(@RequestParam("id") Integer id) { return xpElectronicClient.copy(id); } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/config/DataUpdateHandlerConfig.java
@@ -50,7 +50,6 @@ } this.setFieldValByName("createTime", LocalDateTime.now(), metaObject); this.setFieldValByName("updateTime", LocalDateTime.now(), metaObject); this.setFieldValByName("createBy", userName, metaObject); } /** xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java
@@ -111,9 +111,9 @@ /** * 电子围栏详情 */ @GetMapping("/queryById") @PostMapping("/queryById") @ApiOperation(value = "电子围栏详情") public R<ElectronicFenceDetailVo> queryById(Long id) { public R<ElectronicFenceDetailVo> queryById(@RequestParam("id")Long id) { ElectronicFenceDetailVo res = new ElectronicFenceDetailVo(); XpElectronicFence electronicFence = xpElectronicFenceService.getById(id); if (electronicFence == null) { @@ -142,10 +142,10 @@ /** * 复制电子围栏 */ @GetMapping("/copy") @PostMapping("/copy") @ApiOperation(value = "复制电子围栏") @Transactional public R copy(Integer id) { public R<Long> copy(@RequestParam("id") Integer id) { XpElectronicFence electronicFence = xpElectronicFenceService.getById(id); if (electronicFence.getStatus()==2){ throw new ServiceException( @@ -166,7 +166,7 @@ area.setAreaName("副本_"+area.getAreaName()); } xpElectronicFenceAreaService.saveBatch(electronicFenceAreaList); return R.ok(); return R.ok(electronicFence.getId()); } /** xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpFeedbackTypeController.java
@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.stereotype.Controller; @@ -36,7 +37,14 @@ public XpFeedbackTypeController(IXpFeedbackTypeService xpFeedbackTypeService) { this.xpFeedbackTypeService = xpFeedbackTypeService; } /** * 获取反馈类型 * @return */ @GetMapping("/getFeedbackTypeById/{id}") public R<XpFeedbackType> getFeedbackTypeById(@PathVariable("id")Long id){ return R.ok(xpFeedbackTypeService.getById(id)); } @GetMapping("/feedback-type/getList") @ApiOperation(value = "获取意见反馈类型列表",tags = {"意见反馈类型列表"},response = XpFeedbackType.class) xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpElectronicFenceServiceImpl.java
@@ -11,6 +11,7 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.exception.ServiceException; import com.xiaopeng.common.core.utils.DateUtils; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.constant.I18nKeyConstant; @@ -65,6 +66,9 @@ @Override public PageInfo<XpElectronicFence> pageList(ElectronicPageListQuery query) { PageInfo<XpElectronicFence> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); if (StringUtils.isEmpty(query.getCreateSort())&& StringUtils.isEmpty(query.getUpdateSort())){ query.setCreateSort("2"); } List<XpElectronicFence> list = this.baseMapper.pageList(pageInfo, query); if (list.isEmpty()) { return new PageInfo<>(); @@ -78,7 +82,9 @@ if (xpElectronicFenceAreas != null) { xpElectronicFence.setOperatingAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 1).count()); xpElectronicFence.setProhibitedAreaCount(xpElectronicFenceAreas.stream().filter(xpElectronicFenceArea -> xpElectronicFenceArea.getAreaType() == 2).count()); }else{ xpElectronicFence.setOperatingAreaCount(0L); xpElectronicFence.setProhibitedAreaCount(0L); } } pageInfo.setRecords(list); @@ -194,6 +200,7 @@ for (XpElectronicFenceArea area : newElectronicFenceAreas) { area.setElectronicId(xpElectronicFence.getId()); area.setAreaStatus(1); area.setArea(area.getArea()); area.setCityCode(dto.getCityCode()); xpElectronicFenceAreaMapper.insert(area); @@ -333,6 +340,7 @@ for (XpElectronicFenceArea area : updatedElectronicFenceAreas) { area.setElectronicId(dto.getId()); // 设置关联的电子围栏ID area.setCityCode(dto.getCityCode()); area.setArea(area.getArea()); xpElectronicFenceAreaMapper.insert(area); } if (dto.getStatus() == 2) { xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -29,6 +29,7 @@ import com.xiaopeng.order.model.vo.XpOrderHistoryVO; import com.xiaopeng.order.model.vo.XpOrderPageVO; import com.xiaopeng.order.service.IXpOrderService; import com.xiaopeng.order.vo.OrderDetailVo; import com.xiaopeng.unifiedverification.interceptor.XpClientCheck; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -265,7 +266,6 @@ return R.ok(); } /** * 获取用户快捷胶囊 历史 时段 终点高点 */ @@ -278,6 +278,18 @@ return R.ok(xpOrderService.getUserQuickCapsule(uid)); } /** * 获取订单详情 */ @PutMapping("/api/v1/mini-program/order/orderDetail/{orderId}") @ApiOperation(value = "获取订单详情", tags = {"小程序-获取订单详情"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R<OrderDetailVo> orderDetail(@PathVariable("orderId") Long orderId, HttpServletRequest request) { // uid已通过拦截器otp校验,可以直接使用 String uid = request.getHeader("XP-Uid"); ; return R.ok(xpOrderService.orderDetail(orderId,uid)); } /** xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/dto/XpOrderCommentDto.java
@@ -12,9 +12,9 @@ @ApiModelProperty(value = "订单评分") private Integer orderRating; @ApiModelProperty(value = "问题类型id") private Integer feedbackTypeId; private Long feedbackTypeId; @ApiModelProperty(value = "反馈内容") private Integer feedbackContent; private String feedbackContent; @ApiModelProperty(value = "图片 json格式") private Integer feedbackPictures; private String feedbackPictures; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/IXpOrderService.java
@@ -22,6 +22,7 @@ import com.xiaopeng.order.model.vo.XpOrderDetailVO; import com.xiaopeng.order.model.vo.XpOrderHistoryVO; import com.xiaopeng.order.model.vo.XpOrderPageVO; import com.xiaopeng.order.vo.OrderDetailVo; import java.util.List; @@ -193,4 +194,6 @@ * @param dto */ void popOrder(PopOrderDto dto); OrderDetailVo orderDetail(Long orderId, String uid); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -30,6 +30,7 @@ import com.xiaopeng.api.feignClient.vehicleConvoy.XpVehicleClient; import com.xiaopeng.api.model.account.XpAppUser; import com.xiaopeng.api.model.operation.XpGeoQueryEntity; import com.xiaopeng.api.model.operation.XpFeedbackType; import com.xiaopeng.api.model.operation.XpPoint; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.api.model.order.XpOrderCancel; @@ -71,6 +72,8 @@ import com.xiaopeng.order.service.IXpOrderReassignService; import com.xiaopeng.order.service.IXpOrderService; import com.xiaopeng.order.utils.holiday.HolidayUtil; import com.xiaopeng.order.vo.OrderDetailVo; import io.swagger.annotations.ApiModelProperty; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.apache.shardingsphere.transaction.core.TransactionType; @@ -917,6 +920,8 @@ userVehicleClient.cancelTaxiPassenger(cancelTaxiPassengerVo); } // 计算起步价 // // 计算实际价格 // // 根据订单所属开通城市id 查询定价 // R<XpPricing> pricingByCityId = xpPricingClient.getPricingByCityId(order.getCityId()); @@ -1592,6 +1597,38 @@ } } @Override public OrderDetailVo orderDetail(Long orderId, String uid) { OrderDetailVo orderDetailVo = new OrderDetailVo(); XpOrder order = this.getById(orderId); BeanUtils.copyProperties(order, orderDetailVo); // 查询车辆信息 XpVehicle vehicle = xpVehicleClient.queryById(order.getVehicleId()).getData(); if (vehicle!=null){ orderDetailVo.setVehicleCode(vehicle.getVehicleCode()); orderDetailVo.setPlateNumber(vehicle.getPlateNumber()); orderDetailVo.setVehicleColor(vehicle.getVehicleColor()); orderDetailVo.setVehiclePictures(vehicle.getVehiclePictures()); } // 查询评价信息 XpOrderEvaluate evaluate = xpOrderEvaluateService.lambdaQuery().eq(XpOrderEvaluate::getOrderId, orderId) .last("limit 1").one(); if (evaluate != null) { orderDetailVo.setFeedbackPictures(evaluate.getFeedbackPictures()); orderDetailVo.setFeedbackContent(evaluate.getFeedbackContent()); orderDetailVo.setOrderRating(evaluate.getOrderRating()); XpFeedbackType feedbackType = xpSystemSettingClient.getFeedbackTypeById(evaluate.getFeedbackTypeId()).getData(); orderDetailVo.setFeedbackTypeName(feedbackType.getFeedbackType()); } List<OrderTrajectory> trajectories = mongoTemplate.find( new Query(Criteria.where("orderId").is(orderId)) .with(Sort.by(Sort.Direction.ASC, "locatetime")), OrderTrajectory.class ); orderDetailVo.setTrajectories(trajectories); return orderDetailVo; } /** * 成功操作下发命令后调用 用于弹出redis队列的获取成功的数据 xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderDetailVo.java
New file @@ -0,0 +1,34 @@ package com.xiaopeng.order.vo; import com.xiaopeng.api.model.order.XpOrder; import com.xiaopeng.order.mangodb.model.OrderTrajectory; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel(value = "订单详情") public class OrderDetailVo extends XpOrder { @ApiModelProperty(value = "车辆编码") private String vehicleCode; @ApiModelProperty(value = "车牌号") private String plateNumber; @ApiModelProperty(value = "车辆颜色") private String vehicleColor; @ApiModelProperty(value = "车辆图片") private String vehiclePictures; @ApiModelProperty(value = "反馈图片") private String feedbackPictures; @ApiModelProperty(value = "反馈内容") private String feedbackContent; @ApiModelProperty(value = "问题类型") private String feedbackTypeName; @ApiModelProperty(value = "评分") private Integer orderRating; @ApiModelProperty(value = "轨迹") private List<OrderTrajectory> trajectories; }