package doumeemes.service.ext.impl;
|
|
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
import doumeemes.core.constants.ResponseStatus;
|
import doumeemes.core.exception.BusinessException;
|
import doumeemes.core.model.LoginUserInfo;
|
import doumeemes.core.model.PageData;
|
import doumeemes.core.model.PageWrap;
|
import doumeemes.core.utils.Constants;
|
import doumeemes.dao.business.WOutboundDetailMapper;
|
import doumeemes.dao.business.WStockMapper;
|
import doumeemes.dao.business.WarehouseMapper;
|
import doumeemes.dao.business.model.*;
|
import doumeemes.dao.ext.WOutboundDetailExtMapper;
|
import doumeemes.dao.ext.dto.QueryWStockRecordExtDTO;
|
import doumeemes.dao.ext.vo.WStockRecordExtListVO;
|
import doumeemes.service.ext.WStockRecordExtService;
|
import doumeemes.dao.ext.WStockRecordExtMapper;
|
import com.github.pagehelper.PageHelper;
|
import com.github.pagehelper.PageInfo;
|
import org.apache.commons.lang3.StringUtils;
|
import org.apache.xpath.operations.String;
|
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
|
import java.math.BigDecimal;
|
import java.util.Date;
|
import java.util.List;
|
import java.util.Objects;
|
|
/**
|
* 物料库存余额变动记录表ExtService实现
|
* @author 江蹄蹄
|
* @date 2022/09/23 14:39
|
*/
|
@Service
|
public class WStockRecordExtServiceImpl implements WStockRecordExtService {
|
|
@Autowired
|
private WStockRecordExtMapper wStockRecordExtMapper;
|
@Autowired
|
private WOutboundDetailMapper wOutboundDetailMapper;
|
@Autowired
|
private WarehouseMapper warehouseMapper;
|
@Autowired
|
private WStockMapper wStockMapper;
|
|
@Override
|
public void insertWStockRecord(WStockRecord wStockRecord){
|
wStockRecordExtMapper.insert(wStockRecord);
|
}
|
|
@Override
|
public PageData<WStockRecordExtListVO> findPage(PageWrap<QueryWStockRecordExtDTO> pageWrap) {
|
PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity());
|
List<WStockRecordExtListVO> result = wStockRecordExtMapper.selectList(pageWrap.getModel());
|
return PageData.from(new PageInfo<>(result));
|
}
|
|
|
/**
|
* 库存变动记录通用类
|
* @param optType 操作类别:0 - 出库 ;1 入库
|
* @param detailId 操作行项目主键
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void saveRecord(Integer optType, Integer detailId, LoginUserInfo userInfo){
|
WOutboundDetail wOutboundDetail = wOutboundDetailMapper.selectById(detailId);
|
Warehouse warehouse =warehouseMapper.selectById(wOutboundDetail.getWarehouseId());
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutboundDetail.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutboundDetail.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundDetail.getQualityType());
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getProcedureId()),"procedure_id",wOutboundDetail.getProcedureId());
|
wrapper.apply(Objects.isNull(wOutboundDetail.getProcedureId())," procedure_id is null ");
|
if(StringUtils.isNotBlank(wOutboundDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getLocationId())&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", wOutboundDetail.getLocationId());
|
wrapper.eq("DELETED",0);
|
WStock wStock = new WStock();
|
List<WStock> wStockList = wStockMapper.selectList(wrapper);
|
if(optType==Constants.ZERO){
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "库存信息异常:【" + warehouse.getId() + "】 - 【" + wOutboundDetail.getLocationId() + "】 - 【" + wOutboundDetail.getMaterialId() + "】- 【" + wOutboundDetail.getBatch() + "】");
|
}else{
|
wStock = wStockList.get(0);
|
}
|
}else{
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(userInfo.getId());
|
newWStock.setRootDepartId(wOutboundDetail.getRootDepartId());
|
newWStock.setWarehouseId(wOutboundDetail.getWarehouseId());
|
newWStock.setQualityType(wOutboundDetail.getQualityType());
|
if(!Objects.isNull(wOutboundDetail.getProcedureId())){
|
newWStock.setProcedureId(wOutboundDetail.getProcedureId());
|
}
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(wOutboundDetail.getLocationId());
|
}
|
newWStock.setMaterialId(wOutboundDetail.getMaterialId());
|
newWStock.setBatch(wOutboundDetail.getBatch());
|
newWStock.setUnitId(wOutboundDetail.getUnitId());
|
newWStock.setNum(BigDecimal.ZERO);
|
wStockMapper.insert(newWStock);
|
wStock = newWStock;
|
}else{
|
wStock = wStockList.get(0);
|
}
|
}
|
WStockRecord wStockRecord = new WStockRecord();
|
wStockRecord.setId(null);
|
wStockRecord.setDeleted(wStock.getDeleted());
|
wStockRecord.setCreateUser(userInfo.getId());
|
wStockRecord.setCreateTime(new Date());
|
wStockRecord.setRootDepartId(wStock.getRootDepartId());
|
wStockRecord.setDepartId(warehouse.getDepartId());
|
wStockRecord.setMaterialId(wStock.getMaterialId());
|
wStockRecord.setUnitId(wStock.getUnitId());
|
wStockRecord.setLocationId(wStock.getLocationId());
|
wStockRecord.setWarehouseId(wStock.getWarehouseId());
|
if(StringUtils.isNotBlank(wStock.getBatch())){
|
wStockRecord.setBatch(wStock.getBatch());
|
}
|
if(!Objects.isNull(wStock.getProcedureId())){
|
wStockRecord.setProcedureId(wStock.getProcedureId());
|
}
|
wStockRecord.setQualityType(wStock.getQualityType());
|
wStockRecord.setChangeType(optType);
|
wStockRecord.setNum(wOutboundDetail.getDoneNum());
|
wStockRecord.setBeforNum(wStock.getNum());
|
if(optType == Constants.ZERO){
|
wStockRecord.setAfterNum(wStock.getNum().subtract(wOutboundDetail.getDoneNum()));
|
}else{
|
wStockRecord.setAfterNum(wStock.getNum().add(wOutboundDetail.getDoneNum()));
|
}
|
wStockRecord.setDetailId(detailId);
|
wStockRecord.setOutboundId(wOutboundDetail.getOutboundId());
|
wStockRecord.setWStockId(wStock.getId());
|
this.wStockRecordExtMapper.insert(wStockRecord);
|
}
|
|
|
/**
|
* 库存变动记录(记录无货位)通用类
|
* @param optType 操作类别:0 - 出库 ;1 入库
|
* @param detailId 操作行项目主键
|
*/
|
@Transactional(rollbackFor = Exception.class)
|
@Override
|
public void saveRecordNoLocationId(Integer optType, Integer detailId, LoginUserInfo userInfo,Integer locationId){
|
WOutboundDetail wOutboundDetail = wOutboundDetailMapper.selectById(detailId);
|
Warehouse warehouse =warehouseMapper.selectById(wOutboundDetail.getWarehouseId());
|
QueryWrapper wrapper = new QueryWrapper<WStock>();
|
wrapper.eq("ROOT_DEPART_ID", wOutboundDetail.getRootDepartId());
|
wrapper.eq("MATERIAL_ID", wOutboundDetail.getMaterialId());
|
wrapper.eq("WAREHOUSE_ID", wOutboundDetail.getWarehouseId());
|
wrapper.eq("QUALITY_TYPE", wOutboundDetail.getQualityType());
|
wrapper.eq(!Objects.isNull(wOutboundDetail.getProcedureId()),"procedure_id",wOutboundDetail.getProcedureId());
|
wrapper.apply(Objects.isNull(wOutboundDetail.getProcedureId())," procedure_id is null ");
|
if(StringUtils.isNotBlank(wOutboundDetail.getBatch())){
|
wrapper.eq("BATCH" , wOutboundDetail.getBatch());
|
}else{
|
wrapper.apply("BATCH is null ");
|
}
|
wrapper.eq(!Objects.isNull(locationId)&&warehouse.getUseLocation()==Constants.ONE,"LOCATION_ID", locationId);
|
wrapper.eq("DELETED",0);
|
WStock wStock = new WStock();
|
List<WStock> wStockList = wStockMapper.selectList(wrapper);
|
if(optType==Constants.ZERO){
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
throw new BusinessException(ResponseStatus.OBJECT_EMP.getCode(), "库存信息异常:【" + warehouse.getId() + "】 - 【" + locationId + "】 - 【" + wOutboundDetail.getMaterialId() + "】- 【" + wOutboundDetail.getBatch() + "】");
|
}else{
|
wStock = wStockList.get(0);
|
}
|
}else{
|
if(Objects.isNull(wStockList)||wStockList.size()==Constants.ZERO){
|
WStock newWStock = new WStock();
|
newWStock.setCreateTime(new Date());
|
newWStock.setCreateUser(userInfo.getId());
|
newWStock.setRootDepartId(wOutboundDetail.getRootDepartId());
|
newWStock.setWarehouseId(wOutboundDetail.getWarehouseId());
|
newWStock.setQualityType(wOutboundDetail.getQualityType());
|
if(!Objects.isNull(wOutboundDetail.getProcedureId())){
|
newWStock.setProcedureId(wOutboundDetail.getProcedureId());
|
}
|
//此仓库 开启仓位
|
if(warehouse.getUseLocation()==Constants.ONE){
|
newWStock.setLocationId(locationId);
|
}
|
newWStock.setMaterialId(wOutboundDetail.getMaterialId());
|
newWStock.setBatch(wOutboundDetail.getBatch());
|
newWStock.setUnitId(wOutboundDetail.getUnitId());
|
newWStock.setNum(BigDecimal.ZERO);
|
wStockMapper.insert(newWStock);
|
wStock = newWStock;
|
}else{
|
wStock = wStockList.get(0);
|
}
|
}
|
WStockRecord wStockRecord = new WStockRecord();
|
wStockRecord.setId(null);
|
wStockRecord.setDeleted(wStock.getDeleted());
|
wStockRecord.setCreateUser(userInfo.getId());
|
wStockRecord.setCreateTime(new Date());
|
wStockRecord.setRootDepartId(wStock.getRootDepartId());
|
wStockRecord.setDepartId(warehouse.getDepartId());
|
wStockRecord.setMaterialId(wStock.getMaterialId());
|
wStockRecord.setUnitId(wStock.getUnitId());
|
wStockRecord.setLocationId(wStock.getLocationId());
|
wStockRecord.setWarehouseId(wStock.getWarehouseId());
|
if(StringUtils.isNotBlank(wStock.getBatch())){
|
wStockRecord.setBatch(wStock.getBatch());
|
}
|
if(!Objects.isNull(wStock.getProcedureId())){
|
wStockRecord.setProcedureId(wStock.getProcedureId());
|
}
|
wStockRecord.setQualityType(wStock.getQualityType());
|
wStockRecord.setChangeType(optType);
|
wStockRecord.setNum(wOutboundDetail.getNum());
|
wStockRecord.setBeforNum(wStock.getNum());
|
if(optType == Constants.ZERO){
|
wStockRecord.setAfterNum(wStock.getNum().subtract(wOutboundDetail.getDoneNum()));
|
}else{
|
wStockRecord.setAfterNum(wStock.getNum().add(wOutboundDetail.getDoneNum()));
|
}
|
wStockRecord.setDetailId(detailId);
|
wStockRecord.setOutboundId(wOutboundDetail.getOutboundId());
|
wStockRecord.setWStockId(wStock.getId());
|
this.wStockRecordExtMapper.insert(wStockRecord);
|
}
|
}
|