商品模块代码提交
This commit is contained in:
@@ -0,0 +1,126 @@
|
||||
package com.czg.product.dto;
|
||||
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 耗材库存变动记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-21
|
||||
*/
|
||||
@Data
|
||||
public class ConsStockFlowDTO implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
private Long vendorId;
|
||||
/**
|
||||
* 出入库类型 in-入库 out-出库
|
||||
*/
|
||||
private String inOutType;
|
||||
/**
|
||||
* 出入库名目 manual-in:手动入库 manual-out:手动出库 win-in:盘盈入库 loss-out:盘亏出库 order-in:订单退款入库 order-out:订单消费出库
|
||||
*/
|
||||
private String inOutItem;
|
||||
/**
|
||||
* 出入库日期
|
||||
*/
|
||||
private LocalDate inOutDate;
|
||||
/**
|
||||
* 应付金额
|
||||
*/
|
||||
private BigDecimal amountPayable;
|
||||
/**
|
||||
* 实付金额
|
||||
*/
|
||||
private BigDecimal actualPaymentAmount;
|
||||
/**
|
||||
* 付款日期
|
||||
*/
|
||||
private LocalDate paymentDate;
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String batchNo;
|
||||
/**
|
||||
* 耗材名称
|
||||
*/
|
||||
private String conName;
|
||||
/**
|
||||
* 采购价/进价
|
||||
*/
|
||||
private BigDecimal purchasePrice;
|
||||
/**
|
||||
* 耗材id
|
||||
*/
|
||||
private Long conId;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unitName;
|
||||
/**
|
||||
* 变动前的库存
|
||||
*/
|
||||
private BigDecimal beforeNumber;
|
||||
/**
|
||||
* 出入库数量
|
||||
*/
|
||||
private BigDecimal inOutNumber;
|
||||
/**
|
||||
* 变动后的库存
|
||||
*/
|
||||
private BigDecimal afterNumber;
|
||||
/**
|
||||
* 小计
|
||||
*/
|
||||
private BigDecimal subTotal;
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private Long productId;
|
||||
/**
|
||||
* sku id
|
||||
*/
|
||||
private Long skuId;
|
||||
/**
|
||||
* 商品订单id
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long createUserId;
|
||||
/**
|
||||
* 创建人name
|
||||
*/
|
||||
private String createUserName;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
}
|
||||
@@ -0,0 +1,130 @@
|
||||
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.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 耗材库存变动记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-21
|
||||
*/
|
||||
@Data
|
||||
@Table("tb_cons_stock_flow")
|
||||
public class ConsStockFlow implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
*/
|
||||
@Id(keyType = KeyType.Auto)
|
||||
private Long id;
|
||||
/**
|
||||
* 店铺id
|
||||
*/
|
||||
private Long shopId;
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
private Long vendorId;
|
||||
/**
|
||||
* 出入库类型 in-入库 out-出库
|
||||
*/
|
||||
private String inOutType;
|
||||
/**
|
||||
* 出入库名目 manual-in:手动入库 manual-out:手动出库 win-in:盘盈入库 loss-out:盘亏出库 order-in:订单退款入库 order-out:订单消费出库
|
||||
*/
|
||||
private String inOutItem;
|
||||
/**
|
||||
* 出入库日期
|
||||
*/
|
||||
private LocalDate inOutDate;
|
||||
/**
|
||||
* 应付金额
|
||||
*/
|
||||
private BigDecimal amountPayable;
|
||||
/**
|
||||
* 实付金额
|
||||
*/
|
||||
private BigDecimal actualPaymentAmount;
|
||||
/**
|
||||
* 付款日期
|
||||
*/
|
||||
private LocalDate paymentDate;
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String batchNo;
|
||||
/**
|
||||
* 耗材id
|
||||
*/
|
||||
private Long conId;
|
||||
/**
|
||||
* 耗材名称
|
||||
*/
|
||||
private String conName;
|
||||
/**
|
||||
* 采购价/进价
|
||||
*/
|
||||
private BigDecimal purchasePrice;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
private String unitName;
|
||||
/**
|
||||
* 变动前的库存
|
||||
*/
|
||||
private BigDecimal beforeNumber;
|
||||
/**
|
||||
* 出入库数量
|
||||
*/
|
||||
private BigDecimal inOutNumber;
|
||||
/**
|
||||
* 变动后的库存
|
||||
*/
|
||||
private BigDecimal afterNumber;
|
||||
/**
|
||||
* 小计
|
||||
*/
|
||||
private BigDecimal subTotal;
|
||||
/**
|
||||
* 商品id
|
||||
*/
|
||||
private Long productId;
|
||||
/**
|
||||
* sku id
|
||||
*/
|
||||
private Long skuId;
|
||||
/**
|
||||
* 商品订单id
|
||||
*/
|
||||
private Long orderId;
|
||||
/**
|
||||
* 创建人id
|
||||
*/
|
||||
private Long createUserId;
|
||||
/**
|
||||
* 创建人name
|
||||
*/
|
||||
private String createUserName;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
@Column(onInsertValue = "now()")
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,50 @@
|
||||
package com.czg.product.enums;
|
||||
|
||||
/**
|
||||
* 出入库名目枚举
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-24 09:54
|
||||
*/
|
||||
public enum InOutItemEnum {
|
||||
|
||||
/**
|
||||
* 手动入库
|
||||
*/
|
||||
MANUAL_IN("manual-in"),
|
||||
|
||||
/**
|
||||
* 手动出库
|
||||
*/
|
||||
MANUAL_OUT("manual-out"),
|
||||
|
||||
/**
|
||||
* 盘盈入库
|
||||
*/
|
||||
WIN_IN("win-in"),
|
||||
|
||||
/**
|
||||
* 盘亏出库
|
||||
*/
|
||||
LOSS_OUT("loss-out"),
|
||||
|
||||
/**
|
||||
* 订单退款入库
|
||||
*/
|
||||
ORDER_IN("order-in"),
|
||||
|
||||
/**
|
||||
* 订单消费出库
|
||||
*/
|
||||
ORDER_OUT("order-out");
|
||||
|
||||
private String value;
|
||||
|
||||
InOutItemEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,30 @@
|
||||
package com.czg.product.enums;
|
||||
|
||||
/**
|
||||
* 出入库类型枚举
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-24 09:54
|
||||
*/
|
||||
public enum InOutTypeEnum {
|
||||
|
||||
/**
|
||||
* 入库
|
||||
*/
|
||||
IN("in"),
|
||||
|
||||
/**
|
||||
* 出库
|
||||
*/
|
||||
OUT("out");
|
||||
|
||||
private String value;
|
||||
|
||||
InOutTypeEnum(String value) {
|
||||
this.value = value;
|
||||
}
|
||||
|
||||
public String value() {
|
||||
return this.value;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package com.czg.product.param;
|
||||
|
||||
import com.czg.validator.group.DefaultGroup;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
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 ConsCheckStockParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 耗材id
|
||||
*/
|
||||
@NotNull(message = "耗材id不能为空", groups = DefaultGroup.class)
|
||||
private Long conId;
|
||||
/**
|
||||
* 耗材名称
|
||||
*/
|
||||
@NotBlank(message = "耗材名称不能为空", groups = DefaultGroup.class)
|
||||
private String conName;
|
||||
/**
|
||||
* 账存数量
|
||||
*/
|
||||
@NotNull(message = "账存数量不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal stockNumber;
|
||||
/**
|
||||
* 实际数量
|
||||
*/
|
||||
@NotNull(message = "实际数量不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal actualNumber;
|
||||
/**
|
||||
* 盈亏数量
|
||||
*/
|
||||
@NotNull(message = "盈亏数量不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal winLossNumber;
|
||||
/**
|
||||
* 单价
|
||||
*/
|
||||
@NotNull(message = "单价不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal price;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
}
|
||||
@@ -0,0 +1,56 @@
|
||||
package com.czg.product.param;
|
||||
|
||||
import com.czg.validator.group.DefaultGroup;
|
||||
import jakarta.validation.constraints.Min;
|
||||
import jakarta.validation.constraints.NotBlank;
|
||||
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 ConsInOutStockBodyParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 耗材id
|
||||
*/
|
||||
@NotNull(message = "耗材id不能为空", groups = DefaultGroup.class)
|
||||
private String conId;
|
||||
/**
|
||||
* 耗材名称
|
||||
*/
|
||||
@NotBlank(message = "耗材名称不能为空", groups = DefaultGroup.class)
|
||||
private String conName;
|
||||
/**
|
||||
* 采购价/进价
|
||||
*/
|
||||
@NotNull(message = "进价不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal purchasePrice;
|
||||
/**
|
||||
* 单位
|
||||
*/
|
||||
@NotBlank(message = "单位不能为空", groups = DefaultGroup.class)
|
||||
private String unitName;
|
||||
/**
|
||||
* 出入库数量
|
||||
*/
|
||||
@NotNull(message = "数量不能为空", groups = DefaultGroup.class)
|
||||
@Min(value = 0, message = "数量不能小于0")
|
||||
private BigDecimal inOutNumber;
|
||||
/**
|
||||
* 小计
|
||||
*/
|
||||
@NotNull(message = "小计不能为空", groups = DefaultGroup.class)
|
||||
private BigDecimal subTotal;
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package com.czg.product.param;
|
||||
|
||||
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.LocalDate;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 出入库入参
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-20
|
||||
*/
|
||||
@Data
|
||||
public class ConsInOutStockHeadParam implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* 供应商id
|
||||
*/
|
||||
private Long vendorId;
|
||||
/**
|
||||
* 出入库日期
|
||||
*/
|
||||
@NotNull(message = "出入库日期不能为空", groups = DefaultGroup.class)
|
||||
@JSONField(format = "yyyy-MM-dd")
|
||||
private LocalDate inOutDate;
|
||||
/**
|
||||
* 应付金额
|
||||
*/
|
||||
private BigDecimal amountPayable;
|
||||
/**
|
||||
* 实付金额
|
||||
*/
|
||||
private BigDecimal actualPaymentAmount;
|
||||
/**
|
||||
* 付款日期
|
||||
*/
|
||||
private LocalDate paymentDate;
|
||||
/**
|
||||
* 批次号
|
||||
*/
|
||||
private String batchNo;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 耗材明细列表
|
||||
*/
|
||||
List<ConsInOutStockBodyParam> bodyList;
|
||||
}
|
||||
@@ -0,0 +1,49 @@
|
||||
package com.czg.product.service;
|
||||
|
||||
import com.czg.product.entity.ConsStockFlow;
|
||||
import com.czg.product.param.ConsCheckStockParam;
|
||||
import com.czg.product.param.ConsInOutStockHeadParam;
|
||||
import com.czg.product.vo.ConsCheckStockRecordVo;
|
||||
import com.mybatisflex.core.service.IService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 耗材库存变动记录
|
||||
*
|
||||
* @author Tankaikai tankaikai@aliyun.com
|
||||
* @since 1.0 2025-02-21
|
||||
*/
|
||||
public interface ConsStockFlowService extends IService<ConsStockFlow> {
|
||||
|
||||
/**
|
||||
* 手动入库
|
||||
*
|
||||
* @param param 手动出库入参
|
||||
*/
|
||||
void inStock(ConsInOutStockHeadParam param);
|
||||
|
||||
/**
|
||||
* 手动出库
|
||||
*
|
||||
* @param param 手动出库入参
|
||||
*/
|
||||
void outStock(ConsInOutStockHeadParam param);
|
||||
|
||||
/**
|
||||
* 库存盘点
|
||||
*
|
||||
* @param param 库存盘点入参
|
||||
*/
|
||||
void checkStock(ConsCheckStockParam param);
|
||||
|
||||
/**
|
||||
* 获取盘点记录
|
||||
*
|
||||
* @param conId 耗材id
|
||||
* @return 盘点记录列表
|
||||
*/
|
||||
List<ConsCheckStockRecordVo> getCheckStockRecordList(Long conId);
|
||||
|
||||
|
||||
}
|
||||
@@ -0,0 +1,73 @@
|
||||
package com.czg.product.vo;
|
||||
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import com.alibaba.fastjson2.annotation.JSONField;
|
||||
import lombok.Data;
|
||||
|
||||
import java.io.Serial;
|
||||
import java.io.Serializable;
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
/**
|
||||
* 库存盘点记录
|
||||
*
|
||||
* @author tankaikai
|
||||
* @since 2025-02-24 13:40
|
||||
*/
|
||||
@Data
|
||||
public class ConsCheckStockRecordVo implements Serializable {
|
||||
|
||||
@Serial
|
||||
private static final long serialVersionUID = 1L;
|
||||
/**
|
||||
* 耗材id
|
||||
*/
|
||||
private Long conId;
|
||||
/**
|
||||
* 耗材名称
|
||||
*/
|
||||
private String conName;
|
||||
/**
|
||||
* 单价
|
||||
*/
|
||||
private BigDecimal purchasePrice;
|
||||
/**
|
||||
* 账存数量
|
||||
*/
|
||||
private BigDecimal beforeNumber;
|
||||
/**
|
||||
* 盈亏数量
|
||||
*/
|
||||
private BigDecimal inOutNumber;
|
||||
/**
|
||||
* 盘点后的数量
|
||||
*/
|
||||
@JSONField(serialize = false)
|
||||
private BigDecimal afterNumber;
|
||||
/**
|
||||
* 盈亏金额
|
||||
*/
|
||||
private BigDecimal winLossAmount;
|
||||
/**
|
||||
* 实际库存
|
||||
*/
|
||||
private BigDecimal actualNumber;
|
||||
/**
|
||||
* 盘点时间
|
||||
*/
|
||||
@JSONField(format = "yyyy-MM-dd HH:mm:ss")
|
||||
private LocalDateTime createTime;
|
||||
/**
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
public BigDecimal getWinLossAmount() {
|
||||
return NumberUtil.mul(purchasePrice, purchasePrice);
|
||||
}
|
||||
|
||||
public BigDecimal getActualNumber() {
|
||||
return afterNumber;
|
||||
}
|
||||
}
|
||||
@@ -19,7 +19,7 @@ public class ShopProductSkuInfoVo implements Serializable {
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
/**
|
||||
* id
|
||||
* sku-id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user