Forráskód Böngészése

feature 排程中不允许做发布,取消发布等操作

xiahan 1 éve
szülő
commit
94300ea6f4

+ 5 - 9
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/service/impl/ApsBlankOrderServiceImpl.java

@@ -5,15 +5,12 @@ import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateField;
 import cn.hutool.core.date.DateUtil;
 import cn.hutool.core.util.ObjectUtil;
-import cn.hutool.json.JSONConfig;
-import cn.hutool.json.JSONUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import com.google.common.collect.Lists;
 import com.rongwei.bscommon.sys.dao.*;
-import com.rongwei.bscommon.sys.fegin.RwApsServer;
 import com.rongwei.bscommon.sys.service.*;
 import com.rongwei.bscommon.sys.utils.ApsUtils;
 import com.rongwei.bsentity.domain.*;
@@ -26,8 +23,6 @@ import com.rongwei.rwcommon.utils.SecurityUtil;
 import com.rongwei.rwcommon.utils.StringUtils;
 import com.rongwei.safecommon.utils.CXCommonUtils;
 import com.rongwei.safecommon.utils.SaveConstans;
-import org.redisson.api.RLock;
-import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -37,10 +32,8 @@ import org.springframework.transaction.annotation.Transactional;
 import java.math.BigDecimal;
 import java.math.RoundingMode;
 import java.text.SimpleDateFormat;
-import java.time.LocalDateTime;
 import java.time.ZoneId;
 import java.util.*;
-import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
 import static com.rongwei.bscommon.sys.service.impl.ApsProductionOrderServiceImpl.ERROR_MSG;
@@ -145,6 +138,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Override
     @Transactional(rollbackFor = Exception.class)
     public void blankApsCancel(List<String> apsBlankIds) {
+        ApsUtils.checkScheduling();
         if (ObjectUtil.isEmpty(apsBlankIds)) {
             log.debug("坯料计划排程取消参数为空");
             return;
@@ -165,6 +159,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R publish(List<String> blankIds) {
+        ApsUtils.checkScheduling();
         if (blankIds == null || blankIds.isEmpty()) {
             log.debug("坯料计划为空");
             return R.error("坯料计划id 必传");
@@ -246,6 +241,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
     @Override
     @Transactional(rollbackFor = Exception.class)
     public R publishCancel(List<String> blankIds) {
+        ApsUtils.checkScheduling();
         if (blankIds == null || blankIds.isEmpty()) {
             log.debug("坯料计划为空");
             return R.error("坯料计划id 必传");
@@ -422,8 +418,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
                     .set(ApsProcessOperationDo::getProcessstatus, "20")
             );
             apsBlankOrderService.update(new LambdaUpdateWrapper<ApsBlankOrderDo>()
-                    .in(ApsBlankOrderDo::getId,blackOrderId)
-                    .set(ApsBlankOrderDo::getSchedulingstatus,"20"));
+                    .in(ApsBlankOrderDo::getId, blackOrderId)
+                    .set(ApsBlankOrderDo::getSchedulingstatus, "20"));
         }
         // 回传坯料计划ID 用于前段更新锁定状态
         return R.ok(blackOrderId);

+ 39 - 25
cx-aps/cx-aps-common/src/main/java/com/rongwei/bscommon/sys/utils/ApsUtils.java

@@ -2,27 +2,18 @@ package com.rongwei.bscommon.sys.utils;
 
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationBackupDao;
 import com.rongwei.bscommon.sys.dao.ApsProcessOperationProcessEquBackupDao;
-import com.rongwei.commonservice.serial.service.SysSerialNumberService;
-import com.rongwei.commonservice.service.RedisService;
-import com.rongwei.rwadmincommon.system.domain.SysOrganizationDo;
-import com.rongwei.rwadmincommon.system.vo.SysOrganizationVo;
 import com.rongwei.rwadmincommon.system.vo.SysUserVo;
+import com.rongwei.rwcommon.base.exception.CustomException;
 import com.rongwei.rwcommon.utils.StringUtils;
-import com.rongwei.safecommon.fegin.CXAdminFeginClient;
-import com.rongwei.safecommon.fegin.CXCommonFeginClient;
 import com.rongwei.safecommon.utils.CXCommonUtils;
-import lombok.Data;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Component;
 
 import javax.annotation.PostConstruct;
-import javax.annotation.Resource;
-import java.util.List;
-import java.util.stream.Collectors;
-
-import static com.rongwei.safecommon.utils.SaveConstans.MINUS_ONE;
 
 /**
  * ApsUtils class
@@ -33,35 +24,58 @@ import static com.rongwei.safecommon.utils.SaveConstans.MINUS_ONE;
 @Component
 public class ApsUtils {
     private static final Logger log = LoggerFactory.getLogger(ApsUtils.class.getName());
+    private static ApsProcessOperationBackupDao apsProcessOperationBackupDao;
+    private static ApsProcessOperationProcessEquBackupDao apsProcessOperationProcessEquBackupDao;
+    private static RedissonClient redissonClient;
     @Autowired
     private ApsProcessOperationBackupDao autoApsProcessOperationBackupDao;
     @Autowired
     private ApsProcessOperationProcessEquBackupDao autoApsProcessOperationProcessEquBackupDao;
-
-
-    private static ApsProcessOperationBackupDao apsProcessOperationBackupDao;
-    private static ApsProcessOperationProcessEquBackupDao apsProcessOperationProcessEquBackupDao;
-
-
-    @PostConstruct
-    public void info() {
-        apsProcessOperationBackupDao = autoApsProcessOperationBackupDao;
-        apsProcessOperationProcessEquBackupDao = autoApsProcessOperationProcessEquBackupDao;
-    }
+    @Autowired
+    private RedissonClient autoredissonClient;
 
     /**
      * 删除当前员工所属工厂的排程备份信息
+     *
      * @param currentUser
      */
     public static void clearBackup(SysUserVo currentUser) {
-        if(currentUser==null){
+        if (currentUser == null) {
             currentUser = CXCommonUtils.getCurrentUser();
         }
         String factoryId = CXCommonUtils.getCurrentUserFactoryId(currentUser);
-        log.info("开始删除工厂:{}的排除备份数据",factoryId);
+        log.info("开始删除工厂:{}的排除备份数据", factoryId);
         // 先删除
         apsProcessOperationBackupDao.deletedByBlankId(null, factoryId);
         apsProcessOperationProcessEquBackupDao.deletedByBlankId(null, factoryId);
     }
 
+    /**
+     * 校验当前是否正在排程中
+     * 正在排程的情况下抛出异常
+     */
+    public static void checkScheduling() {
+        // 当前等路人所属工厂
+        SysUserVo currentUser = CXCommonUtils.getCurrentUser();
+        String tenantId = currentUser.getOrganizationDoList().get(0).getFullpid().split(",")[1];
+        if (StringUtils.isBlank(tenantId)) {
+            throw new CustomException("当前用户所属工厂信息为空");
+        }
+        // 按照所属工厂加锁
+        RLock rLock = redissonClient.getLock(tenantId);
+        boolean isLocked = rLock.isLocked();
+        // 锁是否被占用
+        if (isLocked) {
+            throw new CustomException("正在排程、请稍等一会!");
+        }
+    }
+
+    @PostConstruct
+    public void info() {
+        apsProcessOperationBackupDao = autoApsProcessOperationBackupDao;
+        apsProcessOperationProcessEquBackupDao = autoApsProcessOperationProcessEquBackupDao;
+        redissonClient = autoredissonClient;
+    }
+
+
 }