商品模块代码提交

This commit is contained in:
Tankaikai
2025-02-20 19:28:16 +08:00
parent 3dd6e2e189
commit 787d67e7b1
14 changed files with 436 additions and 5 deletions

View File

@@ -0,0 +1,33 @@
package com.czg.product.dto;
import com.czg.validator.group.DefaultGroup;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.util.List;
/**
* 商品耗材绑定
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-20
*/
@Data
public class ProdConsBindDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* 商品id
*/
@NotNull(message = "商品id不能为空", groups = DefaultGroup.class)
private Long id;
/**
* 耗材列表
*/
private List<ProdConsRelationDTO> consList;
}

View File

@@ -0,0 +1,54 @@
package com.czg.product.dto;
import com.alibaba.fastjson2.annotation.JSONField;
import com.czg.validator.group.DefaultGroup;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 商品耗材绑定关系
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-20
*/
@Data
public class ProdConsRelationDTO implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
private Long id;
/**
* 店铺id
*/
private Long shopId;
/**
* 商品id
*/
@NotNull(message = "商品id不能为空", groups = DefaultGroup.class)
private Long productId;
/**
* 耗材id
*/
@NotNull(message = "耗材id不能为空", groups = DefaultGroup.class)
private Long consInfoId;
/**
* 单位消耗值
*/
@NotNull(message = "使用数量不能为空", groups = DefaultGroup.class)
private BigDecimal surplusStock;
/**
* 创建时间
*/
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,53 @@
package com.czg.product.entity;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.KeyType;
import com.mybatisflex.annotation.Table;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
/**
* 商品耗材绑定关系
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-20
*/
@Data
@Table("tb_prod_cons_relation")
public class ProdConsRelation implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@Id(keyType = KeyType.Auto)
private Long id;
/**
* 店铺id
*/
private Long shopId;
/**
* 商品id
*/
private Long productId;
/**
* 耗材id
*/
private Long consInfoId;
/**
* 单位消耗值
*/
private BigDecimal surplusStock;
/**
* 创建时间
*/
@Column(onInsertValue = "now()")
private LocalDateTime createTime;
}

View File

@@ -0,0 +1,49 @@
package com.czg.product.param;
import com.czg.validator.group.DefaultGroup;
import com.czg.validator.group.InsertGroup;
import jakarta.validation.constraints.NotNull;
import lombok.Data;
import java.io.Serial;
import java.io.Serializable;
import java.math.BigDecimal;
/**
* 耗材副单位编辑入参
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-20
*/
@Data
public class ConsSubUnitParam implements Serializable {
@Serial
private static final long serialVersionUID = 1L;
/**
* id
*/
@NotNull(message = "ID不能为空", groups = DefaultGroup.class)
private Long id;
/**
* 耗材分组id
*/
@NotNull(message = "副单位不能为空", groups = InsertGroup.class)
private String conUnitTwo;
/**
* 转换数量 (等同于多少主单位)
*/
@NotNull(message = "转换数量不能为空", groups = InsertGroup.class)
private BigDecimal conUnitTwoConvert;
/**
* 默认入库单位
*/
@NotNull(message = "默认入库单位不能为空", groups = InsertGroup.class)
private String defaultUnit;
/**
* 修改标志 add-新增 delete-删除
*/
@NotNull(message = "修改标志不能为空", groups = DefaultGroup.class)
private String modifyFlag;
}

View File

@@ -2,6 +2,7 @@ package com.czg.product.service;
import com.czg.product.dto.ConsInfoDTO;
import com.czg.product.entity.ConsInfo;
import com.czg.product.param.ConsSubUnitParam;
import com.mybatisflex.core.paginate.Page;
import com.mybatisflex.core.service.IService;
@@ -32,4 +33,6 @@ public interface ConsInfoService extends IService<ConsInfo> {
boolean onOffConsInfo(Long id, Integer isStock);
void modifySubUnit(ConsSubUnitParam param);
}

View File

@@ -0,0 +1,22 @@
package com.czg.product.service;
import com.czg.product.dto.ProdConsBindDTO;
import com.czg.product.dto.ProdConsRelationDTO;
import com.czg.product.entity.ProdConsRelation;
import com.mybatisflex.core.service.IService;
import java.util.List;
/**
* 商品耗材绑定关系
*
* @author Tankaikai tankaikai@aliyun.com
* @since 1.0 2025-02-20
*/
public interface ProdConsRelationService extends IService<ProdConsRelation> {
List<ProdConsRelationDTO> getProdConsRelationList(ProdConsRelationDTO param);
boolean saveProdConsRelation(ProdConsBindDTO dto);
}

View File

@@ -0,0 +1,36 @@
package com.czg.enums;
/**
* 数据操作枚举
*
* @author tankaikai
* @since 2025-02-20 16:59
*/
public enum CrudEnum {
/**
* 新增
*/
ADD("add"),
/**
* 修改
*/
UPDATE("update"),
/**
* 查询
*/
QUERY("query"),
/**
* 查询
*/
DELETE("delete");
private String value;
CrudEnum(String value) {
this.value = value;
}
public String value() {
return this.value;
}
}

View File

@@ -9,6 +9,7 @@ import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.context.support.ResourceBundleMessageSource;
import org.springframework.validation.beanvalidation.MessageSourceResourceBundleLocator;
import java.util.List;
import java.util.Locale;
import java.util.Set;
@@ -30,9 +31,10 @@ public class ValidatorUtil {
/**
* 校验对象
* @param object 待校验对象
* @param groups 待校验的组
* @throws CzgException 校验不通过则报CzgException异常
*
* @param object 待校验对象
* @param groups 待校验的组
* @throws CzgException 校验不通过则报CzgException异常
*/
public static void validateEntity(Object object, Class<?>... groups)
throws CzgException {
@@ -46,4 +48,26 @@ public class ValidatorUtil {
throw new CzgException(constraint.getMessage());
}
}
/**
* 校验对象集合
*
* @param objects 待校验对象集合
* @param groups 待校验的组
* @throws CzgException 校验不通过则报CzgException异常
*/
public static void validateEntityList(List<?> objects, Class<?>... groups)
throws CzgException {
Locale.setDefault(LocaleContextHolder.getLocale());
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(
new ResourceBundleMessageInterpolator(new MessageSourceResourceBundleLocator(getMessageSource())))
.buildValidatorFactory().getValidator();
for (Object object : objects) {
Set<ConstraintViolation<Object>> constraintViolations = validator.validate(object, groups);
if (!constraintViolations.isEmpty()) {
ConstraintViolation<Object> constraint = constraintViolations.iterator().next();
throw new CzgException(constraint.getMessage());
}
}
}
}