From d30017df796e4e4aef20f320f3c27d90ba8cbeff Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Fri, 26 Jun 2026 08:43:01 +0800
Subject: [PATCH] 修改

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java |  183 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 180 insertions(+), 3 deletions(-)

diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
index 459e845..c8b65c4 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzHazmatFlowServiceImpl.java
+++ b/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("管理员不能操作");

--
Gitblit v1.9.2