|
|
|
@ -1,23 +1,33 @@
|
|
|
|
|
package com.chanko.yunxi.mes.module.heli.service.storagecheck;
|
|
|
|
|
|
|
|
|
|
import cn.hutool.core.lang.UUID;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storage.StorageDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheckmat.StorageCheckMatDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagelog.StorageLogDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagemat.StorageMatDO;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storage.StorageMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagecheckmat.StorageCheckMatMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagelog.StorageLogMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagemat.StorageMatMapper;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.service.storagecheckmat.StorageCheckMatService;
|
|
|
|
|
import io.swagger.v3.oas.models.security.SecurityScheme;
|
|
|
|
|
import org.springframework.stereotype.Service;
|
|
|
|
|
import javax.annotation.Resource;
|
|
|
|
|
import javax.print.DocFlavor;
|
|
|
|
|
|
|
|
|
|
import org.springframework.validation.annotation.Validated;
|
|
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
|
|
|
|
import java.time.LocalDateTime;
|
|
|
|
|
import java.util.*;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.controller.admin.storagecheck.vo.*;
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.dataobject.storagecheck.StorageCheckDO;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.pojo.PageResult;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.pojo.PageParam;
|
|
|
|
|
import com.chanko.yunxi.mes.framework.common.util.object.BeanUtils;
|
|
|
|
|
|
|
|
|
|
import com.chanko.yunxi.mes.module.heli.dal.mysql.storagecheck.StorageCheckMapper;
|
|
|
|
|
|
|
|
|
|
import static com.chanko.yunxi.mes.framework.common.exception.util.ServiceExceptionUtil.exception;
|
|
|
|
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_CHECK;
|
|
|
|
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.STOCK_IN;
|
|
|
|
|
import static com.chanko.yunxi.mes.module.heli.enums.CodeEnum.*;
|
|
|
|
|
import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
@ -29,9 +39,25 @@ import static com.chanko.yunxi.mes.module.heli.enums.ErrorCodeConstants.*;
|
|
|
|
|
@Validated
|
|
|
|
|
public class StorageCheckServiceImpl implements StorageCheckService {
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageLogMapper storageLogMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageMapper storageMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageMatMapper storageMatMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageCheckMatMapper storageCheckMatMapper;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageCheckMapper storageCheckMapper;
|
|
|
|
|
|
|
|
|
|
@Resource
|
|
|
|
|
private StorageCheckMatService storageCheckMatService;
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Long createStorageCheck(StorageCheckSaveReqVO createReqVO) {
|
|
|
|
|
// 插入
|
|
|
|
@ -78,4 +104,89 @@ public class StorageCheckServiceImpl implements StorageCheckService {
|
|
|
|
|
return storageCheckMapper.selectPage(pageReqVO);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@Override
|
|
|
|
|
public Boolean createStorageByCheckInfo(Long checkId){
|
|
|
|
|
|
|
|
|
|
// 获取盘点单据信息
|
|
|
|
|
StorageCheckDO storageCheckDO = this.getStorageCheck(checkId);
|
|
|
|
|
// 获取盘点单据物料信息
|
|
|
|
|
List<StorageCheckMatDO> storageCheckMats = storageCheckMatService.getStorageMatListByCheckId(checkId);
|
|
|
|
|
|
|
|
|
|
long hasStockIn = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()>0).count();
|
|
|
|
|
long hasStockOut = storageCheckMats.stream().filter(item->item.getStorageOkQty().subtract(item.getMatRest()).intValue()<0).count();
|
|
|
|
|
|
|
|
|
|
if(hasStockIn>0){
|
|
|
|
|
// 库存类型为入库
|
|
|
|
|
saveStorage(storageCheckDO,1);
|
|
|
|
|
}
|
|
|
|
|
if(hasStockOut>0){
|
|
|
|
|
// 库存类型为出库
|
|
|
|
|
saveStorage(storageCheckDO,2);
|
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
private void saveStorage(StorageCheckDO storageCheckDO,Integer stockType){
|
|
|
|
|
|
|
|
|
|
LocalDateTime current = LocalDateTime.now();
|
|
|
|
|
// 库存类型为stockType
|
|
|
|
|
StorageDO storageDO = new StorageDO();
|
|
|
|
|
storageDO.setStockType(stockType);
|
|
|
|
|
storageDO.setStockInType(1);
|
|
|
|
|
storageDO.setStockNo(UUID.fastUUID().toString(true));
|
|
|
|
|
storageDO.setHeaderNo(storageCheckDO.getStockNo());
|
|
|
|
|
storageDO.setStatus(2);
|
|
|
|
|
storageDO.setDescription(storageCheckDO.getDescription());
|
|
|
|
|
storageDO.setWhId(storageCheckDO.getWhId());
|
|
|
|
|
storageDO.setKeeper(storageCheckDO.getKeeper());
|
|
|
|
|
storageDO.setKeeperTime(current);
|
|
|
|
|
storageDO.setOutbound(storageCheckDO.getKeeper());
|
|
|
|
|
storageDO.setOutboundTime(current);
|
|
|
|
|
|
|
|
|
|
storageMapper.insert(storageDO);
|
|
|
|
|
storageDO.setStockNo(STOCK_IN.getCode(storageDO.getId().toString()));
|
|
|
|
|
storageMapper.updateById(storageDO);
|
|
|
|
|
|
|
|
|
|
saveStorageMat(storageCheckDO,storageDO.getId(),stockType);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private void saveStorageMat(StorageCheckDO storageCheckDO, Long stockId, Integer stockType){
|
|
|
|
|
|
|
|
|
|
List<StorageCheckMatDO> storageCheckMats = storageCheckMatMapper.selectListByCheckID(storageCheckDO.getId());
|
|
|
|
|
|
|
|
|
|
for(StorageCheckMatDO item : storageCheckMats){
|
|
|
|
|
|
|
|
|
|
StorageMatDO storageMatDO = new StorageMatDO();
|
|
|
|
|
storageMatDO.setStockId(stockId);
|
|
|
|
|
storageMatDO.setMatId(item.getMatId());
|
|
|
|
|
storageMatDO.setWhId(item.getWhId());
|
|
|
|
|
storageMatDO.setRgId(item.getRgId());
|
|
|
|
|
storageMatDO.setPnId(item.getPnId());
|
|
|
|
|
storageMatDO.setStorageOkQty(item.getStorageOkQty());
|
|
|
|
|
storageMatDO.setLotNo(item.getLotNo());
|
|
|
|
|
|
|
|
|
|
// 插入出入库物料表
|
|
|
|
|
if(stockType == 1 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()>0){
|
|
|
|
|
storageMatMapper.insert(storageMatDO);
|
|
|
|
|
saveStorageLog(storageMatDO);
|
|
|
|
|
}
|
|
|
|
|
if(stockType == 2 && item.getStorageOkQty().subtract(item.getMatRest()).doubleValue()<0){
|
|
|
|
|
storageMatMapper.insert(storageMatDO);
|
|
|
|
|
saveStorageLog(storageMatDO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
private void saveStorageLog(StorageMatDO storageMatDO){
|
|
|
|
|
// 插入库存日志表
|
|
|
|
|
StorageLogDO storageLogDO = new StorageLogDO();
|
|
|
|
|
storageLogDO.setStockId(storageMatDO.getStockId());
|
|
|
|
|
storageLogDO.setMatId(storageMatDO.getMatId());
|
|
|
|
|
storageLogDO.setWhId(storageMatDO.getWhId());
|
|
|
|
|
storageLogDO.setRgId(storageMatDO.getRgId());
|
|
|
|
|
storageLogDO.setPnId(storageMatDO.getPnId());
|
|
|
|
|
storageLogDO.setStorageOkQty(storageMatDO.getStorageOkQty());
|
|
|
|
|
storageLogDO.setLotNo(storageMatDO.getLotNo());
|
|
|
|
|
storageLogDO.setStatus(2);
|
|
|
|
|
|
|
|
|
|
storageLogMapper.insert(storageLogDO);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|