Commit ed52b7be by lili

版权保护导出修改

parent 836d3b34
......@@ -109,4 +109,33 @@ public enum BookStatusEnum {
this.value = value;
}
}
public enum BookExportStatus{
/**
* 进行中
*/
ON(0),
/**
* 已完成
*/
SUCCESS(1),
/**
* 失败
*/
FAIL(2);
public final Integer value;
/**
* 构造
*
* @param value
*/
BookExportStatus(Integer value) {
this.value = value;
}
}
}
package com.pcloud.book;
import com.alibaba.druid.pool.DruidDataSource;
import com.pcloud.book.copyright.biz.BookAuthOrderBiz;
import com.pcloud.book.mq.config.MQTopicConumer;
import com.pcloud.common.core.constant.MQTopicProducer;
import com.pcloud.common.core.mq.RabbitMQFactory;
import com.pcloud.facade.tradecenter.entity.Genuine;
import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.Queue;
import org.springframework.beans.factory.annotation.Autowired;
......@@ -14,7 +12,6 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.context.ConfigurableApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
......@@ -29,7 +26,6 @@ import springfox.documentation.spring.web.plugins.Docket;
import springfox.documentation.swagger2.annotations.EnableSwagger2;
import javax.sql.DataSource;
import java.math.BigDecimal;
import java.util.ArrayList;
@SpringBootApplication
......
......@@ -68,4 +68,8 @@ public interface BookAuthInfoBiz {
* 获取图书授权基本信息
*/
BookAuthInfoVO getAuthBookInfo(Long bookId, Long channelId, Long adviserId, Long sceneId);
/**
* 获取是否有正在导出的
*/
Boolean isHaveExport(Long bookId, Long channelId, Long adviserId);
}
......@@ -9,7 +9,24 @@ import com.pcloud.book.copyright.entity.BookExportRecord;
public interface BookExportRecordBiz {
/**
* 新增到处记录
* 新增导出记录
*/
void insertRecord(BookExportRecord bookExportRecord);
/**
* 更新导出记录
*/
void updateRecordStatus(BookExportRecord bookExportRecord);
/**
* 获取是否有正在到处的数据
*/
Boolean isHaveExport(Long bookId, Long channelId, Long adviserId);
/**
* 更新导出记录
*/
void updateRecord(BookExportRecord bookExportRecord);
void handleExportFail();
}
......@@ -96,6 +96,7 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
@Override
@Transactional(rollbackFor = Exception.class)
public void setBookAuthOpen(SetAuthOpenParam setAuthOpenParam, Long adviserId) {
checkIsCanExport(setAuthOpenParam, adviserId);
BookAuthInfoVO bookAuthInfoVO = bookAuthInfoDao.getInfoByBook(setAuthOpenParam.getBookId(), setAuthOpenParam.getChannelId(), adviserId);
BookAuthInfo bookAuthInfo = new BookAuthInfo();
BeanUtils.copyProperties(setAuthOpenParam, bookAuthInfo);
......@@ -121,20 +122,37 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
JedisClusterUtils.setJson(key, bookAuth);
}
/**
* 校验是否能导出
*/
private void checkIsCanExport(SetAuthOpenParam setAuthOpenParam, Long adviserId) {
Integer codeCount = setAuthOpenParam.getCodeCount();
if (codeCount == null || codeCount == 0) {
return;
}
Boolean isHaveExport = isHaveExport(setAuthOpenParam.getBookId(), setAuthOpenParam.getChannelId(), adviserId);
if (isHaveExport) {
throw new BookBizException(BookBizException.ERROR, "您有正在导出的授权码,请不要重复点击导出。导出之后系统会有站内信通知,请留意下右上角的消息中心!");
}
}
@ParamLog("异步导出")
private void asynExport(Long bookId, Long channelId, Long adviserId, Integer codeCount, Integer isHaveBarCode) {
EXECUTOR_SERVICE.execute(() -> {
String commitTime = DateUtils.formatDate(new Date());
String num = "";
try {
if(codeCount == null || codeCount == 0) {
return;
}
//获取批次号
Integer batchNum = bookAuthCodeBiz.getMaxBatchNum(bookId, channelId, adviserId);
num = String.format("%04d", batchNum);
//新增导出记录
insertExportRecord(bookId, channelId, adviserId, num);
//获取图书名称
BookDto bookDto = bookBiz.getBaseById(bookId);
if (bookDto == null) return;
//获取批次号
Integer batchNum = bookAuthCodeBiz.getMaxBatchNum(bookId, channelId, adviserId);
String num = String.format("%04d", batchNum);
//获取随机数
List<String> uuids = CopyrightTools.createShortUuidByCount(codeCount);
List<BookAuthCode> bookAuthCodes = new ArrayList<>();
......@@ -162,14 +180,28 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
//发送站内信
sendLetter(adviserId, bookDto.getBookName(), noticeUrl, commitTime);
//新增导出记录
insertExportRecord(bookId, channelId, adviserId, num, noticeUrl);
updateSuccessRecord(bookId, channelId, adviserId, num, noticeUrl);
LOGGER.info("url" + noticeUrl);
} catch (Exception e) {
LOGGER.error("导出条形码失败" + e.getMessage(), e);
updateExportRecord(bookId, channelId, adviserId, num, BookStatusEnum.BookExportStatus.FAIL.value);
}
});
}
@ParamLog("设置导出成功记录")
private void updateSuccessRecord(Long bookId, Long channelId, Long adviserId, String num, String noticeUrl) {
BookExportRecord bookExportRecord = new BookExportRecord();
bookExportRecord.setBookId(bookId);
bookExportRecord.setAdviserId(adviserId);
bookExportRecord.setChannelId(channelId);
bookExportRecord.setLastModifiedUser(adviserId);
bookExportRecord.setExportStatus(BookStatusEnum.BookExportStatus.SUCCESS.value);
bookExportRecord.setDownloadUrl(noticeUrl);
bookExportRecord.setBatchNum(num);
bookExportRecordBiz.updateRecord(bookExportRecord);
}
@ParamLog(value = "生成excel", isBefore = false)
private String generateExcel(List<BookAuthCode> bookAuthCodes, String bookName) {
List<Object[]> dataList = new ArrayList<Object[]>();
......@@ -192,16 +224,28 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
}
@ParamLog("新增导出记录")
private void insertExportRecord(Long bookId, Long channelId, Long adviserId, String batchNum, String url) {
private void insertExportRecord(Long bookId, Long channelId, Long adviserId, String num) {
BookExportRecord bookExportRecord = new BookExportRecord();
bookExportRecord.setBookId(bookId);
bookExportRecord.setAdviserId(adviserId);
bookExportRecord.setChannelId(channelId);
bookExportRecord.setBatchNum(batchNum);
bookExportRecord.setDownloadUrl(url);
bookExportRecord.setBatchNum(num);
bookExportRecordBiz.insertRecord(bookExportRecord);
}
@ParamLog("修改导出记录")
private void updateExportRecord(Long bookId, Long channelId, Long adviserId, String num, Integer exportStatus) {
if(StringUtil.isEmpty(num)) return;
BookExportRecord bookExportRecord = new BookExportRecord();
bookExportRecord.setBookId(bookId);
bookExportRecord.setAdviserId(adviserId);
bookExportRecord.setBatchNum(num);
bookExportRecord.setChannelId(channelId);
bookExportRecord.setLastModifiedUser(adviserId);
bookExportRecord.setExportStatus(exportStatus);
bookExportRecordBiz.updateRecordStatus(bookExportRecord);
}
@ParamLog("发送站内信")
private void sendLetter(Long adviserId, String bookName, String url, String commitTime) {
SendNotifyDto sendNotifyDto = new SendNotifyDto();
......@@ -220,48 +264,65 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
}
// /**
// * 生成word并打包成zip
// */
// private String generateWordAndZip(List<BookAuthCode> bookAuthCodes, String fileName) {
// List<String[]> wordUrls = new ArrayList<>();
// List<WordPO> wordPOs = Lists.newArrayList();
/* *//**
* 生成word并打包成zip
*//*
private String generateWordAndZip(List<BookAuthCode> bookAuthCodes, String fileName) {
List<String[]> wordUrls = new ArrayList<>();
List<WordPO> wordPOs = Lists.newArrayList();
// 调用导出word
int num = 1;
for (int i = 0; i < bookAuthCodes.size(); i++) {
BookAuthCode bookAuthCode = bookAuthCodes.get(i);
//生成条形码
String code = bookAuthCode.getFullCode();
String codeUrl = CopyrightTools.generateBarCode128Local(code, String.valueOf(0.5), String.valueOf(30));
wordPOs.add(new WordImagePO(OssUtils.urlAddKeyLong(codeUrl),
ParagraphAlignment.LEFT.getValue(), 120, 360, null, " " + code));
if (5000 == num || i == bookAuthCodes.size() - 1) {// 每5000个生成一个word
String outPath = "";
try {
outPath = WordUtils.create2(wordPOs);
} catch (Exception e) {
LOGGER.error(e.getMessage(), e);
}
if (StringUtils.isEmpty(outPath)) {
return null;
}
// 将word上传到oss文件服务器上
UploadResultInfo uploadLocalFile = OssUtils.uploadLocalFile(outPath, fileName);
String wordUrl = uploadLocalFile.getUrl();// 删除文件
FileUtils.deleteFolder(outPath);
String[] url = {fileName, wordUrl};
wordUrls.add(url);
wordPOs.clear();
num = 0;
}
num++;
}
UploadResultInfo zipUrlInfo = CompressUtils.zip(wordUrls, fileName);
return zipUrlInfo != null ? zipUrlInfo.getUrl() : null;
}*/
// private String generateZip(List<BookAuthCode> bookAuthCodes, String fileName, String excelUrl) {
// // 调用导出word
// int num = 1;
// List<String[]> picUrls = new ArrayList<>();
// String[] excel = {fileName, excelUrl};
// picUrls.add(excel);
// for (int i = 0; i < bookAuthCodes.size(); i++) {
// BookAuthCode bookAuthCode = bookAuthCodes.get(i);
// //生成条形码
// String code = bookAuthCode.getFullCode();
// String codeUrl = CopyrightTools.generateBarCode128Local(code, String.valueOf(0.5), String.valueOf(30));
// wordPOs.add(new WordImagePO(OssUtils.urlAddKeyLong(codeUrl),
// ParagraphAlignment.LEFT.getValue(), 120, 360, null, " " + code));
// if (5000 == num || i == bookAuthCodes.size() - 1) {// 每5000个生成一个word
// String outPath = "";
// try {
// outPath = WordUtils.create2(wordPOs);
// } catch (Exception e) {
// LOGGER.error(e.getMessage(), e);
// }
// if (StringUtils.isEmpty(outPath)) {
// return null;
// String codeUrl = CopyrightTools.generateBarCode128Local(bookAuthCode.getFullCode(), String.valueOf(0.5), String.valueOf(30));
// String[] code = {bookAuthCode.getFullCode(), codeUrl};
// picUrls.add(code);
// }
// // 将word上传到oss文件服务器上
// UploadResultInfo uploadLocalFile = OssUtils.uploadLocalFile(outPath, fileName);
// String wordUrl = uploadLocalFile.getUrl();
// // 删除文件
// FileUtils.deleteFolder(outPath);
// String[] url = {fileName, wordUrl};
// wordUrls.add(url);
// wordPOs.clear();
// num = 0;
// }
// num++;
// }
// UploadResultInfo zipUrlInfo = CompressUtils.zip(wordUrls, fileName);
// UploadResultInfo zipUrlInfo = CompressUtils.zipNoSuffix(picUrls, fileName);
// return zipUrlInfo != null ? zipUrlInfo.getUrl() : null;
//
// }
@Override
@ParamLog("设置版权保护状态")
public void setAuthStatus(SetAuthStatusParam setAuthStatusParam, Long adviserId) {
......@@ -416,4 +477,10 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
BookAuthInfoVO infoByBook = getInfoByBook(bookId, channelId, adviserId);
return infoByBook;
}
@Override
@ParamLog("是否有正在导出的")
public Boolean isHaveExport(Long bookId, Long channelId, Long adviserId) {
Boolean isCanExport = bookExportRecordBiz.isHaveExport(bookId,channelId,adviserId);
return isCanExport;
}
}
......@@ -21,4 +21,24 @@ public class BookExportRecordBizImpl implements BookExportRecordBiz {
public void insertRecord(BookExportRecord bookExportRecord) {
bookExportRecordDao.insert(bookExportRecord);
}
@Override
public void updateRecordStatus(BookExportRecord bookExportRecord) {
bookExportRecordDao.updateRecordStatus(bookExportRecord);
}
@Override
public Boolean isHaveExport(Long bookId, Long channelId, Long adviserId) {
return bookExportRecordDao.isHaveExport(bookId, channelId, adviserId);
}
@Override
public void updateRecord(BookExportRecord bookExportRecord) {
bookExportRecordDao.updateRecord(bookExportRecord);
}
@Override
public void handleExportFail() {
bookExportRecordDao.handleExportFail();
}
}
......@@ -8,4 +8,24 @@ import com.pcloud.common.core.dao.BaseDao;
* @date 2018/12/4 19:20
*/
public interface BookExportRecordDao extends BaseDao<BookExportRecord> {
/**
* 更新导出记录
*/
void updateRecordStatus(BookExportRecord bookExportRecord);
/**
* 获取是否有正在导出的数据
*/
Boolean isHaveExport(Long bookId, Long channelId, Long adviserId);
/**
* 更新导出记录
*/
void updateRecord(BookExportRecord bookExportRecord);
/**
* 处理导出
*/
void handleExportFail();
}
......@@ -5,10 +5,37 @@ import com.pcloud.book.copyright.entity.BookExportRecord;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.Map;
/**
* @author lily
* @date 2018/12/4 19:20
*/
@Component("bookExportRecordDao")
public class BookExportRecordDaoImpl extends BaseDaoImpl<BookExportRecord> implements BookExportRecordDao {
@Override
public void updateRecordStatus(BookExportRecord bookExportRecord) {
this.getSqlSession().update(this.getStatement("updateRecordStatus"), bookExportRecord);
}
@Override
public Boolean isHaveExport(Long bookId, Long channelId, Long adviserId) {
Map<String,Object> paramMap = new HashMap<>();
paramMap.put("bookId",bookId);
paramMap.put("channelId",channelId);
paramMap.put("adviserId",adviserId);
return this.getSqlSession().selectOne(this.getStatement("isHaveExport"), paramMap);
}
@Override
public void updateRecord(BookExportRecord bookExportRecord) {
this.getSqlSession().update(this.getStatement("updateRecord"), bookExportRecord);
}
@Override
public void handleExportFail() {
this.getSqlSession().update(this.getStatement("handleExportFail"));
}
}
......@@ -33,9 +33,17 @@ public class BookExportRecord extends BaseEntity {
@ApiModelProperty("创建人")
private Long createdUser;
@ApiModelProperty("创建时间不带时分秒")
@ApiModelProperty("创建时间")
private Date createdDate;
@ApiModelProperty("最后修改人")
private Long lastModifiedUser;
@ApiModelProperty("最后修改时间")
private Date lastModifiedDate;
@ApiModelProperty("导出状态")
private Integer exportStatus;
@Override
public Long getId() {
return id;
......@@ -102,6 +110,30 @@ public class BookExportRecord extends BaseEntity {
this.createdDate = createdDate;
}
public Long getLastModifiedUser() {
return lastModifiedUser;
}
public void setLastModifiedUser(Long lastModifiedUser) {
this.lastModifiedUser = lastModifiedUser;
}
public Date getLastModifiedDate() {
return lastModifiedDate;
}
public void setLastModifiedDate(Date lastModifiedDate) {
this.lastModifiedDate = lastModifiedDate;
}
public Integer getExportStatus() {
return exportStatus;
}
public void setExportStatus(Integer exportStatus) {
this.exportStatus = exportStatus;
}
@Override
public String toString() {
return "BookExportRecord{" +
......@@ -113,6 +145,9 @@ public class BookExportRecord extends BaseEntity {
", downloadUrl='" + downloadUrl + '\'' +
", createdUser=" + createdUser +
", createdDate=" + createdDate +
", lastModifiedUser=" + lastModifiedUser +
", lastModifiedDate=" + lastModifiedDate +
", exportStatus=" + exportStatus +
'}';
}
}
......@@ -68,4 +68,10 @@ public interface BookAuthInfoFacade {
@RequestMapping(value = "listHaveSetAuthBook", method = RequestMethod.POST)
ResponseDto<PageBeanNew> listHaveSetAuthBook(@RequestHeader("token") String token, @RequestBody ListHaveAuthBookParam listHaveAuthBookParam)
throws PermissionException, BizException;
@ApiOperation(value = "是否有可以导出的", httpMethod = "GET")
@RequestMapping(value = "isHaveExport", method = RequestMethod.GET)
ResponseDto<Boolean> isHaveExport(@RequestHeader("token") String token, @RequestParam("bookId") Long bookId, @RequestParam("channelId") Long channelId)
throws PermissionException, BizException;
}
......@@ -101,4 +101,13 @@ public class BookAuthInfoFacadeImpl implements BookAuthInfoFacade {
PageBeanNew pageBeanNew = bookAuthInfoBiz.listHaveSetAuthBook(listHaveAuthBookParam, adviserId) ;
return new ResponseDto<>(pageBeanNew);
}
@Override
@GetMapping("isHaveExport")
public ResponseDto<Boolean> isHaveExport(@RequestHeader("token") String token, @RequestParam("bookId") Long bookId, @RequestParam("channelId") Long channelId)
throws PermissionException, BizException {
Long adviserId = (Long) SessionUtil.getVlaue(token, SessionUtil.PARTY_ID);
Boolean isCanExport = bookAuthInfoBiz.isHaveExport(bookId, channelId, adviserId);
return new ResponseDto<>(isCanExport == null ? false : isCanExport);
}
}
/**
*
*/
package com.pcloud.book.mq.event;
import com.pcloud.book.copyright.biz.BookExportRecordBiz;
import com.pcloud.common.utils.string.StringUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationListener;
import org.springframework.context.event.ContextRefreshedEvent;
import org.springframework.stereotype.Component;
/**
* @author:songx
* @date:2018年5月16日,下午5:11:03
*/
@Component("bookEvent")
public class BookEvent implements ApplicationListener<ContextRefreshedEvent> {
/**
*
*/
private final static Logger LOGGER = LoggerFactory.getLogger(BookEvent.class);
@Autowired
private BookExportRecordBiz bookExportRecordBiz;
/**
* 目的:防止onApplicationEvent方法重复执行两次
*/
private boolean bool = false;
public void onApplicationEvent(ContextRefreshedEvent event) {
if (bool || !StringUtil.isEmpty(event.getApplicationContext().getParent().getApplicationName())) {
return;
}
bool = true;
//处理由于服务重启导致导出失败的文件
handleExportFail();
}
private void handleExportFail() {
bookExportRecordBiz.handleExportFail();
}
}
......@@ -4,9 +4,53 @@
<insert id="insert" useGeneratedKeys="true" parameterType="bookExportRecord">
INSERT INTO BOOK_EXPORT_RECORD(
BOOK_ID, CHANNEL_ID,ADVISER_ID,BATCH_NUM,DOWNLOAD_URL,CREATED_USER, CREATED_DATE)
BOOK_ID, CHANNEL_ID,ADVISER_ID, BATCH_NUM, CREATED_USER, CREATED_DATE)
VALUES
(#{bookId,jdbcType=BIGINT}, #{channelId,jdbcType=BIGINT}, #{adviserId,jdbcType=BIGINT},
#{batchNum}, #{downloadUrl}, #{adviserId}, NOW())
(#{bookId,jdbcType=BIGINT}, #{channelId,jdbcType=BIGINT}, #{adviserId,jdbcType=BIGINT},#{batchNum},
#{adviserId}, NOW())
</insert>
<update id="updateRecordStatus" parameterType="bookAuthInfo" flushCache="true">
UPDATE BOOK_EXPORT_RECORD
SET
EXPORT_STATUS = #{exportStatus},
LAST_MODIFIED_DATE = NOW(),
LAST_MODIFIED_USER = #{lastModifiedUser}
WHERE
BOOK_ID = #{bookId} AND CHANNEL_ID = #{channelId} AND ADVISER_ID = #{adviserId} AND BATCH_NUM = #{batchNum}
</update>
<update id="updateRecord" parameterType="bookAuthInfo" flushCache="true">
UPDATE BOOK_EXPORT_RECORD
SET
EXPORT_STATUS = #{exportStatus},
download_url = #{downloadUrl},
LAST_MODIFIED_DATE = NOW(),
LAST_MODIFIED_USER = #{lastModifiedUser}
WHERE
BOOK_ID = #{bookId} AND CHANNEL_ID = #{channelId} AND ADVISER_ID = #{adviserId} AND BATCH_NUM = #{batchNum}
</update>
<select id="isHaveExport" resultType="Boolean" parameterType="map">
SELECT
COUNT(1)
FROM
BOOK_EXPORT_RECORD
WHERE
BOOK_ID = #{bookId, jdbcType=BIGINT}
AND
CHANNEL_ID = #{channelId, jdbcType=BIGINT}
AND
ADVISER_ID = #{adviserId, jdbcType=BIGINT}
AND EXPORT_STATUS = 0
</select>
<update id="handleExportFail" >
UPDATE BOOK_EXPORT_RECORD
SET EXPORT_STATUS = 2
WHERE EXPORT_STATUS = 0
</update>
</mapper>
\ No newline at end of file
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