diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java index f383bbd..11a342b 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/constants/TiktokConstant.java @@ -60,4 +60,19 @@ public class TiktokConstant { * 调用快手授权失败 */ public static final Integer FH_AUTH_ERROR = 105009; + + /** + * 艺术家手机号或密码不正确 + */ + public static final Integer TIKTOK_CREATOR_PWD_ERROR = 105010; + + /** + * 艺术家尚未审核 + */ + public static final Integer TIKTOK_CREATOR_NOT_PASS_ERROR = 105011; + + /** + * 艺术家尚未审核 + */ + public static final Integer TIKTOK_CREATOR_BANED_ERROR = 105012; } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorController.java index e7ca535..9594014 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorController.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorController.java @@ -38,9 +38,6 @@ public class CreatorController extends BaseController { if(StringUtils.isNotBlank(dto.getPhone())){ dto.setPhone(Sm4Util.sm4Encryption(dto.getPhone())); } - if(StringUtils.isNotBlank(dto.getOpenId())){ - dto.setOpenId(Sm4Util.sm4Encryption(dto.getOpenId())); - } PageHelper.startPage(dto.getPageNum(), dto.getPageSize()); List creators = creatorService.queryPage(dto); if(creators.size() > 0){ @@ -49,8 +46,6 @@ public class CreatorController extends BaseController { if(StringUtils.isNotBlank(creator.getPhone())){ creator.setPhone(Sm4Util.sm4Decrypt(creator.getPhone())); } - //暂时注释掉openId解密校验 - //creator.setOpenId(Sm4Util.sm4Decrypt(creator.getOpenId())); } } } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java index cf51840..9fd2970 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/controller/CreatorMiniController.java @@ -251,7 +251,7 @@ public class CreatorMiniController extends BaseController { //@TokenCheck @PostMapping("/login") @ApiOperation("小程序艺术家登录") - public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody WxLoginDto param) + public AjaxResult login(@Validated @ApiParam("艺术家数据") @RequestBody CreatorLoginDto param) { log.info("小程序艺术家数据参数为:{}", JSON.toJSON(param)); return AjaxResult.success(creatorService.login(param)); diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/Creator.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/Creator.java index 225c036..6f9d8c9 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/Creator.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/domain/Creator.java @@ -26,11 +26,11 @@ import java.util.Date; @AllArgsConstructor @NoArgsConstructor @TableName(value = "img_creator") -public class Creator extends BaseDomain { +public class Creator extends BaseDomain { /** * 主键id */ - @TableId(value = "id", type = IdType.INPUT) + @TableId(value = "id", type = IdType.AUTO) @ApiModelProperty(value="主键id") private Long id; @@ -42,11 +42,11 @@ public class Creator extends BaseDomain { private String name; /** - * 姓名 + * 密码 */ - @TableField(value = "open_id") - @ApiModelProperty(value="微信id") - private String openId; + @TableField(value = "password") + @ApiModelProperty(value="密码") + private String password; /** * 搜索码 @@ -111,13 +111,6 @@ public class Creator extends BaseDomain { @ApiModelProperty(value="是否活跃(0->不活跃;1->活跃 连续10天以上更新内容)") private String isHot; - /** - * 是否显示 (0->隐藏;1->显示) - */ - @TableField(value = "is_show") - @ApiModelProperty(value="是否显示 (0->隐藏;1->显示)") - private String isShow; - /** * 最后登录时间 */ diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorDto.java index df5db0c..ecb6a07 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorDto.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorDto.java @@ -14,8 +14,9 @@ import java.io.Serializable; @ApiModel("艺术家接收类") public class CreatorDto implements Serializable { - @ApiModelProperty(value="主键Id") - private Long id; + @NotBlank(message = "昵称不能为空!") + @ApiModelProperty(value="昵称") + private String name; @NotBlank(message = "搜索码不能为空!") @ApiModelProperty(value="搜索码") @@ -25,6 +26,14 @@ public class CreatorDto implements Serializable { @ApiModelProperty(value="手机号") private String phone; + @NotBlank(message = "密码不能为空!") + @ApiModelProperty(value="密码") + private String password; + + @NotBlank(message = "头像不能为空!") + @ApiModelProperty(value="头像img地址") + private String img; + @ApiModelProperty(value="简介") private String intro; diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorLoginDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorLoginDto.java new file mode 100644 index 0000000..33dca23 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorLoginDto.java @@ -0,0 +1,23 @@ +package com.bnyer.img.dto; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import javax.validation.constraints.NotBlank; +import java.io.Serializable; + +@Getter +@Setter +@ApiModel("艺术家登录入参") +public class CreatorLoginDto implements Serializable { + + @NotBlank(message = "手机号不能为空!") + @ApiModelProperty(value = "手机号") + private String phone; + + @NotBlank(message = "密码不能为空!") + @ApiModelProperty(value = "密码") + private String password; +} diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorPageDto.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorPageDto.java index 6f54590..c0957e3 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorPageDto.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/dto/CreatorPageDto.java @@ -16,9 +16,6 @@ public class CreatorPageDto extends BasePageDto { @ApiModelProperty(value="昵称") private String name; - @ApiModelProperty(value="微信id") - private String openId; - @ApiModelProperty(value="搜索码") private String scanCode; diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java index 9d7e993..0f25f05 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/CreatorService.java @@ -1,10 +1,7 @@ package com.bnyer.img.service; import com.bnyer.img.domain.Creator; -import com.bnyer.img.dto.CreatorDto; -import com.bnyer.img.dto.CreatorPageDto; -import com.bnyer.img.dto.VerifyCreatorDto; -import com.bnyer.img.dto.WxLoginDto; +import com.bnyer.img.dto.*; import com.bnyer.img.vo.*; import java.util.List; @@ -98,7 +95,7 @@ public interface CreatorService { * @param param 前端传来的参数 * @return - */ - Map login(WxLoginDto param); + Map login(CreatorLoginDto param); /** * 查询所有审核通过的艺术家 diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java index 7d4ad7a..407b26a 100644 --- a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/service/impl/CreatorServiceImpl.java @@ -1,6 +1,5 @@ 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; @@ -16,27 +15,30 @@ import com.bnyer.img.domain.InviteLog; import com.bnyer.img.domain.TiktokImg; import com.bnyer.img.domain.VerifyLog; import com.bnyer.img.dto.CreatorDto; +import com.bnyer.img.dto.CreatorLoginDto; import com.bnyer.img.dto.CreatorPageDto; import com.bnyer.img.dto.VerifyCreatorDto; -import com.bnyer.img.dto.WxLoginDto; import com.bnyer.img.mapper.CreatorMapper; import com.bnyer.img.mapper.InviteLogMapper; import com.bnyer.img.mapper.TiktokImgMapper; import com.bnyer.img.mapper.VerifyLogMapper; import com.bnyer.img.service.CreatorService; -import com.bnyer.img.vo.*; +import com.bnyer.img.vo.CreatorDetailsVo; +import com.bnyer.img.vo.CreatorHotVo; +import com.bnyer.img.vo.CreatorLoginVo; +import com.bnyer.img.vo.CreatorVo; import lombok.extern.slf4j.Slf4j; -import org.apache.commons.lang3.ObjectUtils; +import org.springframework.beans.BeanUtils; 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.math.BigDecimal; -import java.util.*; +import java.util.Date; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import java.util.concurrent.TimeUnit; /** @@ -132,7 +134,9 @@ public class CreatorServiceImpl implements CreatorService { throw new ServiceException("邀请码不存在,请重新编辑!",TiktokConstant.INVITE_CODE_NOT_EXIST); } Creator creator = new Creator(); - creator.setId(dto.getId()); + creator.setName(dto.getName()); + creator.setPassword(Sm4Util.sm4Encryption(dto.getPassword())); + creator.setImg(dto.getImg()); creator.setIntro(dto.getIntro()); creator.setScanCode(dto.getScanCode()); creator.setInviteCode(IdUtils.inviteCodeGen()); @@ -143,8 +147,9 @@ public class CreatorServiceImpl implements CreatorService { creator.setIsShow("1"); creator.setAmt(BigDecimal.valueOf(0)); creator.setSort(0); + creator.setCreateTime(new Date()); creator.setUpdateTime(new Date()); - int update = creatorMapper.updateById(creator); + int insert = creatorMapper.insert(creator); log.info("手机号【{}】成为艺术家成功!待审核",dto.getPhone()); //保存邀请记录 InviteLog inviteLog = new InviteLog(); @@ -157,7 +162,7 @@ public class CreatorServiceImpl implements CreatorService { inviteLog.setSort(0); inviteLogMapper.insert(inviteLog); log.info("艺术家id【{}】被邀请码【{}】邀请成功!记录写入数据库完成!",creator.getId(),dto.getInviteCode()); - return update; + return insert; } @Override @@ -267,116 +272,38 @@ public class CreatorServiceImpl implements CreatorService { return creatorMapper.update(creator,wrapper); } - /** - * 获取用户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 creator 艺术家信息 - * @param openId 微信id - * @param sessionKey - - * @param encryptedData 敏感信息数据 - * @param iv 加密向量 - * @return - - */ - private Creator saveUserInfo(Creator creator,String openId, String sessionKey, String encryptedData, String iv){ - if (ObjectUtils.isEmpty(creator)) { - //创建用户 - creator = new Creator(); - //获取用户昵称和头像 - WxUserInfoVo userInfo = this.getUserInfo(sessionKey, encryptedData, iv); - creator.setImg(userInfo.getAvatarUrl()); - creator.setName(userInfo.getNickName()); - creator.setOpenId(Sm4Util.sm4Encryption(openId)); - creator.setCreateTime(new Date()); - creator.setUpdateTime(new Date()); - creator.setLastLoginTime(new Date()); - creatorMapper.insert(creator); - log.info("艺术家【{}】创建成功!", openId); - return creator; - }else{ - log.info("该艺术家【{}】已存在,更新登录时间",openId); - creator.setLastLoginTime(new Date()); - creatorMapper.updateById(creator); - return creator; - } - } - @Override - public Map login(WxLoginDto dto) { - WxSessionInfoVo sessionInfo = this.getSessionInfo(dto.getCode()); - //检查数据库中是否存在该openId,存在则直接设置会话状态登录;不存在则新增 + public Map login(CreatorLoginDto dto) { LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); - wrapper.eq(sessionInfo.getOpenId() != null,Creator::getOpenId,Sm4Util.sm4Encryption(sessionInfo.getOpenId())); + wrapper.eq(Creator::getPhone, Sm4Util.sm4Encryption(dto.getPhone())); + wrapper.eq(Creator::getPassword, Sm4Util.sm4Encryption(dto.getPassword())); Creator creator = creatorMapper.selectOne(wrapper); if(creator == null){ - //新用户,新增 - creator = this.saveUserInfo(creator,sessionInfo.getOpenId(), sessionInfo.getSessionKey(), dto.getEncryptedData(), dto.getIv()); + throw new ServiceException("手机号或密码不正确!",TiktokConstant.TIKTOK_CREATOR_PWD_ERROR); + } + if(creator.getStatus().equals("0")){ + throw new ServiceException("当前艺术家暂未审核,请耐心等待或联系客服!",TiktokConstant.TIKTOK_CREATOR_NOT_PASS_ERROR); + } + if(creator.getStatus().equals("2")){ + throw new ServiceException("当前艺术家被封禁,请联系客服处理!",TiktokConstant.TIKTOK_CREATOR_BANED_ERROR); } - //设置会话状态 - String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+Sm4Util.sm4Encryption(sessionInfo.getOpenId()); + CreatorLoginVo creatorLoginVo = new CreatorLoginVo(); + BeanUtils.copyProperties(creator, creatorLoginVo); + creatorLoginVo.setLastLoginTime(new Date()); + //存在则设置会话状态 + String redisKey = RedisKeyConstant.WECHAT_CREATOR_LOGIN_KEY+Sm4Util.sm4Encryption(dto.getPhone()); //存在该登录态则删除刷新 if(redisService.hasKey(redisKey)){ redisService.deleteObject(redisKey); } StringBuffer sb = new StringBuffer(); String randomId = IdUtils.fastSimpleUUID(); - sb.append(randomId).append("#").append(sessionInfo.getOpenId()); + sb.append(randomId).append("#").append(Sm4Util.sm4Encryption(dto.getPhone()+randomId)); //设置登录会话 Map map = new HashMap<>(2); map.put("token", sb.toString()); - map.put("sessionKey", sessionInfo.getSessionKey()); - map.put("userInfo",creator); - redisService.setCacheObject(redisKey,map, 30L, TimeUnit.DAYS); + map.put("userInfo",creatorLoginVo); + redisService.setCacheObject(redisKey,map, 10L, TimeUnit.DAYS); return map; } diff --git a/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java new file mode 100644 index 0000000..7032984 --- /dev/null +++ b/bnyer-services/bnyer-img/src/main/java/com/bnyer/img/vo/CreatorLoginVo.java @@ -0,0 +1,71 @@ +package com.bnyer.img.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Getter; +import lombok.Setter; + +import java.io.Serializable; +import java.math.BigDecimal; +import java.util.Date; + + +@Getter +@Setter +@ApiModel("艺术家登录响应类") +public class CreatorLoginVo implements Serializable { + + @ApiModelProperty(value="主键id") + private Long id; + + @ApiModelProperty(value="昵称") + private String name; + + @ApiModelProperty(value="搜索码") + private String scanCode; + + @ApiModelProperty(value="手机号") + private String phone; + + @ApiModelProperty(value="头像img地址") + private String img; + + @ApiModelProperty(value="简介") + private String intro; + + @ApiModelProperty(value="余额") + private BigDecimal amt; + + @ApiModelProperty(value="邀请码") + private String inviteCode; + + @ApiModelProperty(value="状态(0->待审核;1->审核通过;2->审核拒绝)") + private String status; + + @ApiModelProperty(value="第三方平台账号详情地址") + private String url; + + @ApiModelProperty(value="是否活跃(0->不活跃;1->活跃 连续10天以上更新内容)") + private String isHot; + + @ApiModelProperty(value="是否显示 (0->隐藏;1->显示)") + private String isShow; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="创建时间") + private Date createTime; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="更新时间") + private Date updateTime; + + @ApiModelProperty(value="排序") + private Integer sort; + + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @ApiModelProperty(value="最后登录时间") + private Date lastLoginTime; + + private static final long serialVersionUID = 1L; +} diff --git a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml index 1079453..3237fe2 100644 --- a/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml +++ b/bnyer-services/bnyer-img/src/main/resources/com/bnyer/img/mapper/CreatorMapper.xml @@ -6,7 +6,7 @@ - + @@ -53,7 +53,7 @@ - id, `name`,open_id, scan_code, phone, img, intro, invite_code, url, status, is_hot, is_show, create_time, + id, `name`,password, scan_code, phone, img, intro, invite_code, url, status, is_hot, is_show, create_time, update_time, sort, amt, last_login_time @@ -79,9 +79,6 @@ and scan_code = #{params.scanCode} - - and open_id = #{params.openId} - and phone = #{params.phone}