xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -4,6 +4,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.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xiaopeng.account.model.dto.ReceiveCouponDto; import com.xiaopeng.account.model.dto.SendCouponDto; import com.xiaopeng.account.model.query.XpUserCouponListQuery; @@ -11,6 +12,8 @@ import com.xiaopeng.account.model.vo.XpAppUserCouponTotalVo; import com.xiaopeng.account.model.vo.XpAppUserCouponVo; import com.xiaopeng.account.service.IXpAppUserCouponService; import com.xiaopeng.account.vo.CouponReceiptRecordDto; import com.xiaopeng.account.vo.CouponReceiptRecordVo; import com.xiaopeng.account.vo.UserCouponListVo; import com.xiaopeng.api.dto.account.GetUserCouponDto; import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest; @@ -372,4 +375,20 @@ .eq("activity_id", activityId).eq("is_deleted", 0)); return R.ok(list); } @GetMapping("/api/v1/activity/getCouponReceiptRecord") @ApiOperation(value = "获取活动领取记录", tags = {"管理后台-活动管理"}) public R<PageInfo<CouponReceiptRecordDto>> getCouponReceiptRecord(@RequestBody CouponReceiptRecordVo vo){ PageInfo<CouponReceiptRecordDto> pageInfo = new PageInfo<CouponReceiptRecordDto>(vo.getPageNum(), vo.getPageSize()); List<CouponReceiptRecordDto> couponReceiptRecord = xpAppUserCouponService.getCouponReceiptRecord(pageInfo, vo); pageInfo.setRecords(couponReceiptRecord); return R.ok(pageInfo); } } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/mapper/XpAppUserCouponMapper.java
@@ -4,6 +4,8 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.xiaopeng.account.model.query.XpUserCouponListQuery; import com.xiaopeng.account.model.vo.XpAppUserCouponListVo; import com.xiaopeng.account.vo.CouponReceiptRecordDto; import com.xiaopeng.account.vo.CouponReceiptRecordVo; import com.xiaopeng.api.model.account.XpAppUserCoupon; import com.xiaopeng.api.query.account.XpAppUserCouponPageListQuery; import com.xiaopeng.common.core.web.page.PageInfo; @@ -26,4 +28,8 @@ List<XpAppUserCouponListVo> pageList(@Param("pageInfo") PageInfo<XpAppUserCouponListVo> pageInfo, @Param("query") XpAppUserCouponPageListQuery query); List<XpAppUserCoupon> getCouponReceiptRecord(@Param("pageInfo") PageInfo<CouponReceiptRecordDto> pageInfo, @Param("query") CouponReceiptRecordVo vo); } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/IXpAppUserCouponService.java
@@ -7,6 +7,8 @@ import com.xiaopeng.account.model.vo.XpAppUserCouponListVo; import com.xiaopeng.account.model.vo.XpAppUserCouponTotalVo; import com.xiaopeng.account.model.vo.XpAppUserCouponVo; import com.xiaopeng.account.vo.CouponReceiptRecordDto; import com.xiaopeng.account.vo.CouponReceiptRecordVo; import com.xiaopeng.account.vo.UserCouponListVo; import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest; import com.xiaopeng.api.dto.account.UseUserCouponDto; @@ -101,4 +103,12 @@ * @return */ UserCouponListVo getUserCouponList(BigDecimal orderMoney, String uid); /** * 获取管理后台活动领取记录列表 * @param vo * @return */ List<CouponReceiptRecordDto> getCouponReceiptRecord(PageInfo<CouponReceiptRecordDto> pageInfo, CouponReceiptRecordVo vo); } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/service/impl/XpAppUserCouponServiceImpl.java
@@ -16,6 +16,9 @@ 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.CouponReceiptRecordDto; import com.xiaopeng.account.vo.CouponReceiptRecordVo; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.api.vo.account.CouponVo; import com.xiaopeng.account.vo.UserCouponListVo; import com.xiaopeng.api.dto.account.NavigationCouponPickerRequest; @@ -37,6 +40,7 @@ import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.enums.MessageTemplateEnum; import com.xiaopeng.common.core.utils.DateUtils; import com.xiaopeng.common.core.utils.StringUtils; import com.xiaopeng.common.core.web.page.PageInfo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Async; @@ -46,10 +50,7 @@ import java.math.BigDecimal; import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.Comparator; import java.util.List; import java.util.Objects; import java.util.*; import java.util.stream.Collectors; /** @@ -589,4 +590,44 @@ userCouponListVo.setNotUsableCouponList(notUsableCouponList); return userCouponListVo; } /** * 获取管理后台活动领取人员记录 * @param vo * @return */ public List<CouponReceiptRecordDto> getCouponReceiptRecord(PageInfo<CouponReceiptRecordDto> pageInfo, CouponReceiptRecordVo vo) { List<Long> appUserIds = new ArrayList<Long>(); if(StringUtils.isNotEmpty(vo.getName())){ List<XpWhitelist> data = xpWhiteListClient.getXpWhitelistByName(vo.getName()).getData(); if(!data.isEmpty()){ appUserIds.addAll(data.stream().map(XpWhitelist::getAppUserId).collect(Collectors.toList())); } } if(StringUtils.isNotEmpty(vo.getPhone())){ List<XpWhitelist> data = xpWhiteListClient.getXpWhitelistByPhone(vo.getPhone()).getData(); if(!data.isEmpty()){ appUserIds.addAll(data.stream().map(XpWhitelist::getAppUserId).collect(Collectors.toList())); } } List<XpAppUserCoupon> couponReceiptRecord = this.baseMapper.getCouponReceiptRecord(pageInfo, vo); List<CouponReceiptRecordDto> list = new ArrayList<CouponReceiptRecordDto>(); for (XpAppUserCoupon xpAppUserCoupon : couponReceiptRecord) { CouponReceiptRecordDto dto = new CouponReceiptRecordDto(); dto.setId(xpAppUserCoupon.getId()); dto.setCreateTime(xpAppUserCoupon.getCreateTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); XpWhitelist data = xpWhiteListClient.getXpWhitelistByUid(xpAppUserCoupon.getAppUserId()).getData(); if(null != data){ dto.setName(data.getNickName()); dto.setPhone(data.getAccount()); } dto.setNum(1); dto.setExpireTime(xpAppUserCoupon.getExpirationTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); dto.setStatus(xpAppUserCoupon.getStatus()); list.add(dto); } return list; } } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/CouponReceiptRecordDto.java
New file @@ -0,0 +1,24 @@ package com.xiaopeng.account.vo; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @Data @ApiModel public class CouponReceiptRecordDto { @ApiModelProperty("领取记录id") private Long id; @ApiModelProperty("领取时间") private String createTime; @ApiModelProperty("领取人") private String name; @ApiModelProperty("领取人电话") private String phone; @ApiModelProperty("领取数量") private Integer num; @ApiModelProperty("到期时间") private String expireTime; @ApiModelProperty("状态(1=未使用,2=已使用,3=已过期 0=待领取)") private Integer status; } xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/vo/CouponReceiptRecordVo.java
New file @@ -0,0 +1,28 @@ package com.xiaopeng.account.vo; import com.xiaopeng.common.core.web.page.BasePage; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.util.List; @Data @ApiModel public class CouponReceiptRecordVo extends BasePage { @ApiModelProperty("活动id") private Integer activityId; @ApiModelProperty("领取开始时间yyyy-MM-dd HH:mm:ss") private String startTime; @ApiModelProperty("领取结束时间yyyy-MM-dd HH:mm:ss") private String endTime; @ApiModelProperty("领取人") private String name; @ApiModelProperty("领取电话") private String phone; @ApiModelProperty("状态(1=未使用,2=已使用,3=已过期 0=待领取)") private Integer status; private List<Long> appUserIds; } xp-robotaxi-account-boot/src/main/resources/mapper/account/XpAppUserCouponMapper.xml
@@ -66,4 +66,22 @@ </select> <select id="getCouponReceiptRecord" resultType="com.xiaopeng.api.model.account.XpAppUserCoupon"> select * from xp_app_user_coupon where activity_id = #{query.activityId} <if test="null != query.startTime and '' != query.startTime and null != query.endTime and '' != query.endTime"> and create_time between #{query.startTime} and #{query.endTime} </if> <if test="null != query.appUserIds and query.appUserIds.size() > 0"> and app_user_id in <foreach collection="query.appUserIds" item="item" open="(" close=")" separator=","> #{item} </foreach> </if> <if test="null != query.status"> and status = #{query.status} </if> order by create_time desc </select> </mapper> xp-robotaxi-api/src/main/java/com/xiaopeng/api/factory/operation/XpWhiteListClientFallbackFactory.java
@@ -3,6 +3,7 @@ import com.xiaopeng.api.feignClient.operation.XpCouponClient; import com.xiaopeng.api.feignClient.operation.XpWhiteListClient; import com.xiaopeng.api.model.operation.XpCoupon; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.common.core.domain.R; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.openfeign.FallbackFactory; @@ -21,6 +22,18 @@ public R<List<String>> getAllWhiteList() { return null; } public R<List<XpWhitelist>> getXpWhitelistByName(String name) { return R.fail("获取白名单失败"); } public R<List<XpWhitelist>> getXpWhitelistByPhone(String phone) { return R.fail(); } public R<XpWhitelist> getXpWhitelistByUid(Long uid) { return R.fail("根据用户id查询白名单失败"); } }; } } xp-robotaxi-api/src/main/java/com/xiaopeng/api/feignClient/operation/XpWhiteListClient.java
@@ -5,6 +5,7 @@ import com.xiaopeng.api.factory.operation.XpPricingClientFallbackFactory; import com.xiaopeng.api.factory.operation.XpWhiteListClientFallbackFactory; import com.xiaopeng.api.model.operation.XpPricing; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.common.core.domain.R; import com.xiaopeng.common.core.dto.ServiceNameConstantsEnum; import org.springframework.cloud.openfeign.FeignClient; @@ -26,4 +27,29 @@ @PostMapping("/logan/api/v1/whitelist/inner/getAllWhiteList") R<List<String>> getAllWhiteList(); /** * 根据名称模糊搜索 * @param name * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByName") R<List<XpWhitelist>> getXpWhitelistByName(@RequestParam String name); /** * 根据手机号查询 * @param phone * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByPhone") R<List<XpWhitelist>> getXpWhitelistByPhone(@RequestParam String phone); /** * 根据账号查询 * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByUid") R<XpWhitelist> getXpWhitelistByUid(@RequestParam Long uid); } xp-robotaxi-api/src/main/java/com/xiaopeng/api/model/order/XpOrder.java
@@ -174,6 +174,9 @@ @ApiModelProperty(value = "优惠券id") private Long couponId; @ApiModelProperty(value = "活动id") private Integer activityId; /** * {@link OrderStatusEnum } */ xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpActicityController.java
@@ -69,9 +69,9 @@ private XpAppUserCouponClient appUserCouponClient; /** * 获取所有白名单手机号 * * @return */ @PostMapping("/logan/inner/acticity/findListToIds") @@ -90,6 +90,7 @@ /** * 是否第一次进入某活动 * * @return 活动信息,id 和 img */ @GetMapping("/api/v1/mini-program/acticity/firstEnter") @@ -132,6 +133,7 @@ /** * 是否第一次进入某活动 * * @return 活动信息,id 和 img */ @GetMapping("/api/v1/mini-program/acticity/getFloatActicity") @@ -142,7 +144,6 @@ XpActivity activity = service.getFloatActicity(Long.valueOf(uid)); return R.ok(activity); } @Resource @@ -206,13 +207,15 @@ @GetMapping("/v1/api/appUserCoupon/detail") @ApiOperation(value = "活动详情",tags = {"管理后台-活动管理"},response = XpCoupon.class) public R<XpActivityDto> queryById(@RequestParam Long id){ return R.ok(service.detail(id)); } /** * 根据活动id和优惠券id获取活动策略 * * @param activityId * @param couponId * @return xp-robotaxi-operation-boot/src/main/java/com/xiaopeng/operation/controller/XpWhitelistController.java
@@ -6,6 +6,7 @@ import cn.afterturn.easypoi.excel.entity.ExportParams; import cn.afterturn.easypoi.excel.entity.ImportParams; import cn.hutool.core.util.PhoneUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.xiaopeng.api.model.account.SysUser; import com.xiaopeng.api.model.operation.XpWhitelist; import com.xiaopeng.api.model.operation.XpWhitelistOperlog; @@ -464,6 +465,41 @@ /** * 根据名称模糊搜索 * @param name * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByName") public R<List<XpWhitelist>> getXpWhitelistByName(@RequestParam String name){ List<XpWhitelist> list = xpWhitelistService.list(new QueryWrapper<XpWhitelist>().like("nick_name", name) .eq("status", 1).eq("is_deleted", 0)); return R.ok(list); } /** * 根据手机号查询 * @param phone * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByPhone") public R<List<XpWhitelist>> getXpWhitelistByPhone(@RequestParam String phone){ List<XpWhitelist> list = xpWhitelistService.list(new QueryWrapper<XpWhitelist>().eq("account", phone) .eq("status", 1).eq("is_deleted", 0)); return R.ok(list); } /** * 根据账号查询 * @return */ @PostMapping("/logan/api/v1/whitelist/inner/getXpWhitelistByUid") public R<XpWhitelist> getXpWhitelistByUid(@RequestParam Long uid){ XpWhitelist one = xpWhitelistService.getOne(new QueryWrapper<XpWhitelist>().eq("app_user_id", uid).eq("is_deleted", 0)); return R.ok(one); } } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/controller/XpOrderController.java
@@ -221,7 +221,7 @@ * @param query 分页查询参数 * @return 分页结果 */ @ApiOperation(value = "订单分页列表", tags = {"管理后台-交易管理-订单管理"}) @ApiOperation(value = "订单分页列表", tags = {"管理后台-交易管理-订单管理", "管理后台-活动管理"}) @PostMapping("/api/v1/order/pageList") public R<PageInfo<XpOrderPageVO>> pageList( @RequestBody XpOrderPageQuery query) { PageInfo<XpOrderPageVO> pageInfo = xpOrderService.pageList(query); xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/query/XpOrderPageQuery.java
@@ -50,4 +50,7 @@ @ApiModelProperty(value = "用户ID") private Long uid; @ApiModelProperty("活动id") private Integer activityId; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/model/vo/XpOrderPageVO.java
@@ -66,4 +66,13 @@ @ApiModelProperty(value = "下单终点站点名称") private String endPointName; @ApiModelProperty("优惠金额") private BigDecimal discountAmount; @ApiModelProperty("订单金额合计") private BigDecimal orderTotalAmount; @ApiModelProperty("优惠金额合计") private BigDecimal discountTotalAmount; } xp-robotaxi-order-boot/src/main/java/com/xiaopeng/order/service/impl/XpOrderServiceImpl.java
@@ -261,6 +261,13 @@ } wrapper.eq(Objects.nonNull(query.getUid()), XpOrder::getAppUserId, query.getUid()); wrapper.orderByDesc(XpOrder::getCreateTime); if(null != query.getActivityId()){ wrapper.eq(XpOrder::getActivityId, query.getActivityId()); } List<XpOrder> list = this.list(wrapper); BigDecimal orderMoney = list.stream().map(XpOrder::getOrderMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO); BigDecimal couponMoney = list.stream().map(XpOrder::getCouponMoney).collect(Collectors.toList()).stream().reduce(BigDecimal::add).orElse(BigDecimal.ZERO); // 2. 分页查询 Page<XpOrder> page = new Page<>(query.getPageNum(), query.getPageSize()); @@ -293,7 +300,7 @@ // 5. 组装 VO List<XpOrderPageVO> voList = pageResult.getRecords().stream() .map(order -> convertToPageVO(order, userInfoMap, vehicleMap, fleetMap)) .map(order -> convertToPageVO(order, userInfoMap, vehicleMap, fleetMap, orderMoney, couponMoney)) .collect(Collectors.toList()); // 6. 返回分页结果 @@ -612,7 +619,9 @@ private XpOrderPageVO convertToPageVO(XpOrder order, Map<String, UcUserInfo> userInfoMap, Map<Long, XpVehicle> vehicleMap, Map<Long, XpFleet> fleetMap) { Map<Long, XpFleet> fleetMap, BigDecimal orderMoney, BigDecimal couponMoney) { XpOrderPageVO vo = new XpOrderPageVO(); vo.setId(order.getId()); vo.setOrderNumber(order.getOrderNumber()); @@ -625,6 +634,8 @@ vo.setStatus(order.getStatus()); vo.setStartPointName(order.getStartPointName()); vo.setEndPointName(order.getEndPointName()); vo.setOrderTotalAmount(orderMoney); vo.setDiscountTotalAmount(couponMoney); // 用户信息 if (Objects.nonNull(order.getAppUserId()) && userInfoMap != null && userInfoMap.containsKey(order.getAppUserId().toString())) {