diff --git a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java index 97c8dca2..2ea0f38b 100644 --- a/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java +++ b/cash-api/product-server/src/main/java/com/czg/controller/admin/ProductController.java @@ -125,6 +125,17 @@ public class ProductController { return CzgResult.success(); } + @PutMapping + @OperationLog("商品-修改库存") + @SaStaffCheckPermission("yun_xu_xiu_gai_shang_pin") + public CzgResult updateProductStock(@RequestBody ProductModifyStockParam param) { + ValidatorUtil.validateEntity(param, DefaultGroup.class); + Long shopId = StpKit.USER.getShopId(0L); + param.setShopId(shopId); + productService.updateProductStock(param); + return CzgResult.success(); + } + /** * 商品-删除 * @param id 商品ID diff --git a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java index e985aed6..325cb110 100644 --- a/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java +++ b/cash-common/cash-common-service/src/main/java/com/czg/product/service/ProductService.java @@ -55,6 +55,13 @@ public interface ProductService extends IService { */ void updateProduct(ProductDTO dto); + /** + * 修改商品库存数量 + * + * @param param 商品id及库存数量 + */ + void updateProductStock(ProductModifyStockParam param); + /** * 删除商品 * diff --git a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java index c6b84450..669ee27d 100644 --- a/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java +++ b/cash-service/product-service/src/main/java/com/czg/service/product/service/impl/ProductServiceImpl.java @@ -234,6 +234,7 @@ public class ProductServiceImpl extends ServiceImpl impl } @Override + @Transactional(rollbackFor = Exception.class) @CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#dto.shopId", allEntries = true) public void updateProduct(ProductDTO dto) { Long shopId = StpKit.USER.getShopId(0L); @@ -321,6 +322,52 @@ public class ProductServiceImpl extends ServiceImpl impl productStockFlowService.saveFlow(flow); } + @Override + @Transactional(rollbackFor = Exception.class) + public void updateProductStock(ProductModifyStockParam param) { + Product entity = super.getById(param.getId()); + if (entity.getIsStock() == YesNoEnum.NO.value()) { + return; + } + if(!entity.getShopId().equals(param.getShopId())) { + return; + } + UpdateChain.of(Product.class) + .set(Product::getStockNumber, param.getStockNumber()) + .set(Product::getShopId, param.getShopId()) + .eq(Product::getId, param.getId()) + .update(); + // 记录商品库存流水 + ProductStockFlow flow = new ProductStockFlow(); + Long createUserId = StpKit.USER.getLoginIdAsLong(); + String createUserName = StpKit.USER.getAccount(); + flow.setCreateUserId(createUserId); + flow.setCreateUserName(createUserName); + flow.setShopId(param.getShopId()); + flow.setProductId(entity.getId()); + flow.setProductName(entity.getName()); + flow.setBeforeNumber(NumberUtil.toBigDecimal(entity.getStockNumber())); + BigDecimal inOutNumber = NumberUtil.sub(NumberUtil.toBigDecimal(entity.getStockNumber()), flow.getBeforeNumber()); + // 盘亏 + if (NumberUtil.isLess(inOutNumber, BigDecimal.ZERO)) { + flow.setInOutNumber(inOutNumber); + flow.setInOutType(InOutTypeEnum.OUT.value()); + flow.setInOutItem(InOutItemEnum.LOSS_OUT.value()); + } + // 盘盈 + if (NumberUtil.isGreater(inOutNumber, BigDecimal.ZERO)) { + flow.setInOutNumber(inOutNumber); + flow.setInOutType(InOutTypeEnum.IN.value()); + flow.setInOutItem(InOutItemEnum.WIN_IN.value()); + } + // 盘平 + if (NumberUtil.equals(inOutNumber, BigDecimal.ZERO)) { + return; + } + flow.setAfterNumber(NumberUtil.toBigDecimal(entity.getStockNumber())); + productStockFlowService.saveFlow(flow); + } + @Override @CacheEvict(value = {CacheConstant.USER_CLIENT_HOTS_PRODUCT, CacheConstant.USER_CLIENT_GROUPS_PRODUCT}, key = "#shopId", allEntries = true) public void deleteProduct(Long shopId, Long id) {