Commit 8d06ef8c by 田超

Merge branch 'feature/1003876' into 'master'

feat: [1003876] 版权保护使用码详情

See merge request rays/pcloud-book!1044
parents 526c0bde 0efe8a27
......@@ -6,6 +6,7 @@ import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import java.util.Date;
import java.util.List;
/**
* @author hzk
......@@ -54,6 +55,9 @@ public class BookAuthCodeDTO extends BaseDto {
@ApiModelProperty("最后修改时间")
private Date lastModifiedDate;
@ApiModelProperty("使用授权码的用户")
private List<BookAuthUserDTO> bookAuthUserList;
public String getFullCode() {
return fullCode;
}
......@@ -166,6 +170,14 @@ public class BookAuthCodeDTO extends BaseDto {
this.lastModifiedDate = lastModifiedDate;
}
public List<BookAuthUserDTO> getBookAuthUserList() {
return bookAuthUserList;
}
public void setBookAuthUserList(List<BookAuthUserDTO> bookAuthUserList) {
this.bookAuthUserList = bookAuthUserList;
}
@Override
public String toString() {
return "BookAuthCode{" +
......
package com.pcloud.book.copyright.dto;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.annotation.JsonInclude;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.util.Date;
/**
* @author lily
* @date 2018/12/3 11:11
*/
@ApiModel
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class BookAuthUserDTO {
@ApiModelProperty("图书授权用户标识")
private Long id;
@ApiModelProperty("图书标识")
private Long bookId;
@ApiModelProperty("运营标识")
private Long channelId;
@ApiModelProperty("编辑标识")
private Long adviserId;
@ApiModelProperty("微信用户标识")
private Long wechatUserId;
@ApiModelProperty("用户名称")
private String nickName;
@ApiModelProperty("是否授权码进来用户(0 授权码 1 授权金购买")
private Integer isAuthCode;
@ApiModelProperty("月份")
private String months;
@ApiModelProperty("省份")
private String province;
@ApiModelProperty("城市")
private String city;
@ApiModelProperty("创建时间带时分秒")
@JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
private Date createdTime;
@ApiModelProperty("创建人")
private Long createdUser;
@ApiModelProperty("创建时间不带时分秒")
private Date createdDate;
@ApiModelProperty("最后修改人")
private Long lastModifiedUser;
@ApiModelProperty("最后修改时间")
private Date lastModifiedDate;
@ApiModelProperty("是否是现代纸书")
private Integer isPaperBook;
@ApiModelProperty("是否是社群书")
private Integer isGroupBook;
@ApiModelProperty("授权码id")
private Long bookAuthCodeId;
}
package com.pcloud.book.copyright.biz;
import com.pcloud.book.copyright.dto.BookAuthUserDTO;
import com.pcloud.book.copyright.dto.CheckUserAuthDTO;
import com.pcloud.book.copyright.entity.BookAuthUser;
import com.pcloud.book.copyright.vo.BookAuthCodeUserVO;
......@@ -9,6 +10,7 @@ import com.pcloud.book.copyright.vo.SixMonthCountVO;
import com.pcloud.book.copyright.vo.ThirtyDayCountVO;
import java.util.List;
import java.util.Map;
/**
* @author lily
......@@ -69,4 +71,9 @@ public interface BookAuthUserBiz {
* 校验用户是否授权(进群)
*/
Boolean checkUserIsHaveAuth(CheckUserAuthDTO checkUserAuthDTO);
/**
* 获取使用授权码的用户
*/
Map<Long, List<BookAuthUserDTO>> getByAuthCodeIds(List<Long> authCodeIds);
}
package com.pcloud.book.copyright.biz.impl;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.pcloud.book.base.enums.BookStatusEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookBiz;
......@@ -17,6 +18,7 @@ import com.pcloud.book.copyright.constants.ImportAuthCodeStatus;
import com.pcloud.book.copyright.dao.BookAuthCodeDao;
import com.pcloud.book.copyright.dao.BookAuthCodeImportRecordDao;
import com.pcloud.book.copyright.dto.BookAuthCodeDTO;
import com.pcloud.book.copyright.dto.BookAuthUserDTO;
import com.pcloud.book.copyright.entity.BookAuthCode;
import com.pcloud.book.copyright.entity.BookAuthCodeImportRecord;
import com.pcloud.book.copyright.entity.BookAuthUser;
......@@ -47,6 +49,7 @@ import com.pcloud.readercenter.wechat.entity.WechatUser;
import com.pcloud.resourcecenter.base.exceptions.ResBizException;
import com.pcloud.settlementcenter.record.exceptions.RecordException;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
......@@ -75,6 +78,7 @@ import java.util.Map;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import static com.pcloud.book.util.common.ExcelUtils.getColumnTopStyle;
import static com.pcloud.book.util.common.ExcelUtils.getDataStyle;
......@@ -158,8 +162,9 @@ public class BookAuthCodeBizImpl implements BookAuthCodeBiz {
} else if (count < 1 && !isHaveCode) {
return BookStatusEnum.CodeUseTypeEnum.NOT_RIGHT.value;
} else {
BookAuthCode bookAuthCode = bookAuthCodeDao.getByFullCode(code);
//新增一条校验成功记录
addUserRecord(bookId, channelId, adviserId, wechatUserId, authBookType);
addUserRecord(bookId, channelId, adviserId, wechatUserId, authBookType, bookAuthCode.getId());
return BookStatusEnum.CodeUseTypeEnum.RIGHT.value;
}
}
......@@ -298,13 +303,14 @@ public class BookAuthCodeBizImpl implements BookAuthCodeBiz {
}
@ParamLog("新增一条授权成功记录")
private void addUserRecord(Long bookId, Long channelId, Long adviserId, Long wechatUserId, Integer authBookType) {
private void addUserRecord(Long bookId, Long channelId, Long adviserId, Long wechatUserId, Integer authBookType, Long bookAuthCodeId) {
BookAuthUser bookAuthUser = new BookAuthUser();
bookAuthUser.setBookId(bookId);
bookAuthUser.setChannelId(channelId);
bookAuthUser.setAdviserId(adviserId);
bookAuthUser.setWechatUserId(wechatUserId);
bookAuthUser.setAuthCode(BookStatusEnum.AuthCodeTypeEnum.BY_CODE.value);
bookAuthUser.setBookAuthCodeId(bookAuthCodeId);
WechatUser wechatUser = readerConsr.getWechatUser(wechatUserId);
bookAuthUser.setProvince(wechatUser == null || StringUtil.isEmpty(wechatUser.getWechatUserProvince()) ? "未知" : wechatUser.getWechatUserProvince());
bookAuthUser.setCity(wechatUser == null || StringUtil.isEmpty(wechatUser.getWechatUserCity()) ? "未知" : wechatUser.getWechatUserCity());
......@@ -341,7 +347,30 @@ public class BookAuthCodeBizImpl implements BookAuthCodeBiz {
} else {
paramMap.put("isGroupBook", 1);
}
return bookAuthCodeDao.listPageNew(pageParam,paramMap,"getCodeList");
PageBeanNew<BookAuthCodeDTO> pageBeanNew = bookAuthCodeDao.listPageNew(pageParam, paramMap, "getCodeList");
if(pageBeanNew == null || CollectionUtils.isEmpty(pageBeanNew.getRecordList())){
return pageBeanNew;
}
List<BookAuthCodeDTO> recordList = pageBeanNew.getRecordList();
// 填充
this.fillAuthUser(recordList);
return pageBeanNew;
}
/**
* 填充用户
* @param recordList
*/
private void fillAuthUser(List<BookAuthCodeDTO> recordList) {
List<Long> authCodeIds = recordList.stream().filter(x-> x.getUseCount() > 0).map(x -> x.getId()).collect(Collectors.toList());
if(CollectionUtils.isEmpty(authCodeIds)){
return;
}
// 查询使用码的使用情况
Map<Long, List<BookAuthUserDTO>> authUserMap = bookAuthUserBiz.getByAuthCodeIds(authCodeIds);
for (BookAuthCodeDTO bookAuthCodeDTO : recordList) {
bookAuthCodeDTO.setBookAuthUserList(authUserMap.getOrDefault(bookAuthCodeDTO.getId(), Lists.newArrayList()));
}
}
/**
......
......@@ -5,11 +5,13 @@ import com.google.common.collect.Lists;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.live.LiveCons;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.copyright.biz.BookAuthUserBiz;
import com.pcloud.book.copyright.dao.BookAuthServeDao;
import com.pcloud.book.copyright.dao.BookAuthUserDao;
import com.pcloud.book.copyright.dao.BookClickBuyRecordDao;
import com.pcloud.book.copyright.dto.BookAuthUserDTO;
import com.pcloud.book.copyright.dto.CheckUserAuthDTO;
import com.pcloud.book.copyright.dto.DateDTO;
import com.pcloud.book.copyright.dto.ServeDTO;
......@@ -28,6 +30,9 @@ import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.cookie.Cookie;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.collections4.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
......@@ -41,6 +46,8 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author lily
......@@ -61,6 +68,9 @@ public class BookAuthUserBizImpl implements BookAuthUserBiz {
private LiveCons liveCons;
@Autowired
private ProductConsr productConsr;
@Autowired
private ReaderConsr readerConsr;
@ParamLog(value = "获取授权用户数量")
@Override
......@@ -319,4 +329,26 @@ public class BookAuthUserBizImpl implements BookAuthUserBiz {
.sort((SixMonthCountVO dto1, SixMonthCountVO dto2) -> dto1.getDate().compareTo(dto2.getDate()));
}
@Override
public Map<Long, List<BookAuthUserDTO>> getByAuthCodeIds(List<Long> authCodeIds) {
if(CollectionUtils.isEmpty(authCodeIds)){
return new HashMap<>();
}
List<BookAuthUserDTO> bookAuthUserList = bookAuthUserDao.getByAuthCodeIds(authCodeIds);
if(CollectionUtils.isEmpty(bookAuthUserList)){
return new HashMap<>();
}
List<Long> wechatUserIds = bookAuthUserList.stream().filter(x -> !Objects.isNull(x.getWechatUserId())).map(x -> x.getWechatUserId()).distinct().collect(Collectors.toList());
if(CollectionUtils.isNotEmpty(wechatUserIds)){
Map<Long, WechatUser> wechatUserMap = readerConsr.getUserList(wechatUserIds);
for (BookAuthUserDTO bookAuthUserDTO : bookAuthUserList){
Long wechatUserId = bookAuthUserDTO.getWechatUserId();
if (!MapUtils.isEmpty(wechatUserMap) && null != wechatUserId && wechatUserMap.containsKey(wechatUserId)){
WechatUser wechatUser = wechatUserMap.get(wechatUserId);
bookAuthUserDTO.setNickName(null == wechatUser ? "" : wechatUser.getWechatUserNickname());
}
}
}
return bookAuthUserList.stream().collect(Collectors.groupingBy(x -> x.getBookAuthCodeId()));
}
}
......@@ -47,4 +47,11 @@ public interface BookAuthCodeDao extends BaseDao<BookAuthCode> {
* @return
*/
BookAuthCodeDTO getBaseById(Long codeId);
/**
* 根据授权码查询id
* @param code
* @return
*/
BookAuthCode getByFullCode(String code);
}
......@@ -12,6 +12,9 @@ import java.util.List;
* @date 2018/12/3 15:17
*/
public interface BookAuthInfoDao extends BaseDao<BookAuthInfo> {
BookAuthInfo getById(Long id);
/**
* 获取是否有受保护图书
* @param adviserId 编辑标识
......
package com.pcloud.book.copyright.dao;
import com.pcloud.book.copyright.dto.BookAuthUserDTO;
import com.pcloud.book.copyright.dto.HaveUsedAuthCode;
import com.pcloud.book.copyright.entity.BookAuthUser;
import com.pcloud.book.copyright.vo.BookAuthCodeUserVO;
......@@ -61,4 +62,14 @@ public interface BookAuthUserDao extends BaseDao<BookAuthUser> {
* 检查给定的书籍是否具有使用过的授权码
*/
List<HaveUsedAuthCode> checkHaveUsedAuthCode(List<Long> bookIds);
/**
* 获取用户授权的具体方式
*/
BookAuthUser getAuthUser(Long bookId, Long channelId, Long adviserId, Long wechatUserId, Integer authBookType);
/**
* 获取使用授权码的用户
*/
List<BookAuthUserDTO> getByAuthCodeIds(List<Long> authCodeIds);
}
......@@ -79,4 +79,8 @@ public class BookAuthCodeDaoImpl extends BaseDaoImpl<BookAuthCode> implements Bo
return this.getSessionTemplate().selectOne(this.getStatement("getBaseById"), codeId);
}
@Override
public BookAuthCode getByFullCode(String code) {
return this.getSessionTemplate().selectOne(this.getStatement("getByFullCode"), code);
}
}
......@@ -21,6 +21,11 @@ import java.util.Map;
public class BookAuthInfoDaoImpl extends BaseDaoImpl<BookAuthInfo> implements BookAuthInfoDao {
@Override
public BookAuthInfo getById(Long id) {
return this.getSqlSession().selectOne(this.getStatement("getById"), id);
}
@Override
public Boolean getIsHaveAuthBook(Long adviserId) {
return this.getSqlSession().selectOne(this.getStatement("getIsHaveAuthBook"), adviserId);
}
......
package com.pcloud.book.copyright.dao.impl;
import com.pcloud.book.copyright.dao.BookAuthUserDao;
import com.pcloud.book.copyright.dto.BookAuthUserDTO;
import com.pcloud.book.copyright.dto.HaveUsedAuthCode;
import com.pcloud.book.copyright.entity.BookAuthUser;
import com.pcloud.book.copyright.vo.BookAuthCodeUserVO;
......@@ -102,4 +103,23 @@ public class BookAuthUserDaoImpl extends BaseDaoImpl<BookAuthUser> implements Bo
return this.getSessionTemplate().selectList(this.getStatement("haveUsedAuthCode"), bookIds);
}
@Override
public BookAuthUser getAuthUser(Long bookId, Long channelId, Long adviserId, Long wechatUserId, Integer authBookType) {
Map<String, Object> paramMap = new HashMap<>();
paramMap.put("bookId", bookId);
paramMap.put("channelId", channelId);
paramMap.put("adviserId",adviserId);
paramMap.put("wechatUserId", wechatUserId);
if(authBookType == null || authBookType.equals(0)) {
paramMap.put("isPaperBook", 1);
} else {
paramMap.put("isGroupBook", 1);
}
return this.getSqlSession().selectOne(this.getStatement("getAuthUser"), paramMap);
}
@Override
public List<BookAuthUserDTO> getByAuthCodeIds(List<Long> authCodeIds) {
return this.getSessionTemplate().selectList(this.getStatement("getByAuthCodeIds"), authCodeIds);
}
}
......@@ -60,6 +60,9 @@ public class BookAuthUser extends BaseEntity {
@ApiModelProperty("是否是社群书")
private Integer isGroupBook;
@ApiModelProperty("授权码id")
private Long bookAuthCodeId;
@Override
public Long getId() {
return id;
......@@ -190,6 +193,14 @@ public class BookAuthUser extends BaseEntity {
this.isGroupBook = isGroupBook;
}
public Long getBookAuthCodeId() {
return bookAuthCodeId;
}
public void setBookAuthCodeId(Long bookAuthCodeId) {
this.bookAuthCodeId = bookAuthCodeId;
}
@Override
public String toString() {
return "BookAuthUser{" +
......
......@@ -175,4 +175,23 @@
from book_auth_code
where id = #{codeId}
</select>
<select id="getByFullCode" resultType="com.pcloud.book.copyright.entity.BookAuthCode">
SELECT
id,
book_id bookId,
channel_id channelId,
adviser_id adviserId,
create_type createType,
auth_code authCode,
batch_num batchNum,
full_code fullCode,
use_count useCount,
created_date createdDate
FROM
BOOK_AUTH_CODE
WHERE
FULL_CODE = #{code}
</select>
</mapper>
......@@ -209,4 +209,36 @@
GROUP BY book_id
</select>
<select id="getAuthUser" resultType="com.pcloud.book.copyright.entity.BookAuthUser" parameterType="map">
SELECT
id, is_auth_code isAuthCode
FROM
BOOK_AUTH_USER
WHERE BOOK_ID = #{bookId, jdbcType=BIGINT}
AND CHANNEL_ID = #{channelId, jdbcType=BIGINT}
AND ADVISER_ID = #{adviserId, jdbcType=BIGINT}
AND WECHAT_USER_ID = #{wechatUserId}
<if test="isPaperBook != null">
AND
is_paper_book = #{isPaperBook}
</if>
<if test="isGroupBook!=null">
AND
is_group_book = #{isGroupBook}
</if>
LIMIT 1
</select>
<select id="getByAuthCodeIds" resultType="com.pcloud.book.copyright.dto.BookAuthUserDTO">
SELECT
id, is_auth_code isAuthCode, created_time createdTime, wechat_user_id wechatUserId, book_auth_code_id bookAuthCodeId
FROM
BOOK_AUTH_USER
WHERE is_auth_code = 0
AND book_auth_code_id IN
<foreach collection="list" item="item" open="(" close=")" separator=",">
#{item}
</foreach>
</select>
</mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment