src/main/java/com/ruoyi/stock/controller/StockInRecordController.java
@@ -30,17 +30,7 @@ return AjaxResult.success(result); } @PostMapping("") @Log(title = "å ¥åºç®¡ç-æ°å¢å ¥åº", businessType = BusinessType.INSERT) public AjaxResult add(@RequestBody StockInRecordDto stockInRecordDto) { return AjaxResult.success(stockInRecordService.add(stockInRecordDto)); } @PutMapping("/{id}") @Log(title = "å ¥åºç®¡ç-æ´æ°å ¥åº", businessType = BusinessType.UPDATE) public AjaxResult update(@PathVariable("id") Long id, @RequestBody StockInRecordDto stockInRecordDto) { return AjaxResult.success(stockInRecordService.update(id, stockInRecordDto)); } @DeleteMapping("") @Log(title = "å ¥åºç®¡ç-å é¤å ¥åº", businessType = BusinessType.DELETE) src/main/java/com/ruoyi/stock/controller/StockInventoryController.java
@@ -40,6 +40,8 @@ @PostMapping("/addstockInventory") @ApiOperation("æ°å¢åºå") public R addstockInventory(StockInventoryDto stockInventoryDto) { stockInventoryDto.setRecordType("åæ ¼èªå®ä¹å ¥åº"); stockInventoryDto.setRecordId(0L); return R.ok(stockInventoryService.addstockInventory(stockInventoryDto)); } @@ -47,6 +49,8 @@ @PostMapping("/subtractStockInventory") @ApiOperation("æ£ååºå") public R subtractStockInventory(StockInventoryDto stockInventoryDto) { stockInventoryDto.setRecordType("åæ ¼èªå®ä¹åºåºåº"); stockInventoryDto.setRecordId(0L); return R.ok(stockInventoryService.subtractStockInventory(stockInventoryDto)); } } src/main/java/com/ruoyi/stock/controller/StockUninventoryController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,55 @@ package com.ruoyi.stock.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.framework.web.domain.R; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.service.StockInventoryService; import com.ruoyi.stock.service.StockUninventoryService; import io.swagger.annotations.ApiOperation; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * <p> * ä¸åæ ¼åºå表 å端æ§å¶å¨ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-22 10:17:45 */ @RestController @RequestMapping("/stockUninventory") public class StockUninventoryController { @Autowired private StockUninventoryService stockUninventoryService; @GetMapping("/pagestockUninventory") @ApiOperation("å页æ¥è¯¢åºå") public R pagestockUninventory(Page page, StockUninventoryDto stockUninventoryDto) { IPage<StockUninventoryDto> stockUninventoryDtoIPage = stockUninventoryService.pageStockUninventory(page, stockUninventoryDto); return R.ok(stockUninventoryDtoIPage); } @PostMapping("/addstockUninventory") @ApiOperation("æ°å¢åºå") public R addstockUninventory(StockUninventoryDto stockUninventoryDto) { stockUninventoryDto.setRecordType("ä¸åæ ¼èªå®ä¹å ¥åº"); stockUninventoryDto.setRecordId(0L); return R.ok(stockUninventoryService.addStockUninventory(stockUninventoryDto)); } @PostMapping("/subtractstockUninventory") @ApiOperation("æ£ååºå") public R subtractstockUninventory(StockUninventoryDto stockUninventoryDto) { stockUninventoryDto.setRecordType("ä¸åæ ¼èªå®ä¹åºåº"); stockUninventoryDto.setRecordId(0L); return R.ok(stockUninventoryService.subtractStockUninventory(stockUninventoryDto)); } } src/main/java/com/ruoyi/stock/dto/StockUninventoryDto.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,18 @@ package com.ruoyi.stock.dto; import com.ruoyi.stock.pojo.StockUninventory; import lombok.Data; @Data public class StockUninventoryDto extends StockUninventory { private String productName; private String model; private String unit; //å ¥åºç±»å private String recordType; //å ¥åºç±»å对åºçid private Long recordId; } src/main/java/com/ruoyi/stock/mapper/StockUninventoryMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,27 @@ package com.ruoyi.stock.mapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.pojo.StockUninventory; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; /** * <p> * ä¸åæ ¼åºå表 Mapper æ¥å£ * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-22 10:17:45 */ @Mapper public interface StockUninventoryMapper extends BaseMapper<StockUninventory> { IPage<StockUninventoryDto> pageStockUninventory(Page page, @Param("ew") StockUninventoryDto stockUninventoryDto); int updateSubtractStockUnInventory(StockUninventoryDto stockUninventoryDto); int updateAddStockUnInventory(StockUninventoryDto stockUninventoryDto); } src/main/java/com/ruoyi/stock/pojo/StockUninventory.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,49 @@ package com.ruoyi.stock.pojo; import com.baomidou.mybatisplus.annotation.FieldFill; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableName; import java.io.Serializable; import java.math.BigDecimal; import java.time.LocalDateTime; import io.swagger.annotations.ApiModel; import io.swagger.annotations.ApiModelProperty; import lombok.Getter; import lombok.Setter; /** * <p> * ä¸åæ ¼åºå表 * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-22 10:17:45 */ @Getter @Setter @TableName("stock_uninventory") @ApiModel(value = "StockUninventory对象", description = "ä¸åæ ¼åºå表") public class StockUninventory implements Serializable { private static final long serialVersionUID = 1L; @ApiModelProperty("主é®id") private Long id; @ApiModelProperty("è§æ ¼id") private Long productModelId; @ApiModelProperty("æ°é") private BigDecimal qualitity; @TableField(fill = FieldFill.INSERT) private LocalDateTime createTime; @ApiModelProperty("æ´æ°æ¶é´") @TableField(fill = FieldFill.INSERT_UPDATE) private Integer updateTime; @ApiModelProperty("çæ¬å·") private Integer version; } src/main/java/com/ruoyi/stock/service/StockInRecordService.java
@@ -16,4 +16,5 @@ int update(Long id, StockInRecordDto stockInRecordDto); int batchDelete(List<Long> ids); } src/main/java/com/ruoyi/stock/service/StockUninventoryService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package com.ruoyi.stock.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.pojo.StockUninventory; import com.baomidou.mybatisplus.extension.service.IService; /** * <p> * ä¸åæ ¼åºå表 æå¡ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-22 10:17:45 */ public interface StockUninventoryService extends IService<StockUninventory> { IPage<StockUninventoryDto> pageStockUninventory(Page page, StockUninventoryDto stockUninventoryDto); Integer addStockUninventory(StockUninventoryDto stockUninventoryDto); Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto); } src/main/java/com/ruoyi/stock/service/impl/StockInRecordServiceImpl.java
@@ -10,10 +10,13 @@ import com.ruoyi.staff.pojo.StaffOnJob; import com.ruoyi.stock.dto.StockInRecordDto; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.mapper.StockInRecordMapper; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.mapper.StockUninventoryMapper; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.pojo.StockInventory; import com.ruoyi.stock.pojo.StockUninventory; import com.ruoyi.stock.service.StockInRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -27,6 +30,8 @@ private StockInRecordMapper stockInRecordMapper; @Autowired private StockInventoryMapper stockInventoryMapper; @Autowired private StockUninventoryMapper stockUninventoryMapper; @Override public IPage<StockInRecordDto> listPage(Page page, StockInRecordDto stockInRecordDto) { @@ -63,14 +68,26 @@ public int batchDelete(List<Long> ids) { for (Long id : ids) { StockInRecord stockInRecord = stockInRecordMapper.selectById(id); StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, id)); if (stockInventory == null) { throw new BaseException("è¯¥å ¥åºè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockInRecord.getStockInNum()); stockInventoryMapper.updateSubtractStockInventory(stockInRecordDto); if (stockInRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockInRecord.getProductModelId())); if (stockInventory == null) { throw new BaseException("åºåè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockInRecord.getStockInNum()); stockInventoryMapper.updateAddStockInventory(stockInRecordDto); } }else if (stockInRecord.getType().equals("1")) { StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockInRecord.getProductModelId())); if (stockUninventory == null) { throw new BaseException("åºåè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); stockUninventoryDto.setQualitity(stockInRecord.getStockInNum()); stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); } } } return stockInRecordMapper.deleteBatchIds(ids); src/main/java/com/ruoyi/stock/service/impl/StockOutRecordServiceImpl.java
@@ -9,11 +9,14 @@ import com.ruoyi.common.utils.bean.BeanUtils; import com.ruoyi.stock.dto.StockInventoryDto; import com.ruoyi.stock.dto.StockOutRecordDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.mapper.StockInventoryMapper; import com.ruoyi.stock.mapper.StockOutRecordMapper; import com.ruoyi.stock.mapper.StockUninventoryMapper; import com.ruoyi.stock.pojo.StockInRecord; import com.ruoyi.stock.pojo.StockInventory; import com.ruoyi.stock.pojo.StockOutRecord; import com.ruoyi.stock.pojo.StockUninventory; import com.ruoyi.stock.service.StockOutRecordService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -34,6 +37,8 @@ private StockOutRecordMapper stockOutRecordMapper; @Autowired private StockInventoryMapper stockInventoryMapper; @Autowired private StockUninventoryMapper stockUninventoryMapper; @Override public IPage<StockOutRecordDto> listPage(Page page, StockOutRecordDto stockOutRecordDto) { @@ -66,14 +71,26 @@ public int batchDelete(List<Long> ids) { for (Long id : ids) { StockOutRecord stockOutRecord = stockOutRecordMapper.selectById(id); StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, id)); if (stockInventory == null) { throw new BaseException("è¯¥å ¥åºè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockOutRecord.getStockOutNum()); stockInventoryMapper.updateAddStockInventory(stockInRecordDto); if (stockOutRecord.getType().equals("0")) { StockInventory stockInventory = stockInventoryMapper.selectOne(new LambdaQueryWrapper<StockInventory>().eq(StockInventory::getProductModelId, stockOutRecord.getProductModelId())); if (stockInventory == null) { throw new BaseException("åºåè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockInventoryDto stockInRecordDto = new StockInventoryDto(); stockInRecordDto.setProductModelId(stockInventory.getProductModelId()); stockInRecordDto.setQualitity(stockOutRecord.getStockOutNum()); stockInventoryMapper.updateAddStockInventory(stockInRecordDto); } }else if (stockOutRecord.getType().equals("1")) { StockUninventory stockUninventory = stockUninventoryMapper.selectOne(new LambdaQueryWrapper<StockUninventory>().eq(StockUninventory::getProductModelId, stockOutRecord.getProductModelId())); if (stockUninventory == null) { throw new BaseException("åºåè®°å½ä¸æ²¡æå¯¹åºç产å,æ æ³å é¤!!!"); }else { StockUninventoryDto stockUninventoryDto = new StockUninventoryDto(); stockUninventoryDto.setProductModelId(stockUninventory.getProductModelId()); stockUninventoryDto.setQualitity(stockOutRecord.getStockOutNum()); stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); } } } return stockOutRecordMapper.deleteBatchIds(ids); src/main/java/com/ruoyi/stock/service/impl/StockUninventoryServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package com.ruoyi.stock.service.impl; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.stock.dto.StockInRecordDto; import com.ruoyi.stock.dto.StockOutRecordDto; import com.ruoyi.stock.dto.StockUninventoryDto; import com.ruoyi.stock.pojo.StockInventory; import com.ruoyi.stock.pojo.StockUninventory; import com.ruoyi.stock.mapper.StockUninventoryMapper; import com.ruoyi.stock.service.StockInRecordService; import com.ruoyi.stock.service.StockOutRecordService; import com.ruoyi.stock.service.StockUninventoryService; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; /** * <p> * ä¸åæ ¼åºå表 æå¡å®ç°ç±» * </p> * * @author è¯å¯¼è½¯ä»¶ï¼æ±èï¼æéå ¬å¸ * @since 2026-01-22 10:17:45 */ @Service public class StockUninventoryServiceImpl extends ServiceImpl<StockUninventoryMapper, StockUninventory> implements StockUninventoryService { private StockUninventoryMapper stockUninventoryMapper; private StockOutRecordService stockOutRecordService; private StockInRecordService stockInRecordService; @Override public IPage<StockUninventoryDto> pageStockUninventory(Page page, StockUninventoryDto stockUninventoryDto) { return stockUninventoryMapper.pageStockUninventory(page, stockUninventoryDto); } @Override @Transactional(rollbackFor = Exception.class) public Integer addStockUninventory(StockUninventoryDto stockUninventoryDto) { //æ°å¢å ¥åºè®°å½åæ·»å åºå StockInRecordDto stockInRecordDto = new StockInRecordDto(); stockInRecordDto.setRecordId(stockUninventoryDto.getRecordId()); stockInRecordDto.setRecordType(stockUninventoryDto.getRecordType()); stockInRecordDto.setStockInNum(stockUninventoryDto.getQualitity()); stockInRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); stockInRecordDto.setType("1"); stockInRecordService.add(stockInRecordDto); //åè¿è¡æ°å¢åºåæ°éåºå //å æ¥è¯¢åºå表ä¸çäº§åæ¯å¦åå¨ï¼ä¸å卿°å¢ï¼å卿´æ° StockUninventory oldStockUnInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); if (ObjectUtils.isEmpty(oldStockUnInventory)) { StockUninventory newStockUnInventory = new StockUninventory(); newStockUnInventory.setProductModelId(stockUninventoryDto.getProductModelId()); newStockUnInventory.setQualitity(stockUninventoryDto.getQualitity()); newStockUnInventory.setVersion(1); stockUninventoryMapper.insert(newStockUnInventory); }else { stockUninventoryMapper.updateAddStockUnInventory(stockUninventoryDto); } return 1; } @Override @Transactional(rollbackFor = Exception.class) public Integer subtractStockUninventory(StockUninventoryDto stockUninventoryDto) { // æ°å¢åºåºè®°å½ StockOutRecordDto stockOutRecordDto = new StockOutRecordDto(); stockOutRecordDto.setRecordId(stockUninventoryDto.getRecordId()); stockOutRecordDto.setRecordType(stockUninventoryDto.getRecordType()); stockOutRecordDto.setStockOutNum(stockUninventoryDto.getQualitity()); stockOutRecordDto.setProductModelId(stockUninventoryDto.getProductModelId()); stockOutRecordService.add(stockOutRecordDto); StockUninventory oldStockInventory = stockUninventoryMapper.selectOne(new QueryWrapper<StockUninventory>().lambda().eq(StockUninventory::getProductModelId, stockUninventoryDto.getProductModelId())); if (ObjectUtils.isEmpty(oldStockInventory)) { throw new RuntimeException("产ååºåä¸åå¨"); }else { stockUninventoryMapper.updateSubtractStockUnInventory(stockUninventoryDto); } return 1; } } src/main/resources/mapper/stock/StockInRecordMapper.xml
@@ -20,6 +20,9 @@ <if test="params.productName != null and params.productName != ''"> and p.product_name like concat('%',#{params.productName},'%') </if> <if test="params.type != null and params.type != ''"> and sir.type = #{params.type} </if> </where> order by sir.id desc </select> src/main/resources/mapper/stock/StockOutRecordMapper.xml
@@ -35,6 +35,9 @@ <if test="params.productName != null and params.productName != ''"> and p.product_name like concat('%',#{param.productName},'%') </if> <if test="params.type != null and params.type != ''"> and sor.type = #{params.type} </if> </where> order by sor.id desc </select> src/main/resources/mapper/stock/StockUninventoryMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,52 @@ <?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.ruoyi.stock.mapper.StockUninventoryMapper"> <!-- éç¨æ¥è¯¢æ å°ç»æ --> <resultMap id="BaseResultMap" type="com.ruoyi.stock.pojo.StockUninventory"> <result column="id" property="id" /> <result column="product_model_id" property="productModelId" /> <result column="qualitity" property="qualitity" /> <result column="create_time" property="createTime" /> <result column="update_time" property="updateTime" /> <result column="version" property="version" /> </resultMap> <update id="updateSubtractStockUnInventory"> update stock_inventory <set> <if test="ew.qualitity != null"> qualitity = qualitity - #{ew.qualitity}, </if> <if test="ew.version != null"> version = version + 1, </if> </set> where product_model_id = #{ew.productModelId} and qualitity >= #{ew.qualitity} </update> <update id="updateAddStockUnInventory"> update stock_inventory <set> <if test="ew.qualitity != null"> qualitity = qualitity + #{ew.qualitity}, </if> <if test="ew.version != null"> version = version + 1, </if> </set> where product_model_id = #{ew.productModelId} </update> <select id="pageStockUninventory" resultType="com.ruoyi.stock.dto.StockUninventoryDto"> select su.*, pm.model, pm.unit, p.product_name from stock_uninventory su left join product_model pm on su.product_model_id = pm.id left join product p on pm.product_id = p.id where 1 = 1 <if test="ew.productName != null and ew.productName !=''"> and p.product_name like concat('%',#{ew.productName},'%') </if> </select> </mapper>