Merge branch 'dev-temp-wj-2024150000-00000' into dev

dev-temp-nht-202502180000-customprint
王杰 5 months ago
commit 49716d9adb

@ -1,6 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.api.base;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext;
import cn.estsh.i3plus.pojo.base.bean.ListPager;
import cn.estsh.i3plus.pojo.base.common.Pager;
import cn.estsh.i3plus.pojo.mes.bean.MesProdShiftRecord;
@ -40,4 +41,10 @@ public interface IMesProdShiftRecordService {
@ApiOperation(value = "获取展示组件班组班次内容")
List<StationKvBean> getShiftRecordStationKvBeans(String organizeCode, String workCenterCode);
@ApiOperation(value = "获取生产线的当前班组班次信息")
MesProdShiftContext getMesProdShiftKvBean(String organizeCode, String workCenterCode);
@ApiOperation(value = "封装当前班组班次信息")
MesProdShiftContext getMesProdShiftKvBean(List<StationKvBean> prodShiftDataContext);
}

@ -42,12 +42,12 @@ public interface IMesProductionCustomContextStepService {
@ApiOperation(value = "发送工步内容")
void sendStepContextMessage(StationRequestBean reqBean, List<StationKvBean> resultList);
@ApiOperation(value = "验证上下文班次班组信息是否存在")
Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode);
@ApiOperation(value = "获取上下文班次班组信息")
List<StationKvBean> getProdShiftDataContext(String orgainzeCode, String workCenterCode);
@ApiOperation(value = "验证上下文班次班组信息是否存在")
Boolean checkProdShiftDataIsExistContext(String orgainzeCode, String workCenterCode);
@ApiOperation(value = "保存上下文班次班组信息", notes = "[JSON]List<StationKvBean>")
Boolean dispatchProdShiftDataContext(String orgainzeCode, String workCenterCode, List<StationKvBean> prodShiftDatList);
@ -57,18 +57,18 @@ public interface IMesProductionCustomContextStepService {
@ApiOperation(value = "获取上下文工位加工数统计信息")
List<StationKvBean> getProductionStatisticsContext(StationRequestBean reqBean);
@ApiOperation(value = "封装加工数信息")
List<StationKvBean> getProductionStatisticsContext(MesProdShiftContext mesProdShiftKvBean, String countStr);
@ApiOperation(value = "保存上下文工位加工数统计信息", notes = "[JSON]List<StationKvBean>")
Boolean dispatchProductionStatisticsContext(StationRequestBean reqBean, List<StationKvBean> prodShiftDatList);
@ApiOperation(value = "新增上下文工位加工数统计信息")
Integer dispatchProductionStatisticsContext(StationRequestBean reqBean, int count);
Integer dispatchProductionStatisticsContext(StationRequestBean reqBean, int count, MesProdShiftContext mesProdShiftKvBean);
@ApiOperation(value = "删除上下文工位加工数统计信息")
void removeProductionStatisticsContext(StationRequestBean reqBean);
@ApiOperation(value = "获取生产线的当前班组班次信息")
MesProdShiftContext getMesProdShiftKvBean(String organizeCode, String workCenterCode);
@ApiOperation(value = "根据装配件信息获取可复用条码")
String getRepeatAssemblySn(String organizeCode, String workCenterCode, String workCellCode, MesProductionAssemblyContext productionAssemblyContext);

@ -1,33 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import org.springframework.beans.factory.annotation.Autowired;
/**
* @Description :
* @Author : zxw
**/
public interface IWriteVariableService {
/**
*
* @param value
* @param equipmentVariable
* @param kepwareFlag
*/
MesEquipVariableRwResult writeVariable(StationRequestBean reqBean, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index,Integer maxRetryTimes);
/**
*
* @param reqBean
* @param value
* @param foreignKey
* @param index
* @return
*/
String transferValue(StationRequestBean reqBean, String value, Integer foreignKey, Integer index);
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesShiftService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
@ -256,6 +257,7 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
//获取展示组件班组班次内容
@Override
public List<StationKvBean> getShiftRecordStationKvBeans(String organizeCode, String workCenterCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(workCenterCode)) return null;
// 获取班次信息 redis
List<StationKvBean> prodShiftDataContext = productionCustomContextStepService.getProdShiftDataContext(organizeCode, workCenterCode);
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
@ -268,4 +270,29 @@ public class MesProdShiftRecordServiceImpl implements IMesProdShiftRecordService
}
return prodShiftDataContext;
}
//获取生产线的当前班组班次信息
@Override
public MesProdShiftContext getMesProdShiftKvBean(String organizeCode, String workCenterCode) {
List<StationKvBean> prodShiftDataContext = getShiftRecordStationKvBeans(organizeCode, workCenterCode);
if (CollectionUtils.isEmpty(prodShiftDataContext)) return null;
return getMesProdShiftKvBean(prodShiftDataContext);
}
//封装当前班组班次信息
@Override
public MesProdShiftContext getMesProdShiftKvBean(List<StationKvBean> prodShiftDataContext) {
if (CollectionUtils.isEmpty(prodShiftDataContext)) return null;
StationKvBean shiftGroupKvBean = prodShiftDataContext.stream().filter(stationKvBean -> com.google.common.base.Objects.equal(stationKvBean.getKey(), MesPcnExtConstWords.SHIFT_GROUP)).findFirst().orElse(null);
StationKvBean shiftCodeKvBean = prodShiftDataContext.stream().filter(stationKvBean -> com.google.common.base.Objects.equal(stationKvBean.getKey(), MesPcnExtConstWords.SHIFT_CODE)).findFirst().orElse(null);
MesProdShiftContext mesProdShiftContext = new MesProdShiftContext();
mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftCodeKvBean.getValue());
mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftGroupKvBean.getValue());
return mesProdShiftContext;
}
}

@ -1,7 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.equiplog;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch.WriteVariableService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IConfigService;
import cn.estsh.i3plus.platform.common.tool.HttpClientTool;
@ -32,7 +31,7 @@ import java.util.stream.Collectors;
@Service
public class MesEquipmentRwExtService implements IMesEquipVariableRwExtService {
public static final Logger LOGGER = LoggerFactory.getLogger(WriteVariableService.class);
public static final Logger LOGGER = LoggerFactory.getLogger(MesEquipmentRwExtService.class);
@Autowired
private IConfigService configService;

@ -1,162 +0,0 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.rulematch;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.schedulejob.BaseMesScheduleJob;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsInContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPsOutContext;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
import cn.estsh.i3plus.pojo.mes.model.MesEquipVariableRwResult;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.hutool.core.date.DatePattern;
import cn.hutool.core.date.DateUtil;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
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.Date;
import java.util.List;
import java.util.Objects;
/**
* @Description :
* @Author : zxw
**/
@Service
public class WriteVariableService implements IWriteVariableService {
public static final Logger LOGGER = LoggerFactory.getLogger(WriteVariableService.class);
@Autowired
private IMesEquipVariableRwExtService equipVariableRwExtService;
@Autowired
private IMesProductionDispatchContextStepService mesProductionDispatchContextStepService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
/**
*
* @param value
* @param equipmentVariable
* @param kepwareFlag
*/
public MesEquipVariableRwResult writeVariable(StationRequestBean reqBean, String value, MesEquipmentVariable equipmentVariable, String kepwareFlag, Integer foreignKey, Integer index, Integer maxTimes) {
// 需要不同的策略不同的转换方式
String newValue = transferValue(reqBean, value, foreignKey, index);
if (StringUtils.isEmpty(newValue)) {
LOGGER.info("发送的值为空,不予发送");
return null;
}
MesEquipVariableRwResult mesEquipVariableRwResult = equipVariableRwExtService.writeVariable(newValue, equipmentVariable, kepwareFlag);
if (!mesEquipVariableRwResult.getIsSuccessed() && mesEquipVariableRwResult.getIsNoCfg()) {
for (int i = 0;i < maxTimes; i++) {
mesEquipVariableRwResult = equipVariableRwExtService.writeVariable(newValue, equipmentVariable, kepwareFlag);
if (mesEquipVariableRwResult.getIsSuccessed()){
break;
}
}
}
return mesEquipVariableRwResult;
}
@Override
public String transferValue(StationRequestBean reqBean, String value, Integer foreignKey, Integer index) {
List<MesProductionPartContext> productionPartContextList = mesProductionDispatchContextStepService.getProductionPartContext(reqBean);
List<MesProductionPsOutContext> productionPsOutContexts = mesProductionDispatchContextStepService.getProductionPsOutContext(reqBean);
List<MesProductionPsInContext> productionPsInContexts = mesProductionDispatchContextStepService.getProductionPsInContext(reqBean);
String productResult = productionDispatchContextStepService.getProductResultContext(reqBean);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProductionPartContext mesProductionPartContext = null;
MesProductionPsOutContext productionPsOutSn = null;
if (!Objects.isNull(foreignKey)) {
if (!CollectionUtils.isEmpty(productionPartContextList)) {
mesProductionPartContext = productionPartContextList.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null);
}
if (!CollectionUtils.isEmpty(productionPsOutContexts)) {
productionPsOutSn = productionPsOutContexts.stream().filter(context -> Objects.equals(context.getForeignKey(), foreignKey)).findFirst().orElse(null);
}
String newValue = "";
if (StringUtils.isEmpty(value)) {
return null;
}
if (mesProductionPartContext == null) {
mesProductionPartContext = new MesProductionPartContext();
}
if (productionPsOutSn == null) {
productionPsOutSn = new MesProductionPsOutContext();
}
switch (value.toUpperCase()) {
case "%RESULT%" : newValue = mesProductionPartContext.getPartNo(); break;
case "%PARAM%": newValue = mesProductionPartContext.getWorkOrderNo(); break;
case "%ORDERCODE%": newValue = mesProductionPartContext.getWorkOrderNo(); break;
case "%CUSTPARTNO%": newValue = mesProductionPartContext.getCustPartNo(); break;
case "%EMPLOYEENO%": newValue = reqBean.getUserInfo(); break;///当前操作员工号 用户名
case "%BARCODE%": newValue = productionPsOutSn.getProductSn(); break;// 条码
case "%BARCODE2%": newValue = productionPsOutContexts.get(1).getProductSn(); break;///条码
case "%BARCODE3%": newValue = productionPsOutContexts.get(2).getProductSn(); break;///条码
case "%BARCODE4%": newValue = productionPsOutContexts.get(3).getProductSn(); break;///条码
case "%BARCODE5%": newValue = productionPsOutContexts.get(4).getProductSn(); break;///条码
case "%BARCODE6%": newValue = productionPsOutContexts.get(5).getProductSn(); break;///条码
case "%BARCODE7%": newValue = productionPsOutContexts.get(6).getProductSn(); break;///条码
case "%BARCODE8%": newValue = productionPsOutContexts.get(7).getProductSn(); break;///条码
case "%BARCODE9%": newValue = productionPsOutContexts.get(8).getProductSn(); break;///条码
case "%BARCODE10%": newValue = productionPsOutContexts.get(9).getProductSn(); break;///条码
case "%BARCODE11%": newValue = productionPsOutContexts.get(10).getProductSn(); break;///条码
case "%BARCODE12%": newValue = productionPsOutContexts.get(11).getProductSn(); break;///条码
case "%BARCODE13%": newValue = productionPsOutContexts.get(12).getProductSn(); break;///条码
case "%BARCODE14%": newValue = productionPsOutContexts.get(13).getProductSn(); break;///条码
case "%BARCODE15%": newValue = productionPsOutContexts.get(14).getProductSn(); break;///条码
case "%BARCODE16%": newValue = productionPsOutContexts.get(15).getProductSn(); break;///条码
case "%BARCODE17%": newValue = productionPsOutContexts.get(16).getProductSn(); break;///条码
case "%BARCODE18%": newValue = productionPsOutContexts.get(17).getProductSn(); break;///条码
case "%BARCODE19%": newValue = productionPsOutContexts.get(18).getProductSn(); break;///条码
case "%BARCODE20%": newValue = productionPsOutContexts.get(19).getProductSn(); break;///条码
case "%CREATEDATE%": newValue = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); break;///加工记录的创建时间
case "%CREATEUSER%": newValue = reqBean.getUserInfo(); break;///当前操作员工号 用户名
case "%SHIFT%": newValue = mesProdShiftKvBean.getShiftGroup(); break;///当前操作员工号 用户名
//case "%STATUS%": newValue = productionPsInContexts.get(0).get() +"" ; break;//进料条码状态
// case "%CUSTORDERCOD%": newValue = mesProductionPartContext.getCustOrderNo(); break;///客户订单号
case "%PARTNO%": newValue = mesProductionPartContext.getPartNo(); break;///工单对应的零件号
//case "%VINCODE%": newValue = mesProductionPartContext.getv(); break;///工单对应的vincode
case "%SEQUENCE%": newValue = reqBean.getUserInfo(); break;///工单顺序号 不是生产顺序号
case "%CUSTBARCODE%": newValue = productionPsOutSn.getCustSn(); break;///客户条码
case "%GETDATE%": newValue = DateUtil.format(new Date(), DatePattern.NORM_DATETIME_PATTERN); break;///客户条码
default:
newValue = value;
}
return newValue;
} else {
if (index != null && foreignKey == null) {
mesProductionPartContext = productionPartContextList.get(index);
if (mesProductionPartContext == null || Objects.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), mesProductionPartContext.getIsFinishCode())) {
return null;
}
return value;
}
}
return null;
}
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepServi
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.apiservice.serviceimpl.station.function.MesFunctionProductionStatisticsService;
import cn.estsh.i3plus.ext.mes.pcn.apiservice.util.MesPcnException;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProdShiftContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionPartContext;
@ -73,37 +74,44 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("信息: %s!", productionProcessContext.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue())
.addStationResultBeans(new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN)
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TITLE.getValue()).message(String.format("信息: %s!", productionProcessContext.getMessage())))
.addStationResultBeans(new StationResultBean().writeDbLog()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(productionProcessContext.getMessage()))
);
MesPcnException.throwBusiException(productionProcessContext.getMessage());
}
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), "信息: 请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue())
.addStationResultBeans(new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN)
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TITLE.getValue()).message("信息: 请先开班!"))
.addStationResultBeans(new StationResultBean().writeDbLog()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message("请先开班!"))
);
MesPcnException.throwBusiException("请先开班!");
}
// 发送班次班组和工单
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
//封装数据: 班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
this.sendMessage(reqBean, resultBean);
//获取生产线的当前班组班次信息
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
// 整合班次加工数量
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean);
if (CollectionUtils.isEmpty(productionStatisticsContext)) {
productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", MesPcnExtConstWords.ZERO_STR),
new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
}
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext, productionProcessContext.getWorkCell(), mesProdShiftKvBean);
this.sendMessage(reqBean, shiftCountBean);
//封装当前班组班次信息
MesProdShiftContext mesProdShiftKvBean = prodShiftRecordService.getMesProdShiftKvBean(prodShiftDataContext);
//封装工位展示的客制化信息 (优先级: 工位图/视频/柱状图-->加工数)
StationResultBean resultBeanCustom = getStationResultBean(reqBean, productionProcessContext.getWorkCell(), mesProdShiftKvBean);
if (null == resultBeanCustom) this.sendMessage(reqBean, resultBean);
else this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue()).addStationResultBeans(resultBean).addStationResultBeans(resultBeanCustom));
//验证工位是否锁定
reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
@ -126,65 +134,61 @@ public class MesProductionNoSortModuleService extends BaseModuleService {
return resultBean;
}
private StationResultBean getStationResultBean(StationRequestBean reqBean, List<StationKvBean> productionStatisticsContext, MesWorkCell mesWorkCell, MesProdShiftContext mesProdShiftKvBean) {
//封装工位展示的客制化信息(优先级: 工位图/视频/柱状图-->加工数)
private StationResultBean getStationResultBean(StationRequestBean reqBean, MesWorkCell workCell, MesProdShiftContext mesProdShiftKvBean) {
StationResultBean resultBean = new StationResultBean();
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue());
String dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue();
JSONObject reqJson = new JSONObject();
String url = "";
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
List<List<StationKvBean>> orderQtyKvBeans = new ArrayList<>();
if (!StringUtils.isEmpty(mesWorkCell.getFileId())) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL);
DdlPreparedPack.getNumEqualPack(Long.parseLong(mesWorkCell.getFileId()), MesPcnExtConstWords.ID, packBean);
MesFile mesFile = mesFileRepository.getByProperty(packBean);
if (mesFile != null) {
url = mesFile.getFileUrl();
}
}
if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue();
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderListByShiftCode(reqBean.getOrganizeCode(), mesWorkCell.getWorkCenterCode(), mesProdShiftKvBean.getShiftCode());
//验证是否展示柱状图
if (!StringUtils.isEmpty(workCell.getIsShowMsg()) && workCell.getIsShowMsg().compareTo(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue()) == 0) {
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderListByShiftCode(reqBean.getOrganizeCode(), workCell.getWorkCenterCode(), mesProdShiftKvBean.getShiftCode());
List<List<StationKvBean>> stationKvBeans = new ArrayList<>();
if (CollectionUtils.isEmpty(workOrderList)) {
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
StationKvBeanUtil.addStationKvBeanList(stationKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", MesPcnExtConstWords.ZERO_STR),
new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", MesPcnExtConstWords.ZERO_STR));
} else {
Double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get();
Double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get();
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
StationKvBeanUtil.addStationKvBeanList(stationKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty.toString()),
new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", complateQty.toString()));
}
if (!CollectionUtils.isEmpty(productionPartContextList)) {
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue());
resultBean.setResultList(stationKvBeans);
return resultBean;
}
//判断是否配置的是展示文件
String url = null;
if (!StringUtils.isEmpty(workCell.getIsShowMsg()) && !StringUtils.isEmpty(MesExtEnumUtil.WORK_FILE_TYPE.valueOfDescription(workCell.getIsShowMsg()))) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(Long.parseLong(workCell.getFileId()), MesPcnExtConstWords.ID, packBean);
MesFile mesFile = mesFileRepository.getByProperty(packBean);
url = (null != mesFile && !StringUtils.isEmpty(mesFile.getFileUrl())) ? mesFile.getFileUrl() : null;
if (!StringUtils.isEmpty(url)) {
JSONObject reqJson = new JSONObject();
if (workCell.getIsShowMsg().compareTo(MesExtEnumUtil.WORK_FILE_TYPE.WORK_CELL_PICTURE.getValue()) == 0) resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue());
else resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.VIDEO.getValue());
reqJson.put(MesPcnExtConstWords.URL, url);
resultBean.setResultObj(reqJson);
return resultBean;
}
resultBean.setResultList(orderQtyKvBeans);
} else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.PROD_VIDEO.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.VIDEO.getValue();
reqJson.put(MesPcnExtConstWords.URL, url);
resultBean.setResultObj(reqJson);
} else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.WORK_CELL_PICTURE.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue();
reqJson.put(MesPcnExtConstWords.URL, url);
resultBean.setResultObj(reqJson);
}
if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCell.getIsCountFinish())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue();
if (StringUtils.isEmpty(url) && !StringUtils.isEmpty(workCell.getIsCountFinish()) && workCell.getIsCountFinish().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
//获取上下文工位加工数统计信息
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(reqBean);
if (CollectionUtils.isEmpty(productionStatisticsContext)) productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(mesProdShiftKvBean, MesPcnExtConstWords.ZERO_STR);
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue());
resultBean.setResultList(productionStatisticsContext);
return resultBean;
}
resultBean.setDataType(dataType);
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL);
return resultBean;
return null;
}
@Override

@ -18,6 +18,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrder;
import cn.estsh.i3plus.pojo.mes.bean.MesStateMachineStatus;
import cn.estsh.i3plus.pojo.mes.model.AttrBean;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -34,6 +35,7 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.Stream;
@ -64,33 +66,47 @@ public class MesProductionSortModuleService extends BaseModuleService {
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean, false);
//配置错误 抛出异常
if (!productionProcessContext.getSuccess()) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), String.format("信息: %s!", productionProcessContext.getMessage()), MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), productionProcessContext.getMessage(), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue())
.addStationResultBeans(new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN)
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TITLE.getValue()).message(String.format("信息: %s!", productionProcessContext.getMessage())))
.addStationResultBeans(new StationResultBean().writeDbLog()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message(productionProcessContext.getMessage()))
);
MesPcnException.throwBusiException(productionProcessContext.getMessage());
}
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
// 获取产成零件信息
List<MesProductionPartContext> productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean);
// 排除掉空腔的产成零件
productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> o.getForeignKey() != null).collect(Collectors.toList());
//获取班次信息,先查询缓存,缓存没有在查询数据库
List<StationKvBean> prodShiftDataContext = prodShiftRecordService.getShiftRecordStationKvBeans(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (CollectionUtils.isEmpty(prodShiftDataContext)) {
this.sendMessage(reqBean, new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN), "信息: 请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE, MesPcnEnumUtil.STATION_DATA_TYPE.TITLE);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), "请先开班!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
this.sendMessage(reqBean, new StationResultBean()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue())
.addStationResultBeans(new StationResultBean().resultObj(MesPcnExtConstWords.STEP_DISABLE_SCAN)
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.STEP_TITLE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TITLE.getValue()).message("信息: 请先开班!"))
.addStationResultBeans(new StationResultBean().writeDbLog()
.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue()).message("请先开班!"))
);
MesPcnException.throwBusiException("请先开班!");
}
// 获取工单信息
List<List<StationKvBean>> moduleContentContext = productionDispatchContextStepService.getModuleContentContext(reqBean);
// 发送班次班组和工单
StationResultBean resultBean = getStationResultBean(reqBean, moduleContentContext, prodShiftDataContext);
this.sendMessage(reqBean, resultBean);
// 获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条
resultBean = getStationResultBean(queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, productionPartContext)));
this.sendMessage(reqBean, resultBean);
// 获取产成零件信息
List<MesProductionPartContext> productionPartContext = productionDispatchContextStepService.getProductionPartContext(reqBean);
// 排除掉空腔的产成零件
productionPartContext = CollectionUtils.isEmpty(productionPartContext) ? null : productionPartContext.stream().filter(o -> !StringUtils.isEmpty(o.getForeignKey())).collect(Collectors.toList());
//封装工位展示的客制化信息 (获取当前工位最新修改的完成状态的队列单据数据 并根据其零件生产组代码按生产序号倒序前50条)
StationResultBean resultBeanCustom = getStationResultBean(queryQueueOrderTopFiftyProductSeq(reqBean, getNewPartProdGroupCode(reqBean, productionPartContext)));
if (null == resultBeanCustom) this.sendMessage(reqBean, resultBean);
else this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BUSI_LIST.getValue()).addStationResultBeans(resultBean).addStationResultBeans(resultBeanCustom));
//验证工位是否锁定
reqBean.getDataMap().put(MesPcnEnumUtil.ACTOR_RECEIVE_STRATEGY.WS_CMD_INIT_MODULE.getCode(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
@ -99,9 +115,9 @@ public class MesProductionSortModuleService extends BaseModuleService {
}
private StationResultBean getStationResultBean(List<MesQueueOrderModel> mesQueueOrderModelList) {
if (CollectionUtils.isEmpty(mesQueueOrderModelList)) return null;
return new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue())
.customPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL)
.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue())
.dataType(MesPcnEnumUtil.STATION_DATA_TYPE.TABLE.getValue()).customPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL)
.dataAttrList(dataAttrList()).resultList(mesQueueOrderModelList);
}
@ -117,9 +133,9 @@ public class MesProductionSortModuleService extends BaseModuleService {
private List<MesQueueOrderModel> queryQueueOrderTopFiftyProductSeq(StationRequestBean reqBean, List<String> partProdGroupCodeList) {
if (CollectionUtils.isEmpty(partProdGroupCodeList)) return new ArrayList<>();
if (CollectionUtils.isEmpty(partProdGroupCodeList)) return null;
List<MesQueueOrderModel> queueOrderModels = new ArrayList<>();
List<MesQueueOrderModel> queueOrderModelList = null;
for (String partProdGroupCode : partProdGroupCodeList) {
Pager pager = new Pager();
pager.setStartRow(1);
@ -133,9 +149,8 @@ public class MesProductionSortModuleService extends BaseModuleService {
List<MesQueueOrder> queueOrderList = queueOrderRepository.findByHqlWherePage(packBean, pager);
if (!CollectionUtils.isEmpty(queueOrderList)) {
boolean isComplete = false;
int index = MesPcnExtConstWords.ONE;
Boolean isComplete = false;
Integer index = MesPcnExtConstWords.ONE;
for (MesQueueOrder mesQueueOrder : queueOrderList) {
MesQueueOrderModel queueOrderModel = new MesQueueOrderModel();
BeanUtils.copyProperties(mesQueueOrder, queueOrderModel);
@ -145,13 +160,15 @@ public class MesProductionSortModuleService extends BaseModuleService {
//跳号标黄色
if (index < queueOrderList.size() && checkJumpNumber(queueOrderList.get(index).getWorkOrderSeq(), mesQueueOrder.getWorkOrderSeq())) color = MesExtEnumUtil.COLOR.YELLOW.getValue();
queueOrderModel.setColor(color);
queueOrderModels.add(queueOrderModel);
index++;
if (CollectionUtils.isEmpty(queueOrderModelList)) queueOrderModelList = new ArrayList<>();
queueOrderModelList.add(queueOrderModel);
index ++;
}
}
}
return queueOrderModels;
return queueOrderModelList;
}
private List<String> getNewPartProdGroupCode(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContext) {
@ -165,7 +182,6 @@ public class MesProductionSortModuleService extends BaseModuleService {
return queueOrder == null ? null : Stream.of(queueOrder.getPartProdGroupCode()).collect(Collectors.toList());
}
private boolean checkJumpNumber(String nextWorkOrderSeq, String currentWorkOrderSeq) {
if (StringUtils.isEmpty(nextWorkOrderSeq) || StringUtils.isEmpty(currentWorkOrderSeq) || !CheckTool.isNumber(nextWorkOrderSeq) || !CheckTool.isNumber(currentWorkOrderSeq)) return false;
return Integer.parseInt(currentWorkOrderSeq) != Integer.parseInt(nextWorkOrderSeq) + MesPcnExtConstWords.ONE;
@ -192,4 +208,10 @@ public class MesProductionSortModuleService extends BaseModuleService {
return resultBean;
}
@Override
public boolean execStateModule(StationRequestBean reqBean, List<MesStateMachineStatus> states, Map<String, String> wcpcMap) {
init(reqBean);
return true;
}
}

@ -1,39 +1,29 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.MesProdShiftContext;
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.serviceimpl.fsm.BaseSwsService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesFile;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
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.repository.MesFileRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Objects;
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.StringJoiner;
/**
* @Description :
@ -48,91 +38,56 @@ public class MesFunctionProductionStatisticsService extends BaseSwsService imple
private MesFileRepository mesFileRepository;
@Autowired
private IMesWorkOrderExtService workOrderExtService;
@Autowired
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
private IMesProductionProcessContextStepService productionProcessContextStepService;
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public Boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
productionCustomContextStepService.removeProductionStatisticsContext(reqBean);
this.sendMessage(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PICK.getValue()).scanInfo(buttonDynamicModel.getFunctionValue()),
String.format("生产线[%s]工位[%s]%s成功!", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
// 刷新加工数
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getEquipmentVariableList(reqBean, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue());
MesWorkCell mesWorkCell = productionProcessContext.getWorkCell();
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
//重置页面的加工数
resetStationData(reqBean, productionProcessContextStepService.getProductionProcessContext(reqBean, false).getWorkCell());
List<StationKvBean> productionStatisticsContext = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(new StringJoiner(MesPcnExtConstWords.AND).add(mesProdShiftKvBean.getShiftGroup()).add(mesProdShiftKvBean.getShiftCode()).toString(), "加工数", "0"),
new StationKvBean("color", "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
return true;
StationResultBean shiftCountBean = getStationResultBean(reqBean, productionStatisticsContext,mesWorkCell, mesProdShiftKvBean);
}
this.sendMessage(reqBean, shiftCountBean);
//重置页面的加工数
private void resetStationData(StationRequestBean reqBean, MesWorkCell workCell) {
if (null == workCell) return;
return true;
//如果工位当前配置的是展示柱状图则无须重置加工数
if (!StringUtils.isEmpty(workCell.getIsShowMsg()) && workCell.getIsShowMsg().compareTo(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue()) == 0) return;
}
private StationResultBean getStationResultBean(StationRequestBean reqBean, List<StationKvBean> productionStatisticsContext, MesWorkCell mesWorkCell, MesProdShiftContext mesProdShiftKvBean) {
StationResultBean resultBean = new StationResultBean();
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue());
String dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue();
JSONObject reqJson = new JSONObject();
String url = "";
List<List<StationKvBean>> orderQtyKvBeans = new ArrayList<>();
if (!StringUtils.isEmpty(mesWorkCell.getFileId())) {
//判断是否配置的是展示文件
String url = null;
if (!StringUtils.isEmpty(workCell.getIsShowMsg()) && !StringUtils.isEmpty(MesExtEnumUtil.WORK_FILE_TYPE.valueOfDescription(workCell.getIsShowMsg()))) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean();
DdlPreparedPack.getNumEqualPack(Long.parseLong(mesWorkCell.getFileId()), "id", packBean);
DdlPreparedPack.getNumEqualPack(Long.parseLong(workCell.getFileId()), MesPcnExtConstWords.ID, packBean);
MesFile mesFile = mesFileRepository.getByProperty(packBean);
if (mesFile != null) {
url = mesFile.getFileUrl();
}
}
if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.HISTOGRAM.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.ECHART.getValue();
List<MesWorkOrder> workOrderList = workOrderExtService.getWorkOrderListByShiftCode(reqBean.getOrganizeCode(), mesWorkCell.getWorkCenterCode(), mesProdShiftKvBean.getShiftCode());
if (CollectionUtils.isEmpty(workOrderList)) {
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", 0 + ""),
new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", 0 + ""));
} else {
double qty = workOrderList.stream().map(MesWorkOrder::getQty).reduce((a, b) -> a + b).get();
double complateQty = workOrderList.stream().map(MesWorkOrder::getCompleteQty).reduce((a, b) -> a + b).get();
StationKvBeanUtil.addStationKvBeanList(orderQtyKvBeans, new ArrayList<>(),
new StationKvBean(MesPcnExtConstWords.QTY, "工单计划数", qty + ""),
new StationKvBean(MesPcnExtConstWords.COMPLETE_QTY, "工单完成数", complateQty + ""));
}
resultBean.setResultList(orderQtyKvBeans);
} else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.PROD_VIDEO.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.VIDEO.getValue();
reqJson.put("url", url);
resultBean.setResultObj(reqJson);
} else if (Objects.equal(MesExtEnumUtil.WORK_FILE_TYPE.WORK_CELL_PICTURE.getValue(), mesWorkCell.getIsShowMsg())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.IMAGE.getValue();
reqJson.put("url", url);
resultBean.setResultObj(reqJson);
url = (null != mesFile && !StringUtils.isEmpty(mesFile.getFileUrl())) ? mesFile.getFileUrl() : null;
}
if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(),mesWorkCell.getIsCountFinish())) {
dataType = MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue();
//如果不存在文件, 且当前工位配置需要统计加工数的情况下才进行重置加工数
if (StringUtils.isEmpty(url) && !StringUtils.isEmpty(workCell.getIsCountFinish()) && workCell.getIsCountFinish().compareTo(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue()) == 0) {
//获取生产线的当前班组班次信息
MesProdShiftContext mesProdShiftKvBean = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
List<StationKvBean> productionStatisticsContext = productionCustomContextStepService.getProductionStatisticsContext(mesProdShiftKvBean, MesPcnExtConstWords.ZERO_STR);
StationResultBean resultBean = new StationResultBean();
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.MODULE_CUSTOM_CONTENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.TEXT.getValue());
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL);
resultBean.setResultList(productionStatisticsContext);
this.sendMessage(reqBean, resultBean);
}
resultBean.setDataType(dataType);
resultBean.setCustomPageName(MesPcnExtConstWords.CUSTOM_PAGE_NAME_WORK_CELL);
return resultBean;
}
}

@ -184,10 +184,12 @@ public class MesAssemblyGeneratePartNoStepService extends BaseStepService {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult,
isEnoughQty ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
String.format("%s装配件条码%s匹配成功!当前扫描的主条码数量[%s]%s设备腔数[%s]!", suffix, assemblySn, productionPsInContextList.size(), isEnoughQty ? "已满足" : "未满足", cellEquipContext.getCavity()));
String.format("%s装配件条码%s匹配成功!当前扫描的主条码数量[%s]%s设备腔数[%s]!", suffix, assemblySn, productionPsInContextList.size(), isEnoughQty ? "已满足" : "未满足", cellEquipContext.getCavity()),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, String.format("装配件条码%s匹配成功!", assemblySn));
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, String.format("装配件条码%s匹配成功!", assemblySn),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}

@ -184,10 +184,12 @@ public class MesAssemblyMatchNosortRetrodictStepService extends BaseStepService
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult,
isEnoughQty ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
String.format("%s装配件条码%s匹配成功!当前扫描的主条码数量[%s]%s设备腔数[%s]!", suffix, assemblySn, productionPsInContextList.size(), isEnoughQty ? "已满足" : "未满足", cellEquipContext.getCavity()));
String.format("%s装配件条码%s匹配成功!当前扫描的主条码数量[%s]%s设备腔数[%s]!", suffix, assemblySn, productionPsInContextList.size(), isEnoughQty ? "已满足" : "未满足", cellEquipContext.getCavity()),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, String.format("装配件条码%s匹配成功!", assemblySn));
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult, String.format("装配件条码%s匹配成功!", assemblySn),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}

@ -100,7 +100,7 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
if (!isNeedScanAssembly || !hasUnBindAssembly) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !isNeedScanAssembly ? "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!" : "当前加工规则对应的装配件扫描项均匹配完毕!");
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, !isNeedScanAssembly ? "当前加工规则无装配件清单,当前无需匹配装配件条码!" : "当前加工规则对应的装配件清单均匹配完毕!");
}
//获取上下文生产扫/读信息:装配件条码
@ -136,12 +136,16 @@ public class MesAssemblyMatchNosortStepService extends BaseStepService {
if (!hasUnBindAssembly) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn), stepResult,
(CollectionUtils.isEmpty(productionPsInContextList) || productionPsInContextList.size() >= needQty) ? true : stepResult.isCompleted(false).nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_PRODUCT_SN).isCompleted(),
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix));
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("%s当前加工规则对应的装配件清单均匹配完毕!", suffix),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
//单次匹配成功
if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix);
if (result) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix,
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
//匹配失败验证是否重置装配件扫描项
MesWorkCell workCell = productionProcessContext.getWorkCell();

@ -72,11 +72,17 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!");
//判断是否存在装配件清单
if (!checkIsNeedScanAssembly(prodRuleContextList)) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需匹配装配件条码!");
if (!checkIsNeedScanAssembly(prodRuleContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则无装配件清单,当前无需匹配装配件条码!");
}
//验证是否存在待绑定数据
Boolean hasUnBindAssembly = hasUnBindAssembly(prodRuleContextList);
if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件扫描项均匹配完毕!");
if (!hasUnBindAssembly) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则对应的装配件清单均匹配完毕!");
}
//获取上下文生产扫/读信息:装配件条码
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanAssemblySnContext(reqBean);
@ -113,11 +119,17 @@ public class MesAssemblyMatchSortStepService extends BaseStepService {
}
//验证是否存在待绑定数据
if (!hasUnBindAssembly) return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("%s当前加工规则对应的装配件扫描项均匹配完毕!", suffix));
if (!hasUnBindAssembly) {
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("%s当前加工规则对应的装配件清单均匹配完毕!", suffix),
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
//单次匹配成功
if (result) return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix);
if (result) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog().scanInfo(assemblySn),
stepResult.nextTriggerEvent(MesPcnExtConstWords.NEXT_TRIGGER_EVENT_ASSEMBLY), false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, suffix,
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
stepResult.msg(String.format("装配件条码%s匹配失败!%s", assemblySn, StringUtils.isEmpty(stepResult.getMsg()) ? MesPcnExtConstWords.EMPTY : stepResult.getMsg()));

@ -106,8 +106,10 @@ public class MesAssemblyReadStepService extends BaseStepService {
List<MesProdRuleContext> prodRuleContextList = productionDispatchContextStepService.getProdRuleDataContext(reqBean);
//验证当前是否需要读装配件条码: 是否存在装配件清单
if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedReedAssembly(prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前加工规则未配置装配件扫描项,无需读设备[%s]装配件条码!", cellEquipContext.getEquipmentName()));
if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedReedAssembly(prodRuleContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前加工规则未装配件清单,无需读设备[%s]装配件条码!", cellEquipContext.getEquipmentName()));
}
//获取生产过程上下文对象有异常信息 抛出异常
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());

@ -25,10 +25,7 @@ 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.UUID;
import java.util.*;
import java.util.stream.Collectors;
/**
@ -78,6 +75,12 @@ public class MesAssemblySaveStepService extends BaseStepService {
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在非排序加工规则数据,请重置工序!");
//判断是否存在装配件清单
if (!checkIsNeedScanAssembly(prodRuleContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则无装配件清单,当前无需保存装配件记录!");
}
//获取上下文产出条码数据信息集合
List<MesProductionPsOutContext> productionPsOutContextList = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
@ -101,6 +104,12 @@ public class MesAssemblySaveStepService extends BaseStepService {
}
//判断是否存在装配件清单
private Boolean checkIsNeedScanAssembly(List<MesProdRuleContext> prodRuleContextList) {
Optional<MesProdRuleContext> optional = prodRuleContextList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getAssemblyDataJson()))).findFirst();
return (null == optional || !optional.isPresent()) ? false : true;
}
private void saveProductionAssemblyData(StationRequestBean reqBean, List<Long> productSnIdList, MesProductionProcessContext productionProcessContext, MesProdRuleContext prodRuleContext,
Map<Integer, MesProductionPsOutContext> ppMap, MesCellEquipContext cellEquipContext, MesScanMonitorContext scanMonitorContext) {

@ -86,19 +86,25 @@ public class MesAssemblyScanStepService extends BaseStepService {
Integer busiType = getBusiType(productionPsInContextListNoFinishCode, prodRuleContextList);
//验证场景1 当前是否需要扫描装配件条码: 是否存在装配件清单 【当前验证只能对内部触发生效】
if (busiType == BUSI_TYPE.ONE.value && !CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需扫描装配件条码!");
if (busiType == BUSI_TYPE.ONE.value && !CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则无装配件清单,当前无需扫描装配件条码!");
}
//场景1 处理装配件的装配爆炸图和音频文件
if (busiType == BUSI_TYPE.ONE.value) doHandleAssemblyFile(reqBean, productionProcessContext.getWorkCenter(), prodRuleContextList);
//验证场景1 当前是否需要扫描装配件条码: 验证是否存在待绑定数据 【当前验证只能对内部触发生效】
if (busiType == BUSI_TYPE.ONE.value && !CollectionUtils.isEmpty(prodRuleContextList) && !hasUnBindAssembly(prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则对应的装配件清单已扫描完毕,当前无需扫描装配件条码!");
if (busiType == BUSI_TYPE.ONE.value && !CollectionUtils.isEmpty(prodRuleContextList) && !hasUnBindAssembly(prodRuleContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则对应的装配件清单已扫描完毕,当前无需扫描装配件条码!");
}
//验证场景3的当前未匹配的主条码是否是空腔码
if (busiType == BUSI_TYPE.THREE.value && CollectionUtils.isEmpty(curProductionPsInContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前主条码对应的装配件清单已扫描完毕,当前无需扫描装配件条码!");
if (busiType == BUSI_TYPE.THREE.value && CollectionUtils.isEmpty(curProductionPsInContextList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前主条码对应的装配件清单已扫描完毕,当前无需扫描装配件条码!");
}
if (StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描装配件条码!");
@ -274,9 +280,9 @@ public class MesAssemblyScanStepService extends BaseStepService {
ONE(1, "唯一加工规则场景或排序线"),//通过 产出零件 + 进料条码零件 + 设备 找到唯一的非排序产品加工规则, 产出零件与进料条码零件至少存在1个 或者 排序线
TWO(2, "无进无出扫装配件生成零件号场景"),//产出零件与进料条码零件均不扫描, 直接扫描装配件, 通过生成零件号工步反向匹配非排序产品加工规则
TWO(2, "无出无进扫装配件,非排序无显示装配件匹配场景"),//产出零件与进料条码零件均不扫描, 直接扫描装配件, 通过非排序无显示装配件匹配工步反向匹配非排序产品加工规则
THREE(3, "有进未匹配加工规则扫装配件生成零件号场景");//产出零件不扫描, 扫描进料条码零件 + 设备 会对应多个非排序产品加工规则, 通过扫描装配件, 生成零件号工步反向匹配非排序产品加工规则, 将匹配的规则再匹配进料条码零件
THREE(3, "无出有进扫装配件,非排序无显示装配件匹配场景");//产出零件不扫描, 扫描进料条码零件, 扫描装配, 通过非排序无显示装配件匹配工步反向匹配非排序产品加工规则, 将匹配的规则再匹配进料条码零件
private Integer value;

@ -74,7 +74,7 @@ public class MesAssemblyScanStepServiceBak extends BaseStepService {
//验证当前是否需要扫描装配件条码: 是否存在装配件清单 【当前验证只能对内部触发生效】
if (!CollectionUtils.isEmpty(prodRuleContextList) && !checkIsNeedScanAssembly(prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则未配置装配件扫描项,当前无需扫描装配件条码!");
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, "当前加工规则无配置装配件清单,当前无需扫描装配件条码!");
//处理装配件的装配爆炸图和音频文件
doHandleAssemblyFile(reqBean, productionProcessContext.getWorkCenter(), prodRuleContextList);

@ -111,9 +111,11 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
//显示装配件信息
showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList);
Boolean isShow = showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "装配件扫描项已查询完毕,请查看!");
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult,
isShow ? "已显示装配件清单,请查看!" : "当前腔匹配的加工规则无装配件清单!",
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}
private StepResult doHandleProdRuleData(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesWorkCenter workCenter, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext,
@ -468,6 +470,8 @@ public class MesAssemblyShowNosortStepService extends BaseStepService {
}
if (CollectionUtils.isEmpty(allAssemblyList)) return false;
//获取前端置顶信息 【sourceId&MatchDatetime】
String topRowInfo = getTopRowInfo(allAssemblyList);

@ -104,10 +104,11 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//显示装配件信息
if (!showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList))
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "当前未查询到相关的装配件清单");
Boolean isShow = showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList);
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, "显示装配件扫描项成功!");
return stepSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult,
isShow ? "已显示装配件清单,请查看!" : "当前腔匹配的加工规则无装配件清单!",
MesPcnEnumUtil.PROMPT_SOUND.SUCCESS.getValue());
}

@ -1,7 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
@ -54,9 +54,6 @@ public class MesProductSnGenerateStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
@ -74,6 +71,9 @@ public class MesProductSnGenerateStepService extends BaseStepService {
@Autowired
private IFsmRouteDataService fsmRouteDataService;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -105,7 +105,7 @@ public class MesProductSnGenerateStepService extends BaseStepService {
if (CollectionUtils.isEmpty(prodRuleContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在加工规则信息,请重置工序解决!");
//获取生产线的当前班组班次信息
MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProdShiftContext prodShiftContext = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (null == prodShiftContext) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在生产开班记录,请重新开班!");

@ -138,6 +138,11 @@ public class MesProductSnPrintNosortStepService extends BaseStepService {
}
}
if (CollectionUtils.isEmpty(printModelList) && CollectionUtils.isEmpty(resultMapList)) {
return stepDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), stepResult, true,
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, "当前加工规则无需执行打印!");
}
//前端接收到busiTyep是customComponent并且 dataType是file类型的消息就需要打印后续消息里的数据一个模板对应多个打印数据
resultBean.setBusiType(MesPcnEnumUtil.STATION_BUSI_TYPE.CUSTOM_COMPONENT.getValue());
resultBean.setDataType(MesPcnEnumUtil.STATION_DATA_TYPE.FILE.getValue());

@ -109,16 +109,11 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
// 根据工单号获取工单信息
MesWorkOrder workOrder = workOrderMap.get(sn.getWorkOrderNo());
if (workOrder == null) {
log.error("MesCustSnPrintStepService --- exec --- 工单号:{}无效", sn.getWorkOrderNo());
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", sn.getWorkOrderNo()));
continue;
}
if ((partDataContext == null) || (!partDataContext.containsKey(workOrder.getPartNo()))) {
log.error("MesCustSnPrintStepService --- exec --- 工单号:{}零件{}丢失缓存", sn.getWorkOrderNo(), sn.getPartNo());
if (null == workOrder) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号:{}无效!", sn.getWorkOrderNo()));
if (CollectionUtils.isEmpty(partDataContext) || !partDataContext.containsKey(workOrder.getPartNo()))
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]丢失零件信息缓存!", sn.getWorkOrderNo(), sn.getPartNo()));
}
MesPart mesPart = partDataContext.get(sn.getPartNo());
String custMatchRule = StringUtils.isEmpty(mesPart.getCustMatchRule()) ? "WH_CUST_SN_RULE" : mesPart.getCustMatchRule();
@ -126,25 +121,18 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
DdlPreparedPack.getStringEqualPack(custMatchRule, MesPcnExtConstWords.RULE_CODE, packBean);
MesNumberRule numberRule = numberRuleRepository.getByProperty(packBean);
if (numberRule == null) {
log.error("MesCustSnPrintStepService --- exec --- 客户条码编码规则[WH_CUST_SN_RULE]无效");
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", sn.getWorkOrderNo(), sn.getPartNo(), custMatchRule));
}
if (null == numberRule) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]客户条码编码规则[%s]无效!", sn.getWorkOrderNo(), sn.getPartNo(), custMatchRule));
// 从物料信息中获取标签模板
String labelTemplateCode = partDataContext.get(sn.getPartNo()).getCustLabelTemplate();
if (labelTemplateCode == null) {
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo()));
}
if (null == labelTemplateCode) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]未在ERP物料信息维护打印模板,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo()));
MesProduceSnPrintModel mesProduceSnPrintModel = new MesProduceSnPrintModel();
// 查模板代码
MesLabelTemplate labelTemplate = mesTemplateService.getLabelTemplate(labelTemplateCode, organizeCode);
if (labelTemplate == null) {
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
}
if (null == labelTemplate) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]无效,请检查并修改!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
mesProduceSnPrintModel.setMesLabelTemplate(labelTemplate);
mesProduceSnPrintModel.setPrinter(partDataContext.get(sn.getPartNo()).getProductPrinterCode());
@ -155,11 +143,9 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
//根据反射获取策略类--封装打印数据
String methodCode = labelTemplate.getMethodCode();
//模板信息丢失抛出异常
if (StringUtils.isEmpty(methodCode)) {
stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
}
if (StringUtils.isEmpty(methodCode)) stepExpSendMsgAndThrowEx(reqBean, resultBean, String.format("工单号[%s]零件号[%s]的模板代码[%s]的反射类丢失,请配置!", sn.getWorkOrderNo(), sn.getPartNo(), labelTemplateCode));
IPrintTemplateStrategyService strategyService = (IPrintTemplateStrategyService) SpringContextsUtil.getBean(methodCode);
// GenSerialNoModel model , MesProduceSnPrintModel mesProduceSnPrintModel, MesNumberRule numberRule, StepResult stepResult, StationRequestBean reqBean, Boolean isStep
MesProduceSnPrintModel printModel = strategyService.execute(null, mesProduceSnPrintModel, numberRule, stepResult, reqBean, true);
resultMap.addAll(printModel.getPrintContextList());
snLogList.add(getMesPrintedSnLog(reqBean, workOrder, JSONObject.toJSONString(printModel.getPrintContextList().iterator().next().get(MesPcnExtConstWords.TEMPLATE_DATA))));
@ -192,13 +178,17 @@ public class MesProductSnPrintSortStepService extends BaseStepService {
private Map<String, MesWorkOrder> getMesWorkOrderMap(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
// 从产成物料上下文中获取 工单号集合
List<String> workOrderNoList = productionPartContextList.stream().map(MesProductionPartContext::getWorkOrderNo).distinct().collect(Collectors.toList());
List<String> workOrderNoList = (productionPartContextList.stream().filter(o ->
(null != o && !StringUtils.isEmpty(o.getForeignKey()))).map(MesProductionPartContext::getWorkOrderNo).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)
).distinct().collect(Collectors.toList());
DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
List<MesWorkOrder> workOrderList = workOrderRepository.findByHqlWhere(packBean);
// 根据工单号分组
return workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y));
return CollectionUtils.isEmpty(workOrderList) ? null :
workOrderList.stream().collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, Function.identity(), (x, y) -> y));
}
}

@ -1,7 +1,7 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.apiservice.serviceimpl.step.method.MesPartDataMapSaveStepService;
@ -49,9 +49,6 @@ public class MesProductSnSaveStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesPartDataMapSaveStepService partDataMapSaveStepService;
@Autowired
@ -60,6 +57,9 @@ public class MesProductSnSaveStepService extends BaseStepService {
@Autowired
private MesProduceSnRepository produceSnRepository;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -82,7 +82,7 @@ public class MesProductSnSaveStepService extends BaseStepService {
if (CollectionUtils.isEmpty(productionPsOutContextList)) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在产出零件条码信息,请重置工序解决!");
//获取生产线的当前班组班次信息
MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProdShiftContext prodShiftContext = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (null == prodShiftContext) stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "当前不存在生产开班记录,请重新开班!");

@ -10,6 +10,7 @@ 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.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
@ -82,7 +83,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
if (CollectionUtils.isEmpty(chooseCavityPart) && StringUtils.isEmpty(scanInfo)) stepSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), "请扫描产成零件!");
List<MesProductionPartContext> productionPartContextList = null;
List<MesProductionPartContext> productionPartContextList;
List<String> readList;
List<String> partNoList;
String cellMessageSorce = null;
@ -152,7 +153,7 @@ public class MesProductionPartNoScanStepService extends BaseStepService {
if (cellEquipContext.getCavity().compareTo(productionPartContextList.size()) > 0) return stepDynamicsCompleteAndSendMsgReturn(
reqBean, resultBean.writeDbLog().scanInfo(scanInfo),
stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT,
String.format("当前%s验证成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!", suffix, cellEquipContext.getCavity(), cellEquipContext.getCavity() - productionPartContextList.size()));
String.format("当前%s验证成功,已知腔数[%s],还需要再连续扫描[%s]次产成零件!", suffix, cellEquipContext.getCavity(), cellEquipContext.getCavity() - productionPartContextList.size()));
}
//存储展示组件MODULE_CONTENT内容

@ -1,5 +1,6 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionDispatchContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
@ -56,6 +57,9 @@ public class MesProductionRecordGenerateStepService extends BaseStepService {
@Autowired
private IMesProductionRecordService productionRecordService;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
//当前非排序线, 排序线有差异
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -106,7 +110,8 @@ public class MesProductionRecordGenerateStepService extends BaseStepService {
if (Objects.equal(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue(), workCell.getIsCountFinish())) {
// 保存班次加工数量上下文
Integer amount = productionCustomContextStepService.dispatchProductionStatisticsContext(reqBean, productionPsOutContextList.size());
MesProdShiftContext mesProdShiftKvBean = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
Integer amount = productionCustomContextStepService.dispatchProductionStatisticsContext(reqBean, productionPsOutContextList.size(), mesProdShiftKvBean);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(MesPcnEnumUtil.WORK_CELL_SCAN_MONITOR_LOG_TYPE.PROCESS.getValue()), String.format("生产线[%s]工位[%s]当前累加数[%s]已累计加工数[%s]", reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), productionPsOutContextList.size(), amount), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
}

@ -2,8 +2,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentProdParamCfgService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.pojo.context.*;
@ -46,9 +46,6 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesEquipmentProdParamCfgService equipmentProdParamCfgService;
@Autowired
@ -57,6 +54,9 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
@Autowired
private IMesEquipmentExtService equipmentExtService;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -107,7 +107,7 @@ public class MesSendEquipParamsCmdStepService extends BaseStepService {
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
List<MesProductionPsInContext> productionPsInContexts = productionDispatchContextStepService.getProductionPsInContext(reqBean);
List<MesProductionPsOutContext> productionPsOutContexts = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProdShiftContext mesProdShiftKvBean = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
//发送设备加工参数
prodRuleContextList.stream().filter(o -> null != o).forEach(o -> {

@ -2,8 +2,8 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentProdParamCfgService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableRwExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionCustomContextStepService;
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.pojo.context.*;
@ -46,9 +46,6 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private IMesEquipmentProdParamCfgService equipmentProdParamCfgService;
@Autowired
@ -57,6 +54,9 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
@Autowired
private IMesEquipmentExtService equipmentExtService;
@Autowired
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -107,7 +107,7 @@ public class MesSendEquipParamsCmdStepService2 extends BaseStepService {
List<MesProductionPartContext> productionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
List<MesProductionPsInContext> productionPsInContexts = productionDispatchContextStepService.getProductionPsInContext(reqBean);
List<MesProductionPsOutContext> productionPsOutContexts = productionDispatchContextStepService.getProductionPsOutContext(reqBean);
MesProdShiftContext mesProdShiftKvBean = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProdShiftContext mesProdShiftKvBean = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
//发送设备加工参数
prodRuleContextList.stream().filter(o -> null != o).forEach(o -> {

@ -1,13 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.*;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdShiftRecordService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProduceSnExtService;
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.pojo.context.*;
import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmRouteDataService;
import cn.estsh.i3plus.mes.pcn.api.iservice.busi.ISyncFuncService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
import cn.estsh.i3plus.mes.pcn.util.StringUtil;
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
@ -15,12 +16,13 @@ import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.*;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.model.GenSerialNoModel;
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.repository.MesProductionAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderCutRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
@ -54,9 +56,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
@Autowired
private IMesProductionCustomContextStepService productionCustomContextStepService;
@Autowired
private MesWorkOrderCutRepository workOrderCutRepository;
@Autowired
@ -69,10 +68,10 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
private IFsmRouteDataService fsmRouteDataService;
@Autowired
private MesProductionAssemblyRepository productionAssemblyRepository;
private MesWorkOrderCutDetailRepository workOrderCutDetailRepository;
@Autowired
private MesWorkOrderCutDetailRepository workOrderCutDetailRepository;
private IMesProdShiftRecordService prodShiftRecordService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -88,11 +87,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
//存储生产过程上下文对象
productionProcessContextStepService.dispatchProductionProcessContext(reqBean, productionProcessContext);
////获取上下文生产扫/读信息:加工单
//List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean);
//
//String cutWorkOrderNo = equipVariableCollectContextList.get(0).getEquipVariableValue();
//看是否修改裁片工单状态
//获取上下文进料零件条码信息集合
List<MesProductionPsInContext> productionPsInContextList = productionDispatchContextStepService.getProductionPsInContext(reqBean);
@ -121,7 +115,7 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
MesWorkCell workCell = productionProcessContext.getWorkCell();
//获取生产线的当前班组班次信息
MesProdShiftContext prodShiftContext = productionCustomContextStepService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
MesProdShiftContext prodShiftContext = prodShiftRecordService.getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
// 无进料条码则生成条码
if (CollectionUtils.isEmpty(productionPsInContextList)) {
@ -193,9 +187,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
new String[]{MesPcnExtConstWords.PRODUCT_SN, MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME},
new Object[]{cutWorkOrderNo, reqBean.getUserInfo(), TimeTool.getNowTime(true)});
// 新增装配件加工记录
//saveProductionAssembly(reqBean, productionProcessContext, cellEquipContext, mesProdRuleContext, productionPsOutContext);
}
//保存上下文产出条码数据信息集合
@ -218,11 +209,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
if (productionPsOutContext == null)
stepExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("产出零件号[%s]不存在,请重置工序解决!", mesProductionPartContext.getPartNo()));
//MesProdRuleContext mesProdRuleContext = prodRuleContextMapByOutPartNo.get(mesProductionPartContext.getPartNo());
// 新增装配件加工记录
//saveProductionAssembly(reqBean, productionProcessContext, cellEquipContext, mesProdRuleContext, productionPsOutContext);
}
}
@ -267,51 +253,6 @@ public class MesWorkOrderCutProductSnSaveStepService extends BaseStepService {
}
private void saveProductionAssembly(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext,
MesCellEquipContext cellEquipContext, MesProdRuleContext mesProdRuleContext,
MesProductionPsOutContext productionPsOutContext) {
MesProductionAssembly productionAssembly = new MesProductionAssembly();
productionAssembly.setAssemblySn("");
productionAssembly.setDataSource(MesExtEnumUtil.PRODUCTION_ASSEMBLY_DATA_SOURCE.NOSORT.getValue());
productionAssembly.setIsOrigSn(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue());
productionAssembly.setIsSkip(CommonEnumUtil.FALSE);
productionAssembly.setAreaCode(reqBean.getAreaCode());
productionAssembly.setWorkCenterCode(reqBean.getWorkCenterCode());
productionAssembly.setWorkCellCode(reqBean.getWorkCellCode());
productionAssembly.setProcessCode(reqBean.getProcessCode());
productionAssembly.setProcessName(productionProcessContext.getProcessName());
productionAssembly.setCraftCode(productionProcessContext.getCraftCode());
productionAssembly.setCraftName(productionProcessContext.getCraftName());
productionAssembly.setEquipmentCode(cellEquipContext.getEquipmentCode());
productionAssembly.setProductionRecordId(mesProdRuleContext.getProductionRecordId());
productionAssembly.setMouldNo(mesProdRuleContext.getMouldNo());
if (null != productionPsOutContext) {
productionAssembly.setPartNo(productionPsOutContext.getPartNo());
productionAssembly.setPartName(productionPsOutContext.getPartName());
productionAssembly.setSerialNumber(productionPsOutContext.getSerialNumber());
productionAssembly.setProductSn(productionPsOutContext.getProductSn());
productionAssembly.setCustSn(productionPsOutContext.getCustSn());
}
MesScanMonitorContext scanMonitorContext = productionProcessContextStepService.dispatchScanMonitorContext(reqBean, true);
if (null != scanMonitorContext) productionAssembly.setMouldRecordId(scanMonitorContext.getMouldRecordId());
productionAssembly.setOrganizeCode(reqBean.getOrganizeCode());
ConvertBean.serviceModelInitialize(productionAssembly, reqBean.getUserInfo());
productionAssembly.setFid(UUID.randomUUID().toString());
productionAssemblyRepository.insert(productionAssembly);
}
private void updateWorkOrderCutStatus(StationRequestBean reqBean, String cutWorkOrderNo, Integer status) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(cutWorkOrderNo, MesPcnExtConstWords.CUT_WORK_ORDER_NO, packBean);

@ -14,7 +14,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import com.google.common.base.Objects;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
@ -110,22 +109,6 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
this.sendMessage(reqBean, resultBean);
}
//获取生产线的当前班组班次信息
@Override
public MesProdShiftContext getMesProdShiftKvBean(String organizeCode, String workCenterCode) {
List<StationKvBean> stationKvBeans = getProdShiftDataContext(organizeCode, workCenterCode);
if (CollectionUtils.isEmpty(stationKvBeans)) return null;
StationKvBean shiftGroupKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), MesPcnExtConstWords.SHIFT_GROUP)).findFirst().orElse(null);
StationKvBean shiftCodeKvBean = stationKvBeans.stream().filter(stationKvBean -> Objects.equal(stationKvBean.getKey(), MesPcnExtConstWords.SHIFT_CODE)).findFirst().orElse(null);
MesProdShiftContext mesProdShiftContext = new MesProdShiftContext();
mesProdShiftContext.setShiftCode(shiftGroupKvBean == null ? null : shiftCodeKvBean.getValue());
mesProdShiftContext.setShiftGroup(shiftCodeKvBean == null ? null : shiftGroupKvBean.getValue());
return mesProdShiftContext;
}
//开班信息KEY 【PS:生产线级别】
private String getProdShiftContextKey(String orgainzeCode, String workCenterCode) { return new StringJoiner(MesPcnExtConstWords.COLON).add(orgainzeCode).add(MesPcnExtConstWords.PROD_SHIFT_DATA_CONTEXT).add(workCenterCode).toString(); }
@ -166,6 +149,13 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
return !StringUtils.isEmpty(productionStatisticsJson) ? JSONObject.parseArray(productionStatisticsJson, StationKvBean.class) : null;
}
//封装加工数信息
@Override
public List<StationKvBean> getProductionStatisticsContext(MesProdShiftContext mesProdShiftKvBean, String countStr) {
return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(mesProdShiftKvBean.getShiftGroup(), "加工数", countStr), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
}
//保存上下文工位加工数统计信息 [JSON]List<StationKvBean>
@Override
public Boolean dispatchProductionStatisticsContext(StationRequestBean reqBean, List<StationKvBean> productionStatisticsList) {
@ -180,9 +170,9 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
}
@Override
public Integer dispatchProductionStatisticsContext(StationRequestBean reqBean, int count) {
public Integer dispatchProductionStatisticsContext(StationRequestBean reqBean, int count, MesProdShiftContext mesProdShiftKvBean) {
MesProdShiftContext mesProdShiftKvBean = getMesProdShiftKvBean(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode());
if (null == mesProdShiftKvBean) return null;
List<StationKvBean> stationKvBeans = getProductionStatisticsContext(reqBean);
@ -191,9 +181,7 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
amount.set(count);
if (CollectionUtils.isEmpty(stationKvBeans)) {
String name = "加工数";
stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(mesProdShiftKvBean.getShiftGroup(), name, countStr), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
stationKvBeans = getProductionStatisticsContext(mesProdShiftKvBean, countStr);
} else {
AtomicReference<Boolean> flag = new AtomicReference<>(false);
stationKvBeans.stream().forEach(stationKvBean -> {
@ -203,13 +191,7 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
flag.set(true);
}
});
if (!flag.get()) {
String name = "加工数";
stationKvBeans = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(),
new StationKvBean(mesProdShiftKvBean.getShiftGroup(), name, countStr), new StationKvBean(MesPcnExtConstWords.COLOR, "颜色", MesExtEnumUtil.COLOR.BLACK.getValue()));
}
if (!flag.get()) stationKvBeans = getProductionStatisticsContext(mesProdShiftKvBean, countStr);
}
dispatchProductionStatisticsContext(reqBean, stationKvBeans);

Loading…
Cancel
Save