From aad364bb323a1eaa0389ee5c6389bdc0ea7ed526 Mon Sep 17 00:00:00 2001
From: “djh” <“3298565835@qq.com”>
Date: Mon, 29 Jun 2026 17:09:28 +0800
Subject: [PATCH] 修改

---
 hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java |  251 ++++++++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 251 insertions(+), 0 deletions(-)

diff --git a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
index aac3a7f..66af1f2 100644
--- a/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
+++ b/hazmat-system/src/main/java/com/gkhy/hazmat/system/service/impl/HzEntryRecordServiceImpl.java
@@ -23,6 +23,7 @@
 import com.gkhy.hazmat.system.mapper.*;
 import com.gkhy.hazmat.system.service.HzEntryRecordService;
 import com.gkhy.hazmat.system.service.HzHazmatService;
+import com.gkhy.hazmat.system.service.SubscribeService;
 import com.gkhy.hazmat.system.service.TabooWarningService;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
@@ -63,12 +64,19 @@
     @Autowired
     private HzTabooWarningMapper tabooWarningMapper;
 
+    @Autowired
+    private SubscribeMapper subscribeMapper;
+
+    @Autowired
+    private SubscribeHazmatMapper subscribeHazmatMapper;
+
     @Override
     public CommonPage selectEntryRecordList(HzEntryRecord entryRecord) {
         SysUser currentUser = SecurityUtils.getLoginUser().getUser();
         if (!currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode()) && !currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())) {
             entryRecord.setCompanyId(currentUser.getCompanyId());
         }
+        entryRecord.setType(0);
         PageUtils.startPage();
         List<HzEntryRecord> entryRecordList = baseMapper.selectEntryRecordList(entryRecord);
         return CommonPage.restPage(entryRecordList);
@@ -98,6 +106,7 @@
         }
         entryRecord.setCompanyId(currentUser.getCompanyId());
         entryRecord.setCreateBy(currentUser.getUsername());
+        entryRecord.setType(0);
         checkUserAllowed(null,currentUser);
         int row=0;
         synchronized (this) {
@@ -350,6 +359,248 @@
         return CommonPage.restPage(hazmatList);
     }
 
+    @Override
+    @Transactional(rollbackFor = RuntimeException.class)
+    public void orderEntry(Long entryRecordId) {
+        HzEntryRecord entryRecord=getById(entryRecordId);
+        if(entryRecord.getState().equals(EntryStateEnum.ENTER.getCode())){
+            throw new ApiException("已完成入库,不能再操作");
+        }
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(entryRecord,currentUser);
+        Subscribe subscribe = subscribeMapper.selectbyNum(entryRecord.getSubscribeNum());
+        if(subscribe==null){
+            throw new ApiException("申购单不存在");
+        }
+        int currentStartCode = entryRecord.getStartCode();
+        List<SubscribeHazmat> subscribeHazmats = subscribeHazmatMapper.selectbySubscribeId(subscribe.getId());
+        for (SubscribeHazmat subscribeHazmat : subscribeHazmats) {
+            HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(subscribeHazmat.getBasicId());
+            if(hazmatBasic==null){
+                throw new ApiException("危化品基础数据不存在");
+            }
+            Integer hazmatCount = subscribeHazmat.getHazmatCount() != null ? subscribeHazmat.getHazmatCount() : 0;
+            if (hazmatCount <= 0) {
+                continue;
+            }
+            // 计算该危化品的条码范围
+            int hazmatStartCode = currentStartCode;
+            int hazmatEndCode = currentStartCode + hazmatCount - 1;
+
+            // 更新下一个危化品的起始码
+            currentStartCode = hazmatEndCode + 1;
+            int count = hazmatMapper.selectHazmatCountOfWarehouse(entryRecord.getWarehouseId(), hazmatBasic.getId(), currentUser.getCompanyId(), entryRecord.getCupboardId());
+            //新增危化品变动记录
+            HzWarehouseRecord warehouseRecord = new HzWarehouseRecord()
+                    .setWarehouseId(entryRecord.getWarehouseId())
+                    .setCupboardId(entryRecord.getCupboardId())
+                    .setBasicId(hazmatBasic.getId())
+                    .setNum(entryRecord.getNum())
+                    .setCompanyId(currentUser.getCompanyId())
+                    .setCreateId(currentUser.getId())
+                    .setRemaining(entryRecord.getNum() + count);
+            warehouseRecordMapper.insert(warehouseRecord);
+            // 校验生成相忌数据
+            Map<String, Long>  redata = (Map<String, Long>)redisService.get(Constant.TABOO_UNIQUE_KEY);
+            if (!redata.isEmpty()){
+                // 查询对应仓库和柜子的物品信息获取品类 获取相冲相弱相吸相异
+                List<TabooDisVo> collectData =
+                        hazmatMapper.selectHazmatWarehouseCheck(entryRecord.getWarehouseId(), currentUser.getCompanyId(), entryRecord.getCupboardId());
+                if (!collectData.isEmpty() && collectData.size() > 0) {
+                    for (TabooDisVo collectDatum : collectData) {
+                        String key1 = collectDatum.getSpNum() + "_" + hazmatBasic.getPeculiarityNumber();
+                        String key2 = hazmatBasic.getPeculiarityNumber() + "_" + collectDatum.getSpNum();
+
+                        if (redata.containsKey(key1) || redata.containsKey(key2)) {
+                            // 记录数据
+                            Long l = redata.get(key1);
+                            Long l1 = l == null ? redata.get(key2) : l;
+                            HzTabooWarning tabooWarning = new HzTabooWarning()
+                                    .setWarningType(l1)
+                                    .setWarehouseId(entryRecord.getWarehouseId())
+                                    .setCupboardId(entryRecord.getCupboardId())
+                                    .setEntryId(entryRecord.getId())
+                                    .setCompanyId(currentUser.getCompanyId())
+                                    .setTabooBasicId(collectDatum.getId()).setCreateBy(currentUser.getUsername());
+                            tabooWarningMapper.insert(tabooWarning);
+                            break;
+                        }
+                    }
+                }
+            }else {
+                throw new ApiException("危化品相忌信息不存在");
+            }
+            List<HzHazmat> hazmatList = new ArrayList<>();
+            for (int i = hazmatStartCode; i <=hazmatEndCode; i++) {
+                String lastCode= StringUtils.addZeroForNum(String.valueOf(i),4);
+                String code=String.format("%s%s",entryRecord.getCodePrex(),lastCode);
+                hazmatList.add(new HzHazmat().setWarehouseId(entryRecord.getWarehouseId())
+                        .setCupboardId(entryRecord.getCupboardId())
+                        .setBasicId(subscribeHazmat.getBasicId())
+                        .setCupboardId(entryRecord.getCupboardId())
+                        .setEntryId(entryRecord.getId())
+                        .setRemaining(hazmatBasic.getMetering())
+                        .setCompanyId(currentUser.getCompanyId())
+                        .setState(HazmatStatusEnum.WAREHOUSEIN.getCode())
+                        .setCode(code));
+            }
+
+            //批量创建危化品
+            if (hazmatList.size() > 100) {
+                while (!hazmatList.isEmpty()) {
+                    int endIndex = Math.min(hazmatList.size(), 100);
+                    List<HzHazmat> subList = hazmatList.subList(0, endIndex);
+                    hazmatService.saveBatch(subList);
+                    hazmatList = hazmatList.subList(endIndex, hazmatList.size());
+                }
+            } else {
+                hazmatService.saveBatch(hazmatList);
+            }
+            // }
+            //更新入库记录状态
+            entryRecord.setState(EntryStateEnum.ENTER.getCode());
+            updateById(entryRecord);
+
+//        IdTableNameHandler.removeCurrentId();
+        }
+
+        //异步执行
+        // 注册一个事务完成后执行的回调
+        TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronization() {
+            @Override
+            public void afterCommit() {
+                customEventPublisher.publishEntry(entryRecord.getId(), CodePrexEnum.MATERIAL.getCode(), currentUser.getCompanyId(), currentUser.getId());
+            }
+        });
+    }
+
+    @Override
+    public int insertOrderEntryRecord(HzEntryRecord entryRecord) {
+        SysUser currentUser=SecurityUtils.getLoginUser().getUser();
+        Map<String, Object> parms = new HashMap<>();
+        parms.put("subscribe_num",entryRecord.getSubscribeNum());
+        List<HzEntryRecord> hzEntryRecords = baseMapper.selectByMap(parms);
+        if (hzEntryRecords.size()>0){
+            throw new ApiException("申购单已入库,不能重复添加");
+        }
+
+        Subscribe subscribe = subscribeMapper.selectbyNum(entryRecord.getSubscribeNum());
+        if(subscribe==null){
+            throw new ApiException("申购单不存在");
+        }
+        List<SubscribeHazmat> subscribeHazmats = subscribeHazmatMapper.selectbySubscribeId(subscribe.getId());
+        for (SubscribeHazmat subscribeHazmat : subscribeHazmats) {
+            HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(subscribeHazmat.getBasicId());
+            if(hazmatBasic==null){
+                throw new ApiException("危化品基础数据不存在"+hazmatBasic.getName());
+            }
+            if(subscribeHazmat.getHazmatCount()>hazmatBasic.getMaxEntry()){
+                throw new ApiException(hazmatBasic.getName()+"数量超过单次入库最大数量<"+hazmatBasic.getMaxEntry()+">");
+            }
+        }
+        entryRecord.setCompanyId(currentUser.getCompanyId());
+        entryRecord.setCreateBy(currentUser.getUsername());
+        entryRecord.setType(1);
+        checkUserAllowed(null,currentUser);
+        int row=0;
+        synchronized (this) {
+            //生成条码范围
+            generateCode(entryRecord);
+            row = baseMapper.insert(entryRecord);
+            if (row < 1) {
+                throw new ApiException("新增入库记录失败");
+            }
+        }
+        return row;
+    }
+
+    @Override
+    public int updateOrderEntryRecord(HzEntryRecord entryRecord) {
+        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(entryRecord,currentUser);
+        Subscribe subscribe = subscribeMapper.selectbyNum(entryRecord.getSubscribeNum());
+        if(subscribe==null){
+            throw new ApiException("申购单不存在");
+        }
+        List<SubscribeHazmat> subscribeHazmats = subscribeHazmatMapper.selectbySubscribeId(subscribe.getId());
+        for (SubscribeHazmat subscribeHazmat : subscribeHazmats) {
+            HzHazmatBasic hazmatBasic=hazmatBasicMapper.selectById(subscribeHazmat.getBasicId());
+            if(hazmatBasic==null){
+                throw new ApiException("危化品基础数据不存在"+hazmatBasic.getName());
+            }
+            if(entryRecord.getNum()>hazmatBasic.getMaxEntry()){
+                throw new ApiException(hazmatBasic.getName()+"数量超过单次入库最大数量<"+hazmatBasic.getMaxEntry()+">");
+            }
+        }
+        HzEntryRecord existEr=baseMapper.selectById(entryRecord.getId());
+        if(existEr.getState().equals(EntryStateEnum.ENTER.getCode())){
+            throw new ApiException("已经入库,不能再修改");
+        }
+        if (!Objects.equals(existEr.getNum(),entryRecord.getNum())) {
+            generateCode2(entryRecord);
+        }
+        entryRecord.setUpdateBy(currentUser.getUsername());
+        int row=baseMapper.updateById(entryRecord);
+        if(row<1){
+            throw new ApiException("更新入库信息失败");
+        }
+        return row;
+    }
+
+    @Override
+    public int deleteOrderEntryRecordById(Long entryRecordId) {
+        HzEntryRecord entryRecord=baseMapper.selectById(entryRecordId);
+        if(entryRecord==null){
+            throw new ApiException("入库记录不存在");
+        }
+        if(entryRecord.getState().equals(EntryStateEnum.ENTER.getCode())){
+            throw new ApiException("已入库状态的记录不能删除");
+        }
+        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+        checkUserAllowed(entryRecord,currentUser);
+        int update = baseMapper.deleteById(entryRecordId);
+        return update;
+    }
+
+    @Override
+    public CommonPage selectOrderEntryRecordList(HzEntryRecord entryRecord) {
+        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+        if (!currentUser.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode()) && !currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())) {
+            entryRecord.setCompanyId(currentUser.getCompanyId());
+        }
+        entryRecord.setType(1);
+        PageUtils.startPage();
+        List<HzEntryRecord> entryRecordList = baseMapper.selectEntryRecordList(entryRecord);
+        for (HzEntryRecord hzEntryRecord : entryRecordList) {
+            if (hzEntryRecord.getSubscribeNum() != null) {
+                Subscribe subscribe = subscribeMapper.selectbyNum(hzEntryRecord.getSubscribeNum());
+                subscribe.setSubscribeHazmats(subscribeHazmatMapper.selectbySubscribeId(subscribe.getId()));
+                hzEntryRecord.setSubscribe(subscribe);
+            }
+        }
+        return CommonPage.restPage(entryRecordList);
+    }
+
+    @Override
+    public CommonPage selectOrderHazmatListByEntryId(HzHazmat hzHazmat) {
+        SysUser currentUser = SecurityUtils.getLoginUser().getUser();
+        HzEntryRecord entryRecord=getById(hzHazmat.getEntryId());
+        if(entryRecord==null){
+            throw new ApiException("入库信息不存在");
+        }
+        checkUserAllowed(entryRecord,currentUser);
+//        if (currentUser.getUserType().equals(UserTypeEnum.CHECK_USER.getCode())){
+//            IdTableNameHandler.setCurrentId(entryRecord.getCompanyId());
+//        }else {
+//            //设置分表id
+//            IdTableNameHandler.setCurrentId(currentUser.getCompanyId());
+//        }
+        PageUtils.startPage();
+        List<HzHazmat> hazmatList = hazmatMapper.selectHazmatList(hzHazmat);
+//        IdTableNameHandler.removeCurrentId();
+        return CommonPage.restPage(hazmatList);
+    }
+
     public void checkUserAllowed(HzEntryRecord entryRecord,SysUser user) {
         if (user.getUserType().equals(UserTypeEnum.SYSTEM_USER.getCode())) {
             throw new ApiException("管理员不能操作");

--
Gitblit v1.9.2