超市扣减库存

This commit is contained in:
zjf committed 2025-01-02 11:48:21 +08:00
1 parent b302738589
commit 3a5067deb0
9 files changed
+113 -1

No files matched your search

@@ -0,0 +1,47 @@
package com.bsd.pjcloud.supermarket.dto;
import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 商品 SKU 更新库存 Request DTO
*
* @author LeeYan9
* @since 2022-08-26
*/
@Data
@NoArgsConstructor
@AllArgsConstructor
public class SupermarketSpuUpdateStockReqDTO {
/**
* 商品 SKU
*/
@NotNull(message = "商品 SPU 不能为空")
private List<Item> items;
@Data
public static class Item {
/**
* 商品 SKU 编号
*/
@NotNull(message = "商品 SPU 编号不能为空")
private Long id;
/**
* 库存变化数量
*
* 正数:增加库存
* 负数:扣减库存
*/
@NotNull(message = "库存变化数量不能为空")
private Integer incrCount;
}
}
@@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.common.log.annotation.SysLog;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO;
import com.bsd.pjcloud.supermarket.entity.SupermarketSpuEntity;
import com.bsd.pjcloud.supermarket.service.SupermarketSpuService;
import org.springframework.security.access.prepost.PreAuthorize;
@@ -21,7 +22,6 @@ import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Objects;
/**
* 商品spu
@@ -120,4 +120,10 @@ public class SupermarketSpuController {
public List<SupermarketSpuEntity> export(SupermarketSpuEntity supermarketSpu,Long[] ids) {
return supermarketSpuService.list(Wrappers.lambdaQuery(supermarketSpu).in(ArrayUtil.isNotEmpty(ids), SupermarketSpuEntity::getId, ids));
}
@PostMapping("/ad/updateSpuStock")
@SysLog("更新商品库存")
public R updateSkuStock(@RequestBody SupermarketSpuUpdateStockReqDTO updateStockReqDTO){
return supermarketSpuService.updateSpuStock(updateStockReqDTO);
}
}
@@ -119,4 +119,7 @@ public class SupermarketUnitController {
public List<SupermarketUnitEntity> export(SupermarketUnitEntity supermarketUnit,Long[] ids) {
return supermarketUnitService.list(Wrappers.lambdaQuery(supermarketUnit).in(ArrayUtil.isNotEmpty(ids), SupermarketUnitEntity::getId, ids));
}
}
@@ -309,6 +309,10 @@ public class SupermarketSpuEntity extends Model<SupermarketSpuEntity> {
@Schema(description="租户编号")
private Long tenantId;
@Schema(description = "销量")
private Integer salesCount;
@Schema(description = "辅助条码集合对象")
@TableField(exist = false)
private List<SupermarketAuxiliaryCodeEntity> supermarketAuxiliaryCodeEntityList;
@@ -1,5 +1,6 @@
package com.bsd.pjcloud.supermarket.mapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.bsd.pjcloud.common.data.datascope.PjcloudBaseMapper;
import com.bsd.pjcloud.supermarket.entity.SupermarketSpuEntity;
import org.apache.ibatis.annotations.Mapper;
@@ -8,4 +9,27 @@ import org.apache.ibatis.annotations.Mapper;
public interface SupermarketSpuMapper extends PjcloudBaseMapper<SupermarketSpuEntity> {
/**
* 更新商品 SPU 库存
*
* @param id 商品 SPU 编号
* @param incrCount 增加的库存数量
*/
default int updateStock(Long id, Integer incrCount) {
// 拼接 SQL
if (incrCount == 0) {
return 0;
}
String sql;
if (incrCount > 0) {
sql = " stock = stock + " + incrCount + ", sales_count = sales_count - " + incrCount;
} else {
sql = " stock = stock - " + Math.abs(incrCount) + ", sales_count = sales_count + " + Math.abs(incrCount);
}
// 执行更新
LambdaUpdateWrapper<SupermarketSpuEntity> updateWrapper = new LambdaUpdateWrapper<SupermarketSpuEntity>()
.setSql(sql)
.eq(SupermarketSpuEntity::getId, id);
return update(null, updateWrapper);
}
}
@@ -2,6 +2,7 @@ package com.bsd.pjcloud.supermarket.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO;
import com.bsd.pjcloud.supermarket.entity.SupermarketSpuEntity;
import java.util.ArrayList;
@@ -16,4 +17,12 @@ public interface SupermarketSpuService extends IService<SupermarketSpuEntity> {
Object removeSpuBatchByIds(ArrayList<Long> list);
/**
* 更新商品库存
* @param updateStockReqDTO
* @return
*/
R updateSpuStock(SupermarketSpuUpdateStockReqDTO updateStockReqDTO);
}
@@ -5,4 +5,5 @@ import com.bsd.pjcloud.supermarket.entity.SupermarketUnitEntity;
public interface SupermarketUnitService extends IService<SupermarketUnitEntity> {
}
@@ -3,6 +3,7 @@ package com.bsd.pjcloud.supermarket.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.bsd.pjcloud.common.core.util.R;
import com.bsd.pjcloud.supermarket.dto.SupermarketSpuUpdateStockReqDTO;
import com.bsd.pjcloud.supermarket.entity.SupermarketAuxiliaryCodeEntity;
import com.bsd.pjcloud.supermarket.entity.SupermarketSpuEntity;
import com.bsd.pjcloud.supermarket.entity.SupermarketUnitEntity;
@@ -106,4 +107,20 @@ public class SupermarketSpuServiceImpl extends ServiceImpl<SupermarketSpuMapper,
return R.ok();
}
@Override
@Transactional
public R updateSpuStock(SupermarketSpuUpdateStockReqDTO updateStockReqDTO) {
// 更新 SKU 库存
updateStockReqDTO.getItems().forEach(item -> {
int i = baseMapper.updateStock(item.getId(), item.getIncrCount());
if (item.getIncrCount() < 0) {
if (i == 0) {
R.failed("商品库存不足");
}
}
});
return R.ok();
}
}
@@ -50,5 +50,6 @@
<result property="updateTime" column="update_time"/>
<result property="delFlag" column="del_flag"/>
<result property="tenantId" column="tenant_id"/>
<result property="salesCount" column="sales_count"/>
</resultMap>
</mapper>