xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpOperationsUserController.java
@@ -47,7 +47,9 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; import com.xiaopeng.common.log.annotation.AdminOperationLog; import com.xiaopeng.common.log.enums.AdminBusinessType; import com.xiaopeng.common.log.enums.AdminOperationType; @@ -132,6 +134,26 @@ } /** * 根据ID查询运维用户信息 * @return 用户列表 */ @GetMapping("/logan/inner/xpOperationsUser/queryByIds") R<List<XpOperationsUser>> queryByIds(@RequestParam String operationsUserId) { List<Long> ids = Arrays.stream(operationsUserId.split(",")) .map(Long::parseLong) .collect(Collectors.toList()); List<XpOperationsUser> operationsUser = xpOperationsUserService.listByIds(ids); for (XpOperationsUser xpOperationsUser : operationsUser) { XpOperationsRole role = xpOperationsRoleMapper.selectOne(new QueryWrapper<XpOperationsRole>().eq("operations_user_id", xpOperationsUser.getId())); SysRole sysRole = sysRoleService.getById(role.getRoleId()); xpOperationsUser.setRoleName(sysRole.getRoleName()); xpOperationsUser.setPhoneNumber(SensitiveDataCryptoUtil.decryptIfPossible(xpOperationsUser.getPhoneNumber())); } return R.ok(operationsUser); } /** * 根据昵称查询运维用户信息 * * @param nickName 昵称 xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpOperationUserClientFallbackFactory.java
@@ -98,6 +98,12 @@ log.error("根据id列表获取运维人员列表失败,原因:{}", cause.getMessage()); return R.fail("根据id列表获取运维人员列表失败)" + cause.getMessage()); } @Override public R<List<XpOperationsUser>> queryByIds(String operationsUserId) { log.error("根据id查询运维人员用户信息失败,原因: {}", cause.getMessage()); return R.ok(null); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpOperationUserClient.java
@@ -114,4 +114,14 @@ @PostMapping("/logan/inner/xpOperationsUser/pageListByIds") R<PageInfo<XpOperationsUserWithRoleVO>> listByQueryIds(@RequestBody OptionalUsersPageListQuery query); /** * 根据多个id查询运维用户信息 * @param operationsUserId * @return */ @GetMapping("/logan/inner/xpOperationsUser/queryByIds") R<List<XpOperationsUser>> queryByIds(@RequestParam String operationsUserId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/maintenance/XpCruiseCheckInRule.java
@@ -35,7 +35,7 @@ */ @TableField("operations_user_id") @ApiModelProperty(value = "运维人id") private Long operationsUserId; private String operationsUserId; /** * 任务开始时间 */ xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/order/XpInvoiceVo.java
@@ -127,17 +127,22 @@ @ApiModelProperty(value = "行程结束日期,格式:yyyy-MM-dd") private String tripEndDate; @ApiModelProperty(value = "用户名") private String userName; @ApiModelProperty(value = "用户账号") private String userAccount; @ApiModelProperty(value = "行程人手机号") private String phone; @ApiModelProperty(value = "车型") private String carType; @ApiModelProperty(value = "上车时间") private String pickupTime; @ApiModelProperty(value = "城市") private String city; @ApiModelProperty(value = "下车时间") private String dropOffTime; @ApiModelProperty(value = "起点") private String startPoint; @@ -148,10 +153,13 @@ @ApiModelProperty(value = "里程(公里)") private String mileage; @ApiModelProperty(value = "金额(元)") private BigDecimal amount; @ApiModelProperty(value = "备注") private String remark; @ApiModelProperty(value = "原价金额") private String oldPrice; @ApiModelProperty(value = "币种") private String currency; } } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/controller/XpCruiseCheckInRuleController.java
@@ -133,6 +133,21 @@ return R.ok(); } @ApiOperation(value = "编辑巡游打卡规则", tags = {"管理后台-巡游打卡规则管理"}) @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/updateXpCruiseCheckInRule") @AdminOperationLog( businessType = AdminBusinessType.CRUISE_CHECK_IN_RULE_MANAGEMENT, operationType = AdminOperationType.EDIT, content = "编辑巡游打卡规则", appendRequestData = true ) public R<?> updateXpCruiseCheckInRule(@RequestBody XpCruiseCheckInRuleDto dto){ xpCruiseCheckInRuleService.updateXpCruiseCheckInRule(dto); return R.ok(); } @ApiOperation(value = "删除巡游打卡规则", tags = {"管理后台-巡游打卡规则管理"}) @PostMapping("/maintenance-admin/api/v1/cruiseCheckInRecord/delXpCruiseCheckInRule/{id}") @AdminOperationLog( xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/dto/XpCruiseCheckInRuleDto.java
@@ -12,7 +12,7 @@ @ApiModel public class XpCruiseCheckInRuleDto extends XpCruiseCheckInRule { @ApiModelProperty("关联人id") private Long relationId; private String relationId; @ApiModelProperty("打卡点位id") private List<XpCruiseCheckInRuleLocation> points; } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/IXpCruiseCheckInRuleService.java
@@ -76,6 +76,11 @@ * @param dto */ void addXpCruiseCheckInRule(XpCruiseCheckInRuleDto dto); /** * 编辑巡游打卡规则 * @param dto */ void updateXpCruiseCheckInRule(XpCruiseCheckInRuleDto dto); /** xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/service/impl/XpCruiseCheckInRuleServiceImpl.java
@@ -40,6 +40,7 @@ import java.time.ZoneOffset; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import java.util.Map; @@ -313,9 +314,7 @@ throw new ServiceException("巡游打卡规则名称已存在"); } // 校验同一运维人员是否已存在有效规则(未删除且非循环模式或时间在有效期内) long count = this.count(new LambdaQueryWrapper<XpCruiseCheckInRule>() .eq(XpCruiseCheckInRule::getOperationsUserId, dto.getRelationId()) .eq(XpCruiseCheckInRule::getDeleted, false)); long count = countByAnyOperationsUserId(dto.getRelationId(), null); if (count > 0) { throw new ServiceException("该运维人员已存在有效的巡游打卡规则"); } @@ -325,6 +324,36 @@ xpCruiseCheckInRule.setDeleted(false); xpCruiseCheckInRule.setOperationsUserId(dto.getRelationId()); this.save(xpCruiseCheckInRule); dto.getPoints().forEach(s->{ s.setCruiseCheckInRuleId(xpCruiseCheckInRule.getId()); }); xpCruiseCheckInRuleLocationService.saveBatch(dto.getPoints()); } /** * 编辑巡游打卡规则 * @param dto */ @Override public void updateXpCruiseCheckInRule(XpCruiseCheckInRuleDto dto) { XpCruiseCheckInRule one = this.getOne(new QueryWrapper<XpCruiseCheckInRule>().like("name", dto.getName()).ne("id", dto.getId()).eq("is_deleted", 0)); if(null != one){ throw new ServiceException("巡游打卡规则名称已存在"); } // 校验同一运维人员是否已存在有效规则(未删除且非循环模式或时间在有效期内) long count = countByAnyOperationsUserId(dto.getRelationId(), dto.getId()); if (count > 0) { throw new ServiceException("该运维人员已存在有效的巡游打卡规则"); } XpCruiseCheckInRule xpCruiseCheckInRule = new XpCruiseCheckInRule(); BeanUtils.copyProperties(dto, xpCruiseCheckInRule); xpCruiseCheckInRule.setDeleted(false); xpCruiseCheckInRule.setOperationsUserId(dto.getRelationId()); this.updateById(xpCruiseCheckInRule); // 移除原来的id xpCruiseCheckInRuleLocationService.remove(new LambdaQueryWrapper<XpCruiseCheckInRuleLocation>().eq(XpCruiseCheckInRuleLocation::getCruiseCheckInRuleId, xpCruiseCheckInRule.getId())); dto.getPoints().forEach(s->{ s.setCruiseCheckInRuleId(xpCruiseCheckInRule.getId()); }); @@ -353,10 +382,36 @@ }).collect(Collectors.toList()); info.setLocationList(collect); XpOperationsUser xpOperationsUser = xpOperationsUserClient.queryById(byId.getOperationsUserId()).getData(); List<XpOperationsUser> xpOperationsUser = xpOperationsUserClient.queryByIds(byId.getOperationsUserId()).getData(); if(null != xpOperationsUser){ info.setOperationsUser(xpOperationsUser.getNickName()); info.setOperationsUser(xpOperationsUser.stream().map(XpOperationsUser::getNickName).collect(Collectors.toList())); } return info; } private long countByAnyOperationsUserId(String relationId, Integer excludeRuleId) { if (StringUtils.isEmpty(relationId)) { return 0; } List<String> relationIds = Arrays.stream(relationId.split(",")) .map(String::trim) .filter(StringUtils::isNotEmpty) .collect(Collectors.toList()); if (relationIds.isEmpty()) { return 0; } LambdaQueryWrapper<XpCruiseCheckInRule> queryWrapper = new LambdaQueryWrapper<XpCruiseCheckInRule>() .eq(XpCruiseCheckInRule::getDeleted, false) .and(wrapper -> { wrapper.apply("find_in_set({0}, operations_user_id)", relationIds.get(0)); for (int i = 1; i < relationIds.size(); i++) { wrapper.or().apply("find_in_set({0}, operations_user_id)", relationIds.get(i)); } }); if (excludeRuleId != null) { queryWrapper.ne(XpCruiseCheckInRule::getId, excludeRuleId); } return this.count(queryWrapper); } } xp-robotaxi-maintenance-boot/src/main/java/com/xiaopeng/maintenance/vo/XpCruiseCheckInRuleInfoVo.java
@@ -16,5 +16,5 @@ private List<CruiseCheckInLocationVo> locationList; @ApiModelProperty("关联人名称") private String operationsUser; private List<String> operationsUser; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -1007,13 +1007,8 @@ @GetMapping("/api/v1/mini-program/order/queryOrderStatusFromOrderId") @XpClientCheck(checkToken = false, checkOtpToken = true) public R<OrderStatusFromOrderIdVo> queryOrderStatusFromOrderId(Long orderId) { XpOrder order = xpOrderService.getById(orderId); OrderStatusFromOrderIdVo orderStatusFromOrderIdVo = new OrderStatusFromOrderIdVo(); orderStatusFromOrderIdVo.setOrderId(order.getId()); orderStatusFromOrderIdVo.setStatus(order.getStatus()); return R.ok(orderStatusFromOrderIdVo); } return R.ok( xpOrderService.queryOrderStatusFromOrderId(orderId)); /** xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -4883,7 +4883,7 @@ if(order.getPayType()==3){ // 免密查询 如果成功则调用结算 CreditOrderQueryDto dto = new CreditOrderQueryDto(); dto.setBusinessOrderId(OrderCodeUtil.getOrderCode("MMZF")); dto.setBusinessOrderId(order.getBusinessOrderId()); dto.setAuthOrderId(order.getAuthOrderId()); dto.setPayType("13"); R<CreditOrderQueryVo> creditOrderQueryVoR = xpPayFrontClient.queryCreditOrder(dto); @@ -5093,17 +5093,46 @@ ArrayList<XpInvoiceVo> xpInvoiceVoList = new ArrayList<>(list.size()); R<List<XpVehicle>> r = xpVehicleClient.listByIds(list.stream().map(XpOrder::getVehicleId).collect(Collectors.toList())); List<XpVehicle> vehicleList = r.getData(); // 数据组装 for (XpOrder xpOrder : list) { XpInvoiceVo xpInvoiceVo = new XpInvoiceVo(); xpInvoiceVo.setUid(xpOrder.getAppUserId().toString()); xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber()); xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney()); BigDecimal orderMoney = xpOrder.getOrderMoney() == null ? BigDecimal.ZERO : xpOrder.getOrderMoney(); XpInvoiceVo.GoodsDetail goodsDetail = new XpInvoiceVo.GoodsDetail(); goodsDetail.setProductName("Robotaxi出行服务"); goodsDetail.setProductCode(null); goodsDetail.setProductSpecCode("XE2000398"); goodsDetail.setProductSpec(null); goodsDetail.setProductUnit("次"); goodsDetail.setQuantity(1); goodsDetail.setUnitPrice(orderMoney); goodsDetail.setInTaxAmount(orderMoney); goodsDetail.setTaxRate(null); goodsDetail.setTaxAmount(null); goodsDetail.setExTaxAmount(null); goodsDetail.setItemId(xpOrder.getOrderNumber()); goodsDetail.setCouponAmount(xpOrder.getCouponMoney()); goodsDetail.setCompanyCode("8000"); xpInvoiceVo.setGoodsDetail(JSON.toJSONString(goodsDetail)); xpInvoiceVo.setOrderTotalAmount(xpOrder.getPayMoney()); xpInvoiceVo.setOrderBusAmount(xpOrder.getOrderMoney()); xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney()); xpInvoiceVo.setOrderFinishTime(xpOrder.getTripEnd()!=null?String.valueOf(xpOrder.getTripEnd()):""); JSONObject extData = new JSONObject(); extData.put("companyCode", "8000"); extData.put("realCompanyCode", null); extData.put("siteName",null); extData.put("pile", null); extData.put("payFag", null); extData.put("supplierCode", null); xpInvoiceVo.setExtData(JSON.toJSONString(extData)); xpInvoiceVo.setXpInvoiceFlag(true); xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus()); XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary(); @@ -5112,14 +5141,11 @@ itinerary.setTripEndDate(xpOrder.getTripEnd()!=null?xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):""); XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get(); itinerary.setCarType(xpVehicle.getVehicleModel()); itinerary.setTripStartDate(xpOrder.getBoardingTime()!=null?xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):""); itinerary.setCity(xpOrder.getCityName()); itinerary.setStartPoint(xpOrder.getStartAddress()); itinerary.setEndPoint(xpOrder.getEndAddress()); itinerary.setMileage(null == xpOrder.getMileageKilometers() ? "0" : xpOrder.getMileageKilometers().toString()); itinerary.setMileage(xpOrder.getMileageKilometers()!=null ? xpOrder.getMileageKilometers().toString() :"0"); itinerary.setAmount(xpOrder.getOrderMoney()); xpInvoiceVo.setItinerary(itinerary); @@ -5155,26 +5181,54 @@ XpInvoiceVo xpInvoiceVo = new XpInvoiceVo(); xpInvoiceVo.setUid(xpOrder.getAppUserId().toString()); xpInvoiceVo.setOrderNo(xpOrder.getOrderNumber()); xpInvoiceVo.setOrderTotalAmount(xpOrder.getOrderMoney()); BigDecimal orderMoney = xpOrder.getOrderMoney() == null ? BigDecimal.ZERO : xpOrder.getOrderMoney(); XpInvoiceVo.GoodsDetail goodsDetail = new XpInvoiceVo.GoodsDetail(); goodsDetail.setProductName("Robotaxi出行服务"); goodsDetail.setProductCode(null); goodsDetail.setProductSpecCode("XE2000398"); goodsDetail.setProductSpec(null); goodsDetail.setProductUnit("次"); goodsDetail.setQuantity(1); goodsDetail.setUnitPrice(orderMoney); goodsDetail.setInTaxAmount(orderMoney); goodsDetail.setTaxRate(null); goodsDetail.setTaxAmount(null); goodsDetail.setExTaxAmount(null); goodsDetail.setItemId(xpOrder.getOrderNumber()); goodsDetail.setCouponAmount(xpOrder.getCouponMoney()); goodsDetail.setCompanyCode("8000"); xpInvoiceVo.setGoodsDetail(JSON.toJSONString(goodsDetail)); xpInvoiceVo.setOrderTotalAmount(xpOrder.getPayMoney()); xpInvoiceVo.setOrderBusAmount(xpOrder.getOrderMoney()); xpInvoiceVo.setOrderDiscountAmount(xpOrder.getCouponMoney()); xpInvoiceVo.setOrderFinishTime(String.valueOf(xpOrder.getTripEnd())); xpInvoiceVo.setOrderFinishTime(xpOrder.getTripEnd()!=null?String.valueOf(xpOrder.getTripEnd()):""); JSONObject extData = new JSONObject(); extData.put("companyCode", "8000"); extData.put("realCompanyCode", null); extData.put("siteName",null); extData.put("pile", null); extData.put("payFag", null); extData.put("supplierCode", null); xpInvoiceVo.setExtData(JSON.toJSONString(extData)); xpInvoiceVo.setXpInvoiceFlag(true); xpInvoiceVo.setInvoiceStatus(xpOrder.getInvoiceStatus()); XpInvoiceVo.Itinerary itinerary = new XpInvoiceVo.Itinerary(); // yyyy-MM-dd格式 itinerary.setTripStartDate(xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); itinerary.setTripEndDate(xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); itinerary.setTripStartDate(xpOrder.getAcceptanceTime()!=null?xpOrder.getAcceptanceTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):""); itinerary.setTripEndDate(xpOrder.getTripEnd()!=null?xpOrder.getTripEnd().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):""); XpVehicle xpVehicle = vehicleList.stream().filter(vehicle -> vehicle.getId().equals(xpOrder.getVehicleId())).findFirst().get(); itinerary.setCarType(xpVehicle.getVehicleModel()); itinerary.setTripStartDate(xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); itinerary.setTripStartDate(xpOrder.getBoardingTime()!=null?xpOrder.getBoardingTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd")):""); itinerary.setCity(xpOrder.getCityName()); itinerary.setStartPoint(xpOrder.getStartAddress()); itinerary.setEndPoint(xpOrder.getEndAddress()); itinerary.setMileage(xpOrder.getMileageKilometers().toString()); itinerary.setAmount(xpOrder.getOrderMoney()); itinerary.setMileage(xpOrder.getMileageKilometers()!=null ? xpOrder.getMileageKilometers().toString() :"0"); xpInvoiceVo.setItinerary(itinerary); xpInvoiceVoList.add(xpInvoiceVo);