Commit 2db8e2cb by 郑永强

feat: [1004704] 小蓝书运营需求

parent 7e5bcc28
package com.pcloud.book.group.biz.impl; package com.pcloud.book.group.biz.impl;
import cn.hutool.core.io.FileUtil;
import cn.hutool.extra.qrcode.QrCodeException;
import cn.hutool.extra.qrcode.QrCodeUtil;
import cn.hutool.http.HttpUtil;
import com.pcloud.appcenter.app.dto.AppDto; import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.book.applet.biz.AppletBooklistBiz; import com.pcloud.book.applet.biz.AppletBooklistBiz;
import com.pcloud.book.applet.biz.AppletThirdResourcesBiz; import com.pcloud.book.applet.biz.AppletThirdResourcesBiz;
...@@ -85,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired; ...@@ -85,6 +89,7 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.Date; import java.util.Date;
...@@ -362,23 +367,40 @@ public class ResourcePageBizImpl implements ResourcePageBiz { ...@@ -362,23 +367,40 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
@ParamLog("生成公众号码") @ParamLog("生成公众号码")
private void createOfficialAccountUrl(Long resourcePageColumnId, UpdateResourceColumnVO updateResourceColumnVO) { private void createOfficialAccountUrl(Long resourcePageColumnId, UpdateResourceColumnVO updateResourceColumnVO) {
String qrcodeUrl;
String url = null;
ResourcePageItemVO itemVO = updateResourceColumnVO.getItemVOList().get(0); ResourcePageItemVO itemVO = updateResourceColumnVO.getItemVOList().get(0);
ResourcePage resourcePage = resourcePageDao.getById(updateResourceColumnVO.getResourcePageId()); ResourcePage resourcePage = resourcePageDao.getById(updateResourceColumnVO.getResourcePageId());
if (null == resourcePage) { if (null == resourcePage) {
return; return;
} }
Long officialSceneId = resourcePage.getOfficialSceneId(); Long officialSceneId = resourcePage.getOfficialSceneId();
if (null == officialSceneId) { if(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value.equals(itemVO.getQrcodeSource())){
officialSceneId = this.createOfficialScene(resourcePage.getBookGroupId(), resourcePage.getSceneId());
if (null == officialSceneId) { if (null == officialSceneId) {
throw new BookBizException(BookBizException.ERROR, "二维码生成失败!"); officialSceneId = this.createOfficialScene(resourcePage.getBookGroupId(), resourcePage.getSceneId());
if (null == officialSceneId) {
throw new BookBizException(BookBizException.ERROR, "二维码生成失败!");
}
resourcePage.setOfficialSceneId(officialSceneId);
resourcePageDao.update(resourcePage);
}
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(officialSceneId);
qrcodeUrl = qrcodeSceneDto.getQrcodeUrl();
url = qrcodeSceneDto.getUrl();
} else {
qrcodeUrl = itemVO.getLinkUrl();
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);
} }
resourcePage.setOfficialSceneId(officialSceneId);
resourcePageDao.update(resourcePage);
} }
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(officialSceneId);
String qrcodeUrl = qrcodeSceneDto.getQrcodeUrl();
String url = qrcodeSceneDto.getUrl();
ResourcePageItem item = new ResourcePageItem(); ResourcePageItem item = new ResourcePageItem();
item.setResourcePageColumnId(resourcePageColumnId); item.setResourcePageColumnId(resourcePageColumnId);
...@@ -390,13 +412,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz { ...@@ -390,13 +412,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
item.setSeqNum(1); item.setSeqNum(1);
item.setIsShow(true); item.setIsShow(true);
item.setServeId(officialSceneId); item.setServeId(officialSceneId);
item.setQrcodeSource(itemVO.getQrcodeSource() == null ? ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value : itemVO.getQrcodeSource());
if (!StringUtil.isEmpty(itemVO.getLogoUrl())) { if (!StringUtil.isEmpty(itemVO.getLogoUrl())) {
//生成黑白logo二维码 //生成黑白logo二维码
CompletableFuture<String> qrcodeFuture = CompletableFuture.supplyAsync(()->
QrcodeUtils.createLogoQr(url, itemVO.getLogoUrl(), 0xFF000000, 1));
try { try {
qrcodeUrl = qrcodeFuture.get(); qrcodeUrl = QrcodeUtils.createLogoQr(url, itemVO.getLogoUrl(), 0xFF000000, 1);
} catch (InterruptedException |ExecutionException e) { } catch (BizException e) {
log.error("生成黑白logo二维码失败"+e.getMessage(), e); log.error("生成黑白logo二维码失败"+e.getMessage(), e);
} }
} }
...@@ -620,10 +641,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz { ...@@ -620,10 +641,12 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
for (ResourcePageItemVO itemVO : itemVOS) { for (ResourcePageItemVO itemVO : itemVOS) {
//带logo的二维码 //带logo的二维码
itemVO.setResultUrl(itemVO.getLinkUrl()); itemVO.setResultUrl(itemVO.getLinkUrl());
//原始二维码
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(itemVO.getServeId());
itemVO.setLinkUrl(qrcodeSceneDto.getQrcodeUrl());
itemVO.setTypeName("公众号"); itemVO.setTypeName("公众号");
//原始二维码
if(ResourcePageConstants.QrcodeSourceEnum.OFFICIAL_ACCOUNT.value.equals(itemVO.getQrcodeSource())){
QrcodeSceneDto qrcodeSceneDto = qrcodeSceneConsr.getById(itemVO.getServeId());
itemVO.setLinkUrl(qrcodeSceneDto.getQrcodeUrl());
}
} }
} }
......
...@@ -124,4 +124,17 @@ public class ResourcePageConstants { ...@@ -124,4 +124,17 @@ public class ResourcePageConstants {
return value; return value;
} }
} }
public enum QrcodeSourceEnum {
OFFICIAL_ACCOUNT(0, "公众号二维码"),
CUSTOM(1, "自定义");
public final Integer value;
public final String desc;
QrcodeSourceEnum(Integer value, String desc){
this.value = value;
this.desc = desc;
}
}
} }
...@@ -60,4 +60,8 @@ public class ResourcePageItem extends BaseEntity { ...@@ -60,4 +60,8 @@ public class ResourcePageItem extends BaseEntity {
* 创建人 * 创建人
*/ */
private Long createUser; private Long createUser;
} /**
\ No newline at end of file * 二维码来源
*/
private Integer qrcodeSource;
}
...@@ -60,6 +60,11 @@ public class ResourcePageItemVO extends BaseDto{ ...@@ -60,6 +60,11 @@ public class ResourcePageItemVO extends BaseDto{
*/ */
private Integer linkFrom; private Integer linkFrom;
/**
* 二维码来源
*/
private Integer qrcodeSource;
/**资源其他信息**/ /**资源其他信息**/
private String serveName; private String serveName;
......
...@@ -31,20 +31,20 @@ ...@@ -31,20 +31,20 @@
<!--新增所有列--> <!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true"> <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, 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) seq_num, is_show, guide_content, logo_url, create_time, update_time, create_user, qrcode_source)
values (#{resourcePageId}, #{resourcePageColumnId}, #{serveId}, #{serveType}, #{linkUrl}, #{typeCode}, values (#{resourcePageId}, #{resourcePageColumnId}, #{serveId}, #{serveType}, #{linkUrl}, #{typeCode},
#{seqNum}, #{isShow}, #{guideContent}, #{logoUrl}, now(), now(), #{createUser}) #{seqNum}, #{isShow}, #{guideContent}, #{logoUrl}, now(), now(), #{createUser}, #{qrcodeSource})
</insert> </insert>
<insert id="batchInsert" keyProperty="id" useGeneratedKeys="true"> <insert id="batchInsert" keyProperty="id" useGeneratedKeys="true">
insert into book.resource_page_item(resource_page_id, resource_page_column_id, serve_id, serve_type, 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, link_url, type_code, seq_num, is_show, guide_content, logo_url,
create_time, update_time, create_user) create_time, update_time, create_user, qrcode_source)
values values
<foreach collection="list" separator="," index="index" item="item"> <foreach collection="list" separator="," index="index" item="item">
(#{item.resourcePageId}, #{item.resourcePageColumnId}, #{item.serveId}, #{item.serveType}, (#{item.resourcePageId}, #{item.resourcePageColumnId}, #{item.serveId}, #{item.serveType},
#{item.linkUrl}, #{item.typeCode}, #{item.seqNum}, #{item.isShow}, #{item.guideContent}, #{item.logoUrl}, #{item.linkUrl}, #{item.typeCode}, #{item.seqNum}, #{item.isShow}, #{item.guideContent}, #{item.logoUrl},
now(), now(), #{item.createUser}) now(), now(), #{item.createUser}, #{item.qrcodeSource})
</foreach> </foreach>
</insert> </insert>
...@@ -107,6 +107,7 @@ ...@@ -107,6 +107,7 @@
type_code typeCode, type_code typeCode,
logo_url logoUrl, logo_url logoUrl,
guide_content guideContent, guide_content guideContent,
qrcode_source qrcodeSource,
create_user createUser create_user createUser
FROM FROM
resource_page_item resource_page_item
...@@ -210,4 +211,4 @@ ...@@ -210,4 +211,4 @@
COUNT(i.id) = 1 COUNT(i.id) = 1
AND i.serve_type IN ("APP", "PRODUCT") AND i.serve_type IN ("APP", "PRODUCT")
</select> </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