Commit a945c9ce by 裴大威

feat 1001264

parent 659f6111
......@@ -43,6 +43,8 @@ public class BookDto extends BaseDto {
*/
private String isbn;
private Integer isDelete;
/**
* 书籍名称
*/
......@@ -736,6 +738,70 @@ public class BookDto extends BaseDto {
this.isbn = isbn;
}
public Integer getIsDelete() {
return isDelete;
}
public void setIsDelete(Integer isDelete) {
this.isDelete = isDelete;
}
public Boolean getSelect() {
return isSelect;
}
public void setSelect(Boolean select) {
isSelect = select;
}
public Boolean getMainEditor() {
return isMainEditor;
}
public void setMainEditor(Boolean mainEditor) {
isMainEditor = mainEditor;
}
public Boolean getHaveAdviser() {
return isHaveAdviser;
}
public void setHaveAdviser(Boolean haveAdviser) {
isHaveAdviser = haveAdviser;
}
public Boolean getFundSupport() {
return isFundSupport;
}
public void setFundSupport(Boolean fundSupport) {
isFundSupport = fundSupport;
}
public Boolean getHaveFund() {
return isHaveFund;
}
public void setHaveFund(Boolean haveFund) {
isHaveFund = haveFund;
}
public Boolean getOpen() {
return isOpen;
}
public void setOpen(Boolean open) {
isOpen = open;
}
public Boolean getBookGroup() {
return isBookGroup;
}
public void setBookGroup(Boolean bookGroup) {
isBookGroup = bookGroup;
}
public String getBookName() {
return bookName;
}
......
......@@ -39,6 +39,7 @@ import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.BookcaseConsr;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType;
import com.pcloud.common.core.constant.SystemCode;
......@@ -102,8 +103,6 @@ public class BookAppealBizImpl implements BookAppealBiz {
@Autowired
private BookGroupBiz bookGroupBiz;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
/**
* 书刊申诉
*/
......@@ -131,8 +130,9 @@ public class BookAppealBizImpl implements BookAppealBiz {
paramMap.put("bookName", StringUtils.isEmpty(bookName) ? null : bookName);
paramMap.put("appealState", appealState);
PageBean pageBean = bookAppealDao.listPage(pageParam, paramMap, "list");
if (pageBean == null || ListUtils.isEmpty(pageBean.getRecordList()))
if (pageBean == null || ListUtils.isEmpty(pageBean.getRecordList())) {
return new PageBean();
}
// 设置编辑名称
bookSet.setAdviserName(pageBean.getRecordList());
return pageBean;
......@@ -186,16 +186,14 @@ public class BookAppealBizImpl implements BookAppealBiz {
bookDefendantDao.insert(defendants);
//新增申诉结果
insertBookAppealResult(bookAppealDto.getBookId(), bookAppealDto.getBookAppealId());
EXECUTOR_SERVICE.execute(new Runnable() {
public void run() {
//发送模板消息
if (AppealStateEnum.APPEAL_STATE_REFUSE.value.equals(bookAppeal.getAppealState())) {
// 向申诉方发送模板消息(审核不通过)
sendAuditFailTemplate(bookDto.getBookName(), bookAppeal.getAuditReason(), bookAppealDto.getDeclarant(), bookAppealDto.getChannelId());
} else {
//发送审核通过模板消息
sendAuditSuccessTemplate(bookDto.getBookName(), adviserBooks, bookAppealDto.getDeclarant(), bookAppealDto.getChannelId());
}
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute((Runnable) () -> {
//发送模板消息
if (AppealStateEnum.APPEAL_STATE_REFUSE.value.equals(bookAppeal.getAppealState())) {
// 向申诉方发送模板消息(审核不通过)
sendAuditFailTemplate(bookDto.getBookName(), bookAppeal.getAuditReason(), bookAppealDto.getDeclarant(), bookAppealDto.getChannelId());
} else {
//发送审核通过模板消息
sendAuditSuccessTemplate(bookDto.getBookName(), adviserBooks, bookAppealDto.getDeclarant(), bookAppealDto.getChannelId());
}
});
}
......@@ -302,7 +300,7 @@ public class BookAppealBizImpl implements BookAppealBiz {
bookAdviser.setCreatedUser(bookAdviser.getAdviserId());
if (bookAdviser.getIsMainEditor()) {
//删除书架上书籍
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
bookcaseConsr.changeBookAdviser(bookAdviser.getAdviserId(), bookAdviser.getChannelId(), bookAdviser.getBookId());
});
mainAdviserId = bookAdviser.getAdviserId();
......@@ -316,7 +314,7 @@ public class BookAppealBizImpl implements BookAppealBiz {
// 批量修改图书编辑关联关系
bookAdviserDao.insert(bookMainAdviserDto.getBookAdviserList());
// 新增申诉编辑图书与二维码关联关系
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
recoverBookQrcodeAssoc(bookId, bookAppealDto.getChannelId(), appealAdviserId);
});
}
......@@ -349,9 +347,9 @@ public class BookAppealBizImpl implements BookAppealBiz {
public void setOnlyOneAdviser(Long bookId, Long declarant, Long channelId, Long templetId, Long secondTempletId, List<BookAdviserDto> adviserBooks) {
//删除其余编辑与图书关联关系
bookAdviserBiz.deleteByBook(bookId);
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
//批量删除书架书籍
adviserBooks.stream().forEach(
adviserBooks.forEach(
adviserBook -> {
bookcaseConsr.deleteBookForAdviser(bookId, channelId, adviserBook.getAdviserId());
//删除与二维码关联关系
......@@ -385,7 +383,7 @@ public class BookAppealBizImpl implements BookAppealBiz {
private void sendAppealTemplate(Boolean isOnlyOneAdviser, Long appealAdviserId, List<BookAdviserDto> bookAdviserList, Long bookId, Long channelId, Long mainAdviserId) {
LOGGER.info("发送申诉审核后的模板消息appealAdviserId=" + appealAdviserId + "bookAdviserList=" + bookAdviserList +
"bookId=" + bookId + "channelId=" + channelId + "mainAdviserId=" + mainAdviserId);
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
// 获取图书详情
BookDto bookDto = bookBiz.getBaseById(bookId);
String bookName = bookDto.getBookName();
......@@ -595,8 +593,9 @@ public class BookAppealBizImpl implements BookAppealBiz {
//获取申诉结果
List<BookAppealResultDto> appealResults = bookAppealResultDao.getAppealResult(bookAppealId);
if (ListUtils.isEmpty(appealResults))
if (ListUtils.isEmpty(appealResults)) {
return new ArrayList<>();
}
List<Long> adviserIds = new ArrayList<>();
List<Long> channelIds = new ArrayList<>();
......
......@@ -136,11 +136,12 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
}
if (bookAdviserDto != null && BookConstant.BOOK_ADVISER_DELETE.equals(bookAdviserDto.getIsDelete())) { // 编辑之前设置过,但是已经删除,走恢复流程
// 20190723-刘娜【ID1001264】社群书删除后,再创建时不要自动恢复
recoverBook4Adviser(bookAdviser.getBookId(), bookAdviser.getAdviserId(), bookAdviser.getChannelId(),
bookAdviser.getTempletId(),bookAdviser.getSecondTempletId());
bookAdviser.getTempletId(),bookAdviser.getSecondTempletId(), false);
} else {
// 判断是否配置过该书籍推广信息
checkIsHaveOtherAdviser(bookAdviser.getBookId(), bookAdviser.getChannelId());
checkIsHaveOtherAdviser(bookAdviser.getBookId(), bookAdviser.getChannelId(), bookAdviser.getAdviserId());
try {
LOGGER.info("【书籍-编辑】编辑设置书籍推广信息,<START>.[bookAdviser]=" + bookAdviser.toString());
// 默认是主编辑
......@@ -165,7 +166,7 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
* @param bookId 图书标识
* @param channelId 运营标识
*/
void checkIsHaveOtherAdviser(Long bookId, Long channelId) throws BizException{
void checkIsHaveOtherAdviser(Long bookId, Long channelId, Long adviserId) throws BizException{
LOGGER.info("是否有其他编辑加过这本书bookId="+bookId+"channelId="+channelId);
if (bookId == null || channelId == null) {
throw new BookBizException(BookBizException.PARAM_IS_ERROR, "图书不存在!");
......@@ -175,15 +176,21 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
return;
}
Boolean isHaveOtherChannel = false;
Boolean isMySelf = false;
for(BookAdviserDto bookAdviserDto : advisers){
if(!channelId.equals(bookAdviserDto.getChannelId())){
isHaveOtherChannel = true;
}
if(bookAdviserDto.getAdviserId().equals(adviserId)) {
isMySelf = true;
}
}
if(isHaveOtherChannel){
throw new BookBizException(BookBizException.DB_SELECT_MORE, "已在其它运营平台存在");
}else{
throw new BookBizException(BookBizException.DB_SELECT_MORE, "已被其它编辑增加成功");
if (!isMySelf || advisers.size() > 1) {
throw new BookBizException(BookBizException.DB_SELECT_MORE, "已被其它编辑增加成功");
}
}
}
......@@ -668,13 +675,15 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void recoverBook4Adviser(Long bookId, Long adviserId, Long channelId, Long templetId,Long secondTempletId) {
public void recoverBook4Adviser(Long bookId, Long adviserId, Long channelId, Long templetId,Long secondTempletId, Boolean recoverScene) {
LOGGER.info("恢复书籍-编辑 <START>.[bookId]=" + bookId + ",adviserId=" + adviserId + ",channelId=" + channelId + " templetId= " + templetId + "secondTempletId=" + secondTempletId);
checkIsHaveOtherAdviser(bookId, channelId);
checkIsHaveOtherAdviser(bookId, channelId, adviserId);
// 恢复书籍编辑的状态
updateBookAdviserStatus(bookId, adviserId, channelId, templetId, secondTempletId, BookConstant.BOOK_ADVISER_NO_DELETE,BookConstant.MAIN_ADVISER);
// 恢复图书关联的二维码
qrcodeSceneConsr.recoverByBook(bookId, channelId, adviserId);
// 恢复图书关联的二维码 20190723-刘娜【ID1001264】社群书删除后,再创建时不要自动恢复
if (recoverScene) {
qrcodeSceneConsr.recoverByBook(bookId, channelId, adviserId);
}
LOGGER.info("恢复书籍-编辑 ,<END>");
}
......
......@@ -3,28 +3,9 @@
*/
package com.pcloud.book.book.biz.impl;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import com.pcloud.analysisengine.qrcode.dto.BookTimeSourceDto;
import com.pcloud.appcenter.base.exception.AppBizException;
import com.pcloud.book.base.enums.BookFreezeEnum;
......@@ -69,8 +50,9 @@ import com.pcloud.book.consumer.user.PartyConsr;
import com.pcloud.book.copyright.biz.BookAuthInfoBiz;
import com.pcloud.book.copyright.vo.BookAuthInfoVO;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.mq.producer.BookMQProducer;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.AgentTypeEnum;
import com.pcloud.common.core.constant.SystemCode;
......@@ -82,6 +64,28 @@ import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.Optional;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
* @描述:书籍业务层接口实现类
* @作者:songx
......@@ -1193,7 +1197,7 @@ public class BookBizImpl implements BookBiz {
if (ListUtils.isEmpty(adviserIds)) {
throw new BookBizException(BookBizException.ERROR, "您还没有图书!");
}
EXECUTOR_SERVICE.execute(new Runnable() {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(new Runnable() {
public void run() {
Date sendDate = new Date();
try {
......@@ -1419,6 +1423,8 @@ public class BookBizImpl implements BookBiz {
book.setLastModifiedUser(book.getCreatedUser());
book.setBookId(bookDto.getBookId());
}
// 查看现代纸书是否存在
final BookGroupDTO dtoByBookId = bookGroupBiz.getDTOByBookId(book.getBookId(), book.getChannelId(), book.getCreatedUser());
// 新增图书与编辑关联关系
createBookAdviserRelation(book);
/*BookGroup bookGroup = null;
......@@ -1450,6 +1456,7 @@ public class BookBizImpl implements BookBiz {
bookGroupBiz.linkBookGroup(book.getBookId(), book.getBookGroupId(), book.getCreatedUser());
}
LOGGER.info("【书籍基础】创建书籍基础信息,<END>");
bookDto.setIsDelete(null == dtoByBookId ? 1 : dtoByBookId.getIsDelete() ? 1 : 0);
return bookDto;
}
......
......@@ -21,6 +21,8 @@ import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.util.CollectionUtils;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
......@@ -1318,6 +1320,9 @@ public class BookSet {
bookIdsMap.put(bookDto.getBookId(), bookDto.getBookId());
}
List<Long> bookIds = Lists.newArrayList(bookIdsMap.values());
if (CollectionUtils.isEmpty(bookIds)) {
return;
}
// 设置基金冻结状态
Map<Long, BookFreezeDto> freezeStatus = bookFreezeDao.getFreezeStatus(bookIds);
for (Object object : bookList) {
......
......@@ -3,19 +3,20 @@
*/
package com.pcloud.book.consumer.raystask;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.biz.WeektaskQueueBiz;
import com.pcloud.common.core.constant.WeektaskBehaviorCode;
import com.pcloud.common.core.constant.WeektaskCode;
import com.pcloud.common.core.dto.WeektaskMessageDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.raystask.entity.AdviserDefault;
import com.pcloud.raystask.task.service.MainLineService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.raystask.entity.AdviserDefault;
import com.pcloud.raystask.task.service.MainLineService;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
......@@ -33,8 +34,7 @@ public class MainLineConsr {
*/
private static final Logger LOGGER = LoggerFactory.getLogger(MainLineConsr.class);
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
@Autowired
private MainLineService mainLineService;
@Autowired
......@@ -61,7 +61,7 @@ public class MainLineConsr {
* 编辑标识
*/
public void sendAddBookTask(Long bookId, Long adviserId) {
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
// 一本书刊
WeektaskMessageDto weektaskMessageDto = new WeektaskMessageDto();
weektaskMessageDto.setWeektaskCode(WeektaskCode.W_ADD_ONE_BOOK);
......@@ -81,7 +81,7 @@ public class MainLineConsr {
* 编辑标识
*/
public void sendAddBookGroupTask(Long bookId, Long adviserId) {
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> {
// 一本书刊
WeektaskMessageDto weektaskMessageDto = new WeektaskMessageDto();
weektaskMessageDto.setWeektaskCode(WeektaskCode.W6_CREATE_BOOK_GROUP);
......
......@@ -26,6 +26,7 @@ import com.pcloud.book.copyright.vo.CheckCodeParam;
import com.pcloud.book.copyright.vo.CheckIsAuthServeParam;
import com.pcloud.book.copyright.vo.FileVO;
import com.pcloud.book.copyright.vo.ImportRecordVO;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.MessageBiz;
import com.pcloud.common.core.constant.SystemCode;
......@@ -43,6 +44,8 @@ import com.pcloud.common.utils.json.JSONUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.readercenter.wechat.entity.WechatUser;
import com.pcloud.resourcecenter.base.exceptions.ResBizException;
import com.pcloud.resourcecenter.product.dto.ProductFreeCodeDto;
import com.pcloud.resourcecenter.product.entity.ProductFreeCode;
import com.pcloud.settlementcenter.record.exceptions.RecordException;
import org.apache.commons.lang3.StringUtils;
......@@ -208,7 +211,7 @@ public class BookAuthCodeBizImpl implements BookAuthCodeBiz {
bookAuthCodeImportRecord.setFileName(fileVO.getFileName());
bookAuthCodeImportRecord.setFileUrl(fileVO.getFileUrl());
bookAuthCodeImportRecordDao.insert(bookAuthCodeImportRecord);
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
Integer isFinish = 1;
try {
String[][] data = ExcelUtil.getData(fileVO.getFileUrl(), 3);
......
......@@ -34,6 +34,7 @@ import com.pcloud.book.copyright.vo.ServeVO;
import com.pcloud.book.copyright.vo.SetAuthOpenParam;
import com.pcloud.book.copyright.vo.SetAuthStatusParam;
import com.pcloud.book.copyright.vo.SetLocationDescVO;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.MessageBiz;
......@@ -102,7 +103,6 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
@Autowired
private PartyConsr partyConsr;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(2);
@Override
@Transactional(rollbackFor = Exception.class)
public void setBookAuthOpen(SetAuthOpenParam setAuthOpenParam, Long adviserId) {
......@@ -148,7 +148,7 @@ public class BookAuthInfoBizImpl implements BookAuthInfoBiz {
@ParamLog("异步导出")
private void asynExport(Long bookId, Long channelId, Long adviserId, Integer codeCount, Integer isHaveBarCode) {
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
String commitTime = DateUtils.formatDate(new Date());
String num = "";
try {
......
......@@ -13,6 +13,7 @@ import com.pcloud.book.copyright.vo.BookClickBuyRecordParam;
import com.pcloud.book.copyright.vo.ProvinceTop10VO;
import com.pcloud.book.copyright.vo.SixMonthCountVO;
import com.pcloud.book.copyright.vo.ThirtyDayCountVO;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
......@@ -43,7 +44,6 @@ public class BookAuthUserBizImpl implements BookAuthUserBiz {
@Autowired
private BookClickBuyRecordDao bookClickBuyRecordDao;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(4);
@ParamLog(value = "获取授权用户数量")
@Override
......@@ -155,7 +155,7 @@ public class BookAuthUserBizImpl implements BookAuthUserBiz {
@Override
@ParamLog("新增点击购买链接记录")
public void insertClickBuyRecord(BookClickBuyRecordParam bookClickBuyRecordParam, Long channelId, Long wechatUserId) {
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.OTHER_THREAD_POOL.execute(() -> {
try {
BookClickBuyRecord bookClickBuyRecord = new BookClickBuyRecord();
bookClickBuyRecord.setChannelId(channelId);
......
......@@ -43,7 +43,7 @@ public class SetAuthOpenParam implements Serializable {
@ApiModelProperty("服务")
private List<ServeVO> serves;
@ApiModelProperty("是否包含条形码")
@ApiModelProperty("是否包含条形码 C1001121 添加二维码,故该字段2为二维码")
private Integer isHaveBarCode;
public List<ServeVO> getServes() {
......
......@@ -6,6 +6,7 @@ import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.ClassifyKeywordDTO;
import com.pcloud.book.group.dto.QrcodeNameAndProIdDTO;
import com.pcloud.book.group.entity.BookGroup;
import com.pcloud.book.group.vo.ListBookGroup4ChannelParamVO;
import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBean;
......@@ -21,6 +22,15 @@ import java.util.Map;
*/
public interface BookGroupBiz {
/**
* 查询编辑是否有此社群书
* @param bookId
* @param channelId
* @param adviserId
* @return
*/
BookGroupDTO getDTOByBookId(Long bookId, Long channelId, Long adviserId);
/**
* 创建社群书时生成群二维码
* @param bookId 书刊ID
......
......@@ -33,6 +33,7 @@ import com.pcloud.book.group.vo.StatisticVO;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.enums.ReplyTypeEnum;
import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.biz.MessageBiz;
......@@ -99,7 +100,6 @@ public class BookGroupBizImpl implements BookGroupBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(BookGroupBizImpl.class);
private final static String DEFAULT_PRODUCT_COVER_IMG = "https://oss.5rs.me/oss/uploadfe/png/1c5da08d2c9598a5f0b0252acb84d8b8.png";
private static final ExecutorService EXECUTOR_SINGLE_SERVICE = Executors.newSingleThreadExecutor();
@Value("${book.group.qrcode.domain}")
private String bookGroupQrcodeDomain;
......@@ -156,6 +156,11 @@ public class BookGroupBizImpl implements BookGroupBiz {
private AppPriceCacheService appPriceCacheService;
@Override
public BookGroupDTO getDTOByBookId(Long bookId, Long channelId, Long adviserId) {
return bookGroupDao.getDTOByBookId(bookId, channelId, adviserId);
}
/**
* 创建社群书时生成群二维码
*/
......@@ -172,7 +177,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
bookGroup.setIsShowBookName(isShowBookName);
}
if (addType != null && addType == 1) {
GroupQrcodeVO groupQrcodeVO = null;
GroupQrcodeVO groupQrcodeVO;
if (sceneId != null) {
//将图书下某个二维码替换成社群码
groupQrcodeVO = qrcodeSceneConsr.setQrcodeToGroup(sceneId);
......@@ -287,6 +292,35 @@ public class BookGroupBizImpl implements BookGroupBiz {
bookGroupDTO.setChannelId(channelId);
bookGroupDTO.setGroupQrcodeUrl(bookGroup.getGroupQrcodeUrl());
bookGroupDTO.setCreateUser(adviserId);
} else {
// 当书籍存在时根据前端传的addType来决定用什么码替换addType=1公众号码,其他为自建码
BookGroup group = new BookGroup();
group.setId(bookGroupDTO.getId());
// 更新为微信码
if (addType != null && addType == 1) {
//创建公众号二维码
GroupQrcodeVO groupQrcodeVO = qrcodeSceneConsr.createWxGroupQrcode(bookId, channelId, adviserId);
if (groupQrcodeVO == null) {
throw new BookBizException(BookBizException.ERROR, "二维码生成失败!");
}
group.setSceneId(groupQrcodeVO.getSceneId());
group.setGroupQrcodeUrl(groupQrcodeVO.getQrcodeUrl());
bookGroupDao.update(group);
}
// 更新为自建码
if (addType != null && addType == 2) {
// 如果是恢复书籍,且选择自建码则清空sceneId
if (null != bookGroupDTO.getSceneId() && bookGroupDTO.getSceneId() > 0) {
group.setSceneId(0L);
final Boolean haveQrcode = this.isHaveQrcode(bookId, channelId, adviserId);
// 如果之前是公众号二维码则要重新生成自有码
if (!haveQrcode) {
String groupQrcodeUrl = QrcodeUtils.createWithMargin(bookGroupQrcodeDomain + "/" + bookGroupDTO.getId(), 1);
group.setGroupQrcodeUrl(groupQrcodeUrl);
}
bookGroupDao.update(group);
}
}
}
List<Long> labelIds = new ArrayList<>();
if (null != bookGroupDTO.getProLabelId()) {
......@@ -554,11 +588,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
@Override
public Boolean isHaveQrcode(Long bookId, Long channelId, Long adviserId) {
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOByBookId(bookId, channelId, adviserId);
if (bookGroupDTO == null) {
return false;
} else {
return true;
}
return bookGroupDTO != null && null == bookGroupDTO.getSceneId();
}
@ParamLog("获取应用统计")
......@@ -860,7 +890,7 @@ public class BookGroupBizImpl implements BookGroupBiz {
}
@Override
public void exportGroupQrcode4Adviser(Map<String, Object> paramMap, Long adviserId) {
EXECUTOR_SINGLE_SERVICE.execute(() -> {
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
// 生成文件名
String fileName = "社群码导出_" + DateUtils.getShortDateStr();
Boolean isSuccess = true;
......
......@@ -28,6 +28,7 @@ import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.*;
import com.pcloud.book.keywords.dao.BookKeywordDao;
import com.pcloud.book.keywords.entity.BookKeyword;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.core.enums.NotifyOriginTypeEnum;
......@@ -63,8 +64,6 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
import lombok.extern.slf4j.Slf4j;
......@@ -78,7 +77,6 @@ import lombok.extern.slf4j.Slf4j;
public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
private static final Logger LOGGER = LoggerFactory.getLogger(BookGroupClassifyBizImpl.class);
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
@Autowired
private WeixinQrcodeBiz weixinQrcodeBiz;
......@@ -608,7 +606,7 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
@Override
@ParamLog("单个群统计导出")
public void bookGroupQrcodeStatisticExport(List<Long> classifyIds, Long bookGroupId, Long adviserId) {
EXECUTOR_SERVICE.execute(() -> {
ThreadPoolUtils.EXPORT_THREAD_POOL.execute(() -> {
try {
BookGroupDTO bookGroupInfo = bookGroupBiz.getBookGroupInfo(bookGroupId);
if (bookGroupInfo == null) {
......@@ -642,7 +640,9 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
@Override
public Map<String, GroupQrcodeBaseDTO> listGroupQrcodeBaseInfo(List<String> weixinGroupIds) {
if (ListUtils.isEmpty(weixinGroupIds)) return null;
if (ListUtils.isEmpty(weixinGroupIds)) {
return null;
}
return bookGroupClassifyDao.listGroupQrcodeBaseInfo(weixinGroupIds);
}
......@@ -683,7 +683,9 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
@ParamLog(value = "导出数据")
private void exportData(List<BookGroupQrcodeStatisticVO> groupQrcodeStatistics, Date sendDate, Long adviserId, String bookGroupName) {
if (ListUtils.isEmpty(groupQrcodeStatistics)) return;
if (ListUtils.isEmpty(groupQrcodeStatistics)) {
return;
}
List<Object[]> dataList = new ArrayList<Object[]>();
for (int i = 0, size = groupQrcodeStatistics.size(); i < size; i++) {
BookGroupQrcodeStatisticVO bookGroupQrcodeStatisticVO = groupQrcodeStatistics.get(i);
......@@ -783,7 +785,9 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
@ParamLog("设置用户头像")
private void setUserHeader(List<ListClassify4WechatVO> listClassify4WechatVOS) {
if (ListUtils.isEmpty(listClassify4WechatVOS)) return;
if (ListUtils.isEmpty(listClassify4WechatVOS)) {
return;
}
List<WechatUserRobotDto> wechatUserRand = readerConsr.selectRobotsRandom(listClassify4WechatVOS.size() * 9);
if (ListUtils.isEmpty(wechatUserRand)) {
return;
......@@ -807,14 +811,18 @@ public class BookGroupClassifyBizImpl implements BookGroupClassifyBiz {
* @Date:2019/4/29 14:37
*/
private void setGroupQrcodeInfo(List<ListClassify4WechatVO> listClassify4Wechats) {
if (ListUtils.isEmpty(listClassify4Wechats)) return;
if (ListUtils.isEmpty(listClassify4Wechats)) {
return;
}
List<Long> groupQrcodeIds = new ArrayList<>();
for (ListClassify4WechatVO listClassify4WechatVO : listClassify4Wechats) {
groupQrcodeIds.add(listClassify4WechatVO.getGroupQrcodeId());
}
//根据二维码获取二维码基本信息
Map<Long, GroupQrcodeInfoDTO> groupQrcodeMap = groupQrcodeBiz.listQrcodeInfoByIds(groupQrcodeIds);
if (MapUtils.isEmpty(groupQrcodeMap)) return;
if (MapUtils.isEmpty(groupQrcodeMap)) {
return;
}
for (ListClassify4WechatVO listClassify4WechatVO : listClassify4Wechats) {
GroupQrcodeInfoDTO groupQrcodeInfoDTO = groupQrcodeMap.get(listClassify4WechatVO.getGroupQrcodeId());
if (groupQrcodeInfoDTO != null) {
......
......@@ -37,6 +37,7 @@ import com.pcloud.book.keywords.dto.KeywordUserCountDTO;
import com.pcloud.book.mq.producer.BookMQProducer;
import com.pcloud.book.push.dao.PushGroupDao;
import com.pcloud.book.push.entity.PushGroup;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam;
......@@ -419,7 +420,7 @@ public class GroupQrcodeBizImpl implements GroupQrcodeBiz {
groupQrcode.setGroupName(groupName);
groupQrcode.setClassifyId(classifyId);
this.insert(groupQrcode);
EXECUTOR_SERVICE.execute(()->{
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(()->{
//获取该社群书下是否有群公告
ClassifyVO classifyVO = bookGroupClassifyBiz.getClassify(classifyId);
groupAnnouncementBiz.setAnForGroup(classifyVO.getBookGroupId(), classifyId, oneQrcode.getWeixinGroupId());
......
......@@ -30,6 +30,11 @@ public class BookGroupDTO extends BaseDto {
private Long channelId;
/**
* book_group.channel_id (运营ID)
*/
private Long sceneId;
/**
* book_group.group_qrcode_url (群二维码图片)
*/
private String groupQrcodeUrl;
......@@ -185,6 +190,13 @@ public class BookGroupDTO extends BaseDto {
this.groupQrcodeName = groupQrcodeName;
}
public Long getSceneId() {
return sceneId;
}
public void setSceneId(Long sceneId) {
this.sceneId = sceneId;
}
public Long getProLabelId() {
return proLabelId;
}
......@@ -353,6 +365,7 @@ public class BookGroupDTO extends BaseDto {
"id=" + id +
", bookId=" + bookId +
", channelId=" + channelId +
", sceneId=" + sceneId +
", groupQrcodeUrl='" + groupQrcodeUrl + '\'' +
", groupQrcodeName='" + groupQrcodeName + '\'' +
", proLabelId=" + proLabelId +
......
......@@ -29,6 +29,7 @@ import com.pcloud.book.push.entity.*;
import com.pcloud.book.push.enums.ItemTypeEnum;
import com.pcloud.book.push.enums.PushStatusEnum;
import com.pcloud.book.push.enums.PushTypeEnum;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew;
......@@ -112,9 +113,6 @@ public class PushBizImpl implements PushBiz {
private static final String EVENING_NEWS_SCHEDULE="EVENING_NEWS_SCHEDULE";
private static final ThreadFactory NAMED_THREAD_FACTORY = new ThreadFactoryBuilder().setNameFormat("pushBizImpl-pool-%d").build();
private static final ExecutorService EXECUTOR_SERVICE = new ThreadPoolExecutor(5, 20, 0L, TimeUnit.MILLISECONDS,
new LinkedBlockingQueue<>(1024), NAMED_THREAD_FACTORY, new ThreadPoolExecutor.CallerRunsPolicy());
@Transactional(rollbackFor = Exception.class)
@ParamLog("创建群发")
......@@ -134,7 +132,7 @@ public class PushBizImpl implements PushBiz {
//插入群发消息项
pushItemDao.batchInsert(push.getPushItems());
//遍历,如果含有超级作者作品,自动上架
EXECUTOR_SERVICE.execute(() -> itemProductAutoOnShelves(push.getPushGroups(), push.getPushItems()));
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> itemProductAutoOnShelves(push.getPushGroups(), push.getPushItems()));
//设置定时任务
pushQuartz(push);
}
......
......@@ -2,6 +2,7 @@ package com.pcloud.book.push.service.impl;
import com.pcloud.book.push.biz.PushBiz;
import com.pcloud.book.push.service.PushService;
import com.pcloud.book.util.common.ThreadPoolUtils;
import com.pcloud.common.exceptions.BizException;
import io.swagger.annotations.ApiOperation;
import org.slf4j.Logger;
......@@ -24,7 +25,6 @@ public class PushServiceImpl implements PushService {
private static final Logger LOGGER = LoggerFactory.getLogger(PushServiceImpl.class);
private static final ExecutorService EXECUTOR_SINGLE_SERVICE = Executors.newSingleThreadExecutor();
@Autowired
private PushBiz pushBiz;
......@@ -44,6 +44,6 @@ public class PushServiceImpl implements PushService {
public void sendMorningEveningNews(@RequestBody Map<String, Object> map) throws BizException {
LOGGER.info("内部接口发送早晚报被调用" + map.toString());
//开线程跑,及时给定时任务返回,避免超时重复调用
EXECUTOR_SINGLE_SERVICE.execute(() -> pushBiz.sendMorningEveningNews(new Long(map.get("partyId").toString())));
ThreadPoolUtils.SEND_MESSAGE_THREAD_POOL.execute(() -> pushBiz.sendMorningEveningNews(new Long(map.get("partyId").toString())));
}
}
......@@ -258,7 +258,7 @@
ORIGIN_NAME,BOOK_PRICE,ISSN,SERIAL_NUMBER,
SPONSOR, ORGANIZER, CN, RELEASE_CYCLE, BOOK_NUM,
PROGRAMA, MAIL_CODE, ADDRESS, TELEPHONE, MAIL, PURPOSE,
VERSION
VERSION, IS_DELETE
FROM
BOOK
WHERE
......
......@@ -14,6 +14,7 @@
<result column="join_slogan" property="joinSlogan" jdbcType="VARCHAR"/>
<result column="personal_qrcode_url" property="personalQrcodeUrl" jdbcType="VARCHAR"/>
<result column="product_id" property="productId" jdbcType="BIGINT"/>
<result column="scene_id" property="sceneId" jdbcType="BIGINT"/>
<result column="create_user" property="createUser" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
......@@ -34,6 +35,7 @@
<result column="join_slogan" property="joinSlogan" jdbcType="VARCHAR"/>
<result column="personal_qrcode_url" property="personalQrcodeUrl" jdbcType="VARCHAR"/>
<result column="product_id" property="productId" jdbcType="BIGINT"/>
<result column="scene_id" property="sceneId" jdbcType="BIGINT"/>
<result column="create_user" property="createUser" jdbcType="BIGINT"/>
<result column="create_time" property="createTime" jdbcType="TIMESTAMP"/>
<result column="update_time" property="updateTime" jdbcType="TIMESTAMP"/>
......@@ -46,8 +48,9 @@
</resultMap>
<sql id="Base_Column_List">
id, book_id, channel_id, group_qrcode_url, group_qrcode_name, pro_label_id, dep_label_id,
pur_label_id, join_title, join_slogan, personal_qrcode_url, product_id, create_user, create_time,
id, book_id, channel_id, scene_id, group_qrcode_url, group_qrcode_name, pro_label_id, dep_label_id,
pur_label_id, join_title, join_slogan, personal_qrcode_url, product_id, create_user,
create_time,
update_time, is_delete, is_show_book_name
</sql>
......@@ -214,7 +217,13 @@
<if test="productId != null">
product_id = #{productId,jdbcType=BIGINT},
</if>
update_time = NOW(),
<if test="sceneId != null and sceneId == 0">
scene_id = null,
</if>
<if test="sceneId != null and sceneId != 0">
scene_id = #{sceneId},
</if>
update_time = NOW(),
</set>
where id = #{id,jdbcType=BIGINT}
</update>
......
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