xp-robotaxi-api/src/main/java/com/xiaopeng/api/dto/pushMessage/AliPushMessageDTO.java
@@ -2,13 +2,13 @@ import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.AccessLevel; import lombok.Builder; import lombok.Data; import lombok.experimental.Accessors; import java.io.Serializable; @Data @Builder @Accessors(chain = true) @ApiModel(value = "ali推送消息AliPushMessageDTO") public class AliPushMessageDTO implements Serializable { xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/account/XpOperationsUserNotification.java
@@ -50,4 +50,7 @@ @ApiModelProperty(value = "是否已读 0-未读 1-已读") private Integer readStatus; @ApiModelProperty(value = "阿里云推送body内容") private String notificationExt; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpPricingCardVo.java
@@ -44,4 +44,9 @@ @ApiModelProperty(value = "优惠券") private String coupon; @ApiModelProperty("系统优惠金额") private Double systemDiscount; } xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -287,7 +287,13 @@ } UserCouponVo userCouponVo = couponResult.getData(); if (userCouponVo != null) { Double money = userCouponVo.getMoney(); xpPricingCardVo.setCoupon(String.valueOf(userCouponVo.getMoney())); if(xpPricingCardVo.getTotalPrice()> money){ xpPricingCardVo.setSystemDiscount(xpPricingCardVo.getTotalPrice() - money); } } // 8. 构建响应对象 xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpTaskManagementController.java
@@ -156,7 +156,7 @@ return xpTaskService.taskDetail(id); } @ApiOperation(value = "查询车辆不分页列表") @PostMapping(" /listVehicle") @PostMapping("/listVehicle") public R<List<XpVehicle>> listVehicle() { List<XpVehicle> vehicles = xpVehicleClient.listVehicle().getData(); if (vehicles == null){ @@ -177,7 +177,7 @@ @ApiOperation(value = "事故类型列表", response = XpErrorType.class, tags = "管理后台-车辆管理-运营车辆管理") @GetMapping(" /errorTypeTreeList") @GetMapping("/errorTypeTreeList") public R<List<XpErrorType>> errorTypeTreeList() { return xpErrorTypeService.errorTypeList(); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpSchedulingDetailServiceImpl.java
@@ -1,16 +1,24 @@ package com.xiaopeng.maintenance.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.StringUtils; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.dto.pushMessage.AliPushMessageDTO; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.account.XpOperationUserNotificationClient; import com.xiaopeng.api.feignClient.maintenance.XpCheckLocationClient; import com.xiaopeng.api.feignClient.pushMessage.XpAliPushMessageClient; import com.xiaopeng.api.feignClient.pushMessage.XpPushMessageClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.model.account.XpOperationsUser;import com.xiaopeng.api.model.maintenance.*; import com.xiaopeng.api.model.account.XpOperationsUser; import com.xiaopeng.api.model.account.XpOperationsUserNotification; import com.xiaopeng.api.model.maintenance.*; import com.xiaopeng.api.model.vehicleConvoy.XpFleet; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.NotificationTypeEnum; import com.xiaopeng.common.core.utils.poi.ExcelUtil; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.maintenance.dto.ExportSchedulingDetailDto; @@ -36,6 +44,9 @@ import java.time.format.TextStyle; import java.time.temporal.TemporalAdjusters; import java.util.*; import java.util.concurrent.LinkedBlockingQueue; import java.util.concurrent.ThreadPoolExecutor; import java.util.concurrent.TimeUnit; /** * <p> @@ -64,6 +75,10 @@ private XpFleetOperationsClient xpFleetOperationsClient; @Resource private XpOperationUserClient xpOperationUserClient; @Resource private XpAliPushMessageClient xpAliPushMessageClient; @Resource private XpOperationUserNotificationClient xpOperationUserNotificationClient; @Override public ShiftAttendanceVO shiftAttendance(ShiftAttendanceDTO dto) { @@ -395,6 +410,10 @@ //构建排班明细数据 List<SaveSchedulingDetailVo> datas = vo.getDatas(); List<XpSchedulingDetail> schedulingDetails = new ArrayList<>(); //存放推送消息 List<AliPushMessageDTO> pushMessage = new ArrayList<>(); //存放通知数据 List<XpOperationsUserNotification> notifications = new ArrayList<>(); for (SaveSchedulingDetailVo data : datas) { Long fleetId = data.getFleetId(); List<SaveSchedulingDetailDay> days = data.getDays(); @@ -428,7 +447,12 @@ for (XpOperationsUser xpOperationsUser : data1) { String nickName = xpOperationsUser.getNickName(); String message = nickName + "请注意," + month + "你的排班由" + xpShift1.getShiftName() + "变更为了" + xpShift2.getShiftName() + "。详情请联系平台管理员。"; //构建消息推送对象 AliPushMessageDTO aliPushMessageDTO = buildPushMessage(message, xpOperationsUser); pushMessage.add(aliPushMessageDTO); //构建消息存储 XpOperationsUserNotification operationsUserNotification = buildXpOperationsUserNotification(message, aliPushMessageDTO.getBody(), xpOperationsUser); notifications.add(operationsUserNotification); } } } @@ -448,11 +472,74 @@ if(schedulingDetails.isEmpty()){ this.saveOrUpdateBatch(schedulingDetails); } //异步处理消息通知数据 pushMessage(pushMessage, notifications); return R.ok(); } /** * 构建推送消息对象 * @param message * @param xpOperationsUser * @return */ private AliPushMessageDTO buildPushMessage(String message, XpOperationsUser xpOperationsUser){ JSONObject body = new JSONObject(); body.put("content", message); body.put("strategy", 4); body.put("type", 0); body.put("id", 0); AliPushMessageDTO aliPushMessageDTO = new AliPushMessageDTO(); aliPushMessageDTO.setDeviceType(xpOperationsUser.getDeviceType()); aliPushMessageDTO.setAccount(xpOperationsUser.getPhoneNumber()); aliPushMessageDTO.setTitle("排班变更提示"); aliPushMessageDTO.setBody(body.toJSONString()); aliPushMessageDTO.setPushType("NOTICE"); return aliPushMessageDTO; } /** * 构建消息存储 * @param body * @param xpOperationsUser * @return */ private XpOperationsUserNotification buildXpOperationsUserNotification(String message, String body, XpOperationsUser xpOperationsUser){ XpOperationsUserNotification operationsUserNotification = new XpOperationsUserNotification(); operationsUserNotification.setNotificationType(NotificationTypeEnum.SCHEDULE_CHANGED.getCode()); operationsUserNotification.setNotificationContent(message); operationsUserNotification.setOperationsUserId(xpOperationsUser.getId()); operationsUserNotification.setReadStatus(0); operationsUserNotification.setNotificationExt(body); return operationsUserNotification; } /** * 异步处理消息推送 * @param pushMessage * @param notifications */ private void pushMessage(List<AliPushMessageDTO> pushMessage, List<XpOperationsUserNotification> notifications) { if(pushMessage.isEmpty()){ return; } ThreadPoolExecutor executor = new ThreadPoolExecutor(1, 1, 0L, TimeUnit.MILLISECONDS, new LinkedBlockingQueue<Runnable>()); executor.execute(() -> { xpOperationUserNotificationClient.addNotificationBatch(notifications); for (AliPushMessageDTO aliPushMessageDTO : pushMessage) { xpAliPushMessageClient.pushMessage(aliPushMessageDTO); } }); } /** * 导出排班数据 * @param month * @param response xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/IndexController.java
@@ -40,7 +40,7 @@ } @ApiOperation(value = "点位管理列表", tags = {"运维APP-站点导航"}) @PostMapping("/list") @PostMapping("/api/v1/map/list") public R<List<XpPoint>> list(@RequestBody PointListQuery query) { return pointClient.list( query); } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpElectronicFenceManagementController.java
@@ -59,8 +59,8 @@ */ @PostMapping("/add") @ApiOperation(value = "新增电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R add(@Validated @RequestBody ElectronicFenceAddDto dto) { return xpElectronicClient.add(dto); @@ -74,8 +74,8 @@ @PostMapping("/updateStatus") @ResponseBody @ApiOperation(value = "修改状态") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R updateStatus(@RequestBody ElectronicFenceAreaUpdateStatusDto dto) { return xpElectronicClient.updateStatus(dto); @@ -97,8 +97,9 @@ @PostMapping("/edit") @ResponseBody @ApiOperation(value = "编辑电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) { // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) { return xpElectronicClient.edit(dto); } @@ -107,8 +108,8 @@ */ @PostMapping("/copy") @ApiOperation(value = "复制电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R<Long> copy(@RequestParam("id") Integer id) { return xpElectronicClient.copy(id); } xp-robotaxi-map-boot/src/main/java/com/xiaopeng/map/controller/XpPointManagementController.java
@@ -121,8 +121,8 @@ @PostMapping("/add") @ApiOperation(value = "新增点位") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R add(@Validated @RequestBody PointAddDto pointAddDto) { xpPointClient.add(pointAddDto); return R.ok(); @@ -131,9 +131,9 @@ * 编辑点位 */ @PostMapping("/edit") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) @ApiOperation(value = "编辑点位") // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R edit(@Validated@RequestBody PointUpdateDto pointAddDto) { xpPointClient.edit(pointAddDto); return R.ok(); @@ -142,10 +142,9 @@ * 批量删除点位 */ @GetMapping("/deletePoint") @ResponseBody @ApiOperation(value = "删除点位") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R deletePoint(@RequestParam("ids") String ids) { xpPointClient.deletePoint(ids); return R.ok(); @@ -165,8 +164,8 @@ @PostMapping("/enableDisable") @ResponseBody @ApiOperation(value = "启用/禁用") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R enableDisable(@RequestBody XpPointEnableDisableDto dto) { return xpPointClient.enableDisable(dto); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpElectronicFenceController.java
@@ -84,8 +84,8 @@ */ @PostMapping("/add") @ApiOperation(value = "新增电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R add(@Validated @RequestBody ElectronicFenceAddDto dto) { return xpElectronicFenceService.addElectronic(dto); } @@ -98,8 +98,8 @@ @PostMapping("/updateStatus") @ResponseBody @ApiOperation(value = "修改状态") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R updateStatus(@RequestBody ElectronicFenceAreaUpdateStatusDto dto) { XpElectronicFenceArea electronicFenceArea = xpElectronicFenceAreaService.getById(dto.getId()); if (electronicFenceArea == null) { @@ -138,8 +138,8 @@ */ @PostMapping("/edit") @ApiOperation(value = "编辑电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R edit(@Validated @RequestBody ElectronicFenceUpdateDto dto) { return xpElectronicFenceService.editElectronic(dto); } @@ -149,8 +149,8 @@ */ @PostMapping("/copy") @ApiOperation(value = "复制电子围栏") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R<Long> copy(@RequestParam("id") Integer id) { XpElectronicFence electronicFence = xpElectronicFenceService.getById(id); if (electronicFence.getStatus()==2){ xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpPointManagementController.java
@@ -85,9 +85,9 @@ */ @PostMapping("/addPoint") @ResponseBody @Transactional @ShardingSphereTransactionType(TransactionType.BASE) @ApiOperation(value = "新增点位") // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R add(@Validated @RequestBody PointAddDto pointAddDto) { XpPoint xpPoint = new XpPoint(); BeanUtils.copyProperties(pointAddDto, xpPoint); @@ -100,8 +100,8 @@ @GetMapping("/deletePoint") @ResponseBody @ApiOperation(value = "删除点位") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R deletePoint(@RequestParam("ids") String ids) { xpPointService.removeBatchByIds(Arrays.stream(ids.split(",")).map(Long::parseLong).collect(Collectors.toList())); return R.ok(); @@ -111,8 +111,8 @@ */ @PostMapping("/editPoint") @ApiOperation(value = "编辑点位") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R edit(@Validated@RequestBody PointUpdateDto pointAddDto) { XpPoint xpPoint = new XpPoint(); BeanUtils.copyProperties(pointAddDto, xpPoint); @@ -132,8 +132,8 @@ */ @PostMapping("/enableDisablePoint") @ApiOperation(value = "启用/禁用") @Transactional @ShardingSphereTransactionType(TransactionType.BASE) // @Transactional // @ShardingSphereTransactionType(TransactionType.BASE) public R enableDisable(@RequestBody XpPointEnableDisableDto dto) { XpPoint xpPoint = xpPointService.getById(dto.getId()); xpPoint.setOperationStatus(dto.getOperationStatus()); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -1403,7 +1403,7 @@ useUserCouponDto.setUserCouponId(order.getCouponId()); xpAppUserCouponClient.useUserCoupon(useUserCouponDto); } // 计算完价格后 挑选优惠券 // 计算完价格后 挑选优惠券 GetUserCouponDto getUserCouponDto = new GetUserCouponDto(); getUserCouponDto.setUserId(Long.valueOf(uid)); getUserCouponDto.setTotalAmount(order.getOrderMoney().doubleValue()); @@ -1415,10 +1415,31 @@ } order.setAppUserId(null); baseMapper.updateById(order); // 结束后的车辆操作 if(vehicle!=null){ // 修改车辆状态 vehicle.setState(0); xpVehicleClient.updateVehicleById(vehicle); // 修改mongodb车辆状态 // 生成新的巡游单子 回到最新巡游的初始起点位置 XpCruiseOrder xpCruiseOrders = xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 2).orderByDesc(BaseModel::getCreateTime).last("limit 1")); int temp=0; if(xpCruiseOrders==null){ temp=1; //特殊情况 可能没有产生终止的订单 (到站点就被正常接单了)所以找正常订单 xpCruiseOrders=xpCruiseOrderMapper.selectOne(new LambdaQueryWrapper<XpCruiseOrder>().eq(XpCruiseOrder::getVehicleId, vehicle.getId()).eq(XpCruiseOrder::getStatus, 3).orderByDesc(BaseModel::getCreateTime).last("limit 1")); } XpCruiseOrder xpCruiseOrder = new XpCruiseOrder(); xpCruiseOrder.setVehicleId(vehicle.getId()); xpCruiseOrder.setFleetId(vehicle.getFleetId()); @@ -1430,10 +1451,19 @@ xpCruiseOrder.setStartLon(order.getEndLon()); xpCruiseOrder.setStartLat(order.getEndLat()); xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId()); xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName()); xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon()); xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat()); // 完成的直接走终点 终止的走起点 if(temp==0){ xpCruiseOrder.setEndPointId(xpCruiseOrders.getStartPointId()); xpCruiseOrder.setEndPointName(xpCruiseOrders.getStartPointName()); xpCruiseOrder.setEndLon(xpCruiseOrders.getStartLon()); xpCruiseOrder.setEndLat(xpCruiseOrders.getStartLat()); }else { xpCruiseOrder.setEndPointId(xpCruiseOrders.getEndPointId()); xpCruiseOrder.setEndPointName(xpCruiseOrders.getEndPointName()); xpCruiseOrder.setEndLon(xpCruiseOrders.getEndLon()); xpCruiseOrder.setEndLat(xpCruiseOrders.getEndLat()); } xpCruiseOrder.setStatus(1); xpCruiseOrder.setLastOrderId(xpCruiseOrders.getId());