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 findPage(PageWrap pageWrap) { PageHelper.startPage(pageWrap.getPage(), pageWrap.getCapacity()); List 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(); 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 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(); 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 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); } }