xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -3,6 +3,7 @@ import cn.hutool.core.util.StrUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.account.model.dto.ReceiveCouponDto; import com.xiaopeng.account.model.dto.SendCouponDto; import com.xiaopeng.account.model.query.XpUserCouponListQuery; @@ -360,4 +361,15 @@ UserCouponListVo userCouponList = xpAppUserCouponService.getUserCouponList(orderMoney, uid); return R.ok(userCouponList); } /** * 获取用户活动领取的优惠券 * @return */ @PostMapping("/logan/inner/appUserCoupon/getXpAppUserCoupon") public R<List<XpAppUserCoupon>> getXpAppUserCoupon(@RequestParam Long activityId){ List<XpAppUserCoupon> list = xpAppUserCouponService.list(new QueryWrapper<XpAppUserCoupon>() .eq("activity_id", activityId).eq("is_deleted", 0)); return R.ok(list); } } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -16,7 +16,7 @@ import com.xiaopeng.account.model.vo.XpAppUserCouponVo; import com.xiaopeng.account.service.IXpAppUserCouponService; import com.xiaopeng.account.util.holiday.HolidayUtil; import com.xiaopeng.account.vo.CouponVo; import com.xiaopeng.api.vo.account.CouponVo; import com.xiaopeng.account.vo.UserCouponListVo; import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest; import com.xiaopeng.api.dto.account.UcUserInfo; xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/UserCouponListVo.java
@@ -1,5 +1,6 @@ package com.xiaopeng.account.vo; import com.xiaopeng.api.vo.account.CouponVo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/account/XpAppUserCouponClientFallbackFactory.java
@@ -6,6 +6,7 @@ import com.xiaopeng.api.dto.statistics.UserStatisticsDTO; import com.xiaopeng.api.feignClient.account.XpAppUserClient; import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient; import com.xiaopeng.api.model.account.XpAppUserCoupon; import com.xiaopeng.api.vo.account.UserCouponVo; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; @@ -14,6 +15,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; /** * 小程序用户Feign客户端降级工厂 @@ -58,6 +60,11 @@ return null; } @Override public R<List<XpAppUserCoupon>> getXpAppUserCoupon(Long activityId) { log.error("获取用户活动领取的优惠券失败,原因: {}", cause.getMessage()); return R.fail("获取用户活动领取的优惠券失败,原因: "+cause.getMessage()); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/order/XpOrderClientFallbackFactory.java
@@ -121,6 +121,12 @@ log.error("保存订单轨迹数据失败,原因: {}", cause.getMessage()); return R.fail("保存订单轨迹数据失败"); } @Override public R<Integer> determineUserType(Long userId) { log.error("确定用户类型失败,原因: {}", cause.getMessage()); return R.fail("确定用户类型失败"); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/account/XpAppUserCouponClient.java
@@ -3,6 +3,7 @@ import com.xiaopeng.api.dto.account.GetUserCouponDto; import com.xiaopeng.api.dto.account.UseUserCouponDto; import com.xiaopeng.api.factory.account.XpAppUserCouponClientFallbackFactory; import com.xiaopeng.api.model.account.XpAppUserCoupon; import com.xiaopeng.api.vo.account.UserCouponVo; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; @@ -11,8 +12,10 @@ import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestParam; import java.math.BigDecimal; import java.util.List; /** * 小程序用户Feign客户端 @@ -53,4 +56,12 @@ @ApiOperation(value = "活动发放优惠券", tags = {"管理后台-活动发放优惠券"}) R<String> saveInfo_activity(@RequestBody UseUserCouponDto dto) ; /** * 获取用户活动领取的优惠券 * @return */ @PostMapping("/logan/inner/appUserCoupon/getXpAppUserCoupon") R<List<XpAppUserCoupon>> getXpAppUserCoupon(@RequestParam Long activityId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/order/XpOrderClient.java
@@ -153,5 +153,11 @@ /** * 判断用户类型 * @param userId * @return 1=老用户,2=新用户,3=流失用户 */ @PostMapping("/logan/inner/order/determineUserType") R<Integer> determineUserType(@RequestParam Long userId); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActicityUser.java
@@ -1,5 +1,6 @@ package com.xiaopeng.api.model.operation; import com.alibaba.fastjson2.JSONArray; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; @@ -41,7 +42,7 @@ private Integer userType; @ApiModelProperty(value = "指定用户json数组") private String userList; private JSONArray userList; @ApiModelProperty(value = "策略组名称") private String strategyName; xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/operation/XpActivity.java
@@ -1,9 +1,12 @@ package com.xiaopeng.api.model.operation; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.IdType; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; import com.baomidou.mybatisplus.annotation.TableName; import com.fasterxml.jackson.annotation.JsonFormat; import com.xiaopeng.api.vo.account.CouponVo; import com.xiaopeng.common.core.web.domain.BaseModel; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; @@ -14,6 +17,7 @@ import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; /** * <p> @@ -37,13 +41,16 @@ private String acticityName; @ApiModelProperty(value = "活动类型 如新人活动、媒体邀约活动、日常提频等") private Integer activityType; private Integer acticityType; @ApiModelProperty(value = "是否开启活动总限额") private boolean enableTotalLimit; private Integer aggregateLimit; @ApiModelProperty(value = "是否开启活动总限额") private BigDecimal totalLimit; @ApiModelProperty(value = "总限额") private BigDecimal limitation; @ApiModelProperty(value = "封面图片json") private JSONObject coverImage; @ApiModelProperty(value = "开始时间") @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8") @@ -65,10 +72,65 @@ @ApiModelProperty(value = "邀请启用 1=是 0=否") private Boolean inviteEnable; @ApiModelProperty(value = "图片") private String img; @ApiModelProperty("微信通知(0=否,1=是)") private Integer wechatNotification; @ApiModelProperty(value = "富文本内容") private String richText; @ApiModelProperty("微信通知到账提醒(0=否,1=是)") private Integer wechatReceivedReminder; @ApiModelProperty("微信通知即将过期提醒(0=否,1=是)") private Integer wechatAboutExpireReminder; @ApiModelProperty("微信通知即将过期天数") private Integer wechatAboutExpireDays; @ApiModelProperty("微信通知活动开始提醒(0=否,1=是)") private Integer wechatActicityStart; @ApiModelProperty("微信通知临近券生效前X分钟通知") private Integer wechatActicityStartMinutes; @ApiModelProperty("短信通知(0=否,1=是)") private Integer smsNotification; @ApiModelProperty("短信通知到账提醒(0=否,1=是)") private Integer smsReceivedReminder; @ApiModelProperty("短信通知即将过期提醒(0=否,1=是)") private Integer smsAboutExpireReminder; @ApiModelProperty("短信通知即将过期天数") private Integer smsAboutExpireDays; @ApiModelProperty("短信通知活动开始提醒(0=否,1=是)") private Integer smsActicityStart; @ApiModelProperty("短信通知临近券生效前X分钟通知") private Integer smsActicityStartMinutes; @ApiModelProperty("短信通知屏蔽开始时间") private LocalDateTime smsStartBlockingTime; @ApiModelProperty("短信通知屏蔽结束时间") private LocalDateTime smsEndBlockingTime; @ApiModelProperty("小程序弹窗通知(0=否,1=是)") private Integer miniProgramNotification; @ApiModelProperty("小程序弹窗标题") private String miniProgramPopupTitle; @ApiModelProperty("小程序弹窗按钮文案") private String miniProgramBtnText; @ApiModelProperty("小程序弹窗券到账提醒(0=否,1=是)") private String miniProgramReceivedReminder; @ApiModelProperty("小程序弹窗即将过期提醒(0=否,1=是)") private String miniProgramAboutExpireReminder; @ApiModelProperty("小程序弹窗临近券生效前X分钟") private Integer miniProgramAboutExpireMinutes; @ApiModelProperty("通知内容") private String expireMinutesNotificationContent; @ApiModelProperty("小程序弹窗临近到期时间前X天") private Integer aboutExpireDays; @ApiModelProperty("通知内容") private String expireDaysNotificationContent; @ApiModelProperty("是否开启浮窗(0=否,1=是)") private Integer enableFloatWindow; @ApiModelProperty("浮窗优先级权重") private Integer floatWindowPriority; @ApiModelProperty("浮窗跳转链接") private String floatWindowJumpUrl; @ApiModelProperty(value = "是否第一次 1=是 0=否") @TableField(exist = false) private Boolean isFirst; @ApiModelProperty(value = "优惠券") @TableField(exist = false) private List<CouponVo> coupons; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/account/CouponVo.java
File was renamed from xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/CouponVo.java @@ -1,4 +1,4 @@ package com.xiaopeng.account.vo; package com.xiaopeng.api.vo.account; import io.swagger.annotations.ApiModel; @@ -30,4 +30,6 @@ private String stackable; @ApiModelProperty("生效规则") private String effectAndInvalid; @ApiModelProperty("数量") private Long quantity; } xp-robotaxi-api/src/main/java/com/xiaopeng/api/vo/operation/XpActivityVo.java
File was deleted xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -3,13 +3,23 @@ import com.xiaopeng.api.dto.operation.XpActivityDto; import com.xiaopeng.api.model.operation.*; import com.xiaopeng.api.feignClient.account.XpAppUserCouponClient; import com.xiaopeng.api.model.account.XpAppUserCoupon; import com.xiaopeng.api.model.operation.XpActicityCoupon; import com.xiaopeng.api.model.operation.XpActicityStrategy; import com.xiaopeng.api.model.operation.XpActivity; import com.xiaopeng.api.model.operation.XpCoupon; import com.xiaopeng.api.query.operation.XpActivityPageListQuery; import com.xiaopeng.api.vo.operation.XpActivityVo; import com.xiaopeng.api.vo.account.CouponVo; import com.xiaopeng.common.core.constant.CacheConstants; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.utils.bean.BeanUtils; import com.xiaopeng.common.core.web.page.PageInfo; import com.xiaopeng.operation.service.*; import com.xiaopeng.operation.service.IXpActicityCouponService; import com.xiaopeng.operation.service.IXpActicityService; import com.xiaopeng.operation.service.IXpActicityStrategyService; import com.xiaopeng.operation.service.IXpCouponService; import com.xiaopeng.unifiedverification.interceptor.XpClientCheck; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -23,7 +33,10 @@ import javax.servlet.http.HttpServletRequest; import java.time.Duration; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Set; import java.util.stream.Collectors; /** * <p> @@ -49,6 +62,14 @@ @Resource private IXpActicityStrategyService xpActicityStrategyService; @Resource private IXpCouponService xpCouponService; @Resource private XpAppUserCouponClient appUserCouponClient; /** * 获取所有白名单手机号 * @return @@ -72,26 +93,57 @@ * @return 活动信息,id 和 img */ @GetMapping("/api/v1/mini-program/acticity/firstEnter") @ApiOperation(value = "获取是否第一次推送活动", tags = {"管理后台-活动首次进入情况"}) public R<XpActivityVo> firstEnter(HttpServletRequest request){ @ApiOperation(value = "获取是否第一次推送活动", tags = {"小程序-首页活动"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R<XpActivity> firstEnter(HttpServletRequest request){ String uid = request.getHeader("XP-Uid"); ValueOperations<String, String> ops = redisTemplate.opsForValue(); XpActivity activity = service.activiting(); List<XpActicityCoupon> cps = couponService.lambdaQuery().eq(XpActicityCoupon::getActivityId, activity.getId()).list(); XpActivityVo ret = new XpActivityVo(); XpActivity activity = service.activiting(Long.valueOf(uid)); if (activity !=null) { BeanUtils.copyBeanProp(ret, activity); List<XpAppUserCoupon> couponList = appUserCouponClient.getXpAppUserCoupon(activity.getId()).getData(); Set<Long> longSet = couponList.stream().map(XpAppUserCoupon::getCouponId).collect(Collectors.toSet()); if(longSet.isEmpty()){ return R.ok(); } List<XpCoupon> xpCoupons1 = xpCouponService.listByIds(longSet); List<CouponVo> couponVos = new ArrayList<>(); for (XpCoupon xpCoupon : xpCoupons1) { XpAppUserCoupon xpAppUserCoupon = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).findFirst().get(); CouponVo vo = new CouponVo(); vo.setId(xpCoupon.getId()); vo.setConditionalAmount(xpCoupon.getConditionalAmount()); vo.setAmount(xpCoupon.getAmount()); vo.setCouponType(xpCoupon.getCouponType()); vo.setCouponName(xpCoupon.getCouponName()); vo.setCouponDesc(xpCoupon.getCouponDescription()); vo.setEndTime(xpAppUserCoupon.getExpirationTime().toString()); long count = couponList.stream().filter(s -> s.getCouponId().equals(xpCoupon.getId())).count(); vo.setQuantity(count); couponVos.add(vo); } Duration duration = Duration.between(LocalDateTime.now(), activity.getEndTime()); Boolean isFirst = ops.setIfAbsent(CacheConstants.firstEnterActivity(String.valueOf(activity.getId()), uid),"1", duration); ret.setIsFirst(isFirst); ret.setCoupons(cps); activity.setIsFirst(isFirst); activity.setCoupons(couponVos); } return R.ok(ret); return R.ok(activity); } IXpActicityCouponService couponService; /** * 是否第一次进入某活动 * @return 活动信息,id 和 img */ @GetMapping("/api/v1/mini-program/acticity/getFloatActicity") @ApiOperation(value = "获取首页活动悬浮图标数据", tags = {"小程序-首页活动"}) @XpClientCheck(checkToken = false, checkOtpToken = true) public R<XpActivity> getFloatActicity(HttpServletRequest request){ String uid = request.getHeader("XP-Uid"); XpActivity activity = service.getFloatActicity(Long.valueOf(uid)); return R.ok(activity); } @Resource IXpActicityStrategyService strategyService; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/IXpActicityService.java
@@ -23,9 +23,17 @@ List<String> findListToIds(String acticityName); XpActivity activiting(); XpActivity activiting(Long uid); void save(XpActivityDto dto); XpActivityDto detail(Long id); /** * 获取悬浮弹窗活动数据 * @param uid * @return */ XpActivity getFloatActicity(Long uid); } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpActicityServiceImpl.java
@@ -1,7 +1,9 @@ package com.xiaopeng.operation.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.api.dto.operation.XpActivityDto; import com.xiaopeng.api.feignClient.order.XpOrderClient; import com.xiaopeng.api.model.operation.XpActicityStrategy; import com.xiaopeng.api.model.operation.XpActicityUser; import com.xiaopeng.api.model.operation.XpActivity; @@ -21,6 +23,7 @@ import javax.annotation.Resource; import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Random; @@ -47,6 +50,11 @@ @Resource private IXpActivityNoticeService activityNotice; @Resource private XpOrderClient xpOrderClient; @Override public PageInfo<XpActivityDto> pageList(XpActivityPageListQuery query) { PageInfo<XpActivityDto> pageInfo = new PageInfo<>(query.getPageNum(),query.getPageSize()); @@ -63,17 +71,27 @@ query.like(XpActivity::getActicityName, acticityName); return listObjs(query, Object::toString); } @Override public XpActivity activiting() { LambdaQueryWrapper<XpActivity> query = new LambdaQueryWrapper<>(); LocalDateTime now = LocalDateTime.now(); query.le(XpActivity::getStartTime, now) .ge(XpActivity::getEndTime, now); List<XpActivity> list = list(query); if(!list.isEmpty()){ return list.get(new Random().nextInt(list.size())); } return null; public XpActivity activiting(Long uid) { //获取当前用户可参与的活动 List<Integer> actitctiyIds = new ArrayList<>(); //全部用户 List<XpActicityUser> list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", 1)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //判断用户类型 2=老用户,3=新用户,4=流失用户 Integer userType = xpOrderClient.determineUserType(uid).getData(); list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", userType)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //指定用户 list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", 5) .last(" and JSON_CONTAINS(user_list, '" + uid + "', '$')")); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); XpActivity one = this.getOne(new QueryWrapper<XpActivity>().eq("status", 2).eq("is_deleted", 0) .eq("mini_program_notification", 1).in(!actitctiyIds.isEmpty(), "id", actitctiyIds) .last(" and now() between start_time and end_time order by float_window_priority desc limit 1")); return one; } @Override @@ -112,4 +130,31 @@ return ret; } /** * 获取悬浮弹窗活动数据 * @param uid * @return */ @Override public XpActivity getFloatActicity(Long uid) { //获取当前用户可参与的活动 List<Integer> actitctiyIds = new ArrayList<>(); //全部用户 List<XpActicityUser> list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", 1)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //判断用户类型 2=老用户,3=新用户,4=流失用户 Integer userType = xpOrderClient.determineUserType(uid).getData(); list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", userType)); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); //指定用户 list = userService.list(new QueryWrapper<XpActicityUser>().eq("is_deleted", 0).eq("user_type", 5) .last(" and JSON_CONTAINS(user_list, '" + uid + "', '$')")); actitctiyIds.addAll(list.stream().map(XpActicityUser::getActitcityId).collect(Collectors.toList())); XpActivity one = this.getOne(new QueryWrapper<XpActivity>().eq("status", 2).eq("is_deleted", 0) .eq("enable_float_window", 1).in(!actitctiyIds.isEmpty(), "id", actitctiyIds) .last(" and now() between start_time and end_time order by float_window_priority desc limit 1")); return one; } } xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/service/impl/XpPointServiceImpl.java
@@ -186,7 +186,7 @@ nearestNextVo.setStationId(xpPoint.getStationId()==null?null:xpPoint.getStationId().toString()); // 判断是否收藏 if(pointIdsByUserId!=null && !pointIdsByUserId.getData().isEmpty()){ if(pointIdsByUserId.getData()!=null && !pointIdsByUserId.getData().isEmpty()){ if(pointIdsByUserId.getData().contains(xpPoint.getId())){ nearestNextVo.setIsCollect(1); } @@ -734,6 +734,7 @@ orderDistanceVo.setMinDistance(xpSystemSetting.getMinOrderDistance()); orderDistanceVo.setAdsorptionDistance(xpSystemSetting.getAdsorptionDistance()); orderDistanceVo.setNearPointDistance(xpSystemSetting.getNearPointDistance()); orderDistanceVo.setTemperatureUnit(xpSystemSetting.getTemperatureUnit()); return orderDistanceVo; } return orderDistanceVo; xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/vo/OrderDistanceVo.java
@@ -20,4 +20,7 @@ @ApiModelProperty(value = "吸附距离") private Integer adsorptionDistance; @ApiModelProperty(value = "天气单位") private String temperatureUnit; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/CustomerServiceController.java
@@ -154,7 +154,7 @@ @GetMapping("/getOrderHistoryTrajectory/{orderId}") @ApiOperation(value = "根据订单号查询实际行驶路径", notes = "客服系统对接") @ApiImplicitParam(name = "orderId", value = "订单ID", required = true, dataType = "Long", paramType = "path") public R<List<TrajectoryVo>> getOrderHistoryTrajectory(@PathVariable Long orderId){ public R<OrderHistoryTrajectoryVo> getOrderHistoryTrajectory(@PathVariable Long orderId){ List<OrderTrajectory> orderTrajectoryList = mongoTemplate.find(Query.query(Criteria.where("orderId").is(orderId)), OrderTrajectory.class); List<TrajectoryVo> collect = orderTrajectoryList.stream().map(trajectory -> { String[] split = trajectory.getLocation().split(","); @@ -163,7 +163,9 @@ jsonObject.setLat(Double.parseDouble(split[1])); return jsonObject; }).collect(Collectors.toList()); return R.ok(collect); OrderHistoryTrajectoryVo vo = new OrderHistoryTrajectoryVo(); vo.setActualPath(collect); return R.ok(vo); } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -68,6 +68,8 @@ import java.math.BigDecimal; import java.math.RoundingMode; import java.net.URLEncoder; import java.time.LocalDateTime; import java.time.ZoneOffset; import java.util.ArrayList; import java.util.Arrays; import java.util.List; @@ -707,4 +709,25 @@ vo.setSlaveMacList(jsonObject.getList("slaveMacList", String.class)); return R.ok(vo); } /** * 判断用户类型 * @param userId * @return 2=老用户,3=新用户,4=流失用户 */ @PostMapping("/logan/inner/order/determineUserType") public R<Integer> determineUserType(@RequestParam Long userId){ //判断流失用户 XpOrder one = xpOrderService.getOne(new QueryWrapper<XpOrder>().eq("app_user_id", userId).in("status", Arrays.asList(9, 10)).last(" order by create_time desc limit 1")); if(null != one){ long time = LocalDateTime.now().toEpochSecond(ZoneOffset.of("GMT+8")) - one.getCreateTime().toEpochSecond(ZoneOffset.of("GMT+8")); if(time >= 60 * 60 * 24 * 5){ return R.ok(4); } return R.ok(2); }else{ return R.ok(3); } } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/OrderHistoryTrajectoryVo.java
New file @@ -0,0 +1,17 @@ package com.xiaopeng.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel public class OrderHistoryTrajectoryVo { @ApiModelProperty("预估行驶路径") private List<TrajectoryVo> estimatedPath; @ApiModelProperty("实际行驶路径") private List<TrajectoryVo> actualPath; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/VehicleSeatStatus.java
New file @@ -0,0 +1,14 @@ package com.xiaopeng.order.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel public class VehicleSeatStatus { @ApiModelProperty("座椅状态") private String seatOccupied; @ApiModelProperty("安全带状态") private String seatbeltFastened; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/vo/VehicleSeatStatusVo.java
@@ -9,11 +9,11 @@ @ApiModel public class VehicleSeatStatusVo { @ApiModelProperty("主驾") private String frontLeft; private VehicleSeatStatus frontLeft; @ApiModelProperty("副驾") private String frontRight; private VehicleSeatStatus frontRight; @ApiModelProperty("左后") private String rearLeft; private VehicleSeatStatus rearLeft; @ApiModelProperty("右后") private String rearRight; private VehicleSeatStatus rearRight; }