|
@@ -41,8 +41,7 @@ import static com.rongwei.safecommon.utils.SaveConstans.DatePattern.DATE_PATTERN
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.JobStatus.JOBSTATUS_TO_BE_START;
|
|
|
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_PUBLISHED;
|
|
|
-import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.TO_BE_SCHEDULED;
|
|
|
+import static com.rongwei.safecommon.utils.SaveConstans.ProductionStatus.*;
|
|
|
import static com.rongwei.safecommon.utils.SaveConstans.SchedulingStatus.PUBLISHED;
|
|
|
|
|
|
/**
|
|
@@ -82,6 +81,10 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
private ApsProductDetailService apsProductDetailService;
|
|
|
@Autowired
|
|
|
private ApsProductDetailDao apsProductDetailDao;
|
|
|
+ @Autowired
|
|
|
+ private ApsWorkInProgressInventoryService apsWorkInProgressInventoryService;
|
|
|
+ @Autowired
|
|
|
+ private ApsProcessOutputProductService apsProcessOutputProductService;
|
|
|
|
|
|
|
|
|
@Override
|
|
@@ -188,24 +191,25 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
.set(ApsProcessOperationDo::getLockmark, LOCKMARK_Y)
|
|
|
.set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
|
|
|
// 更新坯料计划对应产品明细的生产状态为待开工
|
|
|
- apsProductDetailDao.updateProductStatusByBlankId(blankIds,"30");
|
|
|
+ apsProductDetailDao.updateProductStatusByBlankId(blankIds, "30");
|
|
|
// 更新工序作业明细的生产状态为待开工
|
|
|
processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .in(ApsProcessOperationProcessEquDo::getBlankid,blankIds)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getLockmark,LOCKMARK_Y)
|
|
|
+ .in(ApsProcessOperationProcessEquDo::getBlankid, blankIds)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getLockmark, LOCKMARK_Y)
|
|
|
.set(ApsProcessOperationProcessEquDo::getWorkstatus, JOBSTATUS_TO_BE_START)
|
|
|
);
|
|
|
List<String> collect = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getProductionorderid).distinct().collect(Collectors.toList());
|
|
|
// 更新工序作业的状态
|
|
|
apsProcessOperationDao.publish(collect);
|
|
|
// 根据坯料ID 删除 备份数据
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankIds,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankIds, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds, null);
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消发布
|
|
|
+ *
|
|
|
* @param blankIds
|
|
|
* @return
|
|
|
*/
|
|
@@ -239,19 +243,19 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
.set(ApsProcessOperationDo::getLockmark, LOCKMARK_N)
|
|
|
.set(ApsProcessOperationDo::getWorkstatus, JOBSTATUS_TO_BE_START));
|
|
|
// 更新坯料计划对应产品明细的生产状态为待开工
|
|
|
- apsProductDetailDao.updateProductStatusByBlankId(blankIds,"20");
|
|
|
+ apsProductDetailDao.updateProductStatusByBlankId(blankIds, "20");
|
|
|
// 更新工序作业明细的生产状态为待开工
|
|
|
processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .in(ApsProcessOperationProcessEquDo::getBlankid,blankIds)
|
|
|
- .set(ApsProcessOperationProcessEquDo::getLockmark,LOCKMARK_N)
|
|
|
+ .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 删除 备份数据
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankIds,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankIds, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds, null);
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
@@ -330,12 +334,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
return R.error("坯料计划ID和解锁时间都为空");
|
|
|
}
|
|
|
|
|
|
- if(!blackOrderId.isEmpty()){
|
|
|
+ if (!blackOrderId.isEmpty()) {
|
|
|
// 校验坯料计划是否开工
|
|
|
Integer integer = apsBlankOrderDao.selectCount(new LambdaQueryWrapper<ApsBlankOrderDo>()
|
|
|
.in(ApsBlankOrderDo::getId, blackOrderId)
|
|
|
.in(ApsBlankOrderDo::getProductstatus, "40", "50"));
|
|
|
- if(integer>0){
|
|
|
+ if (integer > 0) {
|
|
|
log.error("所选作业坯料计划已开工,不可以解锁");
|
|
|
return R.error("所选作业坯料计划已开工,不可以解锁");
|
|
|
}
|
|
@@ -352,7 +356,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
// 获取所有 待发布 待开工的 坯料计划
|
|
|
blackOrderId = this.baseMapper.getIdByLockTime(date, lockMark);
|
|
|
}
|
|
|
- if(blackOrderId.isEmpty()){
|
|
|
+ if (blackOrderId.isEmpty()) {
|
|
|
log.debug("暂无需要锁定或者解锁的批量计划");
|
|
|
return R.ok("暂无需要锁定或者解锁的批量计划");
|
|
|
}
|
|
@@ -363,7 +367,7 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
ApsBlankOrderDo blankOrderDo = new ApsBlankOrderDo();
|
|
|
blankOrderDo.setId(id);
|
|
|
blankOrderDo.setLockmark(lockMark);
|
|
|
- if (LOCKMARK_N.equals(lockMark)){
|
|
|
+ if (LOCKMARK_N.equals(lockMark)) {
|
|
|
blankOrderDo.setProductstatus("20");
|
|
|
}
|
|
|
blankOrderDos.add(blankOrderDo);
|
|
@@ -374,17 +378,17 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
}
|
|
|
// 工序作业锁定标识更新
|
|
|
apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
- .set(ApsProcessOperationDo::getLockmark,lockMark)
|
|
|
+ .set(ApsProcessOperationDo::getLockmark, lockMark)
|
|
|
.in(ApsProcessOperationDo::getBlankid, blackOrderId));
|
|
|
// 工序作业排程计划锁定
|
|
|
processOperationProcessEquService.update(new LambdaUpdateWrapper<ApsProcessOperationProcessEquDo>()
|
|
|
- .set(ApsProcessOperationProcessEquDo::getLockmark,lockMark)
|
|
|
+ .set(ApsProcessOperationProcessEquDo::getLockmark, lockMark)
|
|
|
.in(ApsProcessOperationProcessEquDo::getBlankid, blackOrderId));
|
|
|
- if(LOCKMARK_N.equals(lockMark)){
|
|
|
- // 更新坯料计划对应工序作业的生产状态为待发布
|
|
|
+ if (LOCKMARK_N.equals(lockMark)) {
|
|
|
+ // 更新坯料计划对应工序作业的生产状态为待发布
|
|
|
apsProcessOperationService.update(new LambdaUpdateWrapper<ApsProcessOperationDo>()
|
|
|
- .in(ApsProcessOperationDo::getBlankid,blackOrderId)
|
|
|
- .set(ApsProcessOperationDo::getProcessstatus,"20"));
|
|
|
+ .in(ApsProcessOperationDo::getBlankid, blackOrderId)
|
|
|
+ .set(ApsProcessOperationDo::getProcessstatus, "20"));
|
|
|
}
|
|
|
// 回传坯料计划ID 用于前段更新锁定状态
|
|
|
return R.ok(blackOrderId);
|
|
@@ -411,12 +415,12 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
*
|
|
|
* @param apsPlanVo
|
|
|
*/
|
|
|
- public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception{
|
|
|
+ public void apsScheduling(ApsPlanVo apsPlanVo) throws Exception {
|
|
|
List<ApsBlankOrderVo> apsBlankOrders = new ArrayList<>();
|
|
|
- if(apsPlanVo.getApsProductionOrders() != null){
|
|
|
+ if (apsPlanVo.getApsProductionOrders() != null) {
|
|
|
for (ApsProductionOrderDo apsProductionOrder : apsPlanVo.getApsProductionOrders()) {
|
|
|
List<ApsBlankOrderVo> byOrderId = apsBlankOrderDao.getByOrderId(apsProductionOrder.getId());
|
|
|
- if(byOrderId != null && byOrderId.size()>0){
|
|
|
+ if (byOrderId != null && byOrderId.size() > 0) {
|
|
|
apsBlankOrders.addAll(byOrderId);
|
|
|
}
|
|
|
}
|
|
@@ -595,8 +599,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
//获取备份的坯料计划ID
|
|
|
Set<String> blankIds = apsProcessOperationProcessEquDos.stream().map(ApsProcessOperationProcessEquDo::getBlankid).collect(Collectors.toSet());
|
|
|
ArrayList<String> blankIdList = new ArrayList<>(blankIds);
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankIdList,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIdList,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankIdList, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIdList, null);
|
|
|
//增加备份
|
|
|
List<List<String>> partition1 = Lists.partition(apsProcessOperationIds, 500);
|
|
|
partition1.forEach(data -> {
|
|
@@ -1101,8 +1105,8 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
*/
|
|
|
private void deleteBackup(List<String> blankids, List<String> apsProductionOrderIds) {
|
|
|
// 删除工序作业和工序作业明备份数据
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankids,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankids,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankids, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankids, null);
|
|
|
// 更工序作业生产状态=待排程,是否锁定=否,
|
|
|
apsProcessOperationService.remove(new LambdaQueryWrapper<ApsProcessOperationDo>().in(ApsProcessOperationDo::getBlankid, blankids));
|
|
|
// 清空作业明细
|
|
@@ -1136,4 +1140,202 @@ public class ApsBlankOrderServiceImpl extends ServiceImpl<ApsBlankOrderDao, ApsB
|
|
|
apsProductDetailService.updateBatchById(productDetailDoList);
|
|
|
// apsProductDetailDao.updateProductstatus(apsProductionOrderIds);
|
|
|
}
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R checkAndSaveOrUpdateBlank(CheckAndSaveOrUpdateBlankReq req) {
|
|
|
+ //获取坯料计划内容
|
|
|
+ ApsBlankOrderDo apsBlankOrderDo = req.getApsBlankOrderDo();
|
|
|
+
|
|
|
+ //=============校验坯料长度=================
|
|
|
+ //如果坯料产品类型对应产品外观类型是铝板或板锭,并且坯料长度为空,则提示:坯料是铝板和板锭时长度必填
|
|
|
+ if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProducttypeid())) {
|
|
|
+ //目前数据字典存在3层关系,选择只能选择最后一层,二开查询最后一层的父节点对应数据的父节点,判断是否为铝板或板锭的主键ID
|
|
|
+ String pid = this.baseMapper.selectDictAboutProductType(apsBlankOrderDo.getProductionorderid());
|
|
|
+ //如果是铝板或板锭
|
|
|
+ if (ObjectUtil.isNotEmpty(pid) && (pid.equals(SaveConstans.ProductionType.BANDING_ID) || pid.equals(SaveConstans.ProductionType.LVBAN_ID))) {
|
|
|
+ //坯料长度为空
|
|
|
+ if (ObjectUtil.isEmpty(apsBlankOrderDo.getProlength())) {
|
|
|
+ return R.error("坯料是铝板和板锭时长度必填");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //==============拼接工艺路线输出成品==============
|
|
|
+ //查询坯料计划对应工艺路线的输出成品
|
|
|
+ List<String> processOutputList = this.baseMapper.selectProcessByBlankId(apsBlankOrderDo.getId());
|
|
|
+ if (processOutputList != null && processOutputList.size() > 0) {
|
|
|
+ String outputProcessMaterial = "";
|
|
|
+ //排序
|
|
|
+ processOutputList.sort(String::compareTo);
|
|
|
+ for (int i = 0; i < processOutputList.size(); i++) {
|
|
|
+ outputProcessMaterial += "[" + (i + 1) + "]" + processOutputList.get(i);
|
|
|
+ if (i < processOutputList.size() - 1) {
|
|
|
+ outputProcessMaterial += ",\r\n";
|
|
|
+ }
|
|
|
+ }
|
|
|
+ apsBlankOrderDo.setOutputmaterial(outputProcessMaterial);
|
|
|
+ } else {
|
|
|
+ return R.error("工艺路线没有输出成品");
|
|
|
+ }
|
|
|
+
|
|
|
+ //=============校验输出成品==============
|
|
|
+ //产品明细
|
|
|
+ List<ApsProductDetailDo> apsProductDetailDoList = req.getApsProductDetailDoList();
|
|
|
+ //输出成品
|
|
|
+ List<ApsProcessOutputProductDo> apsProcessOutputProductDoList = req.getApsProcessOutputProductDoList();
|
|
|
+
|
|
|
+ //如果坯料计划未开工(生产状态<=30)
|
|
|
+ if (apsBlankOrderDo.getProductstatus().compareTo(TO_BE_STARTED) <= 0) {
|
|
|
+ for (ApsProcessOutputProductDo apsProcessOutputProductDo : apsProcessOutputProductDoList) {
|
|
|
+ boolean haveProductDetail = false;
|
|
|
+ for (ApsProductDetailDo apsProductDetailDo : apsProductDetailDoList) {
|
|
|
+ //判断是否存在对应的产品明细
|
|
|
+ if (apsProcessOutputProductDo.getProductid().equals(apsProductDetailDo.getId())) {
|
|
|
+ haveProductDetail = true;
|
|
|
+
|
|
|
+ if (apsProductDetailDo.getInputmaterialdescription().equals(apsProcessOutputProductDo.getProductname())) {
|
|
|
+ //如果输出单卷重<单卷重(起)或 输出单卷重>单卷重(止),错误提示:输出成品:{订单产品} 输出单卷重不符合订单要求
|
|
|
+ if (apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightstart()) < 0
|
|
|
+ || apsProcessOutputProductDo.getOutputonerollweigth().compareTo(apsProductDetailDo.getSinglerollweightend()) > 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不符合订单要求");
|
|
|
+ } else {//如果对应订单产品明细的订单产品字段值不等于输出成品的订单产品字段值,错误提示:输出成品:{订单产品} 对应订单产品已修改或已删除,请重新选择订单产品
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 对应订单产品已修改或已删除,请重新选择订单产品");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //存在对应的产品明细
|
|
|
+ if (haveProductDetail) {
|
|
|
+ //如果输出单卷重>坯料单卷重,错误提示:输出单卷重不能超过坯料单卷重
|
|
|
+ //(注意:成品重量和坯料重量单位吨和公斤需要转换后比较)
|
|
|
+ //转化单卷重 单位统一为 公斤(kg)
|
|
|
+
|
|
|
+ //输出的单卷重
|
|
|
+ BigDecimal outputWeight = new BigDecimal(0);
|
|
|
+ //坯料的单卷重
|
|
|
+ BigDecimal blankWeight = new BigDecimal(0);
|
|
|
+ //统一输出的重量
|
|
|
+ //公斤/千克
|
|
|
+ if (apsProcessOutputProductDo.getCountunit().equals(SaveConstans.CountUnit.KG)) {
|
|
|
+ outputWeight = apsProcessOutputProductDo.getOutputonerollweigth();
|
|
|
+ }
|
|
|
+ //吨
|
|
|
+ if (apsProcessOutputProductDo.getCountunit().equals(SaveConstans.CountUnit.TON)) {
|
|
|
+ outputWeight = apsProcessOutputProductDo.getOutputonerollweigth().multiply(new BigDecimal(1000));
|
|
|
+ }
|
|
|
+
|
|
|
+ //统一坯料的重量
|
|
|
+ if (apsBlankOrderDo.getNumberunit().equals(SaveConstans.CountUnit.KG)) {
|
|
|
+ blankWeight = apsBlankOrderDo.getSinglerollweight();
|
|
|
+ }
|
|
|
+ if (apsBlankOrderDo.getNumberunit().equals(SaveConstans.CountUnit.TON)) {
|
|
|
+ blankWeight = apsBlankOrderDo.getSinglerollweight().multiply(new BigDecimal(1000));
|
|
|
+ }
|
|
|
+ //输出单卷重>坯料单卷重
|
|
|
+ if (outputWeight.compareTo(blankWeight) > 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 输出单卷重不能超过坯料单卷重");
|
|
|
+ }
|
|
|
+ } else {//不存在对应的产品明细
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 对应订单产品已修改或已删除,请重新选择订单产品");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //不论坯料计划的状态,需要增加的判断
|
|
|
+ for (ApsProcessOutputProductDo apsProcessOutputProductDo : apsProcessOutputProductDoList) {
|
|
|
+ boolean haveProductDetail = false;
|
|
|
+ for (ApsProductDetailDo apsProductDetailDo : apsProductDetailDoList) {
|
|
|
+ //判断是否存在对应的产品明细
|
|
|
+ if (apsProcessOutputProductDo.getProductid().equals(apsProductDetailDo.getId())) {
|
|
|
+ haveProductDetail = true;
|
|
|
+ //计划输出订单重量 > 对应订单产品订单总数量;错误提示:输出成品 {订单产品} 计划输出订单重量 不能大于 订单总数量
|
|
|
+ if (apsProcessOutputProductDo.getPlanoutputonerollweight().compareTo(apsProductDetailDo.getTotalordercount()) > 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 计划输出订单重量 不能大于 订单总数量");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (!haveProductDetail && apsProcessOutputProductDo.getPlanoutputonerollweight().compareTo(new BigDecimal(0)) > 0) {
|
|
|
+ return R.error("输出成品:" + apsProcessOutputProductDo.getProductname() + " 已修改或已删除,并已开工,计划输出订单重量 不能大于 0");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //===========坯料计划保存之前的校验=============
|
|
|
+ //校验坯料需求
|
|
|
+ //后台校验备料:如果是备料计划,
|
|
|
+ //并且保存前备料已经被其他计划员新增的备料计划选择并保存了
|
|
|
+ //(即:坯料的是否备料=是,并且所选在制品的备料计划ID不为空,并且不是该备料计划ID),
|
|
|
+ //则错误提示:所选在制品已被其他备料计划使用
|
|
|
+ ApsWorkInProgressInventoryDo progressWork = null;
|
|
|
+ if (apsBlankOrderDo.getPreparematerial().equals("是") && ObjectUtil.isNotEmpty(req.getProgressId())) {
|
|
|
+ progressWork = apsWorkInProgressInventoryService.getById(req.getProgressId());
|
|
|
+ if (ObjectUtil.isNotEmpty(progressWork.getPlanmaterialid())) {
|
|
|
+ return R.error("所选在制品已被其他备料计划使用");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //============校验工艺路线=============
|
|
|
+ //如果坯料需求的坯料输出成品字段值不等于坯料需求的工艺输出成品字段值,错误提示:工艺路线输出成品与坯料输出成品不一致
|
|
|
+ if (!apsBlankOrderDo.getOutputfinishproduct().equals(apsBlankOrderDo.getOutputmaterial())) {
|
|
|
+ return R.error("工艺路线输出成品与坯料输出成品不一致");
|
|
|
+ }
|
|
|
+ //如果坯料需求的是否备料=是,并且首道工序作业的是否坯料工序=是,错误提示:工艺路线错误,首道工序作业是坯料工序,备料不能作为输入物料
|
|
|
+ //是否备料
|
|
|
+ if (apsBlankOrderDo.getPreparematerial().equals("是")) {
|
|
|
+ //查询坯料计划的工序作业
|
|
|
+ List<ApsProcessOperationDo> processOperationList = apsProcessOperationService.list(new QueryWrapper<ApsProcessOperationDo>().lambda().eq(ApsProcessOperationDo::getBlankid, apsBlankOrderDo.getId()));
|
|
|
+ for (ApsProcessOperationDo processOperationDo : processOperationList) {
|
|
|
+ //没有前道工序作业ID
|
|
|
+ if (ObjectUtil.isEmpty(processOperationDo.getPreviousprocessid())) {
|
|
|
+ if (processOperationDo.getIfblankprocess().equals("是")) {
|
|
|
+ return R.error("工艺路线错误,首道工序作业是坯料工序,备料不能作为输入物料");
|
|
|
+ }
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //============校验工序作业=============
|
|
|
+ Map<String, Object> params = new HashMap<>();
|
|
|
+ params.put("BLANKID", apsBlankOrderDo.getId());
|
|
|
+ R r = apsProcessOperationService.checkOperation(params);
|
|
|
+ if (!(r.getCode().equals("200"))) {
|
|
|
+ return R.error(r.getMsg());
|
|
|
+ }
|
|
|
+
|
|
|
+ //更新或保存坯料计划和输出成品
|
|
|
+ this.saveOrUpdate(apsBlankOrderDo);
|
|
|
+ apsProcessOutputProductService.saveOrUpdateBatch(apsProcessOutputProductDoList);
|
|
|
+
|
|
|
+ //如果在制品不为空,并且为新增备料
|
|
|
+ if (ObjectUtil.isNotEmpty(req.getProgressId()) && apsBlankOrderDo.getPreparematerial().equals("是")) {
|
|
|
+ //将对应备料库(在制品库存表【aps_work_in_progress_inventory表】)中的备料计划ID(PLANMATERIALID)字段设置为坯料计划的ID
|
|
|
+ ApsWorkInProgressInventoryDo apsWorkInProgressInventoryDo = new ApsWorkInProgressInventoryDo();
|
|
|
+ apsWorkInProgressInventoryDo.setId(req.getProgressId());
|
|
|
+ apsWorkInProgressInventoryDo.setPlanmaterialid(apsBlankOrderDo.getId());
|
|
|
+ apsWorkInProgressInventoryDo.setWorkinprocessstatus(SaveConstans.WorkInProgressStatus.WAIT_WORK);
|
|
|
+ apsWorkInProgressInventoryService.updateById(apsWorkInProgressInventoryDo);
|
|
|
+
|
|
|
+ //借调逻辑
|
|
|
+ if (progressWork.getWorkinprocessstatus().equals(SaveConstans.WorkInProgressStatus.WAIT_WORK)) {
|
|
|
+ //获取该在制品的工序作业ID
|
|
|
+ String processoperationid = progressWork.getProcessoperationid();
|
|
|
+ //获取该在制品的批次号
|
|
|
+ String batchnumber = progressWork.getBatchnumber();
|
|
|
+ //该对应工序作业的已借调卷数=已借调卷数+1
|
|
|
+ this.baseMapper.processAddSecondRoll(processoperationid);
|
|
|
+ //将在制品的作业输出物料ID对应的所有后道工序作业的所有作业明细的待加工料卷批次号去掉“{批次号},”
|
|
|
+ this.baseMapper.processDeleteBatchNumber(batchnumber, processoperationid);
|
|
|
+ //处理后续工序状态
|
|
|
+ Map<String, Object> params2 = new HashMap<>();
|
|
|
+ params2.put("processId", processoperationid);
|
|
|
+ R r2 = apsProcessOperationService.updateBorrowProcess(params2);
|
|
|
+ if (!r2.getCode().equals("200")) {
|
|
|
+ return R.error(r2.getMsg());
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return R.ok();
|
|
|
+ }
|
|
|
}
|