Commit 36e807d6 by 阮思源

解决冲突

parents cb71ee30 864fcd01
...@@ -1116,11 +1116,11 @@ public class BookBizImpl implements BookBiz { ...@@ -1116,11 +1116,11 @@ public class BookBizImpl implements BookBiz {
@Override @Override
public PageBean listPage4Agent(PageParam pageParam, Map<String, Object> paramMap, Long agentId) { public PageBean listPage4Agent(PageParam pageParam, Map<String, Object> paramMap, Long agentId) {
LOGGER.info("书刊列表-出版端,<START>.[paramMap]=" + paramMap + ",agentId" + agentId); LOGGER.info("书刊列表-出版端,<START>.[paramMap]=" + paramMap + ",agentId" + agentId);
List<Long> adviserIds = adviserConsr.getIdsByNameAndAgentId(agentId, (String) paramMap.get("mainEditorName")); List<Long> adviserIds = adviserConsr.getIdsByNameAndAgentId(agentId, (String) paramMap.get("bookName"));
paramMap.put("adviserIds", adviserIds); paramMap.put("adviserIds", adviserIds);
if (ListUtils.isEmpty(adviserIds)) { /*if (ListUtils.isEmpty(adviserIds)) {
return new PageBean(0, 0, new ArrayList<>()); return new PageBean(0, 0, new ArrayList<>());
} }*/
PageBean pageBean = bookDao.listPage(pageParam, paramMap, "listPage4Agent"); PageBean pageBean = bookDao.listPage(pageParam, paramMap, "listPage4Agent");
if (pageBean == null || ListUtils.isEmpty(pageBean.getRecordList())) { if (pageBean == null || ListUtils.isEmpty(pageBean.getRecordList())) {
return new PageBean(); return new PageBean();
......
...@@ -33,15 +33,12 @@ import org.slf4j.LoggerFactory; ...@@ -33,15 +33,12 @@ import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils; import org.springframework.util.CollectionUtils;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Objects; import java.util.Objects;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.ws.rs.HEAD;
/** /**
* @author lily * @author lily
* @date 2019/4/19 17:03 * @date 2019/4/19 17:03
...@@ -142,87 +139,6 @@ public class SendWeixinRequestTools { ...@@ -142,87 +139,6 @@ public class SendWeixinRequestTools {
}*/ }*/
} }
@ParamLog("发送欢迎语消息")
public static void sendGuideMessage(SendGuideMessageDTO dto) {
if (Objects.isNull(dto) || CollectionUtils.isEmpty(dto.getReplyMessages())) {
return;
}
List<ReplyMessageVO> replyMessages = dto.getReplyMessages();
String robotId = dto.getRobotId();
String weixinGroupId = dto.getWeixinGroupId();
Boolean isGroupRobot = dto.getIsGroupRobot();
List<KeywordDTO> keywords = dto.getKeywords();
KeywordStatusDTO keywordStatusDTO = dto.getDto();
GroupClassifyQrcodeDTO classifyQrcodeInfo = dto.getClassifyQrcodeInfo();
String ip = dto.getIp();
Integer code = dto.getCode();
int i = 0;
for (ReplyMessageVO replyMessageVO : replyMessages) {
SendMessageDTO sendMessageDTO = new SendMessageDTO();
BeanUtils.copyProperties(replyMessageVO, sendMessageDTO);
String nickNameStr = getNickNameStr(weixinGroupId);
if(i==0) {
LOGGER.info("发送欢迎语" + nickNameStr);
// if (StringUtils.isNotEmpty(nickNameStr)) {
if (ReplyTypeEnum.TEXT.value.equals(sendMessageDTO.getReplyType())) {
String s = nickNameStr + " " + sendMessageDTO.getContent();
StringBuilder sb = new StringBuilder();
if (!CollectionUtils.isEmpty(keywords) && isGroupRobot) {
sb.append("\n\n本群配有以下资源服务,戳链接立即获取:\n");
List<KeywordDTO> collect = keywords.stream().filter(p -> ReplyTypeEnum.IMAGE.value.equals(p.getReplyType())).collect(Collectors.toList());
// 1001745 包含图片则不合并关键词详情
if (CollectionUtils.isEmpty(collect)){
for (KeywordDTO keyword : keywords) {
if ((s.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 950) {
break;
}
sb.append("【").append(keyword.getKeywords()).append("】\n");
if (ReplyTypeEnum.TEXT.value.equals(keyword.getReplyType())) {
sb.append(" ").append(keyword.getContent()).append("\n");
}
if (ReplyTypeEnum.LINK.value.equals(keyword.getReplyType()) || ReplyTypeEnum.APP.value.equals(keyword.getReplyType())) {
String linkUrl = SendWeixinRequestTools.splitUrlNew(dto.getAccountSettingDto(), keyword.getLinkUrl(), classifyQrcodeInfo.getBookGroupId(), classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getGroupQrcodeId());
sb.append(" ").append(keyword.getDescription()).append(keyword.getContent()).append(UrlUtils.getShortUrl4Own(linkUrl)).append("\n");
}
}
} else {
for (KeywordDTO keyword : keywords) {
if ((s.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 977) {
break;
}
sb.append("【").append(keyword.getKeywords()).append("】");
}
}
}
StringBuilder groupKeyword = getGroupKeyword(keywordStatusDTO, sb);
groupKeyword.append("\n").append("后续也可以回复【】里的关键词,再次领取");
// 1001692 自定义欢迎语+关键词文案,如果超过300字,关键词拆分出来发
if (s.length() + groupKeyword.length() >= 1000) {
sendMessageDTO.setContent(s);
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
sendMessageDTO.setContent(groupKeyword.toString().replaceFirst("\n\n", ""));
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
i++;
continue;
} else {
sendMessageDTO.setContent(s + groupKeyword.toString());
}
} else {
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(nickNameStr);
sendTextMessageVO.setAltId(robotId);
sendTextMessageVO.setWxGroupId(weixinGroupId);
sendTextMessageVO.setIp(ip);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
// }
}
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
i++;
}
}
@ParamLog("推送消息") @ParamLog("推送消息")
private static void sendMessage(SendMessageDTO sendMessageDTO, String robotId, String weixinGroupId, String ip, Integer code) { private static void sendMessage(SendMessageDTO sendMessageDTO, String robotId, String weixinGroupId, String ip, Integer code) {
if (ReplyTypeEnum.TEXT.value.equals(sendMessageDTO.getReplyType())) { if (ReplyTypeEnum.TEXT.value.equals(sendMessageDTO.getReplyType())) {
...@@ -428,35 +344,41 @@ public class SendWeixinRequestTools { ...@@ -428,35 +344,41 @@ public class SendWeixinRequestTools {
content.append("本群目的为学习交流和学习辅导,线上资源和工具为图书的增值服务,可根据实际情况配合图书一起使用。"); content.append("本群目的为学习交流和学习辅导,线上资源和工具为图书的增值服务,可根据实际情况配合图书一起使用。");
} }
StringBuilder sb = new StringBuilder(); StringBuilder sb = new StringBuilder();
if (!CollectionUtils.isEmpty(keywords) && isGroupRobot) { boolean isOld = true;
sb.append("\n\n本群配有以下资源服务,戳链接立即获取:\n"); boolean haveKeyword = !CollectionUtils.isEmpty(keywords) && isGroupRobot;
List<KeywordDTO> collect = keywords.stream().filter(p -> ReplyTypeEnum.IMAGE.value.equals(p.getReplyType())).collect(Collectors.toList()); if (haveKeyword) {
// 1001745 包含图片则不合并关键词详情 List<KeywordDTO> collect = keywords.stream()
.filter(p -> (ReplyTypeEnum.IMAGE.value.equals(p.getReplyType()) || ReplyTypeEnum.TEXT.value.equals(p.getReplyType())))
.collect(Collectors.toList());
// 1001745 包含图片和文字则不合并关键词详情,其他情况走之前的模式
if (CollectionUtils.isEmpty(collect)){ if (CollectionUtils.isEmpty(collect)){
isOld = false;
sb.append("\n\n本群配有以下资源服务,戳链接立即获取:\n");
for (KeywordDTO keyword : keywords) { for (KeywordDTO keyword : keywords) {
if ((content.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 950) { if (sb.length() + (keyword.getKeywords() + "\n").length() >= 830) {
break; break;
} }
sb.append("【").append(keyword.getKeywords()).append("】\n"); sb.append("【").append(keyword.getKeywords()).append("】\n");
if (ReplyTypeEnum.TEXT.value.equals(keyword.getReplyType())) {
sb.append(" ").append(keyword.getContent()).append("\n");
}
if (ReplyTypeEnum.LINK.value.equals(keyword.getReplyType()) || ReplyTypeEnum.APP.value.equals(keyword.getReplyType())) { if (ReplyTypeEnum.LINK.value.equals(keyword.getReplyType()) || ReplyTypeEnum.APP.value.equals(keyword.getReplyType())) {
String linkUrl = SendWeixinRequestTools.splitUrlNew(dto.getAccountSettingDto(), keyword.getLinkUrl(), classifyQrcodeInfo.getBookGroupId(), classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getGroupQrcodeId()); String linkUrl = SendWeixinRequestTools.splitUrlNew(dto.getAccountSettingDto(), keyword.getLinkUrl(), classifyQrcodeInfo.getBookGroupId(), classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getGroupQrcodeId());
sb.append(" ").append(keyword.getDescription()).append(keyword.getContent()).append(UrlUtils.getShortUrl4Own(linkUrl)).append("\n"); sb.append(" ").append(keyword.getContent()).append(UrlUtils.getShortUrl4Own(linkUrl)).append("\n\n");
} }
} }
} else { } else {
sb.append("\n\n在群内回复以下关键词,领取任务或资源:\n");
for (KeywordDTO keyword : keywords) { for (KeywordDTO keyword : keywords) {
if ((content.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 977) { if ((content.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 922) {
break; break;
} }
sb.append("【").append(keyword.getKeywords()).append("】"); sb.append("【").append(keyword.getKeywords()).append("】");
} }
} }
} }
StringBuilder groupKeyword = getGroupKeyword(keywordStatusDTO, sb); // 运营关键词
groupKeyword.append("\n").append("后续也可以回复【】里的关键词,再次领取"); StringBuilder groupKeyword = getGroupKeyword(keywordStatusDTO, sb, isOld);
if (haveKeyword && !isOld) {
groupKeyword.append("后续也可以回复【】里的关键词,再次领取");
}
// 1001692 自定义欢迎语+关键词文案,如果超过300字,关键词拆分出来发 // 1001692 自定义欢迎语+关键词文案,如果超过300字,关键词拆分出来发
if ((content.length() + sb.length()) >= 1000) { if ((content.length() + sb.length()) >= 1000) {
sendTextMessage(content.toString(), robotId, weixinGroupId, ip); sendTextMessage(content.toString(), robotId, weixinGroupId, ip);
...@@ -466,18 +388,125 @@ public class SendWeixinRequestTools { ...@@ -466,18 +388,125 @@ public class SendWeixinRequestTools {
} }
} }
private static StringBuilder getGroupKeyword(KeywordStatusDTO dto, StringBuilder sb) { @ParamLog("发送欢迎语消息")
public static void sendGuideMessage(SendGuideMessageDTO dto) {
if (Objects.isNull(dto) || CollectionUtils.isEmpty(dto.getReplyMessages())) {
return;
}
List<ReplyMessageVO> replyMessages = dto.getReplyMessages();
String robotId = dto.getRobotId();
String weixinGroupId = dto.getWeixinGroupId();
Boolean isGroupRobot = dto.getIsGroupRobot();
List<KeywordDTO> keywords = dto.getKeywords();
KeywordStatusDTO keywordStatusDTO = dto.getDto();
GroupClassifyQrcodeDTO classifyQrcodeInfo = dto.getClassifyQrcodeInfo();
String ip = dto.getIp();
Integer code = dto.getCode();
int i = 0;
for (ReplyMessageVO replyMessageVO : replyMessages) {
SendMessageDTO sendMessageDTO = new SendMessageDTO();
BeanUtils.copyProperties(replyMessageVO, sendMessageDTO);
String nickNameStr = getNickNameStr(weixinGroupId);
if(i == 0) {
LOGGER.info("发送欢迎语" + nickNameStr);
// if (StringUtils.isNotEmpty(nickNameStr)) {
if (ReplyTypeEnum.TEXT.value.equals(sendMessageDTO.getReplyType())) {
String s = nickNameStr + " " + sendMessageDTO.getContent();
StringBuilder sb = new StringBuilder();
boolean isOld = true;
boolean haveKeyword = !CollectionUtils.isEmpty(keywords) && isGroupRobot;
if (haveKeyword) {
List<KeywordDTO> collect = keywords.stream()
.filter(p -> (ReplyTypeEnum.IMAGE.value.equals(p.getReplyType()) || ReplyTypeEnum.TEXT.value.equals(p.getReplyType())))
.collect(Collectors.toList());
// 1001745 包含图片则不合并关键词详情
if (CollectionUtils.isEmpty(collect)){
isOld = false;
sb.append("\n\n本群配有以下资源服务,戳链接立即获取:\n");
for (KeywordDTO keyword : keywords) {
if (sb.length() + (keyword.getKeywords() + "\n").length() >= 850) {
break;
}
sb.append("【").append(keyword.getKeywords()).append("】\n");
if (ReplyTypeEnum.LINK.value.equals(keyword.getReplyType()) || ReplyTypeEnum.APP.value.equals(keyword.getReplyType())) {
String linkUrl = SendWeixinRequestTools.splitUrlNew(dto.getAccountSettingDto(), keyword.getLinkUrl(), classifyQrcodeInfo.getBookGroupId(), classifyQrcodeInfo.getClassifyId(), classifyQrcodeInfo.getGroupQrcodeId());
sb.append(" ").append(keyword.getDescription()).append(keyword.getContent()).append(UrlUtils.getShortUrl4Own(linkUrl)).append("\n\n");
}
}
} else {
sb.append("\n\n在群内回复以下关键词,领取任务或资源:\n");
for (KeywordDTO keyword : keywords) {
if ((s.length() + sb.length()) >= 1000 && (sb.length() + (keyword.getKeywords() + "\n").length()) >= 922) {
break;
}
sb.append("【").append(keyword.getKeywords()).append("】");
}
}
}
StringBuilder groupKeyword = getGroupKeyword(keywordStatusDTO, sb, isOld);
if (haveKeyword && !isOld) {
groupKeyword.append("后续也可以回复【】里的关键词,再次领取");
}
// 1001692 自定义欢迎语+关键词文案,如果超过300字,关键词拆分出来发
if (s.length() + groupKeyword.length() >= 1000) {
sendMessageDTO.setContent(s);
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
sendMessageDTO.setContent(groupKeyword.toString().replaceFirst("\n\n", ""));
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
i++;
continue;
} else {
sendMessageDTO.setContent(s + groupKeyword.toString());
}
} else {
SendTextMessageVO sendTextMessageVO = new SendTextMessageVO();
sendTextMessageVO.setContent(nickNameStr);
sendTextMessageVO.setAltId(robotId);
sendTextMessageVO.setWxGroupId(weixinGroupId);
sendTextMessageVO.setIp(ip);
WxGroupSDK.sendTextMessage(sendTextMessageVO);
}
// }
}
sendMessage(sendMessageDTO, robotId, weixinGroupId, ip, code);
i++;
}
}
/**
* 组装群运营关键词
* @param dto 运营关键词相关参数
* @param sb 推送内容
* @param isOld 包含图片或者文字走旧流程就不包含描述,否则加描述
* @return 最终发送内容
*/
private static StringBuilder getGroupKeyword(KeywordStatusDTO dto, StringBuilder sb, Boolean isOld) {
if (!sb.toString().contains("【") && (dto.getClockOpen() || dto.getRiddleOpen() || dto.getReportOpen())) { if (!sb.toString().contains("【") && (dto.getClockOpen() || dto.getRiddleOpen() || dto.getReportOpen())) {
sb.append("\n\n在群内回复以下关键词:\n"); sb.append("\n\n在群内回复以下关键词:\n");
} }
if (dto.getReportOpen()) { if (dto.getReportOpen()) {
sb.append("【学习报告】"); sb.append("【学习报告】");
if (!isOld) {
sb.append("\n回复学习报告,获取个人学习报告,与群成员PK元气值\n\n");
}
} }
if (dto.getRiddleOpen()) { if (dto.getRiddleOpen()) {
if (!isOld && !sb.toString().contains("【学习报告】")) {
sb.append("\n");
}
sb.append("【猜谜语】"); sb.append("【猜谜语】");
if (!isOld) {
sb.append("\n回复猜谜语,开启群游戏,连续答对5题,所有群成员可获得精美礼券\n\n");
}
} }
if (dto.getClockOpen()) { if (dto.getClockOpen()) {
if (!isOld && !sb.toString().contains("【学习报告】") && !sb.toString().contains("【猜谜语】")) {
sb.append("\n");
}
sb.append("【").append(dto.getClockKeyword()).append("】"); sb.append("【").append(dto.getClockKeyword()).append("】");
if (!isOld) {
sb.append("\n").append(dto.getClockGuide()).append("\n\n");
}
} }
return sb; return sb;
} }
...@@ -488,12 +517,11 @@ public class SendWeixinRequestTools { ...@@ -488,12 +517,11 @@ public class SendWeixinRequestTools {
int i = 0; int i = 0;
List<String> names = new ArrayList<>(); List<String> names = new ArrayList<>();
Set<Map.Entry<String, Integer>> entries = nickNames.entrySet(); Set<Map.Entry<String, Integer>> entries = nickNames.entrySet();
for (Iterator<Map.Entry<String, Integer>> iterator = entries.iterator(); iterator.hasNext(); ) { for (Map.Entry<String, Integer> stringIntegerEntry : entries) {
if (i == 5) { if (i == 5) {
break; break;
} }
Map.Entry<String, Integer> entry = iterator.next(); String key = stringIntegerEntry.getKey();
String key = entry.getKey();
names.add(key); names.add(key);
i++; i++;
} }
......
...@@ -431,9 +431,10 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -431,9 +431,10 @@ public class BookGuideBizImpl implements BookGuideBiz {
@ParamLog("推关学习报告/猜谜语关键词消息") @ParamLog("推关学习报告/猜谜语关键词消息")
private KeywordStatusDTO pushLearningReport(GroupClassifyQrcodeDTO classifyQrcodeInfo, String robotId, String weixinGroupId, String ip) { private KeywordStatusDTO pushLearningReport(GroupClassifyQrcodeDTO classifyQrcodeInfo, String robotId, String weixinGroupId, String ip) {
Boolean reportOpen = false; boolean reportOpen = false;
Boolean riddleOpen = false; boolean riddleOpen = false;
Boolean clockOpen = false; boolean clockOpen = false;
KeywordStatusDTO dto = new KeywordStatusDTO();
if (classifyQrcodeInfo.getHasOpenLearningReport() != null && classifyQrcodeInfo.getHasOpenLearningReport()) { if (classifyQrcodeInfo.getHasOpenLearningReport() != null && classifyQrcodeInfo.getHasOpenLearningReport()) {
reportOpen = true; reportOpen = true;
} }
...@@ -444,12 +445,12 @@ public class BookGuideBizImpl implements BookGuideBiz { ...@@ -444,12 +445,12 @@ public class BookGuideBizImpl implements BookGuideBiz {
WeixinClockDto weixinClockDto = weixinClockGroupClassifyDao.getClockBaseInfoByClassify(classifyQrcodeInfo.getClassifyId()); WeixinClockDto weixinClockDto = weixinClockGroupClassifyDao.getClockBaseInfoByClassify(classifyQrcodeInfo.getClassifyId());
if (null != weixinClockDto && !StringUtil.isEmpty(weixinClockDto.getClockGuide()) && !StringUtil.isEmpty(weixinClockDto.getClockKeyword())) { if (null != weixinClockDto && !StringUtil.isEmpty(weixinClockDto.getClockGuide()) && !StringUtil.isEmpty(weixinClockDto.getClockKeyword())) {
clockOpen = true; clockOpen = true;
dto.setClockGuide(weixinClockDto.getClockGuide());
dto.setClockKeyword(weixinClockDto.getClockKeyword());
} }
KeywordStatusDTO dto = new KeywordStatusDTO();
dto.setReportOpen(reportOpen); dto.setReportOpen(reportOpen);
dto.setRiddleOpen(riddleOpen); dto.setRiddleOpen(riddleOpen);
dto.setClockOpen(clockOpen); dto.setClockOpen(clockOpen);
dto.setClockKeyword(null == weixinClockDto ? StringUtil.EMPTY : weixinClockDto.getClockKeyword());
return dto; return dto;
// if (reportOpen && riddleOpen && clockOpen) { // if (reportOpen && riddleOpen && clockOpen) {
// SendWeixinRequestTools.sendTextMessage("关键词【学习报告】\n 获取个人专属学习报告,与群成员PK元气值\n" + // SendWeixinRequestTools.sendTextMessage("关键词【学习报告】\n 获取个人专属学习报告,与群成员PK元气值\n" +
......
...@@ -23,4 +23,9 @@ public class KeywordStatusDTO { ...@@ -23,4 +23,9 @@ public class KeywordStatusDTO {
*/ */
private String clockKeyword; private String clockKeyword;
/**
* 打卡引导语
*/
private String clockGuide;
} }
...@@ -637,6 +637,8 @@ ...@@ -637,6 +637,8 @@
AND b.IS_DELETE = 0 AND b.IS_DELETE = 0
AND bg.IS_DELETE = 0 AND bg.IS_DELETE = 0
AND bgc.is_delete = 0 AND bgc.is_delete = 0
AND b.BOOK_NAME NOT LIKE CONCAT('%','红榜','%')
AND CHAR_LENGTH(b.BOOK_NAME)>=8
GROUP BY b.BOOK_ID GROUP BY b.BOOK_ID
ORDER BY bg.create_time DESC ORDER BY bg.create_time DESC
</select> </select>
...@@ -1073,11 +1075,6 @@ ...@@ -1073,11 +1075,6 @@
BOOK B BOOK B
ON ON
A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0 A.BOOK_ID = B.BOOK_ID AND A.IS_DELETE = 0 AND B.IS_DELETE = 0
AND
A.ADVISER_ID IN
<foreach collection="adviserIds" index="i" item="item" open="(" separator="," close=")">
${item}
</foreach>
AND A.IS_MAIN_EDITOR = 1 AND A.IS_MAIN_EDITOR = 1
LEFT JOIN LEFT JOIN
BOOK_TYPE T BOOK_TYPE T
...@@ -1098,8 +1095,16 @@ ...@@ -1098,8 +1095,16 @@
A.CHANNEL_ID = #{channelId} A.CHANNEL_ID = #{channelId}
</if> </if>
<if test="bookName!=null"> <if test="bookName!=null">
AND AND (B.BOOK_NAME LIKE CONCAT('%',#{bookName},'%')
B.BOOK_NAME LIKE CONCAT('%',#{bookName},'%') OR B.ISBN LIKE CONCAT(#{bookName},'%')
<if test="adviserIds!=null and adviserIds.size()>0">
OR
A.ADVISER_ID in
<foreach collection="adviserIds" item="item" open="(" separator="," close=")">
${item}
</foreach>
</if>
)
</if> </if>
<if test="isbn!=null"> <if test="isbn!=null">
AND AND
......
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