liujie
2026-06-09 c96fbe6b0aeb413a17c429133ee6d81d138144b9
xp-robotaxi-account-boot/src/main/java/com/xiaopeng/account/controller/XpAppUserCouponController.java
@@ -3,6 +3,8 @@
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;
@@ -10,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;
@@ -21,10 +25,15 @@
import com.xiaopeng.api.model.account.XpAppUserCoupon;
import com.xiaopeng.api.model.operation.XpCoupon;
import com.xiaopeng.api.query.account.XpAppUserCouponPageListQuery;
import com.xiaopeng.api.vo.account.AppUserCouponSaveBatchVo;
import com.xiaopeng.api.vo.account.CalculateDiscountAmountVo;
import com.xiaopeng.api.vo.account.NavigationCouponPickerVo;
import com.xiaopeng.api.vo.account.UserCouponVo;
import com.xiaopeng.common.core.domain.R;
import com.xiaopeng.common.core.web.page.PageInfo;
import com.xiaopeng.common.log.annotation.AdminOperationLog;
import com.xiaopeng.common.log.enums.AdminBusinessType;
import com.xiaopeng.common.log.enums.AdminOperationType;
import com.xiaopeng.unifiedverification.interceptor.XpClientCheck;
import io.swagger.annotations.ApiOperation;
import org.springframework.web.bind.annotation.*;
@@ -38,6 +47,9 @@
import java.util.Comparator;
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;
/**
 * <p>
@@ -83,6 +95,12 @@
    @PostMapping("/v1/api/appUserCoupon/deleteByIds")
    @ApiOperation(value = "根据ids删除用户优惠券", tags = {"管理后台-白名单-删除用户优惠券"})
    @AdminOperationLog(
            businessType = AdminBusinessType.APP_USER_COUPON,
            operationType = AdminOperationType.DELETE,
            content = "根据ids删除用户优惠券",
            appendRequestData = true
    )
    public R<Boolean> deleteByIds(@RequestBody XpAppUserCouponPageListQuery query  ) {
        if (query.getIds() == null || query.getIds().isEmpty()) {
            return R.fail("ID列表不能为空");
@@ -105,7 +123,9 @@
        UserCouponVo userCouponVo = new UserCouponVo();
        // 获取用户所有优惠券
        List<XpAppUserCoupon> couponList = xpAppUserCouponService.list(new LambdaQueryWrapper<XpAppUserCoupon>().eq(dto.getUserCouponId()!=null,XpAppUserCoupon::getId, dto.getUserCouponId()).eq(XpAppUserCoupon::getStatus, 1).eq(XpAppUserCoupon::getAppUserId,dto.getUserId()).apply("(FIND_IN_SET({0}, open_city_id) or open_city_id='0')", dto.getOpenCityId()) );
        List<XpAppUserCoupon> couponList = xpAppUserCouponService.list(new LambdaQueryWrapper<XpAppUserCoupon>()
                .eq(dto.getUserCouponId()!=null,XpAppUserCoupon::getId, dto.getUserCouponId()).eq(XpAppUserCoupon::getStatus, 1)
                .eq(XpAppUserCoupon::getAppUserId,dto.getUserId()));
        if(couponList.isEmpty()){
            return R.ok(userCouponVo);
        }
@@ -130,18 +150,21 @@
        if(dto.getUserCouponId()!=null){
            XpAppUserCoupon coupon = couponList.get(0);
            userCouponVo.setId(coupon.getId());
            userCouponVo.setCouponType(coupon.getCouponType());
            userCouponVo.setMoney(coupon.getMoney().doubleValue());
            return R.ok(userCouponVo);
        }else {
            // 优先用满足条件且抵扣金额最大的
            List<XpAppUserCoupon> discountUserCoupons = couponList.stream().filter(e -> e.getCouponType() == 1).sorted(Comparator.comparing(XpAppUserCoupon::getMoney).reversed()).collect(Collectors.toList());
            if(!discountUserCoupons.isEmpty()){
                userCouponVo.setCouponType(discountUserCoupons.get(0).getCouponType());
                userCouponVo.setId(discountUserCoupons.get(0).getId());
                userCouponVo.setMoney(discountUserCoupons.get(0).getMoney().doubleValue());
                return R.ok(userCouponVo);
            }
            List<XpAppUserCoupon> fullUserCoupons = couponList.stream().filter(e -> e.getCouponType() == 2 && dto.getTotalAmount() >= e.getFullMoney().doubleValue()).sorted(Comparator.comparing(XpAppUserCoupon::getMoney).reversed()).collect(Collectors.toList());
            if(!fullUserCoupons.isEmpty()){
                userCouponVo.setCouponType(fullUserCoupons.get(0).getCouponType());
                userCouponVo.setId(fullUserCoupons.get(0).getId());
                userCouponVo.setMoney(fullUserCoupons.get(0).getMoney().doubleValue());
                return R.ok(userCouponVo);
@@ -150,6 +173,8 @@
        }
    }
    @PostMapping("/logan/inner/appUserCoupon/useUserCoupon")
    public R<BigDecimal> useUserCoupon(@RequestBody UseUserCouponDto dto) {
        XpAppUserCoupon appUserCoupon = xpAppUserCouponService.getById(dto.getUserCouponId());
@@ -250,7 +275,7 @@
//            phone = JSONObject.parseObject(data.toString()).getString("mobile");
//        }
        XpAppUserCoupon coupon = xpAppUserCouponService.getById(couponId);
        if(uid.equals(coupon.getAppUserId().toString())){
        if(Long.valueOf(uid).equals(coupon.getAppUserId())){
            XpAppUserCouponListVo vo = new XpAppUserCouponListVo();
            vo.setCouponId(coupon.getId().toString());
            vo.setTitle(coupon.getCouponName());
@@ -305,10 +330,16 @@
    }
    @PostMapping("/api/v1/appUserCoupon/saveInfo")
    @PostMapping("/api/v1/appUserCoupon/saveInfo_activity")
    @ApiOperation(value = "活动发放优惠券", tags = {"管理后台-活动发放优惠券"})
    public R<String> sendSave(@RequestBody UseUserCouponDto dto) {
        xpAppUserCouponService.saveInfo(dto);
    @AdminOperationLog(
            businessType = AdminBusinessType.APP_USER_COUPON,
            operationType = AdminOperationType.ISSUE,
            content = "活动发放优惠券",
            appendRequestData = true
    )
    public R<String> saveInfo_activity(@RequestBody UseUserCouponDto dto) {
        xpAppUserCouponService.saveInfo_activity(dto);
        return R.ok();
    }
    /**
@@ -316,6 +347,12 @@
     */
    @PostMapping("/api/v1/appUserCoupon/send")
    @ApiOperation(value = "发放优惠券", tags = {"管理后台-发放优惠券"})
    @AdminOperationLog(
            businessType = AdminBusinessType.APP_USER_COUPON,
            operationType = AdminOperationType.ISSUE,
            content = "发放优惠券",
            appendRequestData = true
    )
    public R<String> send(@RequestBody SendCouponDto dto) {
        xpAppUserCouponService.send(dto);
        return R.ok();
@@ -360,4 +397,52 @@
        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);
    }
    @PostMapping("/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);
    }
    /**
     * 计算优惠金额
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/appUserCoupon/calculateDiscountAmount")
    public R<BigDecimal> calculateDiscountAmount(@RequestBody CalculateDiscountAmountVo vo){
        BigDecimal bigDecimal = xpAppUserCouponService.calculateDiscountAmount(vo);
        return R.ok(bigDecimal);
    }
    /**
     * 批量保存数据
     * @param vo
     * @return
     */
    @PostMapping("/logan/inner/appUserCoupon/saveBatch")
    public R<?> saveBatch(@RequestBody AppUserCouponSaveBatchVo vo){
        xpAppUserCouponService.saveBatch(vo.getXpAppUserCoupons());
        return R.ok();
    }
}