Commit eed61c35 by 杨涛

【ID1001094】

parent 0ae5bbf4
...@@ -3,13 +3,8 @@ package com.pcloud.book.keywords.biz; ...@@ -3,13 +3,8 @@ package com.pcloud.book.keywords.biz;
import com.pcloud.book.keywords.dto.KeywordDTO; import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.dto.KeywordStatisticsDTO; import com.pcloud.book.keywords.dto.KeywordStatisticsDTO;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO; import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import com.pcloud.book.keywords.vo.KeywordVO; import com.pcloud.book.keywords.dto.ServiceResourceDTO;
import com.pcloud.book.keywords.vo.ListKeywordParam; import com.pcloud.book.keywords.vo.*;
import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.keywords.vo.ReplyMessageVO;
import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import java.util.List; import java.util.List;
...@@ -87,6 +82,20 @@ public interface BookKeywordBiz { ...@@ -87,6 +82,20 @@ public interface BookKeywordBiz {
*/ */
PageBeanNew<KeywordStatisticsDTO> getKeywordStatistics(Integer currentPage, Integer numPerPage, Long bookGroupId, String weixinGroupId); PageBeanNew<KeywordStatisticsDTO> getKeywordStatistics(Integer currentPage, Integer numPerPage, Long bookGroupId, String weixinGroupId);
/**
* 获取某个群内关键词配置的所有资源
* @param qrWeixinParam
* @return
*/
List<ServiceResourceDTO> getServiceByWeixinGroup(QrWeixinParam qrWeixinParam,Long classifyId, Long qrcodeId);
ReplyKeywordDTO getReplyKeyword(String content, String weixinGroupId, String wexinGroupName); ReplyKeywordDTO getReplyKeyword(String content, String weixinGroupId, String wexinGroupName);
/**
* 获取现代纸书的资源服务
* @param qrWeixinParam
* @return
*/
List<ServiceResourceDTO> getServiceByChannel(QrWeixinParam qrWeixinParam, Long wechatUserId);
} }
...@@ -28,29 +28,32 @@ import com.pcloud.book.keywords.dao.KeywordDao; ...@@ -28,29 +28,32 @@ import com.pcloud.book.keywords.dao.KeywordDao;
import com.pcloud.book.keywords.dto.KeywordDTO; import com.pcloud.book.keywords.dto.KeywordDTO;
import com.pcloud.book.keywords.dto.KeywordStatisticsDTO; import com.pcloud.book.keywords.dto.KeywordStatisticsDTO;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO; import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import com.pcloud.book.keywords.dto.ServiceResourceDTO;
import com.pcloud.book.keywords.entity.BookKeyword; import com.pcloud.book.keywords.entity.BookKeyword;
import com.pcloud.book.keywords.entity.BookKeywordRecord; import com.pcloud.book.keywords.entity.BookKeywordRecord;
import com.pcloud.book.keywords.entity.Keyword; import com.pcloud.book.keywords.entity.Keyword;
import com.pcloud.book.keywords.enums.ReplyTypeEnum; import com.pcloud.book.keywords.enums.ReplyTypeEnum;
import com.pcloud.book.keywords.vo.KeywordVO; import com.pcloud.book.keywords.vo.*;
import com.pcloud.book.keywords.vo.ListKeywordParam;
import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.channelcenter.base.constants.ChannelEnum; import com.pcloud.channelcenter.base.constants.ChannelEnum;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.channelcenter.qrcode.vo.MessageBookVO;
import com.pcloud.channelcenter.qrcode.vo.QrWeixinParamVO;
import com.pcloud.channelcenter.wechat.dto.AccountSettingDto; import com.pcloud.channelcenter.wechat.dto.AccountSettingDto;
import com.pcloud.common.core.aspect.ParamLog; import com.pcloud.common.core.aspect.ParamLog;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.page.PageParam; import com.pcloud.common.page.PageParam;
import com.pcloud.common.utils.DateUtils; import com.pcloud.common.utils.DateUtils;
import com.pcloud.common.utils.ListUtils; import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.ResponseHandleUtil;
import com.pcloud.common.utils.bean.ResponesUtils;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils; import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import com.pcloud.common.utils.httpclient.UrlUtils; import com.pcloud.common.utils.httpclient.UrlUtils;
import com.pcloud.common.utils.string.StringUtil; import com.pcloud.common.utils.string.StringUtil;
import com.pcloud.resourcecenter.product.dto.ProductDto; import com.pcloud.resourcecenter.product.dto.ProductDto;
import com.pcloud.resourcecenter.product.dto.ProductTypeDto;
import com.pcloud.wechatgroup.group.dto.RobotReplyDTO; import com.pcloud.wechatgroup.group.dto.RobotReplyDTO;
import org.apache.commons.collections.MapUtils;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -59,10 +62,12 @@ import org.springframework.util.CollectionUtils; ...@@ -59,10 +62,12 @@ import org.springframework.util.CollectionUtils;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date; import java.util.Date;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.TreeSet;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import javax.annotation.Resource; import javax.annotation.Resource;
...@@ -102,6 +107,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -102,6 +107,8 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
private BookKeywordWarehouseBiz bookKeywordWarehouseBiz; private BookKeywordWarehouseBiz bookKeywordWarehouseBiz;
@Autowired @Autowired
private BookGroupClassifyDao bookGroupClassifyDao; private BookGroupClassifyDao bookGroupClassifyDao;
@Autowired
private QrcodeSceneService qrcodeSceneService;
@Override @Override
@ParamLog("新增关键词") @ParamLog("新增关键词")
...@@ -489,6 +496,67 @@ public class BookKeywordBizImpl implements BookKeywordBiz { ...@@ -489,6 +496,67 @@ public class BookKeywordBizImpl implements BookKeywordBiz {
return pageBeanNew; return pageBeanNew;
} }
@Override
public List<ServiceResourceDTO> getServiceByWeixinGroup(QrWeixinParam qrWeixinParam,Long classifyId, Long qrcodeId) {
Map<String, Object> map = new HashMap<>();
map.put("bookGroupId", qrWeixinParam.getBookGroupId());
List<ServiceResourceDTO> serviceResourceDTOS = ResponesUtils.list(bookKeywordDao.listBy(map, "getServiceByWeixinGroup"), ServiceResourceDTO.class);
if (ListUtils.isEmpty(serviceResourceDTOS)) {
return new ArrayList<>();
}
for (ServiceResourceDTO serviceResourceDTO : serviceResourceDTOS) {
AccountSettingDto accountSettingDto = qrcodeSceneConsr.getWechatInfo(serviceResourceDTO.getChannelId());
String linkUrl = SendWeixinRequestTools.splitUrlNew(accountSettingDto, serviceResourceDTO.getUrl(), qrWeixinParam.getBookGroupId(), classifyId, qrcodeId);
serviceResourceDTO.setUrl(linkUrl);
}
List<Long> appIds = serviceResourceDTOS.stream().filter(s -> ("APP").equals(s.getTypeCode())).map(ServiceResourceDTO::getFromId).collect(Collectors.toList());
Map<Long, AppDto> appMap = appConsr.getBaseByIds(appIds);
if (!MapUtils.isEmpty(appMap)) {
for (ServiceResourceDTO serviceResourceDTO : serviceResourceDTOS) {
AppDto appDto = appMap.get(serviceResourceDTO.getFromId());
if (appDto != null && serviceResourceDTO.getTypeCode().equals("APP")) {
serviceResourceDTO.setFromType(appDto.getTypeCode());
serviceResourceDTO.setTitle(appDto.getTitle());
serviceResourceDTO.setShortName(appDto.getTypeName());
}
}
}
List<Long> productIds = serviceResourceDTOS.stream().filter(s -> ("PRODUCT").equals(s.getTypeCode())).map(ServiceResourceDTO::getFromId).collect(Collectors.toList());
Map<Long, ProductDto> productMap = productConsr.getProBasesByIds(productIds);
if (!MapUtils.isEmpty(productMap)) {
for (ServiceResourceDTO serviceResourceDTO : serviceResourceDTOS) {
ProductDto productDto = productMap.get(serviceResourceDTO.getFromId());
if (productDto != null && serviceResourceDTO.getTypeCode().equals("PRODUCT")) {
ProductTypeDto productTypeDto = productDto.getProductTypeDto();
if (productTypeDto != null) {
serviceResourceDTO.setFromType(productTypeDto.getTypeCode());
serviceResourceDTO.setTitle(productDto.getProductName());
serviceResourceDTO.setShortName(productTypeDto.getTypeName());
}
}
}
}
if (serviceResourceDTOS != null && !StringUtil.isEmpty(qrWeixinParam.getTypeCode()) && qrWeixinParam.getServeId() != null) {
serviceResourceDTOS.removeIf(vo -> (qrWeixinParam.getTypeCode().equals(vo.getTypeCode()) && qrWeixinParam.getServeId().equals(vo.getFromId())));
}
List<ServiceResourceDTO> uniqueResources = serviceResourceDTOS.stream().collect(
Collectors. collectingAndThen(
Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getFromId() + ";" + o.getTypeCode()))), ArrayList::new)
);
return uniqueResources;
}
@Override
public List<ServiceResourceDTO> getServiceByChannel(QrWeixinParam qrWeixinParam, Long wechatUserId) {
QrWeixinParamVO qrWeixinParamVO = new QrWeixinParamVO();
BeanUtils.copyProperties(qrWeixinParam, qrWeixinParamVO);
List<MessageBookVO> messageBookVOS = ResponseHandleUtil.parseListResponse(qrcodeSceneService.getQrMessage4Book(qrWeixinParamVO, wechatUserId), MessageBookVO.class);
return ResponesUtils.list(messageBookVOS, ServiceResourceDTO.class);
}
@Override @Override
public ReplyKeywordDTO getReplyKeyword(String content, String weixinGroupId, String wexinGroupName) { public ReplyKeywordDTO getReplyKeyword(String content, String weixinGroupId, String wexinGroupName) {
ReplyKeywordDTO replyKeywordDTO = null; ReplyKeywordDTO replyKeywordDTO = null;
......
package com.pcloud.book.keywords.dto;
import com.fasterxml.jackson.annotation.JsonInclude;
import java.io.Serializable;
import java.math.BigDecimal;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* @author 杨涛
* @description 资源服务
* @date 2019/7/17 18:38
*/
@Data
@JsonInclude(JsonInclude.Include.NON_NULL)
public class ServiceResourceDTO implements Serializable {
@ApiModelProperty("标题")
private String title;
@ApiModelProperty("具体类型")
private String fromType;
@ApiModelProperty("来源标识")
private Long fromId;
@ApiModelProperty("封面图")
private String coverImg;
@ApiModelProperty("跳转链接")
private String url;
@ApiModelProperty("短名称")
private String shortName;
@ApiModelProperty("类型(商品或应用)")
private String typeCode;
@ApiModelProperty("关键词")
private String keyword;
@ApiModelProperty("渠道ID")
private Long channelId;
}
package com.pcloud.book.keywords.facade; package com.pcloud.book.keywords.facade;
import com.pcloud.book.keywords.vo.KeywordVO; import com.pcloud.book.keywords.vo.*;
import com.pcloud.book.keywords.vo.ListKeywordParam;
import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException; import com.pcloud.common.permission.PermissionException;
import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -110,6 +106,14 @@ public interface BookKeywordFacade { ...@@ -110,6 +106,14 @@ public interface BookKeywordFacade {
@RequestParam(value = "weixinGroupId",required = false) String weixinGroupId @RequestParam(value = "weixinGroupId",required = false) String weixinGroupId
) throws BizException, PermissionException; ) throws BizException, PermissionException;
@ApiOperation("获取某个群内关键词配置的所有资源")
@ApiImplicitParams({
@ApiImplicitParam(name = "userInfo", value = "Cookie", dataType = "string", paramType = "header"),
@ApiImplicitParam(name = "qrWeixinParam", value = "查询参数", dataType = "QrWeixinParam", paramType = "body") })
@PostMapping("getAllServiceByWeixinGroup4Wechat")
ResponseDto<?> getAllServiceByWeixinGroup4Wechat(@CookieValue("userInfo")String userInfo, @RequestBody QrWeixinParam qrWeixinParam)
throws BizException, PermissionException;
@ApiOperation(value = "根据关键词获取要回复的内容", httpMethod = "GET") @ApiOperation(value = "根据关键词获取要回复的内容", httpMethod = "GET")
@RequestMapping(value = "getReplyKeyword", method = RequestMethod.GET) @RequestMapping(value = "getReplyKeyword", method = RequestMethod.GET)
ResponseDto<String> getReplyKeyword(@RequestParam String content, @RequestParam(value = "weixinGroupId", required = false) String weixinGroupId, ResponseDto<String> getReplyKeyword(@RequestParam String content, @RequestParam(value = "weixinGroupId", required = false) String weixinGroupId,
......
...@@ -4,20 +4,19 @@ import com.alibaba.fastjson.JSONObject; ...@@ -4,20 +4,19 @@ import com.alibaba.fastjson.JSONObject;
import com.pcloud.book.base.exception.BookBizException; import com.pcloud.book.base.exception.BookBizException;
import com.pcloud.book.keywords.biz.BookKeywordBiz; import com.pcloud.book.keywords.biz.BookKeywordBiz;
import com.pcloud.book.keywords.dto.ReplyKeywordDTO; import com.pcloud.book.keywords.dto.ReplyKeywordDTO;
import com.pcloud.book.keywords.dto.ServiceResourceDTO;
import com.pcloud.book.keywords.facade.BookKeywordFacade; import com.pcloud.book.keywords.facade.BookKeywordFacade;
import com.pcloud.book.keywords.vo.KeywordVO; import com.pcloud.book.keywords.vo.*;
import com.pcloud.book.keywords.vo.ListKeywordParam;
import com.pcloud.book.keywords.vo.ListKeywordVO;
import com.pcloud.book.keywords.vo.SetKeywordVO;
import com.pcloud.book.keywords.vo.SetRankVO;
import com.pcloud.book.keywords.vo.UpdateKeywordVO;
import com.pcloud.common.dto.ResponseDto; import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException; import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew; import com.pcloud.common.page.PageBeanNew;
import com.pcloud.common.permission.PermissionException; import com.pcloud.common.permission.PermissionException;
import com.pcloud.common.utils.ListUtils;
import com.pcloud.common.utils.SessionUtil; import com.pcloud.common.utils.SessionUtil;
import com.pcloud.common.utils.cookie.Cookie;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
...@@ -27,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestMethod; ...@@ -27,6 +26,7 @@ import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
import java.util.ArrayList;
import java.util.List; import java.util.List;
import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiOperation;
...@@ -116,6 +116,31 @@ public class BookKeywordFacadeImpl implements BookKeywordFacade { ...@@ -116,6 +116,31 @@ public class BookKeywordFacadeImpl implements BookKeywordFacade {
return new ResponseDto<>(bookKeywordBiz.getKeywordStatistics(currentPage,numPerPage,bookGroupId,weixinGroupId)); return new ResponseDto<>(bookKeywordBiz.getKeywordStatistics(currentPage,numPerPage,bookGroupId,weixinGroupId));
} }
@ApiOperation("获取某个群内关键词配置的所有资源")
@PostMapping("getAllServiceByWeixinGroup4Wechat")
@Override
public ResponseDto<?> getAllServiceByWeixinGroup4Wechat(@CookieValue("userInfo")String userInfo, @RequestBody QrWeixinParam qrWeixinParam)
throws BizException, PermissionException {
Long wechatUserId = Cookie.getId(userInfo, Cookie._WECHAT_USER_ID);
Long sceneId = Cookie.getId(userInfo, Cookie._SCENE_ID);
Long bookGroupId = Cookie.getId(userInfo, Cookie.BOOK_GROUP_ID);
Long classifyId = Cookie.getId(userInfo, Cookie.CLASSIFY_ID);
Long qrcodeId = Cookie.getId(userInfo, Cookie.QRCODE_ID);
qrWeixinParam.setBookGroupId(bookGroupId);
qrWeixinParam.setSceneId(sceneId);
if (qrWeixinParam.getBookGroupId() != null && !qrWeixinParam.getBookGroupId().equals(0L)) {
List<ServiceResourceDTO> result1 = bookKeywordBiz.getServiceByWeixinGroup(qrWeixinParam, classifyId, qrcodeId);
return new ResponseDto<>(ListUtils.isEmpty(result1) ? new ArrayList<>() : result1);
}
if (qrWeixinParam.getSceneId() != null && !qrWeixinParam.getSceneId().equals(0L)) {
List<ServiceResourceDTO> result2 = bookKeywordBiz.getServiceByChannel(qrWeixinParam, wechatUserId);
return new ResponseDto<>(ListUtils.isEmpty(result2) ? new ArrayList<>() : result2);
}
return new ResponseDto<>(new ArrayList<>());
}
@Override @Override
@RequestMapping(value = "getReplyKeyword", method = RequestMethod.GET) @RequestMapping(value = "getReplyKeyword", method = RequestMethod.GET)
public ResponseDto<String> getReplyKeyword(@RequestParam String content, @RequestParam(value = "weixinGroupId", required = false) String weixinGroupId, public ResponseDto<String> getReplyKeyword(@RequestParam String content, @RequestParam(value = "weixinGroupId", required = false) String weixinGroupId,
......
package com.pcloud.book.keywords.vo;
import java.io.Serializable;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
/**
* @author 杨涛
* @description 参数
* @date 2019/7/18 10:48
*/
@ApiModel
public class QrWeixinParam implements Serializable {
@ApiModelProperty("社群ID")
private Long bookGroupId;
@ApiModelProperty("二维码ID")
private Long sceneId;
@ApiModelProperty("服务资源ID")
private Long serveId;
@ApiModelProperty("类型(商品或应用)")
private String typeCode;
public Long getBookGroupId() {
return bookGroupId;
}
public void setBookGroupId(Long bookGroupId) {
this.bookGroupId = bookGroupId;
}
public Long getSceneId() {
return sceneId;
}
public void setSceneId(Long sceneId) {
this.sceneId = sceneId;
}
public Long getServeId() {
return serveId;
}
public void setServeId(Long serveId) {
this.serveId = serveId;
}
public String getTypeCode() {
return typeCode;
}
public void setTypeCode(String typeCode) {
this.typeCode = typeCode;
}
@Override
public String toString() {
return "QrWeixinParam{" +
"bookGroupId=" + bookGroupId +
", sceneId=" + sceneId +
", serveId=" + serveId +
", typeCode='" + typeCode + '\'' +
'}';
}
}
...@@ -261,4 +261,22 @@ ...@@ -261,4 +261,22 @@
ORDER BY ORDER BY
bk.rank ASC,bk.id DESC bk.rank ASC,bk.id DESC
</select> </select>
<select id="getServiceByWeixinGroup" parameterType="map" resultType="com.pcloud.book.keywords.dto.ServiceResourceDTO">
SELECT
t.channel_id as channelId,
t2.pic_url as coverImg,
t2.serve_id as fromId,
t2.serve_type as typeCode,
t2.link_url as url,
t2.keywords as keyword
FROM
book_keyword t
INNER JOIN keyword t2 on t.keyword_id=t2.id
WHERE
t.is_delete = 0
AND t2.is_delete = 0
AND t.book_group_id = #{bookGroupId}
AND t2.reply_type = 4
order by t.create_time desc
</select>
</mapper> </mapper>
\ No newline at end of file
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment