推进入出库功能的进度
parent
603803f5e7
commit
f9f895c518
|
|
@ -61,6 +61,8 @@ public class BaseStock extends ExtBaseEntity implements Serializable {
|
|||
*/
|
||||
private String pkgUnitName;
|
||||
|
||||
//==================== ↓↓↓↓↓↓ 扩展方法 ↓↓↓↓↓↓ ====================
|
||||
|
||||
//==================== ↓↓↓↓↓↓ 表字段 ↓↓↓↓↓↓ ====================
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,16 +1,23 @@
|
|||
package com.ruoyi.wms.service.stock;
|
||||
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.common.core.web.domain.ExtBaseEntity;
|
||||
import com.ruoyi.wms.domain.BaseStock;
|
||||
import com.ruoyi.wms.mapper.stock.BaseStockDynamicSqlSupport;
|
||||
import com.ruoyi.wms.mapper.stock.BaseStockExtMapper;
|
||||
import com.ruoyi.wms.mapper.stock.BaseStockMapper;
|
||||
import jakarta.annotation.Resource;
|
||||
import org.mybatis.dynamic.sql.SqlBuilder;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.mybatis.dynamic.sql.render.RenderingStrategies;
|
||||
import org.mybatis.dynamic.sql.select.render.SelectStatementProvider;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
import java.util.Queue;
|
||||
import java.util.concurrent.ConcurrentLinkedQueue;
|
||||
|
||||
/**
|
||||
* 基本库存Service业务层处理
|
||||
|
|
@ -21,10 +28,14 @@ import java.util.Optional;
|
|||
@Service
|
||||
public class BaseStockServiceImpl implements IBaseStockService {
|
||||
|
||||
@Autowired
|
||||
@Resource
|
||||
private BaseStockMapper baseStockMapper;
|
||||
@Resource
|
||||
private BaseStockExtMapper baseStockExtMapper;
|
||||
@Resource
|
||||
private IInvTransHisService invTransHisService;
|
||||
|
||||
private final Queue<BaseStock> dataQueue = new ConcurrentLinkedQueue<>();
|
||||
|
||||
/**
|
||||
* 查询基本库存
|
||||
|
|
@ -35,11 +46,11 @@ public class BaseStockServiceImpl implements IBaseStockService {
|
|||
@Override
|
||||
public BaseStock selectBaseStockByPK(String whsCd, String stgBinCd, String itemCd, String lotNo, String subLotNo) {
|
||||
Optional<BaseStock> result = baseStockMapper.selectOne(dsl ->
|
||||
dsl.where(BaseStockDynamicSqlSupport.whsCd, SqlBuilder.isEqualTo(whsCd))
|
||||
.and(BaseStockDynamicSqlSupport.stgBinCd, SqlBuilder.isEqualTo(stgBinCd))
|
||||
.and(BaseStockDynamicSqlSupport.itemCd, SqlBuilder.isEqualTo(itemCd))
|
||||
.and(BaseStockDynamicSqlSupport.lotNo, SqlBuilder.isEqualTo(lotNo))
|
||||
.and(BaseStockDynamicSqlSupport.subLotNo, SqlBuilder.isEqualTo(subLotNo))
|
||||
dsl.where(BaseStockDynamicSqlSupport.whsCd, SqlBuilder.isEqualTo(whsCd))
|
||||
.and(BaseStockDynamicSqlSupport.stgBinCd, SqlBuilder.isEqualTo(stgBinCd))
|
||||
.and(BaseStockDynamicSqlSupport.itemCd, SqlBuilder.isEqualTo(itemCd))
|
||||
.and(BaseStockDynamicSqlSupport.lotNo, SqlBuilder.isEqualTo(lotNo))
|
||||
.and(BaseStockDynamicSqlSupport.subLotNo, SqlBuilder.isEqualTo(subLotNo))
|
||||
);
|
||||
return result.orElse(null);
|
||||
}
|
||||
|
|
@ -55,4 +66,86 @@ public class BaseStockServiceImpl implements IBaseStockService {
|
|||
return baseStockExtMapper.selectPageList(baseStock);
|
||||
}
|
||||
|
||||
/**
|
||||
* 入库
|
||||
*
|
||||
* @param baseStock 库存数据
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public AjaxResult instock(BaseStock baseStock) {
|
||||
//TODO 参数检查
|
||||
|
||||
//队列维持数据一致性
|
||||
dataQueue.offer(baseStock);
|
||||
BaseStock data = dataQueue.remove();
|
||||
doInoutStock(data);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 出库
|
||||
*
|
||||
* @param baseStock 库存数据
|
||||
* @return 结果
|
||||
*/
|
||||
@Transactional
|
||||
@Override
|
||||
public AjaxResult outstock(BaseStock baseStock) {
|
||||
//TODO 参数检查
|
||||
|
||||
//队列维持数据一致性
|
||||
dataQueue.offer(baseStock);
|
||||
BaseStock data = dataQueue.remove();
|
||||
doInoutStock(data);
|
||||
return AjaxResult.success();
|
||||
}
|
||||
|
||||
/**
|
||||
* 入出库操作
|
||||
*/
|
||||
private void doInoutStock(BaseStock form) {
|
||||
//查询库存
|
||||
List<BaseStock> stockList = queryWhenInoutStock(form);
|
||||
//更新库存
|
||||
if (stockList.isEmpty()) {
|
||||
|
||||
//insert
|
||||
baseStockMapper.insert(form);
|
||||
//TODO 写入出库履历
|
||||
} else {
|
||||
//update
|
||||
BaseStock oldRecord = stockList.getFirst();
|
||||
BigDecimal newStdUnitQty = oldRecord.getStdUnitQty().add(form.getStdUnitQty());
|
||||
BigDecimal newPkgUnitQty = oldRecord.getPkgUnitQty().add(form.getPkgUnitQty());
|
||||
oldRecord.setStdUnitQty(newStdUnitQty);
|
||||
oldRecord.setPkgUnitQty(newPkgUnitQty);
|
||||
baseStockMapper.updateByPrimaryKey(oldRecord);
|
||||
//TODO 写入出库履历
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 入出库时查询库存
|
||||
*
|
||||
* @param form 查询条件
|
||||
* @return 库存数据
|
||||
*/
|
||||
private List<BaseStock> queryWhenInoutStock(BaseStock form) {
|
||||
SelectStatementProvider query = SqlBuilder.select(BaseStockMapper.selectList)
|
||||
.from(BaseStockDynamicSqlSupport.baseStock)
|
||||
.where(BaseStockDynamicSqlSupport.deleteFlag, SqlBuilder.isEqualTo(ExtBaseEntity.NOT_DELETE))
|
||||
.and(BaseStockDynamicSqlSupport.whsCd, SqlBuilder.isEqualTo(form.getWhsCd()))
|
||||
.and(BaseStockDynamicSqlSupport.stgBinCd, SqlBuilder.isEqualTo(form.getStgBinCd()))
|
||||
.and(BaseStockDynamicSqlSupport.itemCd, SqlBuilder.isEqualTo(form.getItemCd()))
|
||||
.and(BaseStockDynamicSqlSupport.lotNo, SqlBuilder.isEqualTo(form.getLotNo()))
|
||||
.and(BaseStockDynamicSqlSupport.subLotNo, SqlBuilder.isEqualTo(form.getSubLotNo()))
|
||||
.orderBy(BaseStockDynamicSqlSupport.createTime.descending())
|
||||
.limit(1)
|
||||
.build()
|
||||
.render(RenderingStrategies.MYBATIS3);
|
||||
return baseStockMapper.selectMany(query);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.ruoyi.wms.service.stock;
|
||||
|
||||
import com.ruoyi.common.core.web.domain.AjaxResult;
|
||||
import com.ruoyi.wms.domain.BaseStock;
|
||||
|
||||
import java.util.List;
|
||||
|
|
@ -28,4 +29,20 @@ public interface IBaseStockService {
|
|||
*/
|
||||
List<BaseStock> selectBaseStockList(BaseStock baseStock);
|
||||
|
||||
/**
|
||||
* 入库
|
||||
*
|
||||
* @param baseStock 库存数据
|
||||
* @return 结果
|
||||
*/
|
||||
AjaxResult instock(BaseStock baseStock) throws Exception;
|
||||
|
||||
/**
|
||||
* 出库
|
||||
*
|
||||
* @param baseStock 库存数据
|
||||
* @return 结果
|
||||
*/
|
||||
AjaxResult outstock(BaseStock baseStock) throws Exception;
|
||||
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue