Commit 83d4657d by 朱亚洁

feat:[1005260]小睿H5关注公众号弹窗

parent 726bf035
......@@ -12,8 +12,10 @@ import com.pcloud.channelcenter.qrcode.dto.GroupQrcodeVO;
import com.pcloud.channelcenter.qrcode.dto.OwnMessageDTO;
import com.pcloud.channelcenter.qrcode.dto.QrcodeSceneDto;
import com.pcloud.channelcenter.qrcode.entity.QrcodeScene;
import com.pcloud.channelcenter.qrcode.entity.QrcodeTemp;
import com.pcloud.channelcenter.qrcode.service.QrcodeLocationAssocService;
import com.pcloud.channelcenter.qrcode.service.QrcodeSceneService;
import com.pcloud.channelcenter.qrcode.service.QrcodeTempService;
import com.pcloud.channelcenter.qrcode.vo.BookAssocLastQrAskVO;
import com.pcloud.channelcenter.qrcode.vo.BookAssocLastQrVO;
import com.pcloud.channelcenter.qrcode.vo.BookAssocQRcountRequestVO;
......@@ -70,7 +72,8 @@ public class QrcodeSceneConsr {
private AccountSettingService accountSettingService;
@Autowired
private QrcodeLocationAssocService qrcodeLocationAssocService;
@Autowired
private QrcodeTempService qrcodeTempService;
/**
......@@ -622,4 +625,20 @@ public class QrcodeSceneConsr {
return accountSetting;
}
public String createTempQrcode4H5(Long accountSettingId, Long wechatUserId) {
LOGGER.info("H5创建公众号临时二维码,accountSettingId={},wechatUserId={}",accountSettingId, wechatUserId);
String qrcode = "";
if (null == accountSettingId || null == wechatUserId) {
return qrcode;
}
QrcodeTemp qrcodeTemp = new QrcodeTemp();
qrcodeTemp.setAccountSettingId(accountSettingId);
qrcodeTemp.setCreatedUser(wechatUserId);
try {
qrcode = ResponseHandleUtil.parseResponse(qrcodeTempService.createTempQrcode4H5(qrcodeTemp), String.class);
} catch (Exception e) {
LOGGER.error("H5创建公众号临时二维码失败"+e.getMessage(), e);
}
return qrcode;
}
}
......@@ -401,4 +401,12 @@ public interface ResourcePageBiz {
* * @param null
*/
List<BookServeDTO> getBookAllServeIdsIncludeUrl(Long adviserId, Long bookId, Long channelId);
/**
* 客户端-根据页面id查要弹出的二维码
* @author:zhuyajie
* @date:2021/8/23 17:31
* * @param null
*/
ResourcePageItemVO getPopupQrcode4Wechat(Long resourcePageId, Long wechatUserId);
}
......@@ -24,7 +24,6 @@ import com.pcloud.book.consumer.advsertising.AdvertisingConsr;
import com.pcloud.book.consumer.analysisengine.BrowseRecordConsr;
import com.pcloud.book.consumer.app.AppConsr;
import com.pcloud.book.consumer.channel.QrcodeSceneConsr;
import com.pcloud.book.consumer.label.LabelConsr;
import com.pcloud.book.consumer.raystask.AdviserTaskConsr;
import com.pcloud.book.consumer.reader.ReaderConsr;
import com.pcloud.book.consumer.resource.ProductConsr;
......@@ -440,6 +439,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
if (typeCodes.contains(itemVO.getServeType()) && StringUtil.isEmpty(itemVO.getLinkUrl())) {
throw new BookBizException(BookBizException.PARAM_IS_NULL, "缺少资源链接");
}
if (ResourcePageConstants.ServeTypeEnum.OFFICIAL_ACCOUNT.getValue().equals(itemVO.getServeType())) {
if (null == itemVO.getQrcodeShowType()) {
//默认类型:平铺
itemVO.setQrcodeShowType(ResourcePageConstants.QrcodeShowTypeEnum.TILED.getCode());
}
}
}
}
......@@ -462,13 +467,50 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
@ParamLog("生成公众号码")
private void createOfficialAccountUrl(Long resourcePageColumnId, UpdateResourceColumnVO updateResourceColumnVO) {
String qrcodeUrl;
String url = null;
ResourcePageItemVO itemVO = updateResourceColumnVO.getItemVOList().get(0);
ResourcePage resourcePage = resourcePageDao.getById(updateResourceColumnVO.getResourcePageId());
if (null == resourcePage) {
return;
}
if (ResourcePageConstants.QrcodeShowTypeEnum.TILED.getCode().equals(itemVO.getQrcodeShowType())) {
//平铺方式
createTiledQrcode(resourcePage, updateResourceColumnVO, resourcePageColumnId);
} else {
//弹窗方式
Long officialAccountsId;
ResourcePageItem item = new ResourcePageItem();
item.setResourcePageColumnId(resourcePageColumnId);
item.setResourcePageId(updateResourceColumnVO.getResourcePageId());
item.setCreateUser(updateResourceColumnVO.getCreateUser());
item.setLogoUrl(itemVO.getLogoUrl());
item.setGuideContent(itemVO.getGuideContent());
item.setServeType(ResourcePageConstants.ServeTypeEnum.OFFICIAL_ACCOUNT.getValue());
item.setSeqNum(1);
item.setIsShow(true);
item.setQrcodeSource(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value);
if (null == itemVO.getAccountSettingId()) {
officialAccountsId = BookProps.getOperateOfficalId();
} else {
officialAccountsId = itemVO.getAccountSettingId();
}
item.setServeId(officialAccountsId);
item.setAccountSettingId(officialAccountsId);
item.setLinkUrl(null);
item.setQrcodeShowType(itemVO.getQrcodeShowType());
resourcePageItemDao.insert(item);
}
}
/**
* 公众号二维码-平铺方式
* @author:zhuyajie
* @date:2021/8/23 15:50
* * @param null
*/
private void createTiledQrcode(ResourcePage resourcePage, UpdateResourceColumnVO updateResourceColumnVO, Long resourcePageColumnId) {
String qrcodeUrl;
String url = null;
ResourcePageItemVO itemVO = updateResourceColumnVO.getItemVOList().get(0);
Long officialSceneId = resourcePage.getOfficialSceneId();
if(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value.equals(itemVO.getQrcodeSource())){
if (null == officialSceneId) {
......@@ -508,19 +550,31 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
item.setIsShow(true);
item.setServeId(officialSceneId);
item.setQrcodeSource(itemVO.getQrcodeSource() == null ? ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value : itemVO.getQrcodeSource());
if (!StringUtil.isEmpty(itemVO.getLogoUrl())) {
//生成黑白logo二维码
try {
qrcodeUrl = QrcodeUtils.createLogoQr(url, itemVO.getLogoUrl(), 0xFF000000, 1);
} catch (BizException e) {
log.error("生成黑白logo二维码失败"+e.getMessage(), e);
}
}
qrcodeUrl = this.getLogoQrcode(url, itemVO.getLogoUrl(), qrcodeUrl);
item.setLinkUrl(qrcodeUrl);
resourcePageItemDao.insert(item);
}
/**
* 生成带logo的二维码
* @author:zhuyajie
* @date:2021/8/23 15:43
* * @param null
*/
private String getLogoQrcode(String url, String logoUrl, String qrcodeUrl) {
if (StringUtil.isEmpty(logoUrl) || StringUtil.isEmpty(qrcodeUrl) || StringUtil.isEmpty(url)) {
return qrcodeUrl;
}
//生成黑白logo二维码
try {
qrcodeUrl = QrcodeUtils.createLogoQr(url, logoUrl, 0xFF000000, 1);
} catch (BizException e) {
log.error("生成黑白logo二维码失败"+e.getMessage(), e);
}
return qrcodeUrl;
}
/**
* 生成公众号二维码
* @author:zhuyajie
* @date:2021/4/13 10:14
......@@ -862,16 +916,35 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
if (ListUtils.isEmpty(itemVOS)) {
return;
}
List<ResourcePageItemVO> removeList = new ArrayList<>();
for (ResourcePageItemVO itemVO : itemVOS) {
//带logo的二维码
itemVO.setResultUrl(itemVO.getLinkUrl());
itemVO.setTypeName("公众号");
//原始二维码
if(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value.equals(itemVO.getQrcodeSource())){
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(itemVO.getServeId());
itemVO.setLinkUrl(qrcodeSceneDto.getQrcodeUrl());
if (ResourcePageConstants.QrcodeShowTypeEnum.TILED.getCode().equals(itemVO.getQrcodeShowType())) {
//平铺方式
itemVO.setResultUrl(itemVO.getLinkUrl());
//原始二维码
if(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value.equals(itemVO.getQrcodeSource())){
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(itemVO.getServeId());
itemVO.setLinkUrl(qrcodeSceneDto.getQrcodeUrl());
}
} else {
//弹窗方式,在客户端栏目中不展示
if (isWechat) {
removeList.add(itemVO);
continue;
}
Long accountSettingId = itemVO.getAccountSettingId();
if (null == accountSettingId) {
accountSettingId = BookProps.getOperateOfficalId();
itemVO.setAccountSettingId(accountSettingId);
}
AccountSetting accountSetting = qrcodeSceneConsr.getAppInfo(accountSettingId);
itemVO.setAccountSettingName(null == accountSetting?null:accountSetting.getBaseAppName());
}
}
if (!ListUtils.isEmpty(removeList)) {
itemVOS.removeAll(removeList);
}
}
@ParamLog("填充应用作品")
......@@ -2047,4 +2120,37 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
}
}
}
@Override
public ResourcePageItemVO getPopupQrcode4Wechat(Long resourcePageId, Long wechatUserId) {
ResourcePageItemVO pageItemVO = resourcePageItemDao.getPopupQrcodeItem(resourcePageId);
if (null == pageItemVO) {
return new ResourcePageItemVO();
}
String logoUrl = pageItemVO.getLogoUrl();
Long accountSettingId = pageItemVO.getAccountSettingId();
if (null == accountSettingId) {
accountSettingId = BookProps.getOperateOfficalId();
}
String qrcodeUrl = qrcodeSceneConsr.createTempQrcode4H5(accountSettingId, wechatUserId);
if (!StringUtil.isEmpty(qrcodeUrl) && !StringUtil.isEmpty(logoUrl)) {
//添加Logo
String url="";
String tmpDirPath = FileUtil.getTmpDirPath();
if (!tmpDirPath.endsWith(File.separator)) {
tmpDirPath = tmpDirPath + File.separator;
}
File file = FileUtil.touch(tmpDirPath + UUIDUitl.generateShort() + ".png");
HttpUtil.downloadFile(qrcodeUrl, file);
try {
url = QrCodeUtil.decode(file);
} catch (QrCodeException e){
log.info("解析二维码图片失败,qrcodeUrl:{}", qrcodeUrl);
}
qrcodeUrl = this.getLogoQrcode(url, logoUrl, qrcodeUrl);
}
pageItemVO.setResultUrl(qrcodeUrl);
return pageItemVO;
}
}
......@@ -329,4 +329,29 @@ public class ResourcePageConstants {
}
}
/**
* H5-公众号二维码展示方式
* @author:zhuyajie
* @date:2021/8/23 15:14
* * @param null
*/
public enum QrcodeShowTypeEnum{
//1平铺2弹窗
TILED(1),
POPUP(2);
private Integer code;
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
QrcodeShowTypeEnum(Integer code) {
this.code = code;
}
}
}
......@@ -122,4 +122,12 @@ public interface ResourcePageItemDao extends BaseDao<ResourcePageItem>{
* * @param null
*/
List<BookServeDTO> getBookAllServeIds(Long adviserId, Long bookId, Long channelId);
/**
* 配置的弹窗类型公众号
* @author:zhuyajie
* @date:2021/8/23 17:52
* * @param null
*/
ResourcePageItemVO getPopupQrcodeItem(Long resourcePageId);
}
\ No newline at end of file
......@@ -122,4 +122,9 @@ public class ResourcePageItemDaoImpl extends BaseDaoImpl<ResourcePageItem> imple
map.put("channelId", channelId);
return getSessionTemplate().selectList(getStatement("getBookAllServeIds"), map);
}
@Override
public ResourcePageItemVO getPopupQrcodeItem(Long resourcePageId) {
return getSessionTemplate().selectOne(getStatement("getPopupQrcodeItem"), resourcePageId);
}
}
......@@ -64,4 +64,12 @@ public class ResourcePageItem extends BaseEntity {
* 二维码来源
*/
private Integer qrcodeSource;
/**
* 二维码展示方式(1平铺2弹窗)
*/
private Integer qrcodeShowType;
/**
* 二维码公众号id
*/
private Long accountSettingId;
}
......@@ -278,4 +278,12 @@ public class ResourcePageFacade {
resourcePageBiz.updateRecommendResource4Pcloud(resourceRecomManage);
return new ResponseDto<>();
}
@ApiOperation("客户端-根据页面id查要弹出的二维码")
@GetMapping("getPopupQrcode4Wechat")
public ResponseDto<?> getPopupQrcode4Wechat(@CookieValue("userInfo") String userInfo,
@RequestParam("resourcePageId") Long resourcePageId){
Long wechatUserId = Cookie.getId(userInfo,Cookie._WECHAT_USER_ID);
return new ResponseDto<>(resourcePageBiz.getPopupQrcode4Wechat(resourcePageId, wechatUserId));
}
}
......@@ -106,4 +106,16 @@ public class ResourcePageItemVO extends BaseDto{
private String qrcodeType;
private Integer jumpType;
/**
* 二维码展示方式(1平铺2弹窗)
*/
private Integer qrcodeShowType;
/**
* 二维码公众号id
*/
private Long accountSettingId;
/**
* 二维码公众号名称
*/
private String accountSettingName;
}
......@@ -17,13 +17,20 @@
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="createUser" column="create_user" jdbcType="INTEGER"/>
<result property="qrcodeSource" column="qrcode_source" jdbcType="INTEGER"/>
<result property="qrcodeShowType" column="qrcode_show_type" jdbcType="INTEGER"/>
<result property="accountSettingId" column="account_setting_id" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_Column_List">
id, resource_page_id, resource_page_column_id, serve_id, serve_type, link_url, type_code, seq_num, is_show,
guide_content, logo_url, create_time, qrcode_source, qrcode_show_type, account_setting_id
</sql>
<!--查询单个-->
<select id="getById" resultMap="ResourcePageItemMap">
select
id, resource_page_id, resource_page_column_id, serve_id, serve_type, link_url, type_code, seq_num, is_show,
guide_content, logo_url, create_time
<include refid="Base_Column_List"/>
from book.resource_page_item
where id = #{id}
</select>
......@@ -31,20 +38,22 @@
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into book.resource_page_item(resource_page_id, resource_page_column_id, serve_id, serve_type, link_url, type_code,
seq_num, is_show, guide_content, logo_url, create_time, update_time, create_user, qrcode_source)
seq_num, is_show, guide_content, logo_url, create_time, update_time, create_user, qrcode_source,
qrcode_show_type, account_setting_id)
values (#{resourcePageId}, #{resourcePageColumnId}, #{serveId}, #{serveType}, #{linkUrl}, #{typeCode},
#{seqNum}, #{isShow}, #{guideContent}, #{logoUrl}, now(), now(), #{createUser}, #{qrcodeSource})
#{seqNum}, #{isShow}, #{guideContent}, #{logoUrl}, now(), now(), #{createUser}, #{qrcodeSource},
#{qrcodeShowType}, #{accountSettingId})
</insert>
<insert id="batchInsert" keyProperty="id" useGeneratedKeys="true">
insert into book.resource_page_item(resource_page_id, resource_page_column_id, serve_id, serve_type,
link_url, type_code, seq_num, is_show, guide_content, logo_url,
create_time, update_time, create_user, qrcode_source)
create_time, update_time, create_user, qrcode_source, qrcode_show_type, account_setting_id)
values
<foreach collection="list" separator="," index="index" item="item">
(#{item.resourcePageId}, #{item.resourcePageColumnId}, #{item.serveId}, #{item.serveType},
#{item.linkUrl}, #{item.typeCode}, #{item.seqNum}, #{item.isShow}, #{item.guideContent}, #{item.logoUrl},
now(), now(), #{item.createUser}, #{item.qrcodeSource})
now(), now(), #{item.createUser}, #{item.qrcodeSource}, #{item.qrcodeShowType}, #{item.accountSettingId})
</foreach>
</insert>
......@@ -110,7 +119,9 @@
guide_content guideContent,
qrcode_source qrcodeSource,
create_user createUser,
seq_num seqNum
seq_num seqNum,
qrcode_show_type qrcodeShowType,
account_setting_id accountSettingId
FROM
resource_page_item
WHERE
......@@ -318,4 +329,29 @@
i.serve_type,
i.serve_id
</select>
<select id="getPopupQrcodeItem" resultType="com.pcloud.book.group.vo.ResourcePageItemVO" parameterType="map">
SELECT
id,
serve_id serveId,
serve_type serveType,
link_url linkUrl,
resource_page_column_id resourcePageColumnId,
type_code typeCode,
logo_url logoUrl,
guide_content guideContent,
qrcode_source qrcodeSource,
create_user createUser,
seq_num seqNum,
qrcode_show_type qrcodeShowType,
account_setting_id accountSettingId
FROM
resource_page_item
WHERE
resource_page_id = #{resourcePageId}
and qrcode_show_type = 2
and serve_type = 'OFFICIAL_ACCOUNT'
limit 1
</select>
</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