package com.ruoyi.account.controller; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.ruoyi.account.api.model.TAppUserSiteFavorite; import com.ruoyi.account.api.vo.SitePriceDropNotifyVO; import com.ruoyi.account.dto.FavoriteSiteRequest; import com.ruoyi.account.service.TAppUserSiteFavoriteService; import com.ruoyi.chargingPile.api.feignClient.SiteClient; import com.ruoyi.chargingPile.api.vo.FavoriteSitePriceVO; import com.ruoyi.common.core.domain.R; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.common.security.service.TokenService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Value; import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; import java.util.Collections; import java.util.List; @RestController @RequestMapping("/site-favorite") public class TAppUserSiteFavoriteController { @Resource private TAppUserSiteFavoriteService favoriteService; @Resource private TokenService tokenService; @Resource private SiteClient siteClient; @Value("${wx.applet.price-drop-template-id:7nCycRUZxQ2jxAb2UaYazjp2sPZy3qYyeLqVytyhHhY}") private String priceDropTemplateId; @GetMapping("/list") @ApiOperation(value = "查询当前用户收藏站点", tags = {"小程序-收藏"}) public AjaxResult> list() { Long userId = tokenService.getLoginUserApplet().getUserId(); return AjaxResult.success(favoriteService.list(new LambdaQueryWrapper() .eq(TAppUserSiteFavorite::getAppUserId, userId) .orderByDesc(TAppUserSiteFavorite::getCreateTime))); } @GetMapping("/check/{siteId}") @ApiOperation(value = "检查站点是否已收藏", tags = {"小程序-收藏"}) public AjaxResult check(@PathVariable Integer siteId) { Long userId = tokenService.getLoginUserApplet().getUserId(); return AjaxResult.success(favoriteService.count(new LambdaQueryWrapper() .eq(TAppUserSiteFavorite::getAppUserId, userId) .eq(TAppUserSiteFavorite::getSiteId, siteId)) > 0); } @PostMapping @ApiOperation(value = "收藏站点", tags = {"小程序-收藏"}) public AjaxResult save(@Validated @RequestBody FavoriteSiteRequest request) { Long userId = tokenService.getLoginUserApplet().getUserId(); R> priceResponse = siteClient.getFavoriteSitePrices( Collections.singletonList(request.getSiteId())); if (priceResponse == null || priceResponse.getData() == null || priceResponse.getData().isEmpty() || priceResponse.getData().get(0).getCurrentPrice() == null) { return AjaxResult.error("站点当前价格不可用,暂时无法收藏"); } favoriteService.saveOrRestore(userId, request.getSiteId(), priceResponse.getData().get(0).getCurrentPrice(), request.getNotifyEnabled()); return AjaxResult.success(); } @DeleteMapping("/{siteId}") @ApiOperation(value = "取消收藏站点", tags = {"小程序-收藏"}) public AjaxResult delete(@PathVariable Integer siteId) { Long userId = tokenService.getLoginUserApplet().getUserId(); favoriteService.remove(new LambdaQueryWrapper() .eq(TAppUserSiteFavorite::getAppUserId, userId) .eq(TAppUserSiteFavorite::getSiteId, siteId)); return AjaxResult.success(); } @PostMapping("/{siteId}/subscribe") @ApiOperation(value = "开启站点降价提醒", tags = {"小程序-收藏"}) public AjaxResult subscribe(@PathVariable Integer siteId) { Long userId = tokenService.getLoginUserApplet().getUserId(); boolean updated = favoriteService.lambdaUpdate() .eq(TAppUserSiteFavorite::getAppUserId, userId) .eq(TAppUserSiteFavorite::getSiteId, siteId) .set(TAppUserSiteFavorite::getNotifyEnabled, true) .update(); if (!updated) { return AjaxResult.error("收藏记录不存在,请重新收藏后再开启提醒"); } return AjaxResult.success(); } @GetMapping("/template") @ApiOperation(value = "获取降价提醒模板ID", tags = {"小程序-收藏"}) public AjaxResult template() { return AjaxResult.success(priceDropTemplateId); } @PostMapping("/inner/notifyPriceDrop") @ApiOperation(value = "计费策略审批通过降价后通知收藏用户(内部接口)", tags = {"内部接口-收藏"}) public R notifyPriceDrop(@RequestBody List drops) { favoriteService.notifyPriceDrop(drops); return R.ok(); } }