h5 动态表单

This commit is contained in:
lizhengwei 2026-02-13 17:47:13 +08:00
parent a2d76a5828
commit 67c6b50c32
9 changed files with 276 additions and 311 deletions

View File

@ -7,13 +7,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.api.dto.FormDictDTO; import com.pcloud.booksflow.form.api.dto.FormDictDTO;
import com.pcloud.booksflow.form.mybatis.entity.FormDict; import com.pcloud.booksflow.form.mybatis.entity.FormDict;
import com.pcloud.booksflow.form.mybatis.entity.FormDictExample;
import com.pcloud.booksflow.form.mybatis.entity.FormFieldDict; import com.pcloud.booksflow.form.mybatis.entity.FormFieldDict;
import com.pcloud.booksflow.form.mybatis.mapper.FormDictMapper; import com.pcloud.booksflow.form.mybatis.mapper.FormDictMapper;
import com.pcloud.booksflow.form.mybatis.mapper.FormFieldDictMapper; import com.pcloud.booksflow.form.mybatis.mapper.FormFieldDictMapper;
import com.pcloud.booksflow.form.utils.UserUtils; import com.pcloud.booksflow.form.utils.UserUtils;
import com.pcloud.common.exceptions.BizException; import org.dromara.common.core.exception.ServiceException;
import com.pcloud.common.page.PageBeanNew; import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -54,7 +54,7 @@ public class FormDictService extends ServiceImpl<FormDictMapper, FormDict> {
entity.setDeleted(0); entity.setDeleted(0);
entity.setCreatedBy(UserUtils.getUserId()); entity.setCreatedBy(UserUtils.getUserId());
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
baseMapper.insertSelective(entity); baseMapper.insert(entity);
return entity.getId(); return entity.getId();
} else { } else {
// 更新现有的表单字典 // 更新现有的表单字典
@ -63,7 +63,7 @@ public class FormDictService extends ServiceImpl<FormDictMapper, FormDict> {
entity.setId(dto.getId()); entity.setId(dto.getId());
entity.setUpdatedBy(UserUtils.getUserId()); entity.setUpdatedBy(UserUtils.getUserId());
entity.setUpdateTime(new Date()); entity.setUpdateTime(new Date());
baseMapper.updateByPrimaryKeySelective(entity); baseMapper.updateById(entity);
return entity.getId(); return entity.getId();
} }
} }
@ -126,7 +126,7 @@ public class FormDictService extends ServiceImpl<FormDictMapper, FormDict> {
* @param numPerPage 每页数量 * @param numPerPage 每页数量
* @return 分页结果 * @return 分页结果
*/ */
public PageBeanNew<FormDict> listByNameAndCode(String name, String code, Integer currentPage, Integer numPerPage) { public IPage<FormDict> listByNameAndCode(String name, String code, Integer currentPage, Integer numPerPage) {
LambdaQueryWrapper<FormDict> queryWrapper = new LambdaQueryWrapper<FormDict>() LambdaQueryWrapper<FormDict> queryWrapper = new LambdaQueryWrapper<FormDict>()
.eq(FormDict::getDeleted, 0) .eq(FormDict::getDeleted, 0)
.orderByDesc(FormDict::getId); .orderByDesc(FormDict::getId);
@ -141,7 +141,7 @@ public class FormDictService extends ServiceImpl<FormDictMapper, FormDict> {
Page<FormDict> page = new Page<>(currentPage, numPerPage); Page<FormDict> page = new Page<>(currentPage, numPerPage);
Page<FormDict> result = baseMapper.selectPage(page, queryWrapper); Page<FormDict> result = baseMapper.selectPage(page, queryWrapper);
return new PageBeanNew<>(currentPage, numPerPage, (int) result.getTotal(), result.getRecords()); return result;
} }
/** /**
@ -183,7 +183,7 @@ public class FormDictService extends ServiceImpl<FormDictMapper, FormDict> {
for (FormDict dict : dicts) { for (FormDict dict : dicts) {
dict.setId(null); dict.setId(null);
} }
return baseMapper.insertBatchSomeColumn(dicts); return saveBatch(dicts) ? dicts.size() : 0;
} }
/** /**

View File

@ -1,7 +1,11 @@
package com.pcloud.booksflow.form.service; package com.pcloud.booksflow.form.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.api.constant.FormFieldDictType; import com.pcloud.booksflow.form.api.constant.FormFieldDictType;
import com.pcloud.booksflow.form.api.dto.DictCodesDTO; import com.pcloud.booksflow.form.api.dto.DictCodesDTO;
@ -86,16 +90,16 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
* @return 表单字段配置对象 * @return 表单字段配置对象
*/ */
public List<FormFieldDict> getByConfigType(String configType, Long parentId, Integer status, Integer level) { public List<FormFieldDict> getByConfigType(String configType, Long parentId, Integer status, Integer level) {
FormFieldDictExample example = new FormFieldDictExample(); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
FormFieldDictExample.Criteria criteria = example.createCriteria().andConfigTypeEqualTo(configType).andDeletedEqualTo(0); .eq(FormFieldDict::getConfigType, configType)
if (parentId != null) { .eq(FormFieldDict::getDeleted, 0)
criteria.andParentIdEqualTo(parentId); .eq(parentId != null, FormFieldDict::getParentId, parentId)
} .isNull(parentId == null, FormFieldDict::getParentId)
if (status != null) { .eq(status != null, FormFieldDict::getStatus, status)
criteria.andStatusEqualTo(status); .orderByAsc(FormFieldDict::getSortOrder, FormFieldDict::getName);
}
example.setOrderByClause("sort_order asc,name asc"); List<FormFieldDict> dicts = baseMapper.selectList(queryWrapper);
List<FormFieldDict> dicts = baseMapper.selectByExampleWithBLOBs(example);
//level参数过滤 //level参数过滤
if (level != null) { if (level != null) {
final int _l; final int _l;
@ -116,27 +120,48 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
* *
* @return * @return
*/ */
public PageBeanNew<FormFieldDictVO> page(String configType, String queryStr, Integer status, Integer currentPage, Integer numPerPage) { public IPage<FormFieldDictVO> page(String configType, String queryStr, Integer status, Integer currentPage, Integer numPerPage) {
//查询 顶级节点 //使用MyBatis-Plus分页
FormFieldDictExample example = getTopExample(configType, status); Page<FormFieldDict> page = new Page<>(currentPage, numPerPage);
int count = (int) baseMapper.countByExampleExt(example, queryStr); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
if (count == 0) { .eq(FormFieldDict::getConfigType, configType)
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>()); .isNull(FormFieldDict::getParentId)
} .eq(FormFieldDict::getDeleted, 0)
List<FormFieldDict> records = baseMapper.selectByExampleWithPagingBLOBs(example, currentPage * numPerPage, numPerPage, queryStr); .eq(status != null, FormFieldDict::getStatus, status)
if (CollUtil.isEmpty(records)) { .and(StrUtil.isNotBlank(queryStr), wrapper ->
return new PageBeanNew<>(currentPage, numPerPage, 0, new ArrayList<>()); wrapper.like(FormFieldDict::getName, queryStr)
} .or()
List<FormFieldDict> all = new ArrayList<>(records); .like(FormFieldDict::getCode, queryStr)
)
.orderByAsc(FormFieldDict::getSortOrder, FormFieldDict::getName);
//查询 子节点 IPage<FormFieldDict> result = baseMapper.selectPage(page, queryWrapper);
List<Long> pIds = records.stream().map(FormFieldDict::getId).collect(Collectors.toList());
if (!CollUtil.isEmpty(pIds)) { if (result.getRecords().isEmpty()) {
all.addAll(findAllChildren(configType, pIds, status, 10)); Page<FormFieldDictVO> emptyPage = new Page<>(currentPage, numPerPage, 0);
emptyPage.setRecords(new ArrayList<>());
return emptyPage;
} }
//to vo
List<FormFieldDictVO> vos = BeanUtil.copyToList(all, FormFieldDictVO.class); List<FormFieldDict> allRecords = new ArrayList<>(result.getRecords());
return new PageBeanNew<>(currentPage, numPerPage, count, buildTree(vos));
//查询子节点
List<Long> pIds = result.getRecords().stream()
.map(FormFieldDict::getId)
.collect(Collectors.toList());
if (!CollUtil.isEmpty(pIds)) {
allRecords.addAll(findAllChildren(configType, pIds, status, 10));
}
//转换为VO并构建树形结构
List<FormFieldDictVO> vos = BeanUtil.copyToList(allRecords, FormFieldDictVO.class);
List<FormFieldDictVO> treeVos = buildTree(vos);
//手动构建返回的IPage
Page<FormFieldDictVO> voPage = new Page<>(currentPage, numPerPage, result.getTotal());
voPage.setRecords(treeVos);
return voPage;
} }
/** /**
@ -147,7 +172,18 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
return new ArrayList<>(); return new ArrayList<>();
} }
List<FormFieldDict> allChildren = new ArrayList<>(); List<FormFieldDict> allChildren = new ArrayList<>();
List<FormFieldDict> directChildren = baseMapper.selectByExampleWithBLOBs(getFormFieldDictExample(configType, status, parentIds));
LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
.eq(FormFieldDict::getConfigType, configType)
.eq(FormFieldDict::getDeleted, 0);
if (status != null) {
queryWrapper.eq(FormFieldDict::getStatus, status);
}
queryWrapper.in(FormFieldDict::getParentId, parentIds)
.orderByAsc(FormFieldDict::getSortOrder, FormFieldDict::getName);
List<FormFieldDict> directChildren = baseMapper.selectList(queryWrapper);
if (!directChildren.isEmpty()) { if (!directChildren.isEmpty()) {
allChildren.addAll(directChildren); allChildren.addAll(directChildren);
@ -164,34 +200,6 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
return allChildren; return allChildren;
} }
private FormFieldDictExample getTopExample(String configType, Integer status) {
FormFieldDictExample example = new FormFieldDictExample();
FormFieldDictExample.Criteria criteria = example.createCriteria()
.andConfigTypeEqualTo(configType)
.andParentIdIsNull()
.andDeletedEqualTo(0);
if (status != null) {
criteria.andStatusEqualTo(status);
}
example.setOrderByClause("sort_order asc,name asc");
return example;
}
private FormFieldDictExample getFormFieldDictExample(String configType, Integer status, List<Long> parentIds) {
FormFieldDictExample example = new FormFieldDictExample();
FormFieldDictExample.Criteria criteria = example.createCriteria()
.andConfigTypeEqualTo(configType)
.andDeletedEqualTo(0);
if (status != null) {
criteria.andStatusEqualTo(status);
}
if (parentIds != null) {
criteria.andParentIdIn(parentIds);
}
example.setOrderByClause("sort_order asc,name asc");
return example;
}
/** /**
* 删除表单字段配置 * 删除表单字段配置
* *
@ -205,7 +213,7 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
entity.setDeleted(1); entity.setDeleted(1);
entity.setUpdateTime(new Date()); entity.setUpdateTime(new Date());
entity.setUpdatedBy(UserUtils.getUserId()); entity.setUpdatedBy(UserUtils.getUserId());
return baseMapper.updateByPrimaryKeySelective(entity); return baseMapper.updateById(entity);
} }
/** /**
@ -220,9 +228,12 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
entity.setDeleted(1); entity.setDeleted(1);
entity.setUpdateTime(new Date()); entity.setUpdateTime(new Date());
entity.setUpdatedBy(UserUtils.getUserId()); entity.setUpdatedBy(UserUtils.getUserId());
FormFieldDictExample example = new FormFieldDictExample();
example.createCriteria().andConfigTypeEqualTo(configType).andDeletedEqualTo(0); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
return baseMapper.updateByExampleSelective(entity, example); .eq(FormFieldDict::getConfigType, configType)
.eq(FormFieldDict::getDeleted, 0);
return baseMapper.update(entity, queryWrapper);
} }
/** /**
@ -238,14 +249,13 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
entity.setSortOrder(sortOrder); entity.setSortOrder(sortOrder);
entity.setUpdateTime(new Date()); entity.setUpdateTime(new Date());
entity.setUpdatedBy(UserUtils.getUserId()); entity.setUpdatedBy(UserUtils.getUserId());
return baseMapper.updateByPrimaryKeySelective(entity); return baseMapper.updateById(entity);
} }
@Transactional @Transactional
public Integer updateStatus(Long id, Integer status) { public Integer updateStatus(Long id, Integer status) {
Long userId = UserUtils.getUserId(); Long userId = UserUtils.getUserId();
FormFieldDict item = baseMapper.selectByPrimaryKey(id); FormFieldDict item = baseMapper.selectById(id);
if (item == null) { if (item == null) {
return 0; return 0;
} }
@ -260,7 +270,7 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
entity.setStatus(status); entity.setStatus(status);
entity.setUpdateTime(new Date()); entity.setUpdateTime(new Date());
entity.setUpdatedBy(userId); entity.setUpdatedBy(userId);
return baseMapper.updateByPrimaryKeySelective(entity); return baseMapper.updateById(entity);
} }
private void updateStatusChildren(String configType, List<Long> pids, Integer status, int depth, Long userId) { private void updateStatusChildren(String configType, List<Long> pids, Integer status, int depth, Long userId) {
@ -270,13 +280,12 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
} }
// 查找所有直接子节点 // 查找所有直接子节点
FormFieldDictExample example = new FormFieldDictExample(); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
example.createCriteria() .eq(FormFieldDict::getConfigType, configType)
.andConfigTypeEqualTo(configType) .in(FormFieldDict::getParentId, pids)
.andParentIdIn(pids) .eq(FormFieldDict::getStatus, status == 0 ? 1 : 0)
.andStatusEqualTo(status == 0 ? 1 : 0) .eq(FormFieldDict::getDeleted, 0);
.andDeletedEqualTo(0); List<FormFieldDict> children = baseMapper.selectList(queryWrapper);
List<FormFieldDict> children = baseMapper.selectByExample(example);
if (children.isEmpty()) { if (children.isEmpty()) {
log.debug("没有找到子节点,结束递归"); log.debug("没有找到子节点,结束递归");
return; return;
@ -288,11 +297,11 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
updateEntity.setStatus(status); updateEntity.setStatus(status);
updateEntity.setUpdateTime(new Date()); updateEntity.setUpdateTime(new Date());
updateEntity.setUpdatedBy(userId); updateEntity.setUpdatedBy(userId);
FormFieldDictExample _example = new FormFieldDictExample();
_example.createCriteria() LambdaQueryWrapper<FormFieldDict> updateWrapper = new LambdaQueryWrapper<FormFieldDict>()
.andConfigTypeEqualTo(configType) .eq(FormFieldDict::getConfigType, configType)
.andIdIn(_ids); .in(FormFieldDict::getId, _ids);
int i = baseMapper.updateByExampleSelective(updateEntity, _example); int i = baseMapper.update(updateEntity, updateWrapper);
log.debug("更新表单字段配置【{}】结果:{}", _ids, i); log.debug("更新表单字段配置【{}】结果:{}", _ids, i);
updateStatusChildren(configType, _ids, status, depth + 1, userId); updateStatusChildren(configType, _ids, status, depth + 1, userId);
} }
@ -303,9 +312,10 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
* @param id * @param id
*/ */
private void checkDependent(Long id) { private void checkDependent(Long id) {
FormFieldDictExample example = new FormFieldDictExample(); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
example.createCriteria().andParentIdEqualTo(id).andDeletedEqualTo(0); .eq(FormFieldDict::getParentId, id)
List<FormFieldDict> dependentDicts = baseMapper.selectByExample(example); .eq(FormFieldDict::getDeleted, 0);
List<FormFieldDict> dependentDicts = baseMapper.selectList(queryWrapper);
if (!dependentDicts.isEmpty()) { if (!dependentDicts.isEmpty()) {
String sss = ""; String sss = "";
for (FormFieldDict item : dependentDicts) { for (FormFieldDict item : dependentDicts) {
@ -321,32 +331,27 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
} }
public List<FormFieldDictDifyVo> getByCodesByLevel(Long agentId, String configType, List<Long> parentIds) { public List<FormFieldDictDifyVo> getByCodesByLevel(Long agentId, String configType, List<Long> parentIds) {
if (StringUtil.isEmpty(configType)) { if (StrUtil.isEmpty(configType)) {
return new ArrayList<>(); return new ArrayList<>();
} }
FormFieldDictExample example = new FormFieldDictExample();
FormFieldDictExample.Criteria criteria = example.createCriteria();
criteria.andStatusEqualTo(1)
.andConfigTypeEqualTo(configType)
.andDeletedEqualTo(0);
LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
.eq(FormFieldDict::getStatus, 1)
.eq(FormFieldDict::getConfigType, configType)
.eq(FormFieldDict::getDeleted, 0);
if (CollUtil.isNotEmpty(parentIds)) { if (CollUtil.isNotEmpty(parentIds)) {
queryWrapper.in(FormFieldDict::getParentId, parentIds);
criteria.andParentIdIn(parentIds); } else {
queryWrapper.isNull(FormFieldDict::getParentId);
}else {
criteria.andParentIdIsNull();
} }
queryWrapper.orderByAsc(FormFieldDict::getSortOrder, FormFieldDict::getName);
example.setOrderByClause("sort_order asc,name asc"); List<FormFieldDict> dicts = baseMapper.selectList(queryWrapper);
List<FormFieldDict> dicts = baseMapper.selectByExampleWithBLOBs(example);
if (dicts == null) { if (dicts == null) {
return new ArrayList<>(); return new ArrayList<>();
} }
List<FormFieldDictDifyVo> vos = dicts.stream().map(o->{ List<FormFieldDictDifyVo> vos = dicts.stream().map(o -> {
FormFieldDictDifyVo formFieldDictDifyVo = new FormFieldDictDifyVo(); FormFieldDictDifyVo formFieldDictDifyVo = new FormFieldDictDifyVo();
formFieldDictDifyVo.setId(o.getId()); formFieldDictDifyVo.setId(o.getId());
formFieldDictDifyVo.setName(o.getName()); formFieldDictDifyVo.setName(o.getName());
@ -356,18 +361,18 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
return vos; return vos;
} }
public Map<String, List<FormFieldDictVO>> get(Map<String, FormFieldDictQ> qs) { public Map<String, List<FormFieldDictVO>> get(Map<String, FormFieldDictQ> qs) {
if (qs == null || qs.isEmpty()) { if (qs == null || qs.isEmpty()) {
return Collections.emptyMap(); return Collections.emptyMap();
} }
Set<String> configTypes = qs.keySet(); Set<String> configTypes = qs.keySet();
FormFieldDictExample example = new FormFieldDictExample();
example.createCriteria() LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
.andConfigTypeIn(new ArrayList<>(configTypes)) .in(FormFieldDict::getConfigType, new ArrayList<>(configTypes))
.andDeletedEqualTo(0); .eq(FormFieldDict::getDeleted, 0)
example.setOrderByClause("sort_order asc,name asc"); .orderByAsc(FormFieldDict::getSortOrder, FormFieldDict::getName);
List<FormFieldDict> dicts = baseMapper.selectByExampleWithBLOBs(example);
List<FormFieldDict> dicts = baseMapper.selectList(queryWrapper);
Map<String, List<FormFieldDict>> result = dicts.stream() Map<String, List<FormFieldDict>> result = dicts.stream()
.collect( .collect(
@ -418,13 +423,6 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
configTypeDicts = Collections.emptyList(); configTypeDicts = Collections.emptyList();
} }
} }
//
// //fieldCodes 过滤
// if (CollUtil.isNotEmpty(query.getFieldCodes())) {
// configTypeDicts = configTypeDicts.stream()
// .filter(item -> query.getFieldCodes().contains(item.getCode()))
// .collect(Collectors.toList());
// }
//parentId 过滤 //parentId 过滤
if (query.getParentId() != null) { if (query.getParentId() != null) {
@ -530,14 +528,15 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
public List<FormFieldDictVO> getByIds(List<Long> ids, Integer deleted) { public List<FormFieldDictVO> getByIds(List<Long> ids, Integer deleted) {
Assert.notEmpty(ids, "ids cannot be empty"); Assert.notEmpty(ids, "ids cannot be empty");
FormFieldDictExample example = new FormFieldDictExample();
FormFieldDictExample.Criteria criteria = example.createCriteria()
.andIdIn(ids);
if (deleted != null) {
criteria.andDeletedEqualTo(deleted);
}
List<FormFieldDict> dicts = baseMapper.selectByExampleWithBLOBs(example);
LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
.in(FormFieldDict::getId, ids);
if (deleted != null) {
queryWrapper.eq(FormFieldDict::getDeleted, deleted);
}
List<FormFieldDict> dicts = baseMapper.selectList(queryWrapper);
return BeanUtil.copyToList(dicts, FormFieldDictVO.class); return BeanUtil.copyToList(dicts, FormFieldDictVO.class);
} }
@ -582,27 +581,27 @@ public class FormFieldDictService extends ServiceImpl<FormFieldDictMapper, FormF
} }
private long countByCode(String configType, String code, Long notId) { private long countByCode(String configType, String code, Long notId) {
FormFieldDictExample example = new FormFieldDictExample(); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
FormFieldDictExample.Criteria ca = example.createCriteria() .eq(FormFieldDict::getConfigType, configType)
.andConfigTypeEqualTo(configType) .eq(FormFieldDict::getCode, code)
.andCodeEqualTo(code) .eq(FormFieldDict::getDeleted, 0);
.andDeletedEqualTo(0);
if (notId != null) { if (notId != null) {
ca.andIdNotEqualTo(notId); queryWrapper.ne(FormFieldDict::getId, notId);
} }
return baseMapper.countByExample(example); return baseMapper.selectCount(queryWrapper);
} }
private long countByName(String configType, String name, Long notId) { private long countByName(String configType, String name, Long notId) {
FormFieldDictExample example = new FormFieldDictExample(); LambdaQueryWrapper<FormFieldDict> queryWrapper = new LambdaQueryWrapper<FormFieldDict>()
FormFieldDictExample.Criteria ca = example.createCriteria() .eq(FormFieldDict::getConfigType, configType)
.andConfigTypeEqualTo(configType) .eq(FormFieldDict::getName, name)
.andNameEqualTo(name) .eq(FormFieldDict::getDeleted, 0);
.andDeletedEqualTo(0);
if (notId != null) { if (notId != null) {
ca.andIdNotEqualTo(notId); queryWrapper.ne(FormFieldDict::getId, notId);
} }
return baseMapper.countByExample(example); return baseMapper.selectCount(queryWrapper);
} }
} }

View File

@ -20,6 +20,8 @@ import org.dromara.common.json.utils.JsonUtils;
import org.dromara.common.oss.core.OssClient; import org.dromara.common.oss.core.OssClient;
import org.dromara.common.oss.entity.UploadResult; import org.dromara.common.oss.entity.UploadResult;
import org.dromara.common.oss.factory.OssFactory; import org.dromara.common.oss.factory.OssFactory;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -74,11 +76,10 @@ public class FormPrintConfigService extends ServiceImpl<FormPrintConfigMapper, F
* @return 表单打印配置对象 * @return 表单打印配置对象
*/ */
public FormPrintConfigVO getByFormId(Long formId) { public FormPrintConfigVO getByFormId(Long formId) {
FormPrintConfigExample example = new FormPrintConfigExample(); LambdaQueryWrapper<FormPrintConfig> queryWrapper = new LambdaQueryWrapper<FormPrintConfig>()
example.createCriteria() .eq(FormPrintConfig::getFormId, formId)
.andFormIdEqualTo(formId); .orderByDesc(FormPrintConfig::getId);
example.setOrderByClause("id desc"); List<FormPrintConfig> formPrintConfigs = baseMapper.selectList(queryWrapper);
List<FormPrintConfig> formPrintConfigs = formPrintConfigMapperExt.selectByExampleWithBLOBs(example);
if (!formPrintConfigs.isEmpty()) { if (!formPrintConfigs.isEmpty()) {
return BeanUtil.copyProperties(formPrintConfigs.get(0), FormPrintConfigVO.class); return BeanUtil.copyProperties(formPrintConfigs.get(0), FormPrintConfigVO.class);
} else { } else {
@ -87,11 +88,10 @@ public class FormPrintConfigService extends ServiceImpl<FormPrintConfigMapper, F
} }
public FormPrintConfig getEntityByFormId(Long formId) { public FormPrintConfig getEntityByFormId(Long formId) {
FormPrintConfigExample example = new FormPrintConfigExample(); LambdaQueryWrapper<FormPrintConfig> queryWrapper = new LambdaQueryWrapper<FormPrintConfig>()
example.createCriteria() .eq(FormPrintConfig::getFormId, formId)
.andFormIdEqualTo(formId); .orderByDesc(FormPrintConfig::getId);
example.setOrderByClause("id desc"); List<FormPrintConfig> formPrintConfigs = baseMapper.selectList(queryWrapper);
List<FormPrintConfig> formPrintConfigs = formPrintConfigMapperExt.selectByExampleWithBLOBs(example);
if (!formPrintConfigs.isEmpty()) { if (!formPrintConfigs.isEmpty()) {
return formPrintConfigs.get(0); return formPrintConfigs.get(0);
} else { } else {
@ -127,12 +127,12 @@ public class FormPrintConfigService extends ServiceImpl<FormPrintConfigMapper, F
if (config != null) { if (config != null) {
entity.setId(config.getId()); entity.setId(config.getId());
entity.setMode(dto.getMode()); entity.setMode(dto.getMode());
return baseMapper.updateByPrimaryKeySelective(entity); return baseMapper.updateById(entity);
} else { } else {
entity.setMode(dto.getMode()); entity.setMode(dto.getMode());
entity.setCreatedBy(UserUtils.getUserId()); entity.setCreatedBy(UserUtils.getUserId());
entity.setCreateTime(new Date()); entity.setCreateTime(new Date());
return formPrintConfigMapperExt.insertSelective(entity); return baseMapper.insert(entity);
} }
} }

View File

@ -3,10 +3,11 @@ package com.pcloud.booksflow.form.service;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.pcloud.booksflow.form.api.constant.BaseConstant; import com.pcloud.booksflow.form.api.constant.BaseConstant;
import com.pcloud.booksflow.form.mybatis.entity.*; import com.pcloud.booksflow.form.mybatis.entity.*;
import com.pcloud.booksflow.form.mybatis.mapper.FormMapperExt; import com.pcloud.booksflow.form.mybatis.mapper.FormMapper;
import com.pcloud.booksflow.form.utils.TenantHelper; import com.pcloud.booksflow.form.utils.TenantHelper;
import org.dromara.common.core.exception.ServiceException; import org.dromara.common.core.exception.ServiceException;
import org.springframework.beans.factory.annotation.Autowired; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -17,10 +18,9 @@ import java.util.List;
* Form Service 实现增删改查业务逻辑 * Form Service 实现增删改查业务逻辑
*/ */
@Service @Service
public class FormService { public class FormService extends ServiceImpl<FormMapper, Form> {
@Autowired
private FormMapperExt formMapperExt;
/** /**
* 创建表单 * 创建表单
@ -37,7 +37,7 @@ public class FormService {
throw new ServiceException("名称已存在: " + form.getName()); throw new ServiceException("名称已存在: " + form.getName());
} }
form.setId(null); form.setId(null);
formMapper.insert(form); baseMapper.insert(form);
return form; return form;
} }
@ -48,7 +48,7 @@ public class FormService {
* @return 表单对象 * @return 表单对象
*/ */
public Form getById(Long id) { public Form getById(Long id) {
return formMapperExt.selectByPrimaryKey(id); return baseMapper.selectById(id);
} }
/** /**
@ -67,7 +67,7 @@ public class FormService {
throw new ServiceException("名称已存在: " + form.getName()); throw new ServiceException("名称已存在: " + form.getName());
} }
form.setId(id); form.setId(id);
formMapperExt.updateByPrimaryKeySelective(form); baseMapper.updateById(form);
return form; return form;
} }
@ -78,7 +78,7 @@ public class FormService {
* @return 删除结果 * @return 删除结果
*/ */
public int delete(Long id) { public int delete(Long id) {
return formMapperExt.deleteByPrimaryKey(id); return baseMapper.deleteById(id);
} }
/** /**
@ -88,18 +88,17 @@ public class FormService {
* @return 表单列表 * @return 表单列表
*/ */
public List<Form> listByName(String name) { public List<Form> listByName(String name) {
FormExample example = new FormExample(); LambdaQueryWrapper<Form> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(name)) { if (StrUtil.isNotBlank(name)) {
example.createCriteria() queryWrapper.like(Form::getName, name);
.andNameLike("%" + name + "%");
} }
return formMapperExt.selectByExample(example); return baseMapper.selectList(queryWrapper);
} }
public Form getByCode(String formCode) { public Form getByCode(String formCode) {
FormExample example = new FormExample(); LambdaQueryWrapper<Form> queryWrapper = new LambdaQueryWrapper<Form>()
example.createCriteria().andCodeEqualTo(formCode); .eq(Form::getCode, formCode);
return formMapperExt.selectOneByExample(example); return baseMapper.selectOne(queryWrapper);
} }
/** /**
@ -108,28 +107,25 @@ public class FormService {
* @return 表单对象 * @return 表单对象
*/ */
public List<Form> list() { public List<Form> list() {
FormExample example = new FormExample(); return baseMapper.selectList(null);
return formMapperExt.selectByExample(example);
} }
private long countByCode(String code, Long notId) { private long countByCode(String code, Long notId) {
FormExample example = new FormExample(); LambdaQueryWrapper<Form> queryWrapper = new LambdaQueryWrapper<Form>()
FormExample.Criteria criteria = example.createCriteria() .eq(Form::getCode, code);
.andCodeEqualTo(code);
if (notId != null) { if (notId != null) {
criteria.andIdNotEqualTo(notId); queryWrapper.ne(Form::getId, notId);
} }
return formMapperExt.countByExample(example); return baseMapper.selectCount(queryWrapper);
} }
private long countByName(String name, Long notId) { private long countByName(String name, Long notId) {
FormExample example = new FormExample(); LambdaQueryWrapper<Form> queryWrapper = new LambdaQueryWrapper<Form>()
FormExample.Criteria criteria = example.createCriteria() .eq(Form::getName, name);
.andNameEqualTo(name);
if (notId != null) { if (notId != null) {
criteria.andIdNotEqualTo(notId); queryWrapper.ne(Form::getId, notId);
} }
return formMapperExt.countByExample(example); return baseMapper.selectCount(queryWrapper);
} }
} }

View File

@ -6,10 +6,11 @@ import cn.hutool.core.util.StrUtil;
import com.pcloud.booksflow.form.api.constant.FormTemplateFieldType; import com.pcloud.booksflow.form.api.constant.FormTemplateFieldType;
import com.pcloud.booksflow.form.api.dto.FormTemplateDTO; import com.pcloud.booksflow.form.api.dto.FormTemplateDTO;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField; import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplateFieldExample; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.pcloud.booksflow.form.mybatis.mapper.FormTemplateFieldMapperExt; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.mybatis.mapper.FormTemplateFieldMapper;
import com.pcloud.booksflow.form.utils.UserUtils; import com.pcloud.booksflow.form.utils.UserUtils;
import com.pcloud.universe.commons.utils.JsonUtils; import org.dromara.common.json.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -26,10 +27,9 @@ import java.util.stream.Collectors;
*/ */
@Service @Service
@Slf4j @Slf4j
public class FormTemplateFieldService { public class FormTemplateFieldService extends ServiceImpl<FormTemplateFieldMapper, FormTemplateField> {
@Autowired
private FormTemplateFieldMapperExt formTemplateFieldMapperExt;
/** /**
* 创建新的表单模板字段 * 创建新的表单模板字段
@ -38,7 +38,7 @@ public class FormTemplateFieldService {
* @return 创建后的表单模板字段对象 * @return 创建后的表单模板字段对象
*/ */
public FormTemplateField create(FormTemplateField formTemplateField) { public FormTemplateField create(FormTemplateField formTemplateField) {
formTemplateFieldMapperExt.insertSelective(formTemplateField); baseMapper.insert(formTemplateField);
return formTemplateField; return formTemplateField;
} }
@ -58,7 +58,7 @@ public class FormTemplateFieldService {
if (isGroup(item.getType())) { if (isGroup(item.getType())) {
FormTemplateField fieldGroup = dto2Entity(templateId, item, userId, date); FormTemplateField fieldGroup = dto2Entity(templateId, item, userId, date);
//保存分组 //保存分组
formTemplateFieldMapperExt.insert(fieldGroup); baseMapper.insert(fieldGroup);
if (CollUtil.isNotEmpty(item.getChildren())) { if (CollUtil.isNotEmpty(item.getChildren())) {
List<FormTemplateField> _fields = item.getChildren().stream() List<FormTemplateField> _fields = item.getChildren().stream()
.map(item1 -> { .map(item1 -> {
@ -68,7 +68,7 @@ public class FormTemplateFieldService {
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
//保存分组下字段 //保存分组下字段
formTemplateFieldMapperExt.batchInsert(_fields); this.saveBatch(_fields);
} }
} else { } else {
fields.add(dto2Entity(templateId, item, userId, date)); fields.add(dto2Entity(templateId, item, userId, date));
@ -76,7 +76,7 @@ public class FormTemplateFieldService {
} }
if (!fields.isEmpty()) { if (!fields.isEmpty()) {
formTemplateFieldMapperExt.batchInsert(fields); this.saveBatch(fields);
} }
} }
@ -88,7 +88,7 @@ public class FormTemplateFieldService {
FormTemplateField field = BeanUtil.copyProperties(item, FormTemplateField.class, "ext"); FormTemplateField field = BeanUtil.copyProperties(item, FormTemplateField.class, "ext");
field.setId(null); field.setId(null);
field.setTemplateId(templateId); field.setTemplateId(templateId);
String ext = JsonUtils.serialize(item.getExt()); String ext = JsonUtils.toJsonString(item.getExt());
if (ext == null) { if (ext == null) {
field.setExt("{}"); field.setExt("{}");
} else { } else {
@ -109,7 +109,7 @@ public class FormTemplateFieldService {
* @return 表单模板字段对象 * @return 表单模板字段对象
*/ */
public FormTemplateField getById(Long id) { public FormTemplateField getById(Long id) {
return formTemplateFieldMapperExt.selectByPrimaryKey(id); return baseMapper.selectById(id);
} }
/** /**
@ -120,13 +120,13 @@ public class FormTemplateFieldService {
* @return 表单模板字段列表 * @return 表单模板字段列表
*/ */
public List<FormTemplateField> getByTemplateId(Long templateId, Boolean show) { public List<FormTemplateField> getByTemplateId(Long templateId, Boolean show) {
FormTemplateFieldExample example = new FormTemplateFieldExample(); LambdaQueryWrapper<FormTemplateField> wrapper = new LambdaQueryWrapper<>();
FormTemplateFieldExample.Criteria criteria = example.createCriteria().andTemplateIdEqualTo(templateId); wrapper.eq(FormTemplateField::getTemplateId, templateId);
if (show != null) { if (show != null) {
criteria.andShowEqualTo(show); wrapper.eq(FormTemplateField::getShow, show);
} }
example.setOrderByClause("sort_order asc,id asc"); wrapper.orderByAsc(FormTemplateField::getSortOrder, FormTemplateField::getId);
return formTemplateFieldMapperExt.selectByExampleWithBLOBs(example); return baseMapper.selectList(wrapper);
} }
/** /**
@ -139,8 +139,8 @@ public class FormTemplateFieldService {
public int update(Long id, FormTemplateField formTemplateField) { public int update(Long id, FormTemplateField formTemplateField) {
formTemplateField.setId(id); formTemplateField.setId(id);
formTemplateField.setUpdatedBy(UserUtils.getUserId()); formTemplateField.setUpdatedBy(UserUtils.getUserId());
formTemplateField.setCreateTime(new Date()); formTemplateField.setUpdateTime(new Date());
return formTemplateFieldMapperExt.updateByPrimaryKeySelective(formTemplateField); return baseMapper.updateById(formTemplateField);
} }
/** /**
@ -150,13 +150,13 @@ public class FormTemplateFieldService {
* @return 删除结果 * @return 删除结果
*/ */
public int delete(Long id) { public int delete(Long id) {
return formTemplateFieldMapperExt.deleteByPrimaryKey(id); return baseMapper.deleteById(id);
} }
public List<FormTemplateField> list() { public List<FormTemplateField> list() {
FormTemplateFieldExample example = new FormTemplateFieldExample(); LambdaQueryWrapper<FormTemplateField> wrapper = new LambdaQueryWrapper<>();
return formTemplateFieldMapperExt.selectByExampleWithBLOBs(example); return baseMapper.selectList(wrapper);
} }
@Transactional @Transactional
@ -172,7 +172,7 @@ public class FormTemplateFieldService {
private FormTemplateDTO.FieldDTO entity2Dto(FormTemplateField item) { private FormTemplateDTO.FieldDTO entity2Dto(FormTemplateField item) {
FormTemplateDTO.FieldDTO dto = BeanUtil.copyProperties(item, FormTemplateDTO.FieldDTO.class, "ext"); FormTemplateDTO.FieldDTO dto = BeanUtil.copyProperties(item, FormTemplateDTO.FieldDTO.class, "ext");
if (StrUtil.isNotBlank(item.getExt())) { if (StrUtil.isNotBlank(item.getExt())) {
dto.setExt(JsonUtils.parse(item.getExt(), FormTemplateDTO.ExtDTO.class)); dto.setExt(JsonUtils.parseObject(item.getExt(), FormTemplateDTO.ExtDTO.class));
} }
// 初始化children列表以避免空指针异常 // 初始化children列表以避免空指针异常
dto.setChildren(new ArrayList<>()); dto.setChildren(new ArrayList<>());
@ -214,4 +214,4 @@ public class FormTemplateFieldService {
return rootNodes; return rootNodes;
} }
} }

View File

@ -3,24 +3,19 @@ package com.pcloud.booksflow.form.service;
import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import cn.hutool.crypto.digest.DigestUtil; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.pcloud.aistudio.api.feign.DataPermissionFeignClient; import com.baomidou.mybatisplus.core.toolkit.EncryptUtils;
import com.pcloud.booksflow.form.api.constant.FormTemplateFieldType; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.api.dto.FormTemplateDTO; import com.pcloud.booksflow.form.api.dto.FormTemplateDTO;
import com.pcloud.booksflow.form.api.vo.FormTemplateVO; import com.pcloud.booksflow.form.api.vo.FormTemplateVO;
import com.pcloud.booksflow.form.mybatis.entity.Form; import com.pcloud.booksflow.form.mybatis.entity.Form;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplate; import com.pcloud.booksflow.form.mybatis.entity.FormTemplate;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplateExample;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField; import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField;
import com.pcloud.booksflow.form.mybatis.mapper.FormTemplateMapperExt; import com.pcloud.booksflow.form.mybatis.mapper.FormTemplateMapper;
import com.pcloud.booksflow.form.utils.UserUtils; import com.pcloud.booksflow.form.utils.UserUtils;
import com.pcloud.booksflow.workflow.api.domain.request.SyncFormFieldRequest;
import com.pcloud.booksflow.workflow.api.domain.request.SyncFormRequest;
import com.pcloud.booksflow.workflow.api.service.BooksFlowWorkflowService;
import com.pcloud.common.dto.ResponseDto;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.universe.commons.utils.JsonUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.core.exception.ServiceException;
import org.dromara.common.json.utils.JsonUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
@ -33,18 +28,12 @@ import java.util.stream.Collectors;
*/ */
@Slf4j @Slf4j
@Service @Service
public class FormTemplateService { public class FormTemplateService extends ServiceImpl<FormTemplateMapper, FormTemplate> {
@Autowired
private FormTemplateMapperExt formTemplateMapperExt;
@Autowired @Autowired
private FormTemplateFieldService formTemplateFieldService; private FormTemplateFieldService formTemplateFieldService;
@Autowired @Autowired
private FormService formService; private FormService formService;
@Autowired
private BooksFlowWorkflowService booksFlowWorkflowService;
@Autowired(required = false)
private DataPermissionFeignClient dataPermissionFeignClient;
/** /**
* save表单模板信息 * save表单模板信息
@ -83,7 +72,7 @@ public class FormTemplateService {
FormTemplate maxVersionEntity = getMaxVersion(dto.getFormId()); FormTemplate maxVersionEntity = getMaxVersion(dto.getFormId());
//***** 检验内容是否和最新版一致 //***** 检验内容是否和最新版一致
String md5 = DigestUtil.md5Hex(JsonUtils.serialize(dto)); String md5 = EncryptUtils.md5Base64(JsonUtils.toJsonString(dto));
if (StrUtil.isBlank(md5)) { if (StrUtil.isBlank(md5)) {
throw new ServiceException("md5生成错误"); throw new ServiceException("md5生成错误");
} }
@ -96,17 +85,6 @@ public class FormTemplateService {
FormTemplate entity = create(dto.getFormId(), md5); FormTemplate entity = create(dto.getFormId(), md5);
// 保存模板字段配置 // 保存模板字段配置
formTemplateFieldService.saveTemplateFields(dto.getTemplateFields(), entity.getId()); formTemplateFieldService.saveTemplateFields(dto.getTemplateFields(), entity.getId());
try {
feignWorkFlowSyncForm(dto, entity);
} catch (Exception e) {
log.error("feignWorkFlowSyncForm 同步用户表单信息失败:{}", e.getMessage(), e);
}
try {
feignUserSyncForm(dto.getFormId());
} catch (Exception e) {
log.error("feignUserSyncForm 同步用户表单信息失败:{}", e.getMessage(), e);
}
return entity; return entity;
} }
@ -171,11 +149,10 @@ public class FormTemplateService {
entity.setCreatedBy(UserUtils.getUserId()); entity.setCreatedBy(UserUtils.getUserId());
entity.setId(null); entity.setId(null);
// 保存 // 保存
formTemplateMapperExt.insertSelective(entity); baseMapper.insert(entity);
return entity; return entity;
} }
/** /**
* 根据ID获取表单模板 * 根据ID获取表单模板
* *
@ -183,7 +160,7 @@ public class FormTemplateService {
* @return 表单模板对象 * @return 表单模板对象
*/ */
public FormTemplateVO getVOById(Long id, Boolean show, Boolean tree) { public FormTemplateVO getVOById(Long id, Boolean show, Boolean tree) {
FormTemplate template = formTemplateMapperExt.selectByPrimaryKey(id); FormTemplate template = baseMapper.selectById(id);
return entity2VO(template, show, tree); return entity2VO(template, show, tree);
} }
@ -206,12 +183,11 @@ public class FormTemplateService {
} }
public FormTemplate getMaxVersion(Long formId) { public FormTemplate getMaxVersion(Long formId) {
FormTemplateExample example = new FormTemplateExample(); LambdaQueryWrapper<FormTemplate> queryWrapper = new LambdaQueryWrapper<FormTemplate>()
example.createCriteria().andFormIdEqualTo(formId); .eq(FormTemplate::getFormId, formId)
example.setOrderByClause("version DESC"); .orderByDesc(FormTemplate::getVersion);
// 只查询第一条记录最大版本号 List<FormTemplate> templates = baseMapper.selectList(queryWrapper);
List<FormTemplate> templates = formTemplateMapperExt.selectByExampleWithPaging(example, 0, 1);
if (templates.isEmpty()) { if (templates.isEmpty()) {
return null; return null;
} else { } else {
@ -226,11 +202,11 @@ public class FormTemplateService {
* @return 表单 * @return 表单
*/ */
public FormTemplate getMinVersion(Long formId) { public FormTemplate getMinVersion(Long formId) {
FormTemplateExample example = new FormTemplateExample(); LambdaQueryWrapper<FormTemplate> queryWrapper = new LambdaQueryWrapper<FormTemplate>()
example.createCriteria().andFormIdEqualTo(formId); .eq(FormTemplate::getFormId, formId)
example.setOrderByClause("version asc"); .orderByAsc(FormTemplate::getVersion);
List<FormTemplate> templates = formTemplateMapperExt.selectByExampleWithPaging(example, 0, 1); List<FormTemplate> templates = baseMapper.selectList(queryWrapper);
if (templates.isEmpty()) { if (templates.isEmpty()) {
return null; return null;
} else { } else {
@ -264,7 +240,7 @@ public class FormTemplateService {
List<FormTemplateVO.FieldVO> templateFields = fields.stream().map(field -> { List<FormTemplateVO.FieldVO> templateFields = fields.stream().map(field -> {
FormTemplateVO.FieldVO fvo = new FormTemplateVO.FieldVO(); FormTemplateVO.FieldVO fvo = new FormTemplateVO.FieldVO();
BeanUtil.copyProperties(field, fvo, "ext"); BeanUtil.copyProperties(field, fvo, "ext");
fvo.setExt(JsonUtils.parse(field.getExt(), FormTemplateVO.ExtVO.class)); fvo.setExt(JsonUtils.parseObject(field.getExt(), FormTemplateVO.ExtVO.class));
return fvo; return fvo;
}).collect(Collectors.toList()); }).collect(Collectors.toList());
@ -282,8 +258,7 @@ public class FormTemplateService {
} }
public List<FormTemplate> list() { public List<FormTemplate> list() {
FormTemplateExample example = new FormTemplateExample(); return baseMapper.selectList(null);
return formTemplateMapperExt.selectByExample(example);
} }
private List<FormTemplateVO.FieldVO> buildTree(List<FormTemplateVO.FieldVO> list) { private List<FormTemplateVO.FieldVO> buildTree(List<FormTemplateVO.FieldVO> list) {
@ -291,7 +266,7 @@ public class FormTemplateService {
return new ArrayList<>(); return new ArrayList<>();
} }
Map<Long, FormTemplateVO.FieldVO> map = list.stream() Map<Long, FormTemplateVO.FieldVO> map = list.stream()
.collect(Collectors.toMap(FormTemplateVO.FieldVO::getId, v -> v)); .collect(Collectors.toMap(FormTemplateVO.FieldVO::getId, v -> v));
List<FormTemplateVO.FieldVO> tree = new ArrayList<>(); List<FormTemplateVO.FieldVO> tree = new ArrayList<>();
for (FormTemplateVO.FieldVO node : list) { for (FormTemplateVO.FieldVO node : list) {
@ -355,7 +330,7 @@ public class FormTemplateService {
* @param dto dto * @param dto dto
* @param entity entity * @param entity entity
*/ */
private void feignWorkFlowSyncForm(FormTemplateDTO dto, FormTemplate entity) { /*private void feignWorkFlowSyncForm(FormTemplateDTO dto, FormTemplate entity) {
log.info("feignWorkFlowSyncForm 开始同步表单信息:{}", dto.getFormId()); log.info("feignWorkFlowSyncForm 开始同步表单信息:{}", dto.getFormId());
Long tenantId = UserUtils.getTenantId(); Long tenantId = UserUtils.getTenantId();
Form form = formService.getById(dto.getFormId()); Form form = formService.getById(dto.getFormId());
@ -373,7 +348,7 @@ public class FormTemplateService {
log.info("feignWorkFlowSyncForm 请求参数:{}", JsonUtils.serialize(data)); log.info("feignWorkFlowSyncForm 请求参数:{}", JsonUtils.serialize(data));
ResponseDto<?> responseDto = booksFlowWorkflowService.syncFormFields(data); ResponseDto<?> responseDto = booksFlowWorkflowService.syncFormFields(data);
log.info("feignWorkFlowSyncForm 结束同步表单信息:{}{}", form.getCode(), responseDto); log.info("feignWorkFlowSyncForm 结束同步表单信息:{}{}", form.getCode(), responseDto);
} }*/
/** /**
* 递归转换表单字段为同步请求对象支持多层级结构 * 递归转换表单字段为同步请求对象支持多层级结构
@ -382,15 +357,15 @@ public class FormTemplateService {
* @param fields 表单字段列表 * @param fields 表单字段列表
* @return 同步请求对象列表 * @return 同步请求对象列表
*/ */
private List<SyncFormFieldRequest> convertToSyncFormFieldRequests(List<FormTemplateDTO.FieldDTO> fields) { private List<Object> convertToSyncFormFieldRequests(List<FormTemplateDTO.FieldDTO> fields) {
if (fields == null || fields.isEmpty()) { if (fields == null || fields.isEmpty()) {
return new ArrayList<>(); return new ArrayList<>();
} }
return fields.stream() return fields.stream()
.map(this::convertToSyncFormFieldRequest) .map(this::convertToSyncFormFieldRequest)
.filter(Objects::nonNull) .filter(Objects::nonNull)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
/** /**
@ -399,7 +374,7 @@ public class FormTemplateService {
* @param field 表单字段 * @param field 表单字段
* @return 同步请求对象 * @return 同步请求对象
*/ */
private SyncFormFieldRequest convertToSyncFormFieldRequest(FormTemplateDTO.FieldDTO field) { private Object convertToSyncFormFieldRequest(FormTemplateDTO.FieldDTO field) {
if (field == null) { if (field == null) {
return null; return null;
} }
@ -407,17 +382,18 @@ public class FormTemplateService {
if (field.getShow() != null && !field.getShow()) { if (field.getShow() != null && !field.getShow()) {
return null; return null;
} }
return SyncFormFieldRequest.builder() // 简化返回对象避免依赖外部类
.show(field.getShow()) Map<String, Object> result = new HashMap<>();
.edit(field.getEdit()) result.put("show", field.getShow());
.fieldCode(field.getCode()) result.put("edit", field.getEdit());
.fieldName(field.getShowTitle()) result.put("fieldCode", field.getCode());
.sortOrder(field.getSortOrder()) result.put("fieldName", field.getShowTitle());
.children(convertToSyncFormFieldRequests(field.getChildren())) result.put("sortOrder", field.getSortOrder());
.build(); result.put("children", convertToSyncFormFieldRequests(field.getChildren()));
return result;
} }
private void feignUserSyncForm(Long formId) { /*private void feignUserSyncForm(Long formId) {
if (formId == null) { if (formId == null) {
return; return;
} }
@ -430,7 +406,5 @@ public class FormTemplateService {
Form form = formService.getById(formId); Form form = formService.getById(formId);
Boolean b = dataPermissionFeignClient.syncUserDataPermissions(form.getCode(), "booksflow", tenantId); Boolean b = dataPermissionFeignClient.syncUserDataPermissions(form.getCode(), "booksflow", tenantId);
log.info("feignUserSyncForm 结束同步表单信息:{}{}", form.getCode(), b); log.info("feignUserSyncForm 结束同步表单信息:{}{}", form.getCode(), b);
} }*/
} }

View File

@ -2,14 +2,15 @@ package com.pcloud.booksflow.form.service;
import cn.hutool.core.collection.CollUtil; import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.util.StrUtil; import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.api.dto.ModifyLogRecordDTO; import com.pcloud.booksflow.form.api.dto.ModifyLogRecordDTO;
import com.pcloud.booksflow.form.mybatis.entity.ModifyLogRecord; import com.pcloud.booksflow.form.mybatis.entity.ModifyLogRecord;
import com.pcloud.booksflow.form.mybatis.entity.ModifyLogRecordExample; import com.pcloud.booksflow.form.mybatis.mapper.ModifyLogRecordMapper;
import com.pcloud.booksflow.form.mybatis.mapper.ModifyLogRecordMapperExt; import org.dromara.common.core.exception.ServiceException;
import com.pcloud.common.exceptions.BizException;
import com.pcloud.common.page.PageBeanNew;
import org.springframework.beans.BeanUtils; import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
@ -20,10 +21,7 @@ import java.util.stream.Collectors;
* ModifyLogRecord Service 实现增删改查业务逻辑 * ModifyLogRecord Service 实现增删改查业务逻辑
*/ */
@Service @Service
public class ModifyLogRecordService { public class ModifyLogRecordService extends ServiceImpl<ModifyLogRecordMapper, ModifyLogRecord> {
@Autowired
private ModifyLogRecordMapperExt modifyLogRecordMapperExt;
/** /**
* 批量创建修改日志记录 * 批量创建修改日志记录
@ -58,7 +56,7 @@ public class ModifyLogRecordService {
}) })
.collect(Collectors.toList()); .collect(Collectors.toList());
return modifyLogRecordMapperExt.batchInsert(modifyLogRecords); return saveBatch(modifyLogRecords) ? modifyLogRecords.size() : 0;
} }
/** /**
@ -68,19 +66,19 @@ public class ModifyLogRecordService {
* @param formCode formCode * @param formCode formCode
* @return 修改日志记录列表 * @return 修改日志记录列表
*/ */
public PageBeanNew<ModifyLogRecord> listByEntityType(String entityType, String entityId, String formCode, Integer currentPage, Integer numPerPage) { public IPage<ModifyLogRecord> listByEntityType(String entityType, String entityId, String formCode, Integer currentPage, Integer numPerPage) {
ModifyLogRecordExample example = new ModifyLogRecordExample(); LambdaQueryWrapper<ModifyLogRecord> queryWrapper = new LambdaQueryWrapper<ModifyLogRecord>()
ModifyLogRecordExample.Criteria criteria = example.createCriteria() .eq(ModifyLogRecord::getEntityType, entityType)
.andEntityTypeEqualTo(entityType) .eq(ModifyLogRecord::getEntityId, entityId)
.andEntityIdEqualTo(entityId) .eq(ModifyLogRecord::getDeleted, 0)
.andDeletedEqualTo(0); .orderByDesc(ModifyLogRecord::getId);
if (StrUtil.isNotBlank(formCode)) { if (StrUtil.isNotBlank(formCode)) {
criteria.andFormCodeEqualTo(formCode); queryWrapper.eq(ModifyLogRecord::getFormCode, formCode);
} }
example.setOrderByClause("id desc");
int count = (int) modifyLogRecordMapperExt.countByExample(example); Page<ModifyLogRecord> page = new Page<>(currentPage, numPerPage);
List<ModifyLogRecord> records = modifyLogRecordMapperExt.selectByExampleWithPaging(example, currentPage * numPerPage, numPerPage); return baseMapper.selectPage(page, queryWrapper);
return new PageBeanNew<>(currentPage, numPerPage, count, records);
} }
} }

View File

@ -1,9 +1,9 @@
package com.pcloud.booksflow.form.service; package com.pcloud.booksflow.form.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.pcloud.booksflow.form.mybatis.entity.TenantInitStatus; import com.pcloud.booksflow.form.mybatis.entity.TenantInitStatus;
import com.pcloud.booksflow.form.mybatis.entity.TenantInitStatusExample; import com.pcloud.booksflow.form.mybatis.mapper.TenantInitStatusMapper;
import com.pcloud.booksflow.form.mybatis.mapper.TenantInitStatusMapperExt;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.util.Date; import java.util.Date;
@ -14,10 +14,7 @@ import java.util.List;
* 管理租户初始化状态的增删改查操作 * 管理租户初始化状态的增删改查操作
*/ */
@Service @Service
public class TenantInitStatusService { public class TenantInitStatusService extends ServiceImpl<TenantInitStatusMapper, TenantInitStatus> {
@Autowired
private TenantInitStatusMapperExt tenantInitStatusMapperExt;
/** /**
* 根据租户ID获取初始化状态 * 根据租户ID获取初始化状态
@ -26,9 +23,9 @@ public class TenantInitStatusService {
* @return 租户初始化状态如果不存在则返回null * @return 租户初始化状态如果不存在则返回null
*/ */
public TenantInitStatus getByTenantId(Long tenantId) { public TenantInitStatus getByTenantId(Long tenantId) {
TenantInitStatusExample example = new TenantInitStatusExample(); LambdaQueryWrapper<TenantInitStatus> queryWrapper = new LambdaQueryWrapper<TenantInitStatus>()
example.createCriteria().andAgentIdEqualTo(tenantId); .eq(TenantInitStatus::getAgentId, tenantId);
List<TenantInitStatus> list = tenantInitStatusMapperExt.selectByExample(example); List<TenantInitStatus> list = baseMapper.selectList(queryWrapper);
return list.isEmpty() ? null : list.get(0); return list.isEmpty() ? null : list.get(0);
} }
@ -56,7 +53,7 @@ public class TenantInitStatusService {
status.setInitialized(initialized); status.setInitialized(initialized);
status.setCreateTime(new Date()); status.setCreateTime(new Date());
status.setUpdateTime(new Date()); status.setUpdateTime(new Date());
tenantInitStatusMapperExt.insertSelective(status); baseMapper.insert(status);
return status; return status;
} }
@ -69,4 +66,4 @@ public class TenantInitStatusService {
public void markAsInitialized(Long tenantId) { public void markAsInitialized(Long tenantId) {
create(tenantId, 1); create(tenantId, 1);
} }
} }

View File

@ -7,14 +7,15 @@ import com.pcloud.booksflow.form.mybatis.entity.FormDict;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplate; import com.pcloud.booksflow.form.mybatis.entity.FormTemplate;
import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField; import com.pcloud.booksflow.form.mybatis.entity.FormTemplateField;
import com.pcloud.booksflow.form.utils.TenantHelper; import com.pcloud.booksflow.form.utils.TenantHelper;
import com.pcloud.common.utils.cache.redis.JedisClusterUtils;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.dromara.common.redis.utils.RedisUtils;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional; import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.Assert; import org.springframework.util.Assert;
import java.time.Duration;
import java.util.*; import java.util.*;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -48,7 +49,7 @@ public class TenantInitializationService {
private final static String TenantInitializationKey = "init_tenant_uuid:%s"; private final static String TenantInitializationKey = "init_tenant_uuid:%s";
//TODO 后续改到动态配置那里 //TODO 后续改到动态配置那里
public final static List<String> TplConfigTypes = new ArrayList<>(Arrays.asList("expenseSubject", "contactUnit", "writingType","warehouse")); public final static List<String> TplConfigTypes = new ArrayList<>(Arrays.asList("expenseSubject", "contactUnit", "writingType", "warehouse"));
/** /**
* 检查并初始化租户数据 * 检查并初始化租户数据
@ -70,7 +71,7 @@ public class TenantInitializationService {
log.info("租户 {} db中已初始化无需重复初始化", tenantId); log.info("租户 {} db中已初始化无需重复初始化", tenantId);
return false; return false;
} }
boolean set = JedisClusterUtils.set(String.format(TenantInitializationKey, tenantId), "1", 60 * 10); boolean set = RedisUtils.setObjectIfAbsent(String.format(TenantInitializationKey, tenantId), "", Duration.ofSeconds(20L));
if (!set) { if (!set) {
log.warn("租户 {} 初始化中redis有key无需重复初始化", tenantId); log.warn("租户 {} 初始化中redis有key无需重复初始化", tenantId);
return false; return false;
@ -86,7 +87,7 @@ public class TenantInitializationService {
TenantHelper.dynamic(tenantId + "", () -> tenantInitializationService.dbInitForm(tenantId, forms, formTemplates, formTemplateFields, dicts)); TenantHelper.dynamic(tenantId + "", () -> tenantInitializationService.dbInitForm(tenantId, forms, formTemplates, formTemplateFields, dicts));
} finally { } finally {
//TODO 删除时候判断是不是同uuid的 key //TODO 删除时候判断是不是同uuid的 key
JedisClusterUtils.del(String.format(TenantInitializationKey, tenantId)); RedisUtils.deleteObject(String.format(TenantInitializationKey, tenantId));
} }
return true; return true;
} }
@ -129,13 +130,13 @@ public class TenantInitializationService {
Map<Long, Long> templateIdMapping = new HashMap<>(); Map<Long, Long> templateIdMapping = new HashMap<>();
// 按formId分组获取每个formId下版本最大的模板 // 按formId分组获取每个formId下版本最大的模板
Map<Long, List<FormTemplate>> formTemplatesGroupedByFormId = formTemplates.stream() Map<Long, List<FormTemplate>> formTemplatesGroupedByFormId = formTemplates.stream()
.collect(Collectors.groupingBy(FormTemplate::getFormId)); .collect(Collectors.groupingBy(FormTemplate::getFormId));
for (Map.Entry<Long, List<FormTemplate>> entry : formTemplatesGroupedByFormId.entrySet()) { for (Map.Entry<Long, List<FormTemplate>> entry : formTemplatesGroupedByFormId.entrySet()) {
// 获取当前formId下版本最大的模板 // 获取当前formId下版本最大的模板
FormTemplate maxVersionTemplate = entry.getValue().stream() FormTemplate maxVersionTemplate = entry.getValue().stream()
.max(Comparator.comparingInt(FormTemplate::getVersion)) .max(Comparator.comparingInt(FormTemplate::getVersion))
.orElse(null); .orElse(null);
if (maxVersionTemplate != null) { if (maxVersionTemplate != null) {
Long newFormId = formIdMapping.get(maxVersionTemplate.getFormId()); Long newFormId = formIdMapping.get(maxVersionTemplate.getFormId());
@ -192,4 +193,4 @@ public class TenantInitializationService {
return true; return true;
} }
} }