kongzy
2024-10-30 6f2e09fa870858d5371ece3a80674bae95288b9b
hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatServiceImpl.java
@@ -142,7 +142,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
@@ -154,18 +154,32 @@
        checkUserAllowed(hazmat,currentUser);
        //获取变动前仓库库存
        int count = baseMapper.selectHazmatCountOfWarehouse(hazmat.getWarehouseId(), hazmat.getBasicId(), currentUser.getCompanyId());
        hazmat.setState(HazmatStatusEnum.USING.getCode());
        hazmat.setUpdateBy(currentUser.getUsername());
        updateById(hazmat);
        //生成流向
        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()
@@ -191,11 +205,18 @@
        //设置分表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);
        //获取变动前仓库库存
@@ -238,8 +259,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 +270,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();