server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTBaseRequst.java
@@ -1,5 +1,6 @@ package com.doumee.biz.zbom.model.zhongtai; import io.swagger.annotations.ApiModelProperty; import lombok.Data; @@ -11,8 +12,13 @@ /** * 父级编码 */ @ApiModelProperty(value = "C端传“CUSTOMER”, B端传'BUSINESS") private String userType; @ApiModelProperty(value = "token" , hidden = true) private String token; private String openid; @ApiModelProperty(value = "用户主键" , hidden = true) private Long userId; } server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentInfoRequest.java
@@ -9,8 +9,8 @@ @Data public class ZTContentInfoRequest extends ZTBaseRequst{ /** * 临时票据 * 内容主键 */ private String articleId; private String id; } server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/ZTContentListRequest.java
@@ -8,40 +8,31 @@ @Data public class ZTContentListRequest extends ZTBaseRequst { /** * 目录唯一编码,目录唯一编码 */ @ApiModelProperty(value = "分类编码") private String catalogCode; /** * 是否置顶,默认false */ @ApiModelProperty(value = " 是否置顶,默认false" , hidden = true) private Boolean isTop; /** * 当前页 */ @ApiModelProperty(value = "当前页") private String pageNum; /** * 每页条数 */ @ApiModelProperty(value = "每页条数") private String pageSize; /** * 搜索关键字,根据标题搜索关键字 */ @ApiModelProperty(value = "搜索关键字") private String search; /** * 排序方式,NORMAL - 默认 * HOT - 最热 * LATEST - 最新 */ @ApiModelProperty(value = "内容查询条件") private String query; @ApiModelProperty(value = "标签") private String tagCodes; @ApiModelProperty(value = "排序方式 NORMAL - 默认;HOT - 最热;LATEST - 最新;") private String sortType; /** * 多个标签唯一编码的列表,多个标签唯一编码的列表 */ @ApiModelProperty(value = "多个标签唯一编码的列表,多个标签唯一编码的列表",hidden = true) private List<String> tagCode; server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTCatalogInfoResponse.java
@@ -47,6 +47,6 @@ /** * 子目录 */ // private List<ZTCatalogInfoResponse> childCatalog; private List<ZTTagInfoResponse> childTagList; } server/service/src/main/java/com/doumee/biz/zbom/model/zhongtai/response/ZTContentListResponse.java
@@ -1,5 +1,6 @@ package com.doumee.biz.zbom.model.zhongtai.response; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import java.io.Serializable; @@ -13,62 +14,77 @@ /** * 作者 */ @ApiModelProperty(value = "作者") private String author; /** * 封面图 */ @ApiModelProperty(value = "封面图") private String coverImage; /** * 收藏量 */ @ApiModelProperty(value = "收藏量") private double favoriteCount; /** * 文章ID */ @ApiModelProperty(value = "文章ID") private String id; /** * 是否置顶 */ @ApiModelProperty(value = "是否置顶") private String isTop; /** * 语言编码 */ @ApiModelProperty(value = "语言编码") private String langCode; /** * 点赞量 */ @ApiModelProperty(value = "点赞量") private double likeCount; /** * 发布日期 */ @ApiModelProperty(value = "发布日期") private String publishDate; /** * 发布组织 */ @ApiModelProperty(value = "发布组织") private String publishDepartment; /** * 阅读量 */ @ApiModelProperty(value = "阅读量") private double readCount; /** * 排序 */ @ApiModelProperty(value = "排序") private String sort; /** * 子标题 */ @ApiModelProperty(value = "子标题") private String subtitle; /** * 标题 */ @ApiModelProperty(value = "标题") private String title; /** * 文章类型 */ @ApiModelProperty(value = "文章类型") private String type; /** * 文章外链URL,视频和其他跳转链接类型 */ @ApiModelProperty(value = "文章外链URL,视频和其他跳转链接类型") private String url; } server/service/src/main/java/com/doumee/config/Jwt/JwtTokenUtil.java
@@ -49,6 +49,8 @@ public static final String HEADER_KEY = "token"; //取值名称 public static final String UserId_Name = "AppUserId"; //取值名称 public static final String UserType = "UserType"; //加密密钥 private final static String jwtSecret = "MhAjU9poLf8ko54K25XBDtonaL33vtt1"; //过期时间(s) 86400L=1天 604800L=7天 server/service/src/main/java/com/doumee/config/Jwt/WebMvcConfig.java
@@ -111,6 +111,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员"); } request.setAttribute(JwtTokenUtil.UserId_Name, memberId); request.setAttribute(JwtTokenUtil.UserType, Constants.CUSTOMER); return true; } catch (IllegalArgumentException | JwtException e) { throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录"); @@ -142,6 +143,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已禁用,请联系管理员"); } request.setAttribute(JwtTokenUtil.UserId_Name, userId); request.setAttribute(JwtTokenUtil.UserType, Constants.BUSINESS); return true; } catch (IllegalArgumentException | JwtException e) { throw new BusinessException(ResponseStatus.NO_LOGIN.getCode(),"未登录"); server/service/src/main/java/com/doumee/core/utils/Constants.java
@@ -38,7 +38,7 @@ public static final String HK_ROOTORG_CODE ="HK_ROOTORG_CODE" ; public static final String HK_ROOTORG_NAME ="HK_ROOTORG_NAME" ; public static final String REDIS_TOKEN_KEY = "token_"; public static final String CUSTOMER = "CUSTOMER"; public static final String CUSTOMER = "CUSTOMER"; public static final String BUSINESS = "BUSINESS"; server/service/src/main/java/com/doumee/dao/business/model/Users.java
@@ -150,6 +150,14 @@ @ExcelColumn(name="企业二维码图片地址") private String companyQrcodeImg; @ApiModelProperty(value = "中台临时票据过期时间") @ExcelColumn(name="中台临时票据过期时间") private Date tokenDate; @ApiModelProperty(value = "中台临时票据") @ExcelColumn(name="中台临时票据") private String token; @ApiModelProperty(value = "邮箱") @ExcelColumn(name="邮箱") private String email; server/service/src/main/java/com/doumee/service/business/GetZhongTaiDataService.java
@@ -1,8 +1,8 @@ package com.doumee.service.business; import com.doumee.biz.zbom.model.zhongtai.ZTCatalogListRequest; import com.doumee.biz.zbom.model.zhongtai.response.ZTCatalogInfoResponse; import com.doumee.biz.zbom.model.zhongtai.response.ZTTagInfoResponse; import com.doumee.biz.zbom.model.zhongtai.ZTContentListRequest; import com.doumee.biz.zbom.model.zhongtai.response.*; import java.util.List; @@ -13,8 +13,40 @@ */ public interface GetZhongTaiDataService { /** * 分类数据 * @param param * @return */ List<ZTCatalogInfoResponse> getCatalogList(ZTCatalogListRequest param); /** * 标签数据 * @param param * @return */ List<ZTTagInfoResponse> getCataLogTagList(ZTCatalogListRequest param); /** * 父子级分类数据 分类+标签 * @param ztCatalogListRequest * @return */ List<ZTCatalogInfoResponse> getZTCatalogInfoResponse(ZTCatalogListRequest ztCatalogListRequest); /** * 内容分页 * @param ztContentListRequest * @return */ ZTBasePageResponse<ZTContentListResponse> pageContentList(ZTContentListRequest ztContentListRequest); /** * 内容详情 * @param id 业务主键 * @param userType 用户类型 * @param userId 用户主键 * @return */ ZTContentInfoResponse getContentInfo(String id, String userType, Long userId); } server/service/src/main/java/com/doumee/service/business/impl/GetZhongTaiDataServiceImpl.java
@@ -5,13 +5,16 @@ import com.doumee.biz.zbom.ZbomZhongTaiService; import com.doumee.biz.zbom.model.zhongtai.ZTCatalogListRequest; import com.doumee.biz.zbom.model.zhongtai.ZTConstants; import com.doumee.biz.zbom.model.zhongtai.ZTContentInfoRequest; import com.doumee.biz.zbom.model.zhongtai.ZTContentListRequest; import com.doumee.biz.zbom.model.zhongtai.response.*; import com.doumee.core.constants.ResponseStatus; import com.doumee.core.exception.BusinessException; import com.doumee.dao.business.IamInterfaceLogMapper; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.UsersMapper; import com.doumee.service.business.GetZhongTaiDataService; import com.github.xiaoymin.knife4j.core.util.CollectionUtils; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -33,6 +36,9 @@ @Autowired private MemberMapper memberMapper; @Autowired private UsersMapper usersMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @@ -71,6 +77,89 @@ } /** * 获取父子级结构数据列表 * 志说装修 zb_deco 产品 product_intro 资讯product_info 全屋案例 whole_case * 获取父子级结构数据 * @return */ @Override public List<ZTCatalogInfoResponse> getZTCatalogInfoResponse(ZTCatalogListRequest ztCatalogListRequest){ if(Objects.isNull(ztCatalogListRequest) || StringUtils.isBlank(ztCatalogListRequest.getCatalogCode())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(ztCatalogListRequest.getCatalogCode().equals(ZTConstants.CatalogCode.ZHISHUO_ZHUANGXIU) ||ztCatalogListRequest.getCatalogCode().equals(ZTConstants.CatalogCode.CHANPING) ||ztCatalogListRequest.getCatalogCode().equals(ZTConstants.CatalogCode.ZIXUN) ||ztCatalogListRequest.getCatalogCode().equals(ZTConstants.CatalogCode.QW_CASE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"分类信息错误"); } List<ZTCatalogInfoResponse> ztCatalogInfoResponseList = zbomZhongTaiService.getCatalogList(ztCatalogListRequest); if(CollectionUtils.isNotEmpty(ztCatalogInfoResponseList)){ for (ZTCatalogInfoResponse ztCatalogInfoResponse:ztCatalogInfoResponseList) { ZTCatalogListRequest ztCatalogTagListRequest = new ZTCatalogListRequest(); ztCatalogTagListRequest.setCatalogCode(ztCatalogInfoResponse.getCode()); List<ZTTagInfoResponse> ztTagInfoResponseList = zbomZhongTaiService.getTagList(ztCatalogTagListRequest); if(CollectionUtils.isNotEmpty(ztCatalogInfoResponseList)){ ztCatalogInfoResponse.setChildTagList(ztTagInfoResponseList); } } } return ztCatalogInfoResponseList; } /** * 内容 分页数据 * @param ztContentListRequest * @return */ @Override public ZTBasePageResponse<ZTContentListResponse> pageContentList(ZTContentListRequest ztContentListRequest){ if(Objects.isNull(ztContentListRequest) || Objects.isNull(ztContentListRequest.getPageNum()) || Objects.isNull(ztContentListRequest.getPageSize()) || StringUtils.isBlank(ztContentListRequest.getCatalogCode()) || StringUtils.isBlank(ztContentListRequest.getTagCodes()) || StringUtils.isBlank(ztContentListRequest.getQuery()) || StringUtils.isBlank(ztContentListRequest.getSortType()) ){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } //查询 中台 String token = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,ztContentListRequest.getUserId(),ztContentListRequest.getUserType()); ztContentListRequest.setToken(token); String catalogCode = ztContentListRequest.getCatalogCode(); if(catalogCode.equals(ZTConstants.CatalogCode.ZHISHUO_ZHUANGXIU) ||catalogCode.equals(ZTConstants.CatalogCode.CHANPING) ||catalogCode.equals(ZTConstants.CatalogCode.ZIXUN) ||catalogCode.equals(ZTConstants.CatalogCode.QW_CASE)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"分类信息错误"); } ZTBasePageResponse<ZTContentListResponse> response = zbomZhongTaiService.pageContentList(ztContentListRequest); return response; } @Override public ZTContentInfoResponse getContentInfo(String id,String userType,Long userId){ //查询 中台 TOKEN String token = MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,userId,userType); ZTContentInfoRequest ztContentListRequest = new ZTContentInfoRequest(); ztContentListRequest.setToken(token); ztContentListRequest.setUserType(userType); ztContentListRequest.setId(id); ZTContentInfoResponse response = zbomZhongTaiService.getContentInfo(ztContentListRequest); return response; } server/service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -18,11 +18,14 @@ import com.doumee.core.oss.FileModel; import com.doumee.core.utils.CodeVerifyUtils; import com.doumee.core.utils.Constants; import com.doumee.core.utils.DateUtil; import com.doumee.core.utils.Utils; import com.doumee.core.wx.WxMiniConfig; import com.doumee.dao.business.MemberMapper; import com.doumee.dao.business.UsersMapper; import com.doumee.dao.business.model.InterfaceLog; import com.doumee.dao.business.model.Member; import com.doumee.dao.business.model.Users; import com.doumee.dao.web.reqeust.EditMemberRequest; import com.doumee.dao.web.reqeust.WxPhoneRequest; import com.doumee.dao.web.response.AccountResponse; @@ -35,6 +38,7 @@ import okhttp3.OkHttpClient; import okhttp3.Request; import okhttp3.Response; import org.apache.catalina.User; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.RedisTemplate; @@ -56,6 +60,9 @@ @Autowired private MemberMapper memberMapper; @Autowired private UsersMapper usersMapper; @Autowired private SystemDictDataBiz systemDictDataBiz; @@ -365,29 +372,60 @@ /** * 更新中台token信息 * @param member */ private static void updUserZTToken(ZbomZhongTaiService zbomZhongTaiService,MemberMapper memberMapper,SystemDictDataBiz systemDictDataBiz,Member member){ //如果无有效期/已过期 重新获取 if(Objects.isNull(member.getTokenDate()) || member.getTokenDate().getTime()<=System.currentTimeMillis() ){ ZTUserGetTokenRequest param = new ZTUserGetTokenRequest(); //查询APPID String appId = systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG,Constants.WX_APPID_CUSTOMER).getCode(); param.setAppId(appId); param.setOpenId(member.getOpenid()); ZTUserGetTokenResponse ztUserGetTokenResponse = zbomZhongTaiService.getUserToken(param); if(Objects.nonNull(ztUserGetTokenResponse)){ member.setToken(ztUserGetTokenResponse.getToken()); //TODO 暂无过期日期 memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getToken,ztUserGetTokenResponse.getToken()) .eq(Member::getId,member.getId())); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台TOKEN获取失败,请联系管理员"); public static String getZTToken(ZbomZhongTaiService zbomZhongTaiService, MemberMapper memberMapper, UsersMapper usersMapper, SystemDictDataBiz systemDictDataBiz, Long id, String userType){ if(userType.equals(Constants.CUSTOMER)){ Member member = memberMapper.selectById(id); if(Objects.isNull(member)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } }; //如果无有效期/已过期 重新获取 if(Objects.isNull(member.getTokenDate()) || member.getTokenDate().getTime()<=System.currentTimeMillis() ){ ZTUserGetTokenRequest param = new ZTUserGetTokenRequest(); //查询APPID String appId = systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG,Constants.WX_APPID_CUSTOMER).getCode(); param.setAppId(appId); param.setOpenId(member.getOpenid()); ZTUserGetTokenResponse ztUserGetTokenResponse = zbomZhongTaiService.getUserToken(param); if(Objects.nonNull(ztUserGetTokenResponse)){ member.setToken(ztUserGetTokenResponse.getToken()); //TODO 暂无过期日期 memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getToken,ztUserGetTokenResponse.getToken()) .eq(Member::getId,member.getId())); return ztUserGetTokenResponse.getToken(); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台TOKEN获取失败,请联系管理员"); } } return member.getToken(); }else if(userType.equals(Constants.BUSINESS)){ Users users = usersMapper.selectById(id); if(Objects.isNull(users)){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } if(Objects.isNull(users.getTokenDate()) || users.getTokenDate().getTime()<=System.currentTimeMillis() ){ ZTUserGetTokenRequest param = new ZTUserGetTokenRequest(); //查询APPID String appId = systemDictDataBiz.queryByCode(Constants.WX_MINI_CONFIG,Constants.WX_APPID_CUSTOMER).getCode(); param.setAppId(appId); param.setOpenId(users.getOpenid()); ZTUserGetTokenResponse ztUserGetTokenResponse = zbomZhongTaiService.getUserToken(param); if(Objects.nonNull(ztUserGetTokenResponse)){ users.setToken(ztUserGetTokenResponse.getToken()); //TODO 暂无过期日期 usersMapper.update(new UpdateWrapper<Users>().lambda().set(Users::getToken,ztUserGetTokenResponse.getToken()) .eq(Users::getId,users.getId())); return ztUserGetTokenResponse.getToken(); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"中台TOKEN获取失败,请联系管理员"); } } return users.getToken(); }else{ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"参数错误"); } } @@ -401,7 +439,7 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"用户已注销"); } //校验用户token信息 MemberServiceImpl.updUserZTToken(zbomZhongTaiService,memberMapper,systemDictDataBiz,member); MemberServiceImpl.getZTToken(zbomZhongTaiService,memberMapper,usersMapper,systemDictDataBiz,member.getId(),Constants.CUSTOMER); //调起中台注销接口 ZTBaseRequst ztBaseRequst = new ZTBaseRequst(); ztBaseRequst.setUserType(Constants.CUSTOMER); @@ -420,4 +458,6 @@ } } server/web/src/main/java/com/doumee/api/web/ApiController.java
@@ -39,4 +39,10 @@ return obj != null ? (Long) obj : null; } protected Long getUserType() { Object obj = this.getRequest().getAttribute(JwtTokenUtil.UserType); return obj != null ? (Long) obj : null; } }