入库申请->入库审核流程:
提交按键定义位置:src\views\purchase\rurchase\RurchaseAdd.vue
{{ item.name }}
新增物品
后台API地址:/cos/rurchase-request/rurchasePut
后台服务方法名:cc.mrbird.febs.cos.service.impl.RurchaseRequestServiceImpl#rurchasePut
后台java文件路径:D:\code\javaspringboot\dinningroomsupply\SuppliesManagementSystem\backend\src\main\java\cc\mrbird\febs\cos\service\impl\RurchaseRequestServiceImpl.java
存在的bug:80~82行,更新 stock_info表的当前物品库存总数,条件为限定is_in=0,导致is_in=1(入库)和is_in=2(出库)的历史出入库数据都被修改
stockInfoService.update(Wrappers.
.set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount())
.set(StockInfo::getPrice, stockInfo.getPrice())
.eq(StockInfo::getName, stockInfo.getName())); //注意,这里更新条件用的是name不是id
从控制台打印的sql语句可以看出,更新语句的条件有误:
2023-11-22 16:26:31 | INFO | http-nio-9527-exec-10 | p6spy | 2023-11-22 16:26:31 | 耗时 8 ms | SQL 语句: UPDATE stock_info SET amount=14,price=11.00 WHERE name = 'test';
package cc.mrbird.febs.cos.service.impl;
import cc.mrbird.febs.cos.entity.GoodsBelong;
import cc.mrbird.febs.cos.entity.RurchaseRequest;
import cc.mrbird.febs.cos.dao.RurchaseRequestMapper;
import cc.mrbird.febs.cos.entity.StockInfo;
import cc.mrbird.febs.cos.entity.StockPut;
import cc.mrbird.febs.cos.service.IGoodsBelongService;
import cc.mrbird.febs.cos.service.IRurchaseRequestService;
import cc.mrbird.febs.cos.service.IStockInfoService;
import cc.mrbird.febs.cos.service.IStockPutService;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
/**
* @author FanK
*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class RurchaseRequestServiceImpl extends ServiceImpl implements IRurchaseRequestService {
private final IGoodsBelongService goodsBelongService;
private final IStockPutService stockPutService;
private final IStockInfoService stockInfoService;
@Override
public IPage> rurchaseRequestByPage(Page page, RurchaseRequest rurchaseRequest) {
return baseMapper.rurchaseRequestByPage(page, rurchaseRequest);
}
@Override
public Boolean rurchaseRequestAdd(RurchaseRequest rurchaseRequest) {
rurchaseRequest.setNum("RUR-"+new Date().getTime());
JSONArray array = JSONUtil.parseArray(rurchaseRequest.getGoods());
List goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);
rurchaseRequest.setStep(0);
this.save(rurchaseRequest);
goodsBelongList.forEach(item -> {
item.setCreateDate(DateUtil.formatDateTime(new Date()));
item.setNum(rurchaseRequest.getNum());
});
return goodsBelongService.saveBatch(goodsBelongList);
}
@Override
public Boolean rurchasePut(RurchaseRequest rurchaseRequest) {
JSONArray array = JSONUtil.parseArray(rurchaseRequest.getGoods());
List goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);
// 添加入库单
StockPut stockPut = new StockPut();
stockPut.setContent(rurchaseRequest.getRurchaseContent());
stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));
stockPut.setCustodian(rurchaseRequest.getCustodian());
stockPut.setPutUser(rurchaseRequest.getPutUser());
stockPut.setPrice(rurchaseRequest.getPrice());
stockPut.setNum("PUT-"+new Date().getTime());
stockPutService.save(stockPut);
goodsBelongList.forEach(item -> {
item.setCreateDate(DateUtil.formatDateTime(new Date()));
item.setNum(stockPut.getNum());
// 判断库房物品是否存在
StockInfo stockInfo = stockInfoService.getOne(Wrappers.lambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));
if (stockInfo != null) {
// 更改库房数据 这句话有bug,没有限定is_in=0
stockInfoService.update(Wrappers.lambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount())
.set(StockInfo::getPrice, stockInfo.getPrice())
.eq(StockInfo::getName, stockInfo.getName())); // 更新条件应该用id
} else {
// 重新添加库房数据
StockInfo stock = new StockInfo();
stock.setName(item.getName());
stock.setAmount(item.getAmount());
stock.setCreateDate(DateUtil.formatDateTime(new Date()));
stock.setType(item.getType());
stock.setTypeId(item.getTypeId());
stock.setUnit(item.getUnit());
stock.setPrice(item.getPrice());
stock.setIsIn(0);
stockInfo = stock;
stockInfoService.save(stock);
}
// 添加入库记录
StockInfo stockInfoPut = new StockInfo();
stockInfoPut.setParentId(stockInfo.getId());
stockInfoPut.setName(item.getName());
stockInfoPut.setAmount(item.getAmount());
stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));
stockInfoPut.setType(item.getType());
stockInfoPut.setTypeId(item.getTypeId());
stockInfoPut.setUnit(item.getUnit());
stockInfoPut.setPrice(item.getPrice());
stockInfoPut.setIsIn(1);
stockInfoService.save(stockInfoPut);
// 添加所属信息
GoodsBelong goodsBelong = new GoodsBelong();
goodsBelong.setNum(stockPut.getNum());
goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));
goodsBelong.setAmount(item.getAmount());
goodsBelong.setName(item.getName());
goodsBelong.setPrice(item.getPrice());
goodsBelong.setType(item.getType());
goodsBelong.setTypeId(item.getTypeId());
goodsBelong.setUnit(item.getUnit());
goodsBelongService.save(goodsBelong);
});
// 修改状态
this.update(Wrappers.lambdaUpdate().set(RurchaseRequest::getStep, 1).eq(RurchaseRequest::getId, rurchaseRequest.getId()));
return true;
}
}
直接入库流程: 前台代码定义位置:src\views\purchase\request\RequestAdd.vue
后台API地址:/cos/stock-info/put
后台服务方法名:cc.mrbird.febs.cos.service.impl.StockInfoServiceImpl#stockPut
后台java文件路径:D:\code\javaspringboot\dinningroomsupply\SuppliesManagementSystem\backend\src\main\java\cc\mrbird\febs\cos\service\impl\StockInfoServiceImpl.java
// 判断库房物品是否存在 StockInfo stockInfo = this.getOne(Wrappers.
if (stockInfo != null) { // 更改库房数据
this.update(Wrappers.
.set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount()) .set(StockInfo::getPrice, stockInfo.getPrice())
.eq(StockInfo::getId, stockInfo.getId())); //注意,这里更新条件用的是id
package cc.mrbird.febs.cos.service.impl;
import cc.mrbird.febs.cos.entity.GoodsBelong;
import cc.mrbird.febs.cos.entity.StockInfo;
import cc.mrbird.febs.cos.dao.StockInfoMapper;
import cc.mrbird.febs.cos.entity.StockPut;
import cc.mrbird.febs.cos.entity.StudentInfo;
import cc.mrbird.febs.cos.service.*;
import cn.hutool.core.date.DateUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import lombok.RequiredArgsConstructor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.Date;
import java.util.LinkedHashMap;
import java.util.List;
/**
* @author FanK
*/
@Service
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class StockInfoServiceImpl extends ServiceImpl implements IStockInfoService {
private final IStockPutService stockPutService;
private final IGoodsBelongService goodsBelongService;
private final IBulletinInfoService bulletinInfoService;
private final IStudentInfoService studentInfoService;
@Override
public IPage> stockInfoByPage(Page page, StockInfo stockInfo) {
return baseMapper.stockInfoByPage(page, stockInfo);
}
@Override
public Boolean stockPut(String goods, String custodian, String putUser, String content, BigDecimal price) {
// 添加入库单
StockPut stockPut = new StockPut();
stockPut.setContent(content);
stockPut.setCreateDate(DateUtil.formatDateTime(new Date()));
stockPut.setCustodian(custodian);
stockPut.setPutUser(putUser);
stockPut.setPrice(price);
stockPut.setNum("PUT-"+new Date().getTime());
stockPutService.save(stockPut);
// 添加入库
JSONArray array = JSONUtil.parseArray(goods);
List goodsBelongList = JSONUtil.toList(array, GoodsBelong.class);
goodsBelongList.forEach(item -> {
item.setCreateDate(DateUtil.formatDateTime(new Date()));
item.setNum(stockPut.getNum());
// 判断库房物品是否存在
StockInfo stockInfo = this.getOne(Wrappers.lambdaQuery().eq(StockInfo::getName, item.getName()).eq(StockInfo::getTypeId, item.getTypeId()).eq(StockInfo::getIsIn, 0));
if (stockInfo != null) {
// 更改库房数据
this.update(Wrappers.lambdaUpdate().set(StockInfo::getAmount, stockInfo.getAmount()+item.getAmount())
.set(StockInfo::getPrice, stockInfo.getPrice())
.eq(StockInfo::getId, stockInfo.getId())); // 这里用的id就不会出现误修改
} else {
// 重新添加库房数据
StockInfo stock = new StockInfo();
stock.setName(item.getName());
stock.setAmount(item.getAmount());
stock.setCreateDate(DateUtil.formatDateTime(new Date()));
stock.setType(item.getType());
stock.setTypeId(item.getTypeId());
stock.setUnit(item.getUnit());
stock.setPrice(item.getPrice());
stock.setIsIn(0);
stockInfo = stock;
this.save(stock);
}
// 添加入库记录
StockInfo stockInfoPut = new StockInfo();
stockInfoPut.setParentId(stockInfo.getId());
stockInfoPut.setName(item.getName());
stockInfoPut.setAmount(item.getAmount());
stockInfoPut.setCreateDate(DateUtil.formatDateTime(new Date()));
stockInfoPut.setType(item.getType());
stockInfoPut.setTypeId(item.getTypeId());
stockInfoPut.setUnit(item.getUnit());
stockInfoPut.setPrice(item.getPrice());
stockInfoPut.setIsIn(1);
this.save(stockInfoPut);
// 添加所属信息
GoodsBelong goodsBelong = new GoodsBelong();
goodsBelong.setNum(stockPut.getNum());
goodsBelong.setCreateDate(DateUtil.formatDateTime(new Date()));
goodsBelong.setAmount(item.getAmount());
goodsBelong.setName(item.getName());
goodsBelong.setPrice(item.getPrice());
goodsBelong.setType(item.getType());
goodsBelong.setTypeId(item.getTypeId());
goodsBelong.setUnit(item.getUnit());
goodsBelongService.save(goodsBelong);
});
return true;
}
@Override
public IPage> stockInfoDetailPage(Page page, StockInfo stockInfo) {
return baseMapper.stockInfoDetailPage(page, stockInfo);
}
@Override
public IPage> getGoodsPutByUserId(Page page, StockInfo stockInfo) {
return baseMapper.getGoodsPutByUserId(page, stockInfo);
}
@Override
public LinkedHashMap home(Integer type, Integer userId) {
LinkedHashMap result = new LinkedHashMap<>();
result.put("bulletinList", bulletinInfoService.list());
if (type == 74) {
result.put("studentInfo", studentInfoService.getOne(Wrappers.lambdaQuery().eq(StudentInfo::getUserId, userId)));
}
result.put("stockPutRate", baseMapper.stockPutRate());
result.put("stockPutTypeRate", baseMapper.stockPutTypeRate());
result.put("stockOutRate", baseMapper.stockOutRate());
result.put("stockOutTypeRate", baseMapper.stockOutTypeRate());
result.put("stockInfo", baseMapper.stockInfoByMonth());
return result;
}
}
修复bug后,数据库查询正常了