报工问题修改

tags/yfai-pcn-ext-v1.0
微笑着面对明天 11 months ago
parent 7439a515cd
commit 6fc77688be

@ -83,7 +83,6 @@ public class MesReportNoSortJob extends BaseMesScheduleJob {
return;
}
try {
Map<String, Integer> map = new HashMap<>();
workOrderService.doProductReportByRecord(unReportMesProduceSn.get(0), organizeCode, userName);
} catch (ImppBusiException e) {

@ -92,6 +92,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
@Autowired
private IMesShiftService mesShiftService;
@Autowired
private MesPartSapRepository partSapRepository;
@Override
public MesWorkOrder queryMesWorkOrder(MesWorkOrder workOrder) {
@ -434,13 +436,13 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//新增初始化 todo
// 根据
//根据物料获取已发布的工单
MesWorkOrder oldMesWorkOrder = getMesWorkOrder(productionRecord, organizeCode);
if (oldMesWorkOrder == null) {
List<MesWorkOrder> oldMesWorkOrderList = getMesWorkOrder(productionRecord, organizeCode);
if (CollectionUtils.isEmpty(oldMesWorkOrderList)) {
updateProductionRecord(organizeCode, userName, productionRecord.getProductSn());
return;
}
report(productionRecord, organizeCode, userName, oldMesWorkOrder);
report(productionRecord, organizeCode, userName, oldMesWorkOrderList);
}
@Override
@ -449,22 +451,61 @@ public class MesWorkOrderService implements IMesWorkOrderService {
// 根据
//根据物料获取已发布的工单
LOGGER.info("此次报工的条码【{}】,工单【{}】", productionRecord.getProductSn(), productionRecord.getWorkOrderNo());
List<MesWorkOrder> oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null);
List<MesWorkOrder> oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode);
if (CollectionUtils.isEmpty(oldMesWorkOrders)) {
updateProductionRecord(organizeCode, userName, productionRecord.getProductSn());
return;
}
report(productionRecord, organizeCode, userName, oldMesWorkOrders.get(0));
report(productionRecord, organizeCode, userName, oldMesWorkOrders);
}
/**
*
* @param oldMesWorkOrderList
* @param mesWorkCenter
* @return
*/
public MesWorkOrder getBestWorkOrder(MesProductionRecord productionRecord, List<MesWorkOrder> oldMesWorkOrderList, MesWorkCenter mesWorkCenter) {
if (!StringUtils.isEmpty(productionRecord.getWorkOrderNo())) {
return oldMesWorkOrderList.get(0);
}
for (MesWorkOrder mesWorkOrder : oldMesWorkOrderList) {
double reportdQty = MathOperation.add(1, mesWorkOrder.getReportedQty());
// 如果是允许,则需要判断是否超过比例
if (reportdQty <= mesWorkOrder.getQty()) {
return mesWorkOrder;
}
if (Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCenter.getIsCheckOrderQty())) {
double remainQty = reportdQty - mesWorkOrder.getQty();
double rate = remainQty / mesWorkOrder.getQty();
if (rate > mesWorkCenter.getOrderRate()/100) {
continue;
} else {
return mesWorkOrder;
}
}
}
return null;
}
private void report(MesProductionRecord productionRecord, String organizeCode, String userName, MesWorkOrder oldMesWorkOrder) {
private void report(MesProductionRecord productionRecord, String organizeCode, String userName, List<MesWorkOrder> oldMesWorkOrderList) {
//
DdlPackBean ddlPackBean;
//查询工作中心
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(oldMesWorkOrder.getWorkCenterCode(), "workCenterCode", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCenterCode(), "workCenterCode", ddlPackBean);
MesWorkCenter mesWorkCenter = mesWorkCenterRDao.getByProperty(ddlPackBean);
if (Objects.isNull(mesWorkCenter)) {
throw new ImppBusiException(String.format("产线【%s】不存在", oldMesWorkOrder.getWorkCenterCode()));
throw new ImppBusiException(String.format("产线【%s】不存在", productionRecord.getWorkCenterCode()));
}
MesWorkOrder oldMesWorkOrder = getBestWorkOrder(productionRecord, oldMesWorkOrderList, mesWorkCenter);
if (oldMesWorkOrder == null) {
throw new ImppBusiException(String.format("未找到匹配的加工单"));
}
//获取生产版本
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
@ -475,6 +516,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if (null == mesProductVersion) {
throw new ImppBusiException(String.format("物料【%s】生产版本信息不存在", productionRecord.getPartNo()));
}
//物料+生产版本获取bom信息
ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean);
@ -493,12 +535,9 @@ public class MesWorkOrderService implements IMesWorkOrderService {
//更新工单状态
double unCompleteQty = MathOperation.sub(oldMesWorkOrder.getQty(), oldMesWorkOrder.getReportedQty());
oldMesWorkOrder.setUnCompleteQty(unCompleteQty > 0 ? unCompleteQty : 0);
if (oldMesWorkOrder.getReportedQty() > oldMesWorkOrder.getQty()) {
throw new ImppBusiException(String.format("工单报工数量【%s】大于工单数量【%s】,不允许报工",
oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty()));
} else if (Objects.equals(oldMesWorkOrder.getReportedQty(), oldMesWorkOrder.getQty())) {
if (oldMesWorkOrder.getReportedQty() >= oldMesWorkOrder.getQty()) {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
} else {
} else {
oldMesWorkOrder.setWorkOrderStatus(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
}
LOGGER.info("工单报工后数量【{}】", oldMesWorkOrder.getReportedQty());
@ -553,12 +592,14 @@ public class MesWorkOrderService implements IMesWorkOrderService {
* @param organizeCode
* @return
*/
private MesWorkOrder getMesWorkOrder(MesProductionRecord productionRecord, String organizeCode) {
private List<MesWorkOrder> getMesWorkOrder(MesProductionRecord productionRecord, String organizeCode) {
MesWorkOrder mesWorkOrder = new MesWorkOrder();
List<MesWorkOrder> workOrders = new ArrayList<>();
/**
* 线
*/
List<MesWorkOrder> oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode, null);
List<MesWorkOrder> oldMesWorkOrders = getMesWorkOrders(productionRecord, organizeCode);
if (CollectionUtils.isEmpty(oldMesWorkOrders)) {
return null;
}
@ -586,11 +627,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
}
}*/
mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> beginDate.getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && beginDate.getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null);
workOrders = oldMesWorkOrders.stream().filter(workOrder -> beginDate.getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && beginDate.getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
String date = productionRecord.getLotNo();
// 如果找不到需要找 当天的其它班次
if (mesWorkOrder == null) {
if (CollectionUtils.isEmpty(workOrders)) {
// 如果开始时间大于结束时间,说明跨天了,跨天说明是晚班,需要找, 如果是晚班, 则找早中班的工单
if (currentShift.getStartTime().compareTo(currentShift.getEndTime()) > 0) {
// 如果比0点大需要找日期前一天的班次的工单号,如果是0点前date =lotNO 如果是0点后则找lot的前一天
@ -603,7 +644,7 @@ public class MesWorkOrderService implements IMesWorkOrderService {
String endTime = date + " " +currentShift.getStartTime();
String startTime = date + " " +currentShift.getEndTime();
mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() > transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() < transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null);
workOrders = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() > transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() < transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
} else {
// 早班或者中班 则找当天非当前班次的最早单号
@ -614,18 +655,19 @@ public class MesWorkOrderService implements IMesWorkOrderService {
break;
}
}
mesWorkOrder = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).findFirst().orElse(null);
workOrders = oldMesWorkOrders.stream().filter(workOrder -> transfer(startTime).getTime() >= transfer(workOrder.getPlanStartTime()).getTime() && transfer(endTime).getTime() <= transfer(workOrder.getPlanEndTime()).getTime()).collect(Collectors.toList());
}
if (mesWorkOrder == null) {
if (CollectionUtils.isEmpty(workOrders)) {
// todo 需要记录并且第二天要用job跑
return null;
}
}
return mesWorkOrder;
return workOrders;
}
private List<MesWorkOrder> getMesWorkOrders(MesProductionRecord productionRecord, String organizeCode, String workOrderNo) {
List<Integer> list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()).collect(Collectors.toList());
private List<MesWorkOrder> getMesWorkOrders(MesProductionRecord productionRecord, String organizeCode) {
List<Integer> list = Stream.of(MesExtEnumUtil.ORDER_STATUS.RELEASE.getValue(), MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue(), MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue()).collect(Collectors.toList());
DdlPackBean ddlPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getStringEqualPack(productionRecord.getPartNo(), "partNo", ddlPackBean);
DdlPreparedPack.getStringEqualPack(productionRecord.getWorkCenterCode(), "workCenterCode", ddlPackBean);
@ -686,8 +728,8 @@ public class MesWorkOrderService implements IMesWorkOrderService {
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean);
DdlPreparedPack.getIsNull("workOrderNo",ddlPackBean);
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
//String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
String workCenterCodes ="B19CK01A";
List<String> centerList = Arrays.asList(workCenterCodes.split(","));
DdlPreparedPack.getInPackList(centerList, "workCenterCode",ddlPackBean);
@ -698,9 +740,18 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if(!CollectionUtils.isEmpty(mesProductionRecordList)) {
Map<String, List<MesProductionRecord>> map = mesProductionRecordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getPartNo));
map.forEach((k, v) -> {
recordList.add(v.get(0));
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(k, "partNo", packBean);
// 排除掉试制造件
MesPartSap part = partSapRepository.getByProperty(packBean);
if (part != null && !Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), part.getIsTestPiece())) {
recordList.add(v.get(0));
}
LOGGER.info("sap物料中不存在该物料号【{}】, 或者是试制件,不进行报工");
});
}
return recordList;
}
@ -711,9 +762,11 @@ public class MesWorkOrderService implements IMesWorkOrderService {
List<Integer> statusList = Stream.of(MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_10.getValue(), MesExtEnumUtil.REPORT_STATUS.REPORT_STATUS_40.getValue()).collect(Collectors.toList());
DdlPreparedPack.getInPackList( statusList,"reportStatus",ddlPackBean);
DdlPreparedPack.getIsNotNull("workOrderNo",ddlPackBean);
String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
//String workCenterCodes = configService.getCfgValue(organizeCode, "MES_PCN_REPORT_CENTER");
String workCenterCodes ="B19CK01A";
List<String> centerList = Arrays.asList(workCenterCodes.split(","));
DdlPreparedPack.getInPackList(centerList, "workCenterCode",ddlPackBean);
DdlPreparedPack.getOrderByPack(new Object[]{CommonEnumUtil.ASC_OR_DESC.ASC.getValue()}, new String[]{"modifyDatetime"}, ddlPackBean);
@ -723,7 +776,14 @@ public class MesWorkOrderService implements IMesWorkOrderService {
if(!CollectionUtils.isEmpty(mesProductionRecordList)) {
Map<String, List<MesProductionRecord>> map = mesProductionRecordList.stream().collect(Collectors.groupingBy(MesProductionRecord::getPartNo));
map.forEach((k, v) -> {
recordList.add(v.get(0));
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getStringEqualPack(k, "partNo", packBean);
// 排除掉试制造件
MesPartSap part = partSapRepository.getByProperty(packBean);
if (part != null && !Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), part.getIsTestPiece())) {
recordList.add(v.get(0));
}
LOGGER.info("sap物料中不存在该物料号【{}】, 或者是试制件,不进行报工");
});
}
return recordList;

@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
@ -48,6 +49,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -158,12 +162,65 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
"请检查非排序产品加工规则信息,根据设备[%s]产出零件[%s]进料零件[空]查询到[%s]条加工规则配置信息,无法显示出装配件清单!", cellEquipContext.getEquipmentName(), productionPartContext.getPartNo(), CollectionUtils.isEmpty(filterList) ? MesPcnExtConstWords.ZERO : filterList.size()));
}
//【非排序线】获取产品加工规则对应的装配件信息
prodRuleContextList.add(prodRuleCfgExtService.getProdRuleNosortContext(new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).
copy(filterList.get(0)).workOrderNo(productionPartContext.getWorkOrderNo()).foreignKey(productionPartContext.foreignKey(foreignKey += 1).getForeignKey())));
}
// 默认头道才有超工单
validSuperWorkOrder(reqBean, productionPartContextList,workCenter, stepResult, resultBean);
return stepResult;
}
/**
* 1 MesProductionPartContext
* 2
* 3 ,
* @param reqBean
* @param productionPartContextList
* @param workCenter
* @param stepResult
* @param resultBean
* @return
*/
private StepResult validSuperWorkOrder(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList, MesWorkCenter workCenter, StepResult stepResult, StationResultBean resultBean) {
// 验证超工单
// 对MesProductionPartContext中的工单号经行分组每个工单可能对应多条数据,筛选掉foreignkey为空的数据
Map<String, List<MesProductionPartContext>> productionPartContextMap = productionPartContextList.stream().filter(productionPartContext -> !StringUtils.isEmpty(productionPartContext.getForeignKey()))
.collect(Collectors.groupingBy(MesProductionPartContext::getWorkOrderNo));
// 获取涉及到的所有工单列表
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderList(reqBean.getOrganizeCode(), new ArrayList<>(productionPartContextMap.keySet()));
// 对工单经行分组
Map<String, List<MesWorkOrder>> orderListMap = workOrderList.stream().collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo));
for (Map.Entry<String, List<MesProductionPartContext>> entry : productionPartContextMap.entrySet()) {
String workOrder = entry.getKey();
List<MesProductionPartContext> productionPartContexts = entry.getValue();
MesWorkOrder mesWorkOrder = orderListMap.get(workOrder).get(0);
double complateQty = mesWorkOrder.getCompleteQty() + productionPartContexts.size();
double qty = mesWorkOrder.getQty();
// 如果预完成数量 小于等于工单数量,则直接过
if (complateQty <= qty) {
continue;
}
// 以下则是超工单逻辑
// 如果产线中没有配置超工单,则直接阻断
if (!Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCenter.getIsCheckOrderQty())) {
productionPartContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
"请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],且未配置超工单",
workOrder, mesWorkOrder.getQty(), complateQty));
}
// 如果配置了超工单,且比例已经超过了配置的超工单比例,也需要阻断
double rate = (complateQty - qty)/qty;
if (rate > workCenter.getOrderRate()) {
productionPartContextList.forEach(o -> o.busiCheckToDelete());
return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format(
"请检查工单数量,工单号[%s],工单数量[%s]预完成数量[%s],配置了超工单,但超过了比例[%s]",
workOrder, mesWorkOrder.getQty(), complateQty, workCenter.getOrderRate()));
}
}
return stepResult;
}
@ -275,11 +332,9 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
productionPartContext.foreignKey(productionPsInContext.foreignKey(foreignKey += 1).getForeignKey());
productSn = productionPsInContext.getProductSn();
break;
}
//【非排序线】获取产品加工规则对应的装配件信息

@ -0,0 +1,126 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesCellEquipContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.tool.MathOperation;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @Description :
* @Author : wangjie
**/
@Slf4j
@Service("mesWorkOrderCheckQtyNosortStepService")
public class MesWorkOrderCheckQtyNosortStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IFsmCommonService fsmCommonService;
@Autowired
private MesFirstMouldNoReadStepService firstMouldNoReadStepService;
@Override
public StepResult execute(StationRequestBean reqBean) {
StationResultBean resultBean = new StationResultBean();
StepResult stepResult = StepResult.getSuccessComplete();
//获取上下文信息
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.doHandleCurCellEquipment(reqBean);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
//存储生产过程上下文对象
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
//获取上下文生产扫/读信息:加工单
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean);
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "上下文中缺失待验证的加工单信息!");
//从上下文中取出生产线对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
//验证工单的有效性
if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, workCenter, equipVariableCollectContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
String workOrderStr = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList()).toString();
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(workOrderStr), stepResult, String.format("当前%s加工单%s验证工单数量成功%s!"));
}
//验证工单的有效性
public StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesWorkCenter workCenter,
List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
//搜集生产工单号
List<String> filterList = equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList());
List<String> workOrderNoList = filterList.stream().filter(o -> (!StringUtils.isEmpty(o) && !o.equals(productionProcessContext.getFinishCode()))).distinct().collect(Collectors.toList());
//获取生产工单信息
List<MesWorkOrder> workOrderDbList = workOrderExtService.getWorkOrderList(reqBean.getOrganizeCode(), workOrderNoList);
Map<String, List<MesWorkOrder>> workOrderMap = CollectionUtils.isEmpty(workOrderDbList) ? null : workOrderDbList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesWorkOrder::getWorkOrderNo));
if (!CollectionUtils.isEmpty(workOrderNoList)) {
for (String workOrderNo : workOrderNoList) {
if ((StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) || workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue()) == 0 ||
workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.SORT.getValue()) == 0) &&
MathOperation.compareTo(MathOperation.add(workOrderDbList.get(0).getCompleteQty(), new Double(workOrderMap.get(workOrderDbList.get(0).getWorkOrderNo()).size())), workOrderDbList.get(0).getQty()) > 0)
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息完成数量[%s]累加当前腔数量[%s]已超过计划数量[%s]!",
workOrderNo, workOrderDbList.get(0).getCompleteQty(), workOrderMap.get(workOrderDbList.get(0).getWorkOrderNo()).size(), workOrderDbList.get(0).getQty()));
if (!StringUtils.isEmpty(workCenter.getIsCheckOrderQty()) && workCenter.getIsCheckOrderQty().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0 &&
workCenter.getCenterType().compareTo(MesExtEnumUtil.WORK_CENTER_TYPE.NOSORT.getValue()) == 0 &&
MathOperation.compareTo(MathOperation.add(workOrderDbList.get(0).getReportedQty(), new Double(workOrderMap.get(workOrderDbList.get(0).getWorkOrderNo()).size())),
(MathOperation.mul(workOrderDbList.get(0).getQty(), MathOperation.div(MathOperation.add(workCenter.getOrderRate(), new Double(100)), new Double(100))))) >= 0)
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息汇报数量[%s]累加当前腔数量[%s]已超过计划数量[%s]超工单比例[%s]!",
workOrderNo, workOrderDbList.get(0).getReportedQty(), workOrderMap.get(workOrderDbList.get(0).getWorkOrderNo()).size(), workOrderDbList.get(0).getQty(), workCenter.getOrderRate() + MesPcnExtConstWords.PERCENT));
}
}
return stepResult.obj(filterList);
}
}
Loading…
Cancel
Save