wyq 6 months ago
parent 63cbd27784
commit 0352e3d528
  1. 42
      crmeb-common/src/main/java/com/zbkj/common/model/page/PageDiyTitle.java
  2. 6
      crmeb-common/src/main/java/com/zbkj/common/response/page/PageDiyResponse.java
  3. 8
      crmeb-front/src/main/java/com/zbkj/front/controller/PageDiyController.java
  4. 7
      crmeb-service/src/main/java/com/zbkj/service/dao/page/PageDiyDao.java
  5. 16
      crmeb-service/src/main/java/com/zbkj/service/dao/page/PageDiyTitleDao.java
  6. 2
      crmeb-service/src/main/java/com/zbkj/service/service/PageDiyService.java
  7. 125
      crmeb-service/src/main/java/com/zbkj/service/service/impl/PageDiyServiceImpl.java
  8. 65
      crmeb-service/src/main/resources/mapper/page/PageDiyMapper.xml

@ -0,0 +1,42 @@
package com.zbkj.common.model.page;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.experimental.Accessors;
import java.io.Serializable;
/**
* <p>
* DIY数据标题表
* </p>
*
* @author dazongzi
* @since 2023-05-16
*/
@Data
@EqualsAndHashCode(callSuper = false)
@Accessors(chain = true)
@TableName("eb_page_diy_title")
@ApiModel(value="PageDiyTitle对象", description="DIY数据标题表")
public class PageDiyTitle implements Serializable {
private static final long serialVersionUID=1L;
@TableId(value = "id", type = IdType.AUTO)
private Integer id;
@ApiModelProperty(value = "标题")
private String title;
@ApiModelProperty(value = "页面id")
private Integer pageId;
@ApiModelProperty(value = "标题内容")
private String value;
}

@ -9,6 +9,7 @@ import lombok.experimental.Accessors;
import java.io.Serializable;
import java.util.Date;
import java.util.List;
/**
* <p>
@ -47,6 +48,9 @@ public class PageDiyResponse implements Serializable {
@ApiModelProperty(value = "页面数据")
private JSONObject value;
@ApiModelProperty(value = "页面数据字符串")
private String valueString;
@ApiModelProperty(value = "默认数据")
private String defaultValue;
@ -103,6 +107,8 @@ public class PageDiyResponse implements Serializable {
@ApiModelProperty(value = "默认模板(1.平台默认 2.商户默认)")
private Integer isDefault;
@ApiModelProperty(value = "页面模块内容")
private List<Integer> titleIds;
}

@ -41,6 +41,14 @@ public class PageDiyController {
if(ObjectUtil.isNull(response)) throw new CrmebException("未找到对应模版信息");
return CommonResult.success(response);
}
@ApiOperation(value = "页面模块")
@RequestMapping(value = "/title/{titleId}", method = RequestMethod.GET)
public CommonResult<PageDiyResponse> titleInfo(@PathVariable(value = "titleId") Integer titleId){
PageDiyResponse response = pageDiyService.titleInfo(titleId);
if(ObjectUtil.isNull(response)) throw new CrmebException("未找到对应模块信息");
return CommonResult.success(response);
}
}

@ -2,6 +2,9 @@ package com.zbkj.service.dao.page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.page.PageDiy;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* <p>
@ -12,5 +15,9 @@ import com.zbkj.common.model.page.PageDiy;
* @since 2023-05-16
*/
public interface PageDiyDao extends BaseMapper<PageDiy> {
List<Integer> queryPageTitle(@Param("pageId") Integer pageId);
PageDiy selectNoValueDefault();
PageDiy selectNoValueById(Integer id);
}

@ -0,0 +1,16 @@
package com.zbkj.service.dao.page;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.zbkj.common.model.page.PageDiyTitle;
/**
* <p>
* DIY数据表 Mapper 接口
* </p>
*
* @author dazongzi
* @since 2023-05-16
*/
public interface PageDiyTitleDao extends BaseMapper<PageDiyTitle> {
}

@ -73,4 +73,6 @@ public interface PageDiyService extends IService<PageDiy> {
* id>1时加载对应的模版即可
*/
PageDiy getDiyPageByPageIdForAdmin(Integer id);
PageDiyResponse titleInfo(Integer titleId);
}

@ -4,7 +4,9 @@ import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.core.util.URLUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.PageHelper;
@ -18,14 +20,18 @@ import com.zbkj.common.constants.SysConfigConstants;
import com.zbkj.common.constants.UploadConstants;
import com.zbkj.common.exception.CrmebException;
import com.zbkj.common.model.page.PageDiy;
import com.zbkj.common.model.page.PageDiyTitle;
import com.zbkj.common.request.PageParamRequest;
import com.zbkj.common.request.page.PageDiyEditNameRequest;
import com.zbkj.common.response.page.PageDiyResponse;
import com.zbkj.common.result.CommonResultCode;
import com.zbkj.common.result.SystemConfigResultCode;
import com.zbkj.common.utils.RedisUtil;
import com.zbkj.service.dao.page.PageDiyDao;
import com.zbkj.service.dao.page.PageDiyTitleDao;
import com.zbkj.service.service.PageDiyService;
import com.zbkj.service.service.SystemConfigService;
import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.BeanUtils;
@ -37,11 +43,12 @@ import java.util.List;
import java.util.stream.Collectors;
/**
* @author dazongzi
* @description PageDiyServiceImpl 接口实现
* @date 2023-05-16
*/
* @author dazongzi
* @description PageDiyServiceImpl 接口实现
* @date 2023-05-16
*/
@Service
@Slf4j
public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> implements PageDiyService {
private static final Logger logger = LoggerFactory.getLogger(PageDiyServiceImpl.class);
@ -49,9 +56,14 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
@Resource
private PageDiyDao dao;
@Resource
private PageDiyTitleDao pageDiyTitleDao;
@Autowired
private SystemConfigService systemConfigService;
@Resource
private RedisUtil redisUtil;
/**
* 列表
@ -91,9 +103,21 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
checkPageDiyNameUnique(pageDiy.getName(), null);
DocumentContext jsonContext = JsonPath.parse(pageDiy.getValue());
// 通配符去掉关键子 再存储
jsonContext.delete("$..*[?(@ == '"+ adminApiPath +"')]");
jsonContext.delete("$..*[?(@ == '" + adminApiPath + "')]");
pageDiy.setValue(jsonContext.jsonString());
save(pageDiy);
JSONObject pageValue = JSON.parseObject(pageDiy.getValue());
QueryWrapper<PageDiyTitle> pageDiyTitleWrapper = new QueryWrapper<>();
pageDiyTitleWrapper.eq("page_id", pageDiy.getId());
pageDiyTitleDao.delete(pageDiyTitleWrapper);
for (String key : pageValue.keySet()) {
JSONObject titleJson = (JSONObject) pageValue.get(key);
PageDiyTitle pageDiyTitle = new PageDiyTitle();
pageDiyTitle.setTitle(key);
pageDiyTitle.setPageId(pageDiy.getId());
pageDiyTitle.setValue(titleJson.toJSONString());
pageDiyTitleDao.insert(pageDiyTitle);
}
return pageDiy;
}
@ -114,12 +138,26 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
// // 通配符去掉关键子 再存储
// jsonContext.delete("$..*[?(@ == '"+ adminApiPath +"')]");
// pageDiy.setValue(jsonContext.jsonString());
return dao.updateById(pageDiy)>0;
JSONObject pageValue = JSON.parseObject(pageDiy.getValue());
QueryWrapper<PageDiyTitle> pageDiyTitleWrapper = new QueryWrapper<>();
pageDiyTitleWrapper.eq("page_id", pageDiy.getId());
pageDiyTitleDao.delete(pageDiyTitleWrapper);
for (String key : pageValue.keySet()) {
JSONObject titleJson = (JSONObject) pageValue.get(key);
PageDiyTitle pageDiyTitle = new PageDiyTitle();
pageDiyTitle.setTitle(key);
pageDiyTitle.setPageId(pageDiy.getId());
pageDiyTitle.setValue(titleJson.toJSONString());
pageDiyTitleDao.insert(pageDiyTitle);
}
return dao.updateById(pageDiy) > 0;
}
/**
* 编辑diy名称
*@param pageDiyEditNameRequest 待编辑名称对象
*
* @param pageDiyEditNameRequest 待编辑名称对象
*/
@Override
public Boolean editPageDiyName(PageDiyEditNameRequest pageDiyEditNameRequest) {
@ -142,7 +180,7 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
@Override
public Boolean setDiyPageHome(Integer diyId) {
PageDiy pageDiy = dao.selectById(diyId);
if(ObjectUtil.isNull(pageDiy)) throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "当前DIY模版不存在");
if (ObjectUtil.isNull(pageDiy)) throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "当前DIY模版不存在");
// 取消现有的首页设置,如果存在的话
LambdaQueryWrapper<PageDiy> queryWaiteResetDefaultTemp = Wrappers.lambdaQuery();
@ -153,28 +191,30 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
// 设置当前diy数据为商城首页
pageDiy.setIsDefault(1);
redisUtil.set("PAGEDIY_DEFAULT", pageDiy);
return dao.updateById(pageDiy) > 0;
}
/**
* 获取DIY首页模版Id
*@param isLoadValue 是否加载value详情数据
*
* @param isLoadValue 是否加载value详情数据
* @return 首页模版ID
*/
@Override
public PageDiy getDiyPageHome(Boolean isLoadValue) {
LambdaQueryWrapper<PageDiy> queryWrapper = Wrappers.lambdaQuery();
queryWrapper.eq(PageDiy::getIsDefault, 1);
if(Boolean.FALSE == isLoadValue){
if (Boolean.FALSE == isLoadValue) {
queryWrapper.select(PageDiy.class, i -> !i.getColumn().equals("value"));
}
List<PageDiy> currentWaitResetPageHome = dao.selectList(queryWrapper);
if(ObjectUtil.isNull(currentWaitResetPageHome) || currentWaitResetPageHome.size() != 1){
if (ObjectUtil.isNull(currentWaitResetPageHome) || currentWaitResetPageHome.size() != 1) {
throw new CrmebException("首页模版设置不正确!");
}
PageDiy pageDiy = currentWaitResetPageHome.get(0);
if(Boolean.TRUE == isLoadValue){
if (Boolean.TRUE == isLoadValue) {
// String modifiedJsonString = getModifiedJsonString(pageDiy.getValue());
// pageDiy.setValue(modifiedJsonString);
pageDiy.setValue(pageDiy.getValue());
@ -195,15 +235,15 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
@Override
public PageDiy getDiyPageByPageIdForAdmin(Integer id) {
PageDiy pageDiy = null;
if(0 == id){
if (0 == id) {
LambdaQueryWrapper<PageDiy> getHomeDefault = Wrappers.lambdaQuery();
getHomeDefault.eq(PageDiy::getIsDefault, 1);
pageDiy = getOne(getHomeDefault);
}else{
} else {
pageDiy = getById(id);
}
if(ObjectUtil.isNull(pageDiy)) throw new CrmebException(SystemConfigResultCode.PAGE_DIY_NOT_EXIST);
if (ObjectUtil.isNull(pageDiy)) throw new CrmebException(SystemConfigResultCode.PAGE_DIY_NOT_EXIST);
// String modifiedJsonString = getModifiedJsonString(pageDiy.getValue());
// pageDiy.setValue(modifiedJsonString);
@ -211,6 +251,15 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
return pageDiy;
}
@Override
public PageDiyResponse titleInfo(Integer titleId) {
PageDiyTitle titleDto = pageDiyTitleDao.selectById(titleId);
PageDiyResponse response = new PageDiyResponse();
String valueString=titleDto.getValue().replaceAll("https://xsbuy-mall.oss-cn-shanghai.aliyuncs.com/","");
response.setValueString(valueString);
return response;
}
/**
* 根据id加载diy模版配置
*
@ -222,16 +271,25 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
@Override
public PageDiyResponse getDiyPageByPageIdForFront(Integer id) {
PageDiy pageDiy;
if(0 == id){
LambdaQueryWrapper<PageDiy> getHomeDefault = Wrappers.lambdaQuery();
getHomeDefault.eq(PageDiy::getIsDefault, 1);
pageDiy = getOne(getHomeDefault);
}else{
if (0 == id) {
pageDiy = dao.selectNoValueDefault();
} else {
pageDiy = getById(id);
}
if(ObjectUtil.isNull(pageDiy)) throw new CrmebException(SystemConfigResultCode.PAGE_DIY_NOT_EXIST);
if (ObjectUtil.isNull(pageDiy)) throw new CrmebException(SystemConfigResultCode.PAGE_DIY_NOT_EXIST);
if (0 == id) {
PageDiyResponse response = new PageDiyResponse();
BeanUtils.copyProperties(pageDiy, response);
response.setTitleIds(baseMapper.queryPageTitle(pageDiy.getId()));
return response;
} else {
PageDiyResponse response = new PageDiyResponse();
BeanUtils.copyProperties(pageDiy, response);
response.setValueString(pageDiy.getValue());
return response;
}
// 优化front比必要的字段 提高diy组件渲染效率
// DocumentContext jsonContext = JsonPath.parse(pageDiy.getValue());
@ -246,27 +304,24 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
// jsonContext.delete("$..*[?(@.name == 'homeTab')].selectConfig");
// jsonContext.delete("$..*[?(@.name == 'homeTab')].productList..*.goods[*].attrValue");
PageDiyResponse response = new PageDiyResponse();
BeanUtils.copyProperties(pageDiy, response);
// String modifiedJsonString = getModifiedJsonString(jsonContext.jsonString());
// response.setValue(JSON.parseObject(modifiedJsonString));
response.setValue(JSON.parseObject(pageDiy.getValue()));
return response;
}
/**
* 检查diy模版名称唯一
*
* @param pageDiyName 当前要检查的模版名称
* @param id 更新时的 diy id
* @param id 更新时的 diy id
*/
private void checkPageDiyNameUnique(String pageDiyName, Integer id) {
LambdaQueryWrapper<PageDiy> pageDiyLambdaQueryWrapper = Wrappers.lambdaQuery();
pageDiyLambdaQueryWrapper.eq(PageDiy::getName, pageDiyName);
if(ObjectUtil.isNotNull(id)){
if (ObjectUtil.isNotNull(id)) {
pageDiyLambdaQueryWrapper.ne(PageDiy::getId, id);
}
List<PageDiy> pageDiyNameExist = dao.selectList(pageDiyLambdaQueryWrapper);
if(ObjectUtil.isNotNull(pageDiyNameExist) && !pageDiyNameExist.isEmpty()){
if (ObjectUtil.isNotNull(pageDiyNameExist) && !pageDiyNameExist.isEmpty()) {
throw new CrmebException(CommonResultCode.VALIDATE_FAILED, "当前模版名称已经存在,请修改后再保存!");
}
}
@ -275,6 +330,7 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
/**
* 调用diy配置数据后结合本地配置传递给递归方法替换
*
* @param diyValue 当前待操作的diy对象其实仅仅用到了value
* @return 替换后的json对象
*/
@ -289,14 +345,15 @@ public class PageDiyServiceImpl extends ServiceImpl<PageDiyDao, PageDiy> impleme
JsonElement modifiedJsonElement = replaceJsonValue(jsonElement, adminApiPath, newPrefix);
// 将修改后的 JSON 数据转换回字符串
return gson.toJson(modifiedJsonElement);
return gson.toJson(modifiedJsonElement);
}
/**
* 根据系统关键字匹配素材前缀匹配后追加系统中对应的素材前缀
*
* @param jsonElement 当前操作的json对象
* @param keyword 匹配的关键字
* @param newValue 需要追加的前缀
* @param keyword 匹配的关键字
* @param newValue 需要追加的前缀
* @return 操作后的正确json数据
*/
private JsonElement replaceJsonValue(JsonElement jsonElement, String keyword, String newValue) {

@ -0,0 +1,65 @@
<?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.zbkj.service.dao.page.PageDiyDao">
<select id="selectNoValueById" resultType="com.zbkj.common.model.page.PageDiy"
parameterType="java.lang.Integer">
select id,
version,
name,
title,
cover_image,
template_name,
add_time,
update_time,
status,
type,
is_show,
is_bg_color,
is_bg_pic,
is_diy,
color_picker,
bg_pic,
bg_tab_val,
is_del,
return_address,
title_bg_color,
title_color,
service_status,
mer_id,
is_default,
text_position from eb_page_diy where id=#{value}
</select>
<select id="selectNoValueDefault" resultType="com.zbkj.common.model.page.PageDiy">
select id,
version,
name,
title,
cover_image,
template_name,
add_time,
update_time,
status,
type,
is_show,
is_bg_color,
is_bg_pic,
is_diy,
color_picker,
bg_pic,
bg_tab_val,
is_del,
return_address,
title_bg_color,
title_color,
service_status,
mer_id,
is_default,
text_position from eb_page_diy where is_default=1
</select>
<select id="queryPageTitle" resultType="java.lang.Integer" parameterType="java.lang.Integer">
select id from eb_page_diy_title where
page_id =#{pageId} order by title
</select>
</mapper>
Loading…
Cancel
Save