推进入出库功能的进度

pull/362/head
AlanScipio 2 years ago
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…
Cancel
Save