Commit 32473551 by HuAnYing
parents b77959fa b6f07ac1
......@@ -13,4 +13,5 @@
.trae/
.vscode/
CLAUDE.md
docs
......@@ -3,9 +3,17 @@ package com.jomalls.custom.app.annotation;
import java.lang.annotation.*;
/**
* 防重复提交切面
* 基于Redis SET NX EX实现,在指定时间间隔(毫秒)内同一用户对同一接口的相同参数请求只允许执行一次
* 使用方法:
* 在需要防止重复提交的方法上添加@RepeatSubmit注解,指定间隔时间(毫秒)和提示消息
* 示例:
* @RepeatSubmit(interval = 5000, message = "请勿重复提交")
* @PostMapping("/save")
* public R<Void> save(@RequestBody XxxVO vo) { ... }
*
* @Author: Lizh
* @Date: 2026/6/2 10:58
* @Description: 需要验证重复提交的注解
* @Version: 1.0
*/
@Inherited
......
......@@ -9,6 +9,24 @@ import java.lang.annotation.Target;
/**
* 权限控制注解
* 用于标注需要权限校验的 Controller 方法
* 新老用法对照
* ┌─────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
* ├ custom-back │ custom-server(迁移后) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasPermi('x')") │ @RequiresPermissions("x") │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasAnyPermi('a,b')") │ @RequiresPermissions(value="a,b", mode=ANY) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasRole('admin')") │ @RequiresRoles("admin") │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┤
* │ @PreAuthorize("@ss.hasAnyRoles('a,b')") │ @RequiresRoles(value="a,b", mode=ANY) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┤
* │ 权限+角色 AND 组合 │ @RequiresPermissions("x") + @RequiresRoles("admin") 同时使用 │
* └─────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴
*
* @author Lizh
* @version 0.01
* @date 2026-06-03
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
......
package com.jomalls.custom.app.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
/**
* 角色校验注解 — 等价于 @PreAuthorize("@ss.hasRole('xxx')") / @PreAuthorize("@ss.hasAnyRoles('xxx')")
* 用于标注需要角色校验的 Controller 方法
* 新老用法对照
* ┌─────────────────────────────────────────┬──────────────────────────────────────────────────────────────┐
* ├ custom-back │ custom-server(迁移后) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasPermi('x')") │ @RequiresPermissions("x") │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasAnyPermi('a,b')") │ @RequiresPermissions(value="a,b", mode=ANY) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┼
* │ @PreAuthorize("@ss.hasRole('admin')") │ @RequiresRoles("admin") │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┤
* │ @PreAuthorize("@ss.hasAnyRoles('a,b')") │ @RequiresRoles(value="a,b", mode=ANY) │
* ├─────────────────────────────────────────┼──────────────────────────────────────────────────────────────┤
* │ 权限+角色 AND 组合 │ @RequiresPermissions("x") + @RequiresRoles("admin") 同时使用 │
* └─────────────────────────────────────────┴──────────────────────────────────────────────────────────────┴
*
* @author Lizh
* @version 0.01
* @date 2026-06-03
*/
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface RequiresRoles {
/**
* 角色标识,支持多个角色(逗号分隔)
* 例如: "admin" 或 "admin,system:dept:manager"
*/
String value();
/**
* 角色校验模式
* ALL - 必须拥有所有角色
* ANY - 拥有任意一个角色即可
*/
RequiresPermissions.RequireMode mode() default RequiresPermissions.RequireMode.ANY;
/**
* 角色校验失败时的错误信息
*/
String message() default "无访问权限,角色不匹配";
}
package com.jomalls.custom.app.aspect;
import com.jomalls.custom.app.annotation.RequiresPermissions;
import com.jomalls.custom.app.annotation.RequiresRoles;
import com.jomalls.custom.app.enums.CodeEnum;
import com.jomalls.custom.app.exception.ServiceException;
import com.jomalls.custom.app.service.PermissionService;
......@@ -15,7 +16,11 @@ import org.springframework.stereotype.Component;
import java.lang.reflect.Method;
/**
* 权限校验切面
* 操作权限校验切面
*
* @author Lizh
* @version 0.01
* @date 2026-05-29 10:43:28
*/
@Slf4j
@Aspect
......@@ -31,6 +36,15 @@ public class PermissionAspect {
}
/**
* 角色校验切点 — 拦截 @RequiresRoles 注解
* 等价于 @PreAuthorize("@ss.hasRole('xxx')") 和 @PreAuthorize("@ss.hasAnyRoles('xxx')")
*/
@Before("@annotation(com.jomalls.custom.app.annotation.RequiresRoles)")
public void doBeforeRoles(JoinPoint point) throws Throwable {
checkRoles(point);
}
/**
* 权限校验
*
* @param joinPoint 切点
......@@ -67,4 +81,44 @@ public class PermissionAspect {
throw new ServiceException(message, CodeEnum.FORBIDDEN.getCode());
}
}
/**
* 角色校验
*
* @param joinPoint 切点
*/
private void checkRoles(JoinPoint joinPoint) {
MethodSignature signature = (MethodSignature) joinPoint.getSignature();
Method method = signature.getMethod();
RequiresRoles requiresRoles = method.getAnnotation(RequiresRoles.class);
if (requiresRoles == null) {
return;
}
String roles = requiresRoles.value();
RequiresPermissions.RequireMode mode = requiresRoles.mode();
String message = requiresRoles.message();
boolean hasRole;
if (mode == RequiresPermissions.RequireMode.ALL) {
// 必须拥有所有角色
String[] roleArray = roles.split(",");
hasRole = true;
for (String r : roleArray) {
if (!permissionService.hasRole(r.trim())) {
hasRole = false;
break;
}
}
} else {
// 拥有任意一个角色即可(默认)
hasRole = permissionService.hasAnyRoles(roles);
}
if (!hasRole) {
log.warn("用户无匹配角色,要求角色: {},校验模式: {},方法: {}", roles, mode, method.getName());
throw new ServiceException(message, CodeEnum.FORBIDDEN.getCode());
}
}
}
......@@ -21,14 +21,10 @@ import java.util.concurrent.TimeUnit;
/**
* 防重复提交切面
* 基于Redis SET NX EX实现,在指定时间间隔(毫秒)内同一用户对同一接口的相同参数请求只允许执行一次
* 使用方法:
* 在需要防止重复提交的方法上添加@RepeatSubmit注解,指定间隔时间(毫秒)和提示消息
* 示例:
* @RepeatSubmit(interval = 5000, message = "请勿重复提交")
* @PostMapping("/save")
* public R<Void> save(@RequestBody XxxVO vo) { ... }
*
* @author Lizh
* @version 0.01
* @date 2026-05-29 10:43:28
*/
@Slf4j
@Aspect
......
package com.jomalls.custom.app.exception;
import lombok.Getter;
import java.io.Serial;
/**
* @Author: Lizh
* @Date: 2026/5/28 10:27
* @Description: 未登录或token无效异常
* @Version: 1.0
*/
@Getter
public class InvalidTokenException extends RuntimeException {
@Serial
private static final long serialVersionUID = 1L;
private Integer code = 401;
public InvalidTokenException() {
super("未登录或登录已过期");
}
public InvalidTokenException(String message) {
super(message);
}
public InvalidTokenException(Integer code, String message) {
super(message);
this.code = code;
}
}
\ No newline at end of file
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.CustomWarehouseInfoVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:24
*/
public interface CustomWarehouseInfoService {
/**
* 列表查询接口
*
* @param customWarehouseInfoVO 条件model
* @return list集合
*/
List<CustomWarehouseInfoVO> list(CustomWarehouseInfoVO customWarehouseInfoVO);
/**
* 根据条件查询分页列表接口
*
* @param customWarehouseInfoPageVO 分页入参model
* @return 分页对象
*/
IPage<CustomWarehouseInfoVO> pageList(CustomWarehouseInfoPageVO customWarehouseInfoPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
CustomWarehouseInfoVO info(Long id);
/**
* 保存对象
*
* @param customWarehouseInfoVO 保存对象
*/
void save(CustomWarehouseInfoVO customWarehouseInfoVO);
/**
* 根据id修改对象
*
* @param customWarehouseInfoVO 修改对象
*/
void updateById(CustomWarehouseInfoVO customWarehouseInfoVO);
/**
* 根据主键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.DbDiyVO;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:23
*/
public interface DbDiyService {
/**
* 列表查询接口
*
* @param dbDiyVO 条件model
* @return list集合
*/
List<DbDiyVO> list(DbDiyVO dbDiyVO);
/**
* 根据条件查询分页列表接口
*
* @param dbDiyPageVO 分页入参model
* @return 分页对象
*/
IPage<DbDiyVO> pageList(DbDiyPageVO dbDiyPageVO);
/**
* 根据id查询详情
*
* @param id 主键
* @return 实体model
*/
DbDiyVO info(Integer id);
/**
* 保存对象
*
* @param dbDiyVO 保存对象
*/
void save(DbDiyVO dbDiyVO);
/**
* 根据id修改对象
*
* @param dbDiyVO 修改对象
*/
void updateById(DbDiyVO dbDiyVO);
/**
* 根据主键ID进行删除
*
* @param id 主键
*/
void deleteById(Integer 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.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.CustomWarehouseInfoVO;
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<CustomWarehouseInfoVO> list(CustomWarehouseInfoVO customWarehouseInfoVO) {
QueryWrapper<CustomWarehouseInfoEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<CustomWarehouseInfoEntity> list = customWarehouseInfoDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, CustomWarehouseInfoVO.class)).collect(Collectors.toList());
}
@Override
public IPage<CustomWarehouseInfoVO> 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, CustomWarehouseInfoVO.class));
}
@Override
public CustomWarehouseInfoVO info(Long id) {
CustomAsserts.nonNull(id, "主键id不能为空");
CustomWarehouseInfoEntity customWarehouseInfo = customWarehouseInfoDomainService.getById(id);
return BeanMapper.mapper().convert(customWarehouseInfo, CustomWarehouseInfoVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(CustomWarehouseInfoVO customWarehouseInfoVO) {
CustomAsserts.nonNull(customWarehouseInfoVO, "实体对象不能为空");
CustomWarehouseInfoEntity customWarehouseInfoEntity = BeanMapper.mapper().convert(customWarehouseInfoVO, 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(CustomWarehouseInfoVO customWarehouseInfoVO) {
CustomAsserts.nonNull(customWarehouseInfoVO, "实体对象不能为空");
CustomWarehouseInfoEntity customWarehouseInfo = BeanMapper.mapper().convert(customWarehouseInfoVO, 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.DbDiyVO;
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<DbDiyVO> list(DbDiyVO dbDiyVO) {
QueryWrapper<DbDiyEntity> queryWrapper = new QueryWrapper<>();
// TODO 根据业务条件组装入参
List<DbDiyEntity> list = dbDiyDomainService.list(queryWrapper);
return list.stream().map(e -> BeanMapper.mapper().convert(e, DbDiyVO.class)).collect(Collectors.toList());
}
@Override
public IPage<DbDiyVO> 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, DbDiyVO.class));
}
@Override
public DbDiyVO info(Integer id) {
CustomAsserts.nonNull(id, "主键id不能为空");
DbDiyEntity dbDiy = dbDiyDomainService.getById(id);
return BeanMapper.mapper().convert(dbDiy, DbDiyVO.class);
}
@Transactional(rollbackFor = Exception.class)
@Override
public void save(DbDiyVO dbDiyVO) {
CustomAsserts.nonNull(dbDiyVO, "实体对象不能为空");
DbDiyEntity dbDiyEntity = BeanMapper.mapper().convert(dbDiyVO, 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(DbDiyVO dbDiyVO) {
CustomAsserts.nonNull(dbDiyVO, "实体对象不能为空");
DbDiyEntity dbDiy = BeanMapper.mapper().convert(dbDiyVO, 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);
}
}
......@@ -11,7 +11,7 @@ import java.io.Serializable;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:15
* @date 2026-06-03 11:56:55
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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 io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:15
* @date 2026-06-03 11:56:55
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductBlacklistVO")
@Schema(description = "VO")
public class CustomProductBlacklistVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -12,7 +12,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:56
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:56
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductCnRemarkVO")
@Schema(description = "VO")
public class CustomProductCnRemarkVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -11,7 +11,7 @@ import java.io.Serializable;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:57
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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 io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:57
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductCraftRelVO")
@Schema(description = "VO")
public class CustomProductCraftRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -11,13 +11,13 @@ import java.io.Serializable;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
@EqualsAndHashCode(callSuper = true)
@Schema(description = "CustomProductDiyUserRelPageVo")
public class CustomProductDiyUserRelPageVO extends PageRequest implements Serializable {
@Serial
......
package com.jomalls.custom.app.vo;
import lombok.*;
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 io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:58
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductDiyUserRelVO")
@Schema(description = "VO")
public class CustomProductDiyUserRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -12,7 +12,7 @@ import java.math.BigDecimal;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:59
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:56:59
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductFactoryPriceIntervalRelVO")
@Schema(description = "VO")
public class CustomProductFactoryPriceIntervalRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -13,7 +13,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:00
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:00
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductFactoryPriceRelVO")
@Schema(description = "VO")
public class CustomProductFactoryPriceRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -12,7 +12,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:01
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:01
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductImageVO")
@Schema(description = "VO")
public class CustomProductImageVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -13,7 +13,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:02
*/
@Data
@Builder
......@@ -50,24 +50,6 @@ public class CustomProductInfoPageVO extends PageRequest implements Serializable
private String name;
/**
* 所属客户
*/
@Schema(description = "所属客户")
private String namespace;
/**
* 所属工厂
*/
@Schema(description = "所属工厂")
private Integer affiliatedFactory;
/**
* 第三方SKU
*/
@Schema(description = "第三方SKU")
private String thirdSku;
/**
* 商品主图
*/
@Schema(description = "商品主图")
......@@ -116,12 +98,6 @@ public class CustomProductInfoPageVO extends PageRequest implements Serializable
private Integer status;
/**
* 挂起前的状态
*/
@Schema(description = "挂起前的状态")
private Integer preSuspendStatus;
/**
*
*/
@Schema(description = "")
......@@ -206,15 +182,15 @@ public class CustomProductInfoPageVO extends PageRequest implements Serializable
private String currencyCode;
/**
* 币种
* 币种名称
*/
@Schema(description = "币种")
@Schema(description = "币种名称")
private String currencyName;
/**
* 平台直营 客户自营
* 产品类型(platform-平台直营 customer-客户自营)
*/
@Schema(description = "平台直营 客户自营")
@Schema(description = "产品类型(platform-平台直营 customer-客户自营)")
private String productType;
/**
......
......@@ -11,7 +11,7 @@ import java.io.Serializable;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:03
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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 io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:03
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductInfoPropertyVO")
@Schema(description = "VO")
public class CustomProductInfoPropertyVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
package com.jomalls.custom.app.vo;
import lombok.*;
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;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:16
* @date 2026-06-03 11:57:02
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductInfoVO")
@Schema(description = "VO")
public class CustomProductInfoVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......@@ -49,24 +51,6 @@ public class CustomProductInfoVO implements Serializable {
private String name;
/**
* 所属客户
*/
@Schema(description = "所属客户")
private String namespace;
/**
* 所属工厂
*/
@Schema(description = "所属工厂")
private Integer affiliatedFactory;
/**
* 第三方SKU
*/
@Schema(description = "第三方SKU")
private String thirdSku;
/**
* 商品主图
*/
@Schema(description = "商品主图")
......@@ -115,12 +99,6 @@ public class CustomProductInfoVO implements Serializable {
private Integer status;
/**
* 挂起前的状态
*/
@Schema(description = "挂起前的状态")
private Integer preSuspendStatus;
/**
*
*/
@Schema(description = "")
......@@ -205,15 +183,15 @@ public class CustomProductInfoVO implements Serializable {
private String currencyCode;
/**
* 币种
* 币种名称
*/
@Schema(description = "币种")
@Schema(description = "币种名称")
private String currencyName;
/**
* 平台直营 客户自营
* 产品类型(platform-平台直营 customer-客户自营)
*/
@Schema(description = "平台直营 客户自营")
@Schema(description = "产品类型(platform-平台直营 customer-客户自营)")
private String productType;
/**
......
......@@ -13,7 +13,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:04
*/
@Data
@Builder
......@@ -170,12 +170,6 @@ public class CustomProductItemPageVO extends PageRequest implements Serializable
private BigDecimal skuWeight;
/**
* 注册数量
*/
@Schema(description = "注册数量")
private Integer regCount;
/**
* 印花类型 0满印 1局部印
*/
@Schema(description = "印花类型 0满印 1局部印")
......
package com.jomalls.custom.app.vo;
import lombok.*;
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;
import java.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:04
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductItemVO")
@Schema(description = "VO")
public class CustomProductItemVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......@@ -169,12 +171,6 @@ public class CustomProductItemVO implements Serializable {
private BigDecimal skuWeight;
/**
* 注册数量
*/
@Schema(description = "注册数量")
private Integer regCount;
/**
* 印花类型 0满印 1局部印
*/
@Schema(description = "印花类型 0满印 1局部印")
......
......@@ -12,7 +12,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:05
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:05
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductRemarkVO")
@Schema(description = "VO")
public class CustomProductRemarkVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
......@@ -11,7 +11,7 @@ import java.io.Serializable;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:06
*/
@Data
@Builder
......
package com.jomalls.custom.app.vo;
import lombok.*;
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 io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:06
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "CustomProductWarehouseRelVO")
@Schema(description = "VO")
public class CustomProductWarehouseRelVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......
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;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 14:47:24
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class CustomWarehouseInfoVO 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.core.util.Json;
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 14:47:23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = true)
@Schema(description = "DbDiyPageVo")
public class DbDiyPageVO extends PageRequest implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Schema(description = "主键")
private Integer id;
/**
* 唯一标识
*/
@Schema(description = "唯一标识")
private String sku;
/**
* 标题
*/
@Schema(description = "标题")
private String title;
/**
* 英文名称
*/
@Schema(description = "英文名称")
private String enName;
/**
* 排序
*/
@Schema(description = "排序")
private Integer idx;
/**
* diy主图
*/
@Schema(description = "diy主图")
private String imgUrl;
/**
* 图片集合,逗号分割
*/
@Schema(description = "图片集合,逗号分割")
private String imgArr;
/**
* 编码
*/
@Schema(description = "编码")
private String bianma;
/**
* 详情内容
*/
@Schema(description = "详情内容")
private String content;
/**
* 1 多片 2 整片
*/
@Schema(description = "1 多片 2 整片")
private Integer leixing;
/**
* 1 svgToJpg 2 svgToSvg 3 svgToTiff 4 svgToPng 4 5 psdToJpg
*/
@Schema(description = "1 svgToJpg 2 svgToSvg 3 svgToTiff 4 svgToPng 4 5 psdToJpg")
private Integer scImgType;
/**
* 是否立即生成尺码 0 不生成 1 立即生成全部尺码
*/
@Schema(description = "是否立即生成尺码 0 不生成 1 立即生成全部尺码")
private Integer chimaNowRender;
/**
* 状态 1 服务器渲染 2 前台渲染
*/
@Schema(description = "状态 1 服务器渲染 2 前台渲染")
private Integer render;
/**
* DbDiy 父级值 可以用于绑定
*/
@Schema(description = "DbDiy 父级值 可以用于绑定")
private Integer parentId;
/**
* 存放的user ids
*/
@Schema(description = "存放的user ids")
private String userIds;
/**
* 不允许查看的用户
*/
@Schema(description = "不允许查看的用户")
private String banUserIds;
/**
* diy分类ID
*/
@Schema(description = "diy分类ID")
private Integer typeId;
/**
* 状态 0 已下架 1 已上架 20 待上架 40 建模完成 50 多变体完善 60 产前测试 70 建模中 75 待确认 80 待分派 85 打板中 90 待审核 9 软删除
*/
@Schema(description = "状态 0 已下架 1 已上架 20 待上架 40 建模完成 50 多变体完善 60 产前测试 70 建模中 75 待确认 80 待分派 85 打板中 90 待审核 9 软删除")
private Integer status;
/**
*
*/
@Schema(description = "")
private Date createDate;
/**
* 默认值 选择的产品
*/
@Schema(description = "默认值 选择的产品")
private Integer defaultDiyId;
/**
* 工厂/供应商id
*/
@Schema(description = "工厂/供应商id")
private Integer factoryId;
/**
* 印花类型 0满印 1局部印
*/
@Schema(description = "印花类型 0满印 1局部印")
private Integer printType;
/**
* 材质
*/
@Schema(description = "材质")
private String material;
/**
* 工艺id
*/
@Schema(description = "工艺id")
private Long craftId;
/**
* 最低价格
*/
@Schema(description = "最低价格")
private BigDecimal minPrice;
/**
* 最高价格
*/
@Schema(description = "最高价格")
private BigDecimal maxPrice;
/**
* 图片是否创建缩略图 1已创建 0未创建(临时字段)
*/
@Schema(description = "图片是否创建缩略图 1已创建 0未创建(临时字段)")
private Boolean pictureStatus;
/**
* 备注信息
*/
@Schema(description = "备注信息")
private String remark;
/**
* 模板归属
*/
@Schema(description = "模板归属")
private String namespace;
/**
* 审核人id
*/
@Schema(description = "审核人id")
private Integer auditId;
/**
* 审核人名称
*/
@Schema(description = "审核人名称")
private String auditName;
/**
* 审核时间
*/
@Schema(description = "审核时间")
private Date auditDate;
/**
* 上架时间
*/
@Schema(description = "上架时间")
private Date shelfDate;
/**
* 关联信息模板ID
*/
@Schema(description = "关联信息模板ID")
private Integer templateId;
/**
* 关联信息模板类别ID
*/
@Schema(description = "关联信息模板类别ID")
private Integer categoryId;
/**
* 分派人ID
*/
@Schema(description = "分派人ID")
private Integer allocationId;
/**
* 分派人名称
*/
@Schema(description = "分派人名称")
private String allocationName;
/**
* 是否加急处理 0否 1是
*/
@Schema(description = "是否加急处理 0否 1是")
private Integer expedited;
/**
* 绑定模型id集合
*/
@Schema(description = "绑定模型id集合")
private String bindDiyIds;
/**
* 是否被绑定
*/
@Schema(description = "是否被绑定")
private Boolean isBind;
/**
* 是否由美国生产 默认为false
*/
@Schema(description = "是否由美国生产 默认为false")
private Boolean usaMade;
/**
* 厂商
*/
@Schema(description = "厂商")
private String manufacturer;
/**
* 款号
*/
@Schema(description = "款号")
private String styleNum;
/**
* 模类型 0公模 1私模
*/
@Schema(description = "模类型 0公模 1私模")
private Integer type;
/**
* 生产终端
*/
@Schema(description = "生产终端")
private String productionClient;
/**
* erp的颜色尺码
*/
@Schema(description = "erp的颜色尺码")
private Json erpSkuProperties;
/**
* 推送需求的人
*/
@Schema(description = "推送需求的人")
private String pushUser;
/**
* 是否新版模
*/
@Schema(description = "是否新版模")
private Boolean newStandard;
/**
* 模备注
*/
@Schema(description = "模备注")
private String diyRemark;
}
package com.jomalls.custom.app.vo;
import com.jomalls.custom.page.PageRequest;
import io.swagger.v3.core.util.Json;
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;
/**
* Model
*
* @author Lizh
* @date 2026-06-03 14:47:23
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "VO")
public class DbDiyVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@Schema(description = "主键")
private Integer id;
/**
* 唯一标识
*/
@Schema(description = "唯一标识")
private String sku;
/**
* 标题
*/
@Schema(description = "标题")
private String title;
/**
* 英文名称
*/
@Schema(description = "英文名称")
private String enName;
/**
* 排序
*/
@Schema(description = "排序")
private Integer idx;
/**
* diy主图
*/
@Schema(description = "diy主图")
private String imgUrl;
/**
* 图片集合,逗号分割
*/
@Schema(description = "图片集合,逗号分割")
private String imgArr;
/**
* 编码
*/
@Schema(description = "编码")
private String bianma;
/**
* 详情内容
*/
@Schema(description = "详情内容")
private String content;
/**
* 1 多片 2 整片
*/
@Schema(description = "1 多片 2 整片")
private Integer leixing;
/**
* 1 svgToJpg 2 svgToSvg 3 svgToTiff 4 svgToPng 4 5 psdToJpg
*/
@Schema(description = "1 svgToJpg 2 svgToSvg 3 svgToTiff 4 svgToPng 4 5 psdToJpg")
private Integer scImgType;
/**
* 是否立即生成尺码 0 不生成 1 立即生成全部尺码
*/
@Schema(description = "是否立即生成尺码 0 不生成 1 立即生成全部尺码")
private Integer chimaNowRender;
/**
* 状态 1 服务器渲染 2 前台渲染
*/
@Schema(description = "状态 1 服务器渲染 2 前台渲染")
private Integer render;
/**
* DbDiy 父级值 可以用于绑定
*/
@Schema(description = "DbDiy 父级值 可以用于绑定")
private Integer parentId;
/**
* 存放的user ids
*/
@Schema(description = "存放的user ids")
private String userIds;
/**
* 不允许查看的用户
*/
@Schema(description = "不允许查看的用户")
private String banUserIds;
/**
* diy分类ID
*/
@Schema(description = "diy分类ID")
private Integer typeId;
/**
* 状态 0 已下架 1 已上架 20 待上架 40 建模完成 50 多变体完善 60 产前测试 70 建模中 75 待确认 80 待分派 85 打板中 90 待审核 9 软删除
*/
@Schema(description = "状态 0 已下架 1 已上架 20 待上架 40 建模完成 50 多变体完善 60 产前测试 70 建模中 75 待确认 80 待分派 85 打板中 90 待审核 9 软删除")
private Integer status;
/**
*
*/
@Schema(description = "")
private Date createDate;
/**
* 默认值 选择的产品
*/
@Schema(description = "默认值 选择的产品")
private Integer defaultDiyId;
/**
* 工厂/供应商id
*/
@Schema(description = "工厂/供应商id")
private Integer factoryId;
/**
* 印花类型 0满印 1局部印
*/
@Schema(description = "印花类型 0满印 1局部印")
private Integer printType;
/**
* 材质
*/
@Schema(description = "材质")
private String material;
/**
* 工艺id
*/
@Schema(description = "工艺id")
private Long craftId;
/**
* 最低价格
*/
@Schema(description = "最低价格")
private BigDecimal minPrice;
/**
* 最高价格
*/
@Schema(description = "最高价格")
private BigDecimal maxPrice;
/**
* 图片是否创建缩略图 1已创建 0未创建(临时字段)
*/
@Schema(description = "图片是否创建缩略图 1已创建 0未创建(临时字段)")
private Boolean pictureStatus;
/**
* 备注信息
*/
@Schema(description = "备注信息")
private String remark;
/**
* 模板归属
*/
@Schema(description = "模板归属")
private String namespace;
/**
* 审核人id
*/
@Schema(description = "审核人id")
private Integer auditId;
/**
* 审核人名称
*/
@Schema(description = "审核人名称")
private String auditName;
/**
* 审核时间
*/
@Schema(description = "审核时间")
private Date auditDate;
/**
* 上架时间
*/
@Schema(description = "上架时间")
private Date shelfDate;
/**
* 关联信息模板ID
*/
@Schema(description = "关联信息模板ID")
private Integer templateId;
/**
* 关联信息模板类别ID
*/
@Schema(description = "关联信息模板类别ID")
private Integer categoryId;
/**
* 分派人ID
*/
@Schema(description = "分派人ID")
private Integer allocationId;
/**
* 分派人名称
*/
@Schema(description = "分派人名称")
private String allocationName;
/**
* 是否加急处理 0否 1是
*/
@Schema(description = "是否加急处理 0否 1是")
private Integer expedited;
/**
* 绑定模型id集合
*/
@Schema(description = "绑定模型id集合")
private String bindDiyIds;
/**
* 是否被绑定
*/
@Schema(description = "是否被绑定")
private Boolean isBind;
/**
* 是否由美国生产 默认为false
*/
@Schema(description = "是否由美国生产 默认为false")
private Boolean usaMade;
/**
* 厂商
*/
@Schema(description = "厂商")
private String manufacturer;
/**
* 款号
*/
@Schema(description = "款号")
private String styleNum;
/**
* 模类型 0公模 1私模
*/
@Schema(description = "模类型 0公模 1私模")
private Integer type;
/**
* 生产终端
*/
@Schema(description = "生产终端")
private String productionClient;
/**
* erp的颜色尺码
*/
@Schema(description = "erp的颜色尺码")
private Json erpSkuProperties;
/**
* 推送需求的人
*/
@Schema(description = "推送需求的人")
private String pushUser;
/**
* 是否新版模
*/
@Schema(description = "是否新版模")
private Boolean newStandard;
/**
* 模备注
*/
@Schema(description = "模备注")
private String diyRemark;
}
......@@ -12,7 +12,7 @@ import java.util.Date;
* PageModel
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:07
*/
@Data
@Builder
......@@ -60,11 +60,5 @@ public class LogCustomProductPageVO extends PageRequest implements Serializable
@Schema(description = "创建时间")
private Date createTime;
/**
* 0 custom 1 factory 2都可以
*/
@Schema(description = "0 custom 1 factory 2都可以")
private Integer dataPermissions;
}
package com.jomalls.custom.app.vo;
import lombok.*;
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.util.Date;
import io.swagger.v3.oas.annotations.media.Schema;
/**
* Model
*
* @author Lizh
* @date 2026-05-29 10:25:17
* @date 2026-06-03 11:57:07
*/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Schema(description = "LogCustomProductVO")
@Schema(description = "VO")
public class LogCustomProductVO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......@@ -59,11 +61,5 @@ public class LogCustomProductVO implements Serializable {
@Schema(description = "创建时间")
private Date createTime;
/**
* 0 custom 1 factory 2都可以
*/
@Schema(description = "0 custom 1 factory 2都可以")
private Integer dataPermissions;
}
......@@ -40,31 +40,33 @@ public class TokenHandle {
public LoginUser getLoginUser(HttpServletRequest request) {
// 获取请求携带的令牌
String token = getToken(request);
if (StringUtils.hasText(token)) {
try {
Claims claims = parseToken(token);
// 解析用户信息
Long userId = claims.get("id", Long.class);
String username = claims.get("account", String.class);
if (username == null) {
username = claims.get("username", String.class);
}
if (userId != null && StringUtils.hasText(username)) {
LoginUser loginUser = new LoginUser(userId, null, username);
loginUser.setToken(token);
loginUser.setExpireTime(claims.getExpiration().getTime());
// 获取token失败, 返回null
if (!StringUtils.hasText(token)) {
return null;
}
try {
Claims claims = parseToken(token);
// 解析用户信息
Long userId = claims.get("id", Long.class);
String username = claims.get("account", String.class);
if (username == null) {
username = claims.get("username", String.class);
}
if (userId != null && StringUtils.hasText(username)) {
LoginUser loginUser = new LoginUser(userId, null, username);
loginUser.setToken(token);
loginUser.setExpireTime(claims.getExpiration().getTime());
// 解析权限信息
Set<String> permissions = parsePermissions(claims);
loginUser.setPermissions(permissions);
// 解析权限信息
Set<String> permissions = parsePermissions(claims);
loginUser.setPermissions(permissions);
return loginUser;
}
} catch (JwtException e) {
log.error("JWT解析异常: {}", e.getMessage());
} catch (Exception e) {
log.error("获取用户信息异常: {}", e.getMessage());
return loginUser;
}
} catch (JwtException e) {
log.error("JWT解析异常: {}", e.getMessage());
} catch (Exception e) {
log.error("获取用户信息异常: {}", e.getMessage());
}
return null;
}
......
......@@ -10,12 +10,11 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:56:55
*/
@Data
@TableName("custom_product_blacklist")
......@@ -24,17 +23,15 @@ public class CustomProductBlacklistEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info的id
*/
@TableField("product_id")
private Integer productId;
/**
* db_diy_user的id
*/
......
......@@ -15,7 +15,7 @@ import java.util.Date;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:56:56
*/
@Data
@TableName("custom_product_cn_remark")
......@@ -28,19 +28,16 @@ public class CustomProductCnRemarkEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info表id
*/
@TableField("product_id")
private Integer productId;
/**
* 内容
*/
@TableField("remark")
private String remark;
/**
* 创建时间
*/
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
......@@ -13,7 +14,7 @@ import java.io.Serializable;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:56:57
*/
@Data
@TableName("custom_product_craft_rel")
......@@ -22,17 +23,15 @@ public class CustomProductCraftRelEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info 的id
*/
@TableField("product_id")
private Integer productId;
/**
* craft_center 的id
*/
......
......@@ -6,15 +6,15 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:56:58
*/
@Data
@TableName("custom_product_diy_user_rel")
......@@ -23,17 +23,15 @@ public class CustomProductDiyUserRelEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info的id
*/
@TableField("product_id")
private Integer productId;
/**
* db_diy_user的id
*/
......
......@@ -6,16 +6,16 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:56:59
*/
@Data
@TableName("custom_product_factory_price_interval_rel")
......@@ -24,11 +24,10 @@ public class CustomProductFactoryPriceIntervalRelEntity implements Serializable
private static final long serialVersionUID = 1L;
/**
* 主键ID
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info 表id
*/
......@@ -39,13 +38,11 @@ public class CustomProductFactoryPriceIntervalRelEntity implements Serializable
*/
@TableField("currency_code")
private String currencyCode;
/**
* (系统成本)最大值
*/
@TableField("price_max")
private BigDecimal priceMax;
/**
* (系统成本)最小值
*/
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
......@@ -15,7 +16,7 @@ import java.util.Date;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:57:00
*/
@Data
@TableName("custom_product_factory_price_rel")
......@@ -24,67 +25,57 @@ public class CustomProductFactoryPriceRelEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info表id
*/
@TableField("product_id")
private Integer productId;
/**
* custom_product_item表id
*/
@TableField("item_id")
private Integer itemId;
/**
* custom_product_item表sku
*/
@TableField("item_sku")
private String itemSku;
/**
* db_diy表id
*/
@TableField("factory_id")
private Integer factoryId;
/**
* 工厂价格
*/
@TableField("factory_price")
private BigDecimal factoryPrice;
/**
* 销售价
*/
@TableField("sales_price")
private BigDecimal salesPrice;
/**
* 工厂币种
*/
@TableField("factory_currency_code")
private String factoryCurrencyCode;
/**
* 售卖币种
*/
@TableField("sales_currency_code")
private String salesCurrencyCode;
/**
* 创建时间
*
*/
@TableField("create_time")
private Date createTime;
/**
* 更新时间
*
*/
@TableField("update_time")
private Date updateTime;
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
......@@ -14,7 +15,7 @@ import java.util.Date;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:57:01
*/
@Data
@TableName("custom_product_image")
......@@ -23,37 +24,32 @@ public class CustomProductImageEntity implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* 商品ID
*/
@TableField("product_id")
private Integer productId;
/**
* 图片地址
*/
@TableField("image_url")
private String imageUrl;
/**
* 排序
*/
@TableField("sort")
private Integer sort;
/**
* 类型 0普通图片 1尺码图
*/
@TableField("type")
private Integer type;
/**
* 创建时间
*
*/
@TableField("create_time")
private Date createTime;
......
......@@ -6,17 +6,17 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:57:02
*/
@Data
@TableName("custom_product_info")
......@@ -29,235 +29,176 @@ public class CustomProductInfoEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* sku
*/
@TableField("sku")
private String sku;
/**
*
*/
@TableField("title")
private String title;
/**
* 商品名称
*/
@TableField("name")
private String name;
/**
* 所属客户
*/
@TableField("namespace")
private String namespace;
/**
* 所属工厂
*/
@TableField("affiliated_factory")
private Integer affiliatedFactory;
/**
* 第三方SKU
*/
@TableField("third_sku")
private String thirdSku;
/**
* 商品主图
*/
@TableField("img_url")
private String imgUrl;
/**
* 商品类别ID
*/
@TableField("category_id")
private Integer categoryId;
/**
* 重量kg
*/
@TableField("weight")
private BigDecimal weight;
/**
* 最小采购量
*/
@TableField("purchasing_min")
private Integer purchasingMin;
/**
* 工厂价(¥)
*/
@TableField("factory_price")
private BigDecimal factoryPrice;
/**
* 销售价(¥)
*/
@TableField("sales_price")
private BigDecimal salesPrice;
/**
* 销售价最大值(¥)
*/
@TableField("sales_price_max")
private BigDecimal salesPriceMax;
/**
* 1待上架 10已上架 20已下架 30待下架 40已作废
*/
@TableField("status")
private Integer status;
/**
* 挂起前的状态
*/
@TableField("pre_suspend_status")
private Integer preSuspendStatus;
/**
*
*/
@TableField("property1_cate_id")
private Integer property1CateId;
/**
*
*/
@TableField("property2_cate_id")
private Integer property2CateId;
/**
*
*/
@TableField("property3_cate_id")
private Integer property3CateId;
/**
*
*/
@TableField("property1_enname")
private String property1Enname;
/**
*
*/
@TableField("property2_enname")
private String property2Enname;
/**
*
*/
@TableField("property3_enname")
private String property3Enname;
/**
* 颜色图
*/
@TableField("color_images")
private String colorImages;
/**
* 材质
*/
@TableField("material")
private String material;
/**
* 印花类型 0满印 1局部印
*/
@TableField("print_type")
private Integer printType;
/**
* 货号
*/
@TableField("product_no")
private String productNo;
/**
* 产地code
*/
@TableField("origin_code")
private String originCode;
/**
* 产地中文名字
*/
@TableField("origin_name_cn")
private String originNameCn;
/**
* 产地英文名字
*/
@TableField("origin_name_en")
private String originNameEn;
/**
* 币种code
*/
@TableField("currency_code")
private String currencyCode;
/**
* 币种
* 币种名称
*/
@TableField("currency_name")
private String currencyName;
/**
* 平台直营 客户自营
* 产品类型(platform-平台直营 customer-客户自营)
*/
@TableField("product_type")
private String productType;
/**
* 工厂id
*/
@TableField("factory_id")
private Integer factoryId;
/**
* 工厂编码
*/
@TableField("factory_code")
private String factoryCode;
/**
* 是否九猫处理
*/
@TableField("processing")
private Boolean processing;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
*
*/
@TableField("update_time")
private Date updateTime;
/**
*
*/
@TableField("sort")
private Integer sort;
/**
* 默认模ID
*/
@TableField("diy_id")
private Integer diyId;
/**
* 默认模SKU
*/
......
......@@ -10,12 +10,11 @@ import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:12
* @date 2026-06-03 11:57:03
*/
@Data
@TableName("custom_product_info_property")
......@@ -28,25 +27,21 @@ public class CustomProductInfoPropertyEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info表id
*/
@TableField("info_id")
private Integer infoId;
/**
* 属性类ID
*/
@TableField("property_id")
private Integer propertyId;
/**
* 属性值ID
*/
@TableField("value_id")
private Integer valueId;
/**
* 是否为SKU属性
*/
......
......@@ -6,17 +6,17 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:13
* @date 2026-06-03 11:57:04
*/
@Data
@TableName("custom_product_item")
......@@ -29,181 +29,146 @@ public class CustomProductItemEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* 商品ID
*/
@TableField("product_id")
private Integer productId;
/**
* sku
*/
@TableField("sku")
private String sku;
/**
* sku商品名称
*/
@TableField("sku_name")
private String skuName;
/**
* 封面图
*/
@TableField("image")
private String image;
/**
* 图片集
*/
@TableField("image_ary")
private String imageAry;
/**
* 属性分类ID1
*/
@TableField("property_cate_id1")
private Integer propertyCateId1;
/**
* 属性分类ID2
*/
@TableField("property_cate_id2")
private Integer propertyCateId2;
/**
* 属性分类ID3
*/
@TableField("property_cate_id3")
private Integer propertyCateId3;
/**
*
*/
@TableField("property1_id")
private Integer property1Id;
/**
*
*/
@TableField("property2_id")
private Integer property2Id;
/**
*
*/
@TableField("property3_id")
private Integer property3Id;
/**
* 属性编码1
*/
@TableField("property_code1")
private String propertyCode1;
/**
* 属性编码2
*/
@TableField("property_code2")
private String propertyCode2;
/**
*
*/
@TableField("property_code3")
private String propertyCode3;
/**
* 属性名称1
*/
@TableField("option_enname1")
private String optionEnname1;
/**
* 属性名称2
*/
@TableField("option_enname2")
private String optionEnname2;
/**
*
*/
@TableField("option_enname3")
private String optionEnname3;
/**
*
*/
@TableField("custom_value1")
private String customValue1;
/**
*
*/
@TableField("custom_value2")
private String customValue2;
/**
*
*/
@TableField("custom_value3")
private String customValue3;
/**
* 工厂价
*/
@TableField("factory_price")
private BigDecimal factoryPrice;
/**
* 销售价
*/
@TableField("sales_price")
private BigDecimal salesPrice;
/**
* sku克重
*/
@TableField("sku_weight")
private BigDecimal skuWeight;
/**
* 注册数量
*/
@TableField("reg_count")
private Integer regCount;
/**
* 印花类型 0满印 1局部印
*/
@TableField("print_type")
private Integer printType;
/**
* 排序
*/
@TableField("sort")
private Integer sort;
/**
* 货号
*/
@TableField("product_no")
private String productNo;
/**
* 1正常码 2大码
*/
@TableField("size_type")
private Integer sizeType;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 更新时间
*/
......
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
......@@ -14,7 +15,7 @@ import java.util.Date;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:13
* @date 2026-06-03 11:57:05
*/
@Data
@TableName("custom_product_remark")
......@@ -27,19 +28,16 @@ public class CustomProductRemarkEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* custom_product_info表id
*/
@TableField("product_id")
private Integer productId;
/**
* 内容
*/
@TableField("remark")
private String remark;
/**
* 创建时间
*/
......
......@@ -6,15 +6,15 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
/**
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:13
* @date 2026-06-03 11:57:06
*/
@Data
@TableName("custom_product_warehouse_rel")
......@@ -27,13 +27,11 @@ public class CustomProductWarehouseRelEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
*
*/
@TableField("product_id")
private Integer productId;
/**
*
*/
......
package com.jomalls.custom.dal.entity;
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 lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
/**
* Entity
*
* @author Lizh
* @date 2026-06-03 14:47:24
*/
@Data
@TableName("custom_warehouse_info")
public class CustomWarehouseInfoEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
*
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Long id;
/**
* 仓库名称
*/
@TableField("warehouse_name")
private String warehouseName;
/**
* 仓库编码
*/
@TableField("warehouse_code")
private String warehouseCode;
/**
* 统筹物流
*/
@TableField("overall_logistics")
private Boolean overallLogistics;
/**
* 超级工厂
*/
@TableField("super_factory")
private Integer superFactory;
/**
* 系统物流
*/
@TableField("system_logistics")
private Boolean systemLogistics;
/**
* 统筹物流覆盖范围
*/
@TableField("overall_logistics_scope")
private String overallLogisticsScope;
/**
* 联系人姓名
*/
@TableField("contact_name")
private String contactName;
/**
* 联系人电话
*/
@TableField("contact_phone")
private String contactPhone;
/**
* 联系人邮箱
*/
@TableField("contact_email")
private String contactEmail;
/**
* 国家代码
*/
@TableField("country_code")
private String countryCode;
/**
* 国家名称
*/
@TableField("country_name")
private String countryName;
/**
* 州省
*/
@TableField("province")
private String province;
/**
* 州省 code
*/
@TableField("province_code")
private String provinceCode;
/**
* 州省简称
*/
@TableField("province_abb")
private String provinceAbb;
/**
* 城市
*/
@TableField("city")
private String city;
/**
* 城市编码
*/
@TableField("city_code")
private String cityCode;
/**
* 区县
*/
@TableField("district")
private String district;
/**
* 街道
*/
@TableField("street")
private String street;
/**
* 邮编
*/
@TableField("postcode")
private String postcode;
/**
* 公司名称
*/
@TableField("company_name")
private String companyName;
/**
* 社会信用代码
*/
@TableField("social_credit_code")
private String socialCreditCode;
/**
* 备注
*/
@TableField("remarks")
private String remarks;
/**
*
*/
@TableField("update_time")
private Date updateTime;
/**
*
*/
@TableField("create_time")
private Date createTime;
/**
* 1已上线,10待上线,20已下线,30待下线
*/
@TableField("status")
private Integer status;
/**
* 联系人姓名(中文)
*/
@TableField("contact_name_cn")
private String contactNameCn;
/**
* 国家名称(中文)
*/
@TableField("country_name_cn")
private String countryNameCn;
/**
* 洲省(中文)
*/
@TableField("province_cn")
private String provinceCn;
/**
* 城市(中文)
*/
@TableField("city_cn")
private String cityCn;
/**
* 区县(中文)
*/
@TableField("district_cn")
private String districtCn;
/**
* 街道(中文)
*/
@TableField("street_cn")
private String streetCn;
/**
* 是否为正式仓库
*/
@TableField("formal")
private Boolean formal;
/**
* 币种
*/
@TableField("settlement_currency")
private String settlementCurrency;
/**
* 公司名称(中文)
*/
@TableField("company_name_cn")
private String companyNameCn;
}
package com.jomalls.custom.dal.entity;
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.core.util.Json;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.util.Date;
/**
* Entity
*
* @author Lizh
* @date 2026-06-03 14:47:23
*/
@Data
@TableName("db_diy")
public class DbDiyEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 主键
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Integer id;
/**
* 唯一标识
*/
@TableField("sku")
private String sku;
/**
* 标题
*/
@TableField("title")
private String title;
/**
* 英文名称
*/
@TableField("en_name")
private String enName;
/**
* 排序
*/
@TableField("idx")
private Integer idx;
/**
* diy主图
*/
@TableField("img_url")
private String imgUrl;
/**
* 图片集合,逗号分割
*/
@TableField("img_arr")
private String imgArr;
/**
* 编码
*/
@TableField("bianma")
private String bianma;
/**
* 详情内容
*/
@TableField("content")
private String content;
/**
* 1 多片 2 整片
*/
@TableField("leixing")
private Integer leixing;
/**
* 1 svgToJpg 2 svgToSvg 3 svgToTiff 4 svgToPng 4 5 psdToJpg
*/
@TableField("sc_img_type")
private Integer scImgType;
/**
* 是否立即生成尺码 0 不生成 1 立即生成全部尺码
*/
@TableField("chima_now_render")
private Integer chimaNowRender;
/**
* 状态 1 服务器渲染 2 前台渲染
*/
@TableField("render")
private Integer render;
/**
* DbDiy 父级值 可以用于绑定
*/
@TableField("parent_id")
private Integer parentId;
/**
* 存放的user ids
*/
@TableField("user_ids")
private String userIds;
/**
* 不允许查看的用户
*/
@TableField("ban_user_ids")
private String banUserIds;
/**
* diy分类ID
*/
@TableField("type_id")
private Integer typeId;
/**
* 状态 0 已下架 1 已上架 20 待上架 40 建模完成 50 多变体完善 60 产前测试 70 建模中 75 待确认 80 待分派 85 打板中 90 待审核 9 软删除
*/
@TableField("status")
private Integer status;
/**
*
*/
@TableField("create_date")
private Date createDate;
/**
* 默认值 选择的产品
*/
@TableField("default_diy_id")
private Integer defaultDiyId;
/**
* 工厂/供应商id
*/
@TableField("factory_id")
private Integer factoryId;
/**
* 印花类型 0满印 1局部印
*/
@TableField("print_type")
private Integer printType;
/**
* 材质
*/
@TableField("material")
private String material;
/**
* 工艺id
*/
@TableField("craft_id")
private Long craftId;
/**
* 最低价格
*/
@TableField("min_price")
private BigDecimal minPrice;
/**
* 最高价格
*/
@TableField("max_price")
private BigDecimal maxPrice;
/**
* 图片是否创建缩略图 1已创建 0未创建(临时字段)
*/
@TableField("picture_status")
private Boolean pictureStatus;
/**
* 备注信息
*/
@TableField("remark")
private String remark;
/**
* 模板归属
*/
@TableField("namespace")
private String namespace;
/**
* 审核人id
*/
@TableField("audit_id")
private Integer auditId;
/**
* 审核人名称
*/
@TableField("audit_name")
private String auditName;
/**
* 审核时间
*/
@TableField("audit_date")
private Date auditDate;
/**
* 上架时间
*/
@TableField("shelf_date")
private Date shelfDate;
/**
* 关联信息模板ID
*/
@TableField("template_id")
private Integer templateId;
/**
* 关联信息模板类别ID
*/
@TableField("category_id")
private Integer categoryId;
/**
* 分派人ID
*/
@TableField("allocation_id")
private Integer allocationId;
/**
* 分派人名称
*/
@TableField("allocation_name")
private String allocationName;
/**
* 是否加急处理 0否 1是
*/
@TableField("expedited")
private Integer expedited;
/**
* 绑定模型id集合
*/
@TableField("bind_diy_ids")
private String bindDiyIds;
/**
* 是否被绑定
*/
@TableField("is_bind")
private Boolean isBind;
/**
* 是否由美国生产 默认为false
*/
@TableField("usa_made")
private Boolean usaMade;
/**
* 厂商
*/
@TableField("manufacturer")
private String manufacturer;
/**
* 款号
*/
@TableField("style_num")
private String styleNum;
/**
* 模类型 0公模 1私模
*/
@TableField("type")
private Integer type;
/**
* 生产终端
*/
@TableField("production_client")
private String productionClient;
/**
* erp的颜色尺码
*/
@TableField("erp_sku_properties")
private Json erpSkuProperties;
/**
* 推送需求的人
*/
@TableField("push_user")
private String pushUser;
/**
* 是否新版模
*/
@TableField("new_standard")
private Boolean newStandard;
/**
* 模备注
*/
@TableField("diy_remark")
private String diyRemark;
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
......@@ -14,7 +15,7 @@ import java.util.Date;
* Entity
*
* @author Lizh
* @date 2026-05-28 19:07:13
* @date 2026-06-03 11:57:07
*/
@Data
@TableName("log_custom_product")
......@@ -27,41 +28,30 @@ public class LogCustomProductEntity implements Serializable {
*/
@TableId(value = "id",type= IdType.ASSIGN_ID)
private Long id;
/**
* 商品id(custom_product_info表id)
*/
@TableField("product_id")
private Integer productId;
/**
* 操作人id
*/
@TableField("employee_id")
private Integer employeeId;
/**
* 操作人账号
*/
@TableField("employee_account")
private String employeeAccount;
/**
* 操作描述
*/
@TableField("description")
private String description;
/**
* 创建时间
*/
@TableField("create_time")
private Date createTime;
/**
* 0 custom 1 factory 2都可以
*/
@TableField("data_permissions")
private Integer dataPermissions;
}
......@@ -6,6 +6,7 @@ import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.Date;
......@@ -14,10 +15,10 @@ import java.util.Date;
* 用户信息表 Entity
*
* @author Lizh
* @date 2026-06-01 12:29:59
* @date 2026-06-03 12:20:28
*/
@Data
@TableName("sys_user11")
@TableName("sys_user")
public class SysUserEntity implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
......@@ -27,19 +28,16 @@ public class SysUserEntity implements Serializable {
*/
@TableId(value = "user_id",type= IdType.ASSIGN_ID)
private Long userId;
/**
* 部门ID
*/
@TableField("dept_id")
private Long deptId;
/**
* 用户账号
*/
@TableField("user_name")
private String userName;
/**
* 用户昵称
*/
......
package com.jomalls.custom.dal.mapper;
import com.jomalls.custom.dal.entity.CustomWarehouseInfoEntity;
import com.jomalls.custom.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Lizh
* @version 0.01
* @description: mapper
* @date 2026-06-03 14:47:24
*/
@Mapper
public interface CustomWarehouseInfoMapper extends BaseMapper<CustomWarehouseInfoEntity> {
}
package com.jomalls.custom.dal.mapper;
import com.jomalls.custom.dal.entity.DbDiyEntity;
import com.jomalls.custom.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
/**
* @author Lizh
* @version 0.01
* @description: mapper
* @date 2026-06-03 14:47:23
*/
@Mapper
public interface DbDiyMapper extends BaseMapper<DbDiyEntity> {
}
package com.jomalls.custom.domain.service;
import com.jomalls.custom.dal.entity.CustomWarehouseInfoEntity;
import com.jomalls.custom.service.IBaseService;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:24
*/
public interface CustomWarehouseInfoDomainService extends IBaseService<CustomWarehouseInfoEntity> {
}
package com.jomalls.custom.domain.service;
import com.jomalls.custom.dal.entity.DbDiyEntity;
import com.jomalls.custom.service.IBaseService;
/**
* @author Lizh
* @version 0.01
* @description: 接口
* @date 2026-06-03 14:47:23
*/
public interface DbDiyDomainService extends IBaseService<DbDiyEntity> {
}
package com.jomalls.custom.domain.service.impl;
import com.jomalls.custom.dal.mapper.CustomWarehouseInfoMapper;
import com.jomalls.custom.dal.entity.CustomWarehouseInfoEntity;
import com.jomalls.custom.domain.service.CustomWarehouseInfoDomainService;
import com.jomalls.custom.service.impl.BaseServiceImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-06-03 14:47:24
*/
@Service
public class CustomWarehouseInfoDomainServiceImpl extends BaseServiceImpl<CustomWarehouseInfoMapper,CustomWarehouseInfoEntity> implements CustomWarehouseInfoDomainService {
@Autowired
public CustomWarehouseInfoDomainServiceImpl(SqlSessionFactory sqlSessionFactory) {
super(sqlSessionFactory);
}
// 自定义方法或者基础方法重写
}
\ No newline at end of file
package com.jomalls.custom.domain.service.impl;
import com.jomalls.custom.dal.mapper.DbDiyMapper;
import com.jomalls.custom.dal.entity.DbDiyEntity;
import com.jomalls.custom.domain.service.DbDiyDomainService;
import com.jomalls.custom.service.impl.BaseServiceImpl;
import org.apache.ibatis.session.SqlSessionFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
/**
* @author Lizh
* @version 0.01
* @description: 接口实现
* @date 2026-06-03 14:47:23
*/
@Service
public class DbDiyDomainServiceImpl extends BaseServiceImpl<DbDiyMapper,DbDiyEntity> implements DbDiyDomainService {
@Autowired
public DbDiyDomainServiceImpl(SqlSessionFactory sqlSessionFactory) {
super(sqlSessionFactory);
}
// 自定义方法或者基础方法重写
}
\ No newline at end of file
......@@ -8,9 +8,6 @@
<result property="sku" column="sku"/>
<result property="title" column="title"/>
<result property="name" column="name"/>
<result property="namespace" column="namespace"/>
<result property="affiliatedFactory" column="affiliated_factory"/>
<result property="thirdSku" column="third_sku"/>
<result property="imgUrl" column="img_url"/>
<result property="categoryId" column="category_id"/>
<result property="weight" column="weight"/>
......@@ -19,7 +16,6 @@
<result property="salesPrice" column="sales_price"/>
<result property="salesPriceMax" column="sales_price_max"/>
<result property="status" column="status"/>
<result property="preSuspendStatus" column="pre_suspend_status"/>
<result property="property1CateId" column="property1_cate_id"/>
<result property="property2CateId" column="property2_cate_id"/>
<result property="property3CateId" column="property3_cate_id"/>
......@@ -52,9 +48,6 @@
sku,
title,
name,
namespace,
affiliated_factory,
third_sku,
img_url,
category_id,
weight,
......@@ -63,7 +56,6 @@
sales_price,
sales_price_max,
status,
pre_suspend_status,
property1_cate_id,
property2_cate_id,
property3_cate_id,
......
......@@ -28,7 +28,6 @@
<result property="factoryPrice" column="factory_price"/>
<result property="salesPrice" column="sales_price"/>
<result property="skuWeight" column="sku_weight"/>
<result property="regCount" column="reg_count"/>
<result property="printType" column="print_type"/>
<result property="sort" column="sort"/>
<result property="productNo" column="product_no"/>
......@@ -63,7 +62,6 @@
factory_price,
sales_price,
sku_weight,
reg_count,
print_type,
sort,
product_no,
......
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jomalls.custom.dal.mapper.CustomWarehouseInfoMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.jomalls.custom.dal.entity.CustomWarehouseInfoEntity" id="customWarehouseInfoMap">
<result property="id" column="id"/>
<result property="warehouseName" column="warehouse_name"/>
<result property="warehouseCode" column="warehouse_code"/>
<result property="overallLogistics" column="overall_logistics"/>
<result property="superFactory" column="super_factory"/>
<result property="systemLogistics" column="system_logistics"/>
<result property="overallLogisticsScope" column="overall_logistics_scope"/>
<result property="contactName" column="contact_name"/>
<result property="contactPhone" column="contact_phone"/>
<result property="contactEmail" column="contact_email"/>
<result property="countryCode" column="country_code"/>
<result property="countryName" column="country_name"/>
<result property="province" column="province"/>
<result property="provinceCode" column="province_code"/>
<result property="provinceAbb" column="province_abb"/>
<result property="city" column="city"/>
<result property="cityCode" column="city_code"/>
<result property="district" column="district"/>
<result property="street" column="street"/>
<result property="postcode" column="postcode"/>
<result property="companyName" column="company_name"/>
<result property="socialCreditCode" column="social_credit_code"/>
<result property="remarks" column="remarks"/>
<result property="updateTime" column="update_time"/>
<result property="createTime" column="create_time"/>
<result property="status" column="status"/>
<result property="contactNameCn" column="contact_name_cn"/>
<result property="countryNameCn" column="country_name_cn"/>
<result property="provinceCn" column="province_cn"/>
<result property="cityCn" column="city_cn"/>
<result property="districtCn" column="district_cn"/>
<result property="streetCn" column="street_cn"/>
<result property="formal" column="formal"/>
<result property="settlementCurrency" column="settlement_currency"/>
<result property="companyNameCn" column="company_name_cn"/>
</resultMap>
<!-- 注意去掉最后一行的逗号 -->
<sql id="tableColumns">
id,
warehouse_name,
warehouse_code,
overall_logistics,
super_factory,
system_logistics,
overall_logistics_scope,
contact_name,
contact_phone,
contact_email,
country_code,
country_name,
province,
province_code,
province_abb,
city,
city_code,
district,
street,
postcode,
company_name,
social_credit_code,
remarks,
update_time,
create_time,
status,
contact_name_cn,
country_name_cn,
province_cn,
city_cn,
district_cn,
street_cn,
formal,
settlement_currency,
company_name_cn
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jomalls.custom.dal.mapper.DbDiyMapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.jomalls.custom.dal.entity.DbDiyEntity" id="dbDiyMap">
<result property="id" column="id"/>
<result property="sku" column="sku"/>
<result property="title" column="title"/>
<result property="enName" column="en_name"/>
<result property="idx" column="idx"/>
<result property="imgUrl" column="img_url"/>
<result property="imgArr" column="img_arr"/>
<result property="bianma" column="bianma"/>
<result property="content" column="content"/>
<result property="leixing" column="leixing"/>
<result property="scImgType" column="sc_img_type"/>
<result property="chimaNowRender" column="chima_now_render"/>
<result property="render" column="render"/>
<result property="parentId" column="parent_id"/>
<result property="userIds" column="user_ids"/>
<result property="banUserIds" column="ban_user_ids"/>
<result property="typeId" column="type_id"/>
<result property="status" column="status"/>
<result property="createDate" column="create_date"/>
<result property="defaultDiyId" column="default_diy_id"/>
<result property="factoryId" column="factory_id"/>
<result property="printType" column="print_type"/>
<result property="material" column="material"/>
<result property="craftId" column="craft_id"/>
<result property="minPrice" column="min_price"/>
<result property="maxPrice" column="max_price"/>
<result property="pictureStatus" column="picture_status"/>
<result property="remark" column="remark"/>
<result property="namespace" column="namespace"/>
<result property="auditId" column="audit_id"/>
<result property="auditName" column="audit_name"/>
<result property="auditDate" column="audit_date"/>
<result property="shelfDate" column="shelf_date"/>
<result property="templateId" column="template_id"/>
<result property="categoryId" column="category_id"/>
<result property="allocationId" column="allocation_id"/>
<result property="allocationName" column="allocation_name"/>
<result property="expedited" column="expedited"/>
<result property="bindDiyIds" column="bind_diy_ids"/>
<result property="isBind" column="is_bind"/>
<result property="usaMade" column="usa_made"/>
<result property="manufacturer" column="manufacturer"/>
<result property="styleNum" column="style_num"/>
<result property="type" column="type"/>
<result property="productionClient" column="production_client"/>
<result property="erpSkuProperties" column="erp_sku_properties" typeHandler="com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler"/>
<result property="pushUser" column="push_user"/>
<result property="newStandard" column="new_standard"/>
<result property="diyRemark" column="diy_remark"/>
</resultMap>
<!-- 注意去掉最后一行的逗号 -->
<sql id="tableColumns">
id,
sku,
title,
en_name,
idx,
img_url,
img_arr,
bianma,
content,
leixing,
sc_img_type,
chima_now_render,
render,
parent_id,
user_ids,
ban_user_ids,
type_id,
status,
create_date,
default_diy_id,
factory_id,
print_type,
material,
craft_id,
min_price,
max_price,
picture_status,
remark,
namespace,
audit_id,
audit_name,
audit_date,
shelf_date,
template_id,
category_id,
allocation_id,
allocation_name,
expedited,
bind_diy_ids,
is_bind,
usa_made,
manufacturer,
style_num,
type,
production_client,
erp_sku_properties,
push_user,
new_standard,
diy_remark
</sql>
</mapper>
......@@ -10,7 +10,6 @@
<result property="employeeAccount" column="employee_account"/>
<result property="description" column="description"/>
<result property="createTime" column="create_time"/>
<result property="dataPermissions" column="data_permissions"/>
</resultMap>
<!-- 注意去掉最后一行的逗号 -->
......@@ -20,7 +19,6 @@
employee_id,
employee_account,
description,
create_time,
data_permissions
create_time
</sql>
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.jomalls.custom.dal.mapper.SysUser11Mapper">
<!-- 可根据自己的需求,是否要使用 -->
<resultMap type="com.jomalls.custom.dal.entity.SysUserEntity" id="sysUser11Map">
<result property="userId" column="user_id"/>
<result property="deptId" column="dept_id"/>
<result property="userName" column="user_name"/>
<result property="nickName" column="nick_name"/>
<result property="userType" column="user_type"/>
<result property="email" column="email"/>
<result property="phonenumber" column="phonenumber"/>
<result property="sex" column="sex"/>
<result property="avatar" column="avatar"/>
<result property="password" column="password"/>
<result property="status" column="status"/>
<result property="delFlag" column="del_flag"/>
<result property="loginIp" column="login_ip"/>
<result property="loginDate" column="login_date"/>
<result property="pwdUpdateDate" column="pwd_update_date"/>
<result property="createBy" column="create_by"/>
<result property="createTime" column="create_time"/>
<result property="updateBy" column="update_by"/>
<result property="updateTime" column="update_time"/>
<result property="remark" column="remark"/>
</resultMap>
<!-- 注意去掉最后一行的逗号 -->
<sql id="tableColumns">
user_id,
dept_id,
user_name,
nick_name,
user_type,
email,
phonenumber,
sex,
avatar,
password,
status,
del_flag,
login_ip,
login_date,
pwd_update_date,
create_by,
create_time,
update_by,
update_time,
remark,
</sql>
</mapper>
......@@ -59,6 +59,11 @@
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>com.github.xiaoymin</groupId>
<artifactId>knife4j-openapi3-jakarta-spring-boot-starter</artifactId>
<version>4.5.0</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<scope>provided</scope>
......
package com.jomalls.custom.config;
import com.jomalls.custom.app.enums.CodeEnum;
import com.jomalls.custom.app.exception.InvalidTokenException;
import com.jomalls.custom.app.exception.PermissionDeniedException;
import com.jomalls.custom.app.exception.ServiceException;
import org.springframework.http.HttpStatus;
......@@ -12,6 +13,15 @@ import org.springframework.web.bind.annotation.RestControllerAdvice;
public class CommonExceptionHandlerAdvice {
/**
* token验证失败(返回401 未登录或登录已过期)
*/
@ExceptionHandler(InvalidTokenException.class)
public ResponseEntity<com.jomalls.custom.app.utils.R<Object>> handleInvalidTokenException(InvalidTokenException e) {
return ResponseEntity.status(HttpStatus.UNAUTHORIZED)
.body(com.jomalls.custom.app.utils.R.fail(CodeEnum.UNAUTHORIZED.getCode(), e.getMessage()));
}
/**
* 权限异常处理(返回403 Forbidden)
*/
@ExceptionHandler(PermissionDeniedException.class)
......
......@@ -2,6 +2,8 @@
package com.jomalls.custom.config;
import com.jomalls.custom.app.enums.CodeEnum;
import com.jomalls.custom.app.exception.InvalidTokenException;
import com.jomalls.custom.app.utils.RequestHolder;
import com.jomalls.custom.security.LoginUser;
import com.jomalls.custom.security.SecurityUtils;
......@@ -47,21 +49,20 @@ public class SecurityInterceptor implements HandlerInterceptor {
// 获取登录用户信息
LoginUser loginUser = tokenHandle.getLoginUser(request);
// 如果有登录用户,保存到线程本地变量
if (loginUser != null) {
// 验证token是否有效
if (tokenHandle.verifyToken(loginUser)) {
SecurityUtils.setLoginUser(loginUser);
log.debug("用户[{}]登录验证通过,请求URI: {}", loginUser.getUsername(), request.getRequestURI());
return true;
} else {
log.warn("用户[{}]token已过期,请求URI: {}", loginUser.getUsername(), request.getRequestURI());
}
// 如果用户没有登录,返回提示
if (loginUser == null) {
throw new InvalidTokenException(CodeEnum.UNAUTHORIZED.getCode(), "未登录或登录已过期");
}
// 未登录或token无效,允许继续(由后续业务逻辑决定是否需要登录)
// 如果需要强制登录,这里可以抛出异常或返回401
return true;
// 验证token是否有效
if (tokenHandle.verifyToken(loginUser)) {
SecurityUtils.setLoginUser(loginUser);
log.debug("用户[{}]登录验证通过,请求URI: {}", loginUser.getUsername(), request.getRequestURI());
return true;
} else {
log.warn("用户[{}]token已过期,请求URI: {}", loginUser.getUsername(), request.getRequestURI());
}
return false;
}
/**
......
......@@ -17,7 +17,7 @@ public class WebMvcConfiguration implements WebMvcConfigurer {
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(securityInterceptor())
.excludePathPatterns("/swagger-ui/**", "/swagger-ui.html", "/doc.html", "/api-docs/**",
.excludePathPatterns("/swagger-ui/**", "/swagger-ui.html", "/doc.html","/*/api-docs/**", "/document.html",
"/webjars/**", "/swagger-resources/**", "/sys/Serf/Health/*", "/error",
"/actuator/health", "/health/check");
}
......
## 数据库连接配置
spring.datasource.url=jdbc:mysql://172.16.19.99:3306/foxpsd_lizh?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.url=jdbc:mysql://172.16.19.99:3306/foxpsd-lizh?autoReconnect=true&useUnicode=true&characterEncoding=utf8&useSSL=false
spring.datasource.username=root
spring.datasource.password=joshine
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
......
......@@ -33,7 +33,7 @@ default.scp.data.version=1.0
## 时区配置
TZ=Asia/Shanghai
server.needAuthentication=false
server.needAuthentication=true
# 令牌自定义标识
token.header=Authorization
# 令牌密钥
......
package com.jomalls.custom.webapp.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.annotation.RequiresPermissions;
import com.jomalls.custom.app.vo.CustomProductCraftRelPageVO;
import com.jomalls.custom.app.vo.CustomProductCraftRelVO;
import com.jomalls.custom.app.service.CustomProductCraftRelService;
......@@ -37,6 +38,7 @@ public class CustomProductCraftRelController {
* @return list集合
*/
@Operation(summary = "列表查询接口", description = "根据条件查询列表接口(不分页)")
@RequiresPermissions(value = "demo:permission:edit", mode = RequiresPermissions.RequireMode.ANY)
@RequestMapping(value = "/list", method = RequestMethod.POST)
public List<CustomProductCraftRelVO> list(@RequestBody CustomProductCraftRelVO customProductCraftRelVO) {
return customProductCraftRelService.list(customProductCraftRelVO);
......
package com.jomalls.custom.webapp.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.service.CustomWarehouseInfoService;
import com.jomalls.custom.app.vo.CustomWarehouseInfoPageVO;
import com.jomalls.custom.app.vo.CustomWarehouseInfoVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: Controller
* @date 2026-06-03 14:47:24
*/
@Slf4j
@RestController
@Tag(name = "/customWarehouseInfo", description = "Controller")
@RequestMapping("/customWarehouseInfo")
public class CustomWarehouseInfoController {
@Autowired
private CustomWarehouseInfoService customWarehouseInfoService;
/**
* 列表查询接口
*
* @param customWarehouseInfoVO 条件model
* @return list集合
*/
@Operation(summary = "列表查询接口", description = "根据条件查询列表接口(不分页)")
@RequestMapping(value = "/list", method = RequestMethod.POST)
public List<CustomWarehouseInfoVO> list(@RequestBody CustomWarehouseInfoVO customWarehouseInfoVO) {
return customWarehouseInfoService.list(customWarehouseInfoVO);
}
/**
* 根据条件查询分页列表接口
*
* @param customWarehouseInfoPageVO 分页入参model
* @return 分页对象
*/
@Operation(summary = "分页列表接口", description = "根据条件查询分页列表接口")
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public IPage<CustomWarehouseInfoVO> pageList(@RequestBody CustomWarehouseInfoPageVO customWarehouseInfoPageVO) {
return customWarehouseInfoService.pageList(customWarehouseInfoPageVO);
}
/**
* 根据主键id查询详情
*
* @param id 主键
* @return 实体model
*/
@Operation(summary = "根据主键id查询详情", description = "根据主键id查询详情")
@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public CustomWarehouseInfoVO info(@Parameter(description = "主键id", required = true) @PathVariable("id") Long id) {
return customWarehouseInfoService.info(id);
}
/**
* 保存对象
*
* @param customWarehouseInfoVO 保存对象
*/
@Operation(summary = "保存对象", description = "保存对象")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public void save(@RequestBody @Valid CustomWarehouseInfoVO customWarehouseInfoVO) {
customWarehouseInfoService.save(customWarehouseInfoVO);
}
/**
* 根据id修改对象
*
* @param customWarehouseInfoVO 修改对象
*/
@Operation(summary = "根据id修改对象", description = "根据id修改对象")
@RequestMapping(value = "/updateById", method = RequestMethod.PUT)
public void updateById(@RequestBody CustomWarehouseInfoVO customWarehouseInfoVO) {
customWarehouseInfoService.updateById(customWarehouseInfoVO);
}
/**
* 根据主键id进行删除
*
* @param id 主键
*/
@Operation(summary = "根据主键id进行删除", description = "根据主键id进行删除")
@RequestMapping(value = "/deleteById/{id}", method = RequestMethod.DELETE)
public void deleteById(@Parameter(description = "主键id", required = true) @PathVariable("id") Long id) {
customWarehouseInfoService.deleteById(id);
}
}
package com.jomalls.custom.webapp.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jomalls.custom.app.service.DbDiyService;
import com.jomalls.custom.app.vo.DbDiyPageVO;
import com.jomalls.custom.app.vo.DbDiyVO;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.tags.Tag;
import jakarta.validation.Valid;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
import java.util.List;
/**
* @author Lizh
* @version 0.01
* @description: Controller
* @date 2026-06-03 14:47:23
*/
@Slf4j
@RestController
@Tag(name = "/dbDiy", description = "Controller")
@RequestMapping("/dbDiy")
public class DbDiyController {
@Autowired
private DbDiyService dbDiyService;
/**
* 列表查询接口
*
* @param dbDiyVO 条件model
* @return list集合
*/
@Operation(summary = "列表查询接口", description = "根据条件查询列表接口(不分页)")
@RequestMapping(value = "/list", method = RequestMethod.POST)
public List<DbDiyVO> list(@RequestBody DbDiyVO dbDiyVO) {
return dbDiyService.list(dbDiyVO);
}
/**
* 根据条件查询分页列表接口
*
* @param dbDiyPageVO 分页入参model
* @return 分页对象
*/
@Operation(summary = "分页列表接口", description = "根据条件查询分页列表接口")
@RequestMapping(value = "/pageList", method = RequestMethod.POST)
public IPage<DbDiyVO> pageList(@RequestBody DbDiyPageVO dbDiyPageVO) {
return dbDiyService.pageList(dbDiyPageVO);
}
/**
* 根据主键id查询详情
*
* @param id 主键
* @return 实体model
*/
@Operation(summary = "根据主键id查询详情", description = "根据主键id查询详情")
@RequestMapping(value = "/info/{id}", method = RequestMethod.GET)
public DbDiyVO info(@Parameter(description = "主键id", required = true) @PathVariable("id") Integer id) {
return dbDiyService.info(id);
}
/**
* 保存对象
*
* @param dbDiyVO 保存对象
*/
@Operation(summary = "保存对象", description = "保存对象")
@RequestMapping(value = "/save", method = RequestMethod.POST)
public void save(@RequestBody @Valid DbDiyVO dbDiyVO) {
dbDiyService.save(dbDiyVO);
}
/**
* 根据id修改对象
*
* @param dbDiyVO 修改对象
*/
@Operation(summary = "根据id修改对象", description = "根据id修改对象")
@RequestMapping(value = "/updateById", method = RequestMethod.PUT)
public void updateById(@RequestBody DbDiyVO dbDiyVO) {
dbDiyService.updateById(dbDiyVO);
}
/**
* 根据主键id进行删除
*
* @param id 主键
*/
@Operation(summary = "根据主键id进行删除", description = "根据主键id进行删除")
@RequestMapping(value = "/deleteById/{id}", method = RequestMethod.DELETE)
public void deleteById(@Parameter(description = "主键id", required = true) @PathVariable("id") Integer id) {
dbDiyService.deleteById(id);
}
}
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