Browse Source

feature1.0.0-img:添加快手用户接口

master
chengkun 4 years ago
parent
commit
379bcc9888
  1. 28
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/FhConfig.java
  2. 1
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TiktokConfig.java
  3. 16
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/WxConfig.java
  4. 5
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java
  5. 12
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java
  6. 226
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java
  7. 84
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhUserController.java
  8. 19
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java
  9. 45
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java
  10. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CollectionUserDto.java
  11. 35
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/FhUserDto.java
  12. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java
  13. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java
  14. 2
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java
  15. 410
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java
  16. 8
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java
  17. 151
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java
  18. 27
      bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/FhSessionInfoVo.java
  19. 30
      bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml

28
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/FhConfig.java

@ -0,0 +1,28 @@
package com.bnyer.img.config;
import lombok.Getter;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.context.annotation.Configuration;
/**
* 快手配置类
* @author chengkun
* @date 2022/4/21 17:43
*/
@Configuration
@ConfigurationProperties(prefix = "bnyer.img.fasthand")
@Getter
@RefreshScope
public class FhConfig {
@Value("${bnyer.img.fasthand.appId}")
private String appId;
@Value("${bnyer.img.fasthand.secret}")
public String secret;
@Value("${bnyer.img.fasthand.sessionInfoUrl}")
public String sessionInfoUrl;
}

1
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/TiktokConfig.java

@ -12,6 +12,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import javax.annotation.Resource;
/**
* 字节配置类
* @author chengkun
* @date 2022/4/21 17:43
*/

16
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/config/WxConfig.java

@ -12,6 +12,7 @@ import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
/**
* 微信配置类
* @author chengkun
* @date 2022/4/21 17:43
*/
@ -33,19 +34,4 @@ public class WxConfig {
@Value("${bnyer.img.wechat.tokenUrl}")
public String tokenUrl;
@Bean
public WxMaConfig wxMaConfig() {
WxMaDefaultConfigImpl config = new WxMaDefaultConfigImpl();
config.setAppid(appId);
config.setSecret(secret);
return config;
}
@Bean
public WxMaService wxMaService(WxMaConfig maConfig) {
WxMaService service = new WxMaServiceImpl();
service.setWxMaConfig(maConfig);
return service;
}
}

5
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/RedisKeyConstant.java

@ -68,6 +68,11 @@ public class RedisKeyConstant {
*/
public static final String TIKTOK_USER_LOGIN_KEY = "bnyer.img.tiktok.user:";
/**
* 快手小程序用户登录键
*/
public static final String FH_USER_LOGIN_KEY = "bnyer.img.fh.user:";
/**
* 微信小程序用户登录键
*/

12
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java

@ -11,6 +11,11 @@ public class TiktokConstant {
*/
public static final String SUCCESS = "0";
/**
* 快手授权接口成功响应码
*/
public static final String FH_SUCCESS = "1";
/**
* 成为艺术家已绑定手机号
*/
@ -49,5 +54,10 @@ public class TiktokConstant {
/**
* 微信获取session调用失败
*/
public static final Integer CALL_WECHAT_FAIL = 105008;
public static final Integer WECHAT_AUTH_ERROR = 105008;
/**
* 调用快手授权失败
*/
public static final Integer FH_AUTH_ERROR = 105009;
}

226
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhMiniController.java

@ -0,0 +1,226 @@
package com.bnyer.img.controller;
import com.alibaba.fastjson.JSON;
import com.bnyer.common.core.web.controller.BaseController;
import com.bnyer.common.core.web.domain.AjaxResult;
import com.bnyer.common.core.web.page.TableDataInfo;
import com.bnyer.img.constants.TiktokConstant;
import com.bnyer.img.domain.Feedback;
import com.bnyer.img.dto.*;
import com.bnyer.img.service.*;
import com.bnyer.img.vo.CreatorTypeImgsVo;
import com.bnyer.img.vo.TiktokImgVo;
import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
@Api(value = "【快手小程序】接口",tags = "【快手小程序】接口")
@RestController
@RequestMapping("/img/mini/fh")
@Slf4j
public class FhMiniController extends BaseController {
@Autowired
private BannerService bannerService;
@Autowired
private FeedBackService feedBackService;
@Autowired
private TypeService typeService;
@Autowired
private TiktokImgService tiktokImgService;
@Autowired
private FhUserService fhUserService;
@Autowired
private CreatorService creatorService;
@Autowired
private TiktokCollectionService tiktokCollectionService;
@Autowired
private TiktokLikeService tiktokLikeService;
@Autowired
private CreatorProfitService creatorProfitService;
//@TokenCheck
@ApiOperation(value="查询banner列表")
@GetMapping(value = "/listBanner")
public AjaxResult listBanner(){
return AjaxResult.success(bannerService.queryList("2"));
}
@ApiOperation(value="新增feedback")
@PostMapping(value = "/insertFeedback")
public AjaxResult insertFeedback(@Validated @RequestBody @ApiParam("feedback对象") FeedBackDto dto){
log.info("【快手图文小程序】新增反馈参数为:{}", JSON.toJSONString(dto));
Feedback feedback = dto.extractParam();
feedback.setSource("1");
return AjaxResult.success(feedBackService.insert(feedback));
}
//@TokenCheck
@ApiOperation(value="查询type列表")
@GetMapping(value = "/listType")
public AjaxResult listType(){
return AjaxResult.success(typeService.queryList());
}
//@TokenCheck
// @ApiOperation(value="查询指定艺术家图片集合")
// @PostMapping(value = "/listTiktokImgOut")
// public AjaxResult listTiktokImgOut(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgListMiniDto dto){
// return AjaxResult.success(tiktokImgService.queryOutList(dto.getCreatorId(),dto.getTypeId()));
// }
//@TokenCheck
@ApiOperation(value="查询图片详情")
@GetMapping(value = "/detailsTiktokImg/{id}")
public AjaxResult detailsTiktokImg(@ApiParam("图片id") @PathVariable Long id){
return AjaxResult.success(tiktokImgService.queryImgDetails(String.valueOf(id)));
}
//@TokenCheck
@ApiOperation(value="艺术家界面查询艺术家图片分页")
@PostMapping(value = "/creatorImgsPage")
public TableDataInfo creatorImgsPage(@RequestBody @ApiParam("分页对象") BasePageDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
return getDataTable(creatorService.queryThreeImgCreatorList());
}
//@TokenCheck
@ApiOperation(value="根据搜索码查询艺术家图片列表")
@PostMapping(value = "/creatorImgsDetails")
public AjaxResult creatorImgsDetails(@Validated @RequestBody @ApiParam("搜索码对象") CreatorImgsDetailsDto params){
CreatorTypeImgsVo creatorVo = creatorService.queryCreatorImgListByScanCode(params.getScanCode());
if(creatorVo == null){
return AjaxResult.error(TiktokConstant.TIKTOK_CREATOR_NOT_EXIST,"该艺术家不存在!");
}
return AjaxResult.success(creatorVo);
}
//@TokenCheck
@ApiOperation(value="收藏")
@PostMapping(value = "/fhCollect")
public AjaxResult fhCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
tiktokCollectionService.collect(dto.getUserId(),dto.getImgId(),"1");
log.debug("【快手图文小程序】用户【{}】收藏了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="取消收藏")
@PostMapping(value = "/fhUnCollect")
public AjaxResult fhUnCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
tiktokCollectionService.unCollect(dto.getUserId(),dto.getImgId(),"1");
log.debug("【快手图文小程序】用户【{}】取消收藏了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="查询是否收藏过")
@PostMapping(value = "/judgeFhCollect")
public AjaxResult judgeFhCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
log.debug("【快手图文小程序】查询是否收藏过参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(tiktokCollectionService.judgeCollect(dto.getUserId(),dto.getImgId(),"1"));
}
//@TokenCheck
@ApiOperation(value="查看用户收藏分页")
@PostMapping(value = "/listFhCollection")
public TableDataInfo listFhCollection(@Validated @RequestBody @ApiParam("用户收藏对象") CollectionUserDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
log.debug("【快手图文小程序】查看用户【{}】收藏分页", dto.getUserId());
return getDataTable(tiktokCollectionService.getCollectionByUserId(dto.getUserId(),"1"));
}
//@TokenCheck
@ApiOperation(value="点赞")
@PostMapping(value = "/fhLike")
public AjaxResult fhLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
tiktokLikeService.like(dto.getUserId(),dto.getImgId(),"1");
log.debug("【快手图文小程序】用户【{}】点赞了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="取消点赞")
@PostMapping(value = "/fhUnLike")
public AjaxResult fhUnLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
tiktokLikeService.unLike(dto.getUserId(),dto.getImgId(),"1");
log.debug("【快手图文小程序】用户【{}】取消点赞了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="查询是否点赞过")
@PostMapping(value = "/judgeFhLike")
public AjaxResult judgeTiktokLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
log.debug("【快手图文小程序】查询是否点赞过参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"1"));
}
@ApiOperation(value="用户登录")
@PostMapping(value = "/loginFh")
public AjaxResult loginWx(@Validated @RequestBody @ApiParam("登录对象") FhLoginDto dto){
log.info("【快手图文小程序】用户【{}】授权登录了", dto.getCode());
return AjaxResult.success(fhUserService.login(dto));
}
//@TokenCheck
@ApiOperation(value="查询首页图片列表")
@PostMapping(value = "/imgLists")
public TableDataInfo imgLists(@RequestBody @ApiParam("分页对象") BasePageDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
List<TiktokImgVo> tiktokImgVos = tiktokImgService.queryFrontPage();
return getDataTable(tiktokImgVos);
}
//@TokenCheck
@ApiOperation(value="新增/更新艺术家即将入账广告收益")
@PostMapping(value = "/insertOrUpdatePreAdProfit")
public AjaxResult insertOrUpdatePreAdProfit(@Validated @RequestBody @ApiParam("即将入账广告对象") CreatorProfitAdInsertDto dto){
log.debug("【快手图文小程序】新增/更新艺术家即将入账广告收益参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(creatorProfitService.insertCreatorProfit(dto.extractParam()));
}
//@TokenCheck
@ApiOperation(value="新增/更新艺术家即将入账邀请收益")
@PostMapping(value = "/insertOrUpdatePreInviteProfit")
public AjaxResult insertOrUpdatePreInviteProfit(@Validated @RequestBody @ApiParam("即将入账邀请对象") CreatorProfitAdInsertDto dto){
log.debug("【快手图文小程序】新增/更新艺术家即将入账邀请收益参数为:{}", JSON.toJSONString(dto));
creatorProfitService.insertInvitedProfit(dto.extractParam());
return AjaxResult.success();
}
//@TokenCheck
@ApiOperation(value="查询热门艺术家列表")
@GetMapping(value = "/listHotCreator")
public AjaxResult listHotCreator(){
return AjaxResult.success(creatorService.queryHotCreatorList());
}
//@TokenCheck
@ApiOperation(value="根据艺术家id获取搜索码")
@GetMapping(value = "/queryCreatorScanCodeById/{id}")
public AjaxResult queryCreatorScanCodeById(@PathVariable @ApiParam("艺术家id") Long id){
Map<String, Object> result = creatorService.queryCreatorScanCodeById(id);
if(result != null){
return AjaxResult.success(result);
}else{
return AjaxResult.error("该艺术家不存在!");
}
}
}

84
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/FhUserController.java

@ -0,0 +1,84 @@
package com.bnyer.img.controller;
import com.alibaba.fastjson.JSON;
import com.bnyer.common.core.utils.Sm4Util;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.web.controller.BaseController;
import com.bnyer.common.core.web.domain.AjaxResult;
import com.bnyer.common.core.web.page.TableDataInfo;
import com.bnyer.img.domain.FhUser;
import com.bnyer.img.dto.FhUserDto;
import com.bnyer.img.dto.FhUserPageDto;
import com.bnyer.img.dto.StatusDto;
import com.bnyer.img.service.FhUserService;
import com.github.pagehelper.PageHelper;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
@Api(value = "【图文平台】快手用户接口",tags = "【图文平台】快手用户接口")
@RestController
@RequestMapping("/img/fhUser")
@Slf4j
public class FhUserController extends BaseController {
@Autowired
private FhUserService fhUserService;
//@RequiresPermissions("system:config:list")
@ApiOperation(value="查询快手用户分页")
@PostMapping("/page")
public TableDataInfo pageFhUser(@RequestBody @ApiParam("分页对象") FhUserPageDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
List<FhUser> fhUsers = fhUserService.queryPage(dto);
for (FhUser fhUser : fhUsers) {
if(fhUser != null){
if(StringUtils.isNotBlank(fhUser.getFhCode())){
fhUser.setFhCode(Sm4Util.sm4Decrypt(fhUser.getFhCode()));
}
}
}
return getDataTable(fhUsers);
}
//@RequiresPermissions("system:config:list")
@ApiOperation(value="修改快手用户")
@PostMapping(value = "/update")
public AjaxResult update(@RequestBody @ApiParam("user对象") FhUserDto dto){
log.debug("【图文平台后台】修改快手用户参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(fhUserService.update(dto.extractParam()));
}
//@RequiresPermissions("system:config:list")
@ApiOperation(value="删除快手用户")
@DeleteMapping(value = "/delete/{ids}")
public AjaxResult deleteFhUser(@PathVariable @ApiParam("主键ids") List<Long> ids){
log.debug("【图文平台后台】删除快手用户参数为:{}", ids);
return AjaxResult.success(fhUserService.delete(ids));
}
//@RequiresPermissions("system:config:list")
@ApiOperation(value="查询快手用户详情")
@GetMapping(value = "/details/{id}")
public AjaxResult detailsFhUser(@PathVariable @ApiParam("主键id") Long id){
FhUser fhUser = fhUserService.queryDetails(id);
if(StringUtils.isNotBlank(fhUser.getFhCode())){
fhUser.setFhCode(Sm4Util.sm4Decrypt(fhUser.getFhCode()));
}
return AjaxResult.success(fhUser);
}
//@RequiresPermissions("system:config:list")
@ApiOperation(value="变更type显示状态")
@PostMapping(value = "/changeStatus")
public AjaxResult changeStatus(@Validated @RequestBody @ApiParam("type状态对象") StatusDto dto){
log.debug("【图文平台后台】变更type参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(fhUserService.changeStatus(dto.getId(),dto.getStatus()));
}
}

19
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/TiktokMiniController.java

@ -80,11 +80,11 @@ public class TiktokMiniController extends BaseController {
}
//@TokenCheck
@ApiOperation(value="查询指定艺术家图片集合")
@PostMapping(value = "/listTiktokImgOut")
public AjaxResult listTiktokImgOut(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgListMiniDto dto){
return AjaxResult.success(tiktokImgService.queryOutList(dto.getCreatorId(),dto.getTypeId()));
}
// @ApiOperation(value="查询指定艺术家图片集合")
// @PostMapping(value = "/listTiktokImgOut")
// public AjaxResult listTiktokImgOut(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgListMiniDto dto){
// return AjaxResult.success(tiktokImgService.queryOutList(dto.getCreatorId(),dto.getTypeId()));
// }
//@TokenCheck
@ApiOperation(value="查询图片详情")
@ -139,11 +139,12 @@ public class TiktokMiniController extends BaseController {
}
//@TokenCheck
@ApiOperation(value="查看用户收藏列表")
@ApiOperation(value="查看用户收藏分页")
@PostMapping(value = "/listTiktokCollection")
public AjaxResult listTiktokCollection(@Validated @RequestBody @ApiParam("用户收藏对象") CollectionUserDto dto){
log.debug("【抖音图文小程序】查看用户【{}】收藏列表", dto.getUserId());
return AjaxResult.success(tiktokCollectionService.getCollectionByUserId(dto.getUserId(),"0"));
public TableDataInfo listTiktokCollection(@Validated @RequestBody @ApiParam("用户收藏对象") CollectionUserDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
log.debug("【抖音图文小程序】查看用户【{}】收藏分页", dto.getUserId());
return getDataTable(tiktokCollectionService.getCollectionByUserId(dto.getUserId(),"0"));
}
//@TokenCheck

45
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/WxMiniController.java

@ -79,11 +79,11 @@ public class WxMiniController extends BaseController {
}
//@TokenCheck
@ApiOperation(value="查询指定艺术家图片集合")
@PostMapping(value = "/listTiktokImgOut")
public AjaxResult listTiktokImgOut(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgListMiniDto dto){
return AjaxResult.success(tiktokImgService.queryOutList(dto.getCreatorId(),dto.getTypeId()));
}
// @ApiOperation(value="查询指定艺术家图片集合")
// @PostMapping(value = "/listTiktokImgOut")
// public AjaxResult listTiktokImgOut(@Validated @RequestBody @ApiParam("TiktokImg对象") TiktokImgListMiniDto dto){
// return AjaxResult.success(tiktokImgService.queryOutList(dto.getCreatorId(),dto.getTypeId()));
// }
//@TokenCheck
@ApiOperation(value="查询图片详情")
@ -113,8 +113,8 @@ public class WxMiniController extends BaseController {
//@TokenCheck
@ApiOperation(value="收藏")
@PostMapping(value = "/tiktokCollect")
public AjaxResult tiktokCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
@PostMapping(value = "/wxCollect")
public AjaxResult wxCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
tiktokCollectionService.collect(dto.getUserId(),dto.getImgId(),"2");
log.debug("【微信图文小程序】用户【{}】收藏了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
@ -122,8 +122,8 @@ public class WxMiniController extends BaseController {
//@TokenCheck
@ApiOperation(value="取消收藏")
@PostMapping(value = "/tiktokUnCollect")
public AjaxResult tiktokUnCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
@PostMapping(value = "/wxUnCollect")
public AjaxResult wxUnCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
tiktokCollectionService.unCollect(dto.getUserId(),dto.getImgId(),"2");
log.debug("【微信图文小程序】用户【{}】取消收藏了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
@ -131,24 +131,25 @@ public class WxMiniController extends BaseController {
//@TokenCheck
@ApiOperation(value="查询是否收藏过")
@PostMapping(value = "/judgeTiktokCollect")
public AjaxResult judgeTiktokCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
@PostMapping(value = "/judgeWxCollect")
public AjaxResult judgeWxCollect(@Validated @RequestBody @ApiParam("收藏对象") CollectionDto dto){
log.debug("【微信图文小程序】查询是否收藏过参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(tiktokCollectionService.judgeCollect(dto.getUserId(),dto.getImgId(),"2"));
}
//@TokenCheck
@ApiOperation(value="查看用户收藏列表")
@PostMapping(value = "/listTiktokCollection")
public AjaxResult listTiktokCollection(@Validated @RequestBody @ApiParam("用户收藏对象") CollectionUserDto dto){
log.debug("【微信图文小程序】查看用户【{}】收藏列表", dto.getUserId());
return AjaxResult.success(tiktokCollectionService.getCollectionByUserId(dto.getUserId(),"2"));
@ApiOperation(value="查看用户收藏分页")
@PostMapping(value = "/listWxCollection")
public TableDataInfo listWxCollection(@Validated @RequestBody @ApiParam("用户收藏对象") CollectionUserDto dto){
PageHelper.startPage(dto.getPageNum(), dto.getPageSize());
log.debug("【微信图文小程序】查看用户【{}】收藏分页", dto.getUserId());
return getDataTable(tiktokCollectionService.getCollectionByUserId(dto.getUserId(),"2"));
}
//@TokenCheck
@ApiOperation(value="点赞")
@PostMapping(value = "/tiktokLike")
public AjaxResult tiktokLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
@PostMapping(value = "/wxLike")
public AjaxResult wxLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
tiktokLikeService.like(dto.getUserId(),dto.getImgId(),"2");
log.debug("【微信图文小程序】用户【{}】点赞了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
@ -156,8 +157,8 @@ public class WxMiniController extends BaseController {
//@TokenCheck
@ApiOperation(value="取消点赞")
@PostMapping(value = "/tiktokUnLike")
public AjaxResult tiktokUnLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
@PostMapping(value = "/wxUnLike")
public AjaxResult wxUnLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
tiktokLikeService.unLike(dto.getUserId(),dto.getImgId(),"2");
log.debug("【微信图文小程序】用户【{}】取消点赞了图片【{}】",dto.getUserId(),dto.getImgId());
return AjaxResult.success();
@ -165,8 +166,8 @@ public class WxMiniController extends BaseController {
//@TokenCheck
@ApiOperation(value="查询是否点赞过")
@PostMapping(value = "/judgeTiktokLike")
public AjaxResult judgeTiktokLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
@PostMapping(value = "/judgeWxLike")
public AjaxResult judgeWxLike(@Validated @RequestBody @ApiParam("点赞对象") CollectionDto dto){
log.debug("【微信图文小程序】查询是否点赞过参数为:{}", JSON.toJSONString(dto));
return AjaxResult.success(tiktokLikeService.judgeLike(dto.getUserId(),dto.getImgId(),"2"));
}

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CollectionUserDto.java

@ -16,7 +16,7 @@ import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@ApiModel("用户收藏接收类")
public class CollectionUserDto implements Serializable {
public class CollectionUserDto extends BasePageDto {
@NotNull(message = "用户id不能为空!")
@ApiModelProperty(value="用户id")

35
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/FhUserDto.java

@ -0,0 +1,35 @@
package com.bnyer.img.dto;
import com.bnyer.common.core.utils.bean.BeanUtils;
import com.bnyer.img.domain.FhUser;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@ApiModel("快手用户接收类")
public class FhUserDto implements Serializable {
@ApiModelProperty(value="id")
private Long id;
@ApiModelProperty(value="用户昵称")
private String username;
@ApiModelProperty(value="快手id")
private String fhCode;
@ApiModelProperty(value="头像img地址")
private String img;
public FhUser extractParam(){
FhUser fhUser = new FhUser();
BeanUtils.copyProperties(this, fhUser);
return fhUser;
}
}

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/mapper/TiktokImgMapper.java

@ -24,7 +24,7 @@ public interface TiktokImgMapper extends BaseMapper<TiktokImg> {
* @param typeId 分类Id
* @return -
*/
List<TiktokImgVo> queryOutList(@Param("creatorId")String creatorId,@Param("typeId") String typeId);
//List<TiktokImgVo> queryOutList(@Param("creatorId")String creatorId,@Param("typeId") String typeId);
/**
* 根据艺术家id获取3张用户首页图片

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/TiktokImgService.java

@ -57,7 +57,7 @@ public interface TiktokImgService {
* @param typeId 分类id
* @return -
*/
List<TiktokImgVo> queryOutList(String creatorId,String typeId);
//List<TiktokImgVo> queryOutList(String creatorId,String typeId);
/**
* 查询小程序审核通过图片详情

2
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java

@ -280,7 +280,7 @@ public class CreatorServiceImpl implements CreatorService {
if(StringUtils.isNotBlank(sessionInfo.getString("errcode"))){
if(!sessionInfo.getString("errcode").equals(TiktokConstant.SUCCESS)){
log.error("微信授权session接口调用失败,错误状态码为:【{}】,错误信息为:【{}】",sessionInfo.getString("errcode"),sessionInfo.getString("errmsg"));
throw new ServiceException("微信授权session接口调用失败!",TiktokConstant.CALL_WECHAT_FAIL);
throw new ServiceException("微信授权session接口调用失败!",TiktokConstant.WECHAT_AUTH_ERROR);
}
}
//调用成功,组装返回数据

410
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/FhUserServiceImpl.java

@ -1,206 +1,204 @@
//package com.bnyer.img.service.impl;
//
//import cn.binarywang.wx.miniapp.api.WxMaUserService;
//import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
//import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
//import com.alibaba.fastjson.JSONObject;
//import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
//import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
//import com.bnyer.common.core.exception.ServiceException;
//import com.bnyer.common.core.utils.Sm4Util;
//import com.bnyer.common.core.utils.StringUtils;
//import com.bnyer.common.core.utils.uuid.IdUtils;
//import com.bnyer.common.redis.service.RedisService;
//import com.bnyer.img.constants.RedisKeyConstant;
//import com.bnyer.img.constants.TiktokConstant;
//import com.bnyer.img.domain.TiktokCollection;
//import com.bnyer.img.domain.TiktokLike;
//import com.bnyer.img.domain.FhUser;
//import com.bnyer.img.domain.TiktokUser;
//import com.bnyer.img.dto.FhLoginDto;
//import com.bnyer.img.dto.WxLoginDto;
//import com.bnyer.img.dto.FhUserPageDto;
//import com.bnyer.img.mapper.TiktokCollectionMapper;
//import com.bnyer.img.mapper.TiktokLikeMapper;
//import com.bnyer.img.mapper.FhUserMapper;
//import com.bnyer.img.service.FhUserService;
//import com.bnyer.img.vo.FhUserInfoVo;
//import com.bnyer.img.vo.TiktokSessionInfoVo;
//import com.bnyer.img.vo.TiktokUserInfoVo;
//import lombok.extern.slf4j.Slf4j;
//import me.chanjar.weixin.common.error.WxErrorException;
//import org.springframework.beans.factory.annotation.Autowired;
//import org.springframework.stereotype.Service;
//import org.springframework.transaction.annotation.Transactional;
//
//import javax.crypto.Cipher;
//import javax.crypto.spec.IvParameterSpec;
//import javax.crypto.spec.SecretKeySpec;
//import java.util.*;
//import java.util.concurrent.TimeUnit;
//
//@Service
//@Slf4j
//public class FhUserServiceImpl implements FhUserService {
//
// @Autowired
// private FhUserMapper fhUserMapper;
//
// @Autowired
// private RedisService redisService;
//
// @Autowired
// private TiktokLikeMapper tiktokLikeMapper;
//
// @Autowired
// private TiktokCollectionMapper tiktokCollectionMapper;
//
// @Override
// @Transactional(rollbackFor = Exception.class)
// public int update(FhUser fhUser) {
// fhUser.setUpdateTime(new Date());
// if (StringUtils.isNotBlank(fhUser.getFhCode())) {
// fhUser.setFhCode(Sm4Util.sm4Encryption(fhUser.getFhCode()));
// }
// return fhUserMapper.updateById(fhUser);
// }
//
// @Override
// @Transactional(rollbackFor = Exception.class)
// public int delete(List<Long> ids) {
// int delete = fhUserMapper.deleteBatchIds(ids);
// //删除对应用户收藏及点赞记录
// LambdaQueryWrapper<TiktokCollection> collectionWrapper = new LambdaQueryWrapper<>();
// LambdaQueryWrapper<TiktokLike> likeWrapper = new LambdaQueryWrapper<>();
// for (Long id : ids) {
// collectionWrapper.eq(TiktokCollection::getUserId, id)
// .eq(TiktokCollection::getPlatform, "1");
// tiktokCollectionMapper.delete(collectionWrapper);
// likeWrapper.eq(TiktokLike::getUserId, id)
// .eq(TiktokLike::getPlatform, "1");
// tiktokLikeMapper.delete(likeWrapper);
// }
// return delete;
// }
//
// @Override
// public List<FhUser> queryPage(FhUserPageDto dto) {
// return fhUserMapper.queryPage(dto);
// }
//
// @Override
// public FhUser queryDetails(Long id) {
// return fhUserMapper.selectById(id);
// }
//
// /**
// * 获取用户openId及sessionKey
// * @param code 登录凭证code
// * @return -
// */
// private TiktokSessionInfoVo getSessionInfo(String code) {
// Map<String,String> map = new HashMap<>();
// map.put("appid",tiktokConfig.getAppId());
// map.put("secret", tiktokConfig.getSecret());
// map.put("code", code);
// map.put("grant_type", "client_credential");
// JSONObject sessionInfo = restTemplate.postForObject(tiktokConfig.getSessionInfoUrl(), map, JSONObject.class);
// if(!sessionInfo.getString("err_no").equals(TiktokConstant.SUCCESS)){
// log.error("抖音授权session接口调用失败,错误状态码为:【{}】,错误信息为:【{}】",sessionInfo.getString("err_no"),sessionInfo.getString("err_tips"));
// throw new ServiceException("抖音授权session接口调用失败!",TiktokConstant.TIKTOK_AUTH_ERROR);
// }
// //调用成功,组装返回数据
// JSONObject data = sessionInfo.getJSONObject("data");
// TiktokSessionInfoVo result = new TiktokSessionInfoVo();
// result.setSessionKey(data.getString("session_key"));
// result.setOpenId(data.getString("openid"));
// result.setUnionId(data.getString("unionid"));
// return result;
// }
//
// /**
// * 获取用户敏感信息
// * @param sessionKey -
// * @param encryptedData 敏感数据
// * @param iv 加密向量
// * @return -
// */
// private FhUserInfoVo getUserInfo(String sessionKey, String encryptedData, String iv){
// Base64.Decoder decoder = Base64.getDecoder();
// byte[] sessionKeyBytes = decoder.decode(sessionKey);
// byte[] ivBytes = decoder.decode(iv);
// byte[] encryptedBytes = decoder.decode(encryptedData);
//
// Cipher cipher = null;
// try {
// cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
// SecretKeySpec skeySpec = new SecretKeySpec(sessionKeyBytes, "AES");
// IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
// cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
// byte[] ret = cipher.doFinal(encryptedBytes);
// if (null != ret && ret.length > 0) {
// String result = new String(ret, "UTF-8");
// return JSONObject.parseObject(result,FhUserInfoVo.class);
// }
// } catch (Exception e) {
// e.printStackTrace();
// }
// return null;
// }
//
// private FhUser saveOrUpdate(String openId, String sessionKey, String encryptedData, String iv) {
// //获取用户昵称和头像
// FhUserInfoVo userInfo = this.getUserInfo(sessionKey, encryptedData, iv);
// //创建用户
// FhUser fhUser = new FhUser();
// fhUser.setImg(userInfo.getAvatarUrl());
// fhUser.setUsername(userInfo.getNickName());
// fhUser.setFhCode(Sm4Util.sm4Encryption(openId));
// fhUser.setCreateTime(new Date());
// fhUser.setUpdateTime(new Date());
// fhUserMapper.insert(fhUser);
// log.info("快手用户【{}】创建成功!", openId);
// return fhUser;
// }
//
// @Override
// public Map<String, Object> login(FhLoginDto param) {
// TiktokSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
// //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
// LambdaQueryWrapper<TiktokUser> wrapper = new LambdaQueryWrapper<>();
// wrapper.eq(sessionInfo.getOpenId() != null,TiktokUser::getTiktokCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
// TiktokUser tiktokUser = tiktokUserMapper.selectOne(wrapper);
// if(tiktokUser == null){
// //新用户,新增
// tiktokUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
// }
// //设置会话状态
// String redisKey = RedisKeyConstant.TIKTOK_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId());
// //存在该登录态则删除刷新
// if(redisService.hasKey(redisKey)){
// redisService.deleteObject(redisKey);
// }
// StringBuffer sb = new StringBuffer();
// String randomId = IdUtils.fastSimpleUUID();
// sb.append(randomId).append("#").append(sessionInfo.getOpenId());
//
// Map<String, Object> map = new HashMap<>(2);
// map.put("token", sb.toString());
// map.put("sessionKey", sessionInfo.getSessionKey());
// map.put("userInfo",tiktokUser);
// //设置登录会话
// redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS);
// return map;
// }
//
// @Override
// @Transactional(rollbackFor = Exception.class)
// public int changeStatus(Long id, String status) {
// LambdaUpdateWrapper<FhUser> wrapper = new LambdaUpdateWrapper<>();
// wrapper.eq(FhUser::getId, id);
// FhUser user = new FhUser();
// user.setIsShow(status);
// return fhUserMapper.update(user, wrapper);
// }
//}
package com.bnyer.img.service.impl;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.Sm4Util;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.uuid.IdUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.config.FhConfig;
import com.bnyer.img.constants.RedisKeyConstant;
import com.bnyer.img.constants.TiktokConstant;
import com.bnyer.img.domain.FhUser;
import com.bnyer.img.domain.TiktokCollection;
import com.bnyer.img.domain.TiktokLike;
import com.bnyer.img.dto.FhLoginDto;
import com.bnyer.img.dto.FhUserPageDto;
import com.bnyer.img.mapper.FhUserMapper;
import com.bnyer.img.mapper.TiktokCollectionMapper;
import com.bnyer.img.mapper.TiktokLikeMapper;
import com.bnyer.img.service.FhUserService;
import com.bnyer.img.vo.FhSessionInfoVo;
import com.bnyer.img.vo.FhUserInfoVo;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
@Slf4j
public class FhUserServiceImpl implements FhUserService {
@Autowired
private FhUserMapper fhUserMapper;
@Autowired
private RedisService redisService;
@Autowired
private TiktokLikeMapper tiktokLikeMapper;
@Autowired
private TiktokCollectionMapper tiktokCollectionMapper;
@Autowired
private FhConfig fhConfig;
@Autowired
private RestTemplate restTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
public int update(FhUser fhUser) {
fhUser.setUpdateTime(new Date());
if (StringUtils.isNotBlank(fhUser.getFhCode())) {
fhUser.setFhCode(Sm4Util.sm4Encryption(fhUser.getFhCode()));
}
return fhUserMapper.updateById(fhUser);
}
@Override
@Transactional(rollbackFor = Exception.class)
public int delete(List<Long> ids) {
int delete = fhUserMapper.deleteBatchIds(ids);
//删除对应用户收藏及点赞记录
LambdaQueryWrapper<TiktokCollection> collectionWrapper = new LambdaQueryWrapper<>();
LambdaQueryWrapper<TiktokLike> likeWrapper = new LambdaQueryWrapper<>();
for (Long id : ids) {
collectionWrapper.eq(TiktokCollection::getUserId, id)
.eq(TiktokCollection::getPlatform, "1");
tiktokCollectionMapper.delete(collectionWrapper);
likeWrapper.eq(TiktokLike::getUserId, id)
.eq(TiktokLike::getPlatform, "1");
tiktokLikeMapper.delete(likeWrapper);
}
return delete;
}
@Override
public List<FhUser> queryPage(FhUserPageDto dto) {
return fhUserMapper.queryPage(dto);
}
@Override
public FhUser queryDetails(Long id) {
return fhUserMapper.selectById(id);
}
/**
* 获取用户openId及sessionKey
* @param code 登录凭证code
* @return -
*/
private FhSessionInfoVo getSessionInfo(String code) {
Map<String,String> map = new HashMap<>();
map.put("appid",fhConfig.getAppId());
map.put("app_secret", fhConfig.getSecret());
map.put("js_code", code);
JSONObject sessionInfo = restTemplate.postForObject(fhConfig.getSessionInfoUrl(), map, JSONObject.class);
if(!sessionInfo.getString("result").equals(TiktokConstant.FH_SUCCESS)){
//log.error("快手授权session接口调用失败,错误状态码为:【{}】,错误信息为:【{}】",sessionInfo.getString("result"),sessionInfo.getString("err_tips"));
throw new ServiceException("快手授权session接口调用失败!",TiktokConstant.FH_AUTH_ERROR);
}
//调用成功,组装返回数据
JSONObject data = sessionInfo.getJSONObject("data");
FhSessionInfoVo result = new FhSessionInfoVo();
result.setSessionKey(data.getString("session_key"));
result.setOpenId(data.getString("open_id"));
return result;
}
/**
* 获取用户敏感信息
* @param sessionKey -
* @param encryptedData 敏感数据
* @param iv 加密向量
* @return -
*/
private FhUserInfoVo getUserInfo(String sessionKey, String encryptedData, String iv){
Base64.Decoder decoder = Base64.getDecoder();
byte[] sessionKeyBytes = decoder.decode(sessionKey);
byte[] ivBytes = decoder.decode(iv);
byte[] encryptedBytes = decoder.decode(encryptedData);
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec skeySpec = new SecretKeySpec(sessionKeyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
byte[] ret = cipher.doFinal(encryptedBytes);
if (null != ret && ret.length > 0) {
String result = new String(ret, "UTF-8");
return JSONObject.parseObject(result,FhUserInfoVo.class);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
private FhUser saveOrUpdate(String openId, String sessionKey, String encryptedData, String iv) {
//获取用户昵称和头像
FhUserInfoVo userInfo = this.getUserInfo(sessionKey, encryptedData, iv);
//创建用户
FhUser fhUser = new FhUser();
fhUser.setImg(userInfo.getAvatarUrl());
fhUser.setUsername(userInfo.getNickName());
fhUser.setFhCode(Sm4Util.sm4Encryption(openId));
fhUser.setCreateTime(new Date());
fhUser.setUpdateTime(new Date());
fhUserMapper.insert(fhUser);
log.info("快手用户【{}】创建成功!", openId);
return fhUser;
}
@Override
public Map<String, Object> login(FhLoginDto param) {
FhSessionInfoVo sessionInfo = this.getSessionInfo(param.getCode());
//检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
LambdaQueryWrapper<FhUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null,FhUser::getFhCode,Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
FhUser fhUser = fhUserMapper.selectOne(wrapper);
if(fhUser == null){
//新用户,新增
fhUser = this.saveOrUpdate(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), param.getEncryptedData(), param.getIv());
}
//设置会话状态
String redisKey = RedisKeyConstant.FH_USER_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId());
//存在该登录态则删除刷新
if(redisService.hasKey(redisKey)){
redisService.deleteObject(redisKey);
}
StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(sessionInfo.getOpenId());
Map<String, Object> map = new HashMap<>(2);
map.put("token", sb.toString());
map.put("sessionKey", sessionInfo.getSessionKey());
map.put("userInfo",fhUser);
//设置登录会话
redisService.setCacheObject(redisKey,map,30L, TimeUnit.DAYS);
return map;
}
@Override
@Transactional(rollbackFor = Exception.class)
public int changeStatus(Long id, String status) {
LambdaUpdateWrapper<FhUser> wrapper = new LambdaUpdateWrapper<>();
wrapper.eq(FhUser::getId, id);
FhUser user = new FhUser();
user.setIsShow(status);
return fhUserMapper.update(user, wrapper);
}
}

8
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/TiktokImgServiceImpl.java

@ -103,10 +103,10 @@ public class TiktokImgServiceImpl implements TiktokImgService {
return tiktokImgMapper.queryInList(creatorId,typeId);
}
@Override
public List<TiktokImgVo> queryOutList(String creatorId, String typeId) {
return tiktokImgMapper.queryOutList(creatorId,typeId);
}
// @Override
// public List<TiktokImgVo> queryOutList(String creatorId, String typeId) {
// return tiktokImgMapper.queryOutList(creatorId,typeId);
// }
@Override
public TiktokImgVo queryImgDetails(String imgId) {

151
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/WxUserServiceImpl.java

@ -1,16 +1,14 @@
package com.bnyer.img.service.impl;
import cn.binarywang.wx.miniapp.api.WxMaUserService;
import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bnyer.common.core.exception.ServiceException;
import com.bnyer.common.core.utils.Sm4Util;
import com.bnyer.common.core.utils.StringUtils;
import com.bnyer.common.core.utils.uuid.IdUtils;
import com.bnyer.common.redis.service.RedisService;
import com.bnyer.img.config.WxConfig;
import com.bnyer.img.constants.RedisKeyConstant;
import com.bnyer.img.constants.TiktokConstant;
import com.bnyer.img.domain.TiktokCollection;
@ -22,16 +20,18 @@ import com.bnyer.img.mapper.TiktokCollectionMapper;
import com.bnyer.img.mapper.TiktokLikeMapper;
import com.bnyer.img.mapper.WxUserMapper;
import com.bnyer.img.service.WxUserService;
import com.bnyer.img.vo.WxSessionInfoVo;
import com.bnyer.img.vo.WxUserInfoVo;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.web.client.RestTemplate;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.*;
import java.util.concurrent.TimeUnit;
@Service
@ -50,7 +50,12 @@ public class WxUserServiceImpl implements WxUserService {
@Autowired
private TiktokCollectionMapper tiktokCollectionMapper;
private WxMaUserService wxMaUserService;
@Autowired
private WxConfig wxConfig;
@Autowired
private RestTemplate restTemplate;
@Override
@Transactional(rollbackFor = Exception.class)
@ -90,11 +95,75 @@ public class WxUserServiceImpl implements WxUserService {
return wxUserMapper.selectById(id);
}
private WxUser saveOrUpdate(String openId, String sessionKey, String encryptedData, String iv) {
//获取用户昵称和头像
WxMaUserInfo userInfo = wxMaUserService.getUserInfo(sessionKey, encryptedData, iv);
/**
* 获取用户openId及sessionKey
*
* @param code 登录凭证code
* @return -
*/
private WxSessionInfoVo getSessionInfo(String code) {
String url = wxConfig.getSessionInfoUrl() + "?appid=" + wxConfig.getAppId() + "&secret=" + wxConfig.getSecret() + "&js_code=" + code + "&grant_type=authorization_code";
String forObject = restTemplate.getForObject(url, String.class);
JSONObject sessionInfo = JSONObject.parseObject(forObject);
if (StringUtils.isNotBlank(sessionInfo.getString("errcode"))) {
if (!sessionInfo.getString("errcode").equals(TiktokConstant.SUCCESS)) {
log.error("微信授权session接口调用失败,错误状态码为:【{}】,错误信息为:【{}】", sessionInfo.getString("errcode"), sessionInfo.getString("errmsg"));
throw new ServiceException("微信授权session接口调用失败!", TiktokConstant.WECHAT_AUTH_ERROR);
}
}
//调用成功,组装返回数据
WxSessionInfoVo result = new WxSessionInfoVo();
result.setSessionKey(sessionInfo.getString("session_key"));
result.setOpenId(sessionInfo.getString("openid"));
return result;
}
/**
* 获取用户敏感信息
*
* @param sessionKey -
* @param encryptedData 敏感数据
* @param iv 加密向量
* @return -
*/
private WxUserInfoVo getUserInfo(String sessionKey, String encryptedData, String iv) {
Base64.Decoder decoder = Base64.getDecoder();
byte[] sessionKeyBytes = decoder.decode(sessionKey);
byte[] ivBytes = decoder.decode(iv);
byte[] encryptedBytes = decoder.decode(encryptedData);
Cipher cipher = null;
try {
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
SecretKeySpec skeySpec = new SecretKeySpec(sessionKeyBytes, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);
cipher.init(Cipher.DECRYPT_MODE, skeySpec, ivSpec);
byte[] ret = cipher.doFinal(encryptedBytes);
if (null != ret && ret.length > 0) {
String result = new String(ret, "UTF-8");
return JSONObject.parseObject(result, WxUserInfoVo.class);
}
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
/**
* 保存用户
*
* @param openId 微信id
* @param sessionKey -
* @param encryptedData 敏感信息数据
* @param iv 加密向量
* @return -
*/
private WxUser saveUserInfo(String openId, String sessionKey, String encryptedData, String iv) {
//创建用户
WxUser wxUser = new WxUser();
//获取用户昵称和头像
WxUserInfoVo userInfo = this.getUserInfo(sessionKey, encryptedData, iv);
wxUser.setImg(userInfo.getAvatarUrl());
wxUser.setUsername(userInfo.getNickName());
wxUser.setWxCode(Sm4Util.sm4Encryption(openId));
@ -106,38 +175,32 @@ public class WxUserServiceImpl implements WxUserService {
}
@Override
public Map<String, Object> login(WxLoginDto param) {
try {
//code换openId等相关信息
WxMaJscode2SessionResult sessionInfo = wxMaUserService.getSessionInfo(param.getCode());
//插入或更新艺术家到数据库
QueryWrapper<WxUser> qw = new QueryWrapper<>();
qw.eq("wx_code", Sm4Util.sm4Encryption(sessionInfo.getOpenid()));
WxUser wxUser = wxUserMapper.selectOne(qw);
if(wxUser == null){
//新用户,新增
wxUser = this.saveOrUpdate(sessionInfo.getOpenid(), sessionInfo.getSessionKey(), param.getEncryptedData(), param.getIv());
}
//设置会话状态
String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenid());
//存在该登录态则删除刷新
if (redisService.hasKey(redisKey)) {
redisService.deleteObject(redisKey);
}
//缓存到redis
StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(sessionInfo.getOpenid());
//设置登录会话
redisService.setCacheObject(redisKey, sb.toString(), 10L, TimeUnit.DAYS);
Map<String, Object> map = new HashMap<>(2);
map.put("token", sb.toString());
map.put("sessionKey", sessionInfo.getSessionKey());
map.put("userInfo", wxUser);
return map;
} catch (WxErrorException e) {
throw new ServiceException(e.getMessage(), TiktokConstant.CALL_WECHAT_FAIL);
public Map<String, Object> login(WxLoginDto dto) {
WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode());
//检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增
LambdaQueryWrapper<WxUser> wrapper = new LambdaQueryWrapper<>();
wrapper.eq(sessionInfo.getOpenId() != null, WxUser::getWxCode, Sm4Util.sm4Encryption(sessionInfo.getOpenId()));
WxUser wxUser = wxUserMapper.selectOne(wrapper);
if (wxUser == null) {
//新用户,新增
wxUser = this.saveUserInfo(sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv());
}
//设置会话状态
String redisKey = RedisKeyConstant.WECHAT_USER_LOGIN_KEY + Sm4Util.sm4Encryption(sessionInfo.getOpenId());
//存在该登录态则删除刷新
if (redisService.hasKey(redisKey)) {
redisService.deleteObject(redisKey);
}
StringBuffer sb = new StringBuffer();
String randomId = IdUtils.fastSimpleUUID();
sb.append(randomId).append("#").append(sessionInfo.getOpenId());
//设置登录会话
Map<String, Object> map = new HashMap<>(2);
map.put("token", sb.toString());
map.put("sessionKey", sessionInfo.getSessionKey());
map.put("userInfo", wxUser);
redisService.setCacheObject(redisKey, map, 30L, TimeUnit.DAYS);
return map;
}
@Override

27
bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/FhSessionInfoVo.java

@ -0,0 +1,27 @@
package com.bnyer.img.vo;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Getter;
import lombok.Setter;
import java.io.Serializable;
@Getter
@Setter
@ApiModel("快手sessionInfo响应类")
public class FhSessionInfoVo implements Serializable {
@ApiModelProperty(value="sessionKey")
private String sessionKey;
@ApiModelProperty(value="openId")
private String openId;
@ApiModelProperty(value="result")
private String result;
private static final long serialVersionUID = 1L;
}

30
bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/TiktokImgMapper.xml

@ -38,21 +38,21 @@
</where>
order by create_time desc
</select>
<select id="queryOutList" resultType="com.bnyer.img.vo.TiktokImgVo">
select
id,img_url,creator_id,type_id,download_num, great_num, collection_num,status,is_hot
from img_tiktok_img
<where>
is_show = '1' and status = '1'
<if test="creatorId != null and creatorId != ''">
and creator_id = #{creatorId}
</if>
<if test="typeId != null and typeId != ''">
and type_id = #{typeId}
</if>
</where>
order by create_time desc
</select>
<!-- <select id="queryOutList" resultType="com.bnyer.img.vo.TiktokImgVo">-->
<!-- select-->
<!-- id,img_url,creator_id,type_id,download_num, great_num, collection_num,status,is_hot-->
<!-- from img_tiktok_img-->
<!-- <where>-->
<!-- is_show = '1' and status = '1'-->
<!-- <if test="creatorId != null and creatorId != ''">-->
<!-- and creator_id = #{creatorId}-->
<!-- </if>-->
<!-- <if test="typeId != null and typeId != ''">-->
<!-- and type_id = #{typeId}-->
<!-- </if>-->
<!-- </where>-->
<!-- order by create_time desc-->
<!-- </select>-->
<select id="queryThreeImgs" resultType="com.bnyer.img.vo.TiktokImgVo">
select
id,img_url,creator_id,type_id,download_num, great_num, collection_num,status,is_hot

Loading…
Cancel
Save