xp-robotaxi-itinerary-boot/src/main/java/com/xiaopeng/itinerary/service/impl/XpPricingServiceImpl.java
@@ -349,8 +349,13 @@ fareVo.setOriginalFare(xpPricingCardVo.getTotalPrice()); fareVo.setOriginalFareStr(fareVo.getOriginalFare() + ""); if (userCouponVo != null) { fareVo.setDiscountAmount(userCouponVo.getMoney()); fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount()); if(userCouponVo.getMoney()>fareVo.getOriginalFare()){ fareVo.setDiscountAmount(fareVo.getOriginalFare()); fareVo.setFinalFare(0.0); }else { fareVo.setDiscountAmount(userCouponVo.getMoney()); fareVo.setFinalFare(fareVo.getOriginalFare() - fareVo.getDiscountAmount()); } if(fareVo.getFinalFare()>0){ fareVo.setSystemDiscount(fareVo.getFinalFare()); fareVo.setFinalFare(0.0); @@ -382,7 +387,7 @@ fareVo.setFinalFareStr("0.0"); } fareVo.setOriginalFare(new BigDecimal(fareVo.getOriginalFare()).setScale(2,RoundingMode.HALF_UP).doubleValue()); fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue()); fareVo.setSystemDiscount(new BigDecimal(fareVo.getSystemDiscount() == null ? 0 : fareVo.getSystemDiscount()).setScale(2,RoundingMode.HALF_UP).doubleValue()); routeAndFareVo.setFareEstimate(fareVo); xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpClockInController.java
@@ -4,11 +4,8 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.common.security.service.TokenService; import com.xiaopeng.maintenance.dto.ClockDTO; import com.xiaopeng.maintenance.dto.ClockInStatisticsDto; import com.xiaopeng.maintenance.dto.VerifyRangeDTO; import com.xiaopeng.maintenance.dto.*; import com.xiaopeng.maintenance.service.IXpClockInService; import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto; import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo; import com.xiaopeng.maintenance.vo.ClockInStatisticsVo; import io.swagger.annotations.ApiOperation; @@ -95,8 +92,8 @@ @ApiOperation(value = "排班考勤打卡统计详情列表", tags = {"管理后台-运维执行"}) @PostMapping("/api/v1/clock/getClockInStatisticsDetails") public R<PageInfo<ClockInStatisticsDetailsDto>> getClockInStatisticsDetails(@RequestBody ClockInStatisticsDetailsVo query){ PageInfo<ClockInStatisticsDetailsDto> clockInStatisticsDetails = xpClockInService.getClockInStatisticsDetails(query); public R<GetClockInStatisticsDetailsDto> getClockInStatisticsDetails(@RequestBody ClockInStatisticsDetailsVo query){ GetClockInStatisticsDetailsDto clockInStatisticsDetails = xpClockInService.getClockInStatisticsDetails(query); return R.ok(clockInStatisticsDetails); } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpVehicleOperationsController.java
@@ -83,19 +83,10 @@ // 找车辆的任务 生成巡游单子 下发命令 R<XpCruiseOrder> newCruiseOrder = xpCruisePlanClient.getNewCruiseOrder(new NewCruiseOrderDto(xpVehicle.getId(),xpVehicle.getVehicleVin(),xpVehicle.getFleetId(),vehiclePosition.getPoint())); if(newCruiseOrder.getData()!=null){ xpCruiseOrderClient.addCruiseOrder(newCruiseOrder.getData()); // 下发命令 PushOrderDto pushOrderDto = new PushOrderDto(); pushOrderDto.setVin(xpVehicle.getVehicleVin()); pushOrderDto.setOrderId("XU" + newCruiseOrder.getData().getId()); pushOrderDto.setStartLatitude(newCruiseOrder.getData().getStartLat()); pushOrderDto.setStartLongitude(newCruiseOrder.getData().getStartLon()); pushOrderDto.setEndLatitude(newCruiseOrder.getData().getEndLat()); pushOrderDto.setEndLongitude(newCruiseOrder.getData().getEndLon()); pushOrderDto.setOrderType(OrderType.CRUISE_ORDER); pushOrderDto.setStage(2); orderMissionClient.pushOrder(pushOrderDto); R<Long> longR = xpCruiseOrderClient.addCruiseOrder(newCruiseOrder.getData()); if(200 != longR.getCode()){ return R.fail(longR.getMsg()); } } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/GetClockInStatisticsDetailsDto.java
New file @@ -0,0 +1,26 @@ package com.xiaopeng.maintenance.dto; import com.xiaopeng.common.core.web.page.PageInfo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel public class GetClockInStatisticsDetailsDto { @ApiModelProperty("应打卡次数") private Integer shouldClockInCount; @ApiModelProperty("正常打开") private Long normalClockInCount; @ApiModelProperty("迟到") private Long lateClockInCount; @ApiModelProperty("缺卡") private Long missingClockInCount; @ApiModelProperty("列表数据") private PageInfo<ClockInStatisticsDetailsDto> list; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpClockInService.java
@@ -4,10 +4,7 @@ import com.baomidou.mybatisplus.extension.service.IService; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.maintenance.dto.ClockDTO; import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto; import com.xiaopeng.maintenance.dto.ClockInStatisticsDto; import com.xiaopeng.maintenance.dto.VerifyRangeDTO; import com.xiaopeng.maintenance.dto.*; import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo; import com.xiaopeng.maintenance.vo.ClockInStatisticsVo; import org.springframework.web.bind.annotation.RequestBody; @@ -77,7 +74,7 @@ * @param query * @return */ PageInfo<ClockInStatisticsDetailsDto> getClockInStatisticsDetails(ClockInStatisticsDetailsVo query); GetClockInStatisticsDetailsDto getClockInStatisticsDetails(ClockInStatisticsDetailsVo query); /** xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpClockInServiceImpl.java
@@ -1,12 +1,16 @@ package com.xiaopeng.maintenance.service.impl; import cn.hutool.core.collection.CollUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.conditions.query.QueryChainWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.xiaopeng.api.feignClient.account.XpOperationUserClient; import com.xiaopeng.api.feignClient.vehicleConvoy.XpFleetOperationsClient; import com.xiaopeng.api.model.account.SysRole; import com.xiaopeng.api.model.account.XpOperationsRole;import com.xiaopeng.api.model.account.XpOperationsUser;import com.xiaopeng.api.model.maintenance.XpCheckLocation; import com.xiaopeng.api.model.maintenance.XpClockIn; import com.xiaopeng.api.model.maintenance.XpSchedulingDetail; import com.xiaopeng.api.model.maintenance.XpShift; import com.xiaopeng.api.vo.account.XpOperationsUserVO; import com.xiaopeng.api.vo.account.XpOperationsUserWithRoleVO;import com.xiaopeng.common.core.constant.Constants; @@ -16,14 +20,12 @@ import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.core.utils.poi.ExcelUtil; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.maintenance.dto.ClockDTO; import com.xiaopeng.maintenance.dto.ClockInStatisticsDetailsDto; import com.xiaopeng.maintenance.dto.ClockInStatisticsDto; import com.xiaopeng.maintenance.dto.VerifyRangeDTO; import com.xiaopeng.maintenance.dto.*; import com.xiaopeng.maintenance.mapper.XpCheckLocationMapper; import com.xiaopeng.maintenance.mapper.XpClockInMapper; import com.xiaopeng.maintenance.mapper.XpShiftMapper; import com.xiaopeng.maintenance.service.IXpClockInService; import com.xiaopeng.maintenance.service.IXpSchedulingDetailService; import com.xiaopeng.maintenance.vo.ClockInStatisticsDetailsVo; import com.xiaopeng.maintenance.vo.ClockInStatisticsVo; import lombok.extern.slf4j.Slf4j; @@ -67,6 +69,12 @@ @Resource private XpOperationUserClient xpOperationUserClient; @Resource private IXpSchedulingDetailService xpSchedulingDetailService; @Resource private XpFleetOperationsClient fleetOperationsClient; @@ -374,7 +382,8 @@ * @return */ @Override public PageInfo<ClockInStatisticsDetailsDto> getClockInStatisticsDetails(ClockInStatisticsDetailsVo query) { public GetClockInStatisticsDetailsDto getClockInStatisticsDetails(ClockInStatisticsDetailsVo query) { GetClockInStatisticsDetailsDto dto = new GetClockInStatisticsDetailsDto(); PageInfo<ClockInStatisticsDetailsDto> pageInfo = new PageInfo<>(query.getPageNum(), query.getPageSize()); String startTime = ""; @@ -393,7 +402,21 @@ clockInStatistic.setRoleName(xpOperationsUserWithRoleVO.getRoles().stream().map(SysRole::getRoleName).collect(Collectors.joining(";"))); } pageInfo.setRecords(clockInStatisticsDetails); return pageInfo; dto.setList(pageInfo); XpOperationsUser xpOperationsUser = xpOperationUserClient.queryById(query.getAppUserId()).getData(); List<Long> longList = fleetOperationsClient.getFleetIdsByUserId(xpOperationsUser.getId()).getData(); List<XpSchedulingDetail> list = xpSchedulingDetailService.list(new QueryWrapper<XpSchedulingDetail>().eq("fleetId", longList.get(0)).between(StringUtils.isNotEmpty(startTime), "plan_time", startTime, endTime)); QueryWrapper<XpClockIn> last1 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 1 or clock_out_result = 1)" + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : "")); QueryWrapper<XpClockIn> last2 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 2 or clock_out_result = 2)" + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : "")); QueryWrapper<XpClockIn> last3 = new QueryWrapper<XpClockIn>().eq("app_user_id", query.getAppUserId()).last(" and (clock_in_result = 3 or clock_out_result = 3)" + (StringUtils.isNotEmpty(startTime) ? " and (DATE_FORMAT(clock_in_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "' or DATE_FORMAT(clock_out_time, '%Y-%m-%d') between '" + startTime + "' and '" + endTime + "'))" : "")); dto.setShouldClockInCount(list.size() * 2); dto.setNormalClockInCount(this.count(last1)); dto.setLateClockInCount(this.count(last2)); dto.setMissingClockInCount(this.count(last3)); return dto; } xp-robotaxi-maintenance-boot/src/main/resources/mapper/maintenance/XpClockInMapper.xml
@@ -96,8 +96,8 @@ CONCAT(d.shift_name, '(', d.start_time, '-', d.end_time, ')') as shiftName, DATE_FORMAT(a.clock_in_time, '%Y-%m-%d %H:%i') as clockInTime, DATE_FORMAT(a.clock_out_time, '%Y-%m-%d %H:%i') as clockOutTime, CASE WHEN a.clock_in_result = 1 THEN '正常' WHEN a.clock_in_result = 2 THEN '迟到' ELSE '缺卡' END as clockInResult, CASE WHEN a.clock_out_result = 1 THEN '正常' WHEN a.clock_out_result = 2 THEN '早退' ELSE '缺卡' END as clockOutResult, CASE WHEN a.clock_in_result = 1 THEN '正常' WHEN a.clock_in_result = 2 THEN '迟到' WHEN a.clock_in_result = 3 THEN '缺卡' ELSE '' END as clockInResult, CASE WHEN a.clock_out_result = 1 THEN '正常' WHEN a.clock_out_result = 2 THEN '早退' WHEN a.clock_out_result = 3 THEN '缺卡' ELSE '' END as clockOutResult, a.clock_in_address as clockInLocation from xp_clock_in a left join xp_fleet_operations b on (a.app_user_id = b.operations_user_id) xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -592,8 +592,22 @@ if (order.getStatus() == 1) { order.setStatus(0); Long userId = order.getAppUserId(); order.setAppUserId(null); baseMapper.updateById(order); // 消息推送 Map<String, Object> params = new HashMap<>(); Map<String, Object> content = new HashMap<>(); content.put("orderId", order.getId().toString()); content.put("status", OrderStatusEnum.CANCELED.getCode()); params.put("type", PushMessageTypeEnum.ORDER_STATUS.getDesc()); params.put("content", com.alibaba.fastjson2.JSONObject.toJSONString(content)); params.put("timestamp", new Date().getTime() + ""); String message = JSONObject.toJSONString(params); SendMessageDTO sendMessageDTO = new SendMessageDTO(); sendMessageDTO.setMessage(message); sendMessageDTO.setAppUserId(String.valueOf(userId)); xpPushMessageClient.sendStatus(sendMessageDTO); return; } // 1. 更新订单状态为已取消(0)