Commit 1c5f75aa by Lizh

删除自动生成没有用到的文件

parent c6bf40e2
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductBlacklistPageVO;
import com.jomalls.custom.app.vo.CustomProductBlacklistVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:28
*/
public interface CustomProductBlacklistService {
/**
* 列表查询接口
*
* @param customProductBlacklistVO 条件model
* @return list集合
*/
List<CustomProductBlacklistVO> list(CustomProductBlacklistVO customProductBlacklistVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductBlacklistPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductBlacklistVO> pageList(CustomProductBlacklistPageVO customProductBlacklistPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductBlacklistVO info(Integer id);
/**
* 保存对象
*
* @param customProductBlacklistVO 保存对象
*/
void save(CustomProductBlacklistVO customProductBlacklistVO);
/**
* 根据id修改对象
*
* @param customProductBlacklistVO 修改对象
*/
void updateById(CustomProductBlacklistVO customProductBlacklistVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
/**
* 批量保存黑名单
*
* @param productId 产品ID
* @param diyUserIds DIY用户ID列表
*/
void saveBatch(Integer productId, List<Integer> diyUserIds);
/**
* 批量保存多个产品的黑名单
* @param productIds
* @param diyUserIds
*/
void saveBatchProduct(List<Integer> productIds, List<Integer> diyUserIds);
/**
* 根据产品ID获取DIY用户ID列表
* @param productId
* @return
*/
List<Integer> getDiyUserIdsByProductId(Integer productId);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductCraftRelPageVO;
import com.jomalls.custom.app.vo.CustomProductCraftRelVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:28
*/
public interface CustomProductCraftRelService {
/**
* 列表查询接口
*
* @param customProductCraftRelVO 条件model
* @return list集合
*/
List<CustomProductCraftRelVO> list(CustomProductCraftRelVO customProductCraftRelVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductCraftRelPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductCraftRelVO> pageList(CustomProductCraftRelPageVO customProductCraftRelPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductCraftRelVO info(Integer id);
/**
* 保存对象
*
* @param customProductCraftRelVO 保存对象
*/
void save(CustomProductCraftRelVO customProductCraftRelVO);
/**
* 根据id修改对象
*
* @param customProductCraftRelVO 修改对象
*/
void updateById(CustomProductCraftRelVO customProductCraftRelVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductDiyUserRelPageVO;
import com.jomalls.custom.app.vo.CustomProductDiyUserRelVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:29
*/
public interface CustomProductDiyUserRelService {
/**
* 列表查询接口
*
* @param customProductDiyUserRelVO 条件model
* @return list集合
*/
List<CustomProductDiyUserRelVO> list(CustomProductDiyUserRelVO customProductDiyUserRelVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductDiyUserRelPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductDiyUserRelVO> pageList(CustomProductDiyUserRelPageVO customProductDiyUserRelPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductDiyUserRelVO info(Integer id);
/**
* 保存对象
*
* @param customProductDiyUserRelVO 保存对象
*/
void save(CustomProductDiyUserRelVO customProductDiyUserRelVO);
/**
* 根据id修改对象
*
* @param customProductDiyUserRelVO 修改对象
*/
void updateById(CustomProductDiyUserRelVO customProductDiyUserRelVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceIntervalRelPageVO;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceIntervalRelVO;
import com.jomalls.custom.dal.entity.CustomProductFactoryPriceIntervalRelEntity;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:29
*/
public interface CustomProductFactoryPriceIntervalRelService {
/**
* 列表查询接口
*
* @param customProductFactoryPriceIntervalRelVO 条件model
* @return list集合
*/
List<CustomProductFactoryPriceIntervalRelVO> list(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductFactoryPriceIntervalRelPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductFactoryPriceIntervalRelVO> pageList(CustomProductFactoryPriceIntervalRelPageVO customProductFactoryPriceIntervalRelPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductFactoryPriceIntervalRelVO info(Integer id);
/**
* 保存对象
*
* @param customProductFactoryPriceIntervalRelVO 保存对象
*/
void save(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO);
/**
* 根据id修改对象
*
* @param customProductFactoryPriceIntervalRelVO 修改对象
*/
void updateById(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
/**
* 批量保存工厂价格区间关联
* 逻辑:先删除该产品下的所有旧数据,再批量插入新数据
* @param data 待保存的数据列表
* @param productId 产品ID
*/
void saveBatch(List<CustomProductFactoryPriceIntervalRelEntity> data, Integer productId);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceRelPageVO;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceRelSnakeVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:29
*/
public interface CustomProductFactoryPriceRelService {
/**
* 列表查询接口
*
* @param customProductFactoryPriceRelSnakeVO 条件model
* @return list集合
*/
List<CustomProductFactoryPriceRelSnakeVO> list(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductFactoryPriceRelPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductFactoryPriceRelSnakeVO> pageList(CustomProductFactoryPriceRelPageVO customProductFactoryPriceRelPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductFactoryPriceRelSnakeVO info(Integer id);
/**
* 保存对象
*
* @param customProductFactoryPriceRelSnakeVO 保存对象
*/
void save(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO);
/**
* 根据id修改对象
*
* @param customProductFactoryPriceRelSnakeVO 修改对象
*/
void updateById(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductImagePageVO;
import com.jomalls.custom.app.vo.CustomProductImageSnakeVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:29
*/
public interface CustomProductImageService {
/**
* 列表查询接口
*
* @param customProductImageSnakeVO 条件model
* @return list集合
*/
List<CustomProductImageSnakeVO> list(CustomProductImageSnakeVO customProductImageSnakeVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductImagePageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductImageSnakeVO> pageList(CustomProductImagePageVO customProductImagePageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductImageSnakeVO info(Integer id);
/**
* 保存对象
*
* @param customProductImageSnakeVO 保存对象
*/
void save(CustomProductImageSnakeVO customProductImageSnakeVO);
/**
* 根据id修改对象
*
* @param customProductImageSnakeVO 修改对象
*/
void updateById(CustomProductImageSnakeVO customProductImageSnakeVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomProductInfoPropertyPageVO;
import com.jomalls.custom.app.vo.CustomProductInfoPropertySnakeVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-05-29 10:43:29
*/
public interface CustomProductInfoPropertyService {
/**
* 列表查询接口
*
* @param customProductInfoPropertySnakeVO 条件model
* @return list集合
*/
List<CustomProductInfoPropertySnakeVO> list(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO);
/**
* 根据条件查询分页列表接口
*
* @param customProductInfoPropertyPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomProductInfoPropertySnakeVO> pageList(CustomProductInfoPropertyPageVO customProductInfoPropertyPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomProductInfoPropertySnakeVO info(Integer id);
/**
* 保存对象
*
* @param customProductInfoPropertySnakeVO 保存对象
*/
void save(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO);
/**
* 根据id修改对象
*
* @param customProductInfoPropertySnakeVO 修改对象
*/
void updateById(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.CustomWarehouseInfoPageVO;
import com.jomalls.custom.app.vo.CustomWarehouseInfoSnakeVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:24
*/
public interface CustomWarehouseInfoService {
/**
* 列表查询接口
*
* @param customWarehouseInfoSnakeVO 条件model
* @return list集合
*/
List<CustomWarehouseInfoSnakeVO> list(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO);
/**
* 根据条件查询分页列表接口
*
* @param customWarehouseInfoPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomWarehouseInfoSnakeVO> pageList(CustomWarehouseInfoPageVO customWarehouseInfoPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomWarehouseInfoSnakeVO info(Long id);
/**
* 保存对象
*
* @param customWarehouseInfoSnakeVO 保存对象
*/
void save(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO);
/**
* 根据id修改对象
*
* @param customWarehouseInfoSnakeVO 修改对象
*/
void updateById(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Long id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.DbDiyPageVO;
import com.jomalls.custom.app.vo.DbDiySnakeVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:23
*/
public interface DbDiyService {
/**
* 列表查询接口
*
* @param dbDiySnakeVO 条件model
* @return list集合
*/
List<DbDiySnakeVO> list(DbDiySnakeVO dbDiySnakeVO);
/**
* 根据条件查询分页列表接口
*
* @param dbDiyPageVO 分页入参model
* @return 分页对象
*/
IPage<DbDiySnakeVO> pageList(DbDiyPageVO dbDiyPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
DbDiySnakeVO info(Integer id);
/**
* 保存对象
*
* @param dbDiySnakeVO 保存对象
*/
void save(DbDiySnakeVO dbDiySnakeVO);
/**
* 根据id修改对象
*
* @param dbDiySnakeVO 修改对象
*/
void updateById(DbDiySnakeVO dbDiySnakeVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceRelSnakeVO;
import com.jomalls.custom.app.vo.CustomProductInfoPageSnakeVO;
import com.jomalls.custom.app.vo.CustomProductInfoSnakeVO;
import com.jomalls.custom.app.vo.CustomProductItemSnakeVO;
import com.jomalls.custom.dal.entity.DbDiyUserEntity;
......@@ -45,6 +46,15 @@ public interface DiyUserService {
*/
void setProductExternalPrice(DbDiyUserEntity user, CustomProductInfoSnakeVO vo);
/**
* 对分页商品 VO 应用用户折扣外部定价(erpPage / pageList 专用)
*
* @param user 用户(含 discount 折扣字段)
* @param vo 分页商品 VO
*/
void setProductExternalPrice(DbDiyUserEntity user, CustomProductInfoPageSnakeVO vo);
/**
* 对商品明细应用用户折扣外部定价
* <p>
......
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.ProductFactoryRelPageVO;
import com.jomalls.custom.app.vo.ProductFactoryRelVO;
import java.util.List;
/**
* 产品-工厂关联 App Service 接口
*
* @author Lizh
* @date 2026-06-06
*/
public interface ProductFactoryRelService {
List<ProductFactoryRelVO> list(ProductFactoryRelVO vo);
IPage<ProductFactoryRelVO> pageList(ProductFactoryRelPageVO param);
ProductFactoryRelVO info(Integer id);
void save(ProductFactoryRelVO vo);
void updateById(ProductFactoryRelVO vo);
void deleteById(Integer id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.SysRoleDeptVO;
import com.jomalls.custom.app.vo.SysRoleDeptPageVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 角色和部门关联表 接口
* @date 2026-06-01 12:30:00
*/
public interface SysRoleDeptService {
/**
* 列表查询接口
*
* @param sysRoleDeptVO 条件model
* @return list集合
*/
List<SysRoleDeptVO> list(SysRoleDeptVO sysRoleDeptVO);
/**
* 根据条件查询分页列表接口
*
* @param sysRoleDeptPageVO 分页入参model
* @return 分页对象
*/
IPage<SysRoleDeptVO> pageList(SysRoleDeptPageVO sysRoleDeptPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
SysRoleDeptVO info(String id);
/**
* 保存对象
*
* @param sysRoleDeptVO 保存对象
*/
void save(SysRoleDeptVO sysRoleDeptVO);
/**
* 根据id修改对象
*
* @param sysRoleDeptVO 修改对象
*/
void updateById(SysRoleDeptVO sysRoleDeptVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(String id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.SysRoleMenuVO;
import com.jomalls.custom.app.vo.SysRoleMenuPageVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 角色和菜单关联表 接口
* @date 2026-06-01 12:29:59
*/
public interface SysRoleMenuService {
/**
* 列表查询接口
*
* @param sysRoleMenuVO 条件model
* @return list集合
*/
List<SysRoleMenuVO> list(SysRoleMenuVO sysRoleMenuVO);
/**
* 根据条件查询分页列表接口
*
* @param sysRoleMenuPageVO 分页入参model
* @return 分页对象
*/
IPage<SysRoleMenuVO> pageList(SysRoleMenuPageVO sysRoleMenuPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
SysRoleMenuVO info(String id);
/**
* 保存对象
*
* @param sysRoleMenuVO 保存对象
*/
void save(SysRoleMenuVO sysRoleMenuVO);
/**
* 根据id修改对象
*
* @param sysRoleMenuVO 修改对象
*/
void updateById(SysRoleMenuVO sysRoleMenuVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(String id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.SysRoleVO;
import com.jomalls.custom.app.vo.SysRolePageVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 角色信息表 接口
* @date 2026-06-01 12:29:59
*/
public interface SysRoleService {
/**
* 列表查询接口
*
* @param sysRoleVO 条件model
* @return list集合
*/
List<SysRoleVO> list(SysRoleVO sysRoleVO);
/**
* 根据条件查询分页列表接口
*
* @param sysRolePageVO 分页入参model
* @return 分页对象
*/
IPage<SysRoleVO> pageList(SysRolePageVO sysRolePageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
SysRoleVO info(String id);
/**
* 保存对象
*
* @param sysRoleVO 保存对象
*/
void save(SysRoleVO sysRoleVO);
/**
* 根据id修改对象
*
* @param sysRoleVO 修改对象
*/
void updateById(SysRoleVO sysRoleVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(String id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.SysUserRoleVO;
import com.jomalls.custom.app.vo.SysUserRolePageVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 用户和角色关联表 接口
* @date 2026-06-01 12:29:59
*/
public interface SysUserRoleService {
/**
* 列表查询接口
*
* @param sysUserRoleVO 条件model
* @return list集合
*/
List<SysUserRoleVO> list(SysUserRoleVO sysUserRoleVO);
/**
* 根据条件查询分页列表接口
*
* @param sysUserRolePageVO 分页入参model
* @return 分页对象
*/
IPage<SysUserRoleVO> pageList(SysUserRolePageVO sysUserRolePageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
SysUserRoleVO info(String id);
/**
* 保存对象
*
* @param sysUserRoleVO 保存对象
*/
void save(SysUserRoleVO sysUserRoleVO);
/**
* 根据id修改对象
*
* @param sysUserRoleVO 修改对象
*/
void updateById(SysUserRoleVO sysUserRoleVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(String id);
}
package com.jomalls.custom.app.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.vo.SysUserVO;
import com.jomalls.custom.app.vo.SysUserPageVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 用户信息表 接口
* @date 2026-06-01 12:29:59
*/
public interface SysUserService {
/**
* 列表查询接口
*
* @param sysUserVO 条件model
* @return list集合
*/
List<SysUserVO> list(SysUserVO sysUserVO);
/**
* 根据条件查询分页列表接口
*
* @param sysUserPageVO 分页入参model
* @return 分页对象
*/
IPage<SysUserVO> pageList(SysUserPageVO sysUserPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
SysUserVO info(Long id);
/**
* 保存对象
*
* @param sysUserVO 保存对象
*/
void save(SysUserVO sysUserVO);
/**
* 根据id修改对象
*
* @param sysUserVO 修改对象
*/
void updateById(SysUserVO sysUserVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Long id);
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductBlacklistPageVO;
import com.jomalls.custom.app.vo.CustomProductBlacklistVO;
import com.jomalls.custom.app.service.CustomProductBlacklistService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductBlacklistEntity;
import com.jomalls.custom.domain.service.CustomProductBlacklistDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:28
*/
@Slf4j
@Service
public class CustomProductBlacklistServiceImpl implements CustomProductBlacklistService {
private final CustomProductBlacklistDomainService customProductBlacklistDomainService;
@Autowired
public CustomProductBlacklistServiceImpl(CustomProductBlacklistDomainService customProductBlacklistDomainService) {
this.customProductBlacklistDomainService = customProductBlacklistDomainService;
}
@Override
public List<CustomProductBlacklistVO> list(CustomProductBlacklistVO customProductBlacklistVO) {
QueryWrapper<CustomProductBlacklistEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductBlacklistEntity> list = customProductBlacklistDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductBlacklistVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductBlacklistVO> pageList(CustomProductBlacklistPageVO customProductBlacklistPageVO) {
CustomAsserts.nonNull(customProductBlacklistPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductBlacklistEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductBlacklistEntity> page = customProductBlacklistDomainService.selectPage(queryWrapper, customProductBlacklistPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductBlacklistVO.class));
}
@Override
public CustomProductBlacklistVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductBlacklistEntity customProductBlacklist = customProductBlacklistDomainService.getById(id);
return BeanMapper.mapper().convert(customProductBlacklist, CustomProductBlacklistVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductBlacklistVO customProductBlacklistVO) {
CustomAsserts.nonNull(customProductBlacklistVO, "实体对象不能为空");
CustomProductBlacklistEntity customProductBlacklistEntity = BeanMapper.mapper().convert(customProductBlacklistVO, CustomProductBlacklistEntity.class);
try {
customProductBlacklistDomainService.save(customProductBlacklistEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductBlacklistServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductBlacklistVO customProductBlacklistVO) {
CustomAsserts.nonNull(customProductBlacklistVO, "实体对象不能为空");
CustomProductBlacklistEntity customProductBlacklist = BeanMapper.mapper().convert(customProductBlacklistVO, CustomProductBlacklistEntity.class);
try {
customProductBlacklistDomainService.updateById(customProductBlacklist);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductBlacklistServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductBlacklistDomainService.removeById(id);
}
/**
* 批量保存黑名单
*
* @param productId 产品ID
* @param diyUserIds DIY用户ID列表
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveBatch(Integer productId, List<Integer> diyUserIds) {
customProductBlacklistDomainService.remove(new LambdaQueryWrapper<CustomProductBlacklistEntity>()
.eq(CustomProductBlacklistEntity::getProductId, productId));
if (CollectionUtils.isEmpty(diyUserIds)) {
return;
}
List<CustomProductBlacklistEntity> blacklistEntities = diyUserIds.stream()
.map(diyUserId -> {
CustomProductBlacklistEntity entity = new CustomProductBlacklistEntity();
entity.setProductId(productId);
entity.setDiyUserId(diyUserId);
return entity;
})
.collect(Collectors.toList());
customProductBlacklistDomainService.saveBatch(blacklistEntities);
}
/**
* 批量保存多个产品的黑名单
* @param productIds
* @param diyUserIds
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveBatchProduct(List<Integer> productIds, List<Integer> diyUserIds) {
if (CollectionUtils.isEmpty(productIds) || CollectionUtils.isEmpty(diyUserIds)) {
return;
}
// 1. 删除这些产品下现有的所有黑名单
customProductBlacklistDomainService.remove(new LambdaQueryWrapper<CustomProductBlacklistEntity>()
.in(CustomProductBlacklistEntity::getProductId, productIds));
List<CustomProductBlacklistEntity> tempList = new ArrayList<>();
for (Integer productId : productIds) {
for (Integer diyUserId : diyUserIds) {
CustomProductBlacklistEntity entity = new CustomProductBlacklistEntity();
entity.setProductId(productId);
entity.setDiyUserId(diyUserId);
tempList.add(entity);
}
}
if (!tempList.isEmpty()) {
customProductBlacklistDomainService.saveBatch(tempList);
}
}
/**
* 根据产品ID获取DIY用户ID列表
* @param productId
* @return
*/
@Override
public List<Integer> getDiyUserIdsByProductId(Integer productId) {
if (productId == null) {
return new ArrayList<>();
}
List<CustomProductBlacklistEntity> list = customProductBlacklistDomainService.list(
new LambdaQueryWrapper<CustomProductBlacklistEntity>()
.eq(CustomProductBlacklistEntity::getProductId, productId)
.select(CustomProductBlacklistEntity::getDiyUserId)
);
if (CollectionUtils.isEmpty(list)) {
return new ArrayList<>();
}
return list.stream()
.map(CustomProductBlacklistEntity::getDiyUserId)
.filter(Objects::nonNull)
.collect(Collectors.toList());
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductCraftRelPageVO;
import com.jomalls.custom.app.vo.CustomProductCraftRelVO;
import com.jomalls.custom.app.service.CustomProductCraftRelService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductCraftRelEntity;
import com.jomalls.custom.domain.service.CustomProductCraftRelDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:28
*/
@Slf4j
@Service
public class CustomProductCraftRelServiceImpl implements CustomProductCraftRelService {
private final CustomProductCraftRelDomainService customProductCraftRelDomainService;
@Autowired
public CustomProductCraftRelServiceImpl(CustomProductCraftRelDomainService customProductCraftRelDomainService) {
this.customProductCraftRelDomainService = customProductCraftRelDomainService;
}
@Override
public List<CustomProductCraftRelVO> list(CustomProductCraftRelVO customProductCraftRelVO) {
QueryWrapper<CustomProductCraftRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductCraftRelEntity> list = customProductCraftRelDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductCraftRelVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductCraftRelVO> pageList(CustomProductCraftRelPageVO customProductCraftRelPageVO) {
CustomAsserts.nonNull(customProductCraftRelPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductCraftRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductCraftRelEntity> page = customProductCraftRelDomainService.selectPage(queryWrapper, customProductCraftRelPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductCraftRelVO.class));
}
@Override
public CustomProductCraftRelVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductCraftRelEntity customProductCraftRel = customProductCraftRelDomainService.getById(id);
return BeanMapper.mapper().convert(customProductCraftRel, CustomProductCraftRelVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductCraftRelVO customProductCraftRelVO) {
CustomAsserts.nonNull(customProductCraftRelVO, "实体对象不能为空");
CustomProductCraftRelEntity customProductCraftRelEntity = BeanMapper.mapper().convert(customProductCraftRelVO, CustomProductCraftRelEntity.class);
try {
customProductCraftRelDomainService.save(customProductCraftRelEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductCraftRelServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductCraftRelVO customProductCraftRelVO) {
CustomAsserts.nonNull(customProductCraftRelVO, "实体对象不能为空");
CustomProductCraftRelEntity customProductCraftRel = BeanMapper.mapper().convert(customProductCraftRelVO, CustomProductCraftRelEntity.class);
try {
customProductCraftRelDomainService.updateById(customProductCraftRel);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductCraftRelServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductCraftRelDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductDiyUserRelPageVO;
import com.jomalls.custom.app.vo.CustomProductDiyUserRelVO;
import com.jomalls.custom.app.service.CustomProductDiyUserRelService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductDiyUserRelEntity;
import com.jomalls.custom.domain.service.CustomProductDiyUserRelDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:29
*/
@Slf4j
@Service
public class CustomProductDiyUserRelServiceImpl implements CustomProductDiyUserRelService {
private final CustomProductDiyUserRelDomainService customProductDiyUserRelDomainService;
@Autowired
public CustomProductDiyUserRelServiceImpl(CustomProductDiyUserRelDomainService customProductDiyUserRelDomainService) {
this.customProductDiyUserRelDomainService = customProductDiyUserRelDomainService;
}
@Override
public List<CustomProductDiyUserRelVO> list(CustomProductDiyUserRelVO customProductDiyUserRelVO) {
QueryWrapper<CustomProductDiyUserRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductDiyUserRelEntity> list = customProductDiyUserRelDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductDiyUserRelVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductDiyUserRelVO> pageList(CustomProductDiyUserRelPageVO customProductDiyUserRelPageVO) {
CustomAsserts.nonNull(customProductDiyUserRelPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductDiyUserRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductDiyUserRelEntity> page = customProductDiyUserRelDomainService.selectPage(queryWrapper, customProductDiyUserRelPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductDiyUserRelVO.class));
}
@Override
public CustomProductDiyUserRelVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductDiyUserRelEntity customProductDiyUserRel = customProductDiyUserRelDomainService.getById(id);
return BeanMapper.mapper().convert(customProductDiyUserRel, CustomProductDiyUserRelVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductDiyUserRelVO customProductDiyUserRelVO) {
CustomAsserts.nonNull(customProductDiyUserRelVO, "实体对象不能为空");
CustomProductDiyUserRelEntity customProductDiyUserRelEntity = BeanMapper.mapper().convert(customProductDiyUserRelVO, CustomProductDiyUserRelEntity.class);
try {
customProductDiyUserRelDomainService.save(customProductDiyUserRelEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductDiyUserRelServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductDiyUserRelVO customProductDiyUserRelVO) {
CustomAsserts.nonNull(customProductDiyUserRelVO, "实体对象不能为空");
CustomProductDiyUserRelEntity customProductDiyUserRel = BeanMapper.mapper().convert(customProductDiyUserRelVO, CustomProductDiyUserRelEntity.class);
try {
customProductDiyUserRelDomainService.updateById(customProductDiyUserRel);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductDiyUserRelServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductDiyUserRelDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceIntervalRelPageVO;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceIntervalRelVO;
import com.jomalls.custom.app.service.CustomProductFactoryPriceIntervalRelService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductFactoryPriceIntervalRelEntity;
import com.jomalls.custom.domain.service.CustomProductFactoryPriceIntervalRelDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:29
*/
@Slf4j
@Service
public class CustomProductFactoryPriceIntervalRelServiceImpl implements CustomProductFactoryPriceIntervalRelService {
private final CustomProductFactoryPriceIntervalRelDomainService customProductFactoryPriceIntervalRelDomainService;
@Autowired
public CustomProductFactoryPriceIntervalRelServiceImpl(CustomProductFactoryPriceIntervalRelDomainService customProductFactoryPriceIntervalRelDomainService) {
this.customProductFactoryPriceIntervalRelDomainService = customProductFactoryPriceIntervalRelDomainService;
}
@Override
public List<CustomProductFactoryPriceIntervalRelVO> list(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO) {
QueryWrapper<CustomProductFactoryPriceIntervalRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductFactoryPriceIntervalRelEntity> list = customProductFactoryPriceIntervalRelDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductFactoryPriceIntervalRelVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductFactoryPriceIntervalRelVO> pageList(CustomProductFactoryPriceIntervalRelPageVO customProductFactoryPriceIntervalRelPageVO) {
CustomAsserts.nonNull(customProductFactoryPriceIntervalRelPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductFactoryPriceIntervalRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductFactoryPriceIntervalRelEntity> page = customProductFactoryPriceIntervalRelDomainService.selectPage(queryWrapper, customProductFactoryPriceIntervalRelPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductFactoryPriceIntervalRelVO.class));
}
@Override
public CustomProductFactoryPriceIntervalRelVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductFactoryPriceIntervalRelEntity customProductFactoryPriceIntervalRel = customProductFactoryPriceIntervalRelDomainService.getById(id);
return BeanMapper.mapper().convert(customProductFactoryPriceIntervalRel, CustomProductFactoryPriceIntervalRelVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO) {
CustomAsserts.nonNull(customProductFactoryPriceIntervalRelVO, "实体对象不能为空");
CustomProductFactoryPriceIntervalRelEntity customProductFactoryPriceIntervalRelEntity = BeanMapper.mapper().convert(customProductFactoryPriceIntervalRelVO, CustomProductFactoryPriceIntervalRelEntity.class);
try {
customProductFactoryPriceIntervalRelDomainService.save(customProductFactoryPriceIntervalRelEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductFactoryPriceIntervalRelServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductFactoryPriceIntervalRelVO customProductFactoryPriceIntervalRelVO) {
CustomAsserts.nonNull(customProductFactoryPriceIntervalRelVO, "实体对象不能为空");
CustomProductFactoryPriceIntervalRelEntity customProductFactoryPriceIntervalRel = BeanMapper.mapper().convert(customProductFactoryPriceIntervalRelVO, CustomProductFactoryPriceIntervalRelEntity.class);
try {
customProductFactoryPriceIntervalRelDomainService.updateById(customProductFactoryPriceIntervalRel);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductFactoryPriceIntervalRelServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductFactoryPriceIntervalRelDomainService.removeById(id);
}
/**
* 批量保存工厂价格区间关联
* 逻辑:先删除该产品下的所有旧数据,再批量插入新数据
* @param data 待保存的数据列表
* @param productId 产品ID
*/
@Transactional(rollbackFor = Exception.class)
@Override
public void saveBatch(List<CustomProductFactoryPriceIntervalRelEntity> data, Integer productId) {
customProductFactoryPriceIntervalRelDomainService.remove(new LambdaQueryWrapper<CustomProductFactoryPriceIntervalRelEntity>()
.eq(CustomProductFactoryPriceIntervalRelEntity::getProductId, productId));
if (CollectionUtils.isEmpty(data)) {
return;
}
for (CustomProductFactoryPriceIntervalRelEntity item : data) {
item.setProductId(productId);
}
customProductFactoryPriceIntervalRelDomainService.saveBatch(data);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceRelPageVO;
import com.jomalls.custom.app.vo.CustomProductFactoryPriceRelSnakeVO;
import com.jomalls.custom.app.service.CustomProductFactoryPriceRelService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductFactoryPriceRelEntity;
import com.jomalls.custom.domain.service.CustomProductFactoryPriceRelDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:29
*/
@Slf4j
@Service
public class CustomProductFactoryPriceRelServiceImpl implements CustomProductFactoryPriceRelService {
private final CustomProductFactoryPriceRelDomainService customProductFactoryPriceRelDomainService;
@Autowired
public CustomProductFactoryPriceRelServiceImpl(CustomProductFactoryPriceRelDomainService customProductFactoryPriceRelDomainService) {
this.customProductFactoryPriceRelDomainService = customProductFactoryPriceRelDomainService;
}
@Override
public List<CustomProductFactoryPriceRelSnakeVO> list(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO) {
QueryWrapper<CustomProductFactoryPriceRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductFactoryPriceRelEntity> list = customProductFactoryPriceRelDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductFactoryPriceRelSnakeVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductFactoryPriceRelSnakeVO> pageList(CustomProductFactoryPriceRelPageVO customProductFactoryPriceRelPageVO) {
CustomAsserts.nonNull(customProductFactoryPriceRelPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductFactoryPriceRelEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductFactoryPriceRelEntity> page = customProductFactoryPriceRelDomainService.selectPage(queryWrapper, customProductFactoryPriceRelPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductFactoryPriceRelSnakeVO.class));
}
@Override
public CustomProductFactoryPriceRelSnakeVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductFactoryPriceRelEntity customProductFactoryPriceRel = customProductFactoryPriceRelDomainService.getById(id);
return BeanMapper.mapper().convert(customProductFactoryPriceRel, CustomProductFactoryPriceRelSnakeVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO) {
CustomAsserts.nonNull(customProductFactoryPriceRelSnakeVO, "实体对象不能为空");
CustomProductFactoryPriceRelEntity customProductFactoryPriceRelEntity = BeanMapper.mapper().convert(customProductFactoryPriceRelSnakeVO, CustomProductFactoryPriceRelEntity.class);
try {
customProductFactoryPriceRelDomainService.save(customProductFactoryPriceRelEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductFactoryPriceRelServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductFactoryPriceRelSnakeVO customProductFactoryPriceRelSnakeVO) {
CustomAsserts.nonNull(customProductFactoryPriceRelSnakeVO, "实体对象不能为空");
CustomProductFactoryPriceRelEntity customProductFactoryPriceRel = BeanMapper.mapper().convert(customProductFactoryPriceRelSnakeVO, CustomProductFactoryPriceRelEntity.class);
try {
customProductFactoryPriceRelDomainService.updateById(customProductFactoryPriceRel);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductFactoryPriceRelServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductFactoryPriceRelDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductImagePageVO;
import com.jomalls.custom.app.vo.CustomProductImageSnakeVO;
import com.jomalls.custom.app.service.CustomProductImageService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductImageEntity;
import com.jomalls.custom.domain.service.CustomProductImageDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:29
*/
@Slf4j
@Service
public class CustomProductImageServiceImpl implements CustomProductImageService {
private final CustomProductImageDomainService customProductImageDomainService;
@Autowired
public CustomProductImageServiceImpl(CustomProductImageDomainService customProductImageDomainService) {
this.customProductImageDomainService = customProductImageDomainService;
}
@Override
public List<CustomProductImageSnakeVO> list(CustomProductImageSnakeVO customProductImageSnakeVO) {
QueryWrapper<CustomProductImageEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductImageEntity> list = customProductImageDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductImageSnakeVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductImageSnakeVO> pageList(CustomProductImagePageVO customProductImagePageVO) {
CustomAsserts.nonNull(customProductImagePageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductImageEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductImageEntity> page = customProductImageDomainService.selectPage(queryWrapper, customProductImagePageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductImageSnakeVO.class));
}
@Override
public CustomProductImageSnakeVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductImageEntity customProductImage = customProductImageDomainService.getById(id);
return BeanMapper.mapper().convert(customProductImage, CustomProductImageSnakeVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductImageSnakeVO customProductImageSnakeVO) {
CustomAsserts.nonNull(customProductImageSnakeVO, "实体对象不能为空");
CustomProductImageEntity customProductImageEntity = BeanMapper.mapper().convert(customProductImageSnakeVO, CustomProductImageEntity.class);
try {
customProductImageDomainService.save(customProductImageEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductImageServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductImageSnakeVO customProductImageSnakeVO) {
CustomAsserts.nonNull(customProductImageSnakeVO, "实体对象不能为空");
CustomProductImageEntity customProductImage = BeanMapper.mapper().convert(customProductImageSnakeVO, CustomProductImageEntity.class);
try {
customProductImageDomainService.updateById(customProductImage);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductImageServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductImageDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.vo.CustomProductInfoPropertyPageVO;
import com.jomalls.custom.app.vo.CustomProductInfoPropertySnakeVO;
import com.jomalls.custom.app.service.CustomProductInfoPropertyService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.CustomProductInfoPropertyEntity;
import com.jomalls.custom.domain.service.CustomProductInfoPropertyDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-05-29 10:43:29
*/
@Slf4j
@Service
public class CustomProductInfoPropertyServiceImpl implements CustomProductInfoPropertyService {
private final CustomProductInfoPropertyDomainService customProductInfoPropertyDomainService;
@Autowired
public CustomProductInfoPropertyServiceImpl(CustomProductInfoPropertyDomainService customProductInfoPropertyDomainService) {
this.customProductInfoPropertyDomainService = customProductInfoPropertyDomainService;
}
@Override
public List<CustomProductInfoPropertySnakeVO> list(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO) {
QueryWrapper<CustomProductInfoPropertyEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomProductInfoPropertyEntity> list = customProductInfoPropertyDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomProductInfoPropertySnakeVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomProductInfoPropertySnakeVO> pageList(CustomProductInfoPropertyPageVO customProductInfoPropertyPageVO) {
CustomAsserts.nonNull(customProductInfoPropertyPageVO, "分页查询参数不能为空");
QueryWrapper<CustomProductInfoPropertyEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomProductInfoPropertyEntity> page = customProductInfoPropertyDomainService.selectPage(queryWrapper, customProductInfoPropertyPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomProductInfoPropertySnakeVO.class));
}
@Override
public CustomProductInfoPropertySnakeVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomProductInfoPropertyEntity customProductInfoProperty = customProductInfoPropertyDomainService.getById(id);
return BeanMapper.mapper().convert(customProductInfoProperty, CustomProductInfoPropertySnakeVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO) {
CustomAsserts.nonNull(customProductInfoPropertySnakeVO, "实体对象不能为空");
CustomProductInfoPropertyEntity customProductInfoPropertyEntity = BeanMapper.mapper().convert(customProductInfoPropertySnakeVO, CustomProductInfoPropertyEntity.class);
try {
customProductInfoPropertyDomainService.save(customProductInfoPropertyEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductInfoPropertyServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomProductInfoPropertySnakeVO customProductInfoPropertySnakeVO) {
CustomAsserts.nonNull(customProductInfoPropertySnakeVO, "实体对象不能为空");
CustomProductInfoPropertyEntity customProductInfoProperty = BeanMapper.mapper().convert(customProductInfoPropertySnakeVO, CustomProductInfoPropertyEntity.class);
try {
customProductInfoPropertyDomainService.updateById(customProductInfoProperty);
} catch (DuplicateKeyException e) {
log.info("[ CustomProductInfoPropertyServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customProductInfoPropertyDomainService.removeById(id);
}
}
......@@ -31,7 +31,6 @@ import org.springframework.stereotype.Service;
import org.springframework.transaction.support.TransactionTemplate;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.CompletionException;
......@@ -400,7 +399,7 @@ public class CustomProductInfoServiceImpl implements CustomProductInfoService {
CustomProductInfoEntity entity = validateAndQueryEntity(id, sku);
final Integer productId = entity.getId();
// 2. 查询用户(如果指定了 namespace)
DbDiyUserEntity user = queryUserByNamespace(namespace);
DbDiyUserEntity user = diyUserService.getByNamespace(namespace);
// 3. 并行查询所有子表数据
ProductRelatedData relatedData = queryRelatedDataInParallel(productId);
// 4. 组合完整 VO
......@@ -434,20 +433,6 @@ public class CustomProductInfoServiceImpl implements CustomProductInfoService {
}
/**
* 根据 namespace 查询用户
*/
private DbDiyUserEntity queryUserByNamespace(String namespace) {
if (StringUtils.isBlank(namespace)) {
return null;
}
DbDiyUserEntity user = diyUserService.getByNamespace(namespace);
if (user == null) {
throw new ServiceException("用户不存在, namespace=" + namespace);
}
return user;
}
/**
* 并行查询所有子表数据,带超时保护
*/
private ProductRelatedData queryRelatedDataInParallel(Integer productId) {
......@@ -953,48 +938,48 @@ public class CustomProductInfoServiceImpl implements CustomProductInfoService {
// 7. 执行分页查询
IPage<CustomProductInfoEntity> page = customProductInfoDomainService.selectPage(queryWrapper, param);
// 8. 批量查询 DIY 上架状态(对齐 TS:723-738,单次 IN 查询避免 N+1
// 8. 并行批量加载关联数据(对齐 TS:715 include + 723-738,4 个独立查询并行执行
List<CustomProductInfoEntity> rows = page.getRecords();
final Map<Integer, Boolean> diyShelfStatusMap;
if (!rows.isEmpty()) {
diyShelfStatusMap = batchQueryDiyShelfStatus(rows);
} else {
diyShelfStatusMap = Collections.emptyMap();
}
// 9. 批量加载关联实体(对齐 TS:715 include:[CraftCenter, CustomWarehouseInfo, CustomProductFactoryPriceIntervalRel])
final Map<Integer, List<CraftCenterSnakeVO>> craftMap;
final Map<Integer, List<CustomWarehouseInfoSnakeVO>> warehouseMap;
final Map<Integer, List<FactoryPriceIntervalRelSnakeVO>> intervalMap;
if (!rows.isEmpty()) {
if (CollectionUtils.isNotEmpty(rows)) {
List<Integer> productIds = rows.stream().map(CustomProductInfoEntity::getId).distinct().collect(Collectors.toList());
craftMap = batchLoadCraftsByProductIds(productIds);
warehouseMap = batchLoadWarehousesByProductIds(productIds);
intervalMap = batchLoadFactoryPriceIntervalsByProductIds(productIds);
CompletableFuture<Map<Integer, Boolean>> shelfFuture =
CompletableFuture.supplyAsync(() -> batchQueryDiyShelfStatus(rows), threadPoolExecutor);
CompletableFuture<Map<Integer, List<CraftCenterSnakeVO>>> craftFuture =
CompletableFuture.supplyAsync(() -> batchLoadCraftsByProductIds(productIds), threadPoolExecutor);
CompletableFuture<Map<Integer, List<CustomWarehouseInfoSnakeVO>>> warehouseFuture =
CompletableFuture.supplyAsync(() -> batchLoadWarehousesByProductIds(productIds), threadPoolExecutor);
CompletableFuture<Map<Integer, List<FactoryPriceIntervalRelSnakeVO>>> intervalFuture =
CompletableFuture.supplyAsync(() -> batchLoadFactoryPriceIntervalsByProductIds(productIds), threadPoolExecutor);
try {
diyShelfStatusMap = shelfFuture.get(QUERY_TIMEOUT_SECONDS, TimeUnit.SECONDS);
craftMap = craftFuture.get(QUERY_TIMEOUT_SECONDS, TimeUnit.SECONDS);
warehouseMap = warehouseFuture.get(QUERY_TIMEOUT_SECONDS, TimeUnit.SECONDS);
intervalMap = intervalFuture.get(QUERY_TIMEOUT_SECONDS, TimeUnit.SECONDS);
} catch (Exception ex) {
log.error("[ erpPage ] 并行查询关联数据失败", ex);
throw new ServiceException("查询关联数据失败");
}
} else {
diyShelfStatusMap = Collections.emptyMap();
craftMap = Collections.emptyMap();
warehouseMap = Collections.emptyMap();
intervalMap = Collections.emptyMap();
}
// 10. 预计算折扣率(对齐 TS:316-355 setProductExternalPrice)
final BigDecimal discountRate;
if (user != null && user.getDiscount() != null) {
discountRate = user.getDiscount().divide(new BigDecimal("100"), 4, RoundingMode.HALF_UP);
} else {
discountRate = null;
}
// user 需要在 lambda 中引用,声明为 effectively final
final DbDiyUserEntity finalUser = user;
return page.convert(e -> {
CustomProductInfoPageSnakeVO vo = BeanMapper.snakeCase().convert(e, CustomProductInfoPageSnakeVO.class);
// 填充关联实体(对齐 TS include)
vo.setCraftList(craftMap.getOrDefault(e.getId(), Collections.emptyList()));
vo.setWarehouseList(warehouseMap.getOrDefault(e.getId(), Collections.emptyList()));
vo.setFactoryPriceIntervalList(intervalMap.getOrDefault(e.getId(), Collections.emptyList()));
// 应用用户折扣定价(对齐 TS setProductExternalPrice:discount=1 时跳过)
if (discountRate != null && discountRate.compareTo(BigDecimal.ONE) != 0) {
applyDiscountToVO(vo, discountRate);
}
// 应用用户折扣(复用 DiyUserService,统一处理 discount=null/1 的判断+主表+价格区间)
diyUserService.setProductExternalPrice(finalUser, vo);
if (StringUtils.isNotBlank(e.getColorImages())) {
vo.setColorImageList(Arrays.asList(e.getColorImages().split(",")));
}
......@@ -1004,28 +989,6 @@ public class CustomProductInfoServiceImpl implements CustomProductInfoService {
});
}
/** 折扣逻辑(对齐 TS setProductExternalPrice:主表 + 价格区间 + 工厂价格) */
private void applyDiscountToVO(CustomProductInfoPageSnakeVO vo, BigDecimal discountRate) {
if (vo.getSales_price() != null) {
vo.setSales_price(vo.getSales_price().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
if (vo.getSales_price_max() != null) {
vo.setSales_price_max(vo.getSales_price_max().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
// 价格区间折扣(对齐 TS:342-347)
if (vo.getFactoryPriceIntervalList() != null) {
for (FactoryPriceIntervalRelSnakeVO interval : vo.getFactoryPriceIntervalList()) {
if (interval.getPrice_max() != null) {
interval.setPrice_max(interval.getPrice_max().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
if (interval.getPrice_min() != null) {
interval.setPrice_min(interval.getPrice_min().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
}
}
// 注意:erpPage 不加载 productList(TS include 亦不包含),子项折扣仅用于 getByIdOrSku
}
/** 返回空分页结果 */
private IPage<CustomProductInfoPageSnakeVO> emptyPage(CustomProductInfoQuerySnakeDTO param) {
return new Page<>(param.getCurrent(), param.getSize());
......@@ -1837,11 +1800,11 @@ public class CustomProductInfoServiceImpl implements CustomProductInfoService {
// 备注(null-safe:商品可能无中/英文备注)
if (cnRemark != null) {
fullVO.setProductCnRemark(BeanMapper.snakeCase().convert(cnRemark, ProductRemarkVO.class));
fullVO.setProductCnRemark(BeanMapper.snakeCase().convert(cnRemark, ProductRemarkSnakeVO.class));
fullVO.setCnRemark(cnRemark.getRemark());
}
if (remark != null) {
fullVO.setProductRemark(BeanMapper.snakeCase().convert(remark, ProductRemarkVO.class));
fullVO.setProductRemark(BeanMapper.snakeCase().convert(remark, ProductRemarkSnakeVO.class));
fullVO.setRemark(remark.getRemark());
}
......
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.CustomWarehouseInfoService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.app.vo.CustomWarehouseInfoPageVO;
import com.jomalls.custom.app.vo.CustomWarehouseInfoSnakeVO;
import com.jomalls.custom.dal.entity.CustomWarehouseInfoEntity;
import com.jomalls.custom.domain.service.CustomWarehouseInfoDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-06-03 14:47:24
*/
@Slf4j
@Service
public class CustomWarehouseInfoServiceImpl implements CustomWarehouseInfoService {
private final CustomWarehouseInfoDomainService customWarehouseInfoDomainService;
@Autowired
public CustomWarehouseInfoServiceImpl(CustomWarehouseInfoDomainService customWarehouseInfoDomainService) {
this.customWarehouseInfoDomainService = customWarehouseInfoDomainService;
}
@Override
public List<CustomWarehouseInfoSnakeVO> list(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO) {
QueryWrapper<CustomWarehouseInfoEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomWarehouseInfoEntity> list = customWarehouseInfoDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomWarehouseInfoSnakeVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomWarehouseInfoSnakeVO> pageList(CustomWarehouseInfoPageVO customWarehouseInfoPageVO) {
CustomAsserts.nonNull(customWarehouseInfoPageVO, "分页查询参数不能为空");
QueryWrapper<CustomWarehouseInfoEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<CustomWarehouseInfoEntity> page = customWarehouseInfoDomainService.selectPage(queryWrapper, customWarehouseInfoPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, CustomWarehouseInfoSnakeVO.class));
}
@Override
public CustomWarehouseInfoSnakeVO info(Long id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomWarehouseInfoEntity customWarehouseInfo = customWarehouseInfoDomainService.getById(id);
return BeanMapper.mapper().convert(customWarehouseInfo, CustomWarehouseInfoSnakeVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO) {
CustomAsserts.nonNull(customWarehouseInfoSnakeVO, "实体对象不能为空");
CustomWarehouseInfoEntity customWarehouseInfoEntity = BeanMapper.mapper().convert(customWarehouseInfoSnakeVO, CustomWarehouseInfoEntity.class);
try {
customWarehouseInfoDomainService.save(customWarehouseInfoEntity);
} catch (DuplicateKeyException e) {
log.info("[ CustomWarehouseInfoServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(CustomWarehouseInfoSnakeVO customWarehouseInfoSnakeVO) {
CustomAsserts.nonNull(customWarehouseInfoSnakeVO, "实体对象不能为空");
CustomWarehouseInfoEntity customWarehouseInfo = BeanMapper.mapper().convert(customWarehouseInfoSnakeVO, CustomWarehouseInfoEntity.class);
try {
customWarehouseInfoDomainService.updateById(customWarehouseInfo);
} catch (DuplicateKeyException e) {
log.info("[ CustomWarehouseInfoServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Long id) {
CustomAsserts.nonNull(id, "主键id不能为空");
customWarehouseInfoDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.DbDiyService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.app.vo.DbDiyPageVO;
import com.jomalls.custom.app.vo.DbDiySnakeVO;
import com.jomalls.custom.dal.entity.DbDiyEntity;
import com.jomalls.custom.domain.service.DbDiyDomainService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-06-03 14:47:23
*/
@Slf4j
@Service
public class DbDiyServiceImpl implements DbDiyService {
private final DbDiyDomainService dbDiyDomainService;
@Autowired
public DbDiyServiceImpl(DbDiyDomainService dbDiyDomainService) {
this.dbDiyDomainService = dbDiyDomainService;
}
@Override
public List<DbDiySnakeVO> list(DbDiySnakeVO dbDiySnakeVO) {
QueryWrapper<DbDiyEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<DbDiyEntity> list = dbDiyDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, DbDiySnakeVO.class)).collect(Collectors.toList());
}
@Override
public IPage<DbDiySnakeVO> pageList(DbDiyPageVO dbDiyPageVO) {
CustomAsserts.nonNull(dbDiyPageVO, "分页查询参数不能为空");
QueryWrapper<DbDiyEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<DbDiyEntity> page = dbDiyDomainService.selectPage(queryWrapper, dbDiyPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, DbDiySnakeVO.class));
}
@Override
public DbDiySnakeVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
DbDiyEntity dbDiy = dbDiyDomainService.getById(id);
return BeanMapper.mapper().convert(dbDiy, DbDiySnakeVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(DbDiySnakeVO dbDiySnakeVO) {
CustomAsserts.nonNull(dbDiySnakeVO, "实体对象不能为空");
DbDiyEntity dbDiyEntity = BeanMapper.mapper().convert(dbDiySnakeVO, DbDiyEntity.class);
try {
dbDiyDomainService.save(dbDiyEntity);
} catch (DuplicateKeyException e) {
log.info("[ DbDiyServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(DbDiySnakeVO dbDiySnakeVO) {
CustomAsserts.nonNull(dbDiySnakeVO, "实体对象不能为空");
DbDiyEntity dbDiy = BeanMapper.mapper().convert(dbDiySnakeVO, DbDiyEntity.class);
try {
dbDiyDomainService.updateById(dbDiy);
} catch (DuplicateKeyException e) {
log.info("[ DbDiyServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
dbDiyDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.DiyUserService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.vo.*;
import com.jomalls.custom.dal.entity.DbDiyEntity;
import com.jomalls.custom.dal.entity.DbDiyUserEntity;
import com.jomalls.custom.domain.service.DbDiyUserDomainService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.List;
import java.util.stream.Collectors;
/**
* DIY 用户服务实现
......@@ -32,7 +39,14 @@ public class DiyUserServiceImpl implements DiyUserService {
@Override
public DbDiyUserEntity getByNamespace(String namespace) {
return dbDiyUserDomainService.getByNamespace(namespace);
if (StringUtils.isBlank(namespace)) {
return null;
}
DbDiyUserEntity user = dbDiyUserDomainService.getByNamespace(namespace);
if (user == null) {
throw new ServiceException("用户不存在, namespace=" + namespace);
}
return user;
}
@Override
......@@ -77,6 +91,47 @@ public class DiyUserServiceImpl implements DiyUserService {
}
}
}
// 价格区间的 price_max / price_min(对齐 TS:342-347)
if (vo.getFactoryPriceIntervalList() != null) {
for (FactoryPriceIntervalRelSnakeVO interval : vo.getFactoryPriceIntervalList()) {
if (interval.getPrice_max() != null) {
interval.setPrice_max(interval.getPrice_max().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
if (interval.getPrice_min() != null) {
interval.setPrice_min(interval.getPrice_min().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
}
}
}
@Override
public void setProductExternalPrice(DbDiyUserEntity user, CustomProductInfoPageSnakeVO vo) {
if (user == null || user.getDiscount() == null) {
return;
}
BigDecimal discountRate = user.getDiscount().divide(DISCOUNT_BASE, 4, RoundingMode.HALF_UP);
if (discountRate.compareTo(BigDecimal.ONE) == 0) {
return;
}
log.debug("[ setProductExternalPrice ] 用户={}, 折扣率={}", user.getName(), discountRate);
// 主表
if (vo.getSales_price() != null) {
vo.setSales_price(vo.getSales_price().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
if (vo.getSales_price_max() != null) {
vo.setSales_price_max(vo.getSales_price_max().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
// 价格区间
if (vo.getFactoryPriceIntervalList() != null) {
for (FactoryPriceIntervalRelSnakeVO interval : vo.getFactoryPriceIntervalList()) {
if (interval.getPrice_max() != null) {
interval.setPrice_max(interval.getPrice_max().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
if (interval.getPrice_min() != null) {
interval.setPrice_min(interval.getPrice_min().multiply(discountRate).setScale(2, RoundingMode.HALF_UP));
}
}
}
}
@Override
......
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.ProductFactoryRelService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.app.vo.ProductFactoryRelPageVO;
import com.jomalls.custom.app.vo.ProductFactoryRelVO;
import com.jomalls.custom.dal.entity.ProductFactoryRelEntity;
import com.jomalls.custom.domain.service.ProductFactoryRelDomainService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* 产品-工厂关联 App Service 实现
*
* @author Lizh
* @date 2026-06-06
*/
@Slf4j
@Service
@RequiredArgsConstructor
public class ProductFactoryRelServiceImpl implements ProductFactoryRelService {
private final ProductFactoryRelDomainService productFactoryRelDomainService;
@Override
public List<ProductFactoryRelVO> list(ProductFactoryRelVO vo) {
QueryWrapper<ProductFactoryRelEntity> queryWrapper = new QueryWrapper<>();
List<ProductFactoryRelEntity> list = productFactoryRelDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, ProductFactoryRelVO.class)).collect(Collectors.toList());
}
@Override
public IPage<ProductFactoryRelVO> pageList(ProductFactoryRelPageVO param) {
CustomAsserts.nonNull(param, "分页查询参数不能为空");
QueryWrapper<ProductFactoryRelEntity> queryWrapper = new QueryWrapper<>();
queryWrapper.orderByDesc("id");
IPage<ProductFactoryRelEntity> page = productFactoryRelDomainService.selectPage(queryWrapper, param);
return page.convert(e -> BeanMapper.mapper().convert(e, ProductFactoryRelVO.class));
}
@Override
public ProductFactoryRelVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
ProductFactoryRelEntity entity = productFactoryRelDomainService.getById(id);
return BeanMapper.mapper().convert(entity, ProductFactoryRelVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(ProductFactoryRelVO vo) {
CustomAsserts.nonNull(vo, "实体对象不能为空");
ProductFactoryRelEntity entity = BeanMapper.mapper().convert(vo, ProductFactoryRelEntity.class);
try {
productFactoryRelDomainService.save(entity);
} catch (DuplicateKeyException e) {
log.info("[ save ] 实体对象唯一约束重复", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(ProductFactoryRelVO vo) {
CustomAsserts.nonNull(vo, "实体对象不能为空");
ProductFactoryRelEntity entity = BeanMapper.mapper().convert(vo, ProductFactoryRelEntity.class);
try {
productFactoryRelDomainService.updateById(entity);
} catch (DuplicateKeyException e) {
log.info("[ updateById ] 实体对象唯一约束重复", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
productFactoryRelDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.SysRoleDeptService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.SysRoleDeptEntity;
import com.jomalls.custom.domain.service.SysRoleDeptDomainService;
import com.jomalls.custom.app.vo.SysRoleDeptVO;
import com.jomalls.custom.app.vo.SysRoleDeptPageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 角色和部门关联表 接口实现
* @date 2026-06-01 12:30:00
*/
@Slf4j
@Service
public class SysRoleDeptServiceImpl implements SysRoleDeptService {
private final SysRoleDeptDomainService sysRoleDeptDomainService;
@Autowired
public SysRoleDeptServiceImpl(SysRoleDeptDomainService sysRoleDeptDomainService) {
this.sysRoleDeptDomainService = sysRoleDeptDomainService;
}
@Override
public List<SysRoleDeptVO> list(SysRoleDeptVO sysRoleDeptVO) {
QueryWrapper<SysRoleDeptEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<SysRoleDeptEntity> list = sysRoleDeptDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, SysRoleDeptVO.class)).collect(Collectors.toList());
}
@Override
public IPage<SysRoleDeptVO> pageList(SysRoleDeptPageVO sysRoleDeptPageVO) {
CustomAsserts.nonNull(sysRoleDeptPageVO, "分页查询参数不能为空");
QueryWrapper<SysRoleDeptEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<SysRoleDeptEntity> page = sysRoleDeptDomainService.selectPage(queryWrapper, sysRoleDeptPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, SysRoleDeptVO.class));
}
@Override
public SysRoleDeptVO info(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
SysRoleDeptEntity sysRoleDept = sysRoleDeptDomainService.getById(id);
return BeanMapper.mapper().convert(sysRoleDept, SysRoleDeptVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(SysRoleDeptVO sysRoleDeptVO) {
CustomAsserts.nonNull(sysRoleDeptVO, "实体对象不能为空");
SysRoleDeptEntity sysRoleDeptEntity = BeanMapper.mapper().convert(sysRoleDeptVO, SysRoleDeptEntity.class);
try {
sysRoleDeptDomainService.save(sysRoleDeptEntity);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleDeptServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(SysRoleDeptVO sysRoleDeptVO) {
CustomAsserts.nonNull(sysRoleDeptVO, "实体对象不能为空");
SysRoleDeptEntity sysRoleDept = BeanMapper.mapper().convert(sysRoleDeptVO, SysRoleDeptEntity.class);
try {
sysRoleDeptDomainService.updateById(sysRoleDept);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleDeptServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
sysRoleDeptDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.SysRoleMenuService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.SysRoleMenuEntity;
import com.jomalls.custom.domain.service.SysRoleMenuDomainService;
import com.jomalls.custom.app.vo.SysRoleMenuVO;
import com.jomalls.custom.app.vo.SysRoleMenuPageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 角色和菜单关联表 接口实现
* @date 2026-06-01 12:29:59
*/
@Slf4j
@Service
public class SysRoleMenuServiceImpl implements SysRoleMenuService {
private final SysRoleMenuDomainService sysRoleMenuDomainService;
@Autowired
public SysRoleMenuServiceImpl(SysRoleMenuDomainService sysRoleMenuDomainService) {
this.sysRoleMenuDomainService = sysRoleMenuDomainService;
}
@Override
public List<SysRoleMenuVO> list(SysRoleMenuVO sysRoleMenuVO) {
QueryWrapper<SysRoleMenuEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<SysRoleMenuEntity> list = sysRoleMenuDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, SysRoleMenuVO.class)).collect(Collectors.toList());
}
@Override
public IPage<SysRoleMenuVO> pageList(SysRoleMenuPageVO sysRoleMenuPageVO) {
CustomAsserts.nonNull(sysRoleMenuPageVO, "分页查询参数不能为空");
QueryWrapper<SysRoleMenuEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<SysRoleMenuEntity> page = sysRoleMenuDomainService.selectPage(queryWrapper, sysRoleMenuPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, SysRoleMenuVO.class));
}
@Override
public SysRoleMenuVO info(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
SysRoleMenuEntity sysRoleMenu = sysRoleMenuDomainService.getById(id);
return BeanMapper.mapper().convert(sysRoleMenu, SysRoleMenuVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(SysRoleMenuVO sysRoleMenuVO) {
CustomAsserts.nonNull(sysRoleMenuVO, "实体对象不能为空");
SysRoleMenuEntity sysRoleMenuEntity = BeanMapper.mapper().convert(sysRoleMenuVO, SysRoleMenuEntity.class);
try {
sysRoleMenuDomainService.save(sysRoleMenuEntity);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleMenuServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(SysRoleMenuVO sysRoleMenuVO) {
CustomAsserts.nonNull(sysRoleMenuVO, "实体对象不能为空");
SysRoleMenuEntity sysRoleMenu = BeanMapper.mapper().convert(sysRoleMenuVO, SysRoleMenuEntity.class);
try {
sysRoleMenuDomainService.updateById(sysRoleMenu);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleMenuServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
sysRoleMenuDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.SysRoleService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.SysRoleEntity;
import com.jomalls.custom.domain.service.SysRoleDomainService;
import com.jomalls.custom.app.vo.SysRoleVO;
import com.jomalls.custom.app.vo.SysRolePageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 角色信息表 接口实现
* @date 2026-06-01 12:29:59
*/
@Slf4j
@Service
public class SysRoleServiceImpl implements SysRoleService {
private final SysRoleDomainService sysRoleDomainService;
@Autowired
public SysRoleServiceImpl(SysRoleDomainService sysRoleDomainService) {
this.sysRoleDomainService = sysRoleDomainService;
}
@Override
public List<SysRoleVO> list(SysRoleVO sysRoleVO) {
QueryWrapper<SysRoleEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<SysRoleEntity> list = sysRoleDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, SysRoleVO.class)).collect(Collectors.toList());
}
@Override
public IPage<SysRoleVO> pageList(SysRolePageVO sysRolePageVO) {
CustomAsserts.nonNull(sysRolePageVO, "分页查询参数不能为空");
QueryWrapper<SysRoleEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<SysRoleEntity> page = sysRoleDomainService.selectPage(queryWrapper, sysRolePageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, SysRoleVO.class));
}
@Override
public SysRoleVO info(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
SysRoleEntity sysRole = sysRoleDomainService.getById(id);
return BeanMapper.mapper().convert(sysRole, SysRoleVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(SysRoleVO sysRoleVO) {
CustomAsserts.nonNull(sysRoleVO, "实体对象不能为空");
SysRoleEntity sysRoleEntity = BeanMapper.mapper().convert(sysRoleVO, SysRoleEntity.class);
try {
sysRoleDomainService.save(sysRoleEntity);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(SysRoleVO sysRoleVO) {
CustomAsserts.nonNull(sysRoleVO, "实体对象不能为空");
SysRoleEntity sysRole = BeanMapper.mapper().convert(sysRoleVO, SysRoleEntity.class);
try {
sysRoleDomainService.updateById(sysRole);
} catch (DuplicateKeyException e) {
log.info("[ SysRoleServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
sysRoleDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.SysUserRoleService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.SysUserRoleEntity;
import com.jomalls.custom.domain.service.SysUserRoleDomainService;
import com.jomalls.custom.app.vo.SysUserRoleVO;
import com.jomalls.custom.app.vo.SysUserRolePageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 用户和角色关联表 接口实现
* @date 2026-06-01 12:29:59
*/
@Slf4j
@Service
public class SysUserRoleServiceImpl implements SysUserRoleService {
private final SysUserRoleDomainService sysUserRoleDomainService;
@Autowired
public SysUserRoleServiceImpl(SysUserRoleDomainService sysUserRoleDomainService) {
this.sysUserRoleDomainService = sysUserRoleDomainService;
}
@Override
public List<SysUserRoleVO> list(SysUserRoleVO sysUserRoleVO) {
QueryWrapper<SysUserRoleEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<SysUserRoleEntity> list = sysUserRoleDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, SysUserRoleVO.class)).collect(Collectors.toList());
}
@Override
public IPage<SysUserRoleVO> pageList(SysUserRolePageVO sysUserRolePageVO) {
CustomAsserts.nonNull(sysUserRolePageVO, "分页查询参数不能为空");
QueryWrapper<SysUserRoleEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<SysUserRoleEntity> page = sysUserRoleDomainService.selectPage(queryWrapper, sysUserRolePageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, SysUserRoleVO.class));
}
@Override
public SysUserRoleVO info(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
SysUserRoleEntity sysUserRole = sysUserRoleDomainService.getById(id);
return BeanMapper.mapper().convert(sysUserRole, SysUserRoleVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(SysUserRoleVO sysUserRoleVO) {
CustomAsserts.nonNull(sysUserRoleVO, "实体对象不能为空");
SysUserRoleEntity sysUserRoleEntity = BeanMapper.mapper().convert(sysUserRoleVO, SysUserRoleEntity.class);
try {
sysUserRoleDomainService.save(sysUserRoleEntity);
} catch (DuplicateKeyException e) {
log.info("[ SysUserRoleServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(SysUserRoleVO sysUserRoleVO) {
CustomAsserts.nonNull(sysUserRoleVO, "实体对象不能为空");
SysUserRoleEntity sysUserRole = BeanMapper.mapper().convert(sysUserRoleVO, SysUserRoleEntity.class);
try {
sysUserRoleDomainService.updateById(sysUserRole);
} catch (DuplicateKeyException e) {
log.info("[ SysUserRoleServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(String id) {
CustomAsserts.nonNull(id, "主键id不能为空");
sysUserRoleDomainService.removeById(id);
}
}
package com.jomalls.custom.app.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.SysUserService;
import com.jomalls.custom.app.utils.BeanMapper;
import com.jomalls.custom.app.utils.CustomAsserts;
import com.jomalls.custom.dal.entity.SysUserEntity;
import com.jomalls.custom.domain.service.SysUserDomainService;
import com.jomalls.custom.app.vo.SysUserVO;
import com.jomalls.custom.app.vo.SysUserPageVO;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.dao.DuplicateKeyException;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.List;
import java.util.stream.Collectors;
/**
* @author Lizh
* @version 0.01
* @description: 用户信息表 接口实现
* @date 2026-06-01 12:29:59
*/
@Slf4j
@Service
public class SysUserServiceImpl implements SysUserService {
private final SysUserDomainService sysUser11DomainService;
@Autowired
public SysUserServiceImpl(SysUserDomainService sysUser11DomainService) {
this.sysUser11DomainService = sysUser11DomainService;
}
@Override
public List<SysUserVO> list(SysUserVO sysUserVO) {
QueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<SysUserEntity> list = sysUser11DomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, SysUserVO.class)).collect(Collectors.toList());
}
@Override
public IPage<SysUserVO> pageList(SysUserPageVO sysUserPageVO) {
CustomAsserts.nonNull(sysUserPageVO, "分页查询参数不能为空");
QueryWrapper<SysUserEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
IPage<SysUserEntity> page = sysUser11DomainService.selectPage(queryWrapper, sysUserPageVO);
return page.convert(e -> BeanMapper.mapper().convert(e, SysUserVO.class));
}
@Override
public SysUserVO info(Long id) {
CustomAsserts.nonNull(id, "主键id不能为空");
SysUserEntity sysUser11 = sysUser11DomainService.getById(id);
return BeanMapper.mapper().convert(sysUser11, SysUserVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(SysUserVO sysUserVO) {
CustomAsserts.nonNull(sysUserVO, "实体对象不能为空");
SysUserEntity sysUser11Entity = BeanMapper.mapper().convert(sysUserVO, SysUserEntity.class);
try {
sysUser11DomainService.save(sysUser11Entity);
} catch (DuplicateKeyException e) {
log.info("[ SysUser11ServiceImpl save ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void updateById(SysUserVO sysUserVO) {
CustomAsserts.nonNull(sysUserVO, "实体对象不能为空");
SysUserEntity sysUser11 = BeanMapper.mapper().convert(sysUserVO, SysUserEntity.class);
try {
sysUser11DomainService.updateById(sysUser11);
} catch (DuplicateKeyException e) {
log.info("[ SysUser11ServiceImpl updateById ] 实体对象唯一约束重复,请调整后再试!", e);
throw new ServiceException("实体对象唯一约束重复,请调整后再试!");
}
}
@Transactional(rollbackFor = Exception.class)
@Override
public void deleteById(Long id) {
CustomAsserts.nonNull(id, "主键id不能为空");
sysUser11DomainService.removeById(id);
}
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
* @Author: Lizh
* @Date: 2026/6/16 10:11
* @Description: 商品信息基础信息字段
* @Version: 1.0
*/
@Data
@Schema(description = "商品基础属性,从商品详情和分页详情提出")
public class BasicCustomProductInfoSnakeModel {
@Schema(description = "主键 ID")
private Integer id;
@Schema(description = "SKU")
private String sku;
@Schema(description = "货号")
private String product_no;
@Schema(description = "title")
private String title;
@Schema(description = "商品名称")
private String name;
@Schema(description = "图片集")
private List<String> colorImageList;
@Schema(description = "图片集")
private String color_images;
@Schema(description = "商品主图")
private String img_url;
@Schema(description = "商品类别ID")
private Integer category_id;
@Schema(description = "重量(kg)")
private BigDecimal weight;
@Schema(description = "最小采购量")
private Integer purchasing_min;
@Schema(description = "工厂价(¥)")
private BigDecimal factory_price;
@Schema(description = "销售价(¥)")
private BigDecimal sales_price;
@Schema(description = "销售价最高价(¥)")
private BigDecimal sales_price_max;
@Schema(description = "状态:1待上架 10已上架 20已下架 30待下架 40已作废")
private Integer status;
@Schema(description = "商品属性分类ID 1")
private Integer property1_cate_id;
@Schema(description = "商品属性分类ID 2")
private Integer property2_cate_id;
@Schema(description = "商品属性分类ID 3")
private Integer property3_cate_id;
@Schema(description = "商品属性英文名称 1")
private String property1_enname;
@Schema(description = "商品属性英文名称 2")
private String property2_enname;
@Schema(description = "商品属性英文名称 3")
private String property3_enname;
@Schema(description = "材质")
private String material;
@Schema(description = "印花类型:0满印 1局部印")
private Integer print_type;
@Schema(description = "产地编码")
private String origin_code;
@Schema(description = "产地中文名")
private String origin_name_cn;
@Schema(description = "产地英文名")
private String origin_name_en;
@Schema(description = "币种编码")
private String currency_code;
@Schema(description = "币种名称")
private String currency_name;
@Schema(description = "产品类型:platform/customer")
private String product_type;
@Schema(description = "工厂ID")
private Integer factory_id;
@Schema(description = "工厂编码")
private String factory_code;
@Schema(description = "是否九猫处理")
private Boolean processing;
@Schema(description = "创建时间")
private Date create_time;
@Schema(description = "更新时间")
private Date update_time;
@Schema(description = "排序")
private Integer sort;
@Schema(description = "默认模ID")
private Integer diy_id;
@Schema(description = "默认模SKU")
private String diy_sku;
@Schema(description = "普通图片列表(type=0)")
private List<CustomProductImageSnakeVO> imageList;
@Schema(description = "商品描述")
private ProductRemarkSnakeVO productRemark;
@Schema(description = "商品中文描述")
private ProductRemarkSnakeVO productCnRemark;
@Schema(description = "工厂价格关联列表")
private List<CustomProductFactoryPriceRelSnakeVO> factoryPriceList;
@Schema(description = "尺码图片列表(type=1)")
private List<CustomProductImageSnakeVO> sizeList;
@Schema(description = "DIY 用户 ID 列表")
private List<Integer> diyUserIds;
@Schema(description = "工艺 ID 列表")
private List<String> craftIds;
@Schema(description = "工厂 ID 列表")
private List<Integer> factoryIds;
@Schema(description = "仓库 ID 列表")
private List<Integer> warehouseIds;
@Schema(description = "英文备注内容")
private String remark;
@Schema(description = "中文备注内容")
private String cnRemark;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:56:55
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductBlacklistPageVo")
public class CustomProductBlacklistPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info的id
*/
@Schema(description = "custom_product_info的id")
private Integer productId;
/**
* db_diy_user的id
*/
@Schema(description = "db_diy_user的id")
private Integer diyUserId;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 11:56:55
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class CustomProductBlacklistVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info的id
*/
@Schema(description = "custom_product_info的id")
private Integer productId;
/**
* db_diy_user的id
*/
@Schema(description = "db_diy_user的id")
private Integer diyUserId;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:56:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductCraftRelPageVo")
public class CustomProductCraftRelPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info 的id
*/
@Schema(description = "custom_product_info 的id")
private Integer productId;
/**
* craft_center 的id
*/
@Schema(description = "craft_center 的id")
private Long craftId;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 11:56:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class CustomProductCraftRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info 的id
*/
@Schema(description = "custom_product_info 的id")
private Integer productId;
/**
* craft_center 的id
*/
@Schema(description = "craft_center 的id")
private Long craftId;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:56:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductDiyUserRelPageVo")
public class CustomProductDiyUserRelPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info的id
*/
@Schema(description = "custom_product_info的id")
private Integer productId;
/**
* db_diy_user的id
*/
@Schema(description = "db_diy_user的id")
private Integer diyUserId;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 11:56:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class CustomProductDiyUserRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info的id
*/
@Schema(description = "custom_product_info的id")
private Integer productId;
/**
* db_diy_user的id
*/
@Schema(description = "db_diy_user的id")
private Integer diyUserId;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:56:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductFactoryPriceIntervalRelPageVo")
public class CustomProductFactoryPriceIntervalRelPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info 表id
*/
@Schema(description = "custom_product_info 表id")
private Integer productId;
/**
* 币种编码
*/
@Schema(description = "币种编码")
private String currencyCode;
/**
* (系统成本)最大值
*/
@Schema(description = "(系统成本)最大值")
private BigDecimal priceMax;
/**
* (系统成本)最小值
*/
@Schema(description = "(系统成本)最小值")
private BigDecimal priceMin;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 11:56:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class CustomProductFactoryPriceIntervalRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info 表id
*/
@Schema(description = "custom_product_info 表id")
private Integer productId;
/**
* 币种编码
*/
@Schema(description = "币种编码")
private String currencyCode;
/**
* (系统成本)最大值
*/
@Schema(description = "(系统成本)最大值")
private BigDecimal priceMax;
/**
* (系统成本)最小值
*/
@Schema(description = "(系统成本)最小值")
private BigDecimal priceMin;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:57:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductFactoryPriceRelPageVo")
public class CustomProductFactoryPriceRelPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info表id
*/
@Schema(description = "custom_product_info表id")
private Integer productId;
/**
* custom_product_item表id
*/
@Schema(description = "custom_product_item表id")
private Integer itemId;
/**
* custom_product_item表sku
*/
@Schema(description = "custom_product_item表sku")
private String itemSku;
/**
* db_diy表id
*/
@Schema(description = "db_diy表id")
private Integer factoryId;
/**
* 工厂价格
*/
@Schema(description = "工厂价格")
private BigDecimal factoryPrice;
/**
* 销售价
*/
@Schema(description = "销售价")
private BigDecimal salesPrice;
/**
* 工厂币种
*/
@Schema(description = "工厂币种")
private String factoryCurrencyCode;
/**
* 售卖币种
*/
@Schema(description = "售卖币种")
private String salesCurrencyCode;
/**
*
*/
@Schema(description = "")
private Date createTime;
/**
*
*/
@Schema(description = "")
private Date updateTime;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:57:01
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductImagePageVo")
public class CustomProductImagePageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* 商品ID
*/
@Schema(description = "商品ID")
private Integer productId;
/**
* 图片地址
*/
@Schema(description = "图片地址")
private String imageUrl;
/**
* 排序
*/
@Schema(description = "排序")
private Integer sort;
/**
* 类型 0普通图片 1尺码图
*/
@Schema(description = "类型 0普通图片 1尺码图")
private Integer type;
/**
*
*/
@Schema(description = "")
private Date createTime;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
......@@ -21,159 +15,14 @@ import java.util.List;
* @author Lizh
* @date 2026-06-06
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "商品完整详情")
public class CustomProductInfoPageSnakeVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主键 ID")
private Integer id;
@Schema(description = "SKU")
private String sku;
@Schema(description = "货号")
private String product_no;
@Schema(description = "title")
private String title;
@Schema(description = "商品名称")
private String name;
@Schema(description = "图片集")
private List<String> colorImageList;
@Schema(description = "图片集")
private String color_images;
@Schema(description = "商品主图")
private String img_url;
@Schema(description = "商品类别ID")
private Integer category_id;
@Schema(description = "重量(kg)")
private BigDecimal weight;
@Schema(description = "最小采购量")
private Integer purchasing_min;
@Schema(description = "工厂价(¥)")
private BigDecimal factory_price;
@Schema(description = "销售价(¥)")
private BigDecimal sales_price;
@Schema(description = "销售价最高价(¥)")
private BigDecimal sales_price_max;
@Schema(description = "状态:1待上架 10已上架 20已下架 30待下架 40已作废")
private Integer status;
@Schema(description = "商品属性分类ID 1")
private Integer property1_cate_id;
@Schema(description = "商品属性分类ID 2")
private Integer property2_cate_id;
@Schema(description = "商品属性分类ID 3")
private Integer property3_cate_id;
@Schema(description = "商品属性英文名称 1")
private String property1_enname;
@Schema(description = "商品属性英文名称 2")
private String property2_enname;
@Schema(description = "商品属性英文名称 3")
private String property3_enname;
@Schema(description = "材质")
private String material;
@Schema(description = "印花类型:0满印 1局部印")
private Integer print_type;
@Schema(description = "产地编码")
private String origin_code;
@Schema(description = "产地中文名")
private String origin_name_cn;
@Schema(description = "产地英文名")
private String origin_name_en;
@Schema(description = "币种编码")
private String currency_code;
@Schema(description = "币种名称")
private String currency_name;
@Schema(description = "产品类型:platform/customer")
private String product_type;
@Schema(description = "工厂ID")
private Integer factory_id;
@Schema(description = "工厂编码")
private String factory_code;
@Schema(description = "是否九猫处理")
private Boolean processing;
@Schema(description = "创建时间")
private Date create_time;
@Schema(description = "更新时间")
private Date update_time;
@Schema(description = "排序")
private Integer sort;
@Schema(description = "默认模ID")
private Integer diy_id;
@Schema(description = "默认模SKU")
private String diy_sku;
@Schema(description = "普通图片列表(type=0)")
private List<CustomProductImageSnakeVO> imageList;
@Schema(description = "商品描述")
private ProductRemarkVO productRemark;
@Schema(description = "商品中文描述")
private ProductRemarkVO productCnRemark;
@Schema(description = "工厂价格关联列表")
private List<CustomProductFactoryPriceRelSnakeVO> factoryPriceList;
@Schema(description = "尺码图片列表(type=1)")
private List<CustomProductImageSnakeVO> sizeList;
@Schema(description = "DIY 用户 ID 列表")
private List<Integer> diyUserIds;
@Schema(description = "工艺 ID 列表")
private List<String> craftIds;
@Schema(description = "工厂 ID 列表")
private List<Integer> factoryIds;
@Schema(description = "仓库 ID 列表")
private List<Integer> warehouseIds;
@Schema(description = "英文备注内容")
private String remark;
@Schema(description = "中文备注内容")
private String cnRemark;
@EqualsAndHashCode(callSuper = true)
@Schema(description = "商品分页详情")
public class CustomProductInfoPageSnakeVO extends BasicCustomProductInfoSnakeModel implements Serializable {
@Schema(description = "标记绑定的 DIY 模板是否已上架")
private Boolean diyShelfStatus;
......
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:57:03
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductInfoPropertyPageVo")
public class CustomProductInfoPropertyPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* custom_product_info表id
*/
@Schema(description = "custom_product_info表id")
private Integer infoId;
/**
* 属性类ID
*/
@Schema(description = "属性类ID")
private Integer propertyId;
/**
* 属性值ID
*/
@Schema(description = "属性值ID")
private Integer valueId;
/**
* 是否为SKU属性
*/
@Schema(description = "是否为SKU属性")
private Boolean skuProperty;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
import java.util.List;
/**
......@@ -25,143 +19,9 @@ import java.util.List;
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "商品完整详情")
public class CustomProductInfoSnakeVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主键 ID")
private Integer id;
@Schema(description = "SKU")
private String sku;
@Schema(description = "货号")
private String product_no;
@Schema(description = "title")
private String title;
@Schema(description = "商品名称")
private String name;
@Schema(description = "图片集")
private List<String> colorImageList;
@Schema(description = "图片集")
private String color_images;
@Schema(description = "商品主图")
private String img_url;
@Schema(description = "商品类别ID")
private Integer category_id;
@Schema(description = "重量(kg)")
private BigDecimal weight;
@Schema(description = "最小采购量")
private Integer purchasing_min;
@Schema(description = "工厂价(¥)")
private BigDecimal factory_price;
@Schema(description = "销售价(¥)")
private BigDecimal sales_price;
@Schema(description = "销售价最高价(¥)")
private BigDecimal sales_price_max;
@Schema(description = "状态:1待上架 10已上架 20已下架 30待下架 40已作废")
private Integer status;
@Schema(description = "商品属性分类ID 1")
private Integer property1_cate_id;
@Schema(description = "商品属性分类ID 2")
private Integer property2_cate_id;
@Schema(description = "商品属性分类ID 3")
private Integer property3_cate_id;
@Schema(description = "商品属性英文名称 1")
private String property1_enname;
@Schema(description = "商品属性英文名称 2")
private String property2_enname;
@Schema(description = "商品属性英文名称 3")
private String property3_enname;
@Schema(description = "材质")
private String material;
@Schema(description = "印花类型:0满印 1局部印")
private Integer print_type;
@Schema(description = "产地编码")
private String origin_code;
@Schema(description = "产地中文名")
private String origin_name_cn;
@Schema(description = "产地英文名")
private String origin_name_en;
@Schema(description = "币种编码")
private String currency_code;
@Schema(description = "币种名称")
private String currency_name;
@Schema(description = "产品类型:platform/customer")
private String product_type;
@Schema(description = "工厂ID")
private Integer factory_id;
@Schema(description = "工厂编码")
private String factory_code;
@Schema(description = "是否九猫处理")
private Boolean processing;
@Schema(description = "创建时间")
private Date create_time;
@Schema(description = "更新时间")
private Date update_time;
@Schema(description = "排序")
private Integer sort;
@Schema(description = "默认模ID")
private Integer diy_id;
@Schema(description = "默认模SKU")
private String diy_sku;
@Schema(description = "普通图片列表(type=0)")
private List<CustomProductImageSnakeVO> imageList;
@Schema(description = "商品描述")
private ProductRemarkVO productRemark;
@Schema(description = "商品中文描述")
private ProductRemarkVO productCnRemark;
@Schema(description = "工厂价格关联列表")
private List<CustomProductFactoryPriceRelSnakeVO> factoryPriceList;
@Schema(description = "尺码图片列表(type=1)")
private List<CustomProductImageSnakeVO> sizeList;
@Schema(description = "DIY 用户 ID 列表")
private List<Integer> diyUserIds;
@Schema(description = "工艺 ID 列表")
private List<String> craftIds;
public class CustomProductInfoSnakeVO extends BasicCustomProductInfoSnakeModel implements Serializable {
@Schema(description = "SKU 子项列表")
private List<CustomProductItemSnakeVO> productList;
......@@ -175,32 +35,6 @@ public class CustomProductInfoSnakeVO implements Serializable {
@Schema(description = "普通属性列表")
private List<CustomProductInfoSkuPropertiesVO> normalProperties;
@Schema(description = "工厂 ID 列表")
private List<Integer> factoryIds;
@Schema(description = "仓库 ID 列表")
private List<Integer> warehouseIds;
@Schema(description = "英文备注内容")
private String remark;
@Schema(description = "中文备注内容")
private String cnRemark;
@Schema(description = "标记绑定的 DIY 模板是否已上架")
private Boolean diyShelfStatus;
@Schema(description = "工厂价格区间关联列表")
@Schema(description = "工厂价格区间关联列表(对齐 TS factoryPriceIntervalList)")
private List<FactoryPriceIntervalRelSnakeVO> factoryPriceIntervalList;
@Schema(description = "标记绑定的 DIY 模板是否已上架")
private List<CraftCenterSnakeVO> craftList;
@Schema(description = "标记绑定的 DIY 模板是否已上架")
private List<CustomWarehouseInfoSnakeVO> warehouseList;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:57:04
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductItemPageVo")
public class CustomProductItemPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Integer id;
/**
* 商品ID
*/
@Schema(description = "商品ID")
private Integer productId;
/**
* sku
*/
@Schema(description = "sku")
private String sku;
/**
* sku商品名称
*/
@Schema(description = "sku商品名称")
private String skuName;
/**
* 封面图
*/
@Schema(description = "封面图")
private String image;
/**
* 图片集
*/
@Schema(description = "图片集")
private String imageAry;
/**
* 属性分类ID1
*/
@Schema(description = "属性分类ID1")
private Integer propertyCateId1;
/**
* 属性分类ID2
*/
@Schema(description = "属性分类ID2")
private Integer propertyCateId2;
/**
* 属性分类ID3
*/
@Schema(description = "属性分类ID3")
private Integer propertyCateId3;
/**
*
*/
@Schema(description = "")
private Integer property1Id;
/**
*
*/
@Schema(description = "")
private Integer property2Id;
/**
*
*/
@Schema(description = "")
private Integer property3Id;
/**
* 属性编码1
*/
@Schema(description = "属性编码1")
private String propertyCode1;
/**
* 属性编码2
*/
@Schema(description = "属性编码2")
private String propertyCode2;
/**
*
*/
@Schema(description = "")
private String propertyCode3;
/**
* 属性名称1
*/
@Schema(description = "属性名称1")
private String optionEnname1;
/**
* 属性名称2
*/
@Schema(description = "属性名称2")
private String optionEnname2;
/**
*
*/
@Schema(description = "")
private String optionEnname3;
/**
*
*/
@Schema(description = "")
private String customValue1;
/**
*
*/
@Schema(description = "")
private String customValue2;
/**
*
*/
@Schema(description = "")
private String customValue3;
/**
* 工厂价
*/
@Schema(description = "工厂价")
private BigDecimal factoryPrice;
/**
* 销售价
*/
@Schema(description = "销售价")
private BigDecimal salesPrice;
/**
* sku克重
*/
@Schema(description = "sku克重")
private BigDecimal skuWeight;
/**
* 印花类型 0满印 1局部印
*/
@Schema(description = "印花类型 0满印 1局部印")
private Integer printType;
/**
* 排序
*/
@Schema(description = "排序")
private Integer sort;
/**
* 货号
*/
@Schema(description = "货号")
private String productNo;
/**
* 1正常码 2大码
*/
@Schema(description = "1正常码 2大码")
private Integer sizeType;
/**
* 创建时间
*/
@Schema(description = "创建时间")
private Date createTime;
/**
* 更新时间
*/
@Schema(description = "更新时间")
private Date updateTime;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 14:47:24
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomWarehouseInfoPageVo")
public class CustomWarehouseInfoPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@Schema(description = "")
private Long id;
/**
* 仓库名称
*/
@Schema(description = "仓库名称")
private String warehouseName;
/**
* 仓库编码
*/
@Schema(description = "仓库编码")
private String warehouseCode;
/**
* 统筹物流
*/
@Schema(description = "统筹物流")
private Boolean overallLogistics;
/**
* 超级工厂
*/
@Schema(description = "超级工厂")
private Integer superFactory;
/**
* 系统物流
*/
@Schema(description = "系统物流")
private Boolean systemLogistics;
/**
* 统筹物流覆盖范围
*/
@Schema(description = "统筹物流覆盖范围")
private String overallLogisticsScope;
/**
* 联系人姓名
*/
@Schema(description = "联系人姓名")
private String contactName;
/**
* 联系人电话
*/
@Schema(description = "联系人电话")
private String contactPhone;
/**
* 联系人邮箱
*/
@Schema(description = "联系人邮箱")
private String contactEmail;
/**
* 国家代码
*/
@Schema(description = "国家代码")
private String countryCode;
/**
* 国家名称
*/
@Schema(description = "国家名称")
private String countryName;
/**
* 州省
*/
@Schema(description = "州省")
private String province;
/**
* 州省 code
*/
@Schema(description = "州省 code")
private String provinceCode;
/**
* 州省简称
*/
@Schema(description = "州省简称")
private String provinceAbb;
/**
* 城市
*/
@Schema(description = "城市")
private String city;
/**
* 城市编码
*/
@Schema(description = "城市编码")
private String cityCode;
/**
* 区县
*/
@Schema(description = "区县")
private String district;
/**
* 街道
*/
@Schema(description = "街道")
private String street;
/**
* 邮编
*/
@Schema(description = "邮编")
private String postcode;
/**
* 公司名称
*/
@Schema(description = "公司名称")
private String companyName;
/**
* 社会信用代码
*/
@Schema(description = "社会信用代码")
private String socialCreditCode;
/**
* 备注
*/
@Schema(description = "备注")
private String remarks;
/**
*
*/
@Schema(description = "")
private Date updateTime;
/**
*
*/
@Schema(description = "")
private Date createTime;
/**
* 1已上线,10待上线,20已下线,30待下线
*/
@Schema(description = "1已上线,10待上线,20已下线,30待下线")
private Integer status;
/**
* 联系人姓名(中文)
*/
@Schema(description = "联系人姓名(中文)")
private String contactNameCn;
/**
* 国家名称(中文)
*/
@Schema(description = "国家名称(中文)")
private String countryNameCn;
/**
* 洲省(中文)
*/
@Schema(description = "洲省(中文)")
private String provinceCn;
/**
* 城市(中文)
*/
@Schema(description = "城市(中文)")
private String cityCn;
/**
* 区县(中文)
*/
@Schema(description = "区县(中文)")
private String districtCn;
/**
* 街道(中文)
*/
@Schema(description = "街道(中文)")
private String streetCn;
/**
* 是否为正式仓库
*/
@Schema(description = "是否为正式仓库")
private Boolean formal;
/**
* 币种
*/
@Schema(description = "币种")
private String settlementCurrency;
/**
* 公司名称(中文)
*/
@Schema(description = "公司名称(中文)")
private String companyNameCn;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* PageModel
*
* @author Lizh
* @date 2026-06-03 11:57:07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "LogCustomProductPageVo")
public class LogCustomProductPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Schema(description = "主键")
private Long id;
/**
* 商品id(custom_product_info表id)
*/
@Schema(description = "商品id(custom_product_info表id)")
private Integer productId;
/**
* 操作人id
*/
@Schema(description = "操作人id")
private Integer employeeId;
/**
* 操作人账号
*/
@Schema(description = "操作人账号")
private String employeeAccount;
/**
* 操作描述
*/
@Schema(description = "操作描述")
private String description;
/**
* 创建时间
*/
@Schema(description = "创建时间")
private Date createTime;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;
import java.io.Serial;
/**
* 产品-工厂关联 分页 VO
*
* @author Lizh
* @date 2026-06-06
*/
@EqualsAndHashCode(callSuper = true)
@Data
@Schema(description = "产品-工厂关联分页VO")
public class ProductFactoryRelPageVO extends PageRequest {
@Serial
private static final long serialVersionUID = 1L;
}
package com.jomalls.custom.app.vo;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.io.Serial;
import java.io.Serializable;
/**
* 产品-工厂关联 VO
*
* @author Lizh
* @date 2026-06-06
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "产品-工厂关联VO")
public class ProductFactoryRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
@Schema(description = "主键")
private Integer id;
@Schema(description = "产品 ID")
private Integer productId;
@Schema(description = "工厂 ID")
private Integer factoryId;
}
......@@ -19,7 +19,7 @@ import java.io.Serializable;
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "商品描述信息")
public class ProductRemarkVO implements Serializable {
public class ProductRemarkSnakeVO implements Serializable {
/**
*
*/
......
package com.jomalls.custom.app.vo;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
/**
* 菜单权限表
*/
@Getter
@Setter
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SysMenuVo implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 菜单ID
*/
@Schema(description = "菜单ID")
private Long menuId;
/**
* 菜单名称
*/
@Schema(description = "菜单名称")
private String menuName;
/**
* 父菜单ID
*/
@Schema(description = "父菜单ID")
private Long parentId;
/**
* 显示顺序
*/
@Schema(description = "显示顺序")
private Integer orderNum;
/**
* 路由地址
*/
@Schema(description = "路由地址")
private String path;
/**
* 组件路径
*/
@Schema(description = "组件路径")
private String component;
/**
* 路由参数
*/
@Schema(description = "路由参数")
private String query;
/**
* 路由名称
*/
@Schema(description = "路由名称")
private String routeName;
/**
* 是否为外链(0是 1否)
*/
@Schema(description = "是否为外链(0是 1否)")
private Integer isFrame;
/**
* 是否缓存(0缓存 1不缓存)
*/
@Schema(description = "是否缓存(0缓存 1不缓存)")
private Integer isCache;
/**
* 菜单类型(M目录 C菜单 F按钮)
*/
@Schema(description = "菜单类型(M目录 C菜单 F按钮)")
private String menuType;
/**
* 菜单状态(0显示 1隐藏)
*/
@Schema(description = "菜单状态(0显示 1隐藏)")
private String visible;
/**
* 菜单状态
*/
@Schema(description = "菜单状态")
private String status;
/**
* 权限标识
*/
@Schema(description = "权限标识")
private String perms;
/**
* 菜单图标
*/
@Schema(description = "菜单图标")
private String icon;
/**
* 创建人
*/
@Schema(description = "创建人")
private String createBy;
/**
* 创建时间
*/
@Schema(description = "创建时间")
private String createTime;
/**
* 更新人
*/
@Schema(description = "更新人")
private String updateBy;
/**
* 更新时间
*/
@Schema(description = "更新时间")
private String updateTime;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
/**
* 子菜单
*/
@Schema(description = "子菜单")
private List<SysMenuVo> children = new ArrayList<>();
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 角色和部门关联表 PageModel
*
* @author Lizh
* @date 2026-06-01 12:30:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "SysRoleDeptPageVo")
public class SysRoleDeptPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@Schema(description = "角色ID")
private Long roleId;
/**
* 部门ID
*/
@Schema(description = "部门ID")
private Long deptId;
}
package com.jomalls.custom.app.vo;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* 角色和部门关联表 Model
*
* @author Lizh
* @date 2026-06-01 12:30:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "角色和部门关联表VO")
public class SysRoleDeptVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@Schema(description = "角色ID")
private Long roleId;
/**
* 部门ID
*/
@Schema(description = "部门ID")
private Long deptId;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
/**
* 角色和菜单关联表 PageModel
*
* @author Lizh
* @date 2026-06-01 12:29:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "SysRoleMenuPageVo")
public class SysRoleMenuPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@Schema(description = "角色ID")
private Long roleId;
/**
* 菜单ID
*/
@Schema(description = "菜单ID")
private Long menuId;
}
package com.jomalls.custom.app.vo;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* 角色和菜单关联表 Model
*
* @author Lizh
* @date 2026-06-01 12:29:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "角色和菜单关联表VO")
public class SysRoleMenuVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@Schema(description = "角色ID")
private Long roleId;
/**
* 菜单ID
*/
@Schema(description = "菜单ID")
private Long menuId;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.Date;
/**
* 角色信息表 PageModel
*
* @author Lizh
* @date 2026-06-01 12:29:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "SysRolePageVo")
public class SysRolePageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 角色ID
*/
@Schema(description = "角色ID")
private Long roleId;
/**
* 角色名称
*/
@Schema(description = "角色名称")
private String roleName;
/**
* 角色权限字符串
*/
@Schema(description = "角色权限字符串")
private String roleKey;
/**
* 显示顺序
*/
@Schema(description = "显示顺序")
private Integer roleSort;
/**
* 数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)
*/
@Schema(description = "数据范围(1:全部数据权限 2:自定数据权限 3:本部门数据权限 4:本部门及以下数据权限)")
private String dataScope;
/**
* 菜单树选择项是否关联显示
*/
@Schema(description = "菜单树选择项是否关联显示")
private Integer menuCheckStrictly;
/**
* 部门树选择项是否关联显示
*/
@Schema(description = "部门树选择项是否关联显示")
private Integer deptCheckStrictly;
/**
* 角色状态(0正常 1停用)
*/
@Schema(description = "角色状态(0正常 1停用)")
private String status;
/**
* 删除标志(0代表存在 2代表删除)
*/
@Schema(description = "删除标志(0代表存在 2代表删除)")
private String delFlag;
/**
* 创建者
*/
@Schema(description = "创建者")
private String createBy;
/**
* 创建时间
*/
@Schema(description = "创建时间")
private Date createTime;
/**
* 更新者
*/
@Schema(description = "更新者")
private String updateBy;
/**
* 更新时间
*/
@Schema(description = "更新时间")
private Date updateTime;
/**
* 备注
*/
@Schema(description = "备注")
private String remark;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment