Commit f11bbe78 by 李传峰

Merge branch 'feature/1006339' into 'master'

feat:[1006339]图书标准服务

See merge request rays/pcloud-book!1529
parents d8e9b1ca 0fe7723b
......@@ -318,4 +318,20 @@ public class AppConsr {
}
return null;
}
@ParamLog("RAYS应用")
public Map<String, AppRaysDTO> mapRaysAppByType(List<String> typeCodes) {
Map<String, AppRaysDTO> map = new HashMap<>();
if (ListUtils.isEmpty(typeCodes)) {
return map;
}
try {
map = ResponseHandleUtil.parseMapResponse(appService.mapRaysAppByType(typeCodes), String.class, AppRaysDTO.class);
} catch (Exception e) {
LOGGER.error("调用失败" + e.getMessage(), e);
}
return map;
}
}
......@@ -8,6 +8,8 @@ import com.pcloud.advertising.advertising.dto.AdvertisingSpaceDTO;
import com.pcloud.advertising.advertising.dto.AdvertisingSpaceItemDTO;
import com.pcloud.analysisengine.browse.dto.BrowseRecordStatisticDTO;
import com.pcloud.appcenter.app.dto.AppDto;
import com.pcloud.appcenter.app.dto.AppRaysDTO;
import com.pcloud.appcenter.app.dto.app.MapBaseStatusDTO;
import com.pcloud.book.applet.biz.AppletBooklistBiz;
import com.pcloud.book.applet.biz.AppletGroupSearchRecordBiz;
import com.pcloud.book.applet.biz.AppletRecordAggrStatisBiz;
......@@ -59,6 +61,7 @@ import com.pcloud.book.group.dao.ResourcePageColumnDao;
import com.pcloud.book.group.dao.ResourcePageCourseDao;
import com.pcloud.book.group.dao.ResourcePageDao;
import com.pcloud.book.group.dao.ResourcePageItemDao;
import com.pcloud.book.group.dao.ResourcePageModelDao;
import com.pcloud.book.group.dao.ResourcePageNavigationDao;
import com.pcloud.book.group.dao.ResourcePagePicDao;
import com.pcloud.book.group.dao.ResourcePageToolDao;
......@@ -85,6 +88,7 @@ import com.pcloud.book.group.entity.ResourcePageCollect;
import com.pcloud.book.group.entity.ResourcePageColumn;
import com.pcloud.book.group.entity.ResourcePageCourse;
import com.pcloud.book.group.entity.ResourcePageItem;
import com.pcloud.book.group.entity.ResourcePageModel;
import com.pcloud.book.group.entity.ResourcePageNavigation;
import com.pcloud.book.group.entity.ResourcePagePic;
import com.pcloud.book.group.entity.ResourcePageShare;
......@@ -94,6 +98,7 @@ import com.pcloud.book.group.entity.ResourceRecomManage;
import com.pcloud.book.group.enums.PageLandingPageTypeEnum;
import com.pcloud.book.group.enums.ResourcePageFixtureTypeEnum;
import com.pcloud.book.group.mapper.ResourcePageShareMapper;
import com.pcloud.book.group.enums.ResourcePageFixtureTypeEnum;
import com.pcloud.book.group.tools.SendWeixinRequestTools;
import com.pcloud.book.group.vo.CrmContactQrcodeVO;
import com.pcloud.book.group.vo.RecommendServeVO;
......@@ -295,6 +300,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
private ResourcePageShareMapper shareMapper;
@Autowired
private FunctionConsr functionConsr;
@Autowired
private ResourcePageModelDao resourcePageModelDao;
@Value("${book.share.defaultTitle}")
......@@ -931,9 +938,65 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
this.fillFixture(resourcePageVO);
//加载导航
this.fillNavigation(resourcePageVO, null);
//加载图书标准服务
this.fillResourcePageModel(resourcePageVO, null);
return resourcePageVO;
}
@ParamLog("加载图书标准服务")
private void fillResourcePageModel(ResourcePageVO resourcePageVO, Long wechatUserId) {
resourcePageVO.setResourcePageModelList(new ArrayList<>());
if (null == resourcePageVO || null == resourcePageVO.getId()) {
return;
}
List<ResourcePageModel> modelList = resourcePageModelDao.getByPaegId(resourcePageVO.getId());
if (ListUtils.isEmpty(modelList)) {
return;
}
List<String> serveTypes = Arrays.asList(ResourcePageConstants.ServeTypeEnum.APP.getValue(), ResourcePageConstants.ServeTypeEnum.PRODUCT.getValue());
List<Long> serveIds = modelList.stream().filter(x -> serveTypes.contains(x.getServeType()) && x.getServeId() != null
&& x.getServeId()>0).map(x -> x.getServeId()).collect(Collectors.toList());
// 对象转换查跳转链接
Map<String, List<ResourcePageItemVO>> itemVOMap = new HashMap<>();
if(CollUtil.isNotEmpty(serveIds)){
List<ResourcePageItemVO> list = CollUtil.toList();
for (ResourcePageModel model : modelList) {
if(!serveTypes.contains(model.getServeType()) || null == model.getServeId() || model.getServeId() <= 0){
continue;
}
ResourcePageItemVO itemVO = new ResourcePageItemVO();
itemVO.setServeId(model.getServeId());
itemVO.setServeType(model.getServeType());
itemVO.setLinkUrl(model.getLinkUrl());
itemVO.setTypeCode(model.getTypeCode());
itemVO.setCreateUser(model.getCreateUser());
list.add(itemVO);
}
// 填充应用跳转信息
this.fillAppProductServe(list, wechatUserId);
itemVOMap = list.stream().collect(Collectors.groupingBy(x -> String.join("-",x.getServeId().toString(),x.getServeType())));
}
// 填充参数
for (ResourcePageModel model : modelList) {
String key = null==model.getServeId()?"0":String.join("-",model.getServeId().toString(),model.getServeType());
if(!MapUtils.isEmpty(itemVOMap) && itemVOMap.containsKey(key)){
ResourcePageItemVO itemVO = itemVOMap.get(key).get(0);
model.setTypeCode(itemVO.getTypeCode());
model.setTypeName(itemVO.getTypeName());
model.setHasThirdLink(itemVO.getHasThirdLink());
model.setHasOfficialAccountsTool(itemVO.getHasOfficialAccountsTool());
model.setResultUrl(itemVO.getResultUrl());
model.setServeName(itemVO.getServeName());
model.setServePic(itemVO.getServePic());
} else {
model.setHasThirdLink(true);
model.setHasOfficialAccountsTool(false);
model.setResultUrl(model.getLinkUrl());
}
}
resourcePageVO.setResourcePageModelList(modelList);
}
/**
* 加载导航
*/
......@@ -1844,6 +1907,36 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
}
// 更新图书封面
this.updateBookCover(page, updateResourcePageVO);
// 更新实体书购买
this.updateResourcePageBookstore(resourcePageId, updateResourcePageVO.getResourcePageBookstoreList(), ResourcePageFixtureTypeEnum.BOOKSTORE);
// 更新优惠券
this.updateResourcePageBookstore(resourcePageId, updateResourcePageVO.getResourcePageCouponList(), ResourcePageFixtureTypeEnum.COUPONS);
//图书标准服务
this.updateResourcePageModel(resourcePageId,updateResourcePageVO.getResourcePageModelList(),page.getCreateUser());
//发送编辑任务queue
adviserTaskConsr.sendAdviserTaskQueue(updateResourcePageVO.getCreateUser(), AdviserTaskConstants.TargetTypeEnum.QRCODE.getValue(),
page.getBookGroupId() == null ? page.getSceneId() : page.getBookGroupId(),
AdviserTaskConstants.OperateTypeEnum.CONFIGURE_RESOURCE.getValue());
//同步RAYS码资源配置
ThreadPoolUtils.RESOURCE_POOL.execute(()->{
this.updateOwnMessage4Qr(updateResourcePageVO.getSceneId());
this.sendMemberActivityQueue(resourcePageId);
});
//更新会员商品渠道
ThreadPoolUtils.UPDATE_PRODUCT_CHANNEL.execute(()->{
this.updateMemberActivityChannel(updateResourcePageVO.getColumnVOS(),page.getChannelId());
});
//删除缓存
JedisClusterUtils.del("FUNCTION:DOULUO_APP");
JedisClusterUtils.del(DL_BOOK_SERVES_CACHE + updateResourcePageVO.getSceneId());
return resourcePageId;
}
// 更新图书封面
private void updateBookCover(ResourcePage page, UpdateResourcePageVO updateResourcePageVO) {
if (StrUtil.isNotBlank(updateResourcePageVO.getBookCover()) && Objects.nonNull(page)) {
Long bookId;
if (Objects.nonNull(page.getBookGroupId())) {
......@@ -1862,25 +1955,15 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
bookBiz.updateCoverImg(book);
}
}
}
// 更新实体书购买
this.updateResourcePageBookstore(resourcePageId, updateResourcePageVO.getResourcePageBookstoreList(), ResourcePageFixtureTypeEnum.BOOKSTORE);
// 更新优惠券
this.updateResourcePageBookstore(resourcePageId, updateResourcePageVO.getResourcePageCouponList(), ResourcePageFixtureTypeEnum.COUPONS);
//发送编辑任务queue
adviserTaskConsr.sendAdviserTaskQueue(updateResourcePageVO.getCreateUser(), AdviserTaskConstants.TargetTypeEnum.QRCODE.getValue(),
page.getBookGroupId() == null ? page.getSceneId() : page.getBookGroupId(),
AdviserTaskConstants.OperateTypeEnum.CONFIGURE_RESOURCE.getValue());
//同步RAYS码资源配置
ThreadPoolUtils.RESOURCE_POOL.execute(()->{
this.updateOwnMessage4Qr(updateResourcePageVO.getSceneId());
this.sendMemberActivityQueue(resourcePageId);
});
//更新会员商品渠道
ThreadPoolUtils.UPDATE_PRODUCT_CHANNEL.execute(()->{
if (CollectionUtils.isNotEmpty(updateResourcePageVO.getColumnVOS())) {
List<UpdateResourceColumnVO> memberActivitys = updateResourcePageVO.getColumnVOS().stream().filter(e -> ResourcePageConstants.ColumnTypeEnum.MEMBER_ACTIVITY.getCode().equals(e.getColumnType())).collect(Collectors.toList());
private void updateMemberActivityChannel(List<UpdateResourceColumnVO> columnVOS, Long channelId) {
if (ListUtils.isEmpty(columnVOS) || null == channelId) {
return;
}
List<UpdateResourceColumnVO> memberActivitys = columnVOS.stream().filter(e -> ResourcePageConstants.ColumnTypeEnum.MEMBER_ACTIVITY.getCode().equals(e.getColumnType())).collect(Collectors.toList());
if (CollectionUtils.isNotEmpty(memberActivitys) && null != memberActivitys.get(0) &&
null != memberActivitys.get(0).getItemVOList() && null != memberActivitys.get(0).getItemVOList().get(0)) {
UpdateResourceColumnVO updateResourceColumnVO = memberActivitys.get(0);
......@@ -1889,15 +1972,24 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
if (CollUtil.isNotEmpty(productIds)) {
autoOnChannel(BookProps.getDefaultChannelId(), productIds);
//上架书刊渠道
autoOnChannel(page.getChannelId(), productIds);
autoOnChannel(channelId, productIds);
}
}
}
@ParamLog("图书标准服务")
private void updateResourcePageModel(Long resourcePageId, List<ResourcePageModel> resourcePageModelList, Long createUser) {
if (null == resourcePageId) {
return;
}
resourcePageModelDao.deleteByPageId(resourcePageId);
if (!ListUtils.isEmpty(resourcePageModelList)) {
resourcePageModelList.forEach(s -> {
s.setResourcePageId(resourcePageId);
s.setCreateUser(createUser);
});
//删除缓存
JedisClusterUtils.del("FUNCTION:DOULUO_APP");
JedisClusterUtils.del(DL_BOOK_SERVES_CACHE + updateResourcePageVO.getSceneId());
return resourcePageId;
resourcePageModelDao.insert(resourcePageModelList);
}
}
private void autoOnChannel(Long channelId, List<Long> productIds) {
......@@ -2017,6 +2109,8 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
resourcePageVO.setResourcePageBookstoreList(bookstoreVOS);
resourcePageVO.setResourcePageCouponList(couponVOS);
resourcePageVO.setPushTextOpenStatus(pushTextPermission);
//加载图书标准服务
this.fillResourcePageModel(resourcePageVO, wechatUserId);
return resourcePageVO;
}
......@@ -2971,6 +3065,9 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
for (Integer type :types){
resourcePageNavigationDao.deleteNavigation(resourcePageId, type);
}
//删除图书标准服务中的配置
List<String> typeCodes = ResourcePageConstants.APPLET_DEFAULT_TYPECODES;
resourcePageModelDao.deleteByPageIdAndTypeCode(resourcePageId,typeCodes);
}
/**
......@@ -2985,7 +3082,7 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
return;
}
//书友互助、阅读打卡
List<Integer> types = ResourcePageConstants.APPLET_DEFAULT_NAVIGATIONS;
/*List<Integer> types = ResourcePageConstants.APPLET_DEFAULT_NAVIGATIONS;
Integer maxSeq = resourcePageNavigationDao.getMaxSeq(resourcePageId);
Integer addSeq = 0;
List<ResourcePageNavigation> navigations = new ArrayList<>();
......@@ -3005,7 +3102,30 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
}
if (!ListUtils.isEmpty(navigations)) {
resourcePageNavigationDao.insert(navigations);
}*/
//改为在图书标准服务中添加
ThreadPoolUtils.RESOURCE_POOL.execute(()->{
List<String> typeCodes = ResourcePageConstants.APPLET_DEFAULT_TYPECODES;
List<ResourcePageModel> modelList = new ArrayList<>();
Map<String, AppRaysDTO> raysDTOMap = appConsr.mapRaysAppByType(typeCodes);
for (String typeCode : typeCodes) {
AppRaysDTO raysDTO = raysDTOMap.get(typeCode);
if (null == raysDTO) {
continue;
}
ResourcePageModel model = new ResourcePageModel();
model.setResourcePageId(resourcePageId);
model.setServeTitle(raysDTO.getTitle());
model.setServeId(raysDTO.getAppId());
model.setServeType(ResourcePageConstants.ServeTypeEnum.APP.getValue());
model.setTypeCode(typeCode);
model.setLinkUrl("/rayh5/applet?type="+typeCode);
model.setServeIcon("https://oss.5rs.me/oss/uploadfe/png/a6cbbf361afedbe12359b7fa21ef507b.png");
model.setCreateUser(resourcePage.getCreateUser());
modelList.add(model);
}
resourcePageModelDao.insert(modelList);
});
}
/**
......@@ -3707,6 +3827,18 @@ public class ResourcePageBizImpl implements ResourcePageBiz {
} catch (Exception e) {
log.error("book.fillJumpUrl失败");
}
resourcePageItemVOList.stream().forEach(e -> {
if (!StringUtil.isEmpty(e.getSelfSmallPic())) {
e.setServePic(e.getSelfSmallPic());
e.setCoverImg(e.getSelfSmallPic());
}
if (!StringUtil.isEmpty(e.getSelfBigPic())) {
e.setTransverseImg(e.getSelfBigPic());
}
if (!StringUtil.isEmpty(e.getSelfServeName())) {
e.setServeName(e.getSelfServeName());
}
});
return resourceColumnAndServeVOS;
}
......
......@@ -382,6 +382,7 @@ public class ResourcePageConstants {
//小程序默认导航,书友互助、阅读打卡
public static List<Integer> APPLET_DEFAULT_NAVIGATIONS = Arrays.asList(ResourcePageConstants.NavigationTypeEnum.APPLET_QA.getCode(),
ResourcePageConstants.NavigationTypeEnum.CLOCK.getCode());
public static List<String> APPLET_DEFAULT_TYPECODES = Arrays.asList("APPLET_QA","APPLET_CLOCK");
/**
* H5-公众号二维码展示方式
* @author:zhuyajie
......
package com.pcloud.book.group.dao;
import com.pcloud.book.group.entity.ResourcePageModel;
import com.pcloud.common.core.dao.BaseDao;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 图书标准服务(ResourcePageModel)表数据库访问层
*
* @author
* @since 2022-01-15 15:16:45
*/
public interface ResourcePageModelDao extends BaseDao<ResourcePageModel> {
List<ResourcePageModel> getByPaegId(Long resourcePageId);
void deleteByPageId(Long resourcePageId);
void deleteByPageIdAndTypeCode(Long resourcePageId, List<String> typeCodes);
}
package com.pcloud.book.group.dao.impl;
import com.pcloud.book.group.dao.ResourcePageModelDao;
import com.pcloud.book.group.entity.ResourcePageModel;
import com.pcloud.common.core.dao.BaseDaoImpl;
import org.springframework.stereotype.Component;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* @ClassName com.pcloud.book.group.dao.impl.ResourcePageModelDaoImpl
* @Author zhuyajie
* @Description 图书标准服务
* @Date 2022/1/15 15:18
**/
@Component
public class ResourcePageModelDaoImpl extends BaseDaoImpl<ResourcePageModel> implements ResourcePageModelDao {
@Override
public List<ResourcePageModel> getByPaegId(Long resourcePageId) {
return getSessionTemplate().selectList(getStatement("getByPaegId"), resourcePageId);
}
@Override
public void deleteByPageId(Long resourcePageId) {
getSessionTemplate().delete(getStatement("deleteByPageId"), resourcePageId);
}
@Override
public void deleteByPageIdAndTypeCode(Long resourcePageId, List<String> typeCodes) {
Map<String,Object> map = new HashMap<>();
map.put("resourcePageId", resourcePageId);
map.put("typeCodes", typeCodes);
getSessionTemplate().delete(getStatement("deleteByPageIdAndTypeCode"), map);
}
}
package com.pcloud.book.group.entity;
import com.pcloud.common.entity.BaseEntity;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
/**
* 图书标准服务(ResourcePageModel)实体类
*
* @author
* @since 2022-01-15 15:16:45
*/
@Data
public class ResourcePageModel extends BaseEntity {
private static final long serialVersionUID = -99572890424146893L;
/**
* 主键
*/
private Long id;
/**
* h5页id
*/
private Long resourcePageId;
/**
* 资源标题
*/
private String serveTitle;
/**
* 资源图标
*/
private String serveIcon;
/**
* 资源id
*/
private Long serveId;
/**
* 资源类型
*/
private String serveType;
/**
* 链接url
*/
private String linkUrl;
/**
* 资源类型
*/
private String typeCode;
/**
* 创建人
*/
private Long createUser;
/**
* 是否自定义
**/
private Integer selfSet;
@ApiModelProperty("应用或作品类型名称")
private String typeName;
@ApiModelProperty("是否第三方链接")
private Boolean hasThirdLink;
@ApiModelProperty("跳转结果链接")
private String resultUrl;
@ApiModelProperty("是否配置了公众号工具")
private Boolean hasOfficialAccountsTool;
/**
* 资源名称
*/
private String serveName;
/**
* 资源封面
*/
private String servePic;
}
package com.pcloud.book.group.vo;
import com.pcloud.book.group.entity.ResourcePageModel;
import com.pcloud.book.group.entity.ResourcePageNavigation;
import com.pcloud.common.dto.BaseDto;
......@@ -140,4 +141,7 @@ public class ResourcePageVO extends BaseDto {
* 是否展示价格
*/
private Integer isShowPrice;
@ApiModelProperty("图书标准服务")
private List<ResourcePageModel> resourcePageModelList;
}
......@@ -5,6 +5,8 @@ import java.util.List;
import javax.validation.constraints.NotNull;
import com.pcloud.book.group.entity.ResourcePageBookstore;
import com.pcloud.book.group.entity.ResourcePageModel;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.models.auth.In;
import lombok.Data;
......@@ -93,4 +95,7 @@ public class UpdateResourcePageVO {
* 是否展示价格
*/
private Integer isShowPrice;
@ApiModelProperty("图书标准服务")
private List<ResourcePageModel> resourcePageModelList;
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.pcloud.book.group.dao.impl.ResourcePageModelDaoImpl">
<resultMap type="com.pcloud.book.group.entity.ResourcePageModel" id="ResourcePageModelMap">
<result property="id" column="id" jdbcType="INTEGER"/>
<result property="resourcePageId" column="resource_page_id" jdbcType="INTEGER"/>
<result property="serveTitle" column="serve_title" jdbcType="VARCHAR"/>
<result property="serveIcon" column="serve_icon" jdbcType="VARCHAR"/>
<result property="serveId" column="serve_id" jdbcType="INTEGER"/>
<result property="serveType" column="serve_type" jdbcType="VARCHAR"/>
<result property="linkUrl" column="link_url" jdbcType="VARCHAR"/>
<result property="typeCode" column="type_code" jdbcType="VARCHAR"/>
<result property="createUser" column="create_user" jdbcType="INTEGER"/>
<result property="createTime" column="create_time" jdbcType="TIMESTAMP"/>
<result property="updateTime" column="update_time" jdbcType="TIMESTAMP"/>
<result property="selfSet" column="self_set" jdbcType="INTEGER"/>
</resultMap>
<sql id="Base_columnss">
id, resource_page_id, serve_title, serve_icon, serve_id, serve_type, link_url, type_code, create_user, create_time,self_set
</sql>
<!--查询单个-->
<select id="getById" resultMap="ResourcePageModelMap">
select
<include refid="Base_columnss"/>
from resource_page_model
where id = #{id}
</select>
<!--新增所有列-->
<insert id="insert" keyProperty="id" useGeneratedKeys="true">
insert into resource_page_model(resource_page_id, serve_title, serve_icon, serve_id, serve_type, link_url, type_code, create_user, create_time, update_time,self_set)
values (#{resourcePageId}, #{serveTitle}, #{serveIcon}, #{serveId}, #{serveType}, #{linkUrl}, #{typeCode}, #{createUser}, now(), now(),ifnull(#{selfSet},0))
</insert>
<insert id="batchInsert" keyProperty="id" useGeneratedKeys="true">
insert into resource_page_model(resource_page_id, serve_title, serve_icon, serve_id, serve_type, link_url, type_code, create_user, create_time, update_time,self_set)
values
<foreach collection="list" item="entity" separator=",">
(#{entity.resourcePageId}, #{entity.serveTitle}, #{entity.serveIcon}, #{entity.serveId}, #{entity.serveType}, #{entity.linkUrl}, #{entity.typeCode}, #{entity.createUser}, now(), now(),ifnull(#{entity.selfSet},0))
</foreach>
</insert>
<!--通过主键修改数据-->
<update id="update">
update resource_page_model
<set>
<if test="resourcePageId != null">
resource_page_id = #{resourcePageId},
</if>
<if test="serveTitle != null and serveTitle != ''">
serve_title = #{serveTitle},
</if>
<if test="serveIcon != null and serveIcon != ''">
serve_icon = #{serveIcon},
</if>
<if test="serveId != null">
serve_id = #{serveId},
</if>
<if test="serveType != null and serveType != ''">
serve_type = #{serveType},
</if>
<if test="linkUrl != null and linkUrl != ''">
link_url = #{linkUrl},
</if>
<if test="typeCode != null and typeCode != ''">
type_code = #{typeCode},
</if>
update_time = now(),
</set>
where id = #{id}
</update>
<!--通过主键删除-->
<delete id="deleteById">
delete from resource_page_model where id = #{id}
</delete>
<select id="getByPaegId" parameterType="long" resultMap="ResourcePageModelMap">
select
<include refid="Base_columnss"/>
from resource_page_model
where resource_page_id = #{resourcePageId}
</select>
<delete id="deleteByPageId">
delete from resource_page_model where resource_page_id = #{resourcePageId}
</delete>
<delete id="deleteByPageIdAndTypeCode" parameterType="map">
delete from resource_page_model
where resource_page_id = #{resourcePageId}
and type_code in
<foreach collection="typeCodes" separator="," item="item" index="index" open="(" close=")">
#{item}
</foreach>
</delete>
</mapper>
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