heheng
2025-03-06 8b1d6e1b442c1909bd747805bd1845b40caabe0c
hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
@@ -46,6 +46,7 @@
    @Autowired
    private HzWarehouseMapper warehouseMapper;
    @Override
    public CommonPage selectHazmatList(HzHazmat hzHazmat) {
        if(hzHazmat.getWarehouseId()==null||hzHazmat.getBasicId()==null){
@@ -74,19 +75,28 @@
        if(!hazmatList.isEmpty()) {
            List<Long> warehouseIds = hazmatList.stream().map(HzHazmatWarehouseVO::getWarehouseId).collect(Collectors.toList());
            List<Long> basicIds = hazmatList.stream().map(HzHazmatWarehouseVO::getBasicId).collect(Collectors.toList());
            List<Integer> cupboardIds = hazmatList.stream().map(HzHazmatWarehouseVO::getCupboardId).collect(Collectors.toList());
            List<HzHazmatBasic> hazmatBasicList = hazmatBasicMapper.selectHazmatBasicListByIds(basicIds);
            List<HzWarehouse> warehouseList = warehouseMapper.selectWarehouseListByIds(warehouseIds);
            List<HzWarehouseCupboard> hzWarehouseCupboards = warehouseMapper.selectByCupboardIds(cupboardIds);
            Map<Long,HzHazmatBasic> hazmatBasicMap=hazmatBasicList.stream().collect(Collectors.toMap(HzHazmatBasic::getId, item->item));
            Map<Long,HzWarehouse> warehouseMap=warehouseList.stream().collect(Collectors.toMap(HzWarehouse::getId, item->item));
            Map<Integer, HzWarehouseCupboard> cupboardMap = hzWarehouseCupboards.stream().collect(Collectors.toMap(HzWarehouseCupboard::getId, item -> item));
            for(HzHazmatWarehouseVO hazmatWarehouseVO:hazmatList){
                HzHazmatBasic hazmatBasic=hazmatBasicMap.get(hazmatWarehouseVO.getBasicId());
                HzWarehouse warehouse=warehouseMap.get(hazmatWarehouseVO.getWarehouseId());
                HzWarehouseCupboard hzWarehouseCupboard = cupboardMap.get(hazmatWarehouseVO.getCupboardId());
                if(hazmatBasic!=null){
                    hazmatWarehouseVO.setHazmatBasic(hazmatBasic);
                }
                if(warehouse!=null){
                    hazmatWarehouseVO.setWarehouseName(warehouse.getName());
                }
                if (hzWarehouseCupboard != null){
                    hazmatWarehouseVO.setCupboardName(hzWarehouseCupboard.getCupboardName());
                }
            }
        }
        IdTableNameHandler.removeCurrentId();
@@ -142,7 +152,7 @@
    @Override
    @Transactional(rollbackFor = RuntimeException.class)
    public void hazmatUse(Long hazmatId) {
    public void hazmatUse(Long hazmatId, Integer used) {
        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
        checkUserAllowed(null,currentUser);
        //设置分表id
@@ -153,24 +163,39 @@
        }
        checkUserAllowed(hazmat,currentUser);
        //获取变动前仓库库存
        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
        hazmat.setState(HazmatStatusEnum.USING.getCode());
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);
        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId(),hazmat.getCupboardId());
        //生成流向
        BigDecimal remaining=hazmat.getRemaining();
        HzHazmatFlow hazmatFlow=new HzHazmatFlow();
        hazmatFlow.setHazmatId(hazmatId);
        hazmatFlow.setBasicId(hazmat.getBasicId());
        hazmatFlow.setState(OperateStatusEnum.USING.getCode());
        hazmatFlow.setCompanyId(currentUser.getCompanyId());
        hazmatFlow.setNum(hazmat.getRemaining().multiply(BigDecimal.valueOf(-1)));
        hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
        hazmatFlow.setCreateId(currentUser.getId());
        hazmatFlowMapper.insert(hazmatFlow);
        hazmat.setState(HazmatStatusEnum.USING.getCode());
        if(used==1){//用尽流向
            hazmatFlow=new HzHazmatFlow();
            hazmatFlow.setHazmatId(hazmatId);
            hazmatFlow.setBasicId(hazmat.getBasicId());
            hazmatFlow.setState(OperateStatusEnum.USE_UP.getCode());
            hazmatFlow.setCompanyId(currentUser.getCompanyId());
            hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
            hazmatFlow.setCreateId(currentUser.getId());
            hazmatFlowMapper.insert(hazmatFlow);
            hazmat.setState(HazmatStatusEnum.USED.getCode());
            hazmat.setRemaining(BigDecimal.valueOf(0));
        }
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);//更新试剂状态
        //生成库存变动记录
        //新增危化品变动记录
        HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                .setWarehouseId(hazmat.getWarehouseId())
                .setBasicId(hazmat.getBasicId())
                .setCupboardId(hazmat.getCupboardId())
                .setCreateId(currentUser.getId())
                .setNum(-1)
                .setState(OperateStatusEnum.USING.getCode())
@@ -191,15 +216,22 @@
        //设置分表id
        IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
        HzHazmat dbhazmat=getById(hazmat.getId());
        if(!dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())){
            throw new ApiException("危化品非使用中状态,不能进行归还操作");
        BigDecimal remaining=dbhazmat.getRemaining();
        if(!dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())&&!dbhazmat.getState().equals(HazmatStatusEnum.USED.getCode())){
            throw new ApiException("危化品非使用中或者用尽状态,不能进行归还操作");
        }
        if(dbhazmat.getRemaining().compareTo(hazmat.getRemaining())<0){
        if(dbhazmat.getState().equals(HazmatStatusEnum.USING.getCode())&&remaining.compareTo(hazmat.getRemaining())<0){
            throw new ApiException("退还的容量不能高于库存容量");
        }
        if(dbhazmat.getState().equals(HazmatStatusEnum.USED.getCode())){
            HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(dbhazmat.getBasicId());
            if(hazmatBasic.getMetering().compareTo(hazmat.getRemaining())<0) {
                throw new ApiException("退还的容量不能高于最小包装数量");
            }
        }
        checkUserAllowed(dbhazmat,currentUser);
        //获取变动前仓库库存
        int count = baseMapper.selectHazmatCountOfWarehouse(dbhazmat.getWarehouseId(), dbhazmat.getBasicId(), currentUser.getCompanyId());
        int count = baseMapper.selectHazmatCountOfWarehouse(dbhazmat.getWarehouseId(), dbhazmat.getBasicId(), currentUser.getCompanyId(),dbhazmat.getCupboardId());
        hazmat.setState(HazmatStatusEnum.USEWAREHOUSEIN.getCode());
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);
@@ -218,6 +250,7 @@
        HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                .setWarehouseId(dbhazmat.getWarehouseId())
                .setBasicId(dbhazmat.getBasicId())
                .setCupboardId(hazmat.getCupboardId())
                .setCreateId(currentUser.getId())
                .setNum(1)
                .setState(OperateStatusEnum.RETURN.getCode())
@@ -238,8 +271,9 @@
        if(!hazmat.getState().equals(HazmatStatusEnum.USING.getCode())){
            throw new ApiException("危化品非使用中状态,不能进行用完登记操作");
        }
        BigDecimal remaining=hazmat.getRemaining();
        hazmat.setState(HazmatStatusEnum.USED.getCode());
        hazmat.setRemaining(BigDecimal.valueOf(0));
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);
        //生成流向
@@ -248,7 +282,7 @@
        hazmatFlow.setBasicId(hazmat.getBasicId());
        hazmatFlow.setState(OperateStatusEnum.USE_UP.getCode());
        hazmatFlow.setCompanyId(currentUser.getCompanyId());
        hazmatFlow.setNum(hazmat.getRemaining().multiply(BigDecimal.valueOf(-1)));
        hazmatFlow.setNum(remaining.multiply(BigDecimal.valueOf(-1)));
        hazmatFlow.setCreateId(currentUser.getId());
        hazmatFlowMapper.insert(hazmatFlow);
        IdTableNameHandler.removeCurrentId();
@@ -267,7 +301,7 @@
        }
        checkUserAllowed(hazmat,currentUser);
        //获取变动前仓库库存
        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId(),hazmat.getCupboardId());
        hazmat.setState(HazmatStatusEnum.DISCARD.getCode());
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);
@@ -286,6 +320,7 @@
        HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                .setWarehouseId(hazmat.getWarehouseId())
                .setBasicId(hazmat.getBasicId())
                .setCupboardId(hazmat.getCupboardId())
                .setCreateId(currentUser.getId())
                .setNum(-1)
                .setState(OperateStatusEnum.DISCARD.getCode())