“djh”
6 days ago d30017df796e4e4aef20f320f3c27d90ba8cbeff
hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
@@ -5,23 +5,31 @@
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.gkhy.hazmat.common.api.CommonPage;
//import com.gkhy.hazmat.common.config.IdTableNameHandler;
import com.gkhy.hazmat.common.api.CommonResult;
import com.gkhy.hazmat.common.domain.entity.SysUser;
import com.gkhy.hazmat.common.enums.CodePrexEnum;
import com.gkhy.hazmat.common.enums.HazmatStatusEnum;
import com.gkhy.hazmat.common.enums.OperateStatusEnum;
import com.gkhy.hazmat.common.enums.UserTypeEnum;
import com.gkhy.hazmat.common.exception.ApiException;
import com.gkhy.hazmat.common.utils.PageUtils;
import com.gkhy.hazmat.common.utils.SecurityUtils;
import com.gkhy.hazmat.system.domain.HzHazmat;
import com.gkhy.hazmat.system.domain.HzHazmatBasic;
import com.gkhy.hazmat.system.domain.HzHazmatFlow;
import com.gkhy.hazmat.system.domain.HzWarehouseRecord;
import com.gkhy.hazmat.system.domain.dto.ChemicalLedger;
import com.gkhy.hazmat.system.mapper.HzHazmatBasicMapper;
import com.gkhy.hazmat.system.mapper.HzHazmatFlowMapper;
import com.gkhy.hazmat.system.mapper.HzHazmatMapper;
import com.gkhy.hazmat.system.mapper.HzWarehouseRecordMapper;
import com.gkhy.hazmat.system.service.HzHazmatFlowService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
import java.math.BigDecimal;
import java.util.*;
import java.util.stream.Collectors;
/**
@@ -36,6 +44,12 @@
public class HzHazmatFlowServiceImpl extends ServiceImpl<HzHazmatFlowMapper, HzHazmatFlow> implements HzHazmatFlowService {
    @Autowired
    private HzHazmatMapper hazmatMapper;
    @Autowired
    private HzHazmatBasicMapper hazmatBasicMapper;
    @Autowired
    private HzWarehouseRecordMapper warehouseRecordMapper;
    @Override
    public CommonPage selectHazmatFlowList(HzHazmatFlow hazmatFlow) {
@@ -175,6 +189,169 @@
        return hazmatFlowList;
    }
    @Override
    @Transactional
    public CommonResult pushFlowFromThirdParty(List<ChemicalLedger> flows) {
        List<HzHazmatFlow> hazmatFlowList = new ArrayList<>();
        List<String> errorMessages = new ArrayList<>();
        int successCount = 0;
        int failCount = 0;
        for (int i = 0; i < flows.size(); i++) {
            ChemicalLedger flowData = flows.get(i);
            try {
                HzHazmatFlow hazmatFlow = convertToHzHazmatFlow(flowData);
                HzHazmatBasic hzHazmatBasic = hazmatBasicMapper.selectByCas(flowData.getCas());
                hazmatFlow.setBasicId(hzHazmatBasic.getId());
                if (hazmatFlow.getBasicId() == null) {
                    errorMessages.add(String.format("第%d条数据:cas号没有对应基础信息", i + 1));
                    failCount++;
                    continue;
                }
                if (hazmatFlow.getState() == null) {
                    errorMessages.add(String.format("第%d条数据:操作状态不能为空", i + 1));
                    failCount++;
                    continue;
                }
                HzHazmat hzHazmat = hazmatMapper.selectById(hazmatFlow.getHazmatId());
                int count = hazmatMapper.selectHazmatCountOfWarehouse(hazmatFlow.getCabinetId(), hazmatFlow.getBasicId(),18L,hazmatFlow.getAuxiliaryCabinetId());
                if (hazmatFlow.getState()==3){
                    if (hzHazmat.getState()==2||hzHazmat.getState()==3||hzHazmat.getState()==4){
                        errorMessages.add(String.format("第%d条数据:危化品状态异常,不能出库", i + 1));
                    }else {
                        hzHazmat.setState(HazmatStatusEnum.USING.getCode());
                        hzHazmat.setUpdateBy(hazmatFlow.getCreateBy());
                        HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                                .setWarehouseId(hzHazmat.getWarehouseId())
                                .setBasicId(hzHazmat.getBasicId())
                                .setCupboardId(hzHazmat.getCupboardId())
                                .setCreateBy(hazmatFlow.getCreateBy())
                                .setNum(-1)
                                .setState(OperateStatusEnum.USING.getCode())
                                .setCompanyId(18L)
                                .setRemaining(count-1);
                        warehouseRecordMapper.insert(warehouseRecord);
                    }
                    hazmatMapper.updateById(hzHazmat);
                }
                if (hazmatFlow.getState()==4){
                    HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                            .setWarehouseId(hzHazmat.getWarehouseId())
                            .setBasicId(hzHazmat.getBasicId())
                            .setCupboardId(hzHazmat.getCupboardId())
                            .setCreateBy(hazmatFlow.getCreateBy())
                            .setNum(-1)
                            .setState(OperateStatusEnum.DISCARD.getCode())
                            .setCompanyId(18L)
                            .setRemaining(count-1);
                    warehouseRecordMapper.insert(warehouseRecord);
                    hzHazmat.setUpdateBy(hazmatFlow.getCreateBy());
                    if (hazmatFlow.getReasonId()==0||hazmatFlow.getReasonId()==3){
                        hzHazmat.setState(HazmatStatusEnum.USED.getCode());
                    }else {
                        hzHazmat.setState(HazmatStatusEnum.DISCARD.getCode());
                    }
                    hazmatMapper.updateById(hzHazmat);
                }
                if (hazmatFlow.getState()==2&&hzHazmat.getState()==HazmatStatusEnum.USING.getCode()){
                    HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
                            .setWarehouseId(hzHazmat.getWarehouseId())
                            .setBasicId(hzHazmat.getBasicId())
                            .setCupboardId(hzHazmat.getCupboardId())
                            .setCreateBy(hazmatFlow.getCreateBy())
                            .setNum(1)
                            .setState(OperateStatusEnum.RETURN.getCode())
                            .setCompanyId(18L)
                            .setRemaining(count+1);
                    warehouseRecordMapper.insert(warehouseRecord);
                    hzHazmat.setUpdateBy(hazmatFlow.getCreateBy());
                    hzHazmat.setState(HazmatStatusEnum.USEWAREHOUSEIN.getCode());
                    hazmatMapper.updateById(hzHazmat);
                }else{
                    errorMessages.add(String.format("第%d条数据:危化品状态异常,不能回库", i + 1));
                }
//                if (hazmatFlow.getNum() == null || hazmatFlow.getNum().compareTo(BigDecimal.ZERO) <= 0) {
//                    errorMessages.add(String.format("第%d条数据:数量必须大于0", i + 1));
//                    failCount++;
//                    continue;
//                }
                hazmatFlowList.add(hazmatFlow);
                successCount++;
            } catch (Exception e) {
                errorMessages.add(String.format("第%d条数据处理失败:%s", i + 1, e.getMessage()));
                failCount++;
            }
        }
            if (!hazmatFlowList.isEmpty()) {
                boolean saveResult = this.saveBatch(hazmatFlowList, 50);
                if (!saveResult) {
                    return CommonResult.failed("批量保存流向数据失败");
                }
            }
        Map<String, Object> resultData = new HashMap<>();
        resultData.put("totalCount", flows.size());
        resultData.put("successCount", successCount);
        resultData.put("failCount", failCount);
        if (!errorMessages.isEmpty()) {
            resultData.put("errorMessages", errorMessages);
        }
        if (failCount > 0) {
            return CommonResult.success(resultData, "批量推送完成,部分数据失败");
        }
        return CommonResult.success(resultData, "批量推送成功");
    }
    private HzHazmatFlow convertToHzHazmatFlow(ChemicalLedger flowData) {
        HzHazmatFlow hazmatFlow = new HzHazmatFlow();
        hazmatFlow.setUuid(flowData.getId());
        hazmatFlow.setHazmatId(flowData.getHazmatId());
//        hazmatFlow.setBasicId(flowData.getBasicId());
        hazmatFlow.setState(flowData.getStorageType());
        hazmatFlow.setNum(BigDecimal.valueOf(flowData.getNum()));
        hazmatFlow.setCompanyId(18L);
//        hazmatFlow.setCreateId(flowData.getCreateId());
        hazmatFlow.setCabinetId(Long.valueOf(flowData.getCabinetId()));
        hazmatFlow.setCabinetName(flowData.getCabinetName());
        hazmatFlow.setAuxiliaryCabinetId(Long.valueOf(flowData.getAuxiliaryCabinetId()));
        hazmatFlow.setAuxiliaryCabinetName(flowData.getAuxiliaryCabinetName());
        hazmatFlow.setOwner(flowData.getOwner());
        hazmatFlow.setChemicalType(flowData.getChemicalType());
        hazmatFlow.setContainerNo(flowData.getContainerNo());
        hazmatFlow.setContainerUse(flowData.getContainerUse());
        hazmatFlow.setControlType(flowData.getControlType());
        hazmatFlow.setCreateBy(flowData.getCreateUserName());
        hazmatFlow.setUNameOne(flowData.getUNameOne());
        hazmatFlow.setFacelmgUrl(flowData.getFaceImgUrl());
        hazmatFlow.setUNameTwo(flowData.getUNameTwo());
        hazmatFlow.setFacelmgUrlTwo(flowData.getFaceImgUrlTwo());
        hazmatFlow.setHazchemType(flowData.getHazchemType());
        hazmatFlow.setOperate(flowData.getOperate());
        hazmatFlow.setOrgName(flowData.getOrgName());
        hazmatFlow.setReason(flowData.getReason());
        hazmatFlow.setReasonId(flowData.getReasonId());
        hazmatFlow.setRegulatory(flowData.getRegulatory());
        hazmatFlow.setRoomName(flowData.getRoomName());
        hazmatFlow.setSchoolName(flowData.getSchoolName());
        hazmatFlow.setUsername(flowData.getUsername());
        hazmatFlow.setWeight(flowData.getWeight());
        hazmatFlow.setWeightUnit(flowData.getWeightUnit());
        hazmatFlow.setConsumption(flowData.getConsumption());
        if (flowData.getCreateTime() != null) {
            hazmatFlow.setCreateTime(flowData.getCreateTime());
        }
        return hazmatFlow;
    }
    public void checkUserAllowed(HzHazmatFlow hazmatFlow,SysUser user) {
        if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) {
            throw new ApiException("管理员不能操作");