|
@@ -1,12 +1,19 @@
|
|
|
package com.rongwei.bscommon.sys.service.impl;
|
|
|
|
|
|
+import cn.hutool.core.date.DateUtil;
|
|
|
+import cn.hutool.core.util.ObjectUtil;
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
import com.rongwei.bscommon.sys.dao.*;
|
|
|
import com.rongwei.bscommon.sys.service.ApsProductionOrderService;
|
|
|
import com.rongwei.bsentity.domain.ApsBlankOrderDo;
|
|
|
+import com.rongwei.bsentity.domain.ApsProductDetailDo;
|
|
|
+import com.rongwei.bsentity.domain.ApsProductionMergeOrderDo;
|
|
|
import com.rongwei.bsentity.domain.ApsProductionOrderDo;
|
|
|
+import com.rongwei.bsentity.vo.ApsProductDetailVo;
|
|
|
+import com.rongwei.bsentity.vo.CheckAndSaveOrUpdateOrderReq;
|
|
|
import com.rongwei.rwcommon.base.R;
|
|
|
+import com.rongwei.safecommon.utils.SaveConstans;
|
|
|
import org.slf4j.Logger;
|
|
|
import org.slf4j.LoggerFactory;
|
|
|
import org.springframework.beans.factory.annotation.Autowired;
|
|
@@ -36,29 +43,30 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
@Autowired
|
|
|
private ApsProcessOperationProcessEquBackupDao apsProcessOperationProcessEquBackupDao;
|
|
|
|
|
|
- public static final String ERROR_MSG ="%s上诉订单的排程交货期大于承诺交货期";
|
|
|
+ public static final String ERROR_MSG = "%s上诉订单的排程交货期大于承诺交货期";
|
|
|
|
|
|
/**
|
|
|
* 发布订单排程
|
|
|
+ *
|
|
|
* @param productionOrderIds
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
@Transactional(rollbackFor = Exception.class)
|
|
|
public R publish(List<String> productionOrderIds) {
|
|
|
- if(productionOrderIds.isEmpty()){
|
|
|
- return R.ok();
|
|
|
+ if (productionOrderIds.isEmpty()) {
|
|
|
+ return R.ok();
|
|
|
}
|
|
|
// 如果 订单排程交货期>承诺交货期 抛出异常信息
|
|
|
List<ApsProductionOrderDo> list = this.list(new LambdaQueryWrapper<ApsProductionOrderDo>()
|
|
|
.in(ApsProductionOrderDo::getId, productionOrderIds)
|
|
|
.apply(" SCHEDULEDELIVERYDATE>PROMISEDELIVERYDATE"));
|
|
|
- if(!list.isEmpty()){
|
|
|
+ if (!list.isEmpty()) {
|
|
|
String collect = list.stream()
|
|
|
.map(info -> info.getOrderno() + "-" + info.getCustomname())
|
|
|
.collect(Collectors.joining(";"));
|
|
|
- log.error("存在排程交货期大于承诺交货期 的订单:{}",collect);
|
|
|
- return R.error(String.format(ERROR_MSG,collect));
|
|
|
+ log.error("存在排程交货期大于承诺交货期 的订单:{}", collect);
|
|
|
+ return R.error(String.format(ERROR_MSG, collect));
|
|
|
}
|
|
|
|
|
|
// 更新工序作业的生产状态和是否锁定=是
|
|
@@ -75,13 +83,14 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
List<ApsBlankOrderDo> apsBlankOrderDos = apsBlankOrderDao.selectList(new LambdaQueryWrapper<ApsBlankOrderDo>()
|
|
|
.in(ApsBlankOrderDo::getProductionorderid, productionOrderIds));
|
|
|
List<String> blankIds = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getId).collect(Collectors.toList());
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankIds,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankIds, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds, null);
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* 取消发布订单排程
|
|
|
+ *
|
|
|
* @param productionOrderIds
|
|
|
* @return
|
|
|
*/
|
|
@@ -101,11 +110,74 @@ public class ApsProductionOrderServiceImpl extends ServiceImpl<ApsProductionOrde
|
|
|
.in(ApsBlankOrderDo::getProductionorderid, productionOrderIds));
|
|
|
List<String> blankIds = apsBlankOrderDos.stream().map(ApsBlankOrderDo::getId).collect(Collectors.toList());
|
|
|
// 根据坯料ID 删除 备份数据
|
|
|
- apsProcessOperationBackupDao.deletedByBlankId(blankIds,null);
|
|
|
- apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds,null);
|
|
|
+ apsProcessOperationBackupDao.deletedByBlankId(blankIds, null);
|
|
|
+ apsProcessOperationProcessEquBackupDao.deletedByBlankId(blankIds, null);
|
|
|
return R.ok();
|
|
|
}
|
|
|
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R checkAndSaveOrUpdateOrder(CheckAndSaveOrUpdateOrderReq req) {
|
|
|
+ //订单信息
|
|
|
+ ApsProductionOrderDo apsProductionOrderDo = req.getApsProductionOrderDo();
|
|
|
+ //合并订单信息
|
|
|
+ List<ApsProductionMergeOrderDo> apsProductionMergeOrderDoList = req.getApsProductionMergeOrderDoList();
|
|
|
+ //产品明细信息
|
|
|
+ List<ApsProductDetailVo> apsProductDetailVoList = req.getApsProductDetailVoList();
|
|
|
+ //坯料计划信息
|
|
|
+ List<ApsBlankOrderDo> apsBlankOrderDoList = req.getApsBlankOrderDoList();
|
|
|
+ //是否需要检验坯料计划是否已排程
|
|
|
+ Boolean checkSchedule = req.getCheckSchedule();
|
|
|
+
|
|
|
+ //=========检查坯料计划的个数和状态=============
|
|
|
+ if (ObjectUtil.isEmpty(apsBlankOrderDoList)) {
|
|
|
+ return R.error("坯料计划至少有一个");
|
|
|
+ }
|
|
|
+ for (int i = 0; i < apsBlankOrderDoList.size(); i++) {
|
|
|
+ if (apsBlankOrderDoList.get(i).getIsstag().equals("是")) {
|
|
|
+ return R.error("第" + (i + 1) + "个坯料计划为暂存数据,请先保存再提交");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //提交时需要校验是否已排程
|
|
|
+ if (checkSchedule) {
|
|
|
+ //如果坯料计划生产状态=待排程;错误提示:坯料计划 {输入物料描述} 还未排程
|
|
|
+ for (ApsBlankOrderDo apsBlankOrderDo : apsBlankOrderDoList) {
|
|
|
+ if (ObjectUtil.isNotEmpty(apsBlankOrderDo.getProductstatus()) && apsBlankOrderDo.getProductstatus().equals(SaveConstans.ProductionStatus.TO_BE_SCHEDULED)) {
|
|
|
+ return R.error("坯料计划 " + apsBlankOrderDo.getInputreportdescribe() + " 还未排程");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //============校验承诺交期============
|
|
|
+ //如果承诺交货期为空,错误提示:请填写订单{订单号}{客户简称}的承诺交货期
|
|
|
+ if (ObjectUtil.isEmpty(apsProductionOrderDo.getPromisedeliverydate())) {
|
|
|
+ return R.error("请填写订单" + apsProductionOrderDo.getOrderno() + apsProductionOrderDo.getCustomname() + "的承诺交货期");
|
|
|
+ }
|
|
|
+ //如果承诺交货期<排程交货期,错误提示:承诺交货期不能早于排程交货期{排程交货期}
|
|
|
+ if (apsProductionOrderDo.getPromisedeliverydate().compareTo(apsProductionOrderDo.getScheduledeliverydate()) < 0) {
|
|
|
+ return R.error("承诺交货期不能早于排程交货期" + DateUtil.format(apsProductionOrderDo.getScheduledeliverydate(), "yyyy-MM-dd"));
|
|
|
+ }
|
|
|
+
|
|
|
+ //============校验计划输出订单总重量==============
|
|
|
+ //检查每个订单产品,如果该订单产品坯料计划输出总重量 不等于 该订单产品订单总数量;
|
|
|
+ //错误提示:订单产品 {输入物料描述} 订单总数量与坯料计划输出总重量不一致
|
|
|
+ if (ObjectUtil.isEmpty(apsProductDetailVoList) || apsProductDetailVoList.size() <= 0) {
|
|
|
+ return R.error("产品明细至少有一个");
|
|
|
+ }
|
|
|
+ for (ApsProductDetailVo apsProductDetailVo : apsProductDetailVoList) {
|
|
|
+ if (apsProductDetailVo.getTotalordercount().compareTo(apsProductDetailVo.getPlanout()) != 0) {
|
|
|
+ return R.error("订单产品 " + apsProductDetailVo.getInputmaterialdescription() + " 订单总数量与坯料计划输出总重量不一致");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ //=========查询此订单所有产品明细对应的输出成品的卷数和============
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ return null;
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|