|
@@ -18,6 +18,7 @@ import com.rongwei.bscommon.sys.service.*;
|
|
|
import com.rongwei.bsentity.domain.*;
|
|
|
import com.rongwei.bsentity.vo.*;
|
|
|
import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
import com.rongwei.rwcommon.base.exception.CustomException;
|
|
|
import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
import com.rongwei.rwcommon.utils.StringUtils;
|
|
@@ -34,6 +35,8 @@ import java.time.ZoneId;
|
|
|
import java.util.*;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_N;
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.LockmarkType.LOCKMARK_Y;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.TO_BE_SCHEDULED;
|
|
|
|
|
|
/**
|
|
@@ -148,6 +151,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
this.updateById(apsBlankOrderDo);
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 获取锁定和解锁的 搜索事件
|
|
|
+ *
|
|
|
+ * @param lockStartTime
|
|
|
+ * @param startSchedulerun
|
|
|
+ * @return
|
|
|
+ */
|
|
|
+ private Date orderLockGetSearChDate(Date lockStartTime, int startSchedulerun, String lockMark) {
|
|
|
+ Calendar instance = Calendar.getInstance();
|
|
|
+ instance.add(Calendar.HOUR_OF_DAY, startSchedulerun);
|
|
|
+ Date time = instance.getTime();
|
|
|
+ if (LOCKMARK_Y.equals(lockMark)) {
|
|
|
+ return lockStartTime.compareTo(time) > 0 ? lockStartTime : time;
|
|
|
+ } else {
|
|
|
+ return lockStartTime.compareTo(time) > 0 ? lockStartTime : time;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
/**
|
|
|
* 锁定、解锁
|
|
|
*
|
|
@@ -155,29 +176,78 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
* @throws Exception
|
|
|
*/
|
|
|
@Override
|
|
|
- public void orderLock(OrderLockVo orderLockVo) throws Exception {
|
|
|
- if (StringUtils.isNotBlank(orderLockVo.getLockMark())) {
|
|
|
- if (orderLockVo.getBlackOrderId() != null && orderLockVo.getBlackOrderId().size() > 0) {
|
|
|
- // 组装待更新坯料计划实体
|
|
|
- List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
|
|
|
- List<String> blankids = new ArrayList<>();
|
|
|
- for (String id : orderLockVo.getBlackOrderId()) {
|
|
|
- ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
|
|
|
- blankOrderDo.setId(id);
|
|
|
- blankOrderDo.setLockmark(orderLockVo.getLockMark());
|
|
|
- blankOrderDos.add(blankOrderDo);
|
|
|
- blankids.add(id);
|
|
|
- }
|
|
|
- // 坯料计划锁定标识更新
|
|
|
- if (blankOrderDos != null && blankOrderDos.size() > 0) {
|
|
|
- this.updateBatchById(blankOrderDos);
|
|
|
- }
|
|
|
- // 工序作业锁定标识更新
|
|
|
- apsProcessOperationService.update(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankids));
|
|
|
- // 工序作业排程计划锁定
|
|
|
- processOperationProcessEquService.update(new LambdaQueryWrapper<ApsProcessOperationProcessEquDo>().in(ApsProcessOperationProcessEquDo::getBlankid, blankids));
|
|
|
+ public R orderLock(OrderLockVo orderLockVo) {
|
|
|
+ String lockMark = orderLockVo.getLockMark();
|
|
|
+ if (StringUtils.isBlank(lockMark)) {
|
|
|
+ log.error("锁定状态必填");
|
|
|
+ return R.error("锁定状态必填");
|
|
|
+ }
|
|
|
+ List<String> blackOrderId = orderLockVo.getBlackOrderId();
|
|
|
+ blackOrderId = blackOrderId.stream().filter(StringUtils::isNotBlank).collect(Collectors.toList());
|
|
|
+ Date lockStartTime = orderLockVo.getLockStartTime();
|
|
|
+ if (blackOrderId.isEmpty() && lockStartTime == null) {
|
|
|
+ log.error("坯料计划ID和解锁时间都为空");
|
|
|
+ return R.error("坯料计划ID和解锁时间都为空");
|
|
|
+ }
|
|
|
+
|
|
|
+ if(!blackOrderId.isEmpty()){
|
|
|
+ // 校验坯料计划是否开工
|
|
|
+ Integer integer = apsBlankOrderDao.selectCount(new LambdaQueryWrapper<ApsBlankOrderDo>()
|
|
|
+ .in(ApsBlankOrderDo::getId, blackOrderId)
|
|
|
+ .in(ApsBlankOrderDo::getProductstatus, "40", "50"));
|
|
|
+ if(integer>0){
|
|
|
+ log.error("所选作业坯料计划已开工,不可以解锁");
|
|
|
+ return R.error("所选作业坯料计划已开工,不可以解锁");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (lockStartTime != null) {
|
|
|
+ // 获取排程参数设置
|
|
|
+ List<ApsScheduleConfigDo> apsConfigs = apsScheduleConfigService.list();
|
|
|
+ // 默认最小排程时间
|
|
|
+ int defaultStartStartSchedulerun = 8;
|
|
|
+ if (!apsConfigs.isEmpty()) {
|
|
|
+ defaultStartStartSchedulerun = apsConfigs.get(0).getStartschedulerun();
|
|
|
}
|
|
|
+ Date date = orderLockGetSearChDate(lockStartTime, defaultStartStartSchedulerun, lockMark);
|
|
|
+ // 获取所有 待发布 待开工的 坯料计划
|
|
|
+ blackOrderId = this.baseMapper.getIdByLockTime(date, lockMark);
|
|
|
+ }
|
|
|
+ if(blackOrderId.isEmpty()){
|
|
|
+ log.debug("暂无需要锁定或者解锁的批量计划");
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
+ // 组装待更新坯料计划实体
|
|
|
+ List<ApsBlankOrderDo> blankOrderDos = new ArrayList<>();
|
|
|
+
|
|
|
+ for (String id : blackOrderId) {
|
|
|
+ ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
|
|
|
+ blankOrderDo.setId(id);
|
|
|
+ blankOrderDo.setLockmark(lockMark);
|
|
|
+ if (LOCKMARK_N.equals(lockMark)){
|
|
|
+ blankOrderDo.setProductstatus("20");
|
|
|
+ }
|
|
|
+ blankOrderDos.add(blankOrderDo);
|
|
|
+ }
|
|
|
+ // 坯料计划锁定标识更新
|
|
|
+ if (blankOrderDos.size() > 0) {
|
|
|
+ this.updateBatchById(blankOrderDos);
|
|
|
+ }
|
|
|
+ // 工序作业锁定标识更新
|
|
|
+ apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
+ .set(ApsProcessOperationDo::getLockmark,lockMark)
|
|
|
+ .in(ApsProcessOperationDo::getBlankid, blackOrderId));
|
|
|
+ // 工序作业排程计划锁定
|
|
|
+ processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getLockmark,lockMark)
|
|
|
+ .in(ApsProcessOperationProcessEquDo::getBlankid, blackOrderId));
|
|
|
+ if(LOCKMARK_N.equals(lockMark)){
|
|
|
+ // 更新坯料计划对应工序作业的生产状态为待发布
|
|
|
+ apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
+ .in(ApsProcessOperationDo::getBlankid,blackOrderId)
|
|
|
+ .set(ApsProcessOperationDo::getProcessstatus,"20"));
|
|
|
}
|
|
|
+ // 回传坯料计划ID 用于前段更新锁定状态
|
|
|
+ return R.ok(blackOrderId);
|
|
|
}
|
|
|
|
|
|
/**
|