Commit a92ab2d2 by lili

合并

parents edc82ff7 3b668d13
......@@ -130,6 +130,12 @@ public class BookAppealDto extends BaseEntity{
* 运营名称
*/
private String channelName;
/**
* 是否社群书
*/
private Boolean isBookGroup;
public Long getBookAppealId() {
return bookAppealId;
}
......@@ -307,6 +313,14 @@ public class BookAppealDto extends BaseEntity{
this.channelName = channelName;
}
public Boolean getIsBookGroup() {
return isBookGroup;
}
public void setIsBookGroup(Boolean isBookGroup) {
this.isBookGroup = isBookGroup;
}
@Override
public String toString() {
return "BookAppealDto{" +
......@@ -332,6 +346,7 @@ public class BookAppealDto extends BaseEntity{
", templetId=" + templetId +
", haveDiffChannel=" + haveDiffChannel +
", channelName='" + channelName + '\'' +
", isBookGroup=" + isBookGroup +
'}';
}
}
......@@ -100,6 +100,11 @@ public class BookAppeal extends BaseEntity{
* 被诉方
*/
private List<BookDefendant> defendant;
/**
* 是否社群书
*/
private Boolean isBookGroup;
public Long getBookAppealId() {
return bookAppealId;
......@@ -230,14 +235,22 @@ public class BookAppeal extends BaseEntity{
this.templetId = templetId;
}
@Override
public Boolean getIsBookGroup() {
return isBookGroup;
}
public void setIsBookGroup(Boolean isBookGroup) {
this.isBookGroup = isBookGroup;
}
@Override
public String toString() {
return "BookAppeal [bookAppealId=" + bookAppealId + ", bookId=" + bookId + ", channelId=" + channelId
+ ", templetId=" + templetId + ", reason=" + reason + ", declarant=" + declarant + ", phone=" + phone
+ ", appealSubmitDate=" + appealSubmitDate + ", appealState=" + appealState + ", auditReason="
+ auditReason + ", auditUser=" + auditUser + ", createdUser=" + createdUser + ", createdDate="
+ createdDate + ", lastModifiedUser=" + lastModifiedUser + ", lastModifiedDate=" + lastModifiedDate
+ ", defendant=" + defendant + "]";
+ ", defendant=" + defendant + ", isBookGroup=" + isBookGroup + "]";
}
}
......@@ -24,6 +24,11 @@ public class CountDto extends BaseDto {
*/
private Integer count = 0;
/**
* 社群书数量
*/
private Integer bookGroupCount = 0;
public Integer getCount() {
return count;
}
......@@ -32,9 +37,19 @@ public class CountDto extends BaseDto {
this.count = count;
}
@Override
public String toString() {
return "CountDto [count=" + count + "]";
}
public Integer getBookGroupCount() {
return bookGroupCount;
}
public void setBookGroupCount(Integer bookGroupCount) {
this.bookGroupCount = bookGroupCount;
}
@Override
public String toString() {
return "CountDto{" +
"count=" + count +
", bookGroupCount=" + bookGroupCount +
"} ";
}
}
......@@ -446,6 +446,11 @@ public class BookDto extends BaseDto {
* 社群码数据
*/
/**
* 是否是社群书
*/
private Boolean isBookGroup;
/**
* 社群码ID
*/
private Long bookGroupId;
......@@ -1259,6 +1264,13 @@ public class BookDto extends BaseDto {
this.secondTypeCode = secondTypeCode;
}
public Boolean getIsBookGroup() {
return isBookGroup;
}
public void setIsBookGroup(Boolean isBookGroup) {
this.isBookGroup = isBookGroup;
}
@Override
public String toString() {
return "BookDto{" +
......@@ -1354,6 +1366,7 @@ public class BookDto extends BaseDto {
", groupPersonCount=" + groupPersonCount +
", groupCount=" + groupCount +
", totalIncome=" + totalIncome +
", isBookGroup=" + isBookGroup +
", groupQrcodeLink='" + groupQrcodeLink + '\'' +
", secondTempletId=" + secondTempletId +
", secondTypeCode='" + secondTypeCode + '\'' +
......
......@@ -5,31 +5,27 @@ import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.pcloud.book.appeal.dao.BookAppealResultDao;
import com.pcloud.book.appeal.entity.BookAppealResult;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.group.biz.BookGroupBiz;
import com.pcloud.common.utils.DateUtils;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import com.alibaba.druid.util.StringUtils;
import com.pcloud.book.appeal.biz.BookAppealBiz;
import com.pcloud.book.appeal.dao.BookAppealDao;
import com.pcloud.book.appeal.dao.BookAppealResultDao;
import com.pcloud.book.appeal.dao.BookDefendantDao;
import com.pcloud.book.appeal.dto.AppealAdviserDto;
import com.pcloud.book.appeal.dto.BookAppealResultDto;
import com.pcloud.book.appeal.dto.BookAppealDto;
import com.pcloud.book.appeal.dto.BookAppealResultDto;
import com.pcloud.book.appeal.entity.BookAppeal;
import com.pcloud.book.appeal.entity.BookAppealResult;
import com.pcloud.book.base.enums.AppealStateEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.BookAdviserBiz;
import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.book.dao.BookAdviserDao;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookDto;
......@@ -41,632 +37,607 @@ import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.message.TemplateConsr;
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.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType;
import com.pcloud.common.core.constant.SystemCode;
import com.pcloud.common.page.PageBean;
import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
/**
* 书刊申诉业务处理实现类
*
* @version 1.0
* @author:lili
* @date 创建时间:2017年3月30日 下午3:51:19
* @version 1.0
* @return
*/
@Component("bookAppealBiz")
public class BookAppealBizImpl implements BookAppealBiz {
/**
*
*/
private static final Logger LOGGER = LoggerFactory.getLogger(BookAppealBizImpl.class);
/**
*
*/
private static final Logger LOGGER = LoggerFactory.getLogger(BookAppealBizImpl.class);
@Autowired
private BookAppealDao bookAppealDao;
@Autowired
private BookAppealDao bookAppealDao;
@Autowired
private BookSet bookSet;
@Autowired
private BookSet bookSet;
@Autowired
private TemplateConsr templateConsr;
@Autowired
private TemplateConsr templateConsr;
@Autowired
private BookAdviserBiz bookAdviserBiz;
@Autowired
private BookAdviserBiz bookAdviserBiz;
@Autowired
private BookcaseConsr bookcaseConsr;
@Autowired
private BookcaseConsr bookcaseConsr;
@Autowired
private BookBiz bookBiz;
@Autowired
private BookBiz bookBiz;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private AdviserConsr adviserConsr;
@Autowired
private BookAdviserDao bookAdviserDao;
@Autowired
private BookAdviserDao bookAdviserDao;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private QrcodeSceneConsr qrcodeSceneConsr;
@Autowired
private BookDefendantDao bookDefendantDao;
@Autowired
private BookDefendantDao bookDefendantDao;
@Autowired
private BookAppealResultDao bookAppealResultDao;
@Autowired
private BookAppealResultDao bookAppealResultDao;
@Autowired
private ChannelConsr channelConsr;
@Autowired
private ChannelConsr channelConsr;
@Autowired
@Autowired
private BookGroupBiz bookGroupBiz;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
/**
* 书刊申诉
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void create(BookAppeal bookAppeal) {
LOGGER.info("【书籍申诉-编辑】创建书籍申诉信息,<START>.");
this.checkParam(bookAppeal);
// 设置申诉时间
bookAppeal.setAppealSubmitDate(new Date());
bookAppeal.setAppealState(AppealStateEnum.APPEAL_STATE_WAIT.value);
bookAppealDao.insert(bookAppeal);
}
/**
* 书刊列表
*/
@Override
public PageBean list(PageParam pageParam, String bookName, Integer appealState) {
LOGGER.info("【书籍申诉-平台】获取书籍申诉列表,<START>.");
Map<String, Object> paramMap = new HashMap<>();
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()))
return new PageBean();
// 设置编辑名称
bookSet.setAdviserName(pageBean.getRecordList());
return pageBean;
}
/**
* 获取书刊详情
*/
@Override
public BookAppealDto getById(Long bookAppealId) {
LOGGER.info("【书籍申诉-平台】获取书籍申诉详情,<START>.[bookAppealId]" + bookAppealId);
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
if (bookAppealDto != null) {
// 获取书籍信息
BookDto book = bookBiz.getBaseById(bookAppealDto.getBookId());
bookAppealDto.setBook(book);
// 设置申诉方以及被诉方基本信息
bookSet.setAdviserInfo(bookAppealDto);
}
return bookAppealDto;
}
/**
* 书刊申诉审核
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void setupAudit(BookAppeal bookAppeal) {
LOGGER.info("【书籍申诉-审核-平台】审核书籍申诉,<START>.参数:[bookAppeal]" + bookAppeal.toString());
if (bookAppeal.getAppealState() == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "审核状态为空");
}
// 获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppeal.getBookAppealId());
// 获取图书详情
BookDto bookDto = bookBiz.getBaseById(bookAppealDto.getBookId());
bookAppealDao.update(bookAppeal);
//获取所有被诉编辑
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookAppealDto.getBookId());
//审核通过
if (AppealStateEnum.APPEAL_STATE_PASS.value.equals(bookAppeal.getAppealState())) {
setOnlyOneAdviser(bookAppealDto.getBookId(), bookAppealDto.getDeclarant(), bookAppealDto.getChannelId(), bookAppealDto.getTempletId(), adviserBooks);
}
// 设置被诉方
List<BookDefendant> defendants = bookSet.setDefendant(adviserBooks, bookAppeal.getBookAppealId());
// 添加被诉方
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());
}
}
});
}
/**
* 设置申诉结果
* @param bookId 图书标识
* @param bookApprealId 图书申诉标识
*/
@Transactional(rollbackFor = Exception.class)
void insertBookAppealResult(Long bookId, Long bookApprealId){
LOGGER.info("设置申诉结果bookId="+bookId+"bookApprealId="+bookApprealId);
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookId);
if(ListUtils.isEmpty(adviserBooks)){
return;
}
List<BookAppealResult> bookAppealResults = new ArrayList<>();
for (BookAdviserDto bookAdviserDto : adviserBooks){
BookAppealResult bookAppealResult = new BookAppealResult();
bookAppealResult.setAdviserId(bookAdviserDto.getAdviserId());
bookAppealResult.setChannelId(bookAdviserDto.getChannelId());
bookAppealResult.setBookId(bookAdviserDto.getBookId());
bookAppealResult.setIsMainEditor(bookAdviserDto.getIsMainEditor());
bookAppealResult.setBookCreatedDate(bookAdviserDto.getCreatedDate());
bookAppealResult.setBookAppealId(bookApprealId);
bookAppealResults.add(bookAppealResult);
}
bookAppealResultDao.insert(bookAppealResults);
LOGGER.info("设置申诉结果【END】");
}
/**
* 发送申诉审核通过的模板消息
*
* @param bookName 图书名称
* @param adviserBooks 被诉方
* @param declarant 申诉方
*/
void sendAuditSuccessTemplate(String bookName, List<BookAdviserDto> adviserBooks, Long declarant, Long channelId) {
if (!ListUtils.isEmpty(adviserBooks)) {
//给被诉方发送图书被移除的通知
for (BookAdviserDto bookAdviserDto : adviserBooks) {
removeBookTemplate(bookName, bookAdviserDto.getAdviserId(), bookAdviserDto.getChannelId());
}
//给申诉方发送申诉成功的通知
sendAppealSuccessToMainTemplate(bookName, declarant, channelId);
}
}
/**
* 参数验证
*
* @param bookAppeal
*/
private void checkParam(BookAppeal bookAppeal) {
if (null == bookAppeal.getBookId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉书籍为空");
}
if (StringUtil.isEmpty(bookAppeal.getReason())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉理由为空");
}
if (StringUtil.isEmpty(bookAppeal.getPhone())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "联系方式为空");
}
}
/**
* 获取申诉+被诉编辑
*/
@Override
public List<AppealAdviserDto> getAppealAdvisers(Long bookAppealId) {
LOGGER.info("【书籍申诉-平台】获取申诉+被诉编辑,<START>.[bookAppealId]" + bookAppealId);
// 获取申诉方信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
List<AppealAdviserDto> appealAdviserList = new ArrayList<AppealAdviserDto>();
// 获取被诉方信息(即与该书关联的所有编辑)
List<BookAdviserDto> defendantAdvisers = bookAdviserDao.getAdvisers(bookAppealDto.getBookId());
// 设置申诉和被诉方列表信息
bookSet.setAppealAdviserList(appealAdviserList, bookAppealDto, defendantAdvisers);
return appealAdviserList;
}
/**
* 设置主编辑(共同拥有)
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void setMainAdviser(Long auditUser, BookMainAdviserDto bookMainAdviserDto) {
LOGGER.info("【书籍申诉-平台】设置主编辑,<START>.[bookMainAdviserDto]" + bookMainAdviserDto.toString());
// 获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookMainAdviserDto.getBookAppealId());
Long bookId = bookMainAdviserDto.getBookId();
Long channelId = bookAppealDto.getChannelId();
Long appealAdviserId = bookAppealDto.getDeclarant();
//获取加入过该书的所有编辑
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookId);
//申诉后的主编辑
Long mainAdviserId = null;
Boolean isOnlyOneAdviser = bookMainAdviserDto.getBookAdviserList().size()==1;
if (isOnlyOneAdviser){//唯一拥有
setOnlyOneAdviser(bookId, appealAdviserId, bookAppealDto.getChannelId(), bookAppealDto.getTempletId(), adviserBooks);
mainAdviserId = bookMainAdviserDto.getBookAdviserList().get(0).getAdviserId();
}else{
for (BookAdviser bookAdviser : bookMainAdviserDto.getBookAdviserList()) {
bookAdviser.setCreatedUser(bookAdviser.getAdviserId());
if (bookAdviser.getIsMainEditor()){
//删除书架上书籍
EXECUTOR_SERVICE.execute(()->{
bookcaseConsr.changeBookAdviser(bookAdviser.getAdviserId(), bookAdviser.getChannelId(), bookAdviser.getBookId());
});
mainAdviserId = bookAdviser.getAdviserId();
}
// 若为申诉编辑,设置申诉编辑图书类型
if (bookAdviser.getAdviserId().equals(appealAdviserId) && channelId.equals(bookAdviser.getChannelId())) {
bookAdviser.setTempletId(bookAppealDto.getTempletId());
}
}
// 批量修改图书编辑关联关系
bookAdviserDao.insert(bookMainAdviserDto.getBookAdviserList());
// 新增申诉编辑图书与二维码关联关系
EXECUTOR_SERVICE.execute(()-> {
recoverBookQrcodeAssoc(bookId, bookAppealDto.getChannelId(), appealAdviserId);
});
}
// 修改申诉状态
this.updateAppealState(auditUser, bookMainAdviserDto.getAppealState(), bookMainAdviserDto.getVersion(),
bookMainAdviserDto.getBookAppealId());
// 设置被诉方
List<BookDefendant> defendants = bookSet.setDefendant(adviserBooks, bookMainAdviserDto.getBookAppealId());
// 添加被诉方
bookDefendantDao.insert(defendants);
//新增申诉结果
insertBookAppealResult(bookAppealDto.getBookId(), bookAppealDto.getBookAppealId());
// 发送模板消息
sendAppealTemplate(isOnlyOneAdviser, appealAdviserId, adviserBooks, bookId, bookAppealDto.getChannelId(), mainAdviserId);
LOGGER.info("【书籍申诉-平台】设置主编辑,<END>.");
}
/**
* 设置申诉编辑唯一拥有
* @param bookId 图书标识
* @param declarant 申诉方
* @param channelId 运营标识
* @param templetId 模板标识
*/
public void setOnlyOneAdviser(Long bookId, Long declarant, Long channelId, Long templetId, List<BookAdviserDto> adviserBooks) {
//删除其余编辑与图书关联关系
bookAdviserBiz.deleteByBook(bookId);
EXECUTOR_SERVICE.execute(()->{
//批量删除书架书籍
adviserBooks.stream().forEach(
adviserBook->{
bookcaseConsr.deleteBookForAdviser(bookId, channelId, adviserBook.getAdviserId());
//删除与二维码关联关系
qrcodeSceneConsr.deleteBook(bookId, adviserBook.getChannelId(), adviserBook.getAdviserId());
// 删除社群码
bookGroupBiz.deleteByBookId(bookId, adviserBook.getChannelId(), adviserBook.getAdviserId());
}
);
});
//加上申诉编辑与图书关联关系
BookAdviser bookAdviser = new BookAdviser();
bookAdviser.setAdviserId(declarant);
bookAdviser.setChannelId(channelId);
bookAdviser.setBookId(bookId);
bookAdviser.setTempletId(templetId);
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
/**
* 书刊申诉
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void create(BookAppeal bookAppeal) {
LOGGER.info("【书籍申诉-编辑】创建书籍申诉信息,<START>.");
this.checkParam(bookAppeal);
// 设置申诉时间
bookAppeal.setAppealSubmitDate(new Date());
bookAppeal.setAppealState(AppealStateEnum.APPEAL_STATE_WAIT.value);
if (null == bookAppeal.getIsBookGroup()) {
bookAppeal.setIsBookGroup(false);
}
bookAppealDao.insert(bookAppeal);
}
/**
* 书刊列表
*/
@Override
public PageBean list(PageParam pageParam, String bookName, Integer appealState) {
LOGGER.info("【书籍申诉-平台】获取书籍申诉列表,<START>.");
Map<String, Object> paramMap = new HashMap<>();
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()))
return new PageBean();
// 设置编辑名称
bookSet.setAdviserName(pageBean.getRecordList());
return pageBean;
}
/**
* 获取书刊详情
*/
@Override
public BookAppealDto getById(Long bookAppealId) {
LOGGER.info("【书籍申诉-平台】获取书籍申诉详情,<START>.[bookAppealId]" + bookAppealId);
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
if (bookAppealDto != null) {
// 获取书籍信息
BookDto book = bookBiz.getBaseById(bookAppealDto.getBookId());
bookAppealDto.setBook(book);
// 设置申诉方以及被诉方基本信息
bookSet.setAdviserInfo(bookAppealDto);
}
return bookAppealDto;
}
/**
* 书刊申诉审核
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void setupAudit(BookAppeal bookAppeal) {
LOGGER.info("【书籍申诉-审核-平台】审核书籍申诉,<START>.参数:[bookAppeal]" + bookAppeal.toString());
if (bookAppeal.getAppealState() == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "审核状态为空");
}
// 获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppeal.getBookAppealId());
// 获取图书详情
BookDto bookDto = bookBiz.getBaseById(bookAppealDto.getBookId());
bookAppealDao.update(bookAppeal);
//获取所有被诉编辑
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookAppealDto.getBookId());
//审核通过
if (AppealStateEnum.APPEAL_STATE_PASS.value.equals(bookAppeal.getAppealState())) {
setOnlyOneAdviser(bookAppealDto.getBookId(), bookAppealDto.getDeclarant(), bookAppealDto.getChannelId(), bookAppealDto.getTempletId(), adviserBooks);
}
// 设置被诉方
List<BookDefendant> defendants = bookSet.setDefendant(adviserBooks, bookAppeal.getBookAppealId());
// 添加被诉方
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());
}
}
});
}
/**
* 设置申诉结果
* @param bookId 图书标识
* @param bookApprealId 图书申诉标识
*/
@Transactional(rollbackFor = Exception.class)
void insertBookAppealResult(Long bookId, Long bookApprealId) {
LOGGER.info("设置申诉结果bookId=" + bookId + "bookApprealId=" + bookApprealId);
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookId);
if (ListUtils.isEmpty(adviserBooks)) {
return;
}
List<BookAppealResult> bookAppealResults = new ArrayList<>();
for (BookAdviserDto bookAdviserDto : adviserBooks) {
BookAppealResult bookAppealResult = new BookAppealResult();
bookAppealResult.setAdviserId(bookAdviserDto.getAdviserId());
bookAppealResult.setChannelId(bookAdviserDto.getChannelId());
bookAppealResult.setBookId(bookAdviserDto.getBookId());
bookAppealResult.setIsMainEditor(bookAdviserDto.getIsMainEditor());
bookAppealResult.setBookCreatedDate(bookAdviserDto.getCreatedDate());
bookAppealResult.setBookAppealId(bookApprealId);
bookAppealResults.add(bookAppealResult);
}
bookAppealResultDao.insert(bookAppealResults);
LOGGER.info("设置申诉结果【END】");
}
/**
* 发送申诉审核通过的模板消息
* @param bookName 图书名称
* @param adviserBooks 被诉方
* @param declarant 申诉方
*/
void sendAuditSuccessTemplate(String bookName, List<BookAdviserDto> adviserBooks, Long declarant, Long channelId) {
if (!ListUtils.isEmpty(adviserBooks)) {
//给被诉方发送图书被移除的通知
for (BookAdviserDto bookAdviserDto : adviserBooks) {
removeBookTemplate(bookName, bookAdviserDto.getAdviserId(), bookAdviserDto.getChannelId());
}
//给申诉方发送申诉成功的通知
sendAppealSuccessToMainTemplate(bookName, declarant, channelId);
}
}
/**
* 参数验证
* @param bookAppeal
*/
private void checkParam(BookAppeal bookAppeal) {
if (null == bookAppeal.getBookId()) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉书籍为空");
}
if (StringUtil.isEmpty(bookAppeal.getReason())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉理由为空");
}
if (StringUtil.isEmpty(bookAppeal.getPhone())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "联系方式为空");
}
}
/**
* 获取申诉+被诉编辑
*/
@Override
public List<AppealAdviserDto> getAppealAdvisers(Long bookAppealId) {
LOGGER.info("【书籍申诉-平台】获取申诉+被诉编辑,<START>.[bookAppealId]" + bookAppealId);
// 获取申诉方信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
List<AppealAdviserDto> appealAdviserList = new ArrayList<AppealAdviserDto>();
// 获取被诉方信息(即与该书关联的所有编辑)
List<BookAdviserDto> defendantAdvisers = bookAdviserDao.getAdvisers(bookAppealDto.getBookId());
// 设置申诉和被诉方列表信息
bookSet.setAppealAdviserList(appealAdviserList, bookAppealDto, defendantAdvisers);
return appealAdviserList;
}
/**
* 设置主编辑(共同拥有)
*/
@Override
@Transactional(rollbackFor = Exception.class)
public void setMainAdviser(Long auditUser, BookMainAdviserDto bookMainAdviserDto) {
LOGGER.info("【书籍申诉-平台】设置主编辑,<START>.[bookMainAdviserDto]" + bookMainAdviserDto.toString());
// 获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookMainAdviserDto.getBookAppealId());
Long bookId = bookMainAdviserDto.getBookId();
Long channelId = bookAppealDto.getChannelId();
Long appealAdviserId = bookAppealDto.getDeclarant();
//获取加入过该书的所有编辑
List<BookAdviserDto> adviserBooks = bookAdviserDao.getAdvisers(bookId);
//申诉后的主编辑
Long mainAdviserId = null;
Boolean isOnlyOneAdviser = bookMainAdviserDto.getBookAdviserList().size() == 1;
if (isOnlyOneAdviser) {//唯一拥有
setOnlyOneAdviser(bookId, appealAdviserId, bookAppealDto.getChannelId(), bookAppealDto.getTempletId(), adviserBooks);
mainAdviserId = bookMainAdviserDto.getBookAdviserList().get(0).getAdviserId();
} else {
for (BookAdviser bookAdviser : bookMainAdviserDto.getBookAdviserList()) {
bookAdviser.setCreatedUser(bookAdviser.getAdviserId());
if (bookAdviser.getIsMainEditor()) {
//删除书架上书籍
EXECUTOR_SERVICE.execute(() -> {
bookcaseConsr.changeBookAdviser(bookAdviser.getAdviserId(), bookAdviser.getChannelId(), bookAdviser.getBookId());
});
mainAdviserId = bookAdviser.getAdviserId();
}
// 若为申诉编辑,设置申诉编辑图书类型
if (bookAdviser.getAdviserId().equals(appealAdviserId) && channelId.equals(bookAdviser.getChannelId())) {
bookAdviser.setTempletId(bookAppealDto.getTempletId());
}
}
// 批量修改图书编辑关联关系
bookAdviserDao.insert(bookMainAdviserDto.getBookAdviserList());
// 新增申诉编辑图书与二维码关联关系
EXECUTOR_SERVICE.execute(() -> {
recoverBookQrcodeAssoc(bookId, bookAppealDto.getChannelId(), appealAdviserId);
});
}
// 社群书申诉创建社群码
if (null != bookAppealDto && bookAppealDto.getIsBookGroup()) {
bookGroupBiz.getBookGroupInfoByBookId(bookId, channelId, appealAdviserId);
}
// 修改申诉状态
this.updateAppealState(auditUser, bookMainAdviserDto.getAppealState(), bookMainAdviserDto.getVersion(),
bookMainAdviserDto.getBookAppealId());
// 设置被诉方
List<BookDefendant> defendants = bookSet.setDefendant(adviserBooks, bookMainAdviserDto.getBookAppealId());
// 添加被诉方
bookDefendantDao.insert(defendants);
//新增申诉结果
insertBookAppealResult(bookAppealDto.getBookId(), bookAppealDto.getBookAppealId());
// 发送模板消息
sendAppealTemplate(isOnlyOneAdviser, appealAdviserId, adviserBooks, bookId, bookAppealDto.getChannelId(), mainAdviserId);
LOGGER.info("【书籍申诉-平台】设置主编辑,<END>.");
}
/**
* 设置申诉编辑唯一拥有
* @param bookId 图书标识
* @param declarant 申诉方
* @param channelId 运营标识
* @param templetId 模板标识
*/
public void setOnlyOneAdviser(Long bookId, Long declarant, Long channelId, Long templetId, List<BookAdviserDto> adviserBooks) {
//删除其余编辑与图书关联关系
bookAdviserBiz.deleteByBook(bookId);
EXECUTOR_SERVICE.execute(() -> {
//批量删除书架书籍
adviserBooks.stream().forEach(
adviserBook -> {
bookcaseConsr.deleteBookForAdviser(bookId, channelId, adviserBook.getAdviserId());
//删除与二维码关联关系
qrcodeSceneConsr.deleteBook(bookId, adviserBook.getChannelId(), adviserBook.getAdviserId());
// 删除社群码
bookGroupBiz.deleteByBookId(bookId, adviserBook.getChannelId(), adviserBook.getAdviserId());
}
);
});
//加上申诉编辑与图书关联关系
BookAdviser bookAdviser = new BookAdviser();
bookAdviser.setAdviserId(declarant);
bookAdviser.setChannelId(channelId);
bookAdviser.setBookId(bookId);
bookAdviser.setTempletId(templetId);
bookAdviser.setIsMainEditor(true);
bookAdviserDao.insert(bookAdviser);
// 恢复申诉编辑图书与二维码关联关系
recoverBookQrcodeAssoc(bookId, channelId, declarant);
}
/**
* 发送申诉审核通过的模板消息
*
* @param isOnlyOneAdviser
* 是否唯一拥有
* @param appealAdviserId
* 申诉编辑
* @param bookAdviserList
* 审核后编辑与书的关系
* @param bookId
* 图书标识
* @param channelId
* 运营标识
*/
bookAdviserDao.insert(bookAdviser);
// 恢复申诉编辑图书与二维码关联关系
recoverBookQrcodeAssoc(bookId, channelId, declarant);
}
/**
* 发送申诉审核通过的模板消息
* @param isOnlyOneAdviser 是否唯一拥有
* @param appealAdviserId 申诉编辑
* @param bookAdviserList 审核后编辑与书的关系
* @param bookId 图书标识
* @param channelId 运营标识
*/
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(()->{
// 获取图书详情
BookDto bookDto = bookBiz.getBaseById(bookId);
String bookName = bookDto.getBookName();
for (BookAdviserDto bookAdviser : bookAdviserList) {
if (isOnlyOneAdviser){
removeBookTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
}else{
//主编辑变为副编辑
if (bookAdviser.getIsMainEditor() && !mainAdviserId.equals(bookAdviser.getAdviserId())) {
adviserChangeToSubTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
}
//副编辑变为主编辑
if (!bookAdviser.getIsMainEditor() && mainAdviserId.equals(bookAdviser.getAdviserId())) {
adviserChangeToMainTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
}
}
}
//给申诉编辑发送模板消息
if (appealAdviserId.equals(mainAdviserId)) {
sendAppealSuccessToMainTemplate(bookName, appealAdviserId, channelId);
} else {
sendAppealSuccessToSubTemplate(bookName, appealAdviserId, channelId);
EXECUTOR_SERVICE.execute(() -> {
// 获取图书详情
BookDto bookDto = bookBiz.getBaseById(bookId);
String bookName = bookDto.getBookName();
for (BookAdviserDto bookAdviser : bookAdviserList) {
if (isOnlyOneAdviser) {
removeBookTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
} else {
//主编辑变为副编辑
if (bookAdviser.getIsMainEditor() && !mainAdviserId.equals(bookAdviser.getAdviserId())) {
adviserChangeToSubTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
}
//副编辑变为主编辑
if (!bookAdviser.getIsMainEditor() && mainAdviserId.equals(bookAdviser.getAdviserId())) {
adviserChangeToMainTemplate(bookName, bookAdviser.getAdviserId(), bookAdviser.getChannelId());
}
}
}
//给申诉编辑发送模板消息
if (appealAdviserId.equals(mainAdviserId)) {
sendAppealSuccessToMainTemplate(bookName, appealAdviserId, channelId);
} else {
sendAppealSuccessToSubTemplate(bookName, appealAdviserId, channelId);
}
LOGGER.info("发送申诉审核后的模板消息【END】");
});
}
/**
* 主编辑发生改变,给新主编辑发送模板消息(给新主编辑发消息不包括申诉编辑)
* @param bookName 图书名称
* @param adviserId 编辑标识
*/
void adviserChangeToMainTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("主编辑发生改变,给新主编辑发送模板消息,bookName=" + bookName + "adviserId=" + adviserId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "已将您设置为主编辑,请尽快去PC端配置书刊的相关资源等信息");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info(" 主编辑发生改变,给新主编辑发送模板消息[END]");
}
/**
* 书籍被移除模板消息
* @param bookName 图书名称
* @param adviserId 编辑标识
*/
void removeBookTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("书籍被移除模板消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "被申诉成功,已被移除,请知悉");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("书籍被移除模板消息[END]");
}
/**
* 主编辑发生改变,由主编辑变为副编辑模板消息
* @param bookName 图书名称
* @param adviserId 编辑标识
*/
void adviserChangeToSubTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("主编辑发生改变,由主编辑变为副编辑模板消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "被申诉成功,已将您设置为副编辑,请知悉");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info(" 主编辑发生改变,给新主编辑发送模板消息[END]");
}
/**
* 申诉成功为主编辑
* @param bookName 图书名称
* @param adviserId 编辑标识
*/
void sendAppealSuccessToMainTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("申诉成功为主编辑,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
// 发送模板消息---申诉编辑变为主编辑(给申诉编辑编辑发消息)
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "恭喜您,您申请的" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "申诉成功");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "书刊已加入您的书刊列表,您是主编辑,请去PC端配置书刊的相关资源");
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId, adviserId, SystemCode.adviser.code,
"", temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("申诉成功为主编辑[END]");
}
/**
* 申诉成功为副编辑
* @param bookName 图书名称
* @param adviserId 编辑标识
*/
void sendAppealSuccessToSubTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("申诉成功为副编辑,给申诉编辑发消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
// 发送模板消息---提交申诉的编辑,申诉成功之后是副编辑(给申诉编辑发消息)
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "恭喜您,您申请的" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "申诉成功");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "书刊已加入您的书刊列表,您是副编辑,可直接共享书刊配套资源");
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId, adviserId, SystemCode.adviser.code,
"", temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("申诉成功为副编辑,给申诉编辑发消息【END】");
}
/**
* 发送申诉审核未通过的模板消息
* @param bookName 图书名称
* @param auditReason 审核不通过原因
* @param declarant 申诉方
*/
void sendAuditFailTemplate(String bookName, String auditReason, Long declarant, Long channelId) {
try {
String channelName = channelConsr.getNameById(channelId);
// 获取申诉人所属代理
Long agentId = adviserConsr.getAgentIdByAdviser(declarant);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "很抱歉,您申请的" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "申诉未通过审核");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉不通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "申诉不通过,原因:" + auditReason);
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId,
declarant, SystemCode.adviser.code, "", temParam,
SendType.SEND_BY_PARTY_ID.value, false);
} catch (Exception e) {
LOGGER.error("【书籍申诉-审核-平台】书刊申诉审核:发送模板消息,<ERROR>:" + e.getMessage(), e);
}
LOGGER.info("发送申诉审核后的模板消息【END】");
});
}
/**
* 修改申诉状态
* @param auditUser 审核人
* @param appealState 申诉状态
* @param version 版本号
* @param bookAppealId 申诉标识
*/
@Transactional(rollbackFor = Exception.class)
void updateAppealState(Long auditUser, Integer appealState, Integer version, Long bookAppealId) {
LOGGER.info("修改申诉状态auditUser=" + auditUser + "appealState=" + appealState + "version=" + version
+ "bookAppealId=" + bookAppealId);
BookAppeal bookAppeal = new BookAppeal();
bookAppeal.setAuditUser(auditUser);
bookAppeal.setLastModifiedUser(auditUser);
bookAppeal.setAppealState(appealState);
bookAppeal.setVersion(version);
bookAppeal.setBookAppealId(bookAppealId);
// 更新申诉状态信息
bookAppealDao.update(bookAppeal);
LOGGER.info("修改申诉状态【END】");
}
/**
* 恢复主编辑图书与二维码关联关系
* @param bookId 图书标识
* @param channelId 运营标识
* @param adviserId 编辑标识
*/
@Transactional(rollbackFor = Exception.class)
void recoverBookQrcodeAssoc(Long bookId, Long channelId, Long adviserId) {
LOGGER.info("恢复主编辑图书与二维码关联关系,bookId=" + bookId + ",channelId=" + channelId + "adviserId=" + adviserId);
qrcodeSceneConsr.recoverByBook(bookId, channelId, adviserId);
LOGGER.info("恢复主编辑图书与二维码关联关系结束");
}
/**
* 主编辑发生改变,给新主编辑发送模板消息(给新主编辑发消息不包括申诉编辑)
*
* @param bookName
* 图书名称
* @param adviserId
* 编辑标识
*/
void adviserChangeToMainTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("主编辑发生改变,给新主编辑发送模板消息,bookName=" + bookName + "adviserId=" + adviserId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在"+channelName+"运营的书刊" + StringUtil.addBracket(bookName) + "已将您设置为主编辑,请尽快去PC端配置书刊的相关资源等信息");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info(" 主编辑发生改变,给新主编辑发送模板消息[END]");
}
/**
* 书籍被移除模板消息
*
* @param bookName
* 图书名称
* @param adviserId
* 编辑标识
*/
void removeBookTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("书籍被移除模板消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId="+channelId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在"+channelName+"运营的书刊" + StringUtil.addBracket(bookName) + "被申诉成功,已被移除,请知悉");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("书籍被移除模板消息[END]");
}
/**
* 主编辑发生改变,由主编辑变为副编辑模板消息
*
* @param bookName
* 图书名称
* @param adviserId
* 编辑标识
*/
void adviserChangeToSubTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("主编辑发生改变,由主编辑变为副编辑模板消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "编辑变更");
temParam.put("keyword2", "RAYS编辑");
temParam.put("keyword1", "您在"+channelName+"运营的书刊" + StringUtil.addBracket(bookName) + "被申诉成功,已将您设置为副编辑,请知悉");
temParam.put("keyword3", "通知");
temParam.put("remark", "请抽空处理");
templateConsr.sendManage(SceneCode.PROJECT_TASK_SCENE.value, agentId, adviserId, SystemCode.adviser.code, "",
temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info(" 主编辑发生改变,给新主编辑发送模板消息[END]");
}
/**
* 申诉成功为主编辑
*
* @param bookName
* 图书名称
* @param adviserId
* 编辑标识
*/
void sendAppealSuccessToMainTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("申诉成功为主编辑,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
// 发送模板消息---申诉编辑变为主编辑(给申诉编辑编辑发消息)
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "恭喜您,您申请的" + channelName + "运营的书刊" + StringUtil.addBracket(bookName) + "申诉成功");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "书刊已加入您的书刊列表,您是主编辑,请去PC端配置书刊的相关资源");
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId, adviserId, SystemCode.adviser.code,
"", temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("申诉成功为主编辑[END]");
}
/**
* 申诉成功为副编辑
*
* @param bookName
* 图书名称
* @param adviserId
* 编辑标识
*/
void sendAppealSuccessToSubTemplate(String bookName, Long adviserId, Long channelId) {
LOGGER.info("申诉成功为副编辑,给申诉编辑发消息,bookName=" + bookName + "adviserId=" + adviserId + "channelId=" + channelId);
// 发送模板消息---提交申诉的编辑,申诉成功之后是副编辑(给申诉编辑发消息)
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
String channelName = channelConsr.getNameById(channelId);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "恭喜您,您申请的" + channelName + "运营的书刊"+StringUtil.addBracket(bookName)+"申诉成功");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "书刊已加入您的书刊列表,您是副编辑,可直接共享书刊配套资源");
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId, adviserId, SystemCode.adviser.code,
"", temParam, SendType.SEND_BY_PARTY_ID.value, false);
LOGGER.info("申诉成功为副编辑,给申诉编辑发消息【END】");
}
/**
* 发送申诉审核未通过的模板消息
* @param bookName 图书名称
* @param auditReason 审核不通过原因
* @param declarant 申诉方
*/
void sendAuditFailTemplate(String bookName, String auditReason, Long declarant, Long channelId){
try {
String channelName = channelConsr.getNameById(channelId);
// 获取申诉人所属代理
Long agentId = adviserConsr.getAgentIdByAdviser(declarant);
Map<String, String> temParam = new HashMap<>();
temParam.put("first", "很抱歉,您申请的"+channelName+"运营的书刊" + StringUtil.addBracket(bookName) + "申诉未通过审核");
temParam.put("keyword2", "书刊申诉审核");
temParam.put("keyword1", "书刊申诉");
temParam.put("keyword3", "申诉不通过");
temParam.put("keyword4", DateUtils.formatDate(new Date()));
temParam.put("remark", "申诉不通过,原因:" + auditReason);
templateConsr.sendManage(SceneCode.TASK_HANDLE_RESULT_SCENE.value, agentId,
declarant, SystemCode.adviser.code, "", temParam,
SendType.SEND_BY_PARTY_ID.value, false);
} catch (Exception e) {
LOGGER.error("【书籍申诉-审核-平台】书刊申诉审核:发送模板消息,<ERROR>:" + e.getMessage(), e);
}
}
/**
* 修改申诉状态
*
* @param auditUser
* 审核人
* @param appealState
* 申诉状态
* @param version
* 版本号
* @param bookAppealId
* 申诉标识
*/
@Transactional(rollbackFor = Exception.class)
void updateAppealState(Long auditUser, Integer appealState, Integer version, Long bookAppealId) {
LOGGER.info("修改申诉状态auditUser=" + auditUser + "appealState=" + appealState + "version=" + version
+ "bookAppealId=" + bookAppealId);
BookAppeal bookAppeal = new BookAppeal();
bookAppeal.setAuditUser(auditUser);
bookAppeal.setLastModifiedUser(auditUser);
bookAppeal.setAppealState(appealState);
bookAppeal.setVersion(version);
bookAppeal.setBookAppealId(bookAppealId);
// 更新申诉状态信息
bookAppealDao.update(bookAppeal);
LOGGER.info("修改申诉状态【END】");
}
/**
* 恢复主编辑图书与二维码关联关系
*
* @param bookId
* 图书标识
* @param channelId
* 运营标识
* @param adviserId
* 编辑标识
*/
@Transactional(rollbackFor = Exception.class)
void recoverBookQrcodeAssoc(Long bookId, Long channelId, Long adviserId) {
LOGGER.info("恢复主编辑图书与二维码关联关系,bookId=" + bookId + ",channelId=" + channelId + "adviserId=" + adviserId);
qrcodeSceneConsr.recoverByBook(bookId, channelId, adviserId);
LOGGER.info("恢复主编辑图书与二维码关联关系结束");
}
/**
* 获取申诉结果
*/
@Override
public List<BookAppealResultDto> getAppealResult(Long bookAppealId) {
LOGGER.info("获取申诉结果bookAppealId="+bookAppealId);
//获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
if (bookAppealDto == null || bookAppealDto.getCreatedUser() == null){
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉信息不存在");
}
Long appealAdviserId = bookAppealDto.getCreatedUser();
//获取申诉结果
List<BookAppealResultDto> appealResults = bookAppealResultDao.getAppealResult(bookAppealId);
if(ListUtils.isEmpty(appealResults))
return new ArrayList<>();
List<Long> adviserIds = new ArrayList<>();
List<Long> channelIds = new ArrayList<>();
appealResults.stream().forEach(
appealResult -> {
if(appealAdviserId.equals(appealResult.getAdviserId())){
appealResult.setAppealAdviser(true);
}else{
appealResult.setAppealAdviser(false);
}
if (!adviserIds.contains(appealResult.getAdviserId())) {
adviserIds.add(appealResult.getAdviserId());
}
if (!channelIds.contains(appealResult.getChannelId())) {
channelIds.add(appealResult.getChannelId());
}
}
);
// 获取基本信息
Map<Long, AdviserBaseInfoDto> adviserMap = adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
Map<Long, String> channelNameMap = channelConsr.getNamesByIdList(channelIds);
appealResults.stream().forEach(
appealResult -> {
if(adviserMap!=null){
AdviserBaseInfoDto adviserBaseInfoDto = adviserMap.get(appealResult.getAdviserId());
if(adviserBaseInfoDto != null){
appealResult.setAdviserName(adviserBaseInfoDto.getPartyName());
appealResult.setAgentName(adviserBaseInfoDto.getAgentName());
appealResult.setPhone(adviserBaseInfoDto.getPhoneNum());
appealResult.setHeadUrl(adviserBaseInfoDto.getHeadUrl());
}
}
if(channelNameMap != null){
appealResult.setChannelName(channelNameMap.get(appealResult.getChannelId()));
}
if(appealAdviserId.equals(appealResult.getAdviserId())){
appealResult.setPhone(bookAppealDto.getPhone());
}
}
);
LOGGER.info("获取申诉结果[END]");
return appealResults;
}
/**
* 获取申诉结果
*/
@Override
public List<BookAppealResultDto> getAppealResult(Long bookAppealId) {
LOGGER.info("获取申诉结果bookAppealId=" + bookAppealId);
//获取申诉基本信息
BookAppealDto bookAppealDto = bookAppealDao.getById(bookAppealId);
if (bookAppealDto == null || bookAppealDto.getCreatedUser() == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "申诉信息不存在");
}
Long appealAdviserId = bookAppealDto.getCreatedUser();
//获取申诉结果
List<BookAppealResultDto> appealResults = bookAppealResultDao.getAppealResult(bookAppealId);
if (ListUtils.isEmpty(appealResults))
return new ArrayList<>();
List<Long> adviserIds = new ArrayList<>();
List<Long> channelIds = new ArrayList<>();
appealResults.stream().forEach(
appealResult -> {
if (appealAdviserId.equals(appealResult.getAdviserId())) {
appealResult.setAppealAdviser(true);
} else {
appealResult.setAppealAdviser(false);
}
if (!adviserIds.contains(appealResult.getAdviserId())) {
adviserIds.add(appealResult.getAdviserId());
}
if (!channelIds.contains(appealResult.getChannelId())) {
channelIds.add(appealResult.getChannelId());
}
}
);
// 获取基本信息
Map<Long, AdviserBaseInfoDto> adviserMap = adviserConsr.getAdviserId2AdviserInfoDtoMap(adviserIds);
Map<Long, String> channelNameMap = channelConsr.getNamesByIdList(channelIds);
appealResults.stream().forEach(
appealResult -> {
if (adviserMap != null) {
AdviserBaseInfoDto adviserBaseInfoDto = adviserMap.get(appealResult.getAdviserId());
if (adviserBaseInfoDto != null) {
appealResult.setAdviserName(adviserBaseInfoDto.getPartyName());
appealResult.setAgentName(adviserBaseInfoDto.getAgentName());
appealResult.setPhone(adviserBaseInfoDto.getPhoneNum());
appealResult.setHeadUrl(adviserBaseInfoDto.getHeadUrl());
}
}
if (channelNameMap != null) {
appealResult.setChannelName(channelNameMap.get(appealResult.getChannelId()));
}
if (appealAdviserId.equals(appealResult.getAdviserId())) {
appealResult.setPhone(bookAppealDto.getPhone());
}
}
);
LOGGER.info("获取申诉结果[END]");
return appealResults;
}
}
......@@ -123,7 +123,20 @@ public interface BookBiz {
*/
BookDto getById(Long bookId, Long adviserId, Long channelId) throws BizException;
/**
/**
* 获取单个书籍基础信息(包含统计信息)
*
* @param bookId
* 图书标识
* @param adviserId
* 编辑标识
* @param channelId
* 渠道标识
* @return
*/
BookDto getById4Platform(Long bookId, Long adviserId, Long channelId) throws BizException;
/**
* 批量获取书籍信息
*
* @param bookIds
......
......@@ -18,6 +18,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.group.dao.BookGroupDao;
import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.core.constant.SceneCode;
import com.pcloud.common.core.constant.SendType;
......@@ -52,7 +53,7 @@ import java.util.concurrent.Executors;
public class BookAdviserBizImpl implements BookAdviserBiz {
/**
*
*
*/
private static final Logger LOGGER = LoggerFactory.getLogger(BookAdviserBizImpl.class);
......@@ -79,16 +80,19 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
@Autowired
private BookcaseConsr bookcaseConsr;
@Autowired
private BookConsr bookConsr;
@Autowired
private ChannelConsr channelConsr;
@Autowired
private BookGroupBiz bookGroupBiz;
@Autowired
private BookGroupDao bookGroupDao;
private static final ExecutorService EXECUTOR_SERVICE = Executors.newFixedThreadPool(5);
/**
......@@ -162,7 +166,7 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
/**
* 校验是否同一出版社
*
*
* @param channelId
* 运营标识
* @param adviserId
......@@ -253,7 +257,7 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
private BookAdviserDto getByAdviserContainsDelete(BookAdviser bookAdviser) throws BizException {
return bookAdviserDao.getByAdviserContainsDelete(bookAdviser);
}
/**
* 统计编辑推广的图书总数
*/
......@@ -538,7 +542,7 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
/**
* 填充不存在的日期中的值为0
*
*
* @param bookCounts
* @param startTime
* @param endTime
......@@ -588,7 +592,7 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
LOGGER.info("删除书籍(编辑端)<END>");
}
/**
* 删除主编辑书籍
* @param bookId 图书标识
......@@ -613,10 +617,10 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
}
LOGGER.info("删除主编辑书籍<END>.");
}
/**
* 删除副编辑书籍(编辑端)
*
*
* @param bookId
* 图书标识
* @param adviserId
......@@ -690,6 +694,8 @@ public class BookAdviserBizImpl implements BookAdviserBiz {
CountDto countDto = new CountDto();
Integer count = bookAdviserDao.getAdviserBookCount(adviserId);
countDto.setCount(count);
Integer bookGroupCount = bookGroupDao.getBookGroupCount(adviserId);
countDto.setBookGroupCount(bookGroupCount);
LOGGER.info("获取编辑的图书总数 ,<END>");
return countDto;
}
......
......@@ -3,6 +3,26 @@
*/
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;
......@@ -11,11 +31,28 @@ import com.pcloud.book.base.enums.BookFreezeEnum;
import com.pcloud.book.base.enums.BookStatusEnum;
import com.pcloud.book.base.enums.BookTypeEnum;
import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.book.biz.*;
import com.pcloud.book.book.biz.BookAdviserBiz;
import com.pcloud.book.book.biz.BookAppBiz;
import com.pcloud.book.book.biz.BookBiz;
import com.pcloud.book.book.biz.BookFreezeBiz;
import com.pcloud.book.book.biz.BookFundBiz;
import com.pcloud.book.book.biz.BookProductBiz;
import com.pcloud.book.book.biz.BookResourceBiz;
import com.pcloud.book.book.cache.BookCache;
import com.pcloud.book.book.constant.BookConstant;
import com.pcloud.book.book.dao.BookDao;
import com.pcloud.book.book.dto.*;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookAdviserUpdateTimeDTO;
import com.pcloud.book.book.dto.BookAssocCount;
import com.pcloud.book.book.dto.BookCoverImgUpdateDTO;
import com.pcloud.book.book.dto.BookDetialDTO;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookFreezeDto;
import com.pcloud.book.book.dto.BookFundDto;
import com.pcloud.book.book.dto.BookInfo4AnlysicsDTO;
import com.pcloud.book.book.dto.BookInfoAnalysicsDTO;
import com.pcloud.book.book.dto.BookInfoAndAuthStatusDTO;
import com.pcloud.book.book.dto.BookNameUpdateDTO;
import com.pcloud.book.book.entity.Book;
import com.pcloud.book.book.entity.BookAdviser;
import com.pcloud.book.book.set.BookSet;
......@@ -44,19 +81,6 @@ import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.string.StringUtil;
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.*;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.stream.Collectors;
/**
* @描述:书籍业务层接口实现类
......@@ -128,8 +152,8 @@ public class BookBizImpl implements BookBiz {
throw new BookBizException(BookBizException.DB_SELECT_MORE, "书刊已存在");
}
if(SystemCode.adviser.code.equalsIgnoreCase(systemCode) &&
(Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId()))){
if (SystemCode.adviser.code.equalsIgnoreCase(systemCode) &&
(Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId()))) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择书刊分类");
}
......@@ -287,7 +311,7 @@ public class BookBizImpl implements BookBiz {
if (BookConstant.DEFAULT_BOOK_ISBN.equals(book.getIsbn()) && StringUtils.isEmpty(book.getSerialNumber())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "默认图书不能修改!");
}
if(Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId())){
if (Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择书刊分类");
}
}
......@@ -452,14 +476,14 @@ public class BookBizImpl implements BookBiz {
serialNumber = null;
}
// 校验书号
bookSet.checkISBN(typeCode, isbn);
BookDto bookDto = bookDao.getByIsbnAndSnum(isbn, serialNumber);
if (bookDto == null) {
return false;
}
return true;
}
// 校验书号
bookSet.checkISBN(typeCode, isbn);
BookDto bookDto = bookDao.getByIsbnAndSnum(isbn, serialNumber);
if (bookDto == null) {
return false;
}
return true;
}
/**
* 获取单个书籍基础信息(包含统计信息)
......@@ -502,6 +526,38 @@ public class BookBizImpl implements BookBiz {
}
/**
* 获取单个书籍基础信息(包含统计信息)
*/
@Override
public BookDto getById4Platform(Long bookId, Long adviserId, Long channelId) throws BizException {
LOGGER.info("【书籍基础】获取单个书籍基础信息,<START>.[bookId]=" + bookId + ",[adviserId]=" + adviserId
+ ",[channelId]=" + channelId);
if (bookId == null || channelId == null || adviserId == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "参数有误!");
}
BookDto bookDto = null;
Map<String, Object> paramMap = Maps.newHashMap();
paramMap.put("bookId", bookId);
paramMap.put("adviserId", adviserId);
paramMap.put("channelId", channelId);
bookDto = bookDao.getById(paramMap);
if (bookDto == null) {
return new BookDto();
}
bookDto.setAdviserId(adviserId);
bookDto.setChannelId(channelId);
String adviserName = adviserConsr.getNameById(adviserId);
bookDto.setAdviserName(adviserName);
Long agentId = adviserConsr.getAgentIdByAdviser(adviserId);
Map<Long, String> agentNameMap = agentConsr.getNames(Arrays.asList(agentId));
if (!MapUtils.isEmpty(agentNameMap) && agentNameMap.containsKey(agentId)) {
bookDto.setAgentName(agentNameMap.get(agentId));
}
LOGGER.info("【书籍基础】获取单个书籍基础信息(包含统计信息),<END>");
return bookDto;
}
/**
* 批量获取书籍信息
*/
@Override
......@@ -710,6 +766,8 @@ public class BookBizImpl implements BookBiz {
bookSet.setBookIncome(Lists.newArrayList(bookDtos));
// 设置二维码相关信息
bookSet.setQrInfo(Lists.newArrayList(bookDtos));
// 填充社群码相关信息
bookSet.seBookGroupInfo(Lists.newArrayList(bookDtos));
}
return bookDtos;
}
......@@ -849,32 +907,31 @@ public class BookBizImpl implements BookBiz {
return bookDto;
}
/**
* 判断isbn是否存在,存在返回书籍信息
*
* @throws IOException
*/
@Override
@Transactional(rollbackFor = Exception.class)
public BookDto isbnExistsOrGetInfo(Book book) {
LOGGER.info("【书籍基础】判断ISBN是否存在,<PARAM>.[isbn]=" + book.getIsbn());
// 校验书号合法性
bookSet.checkISBN(book.getTypeCode(), book.getIsbn());
if (StringUtils.isEmpty(book.getSerialNumber())) {
book.setSerialNumber(null);
}
// 获取最近书刊信息
BookDto journalDto = bookDao.getByIsbn(book.getIsbn());
if (BookTypeEnum.BOOK.value.equals(book.getTypeCode()) && journalDto == null) {
try {
// 调用外部接口查询书籍信息
insertBook(book.getIsbn());
journalDto = bookDao.getByIsbn(book.getIsbn());
} catch (Exception e) {
LOGGER.error("【书刊基础】根据ISBN获取书刊信息,<ERROR>.[getByJournIsbn]:" + e.getMessage(), e);
throw BizException.DB_SELECT_IS_FAIL;
}
}
/**
* 判断isbn是否存在,存在返回书籍信息
* @throws IOException
*/
@Override
@Transactional(rollbackFor = Exception.class)
public BookDto isbnExistsOrGetInfo(Book book) {
LOGGER.info("【书籍基础】判断ISBN是否存在,<PARAM>.[isbn]=" + book.getIsbn());
// 校验书号合法性
bookSet.checkISBN(book.getTypeCode(), book.getIsbn());
if (StringUtils.isEmpty(book.getSerialNumber())) {
book.setSerialNumber(null);
}
// 获取最近书刊信息
BookDto journalDto = bookDao.getByIsbn(book.getIsbn());
if (BookTypeEnum.BOOK.value.equals(book.getTypeCode()) && journalDto == null) {
try {
// 调用外部接口查询书籍信息
insertBook(book.getIsbn());
journalDto = bookDao.getByIsbn(book.getIsbn());
} catch (Exception e) {
LOGGER.error("【书刊基础】根据ISBN获取书刊信息,<ERROR>.[getByJournIsbn]:" + e.getMessage(), e);
throw BizException.DB_SELECT_IS_FAIL;
}
}
if (null != journalDto) {
BookDto journal = bookDao.getByIsbnAndSnum(book.getIsbn(), book.getSerialNumber());
......@@ -1345,7 +1402,7 @@ public class BookBizImpl implements BookBiz {
if (book.getChannelId() == null) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择运营平台");
}
if(Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId())){
if (Objects.isNull(book.getTempletId()) || Objects.isNull(book.getSecondTempletId())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "请选择书刊分类");
}
// 校验书号
......@@ -1361,11 +1418,10 @@ public class BookBizImpl implements BookBiz {
}
// 新增图书与编辑关联关系
createBookAdviserRelation(book);
/*BookGroup bookGroup = null;
if (null != book.getIsBookGroup() && book.getIsBookGroup()) {
BookGroup bookGroup = bookGroupBiz.createBookGroupAfterCreateBook(book.getBookId(), book.getChannelId(), book.getCreatedUser());
bookDto.setBookGroupId(bookGroup.getId());
bookDto.setGroupQrcodeUrl(bookGroup.getGroupQrcodeUrl());
}
bookGroup = bookGroupBiz.createBookGroupAfterCreateBook(book.getBookId(), book.getChannelId(), book.getCreatedUser());
}*/
// 图书不存在,新增图书,图书数量加1
if (bookDto == null) {
// 书籍总数缓存加1
......@@ -1382,6 +1438,10 @@ public class BookBizImpl implements BookBiz {
}
bookDto = bookDao.getByIsbnAndSnum(book.getIsbn(), book.getSerialNumber());
bookDto.setChannelId(book.getChannelId());
/*if (null != bookGroup) {
bookDto.setBookGroupId(bookGroup.getId());
bookDto.setGroupQrcodeUrl(bookGroup.getGroupQrcodeUrl());
}*/
LOGGER.info("【书籍基础】创建书籍基础信息,<END>");
return bookDto;
}
......@@ -1405,7 +1465,7 @@ public class BookBizImpl implements BookBiz {
// 清除redis中数据
bookCache.clearRedisByBook(book.getBookId(), book.getIsbn(), book.getSerialNumber());
//修改图书类型
bookAdviserBiz.updateBookTemplet(book.getBookId(), book.getChannelId(), book.getLastModifiedUser(), book.getTempletId(),book.getSecondTempletId());
bookAdviserBiz.updateBookTemplet(book.getBookId(), book.getChannelId(), book.getLastModifiedUser(), book.getTempletId(), book.getSecondTempletId());
LOGGER.info("修改图书基本信息与类型[END]");
}
......
......@@ -291,4 +291,11 @@ public interface BookDao extends BaseDao<Book> {
* @return
*/
List<BookDto> listBookIdAndChannelId4Adviser(Map<String, Object> paramMap);
/**
* 获取社群书列表
* @param paramMap 参数Map
* @return
*/
List<BookDto> listSimpleBookGroup4Adviser(Map<String, Object> paramMap);
}
......@@ -277,4 +277,12 @@ public class BookDaoImpl extends BaseDaoImpl<Book> implements BookDao {
public List<BookDto> listBookIdAndChannelId4Adviser(Map<String, Object> paramMap) {
return super.getSqlSession().selectList(getStatement("listBookIdAndChannelId4Adviser"), paramMap);
}
/**
* 获取社群书列表
*/
@Override
public List<BookDto> listSimpleBookGroup4Adviser(Map<String, Object> paramMap) {
return super.getSqlSession().selectList(getStatement("listSimpleBookGroup4Adviser"), paramMap);
}
}
......@@ -400,6 +400,21 @@ public interface BookFacade {
throws BizException, PermissionException, JsonParseException;
/**
* 获取书籍基础信息(平台端)
*/
@ApiOperation(value = "获取书籍基础信息(平台端)", httpMethod = "GET")
@ApiImplicitParams({@ApiImplicitParam(name = "token", value = "token", dataType = "string", paramType = "header"),
@ApiImplicitParam(name = "bookId", value = "图书标识", dataType = "long", paramType = "query"),
@ApiImplicitParam(name = "channelId", value = "渠道标识", dataType = "long", paramType = "query"),
@ApiImplicitParam(name = "adviserId", value = "编辑标识", dataType = "long", paramType = "query")})
@RequestMapping(value = "getById4Platform", method = RequestMethod.GET)
ResponseDto<BookDto> getById4Platform(@RequestHeader("token") String token,
@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "channelId", required = false) Long channelId,
@RequestParam(value = "adviserId", required = false) Long adviserId)
throws BizException;
/**
* 书刊回收站列表(30天内删除的书刊列表)
*/
@ApiOperation(value = "书刊回收站列表", httpMethod = "GET")
......
......@@ -547,6 +547,19 @@ public class BookFacadeImpl implements BookFacade {
}
/**
* 获取书籍基础信息(平台端)
*/
@Override
@RequestMapping(value = "getById4Platform", method = RequestMethod.GET)
public ResponseDto<BookDto> getById4Platform(@RequestHeader("token") String token,
@RequestParam(value = "bookId") Long bookId,
@RequestParam(value = "channelId", required = false) Long channelId,
@RequestParam(value = "adviserId", required = false) Long adviserId)
throws BizException {
return new ResponseDto<>(bookBiz.getById4Platform(bookId, adviserId, channelId));
}
/**
* 书刊回收站列表(30天内删除的书刊列表)
*/
@Override
......
......@@ -3,6 +3,24 @@
*/
package com.pcloud.book.book.set;
import java.math.BigDecimal;
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.stream.Collectors;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import com.alibaba.fastjson.JSONObject;
import com.google.common.collect.Lists;
import com.pcloud.analysisengine.browse.dto.BrowseCacheRecordDto;
......@@ -18,7 +36,15 @@ import com.pcloud.book.book.biz.BookFundBiz;
import com.pcloud.book.book.dao.BookAdviserDao;
import com.pcloud.book.book.dao.BookFreezeDao;
import com.pcloud.book.book.dao.BookTypeDao;
import com.pcloud.book.book.dto.*;
import com.pcloud.book.book.dto.AdviserManageDto;
import com.pcloud.book.book.dto.BookAdviserDto;
import com.pcloud.book.book.dto.BookAppDto;
import com.pcloud.book.book.dto.BookDeleteDto;
import com.pcloud.book.book.dto.BookDto;
import com.pcloud.book.book.dto.BookFreezeDto;
import com.pcloud.book.book.dto.BookProductDto;
import com.pcloud.book.book.dto.BookResourceDto;
import com.pcloud.book.book.dto.BookTypeDto;
import com.pcloud.book.book.entity.BookDefendant;
import com.pcloud.book.book.tools.BookTools;
import com.pcloud.book.book.vo.NoAuthBookVO;
......@@ -32,8 +58,16 @@ import com.pcloud.book.consumer.content.ResourceConsr;
import com.pcloud.book.consumer.message.MessageConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
import com.pcloud.book.consumer.settlement.BookConsr;
import com.pcloud.book.consumer.user.*;
import com.pcloud.book.consumer.user.AdviserConsr;
import com.pcloud.book.consumer.user.AgentConsr;
import com.pcloud.book.consumer.user.BookcaseConsr;
import com.pcloud.book.consumer.user.ChannelConsr;
import com.pcloud.book.consumer.user.PartyConsr;
import com.pcloud.book.consumer.voicemessage.MerchantVideoConsr;
import com.pcloud.book.group.biz.BookGroupClassifyBiz;
import com.pcloud.book.group.dao.BookGroupDao;
import com.pcloud.book.group.dto.BookGroupDTO;
import com.pcloud.book.group.dto.BookGroupStatisticDTO;
import com.pcloud.channelcenter.base.constants.MessageFromTypeEnum;
import com.pcloud.channelcenter.qrcode.dto.QrcodeLocationDto;
import com.pcloud.channelcenter.qrcode.vo.BookAssocLastQrAskVO;
......@@ -61,18 +95,6 @@ import com.pcloud.usercenter.party.adviser.dto.AdviserBaseInfoDto;
import com.pcloud.usercenter.party.adviser.entity.Adviser;
import com.pcloud.usercenter.party.agent.entity.Agent;
import com.pcloud.voicemessage.party.merchant.entity.MerchantVideo;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.amqp.core.AmqpTemplate;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
* @描述:图书信息填充
......@@ -131,6 +153,10 @@ public class BookSet {
private AgentConsr agentConsr;
@Autowired
private AccountSettingService accountSettingService;
@Autowired
private BookGroupDao bookGroupDao;
@Autowired
private BookGroupClassifyBiz bookGroupClassifyBiz;
/**
* 检验书号是否合法,包括ISSN,ISBN,CSSN
......@@ -978,7 +1004,7 @@ public class BookSet {
// 有二级列表优先展示二级列表,无则展示一级列表
List<Long> templetIds = recordList.stream()
.map(bookDto -> {
BookDto book = (BookDto)bookDto;
BookDto book = (BookDto) bookDto;
if (Objects.nonNull(book.getSecondTempletId())) {
return book.getSecondTempletId();
}
......@@ -989,13 +1015,13 @@ public class BookSet {
final Map<Long, AssistTempletDTO> assistTempletIds = assistTempletConsr.mapByIds(templetIds);
if(MapUtils.isEmpty(assistTempletIds)){
if (MapUtils.isEmpty(assistTempletIds)) {
LOGGER.info("设置模板名称【END】");
return;
}
recordList.forEach(bookDto -> {
BookDto book = (BookDto)bookDto;
BookDto book = (BookDto) bookDto;
Long secondTempletId = book.getSecondTempletId();
Long templetId = book.getTempletId();
if (Objects.nonNull(secondTempletId)) {
......@@ -1057,9 +1083,9 @@ public class BookSet {
}
List<Long> templetIds = new ArrayList<>();
if(Objects.nonNull(bookDto.getSecondTempletId())){
if (Objects.nonNull(bookDto.getSecondTempletId())) {
templetIds.add(bookDto.getSecondTempletId());
}else if(Objects.nonNull(bookDto.getTempletId())){
} else if (Objects.nonNull(bookDto.getTempletId())) {
templetIds.add(bookDto.getTempletId());
}
......@@ -1068,10 +1094,10 @@ public class BookSet {
return;
}
if(Objects.nonNull(bookDto.getSecondTempletId())){
setBookDtoTempletInfo(assistTempletMap,bookDto,bookDto.getSecondTempletId());
}else if(Objects.nonNull(bookDto.getTempletId())){
setBookDtoTempletInfo(assistTempletMap,bookDto,bookDto.getTempletId());
if (Objects.nonNull(bookDto.getSecondTempletId())) {
setBookDtoTempletInfo(assistTempletMap, bookDto, bookDto.getSecondTempletId());
} else if (Objects.nonNull(bookDto.getTempletId())) {
setBookDtoTempletInfo(assistTempletMap, bookDto, bookDto.getTempletId());
}
LOGGER.info("设置模板名称【END】");
......@@ -1306,6 +1332,36 @@ public class BookSet {
* 设置二维码相关信息
* @param recordList
*/
public void seBookGroupInfo(List<Object> recordList) {
if (ListUtils.isEmpty(recordList)) {
return;
}
for (Object object : recordList) {
BookDto bookDto = (BookDto) object;
if (null != bookDto.getIsBookGroup() && bookDto.getIsBookGroup()) {
BookGroupDTO bookGroupDTO = bookGroupDao.getDTOByBookId(bookDto.getBookId(), bookDto.getChannelId(), bookDto.getAdviserId());
if (null != bookGroupDTO) {
bookDto.setBookGroupId(bookGroupDTO.getId());
bookDto.setGroupQrcodeUrl(bookGroupDTO.getGroupQrcodeUrl());
bookDto.setGroupQrcodeName(bookGroupDTO.getGroupQrcodeName());
Map<Long, BookGroupStatisticDTO> statisMap = bookGroupClassifyBiz.getBookGroupStatistic(Arrays.asList(bookGroupDTO.getId()));
if (!MapUtils.isEmpty(statisMap) && statisMap.containsKey(bookGroupDTO.getId())) {
BookGroupStatisticDTO statisticDTO = statisMap.get(bookGroupDTO.getId());
bookDto.setClassifyCount(null != statisticDTO.getClassifyCount() ? statisticDTO.getClassifyCount().longValue() : 0L);
bookDto.setGroupCount(null != statisticDTO.getGroupNumber() ? statisticDTO.getGroupNumber().longValue() : 0L);
} else {
bookDto.setClassifyCount(0L);
bookDto.setGroupCount(0L);
}
}
}
}
}
/**
* 设置社群书社群码相关信息
* @param recordList
*/
public void setQrInfo(List<Object> recordList) {
if (ListUtils.isEmpty(recordList)) {
return;
......
......@@ -2,7 +2,6 @@ package com.pcloud.book.mq.producer;
import com.pcloud.book.book.dto.BookCoverImgUpdateDTO;
import com.pcloud.book.book.dto.BookNameUpdateDTO;
import com.pcloud.book.book.dto.BookTypeUpdateDTO;
import com.pcloud.book.group.dto.PushAddUserMessageDTO;
public interface BookMQProducer {
......
......@@ -23,7 +23,8 @@
<result column="BOOK_NAME" property="bookName" jdbcType="VARCHAR" />
<result column="ISBN" property="isbn" jdbcType="VARCHAR" />
<result column="SERIAL_NUMBER" property="serialNumber" jdbcType="VARCHAR" />
<collection property="defendants" column="BOOK_APPEAL_ID" ofType="bookDefendant"
<result column="IS_BOOK_GROUP" property="isBookGroup" jdbcType="BIT" />
<collection property="defendants" column="BOOK_APPEAL_ID" ofType="bookDefendant"
select="com.pcloud.book.appeal.dao.impl.BookDefendantDaoImpl.list" />
</resultMap>
......@@ -31,13 +32,13 @@
<insert id="insert" parameterType="bookAppeal" useGeneratedKeys="true" keyProperty="bookAppealId" flushCache="true">
INSERT INTO `BOOK_APPEAL` (
BOOK_ID, CHANNEL_ID, TEMPLET_ID,REASON,DECLARANT, PHONE, APPEAL_SUBMIT_DATE, APPEAL_STATE, AUDIT_REASON, AUDIT_USER,
CREATED_USER,CREATED_DATE,LAST_MODIFIED_USER, LAST_MODIFIED_DATE
CREATED_USER,CREATED_DATE,LAST_MODIFIED_USER, LAST_MODIFIED_DATE, IS_BOOK_GROUP
)
VALUES (
#{bookId, jdbcType=BIGINT}, #{channelId, jdbcType=BIGINT}, #{templetId, jdbcType=BIGINT}, #{reason, jdbcType=VARCHAR}, #{declarant, jdbcType=BIGINT},
#{phone, jdbcType=VARCHAR}, #{appealSubmitDate, jdbcType=TIMESTAMP}, #{appealState, jdbcType=BIGINT}, #{auditReason, jdbcType=VARCHAR},
#{auditUser, jdbcType=BIGINT}, #{createdUser, jdbcType=BIGINT}, NOW(),
#{lastModifiedUser, jdbcType=BIGINT}, NOW()
#{lastModifiedUser, jdbcType=BIGINT}, NOW(), #{isBookGroup, jdbcType=BIT}
)
</insert>
......@@ -82,7 +83,7 @@
<!-- 获取申诉详情 -->
<select id="getById" resultMap="bookAppealMap" parameterType="long">
SELECT
BOOK_APPEAL_ID, PHONE,CHANNEL_ID, DECLARANT,REASON,BOOK_ID,VERSION,APPEAL_STATE,AUDIT_REASON,TEMPLET_ID,CREATED_USER
BOOK_APPEAL_ID, PHONE,CHANNEL_ID, DECLARANT,REASON,BOOK_ID,VERSION,APPEAL_STATE,AUDIT_REASON,TEMPLET_ID,CREATED_USER,IS_BOOK_GROUP
FROM
BOOK_APPEAL A
WHERE
......
......@@ -448,14 +448,15 @@
SELECT
A.BOOK_ID, A.CHANNEL_ID, A.ADVISER_ID, A.IS_MAIN_EDITOR, T.TYPE_CODE, T.TYPE_NAME, B.ISBN, B.BOOK_NAME, B.REMARK,
B.AUTHOR, B.PUBLISH, B.PUBLISH_DATE, B.COVER_IMG, B.ORIGIN_NAME, B.BOOK_PRICE, B.ISSN, B.BOOK_NUM, B.SERIAL_NUMBER,
IF(ISNULL(BF.BOOK_FUND_ID),0,1) IS_FUND_SUPPORT,A.TEMPLET_ID, A.LAST_MODIFIED_DATE, A.BOOK_ADVISER_ID,I.BOOK_STATUS,
CONCAT('BK',A.BOOK_ID) uniqueNumber
IF(ISNULL(BF.BOOK_FUND_ID),0,1) IS_FUND_SUPPORT,A.TEMPLET_ID, if(G.ID IS NULL, A.LAST_MODIFIED_DATE, G.UPDATE_TIME) LAST_MODIFIED_DATE,
A.BOOK_ADVISER_ID,I.BOOK_STATUS, CONCAT('BK',A.BOOK_ID) uniqueNumber, if(G.ID IS NULL, 0, 1) isBookGroup
FROM
BOOK_ADVISER A
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND A.ADVISER_ID = #{adviserId} AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
LEFT JOIN BOOK_TYPE T ON B.TYPE_CODE = T.TYPE_CODE
LEFT JOIN BOOK_FUND BF ON BF.BOOK_ID = A.BOOK_ID AND BF.END_TIME <![CDATA[ > ]]> NOW() AND BF.START_TIME <![CDATA[ < ]]> NOW()
LEFT JOIN book_auth_info I ON I.BOOK_ID = A.BOOK_ID AND I.ADVISER_ID = #{adviserId}
LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0
WHERE
1=1
<if test="bookId!=null">
......@@ -511,7 +512,7 @@
</if>
GROUP BY A.BOOK_ID, A.CHANNEL_ID
ORDER BY
A.LAST_MODIFIED_DATE DESC
LAST_MODIFIED_DATE DESC
<if test="num != null">
LIMIT ${num}
</if>
......@@ -526,7 +527,7 @@
FROM
BOOK_ADVISER A
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND B.IS_DELETE = 0
LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID
LEFT JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0
WHERE
A.ADVISER_ID = #{adviserId} AND A.IS_DELETE = 0 AND G.ID IS NULL
<if test="name != null">
......@@ -548,7 +549,7 @@
G.group_qrcode_name groupQrcodeName
FROM
BOOK_ADVISER A
INNER JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID
INNER JOIN book_group G on G.BOOK_ID = A.BOOK_ID AND G.CHANNEL_ID = A.CHANNEL_ID AND G.CREATE_USER = A.ADVISER_ID AND G.IS_DELETE = 0
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID AND B.IS_DELETE = 0
LEFT JOIN BOOK_TYPE T ON B.TYPE_CODE = T.TYPE_CODE
LEFT JOIN BOOK_FUND BF ON BF.BOOK_ID = A.BOOK_ID AND BF.END_TIME <![CDATA[ > ]]> NOW() AND BF.START_TIME <![CDATA[ < ]]> NOW()
......@@ -586,11 +587,45 @@
AND
BF.BOOK_FUND_ID IS NOT NULL
</if>
<if test="startDate != null and endDate != null">
AND G.create_time BETWEEN #{startDate} AND #{endDate}
</if>
GROUP BY A.BOOK_ID, A.CHANNEL_ID
ORDER BY
G.UPDATE_TIME DESC
</select>
<!-- 获取社群书列表(编辑) -->
<select id="listSimpleBookGroup4Adviser" resultMap="bookMap" parameterType="map">
SELECT
A.BOOK_ID,
A.CHANNEL_ID,
A.ADVISER_ID,
B.ISBN,
B.BOOK_NAME,
CONCAT('BK', A.BOOK_ID) uniqueNumber
FROM
BOOK_ADVISER A
INNER JOIN book_group G ON G.BOOK_ID = A.BOOK_ID
AND G.CHANNEL_ID = A.CHANNEL_ID
AND G.CREATE_USER = A.ADVISER_ID
AND G.IS_DELETE = 0
INNER JOIN BOOK B ON A.BOOK_ID = B.BOOK_ID
AND B.IS_DELETE = 0
WHERE
A.ADVISER_ID = #{adviserId}
AND A.IS_DELETE = 0
<if test="name != null">
AND
(B.BOOK_NAME LIKE CONCAT('%', #{name}, '%') OR G.group_qrcode_name LIKE CONCAT('%', #{name}, '%') OR B.ISBN LIKE CONCAT(#{name},'%') OR CONCAT('BK',A.BOOK_ID) = #{name})
</if>
GROUP BY
A.BOOK_ID,
A.CHANNEL_ID
ORDER BY
G.UPDATE_TIME DESC
</select>
<!-- 获取书籍列表(编辑) -->
<select id="listBook4Adviser" resultMap="bookMap" parameterType="map">
SELECT
......
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