增加功能:规格参数类型、规格参数管理

This commit is contained in:
tiezx 2025-07-20 12:33:17 +08:00
parent da091ef3f1
commit d9cb1f17d2
19 changed files with 1066 additions and 0 deletions

View File

@ -0,0 +1,108 @@
package net.ferrum.business.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import net.ferrum.common.annotation.RepeatSubmit;
import net.ferrum.common.annotation.Log;
import net.ferrum.common.core.controller.BaseController;
import net.ferrum.common.core.domain.PageQuery;
import net.ferrum.common.core.domain.R;
import net.ferrum.common.core.validate.AddGroup;
import net.ferrum.common.core.validate.EditGroup;
import net.ferrum.common.core.validate.QueryGroup;
import net.ferrum.common.enums.BusinessType;
import net.ferrum.common.utils.poi.ExcelUtil;
import net.ferrum.business.domain.vo.QsSpecAttributeTypesVo;
import net.ferrum.business.domain.bo.QsSpecAttributeTypesBo;
import net.ferrum.business.service.IQsSpecAttributeTypesService;
import net.ferrum.common.core.page.TableDataInfo;
/**
* 规格类型
*
* @author ruoyi
* @date 2025-07-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/specAttributeTypes")
public class QsSpecAttributeTypesController extends BaseController {
private final IQsSpecAttributeTypesService iQsSpecAttributeTypesService;
/**
* 查询规格类型列表
*/
@SaCheckPermission("business:specAttributeTypes:list")
@GetMapping("/list")
public TableDataInfo<QsSpecAttributeTypesVo> list(QsSpecAttributeTypesBo bo, PageQuery pageQuery) {
return iQsSpecAttributeTypesService.queryPageList(bo, pageQuery);
}
/**
* 导出规格类型列表
*/
@SaCheckPermission("business:specAttributeTypes:export")
@Log(title = "规格类型", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(QsSpecAttributeTypesBo bo, HttpServletResponse response) {
List<QsSpecAttributeTypesVo> list = iQsSpecAttributeTypesService.queryList(bo);
ExcelUtil.exportExcel(list, "规格类型", QsSpecAttributeTypesVo.class, response);
}
/**
* 获取规格类型详细信息
*
* @param typeId 主键
*/
@SaCheckPermission("business:specAttributeTypes:query")
@GetMapping("/{typeId}")
public R<QsSpecAttributeTypesVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long typeId) {
return R.ok(iQsSpecAttributeTypesService.queryById(typeId));
}
/**
* 新增规格类型
*/
@SaCheckPermission("business:specAttributeTypes:add")
@Log(title = "规格类型", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody QsSpecAttributeTypesBo bo) {
return toAjax(iQsSpecAttributeTypesService.insertByBo(bo));
}
/**
* 修改规格类型
*/
@SaCheckPermission("business:specAttributeTypes:edit")
@Log(title = "规格类型", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody QsSpecAttributeTypesBo bo) {
return toAjax(iQsSpecAttributeTypesService.updateByBo(bo));
}
/**
* 删除规格类型
*
* @param typeIds 主键串
*/
@SaCheckPermission("business:specAttributeTypes:remove")
@Log(title = "规格类型", businessType = BusinessType.DELETE)
@DeleteMapping("/{typeIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] typeIds) {
return toAjax(iQsSpecAttributeTypesService.deleteWithValidByIds(Arrays.asList(typeIds), true));
}
}

View File

@ -0,0 +1,124 @@
package net.ferrum.business.controller;
import java.util.List;
import java.util.Arrays;
import java.util.concurrent.TimeUnit;
import cn.hutool.core.lang.tree.Tree;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
import javax.validation.constraints.*;
import cn.dev33.satoken.annotation.SaCheckPermission;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.domain.QsSpecAttributeValues;
import net.ferrum.business.service.IQsSpecAttributeTypesService;
import net.ferrum.common.core.domain.entity.SysDept;
import net.ferrum.common.core.domain.entity.SysUser;
import org.springframework.web.bind.annotation.*;
import org.springframework.validation.annotation.Validated;
import net.ferrum.common.annotation.RepeatSubmit;
import net.ferrum.common.annotation.Log;
import net.ferrum.common.core.controller.BaseController;
import net.ferrum.common.core.domain.PageQuery;
import net.ferrum.common.core.domain.R;
import net.ferrum.common.core.validate.AddGroup;
import net.ferrum.common.core.validate.EditGroup;
import net.ferrum.common.core.validate.QueryGroup;
import net.ferrum.common.enums.BusinessType;
import net.ferrum.common.utils.poi.ExcelUtil;
import net.ferrum.business.domain.vo.QsSpecAttributeValuesVo;
import net.ferrum.business.domain.bo.QsSpecAttributeValuesBo;
import net.ferrum.business.service.IQsSpecAttributeValuesService;
import net.ferrum.common.core.page.TableDataInfo;
/**
* 规格参数值
*
* @author ruoyi
* @date 2025-07-19
*/
@Validated
@RequiredArgsConstructor
@RestController
@RequestMapping("/business/specAttributeValues")
public class QsSpecAttributeValuesController extends BaseController {
private final IQsSpecAttributeValuesService iQsSpecAttributeValuesService;
private final IQsSpecAttributeTypesService iQsSpecAttributeTypesService;
/**
* 查询规格参数值列表
*/
@SaCheckPermission("business:specAttributeValues:list")
@GetMapping("/list")
public TableDataInfo<QsSpecAttributeValues> list(QsSpecAttributeValues specAttributeValues, PageQuery pageQuery) {
return iQsSpecAttributeValuesService.selectPageSpecAttributeValuesList(specAttributeValues, pageQuery);
}
/**
* 导出规格参数值列表
*/
@SaCheckPermission("business:specAttributeValues:export")
@Log(title = "规格参数值", businessType = BusinessType.EXPORT)
@PostMapping("/export")
public void export(QsSpecAttributeValuesBo bo, HttpServletResponse response) {
List<QsSpecAttributeValuesVo> list = iQsSpecAttributeValuesService.queryList(bo);
ExcelUtil.exportExcel(list, "规格参数值", QsSpecAttributeValuesVo.class, response);
}
/**
* 获取规格参数值详细信息
*
* @param valueId 主键
*/
@SaCheckPermission("business:specAttributeValues:query")
@GetMapping("/{valueId}")
public R<QsSpecAttributeValuesVo> getInfo(@NotNull(message = "主键不能为空")
@PathVariable Long valueId) {
return R.ok(iQsSpecAttributeValuesService.queryById(valueId));
}
/**
* 新增规格参数值
*/
@SaCheckPermission("business:specAttributeValues:add")
@Log(title = "规格参数值", businessType = BusinessType.INSERT)
@RepeatSubmit()
@PostMapping()
public R<Void> add(@Validated(AddGroup.class) @RequestBody QsSpecAttributeValuesBo bo) {
return toAjax(iQsSpecAttributeValuesService.insertByBo(bo));
}
/**
* 修改规格参数值
*/
@SaCheckPermission("business:specAttributeValues:edit")
@Log(title = "规格参数值", businessType = BusinessType.UPDATE)
@RepeatSubmit()
@PutMapping()
public R<Void> edit(@Validated(EditGroup.class) @RequestBody QsSpecAttributeValuesBo bo) {
return toAjax(iQsSpecAttributeValuesService.updateByBo(bo));
}
/**
* 删除规格参数值
*
* @param valueIds 主键串
*/
@SaCheckPermission("business:specAttributeValues:remove")
@Log(title = "规格参数值", businessType = BusinessType.DELETE)
@DeleteMapping("/{valueIds}")
public R<Void> remove(@NotEmpty(message = "主键不能为空")
@PathVariable Long[] valueIds) {
return toAjax(iQsSpecAttributeValuesService.deleteWithValidByIds(Arrays.asList(valueIds), true));
}
/**
* 获取规格参数类型列表
*/
@SaCheckPermission("business:specAttributeValues:list")
@GetMapping("/specAttributeTypeList")
public R< List<QsSpecAttributeTypes>> selectSpecAttributeTypesList(QsSpecAttributeTypes type) {
return R.ok(iQsSpecAttributeTypesService.selectSpecAttributeTypesList(type));
}
}

View File

@ -0,0 +1,44 @@
package net.ferrum.business.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import net.ferrum.common.core.domain.BaseEntity;
/**
* 规格类型对象 qs_spec_attribute_types
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
@TableName("qs_spec_attribute_types")
public class QsSpecAttributeTypes extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 规格参数类型ID
*/
@TableId(value = "type_id")
private Long typeId;
/**
* 规格参数类别
*/
private String typeName;
/**
* 备注
*/
private String remark;
/**
* 逻辑删除标志
*/
@TableLogic
private String delFlag;
}

View File

@ -0,0 +1,60 @@
package net.ferrum.business.domain;
import com.baomidou.mybatisplus.annotation.*;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serializable;
import java.util.Date;
import java.math.BigDecimal;
import lombok.NoArgsConstructor;
import net.ferrum.common.core.domain.BaseEntity;
import net.ferrum.common.core.domain.entity.SysDept;
/**
* 规格参数值对象 qs_spec_attribute_values
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@NoArgsConstructor
@EqualsAndHashCode(callSuper = true)
@TableName("qs_spec_attribute_values")
public class QsSpecAttributeValues extends BaseEntity {
private static final long serialVersionUID=1L;
/**
* 规格参数值ID
*/
@TableId(value = "value_id")
private Long valueId;
/**
* 规格参数类型ID
*/
private Long typeId;
/**
* 规格参数具体值
*/
private String value;
/**
* 备注
*/
private String remark;
/**
* 逻辑删除标志
*/
@TableLogic
private String delFlag;
/**
* 规格参数类型对象
*/
@TableField(exist = false)
private QsSpecAttributeTypes specType;
@TableField(exist = false)
private String specTypeName;
}

View File

@ -0,0 +1,42 @@
package net.ferrum.business.domain.bo;
import net.ferrum.common.core.validate.AddGroup;
import net.ferrum.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import net.ferrum.common.core.domain.BaseEntity;
/**
* 规格类型业务对象 qs_spec_attribute_types
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class QsSpecAttributeTypesBo extends BaseEntity {
/**
* 规格参数类型ID
*/
@NotNull(message = "规格参数类型ID不能为空", groups = { EditGroup.class })
private Long typeId;
/**
* 规格参数类别
*/
@NotBlank(message = "规格参数类别不能为空", groups = { AddGroup.class, EditGroup.class })
private String typeName;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,48 @@
package net.ferrum.business.domain.bo;
import net.ferrum.common.core.validate.AddGroup;
import net.ferrum.common.core.validate.EditGroup;
import lombok.Data;
import lombok.EqualsAndHashCode;
import javax.validation.constraints.*;
import java.util.Date;
import net.ferrum.common.core.domain.BaseEntity;
/**
* 规格参数值业务对象 qs_spec_attribute_values
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@EqualsAndHashCode(callSuper = true)
public class QsSpecAttributeValuesBo extends BaseEntity {
/**
* 规格参数值ID
*/
@NotNull(message = "规格参数值ID不能为空", groups = { EditGroup.class })
private Long valueId;
/**
* 规格参数类型ID
*/
@NotNull(message = "规格参数类型ID不能为空", groups = { AddGroup.class, EditGroup.class })
private Long typeId;
/**
* 规格参数具体值
*/
@NotBlank(message = "规格参数具体值不能为空", groups = { AddGroup.class, EditGroup.class })
private String value;
/**
* 备注
*/
private String remark;
}

View File

@ -0,0 +1,43 @@
package net.ferrum.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import net.ferrum.common.annotation.ExcelDictFormat;
import net.ferrum.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 规格类型视图对象 qs_spec_attribute_types
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@ExcelIgnoreUnannotated
public class QsSpecAttributeTypesVo {
private static final long serialVersionUID = 1L;
/**
* 规格参数类型ID
*/
@ExcelProperty(value = "规格参数类型ID")
private Long typeId;
/**
* 规格参数类别
*/
@ExcelProperty(value = "规格参数类别")
private String typeName;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,43 @@
package net.ferrum.business.domain.vo;
import com.alibaba.excel.annotation.ExcelIgnoreUnannotated;
import com.alibaba.excel.annotation.ExcelProperty;
import net.ferrum.common.annotation.ExcelDictFormat;
import net.ferrum.common.convert.ExcelDictConvert;
import lombok.Data;
import java.util.Date;
/**
* 规格参数值视图对象 qs_spec_attribute_values
*
* @author ruoyi
* @date 2025-07-19
*/
@Data
@ExcelIgnoreUnannotated
public class QsSpecAttributeValuesVo {
private static final long serialVersionUID = 1L;
/**
* 规格参数类型ID
*/
@ExcelProperty(value = "规格参数类型ID")
private Long typeId;
/**
* 规格参数具体值
*/
@ExcelProperty(value = "规格参数具体值")
private String value;
/**
* 备注
*/
@ExcelProperty(value = "备注")
private String remark;
}

View File

@ -0,0 +1,24 @@
package net.ferrum.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.domain.vo.QsSpecAttributeTypesVo;
import net.ferrum.common.core.domain.entity.SysUser;
import net.ferrum.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
/**
* 规格类型Mapper接口
*
* @author ruoyi
* @date 2025-07-19
*/
@Mapper
public interface QsSpecAttributeTypesMapper extends BaseMapperPlus<QsSpecAttributeTypesMapper, QsSpecAttributeTypes, QsSpecAttributeTypesVo> {
public List<QsSpecAttributeTypes> selectSpecAttributeTypesList(@Param(Constants.WRAPPER) Wrapper<QsSpecAttributeTypes> queryWrapper);
}

View File

@ -0,0 +1,23 @@
package net.ferrum.business.mapper;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.toolkit.Constants;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import net.ferrum.business.domain.QsSpecAttributeValues;
import net.ferrum.business.domain.vo.QsSpecAttributeValuesVo;
import net.ferrum.business.domain.QsSpecAttributeValues;
import net.ferrum.common.core.mapper.BaseMapperPlus;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
/**
* 规格参数值Mapper接口
*
* @author ruoyi
* @date 2025-07-19
*/
@Mapper
public interface QsSpecAttributeValuesMapper extends BaseMapperPlus<QsSpecAttributeValuesMapper, QsSpecAttributeValues, QsSpecAttributeValuesVo> {
Page<QsSpecAttributeValues> selectPageSpecAttributeValuesList(@Param("page") Page<QsSpecAttributeValues> page, @Param(Constants.WRAPPER) Wrapper<QsSpecAttributeValues> queryWrapper);
}

View File

@ -0,0 +1,56 @@
package net.ferrum.business.service;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.domain.vo.QsSpecAttributeTypesVo;
import net.ferrum.business.domain.bo.QsSpecAttributeTypesBo;
import net.ferrum.common.core.page.TableDataInfo;
import net.ferrum.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 规格类型Service接口
*
* @author ruoyi
* @date 2025-07-19
*/
public interface IQsSpecAttributeTypesService {
/**
* 查询规格类型
*/
QsSpecAttributeTypesVo queryById(Long typeId);
/**
* 查询规格类型列表
*/
TableDataInfo<QsSpecAttributeTypesVo> queryPageList(QsSpecAttributeTypesBo bo, PageQuery pageQuery);
/**
* 查询规格类型列表
*/
List<QsSpecAttributeTypesVo> queryList(QsSpecAttributeTypesBo bo);
/**
* 新增规格类型
*/
Boolean insertByBo(QsSpecAttributeTypesBo bo);
/**
* 修改规格类型
*/
Boolean updateByBo(QsSpecAttributeTypesBo bo);
/**
* 校验并批量删除规格类型信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
/**
* 获取规格参数类型列表
*
*/
public List<QsSpecAttributeTypes> selectSpecAttributeTypesList(QsSpecAttributeTypes type) ;
}

View File

@ -0,0 +1,52 @@
package net.ferrum.business.service;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.domain.QsSpecAttributeValues;
import net.ferrum.business.domain.vo.QsSpecAttributeValuesVo;
import net.ferrum.business.domain.bo.QsSpecAttributeValuesBo;
import net.ferrum.common.core.domain.entity.SysUser;
import net.ferrum.common.core.page.TableDataInfo;
import net.ferrum.common.core.domain.PageQuery;
import java.util.Collection;
import java.util.List;
/**
* 规格参数值Service接口
*
* @author ruoyi
* @date 2025-07-19
*/
public interface IQsSpecAttributeValuesService {
TableDataInfo<QsSpecAttributeValues>selectPageSpecAttributeValuesList(QsSpecAttributeValues specAttributeValues, PageQuery pageQuery) ;
/**
* 查询规格参数值
*/
QsSpecAttributeValuesVo queryById(Long valueId);
/**
* 查询规格参数值列表
*/
TableDataInfo<QsSpecAttributeValuesVo> queryPageList(QsSpecAttributeValuesBo bo, PageQuery pageQuery);
/**
* 查询规格参数值列表
*/
List<QsSpecAttributeValuesVo> queryList(QsSpecAttributeValuesBo bo);
/**
* 新增规格参数值
*/
Boolean insertByBo(QsSpecAttributeValuesBo bo);
/**
* 修改规格参数值
*/
Boolean updateByBo(QsSpecAttributeValuesBo bo);
/**
* 校验并批量删除规格参数值信息
*/
Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);
}

View File

@ -0,0 +1,127 @@
package net.ferrum.business.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import net.ferrum.common.utils.StringUtils;
import net.ferrum.common.core.page.TableDataInfo;
import net.ferrum.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import net.ferrum.business.domain.bo.QsSpecAttributeTypesBo;
import net.ferrum.business.domain.vo.QsSpecAttributeTypesVo;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.mapper.QsSpecAttributeTypesMapper;
import net.ferrum.business.service.IQsSpecAttributeTypesService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 规格类型Service业务层处理
*
* @author ruoyi
* @date 2025-07-19
*/
@RequiredArgsConstructor
@Service
public class QsSpecAttributeTypesServiceImpl implements IQsSpecAttributeTypesService {
private final QsSpecAttributeTypesMapper baseMapper;
/**
* 查询规格类型
*/
@Override
public QsSpecAttributeTypesVo queryById(Long typeId){
return baseMapper.selectVoById(typeId);
}
/**
* 查询规格类型列表
*/
@Override
public TableDataInfo<QsSpecAttributeTypesVo> queryPageList(QsSpecAttributeTypesBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<QsSpecAttributeTypes> lqw = buildQueryWrapper(bo);
Page<QsSpecAttributeTypesVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询规格类型列表
*/
@Override
public List<QsSpecAttributeTypesVo> queryList(QsSpecAttributeTypesBo bo) {
LambdaQueryWrapper<QsSpecAttributeTypes> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<QsSpecAttributeTypes> buildQueryWrapper(QsSpecAttributeTypesBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<QsSpecAttributeTypes> lqw = Wrappers.lambdaQuery();
lqw.like(StringUtils.isNotBlank(bo.getTypeName()), QsSpecAttributeTypes::getTypeName, bo.getTypeName());
return lqw;
}
/**
* 新增规格类型
*/
@Override
public Boolean insertByBo(QsSpecAttributeTypesBo bo) {
QsSpecAttributeTypes add = BeanUtil.toBean(bo, QsSpecAttributeTypes.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setTypeId(add.getTypeId());
}
return flag;
}
/**
* 修改规格类型
*/
@Override
public Boolean updateByBo(QsSpecAttributeTypesBo bo) {
QsSpecAttributeTypes update = BeanUtil.toBean(bo, QsSpecAttributeTypes.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(QsSpecAttributeTypes entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除规格类型
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
/**
* 查询规格参数类型
*
* @param type 要查询的规格参数类型
* @return 部门信息集合
*/
@Override
public List<QsSpecAttributeTypes> selectSpecAttributeTypesList(QsSpecAttributeTypes type) {
LambdaQueryWrapper<QsSpecAttributeTypes> lqw = new LambdaQueryWrapper<>();
lqw.eq(QsSpecAttributeTypes::getDelFlag, "0")
.eq(ObjectUtil.isNotNull(type.getTypeId()), QsSpecAttributeTypes::getTypeId, type.getTypeId())
.like(StringUtils.isNotBlank(type.getTypeName()), QsSpecAttributeTypes::getTypeName, type.getTypeName())
.orderByAsc(QsSpecAttributeTypes::getTypeId)
.orderByAsc(QsSpecAttributeTypes::getTypeName);
return baseMapper.selectSpecAttributeTypesList(lqw);
}
}

View File

@ -0,0 +1,148 @@
package net.ferrum.business.service.impl;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.lang.tree.Tree;
import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import net.ferrum.business.domain.QsSpecAttributeTypes;
import net.ferrum.business.mapper.QsSpecAttributeTypesMapper;
import net.ferrum.common.constant.UserConstants;
import net.ferrum.common.core.domain.entity.SysDept;
import net.ferrum.common.core.domain.entity.SysUser;
import net.ferrum.common.helper.DataBaseHelper;
import net.ferrum.common.utils.StreamUtils;
import net.ferrum.common.utils.StringUtils;
import net.ferrum.common.core.page.TableDataInfo;
import net.ferrum.common.core.domain.PageQuery;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import net.ferrum.business.domain.bo.QsSpecAttributeValuesBo;
import net.ferrum.business.domain.vo.QsSpecAttributeValuesVo;
import net.ferrum.business.domain.QsSpecAttributeValues;
import net.ferrum.business.mapper.QsSpecAttributeValuesMapper;
import net.ferrum.business.service.IQsSpecAttributeValuesService;
import java.util.List;
import java.util.Map;
import java.util.Collection;
/**
* 规格参数值Service业务层处理
*
* @author ruoyi
* @date 2025-07-19
*/
@RequiredArgsConstructor
@Service
public class QsSpecAttributeValuesServiceImpl implements IQsSpecAttributeValuesService {
private final QsSpecAttributeValuesMapper baseMapper;
private final QsSpecAttributeTypesMapper specAttributeTypesMapper;
public TableDataInfo<QsSpecAttributeValues>selectPageSpecAttributeValuesList(QsSpecAttributeValues specAttributeValues, PageQuery pageQuery) {
Page<QsSpecAttributeValues> page = baseMapper.selectPageSpecAttributeValuesList(pageQuery.build(), this.buildQueryWrapper(specAttributeValues));
return TableDataInfo.build(page);
}
/**
* 查询规格参数值
*/
@Override
public QsSpecAttributeValuesVo queryById(Long valueId){
return baseMapper.selectVoById(valueId);
}
/**
* 查询规格参数值列表
*/
@Override
public TableDataInfo<QsSpecAttributeValuesVo> queryPageList(QsSpecAttributeValuesBo bo, PageQuery pageQuery) {
LambdaQueryWrapper<QsSpecAttributeValues> lqw = buildQueryWrapper(bo);
Page<QsSpecAttributeValuesVo> result = baseMapper.selectVoPage(pageQuery.build(), lqw);
return TableDataInfo.build(result);
}
/**
* 查询规格参数值列表
*/
@Override
public List<QsSpecAttributeValuesVo> queryList(QsSpecAttributeValuesBo bo) {
LambdaQueryWrapper<QsSpecAttributeValues> lqw = buildQueryWrapper(bo);
return baseMapper.selectVoList(lqw);
}
private LambdaQueryWrapper<QsSpecAttributeValues> buildQueryWrapper(QsSpecAttributeValuesBo bo) {
Map<String, Object> params = bo.getParams();
LambdaQueryWrapper<QsSpecAttributeValues> lqw = Wrappers.lambdaQuery();
lqw.eq(bo.getTypeId() != null, QsSpecAttributeValues::getTypeId, bo.getTypeId());
lqw.eq(StringUtils.isNotBlank(bo.getValue()), QsSpecAttributeValues::getValue, bo.getValue());
return lqw;
}
private Wrapper<QsSpecAttributeValues> buildQueryWrapper(QsSpecAttributeValues specAttributeValues) {
//Map<String, Object> params = specAttributeValues.getParams();
//LambdaQueryWrapper<QsSpecAttributeValues> lqw = Wrappers.lambdaQuery();
QueryWrapper<QsSpecAttributeValues> lqw = Wrappers.query();
lqw.eq("a.del_flag", UserConstants.NORMAL);
lqw.eq("b.del_flag", UserConstants.NORMAL);
lqw.eq(specAttributeValues.getTypeId() != null, "a.type_id", specAttributeValues.getTypeId());
lqw.like(StringUtils.isNotBlank(specAttributeValues.getValue()), "a.value", specAttributeValues.getValue());
lqw.like(StringUtils.isNotBlank(specAttributeValues.getSpecTypeName()), "b.type_name", specAttributeValues.getSpecTypeName());
lqw.and(ObjectUtil.isNotNull(specAttributeValues.getTypeId()), w -> {
List<QsSpecAttributeTypes> list = specAttributeTypesMapper.selectList(new LambdaQueryWrapper<QsSpecAttributeTypes>()
.select(QsSpecAttributeTypes::getTypeId));
List<Long> ids = StreamUtils.toList(list, QsSpecAttributeTypes::getTypeId);
ids.add(specAttributeValues.getTypeId());
w.in("a.type_id", ids);
});
return lqw;
}
/**
* 新增规格参数值
*/
@Override
public Boolean insertByBo(QsSpecAttributeValuesBo bo) {
QsSpecAttributeValues add = BeanUtil.toBean(bo, QsSpecAttributeValues.class);
validEntityBeforeSave(add);
boolean flag = baseMapper.insert(add) > 0;
if (flag) {
bo.setValueId(add.getValueId());
}
return flag;
}
/**
* 修改规格参数值
*/
@Override
public Boolean updateByBo(QsSpecAttributeValuesBo bo) {
QsSpecAttributeValues update = BeanUtil.toBean(bo, QsSpecAttributeValues.class);
validEntityBeforeSave(update);
return baseMapper.updateById(update) > 0;
}
/**
* 保存前的数据校验
*/
private void validEntityBeforeSave(QsSpecAttributeValues entity){
//TODO 做一些数据校验,如唯一约束
}
/**
* 批量删除规格参数值
*/
@Override
public Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid) {
if(isValid){
//TODO 做一些业务上的校验,判断是否需要校验
}
return baseMapper.deleteBatchIds(ids) > 0;
}
}

View File

@ -0,0 +1,24 @@
<?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="net.ferrum.business.mapper.QsSpecAttributeTypesMapper">
<resultMap type="net.ferrum.business.domain.QsSpecAttributeTypes" id="QsSpecAttributeTypesResult">
<result property="typeId" column="type_id"/>
<result property="typeName" column="type_name"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
</resultMap>
<select id="selectSpecAttributeTypesList" resultMap="QsSpecAttributeTypesResult">
select * from qs_spec_attribute_types ${ew.getCustomSqlSegment}
</select>
</mapper>

View File

@ -0,0 +1,43 @@
<?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="net.ferrum.business.mapper.QsSpecAttributeValuesMapper">
<resultMap type="net.ferrum.business.domain.QsSpecAttributeValues" id="QsSpecAttributeValuesResult">
<result property="valueId" column="value_id"/>
<result property="typeId" column="type_id"/>
<result property="value" column="value"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
<result property="delFlag" column="del_flag"/>
<association property="specType" column="type_id" javaType="net.ferrum.business.domain.QsSpecAttributeTypes" resultMap="QsSpecAttributeTypesResult"/>
</resultMap>
<resultMap id="QsSpecAttributeTypesResult" type="net.ferrum.business.domain.QsSpecAttributeTypes">
<result property="typeId" column="type_id"/>
<result property="typeName" column="type_name"/>
</resultMap>
<select id="selectSpecAttributeValuesList" resultMap="QsSpecAttributeValuesResult">
select a.type_id, a.value_id, a.value,
a.create_by, a.create_time, a.update_by, a.update_time, a.remark, a.del_flag, b.type_name
from qs_spec_attribute_values a
left join qs_spec_attribute_types b on a.type_id = b.type_id
${ew.getCustomSqlSegment}
order by a.type_id, a.value_id
</select>
<select id="selectPageSpecAttributeValuesList" resultMap="QsSpecAttributeValuesResult">
select a.type_id, a.value_id, a.value,
a.create_by, a.create_time, a.update_by, a.update_time, a.remark, a.del_flag, b.type_name
from qs_spec_attribute_values a
left join qs_spec_attribute_types b on a.type_id = b.type_id
${ew.getCustomSqlSegment}
order by a.type_id, a.value_id
</select>
</mapper>

View File

@ -0,0 +1,19 @@
-- 菜单 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671809, '设计批次', '1896968401096663042', '1', 'batch', 'business/batch/index', 1, 0, 'C', '0', '0', 'business:batch:list', '#', 'admin', sysdate(), '', null, '设计批次菜单');
-- 按钮 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671810, '设计批次查询', 1945779577351671809, '1', '#', '', 1, 0, 'F', '0', '0', 'business:batch:query', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671811, '设计批次新增', 1945779577351671809, '2', '#', '', 1, 0, 'F', '0', '0', 'business:batch:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671812, '设计批次修改', 1945779577351671809, '3', '#', '', 1, 0, 'F', '0', '0', 'business:batch:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671813, '设计批次删除', 1945779577351671809, '4', '#', '', 1, 0, 'F', '0', '0', 'business:batch:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1945779577351671814, '设计批次导出', 1945779577351671809, '5', '#', '', 1, 0, 'F', '0', '0', 'business:batch:export', '#', 'admin', sysdate(), '', null, '');

View File

@ -0,0 +1,19 @@
-- 菜单 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457410, '规格类型', '1896968401096663042', '1', 'specAttributeTypes', 'business/specAttributeTypes/index', 1, 0, 'C', '0', '0', 'business:specAttributeTypes:list', '#', 'admin', sysdate(), '', null, '规格类型菜单');
-- 按钮 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457411, '规格类型查询', 1946464000749457410, '1', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeTypes:query', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457412, '规格类型新增', 1946464000749457410, '2', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeTypes:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457413, '规格类型修改', 1946464000749457410, '3', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeTypes:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457414, '规格类型删除', 1946464000749457410, '4', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeTypes:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946464000749457415, '规格类型导出', 1946464000749457410, '5', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeTypes:export', '#', 'admin', sysdate(), '', null, '');

View File

@ -0,0 +1,19 @@
-- 菜单 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697153, '规格参数值', '1896968401096663042', '1', 'specAttributeValues', 'business/specAttributeValues/index', 1, 0, 'C', '0', '0', 'business:specAttributeValues:list', '#', 'admin', sysdate(), '', null, '规格参数值菜单');
-- 按钮 SQL
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697154, '规格参数值查询', 1946471974171697153, '1', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeValues:query', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697155, '规格参数值新增', 1946471974171697153, '2', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeValues:add', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697156, '规格参数值修改', 1946471974171697153, '3', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeValues:edit', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697157, '规格参数值删除', 1946471974171697153, '4', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeValues:remove', '#', 'admin', sysdate(), '', null, '');
insert into sys_menu (menu_id, menu_name, parent_id, order_num, path, component, is_frame, is_cache, menu_type, visible, status, perms, icon, create_by, create_time, update_by, update_time, remark)
values(1946471974171697158, '规格参数值导出', 1946471974171697153, '5', '#', '', 1, 0, 'F', '0', '0', 'business:specAttributeValues:export', '#', 'admin', sysdate(), '', null, '');