|
@@ -12,7 +12,6 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
|
|
|
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
|
|
|
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.service.*;
|
|
|
import com.rongwei.bscommon.sys.utils.ApsUtils;
|
|
@@ -47,6 +46,7 @@ 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.*;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.SchedulingStatus.PUBLISHED;
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.SchedulstatusTyep.*;
|
|
|
|
|
|
/**
|
|
|
* <p>
|
|
@@ -106,6 +106,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
@Autowired
|
|
|
private ApsProcessOperationProcessEquBackupService apsProcessOperationProcessEquBackupService;
|
|
|
|
|
|
+ public static String removeExtraZerosAndDecimal(BigDecimal bd) {
|
|
|
+ bd = bd.stripTrailingZeros();
|
|
|
+ return bd.toPlainString();
|
|
|
+ }
|
|
|
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
@@ -144,7 +148,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
deleteBackup(blankids, apsProductionOrderIds);
|
|
|
}
|
|
|
|
|
|
-
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public void blankApsCancel(List<String> apsBlankIds) {
|
|
@@ -260,44 +263,52 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
log.debug("坯料计划为空");
|
|
|
return R.error("坯料计划id 必传");
|
|
|
}
|
|
|
- List<String> searchCondition = new ArrayList<String>() {{
|
|
|
- add("40");
|
|
|
- add("50");
|
|
|
- }};
|
|
|
- // 判断是否存在已发布的工序作业
|
|
|
- List<ApsBlankOrderDo> apsBlankOrderDos = this.baseMapper.selectBatchIds(blankIds);
|
|
|
- List<ApsBlankOrderDo> collect1 = apsBlankOrderDos.stream().filter(info -> searchCondition.contains(info.getProductstatus())).collect(Collectors.toList());
|
|
|
- if (!collect1.isEmpty()) {
|
|
|
- logger.error("存在已开工的坯料计划:{}", collect1);
|
|
|
- return R.error("存在已开工的坯料计划");
|
|
|
- }
|
|
|
- // 更新坯料计划的生产状态为已发布
|
|
|
- this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().in(ApsBlankOrderDo::getId, blankIds)
|
|
|
- .set(ApsBlankOrderDo::getProductstatus, "20")
|
|
|
- .set(ApsBlankOrderDo::getSchedulingstatus, TO_BE_PUBLISHED)
|
|
|
- .set(ApsBlankOrderDo::getLockmark, LOCKMARK_N));
|
|
|
- // 更新坯料计划对应工序作业的状态为待开工
|
|
|
- apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
- .in(ApsProcessOperationDo::getBlankid, blankIds)
|
|
|
- .set(ApsProcessOperationDo::getProcessstatus, "20")
|
|
|
- .set(ApsProcessOperationDo::getLockmark, LOCKMARK_N)
|
|
|
- .set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
|
|
|
- // 更新坯料计划对应产品明细的生产状态为待开工
|
|
|
- apsProductDetailDao.updateProductStatusByBlankId(blankIds, "20");
|
|
|
- // 更新工序作业明细的生产状态为待开工
|
|
|
- processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .in(ApsProcessOperationProcessEquDo::getBlankid, blankIds)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_N)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getWorkstatus, JOBSTATUS_TO_BE_START)
|
|
|
- );
|
|
|
- List<String> collect = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getProductionorderid).distinct().collect(Collectors.toList());
|
|
|
- // 更新工序作业的状态
|
|
|
- apsProcessOperationDao.publishCancel(collect);
|
|
|
- // 根据坯料ID 删除 备份数据
|
|
|
- // 更新订单表的生产状态
|
|
|
+ List<String> productionOrderIds = new ArrayList<>();
|
|
|
+ // 虚幻坯料计划
|
|
|
blankIds.forEach(blankId -> {
|
|
|
- processOperationProcessEquService.updateOrder(blankId);
|
|
|
+ // 更新工序作业生产状态
|
|
|
+ apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
+ .eq(ApsProcessOperationDo::getBlankid, blankId)
|
|
|
+ .eq(ApsProcessOperationDo::getProcessstatus, TO_BE_STARTED)
|
|
|
+ .set(ApsProcessOperationDo::getProcessstatus, TO_BE_PUBLISHED));
|
|
|
+ // 工序作业信息
|
|
|
+ List<ApsProcessOperationDo> processOperationDos = apsProcessOperationService.list(new LambdaQueryWrapper<ApsProcessOperationDo>()
|
|
|
+ .eq(ApsProcessOperationDo::getBlankid, blankId).orderByDesc(ApsProcessOperationDo::getProcessstatus));
|
|
|
+ // 坯料计划排程状态
|
|
|
+ String schedulingstatus;
|
|
|
+ // 坯料计划生产状态
|
|
|
+ String producttStatus;
|
|
|
+ if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_PUBLISHED)) {
|
|
|
+ schedulingstatus = SCHEDULSTATUS_TORELEASE;
|
|
|
+ producttStatus = TO_BE_PUBLISHED;
|
|
|
+ } else if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_SCHEDULED)) {
|
|
|
+ schedulingstatus = SCHEDULSTATUS_TOSCHEDULE;
|
|
|
+ producttStatus = TO_BE_SCHEDULED;
|
|
|
+ } else {
|
|
|
+ schedulingstatus = SCHEDULSTATUS_HASRELEASE;
|
|
|
+ List<String> processStatusList = processOperationDos.stream()
|
|
|
+ .map(ApsProcessOperationDo::getProcessstatus)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ if (processOperationDos.get(0).getProcessstatus().equals(TO_BE_STARTED)) {
|
|
|
+ producttStatus = TO_BE_STARTED;
|
|
|
+ } else if (processStatusList.size() == 1 && processStatusList.get(0).equals(COMPLETED)) {
|
|
|
+ producttStatus = COMPLETED;
|
|
|
+ } else {
|
|
|
+ producttStatus = PROCESSING;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ ApsBlankOrderDo blankOrderDo = this.getById(blankId);
|
|
|
+ productionOrderIds.add(blankOrderDo.getProductionorderid());
|
|
|
+ this.update(new LambdaUpdateWrapper<ApsBlankOrderDo>().eq(ApsBlankOrderDo::getId, blankId)
|
|
|
+ .set(ApsBlankOrderDo::getProductstatus, producttStatus)
|
|
|
+ .set(ApsBlankOrderDo::getSchedulingstatus, schedulingstatus));
|
|
|
});
|
|
|
+ // 更新产品明细的生产状态
|
|
|
+ apsProductDetailDao.publishCancel(blankIds);
|
|
|
+ // 更新订单的生产状态
|
|
|
+ apsProcessOperationDao.publishCancel(productionOrderIds);
|
|
|
+ // 根据坯料ID 删除 备份数据
|
|
|
ApsUtils.clearBackup(null);
|
|
|
return R.ok();
|
|
|
}
|
|
@@ -655,7 +666,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
|
|
|
// 工序作业明细ID
|
|
|
- List<String> apsProcessOperationIds = processes.stream().map(ProductionProcesses::getId).distinct().collect(Collectors.toList());
|
|
|
+ List<String> apsProcessOperationIds = processes.stream().map(ProductionProcesses::getBsProcessesId)
|
|
|
+ .flatMap(List::stream)
|
|
|
+ .distinct()
|
|
|
+ .collect(Collectors.toList());
|
|
|
SysUserVo currentUser = CXCommonUtils.getCurrentUser();
|
|
|
//删除备份
|
|
|
ApsUtils.clearBackup(null);
|
|
@@ -1445,18 +1459,25 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
|
|
|
//=============校验坯料长度=================
|
|
|
- //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
|
|
|
- if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
|
|
|
- //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
|
|
|
- String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
|
|
|
- //如果是铝板或板锭
|
|
|
- if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
|
|
|
- //坯料长度为空
|
|
|
- if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
- return R.error("坯料是铝板和板锭时长度必填");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //如果坯料需求的外观类型是板锭或铝板,并且坯料长度为空,则提示:坯料是板锭和铝板时长度必填
|
|
|
+ if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getBlankappearance())
|
|
|
+ && Arrays.asList(SaveConstans.BlankAppearanceType.ALUMINUM_PLATE, SaveConstans.BlankAppearanceType.ALUMINUM_INGOT).contains(apsBlankOrderDo.getBlankappearance())
|
|
|
+ && ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
+ return R.error("坯料是铝板和铝锭时长度必填");
|
|
|
+ }
|
|
|
+
|
|
|
+// //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
|
|
|
+// if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
|
|
|
+// //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
|
|
|
+// String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
|
|
|
+// //如果是铝板或板锭
|
|
|
+// if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
|
|
|
+// //坯料长度为空
|
|
|
+// if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
+// return R.error("坯料是铝板和板锭时长度必填");
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
if (checkLevel == 2 || checkLevel == 3) {
|
|
|
//==============拼接工艺路线输出成品和工艺输出物料规格==============
|
|
|
//查询坯料计划对应工艺路线的输出成品
|
|
@@ -1753,7 +1774,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
-
|
|
|
public R checkBlankOrder(CheckAndSaveOrUpdateBlankReq req, int j) {
|
|
|
//获取校验等级
|
|
|
Integer checkLevel = req.getCheckLevel();
|
|
@@ -1766,18 +1786,24 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
|
|
|
|
|
|
//=============校验坯料长度=================
|
|
|
- //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
|
|
|
- if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
|
|
|
- //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
|
|
|
- String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
|
|
|
- //如果是铝板或板锭
|
|
|
- if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
|
|
|
- //坯料长度为空
|
|
|
- if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
- return R.error("第" + j + "个坯料计划 坯料是铝板和板锭时长度必填");
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
+ //如果坯料需求的外观类型是板锭或铝板,并且坯料长度为空,则提示:坯料是板锭和铝板时长度必填
|
|
|
+ if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getBlankappearance())
|
|
|
+ && Arrays.asList(SaveConstans.BlankAppearanceType.ALUMINUM_PLATE, SaveConstans.BlankAppearanceType.ALUMINUM_INGOT).contains(apsBlankOrderDo.getBlankappearance())
|
|
|
+ && ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
+ return R.error("第" + j + "个坯料计划 坯料是铝板和铝锭时长度必填");
|
|
|
+ }
|
|
|
+// //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
|
|
|
+// if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
|
|
|
+// //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
|
|
|
+// String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProducttypeid());
|
|
|
+// //如果是铝板或板锭
|
|
|
+// if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
|
|
|
+// //坯料长度为空
|
|
|
+// if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
+// return R.error("第" + j + "个坯料计划 坯料是铝板和板锭时长度必填");
|
|
|
+// }
|
|
|
+// }
|
|
|
+// }
|
|
|
if (checkLevel == 3) {
|
|
|
//==============校验交期==================
|
|
|
/**
|
|
@@ -2197,11 +2223,6 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
- public static String removeExtraZerosAndDecimal(BigDecimal bd) {
|
|
|
- bd = bd.stripTrailingZeros();
|
|
|
- return bd.toPlainString();
|
|
|
- }
|
|
|
-
|
|
|
/**
|
|
|
* 根据坯料计划ID,更新 拼接字段(输出订单产品、输出成品、坯料输出物料类型、坯料输出物料规格)
|
|
|
*
|
|
@@ -2276,4 +2297,14 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
throw new CustomException("没有找到该坯料计划的输出成品");
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ public R checkSchedule(List<String> blankIdList) {
|
|
|
+ //是否正在排程
|
|
|
+ ApsUtils.checkScheduling(null);
|
|
|
+
|
|
|
+ //
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
}
|