forked from I3-YF/i3plus-mes-pcn-yfai
Merge remote-tracking branch 'origin/dev' into dev
commit
67f554dcaa
@ -0,0 +1,38 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.base.bean.ListPager;
|
||||
import cn.estsh.i3plus.pojo.base.common.Pager;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : MES装箱防错
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/7 14:34
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesBoxingErrorProofingService {
|
||||
|
||||
|
||||
@ApiOperation(value = "查询包装明细")
|
||||
ListPager<MesPackageDetail> queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager);
|
||||
|
||||
@ApiOperation(value = "扫描")
|
||||
MesPackage doScan(MesPackageDetail mesPackageDetail);
|
||||
|
||||
@ApiOperation(value = "保存包装明细")
|
||||
void saveMesPackageDetails(List<MesPackageDetail> mesPackage, String userName);
|
||||
|
||||
@ApiOperation(value = "更新包装表")
|
||||
void updateMesPackage(MesPackage mesPackage);
|
||||
|
||||
@ApiOperation(value = "更新包装明细")
|
||||
void updateMesPackageDetails(MesPackageDetail mesPackage);
|
||||
|
||||
@ApiOperation(value = "解锁")
|
||||
void unLock(String organizeCode, String userName, String pwd);
|
||||
}
|
@ -0,0 +1,18 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : 枚举明细配置
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/9 19:18
|
||||
* @Modify:
|
||||
**/
|
||||
public interface IMesEnumDetailService{
|
||||
|
||||
List<MesEnumDetail> findMesEnumDetail(MesEnumDetail mesEnumDetail);
|
||||
}
|
@ -0,0 +1,17 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
|
||||
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public interface IMesWorkOrderExtService {
|
||||
|
||||
@ApiOperation(value = "根据生产工单号集合 查询生产工单数据")
|
||||
List<MesWorkOrder> getWorkOrderList(String organizeCode, List<String> workOrderNoList);
|
||||
|
||||
@ApiOperation(value = "根据生产工单号集合 查询生产工单数据")
|
||||
Map<String, MesWorkOrder> getWorkOrderMap(String organizeCode, List<String> workOrderNoList);
|
||||
|
||||
}
|
@ -0,0 +1,145 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
|
||||
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesBoxingErrorProofingService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.platform.common.convert.ConvertBean;
|
||||
import cn.estsh.i3plus.pojo.base.bean.ListPager;
|
||||
import cn.estsh.i3plus.pojo.base.common.Pager;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackage;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPackageDetail;
|
||||
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
||||
import cn.estsh.impp.framework.boot.util.ResultBean;
|
||||
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
||||
import io.swagger.annotations.Api;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@RestController
|
||||
@Api(tags = "装箱防错")
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/boxing-error-proofing")
|
||||
@Slf4j
|
||||
public class MesBoxingErrorProofingController {
|
||||
|
||||
@Autowired
|
||||
private IMesBoxingErrorProofingService mesBoxingErrorProofingService;
|
||||
|
||||
|
||||
@GetMapping("/mes-package-details/query")
|
||||
@ApiOperation(value = "查询包装明细")
|
||||
public ResultBean queryMesPackageDetailByPager(MesPackage mesPackage, Pager pager) {
|
||||
|
||||
try {
|
||||
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
|
||||
|
||||
mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
ListPager<MesPackageDetail> partInspectionListPager = mesBoxingErrorProofingService.queryMesPackageDetailByPager(mesPackage, pager);
|
||||
return ResultBean.success("查询成功").setListPager(partInspectionListPager);
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/do-scan")
|
||||
@ApiOperation(value = "扫描")
|
||||
public ResultBean doScan(MesPackageDetail mesPackageDetail) {
|
||||
|
||||
try {
|
||||
ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空");
|
||||
|
||||
mesPackageDetail.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
ConvertBean.serviceModelInitialize(mesPackageDetail, AuthUtil.getSessionUser().getUserName());
|
||||
MesPackage mesPackage = mesBoxingErrorProofingService.doScan(mesPackageDetail);
|
||||
return ResultBean.success("扫描成功").setResultObject(mesPackage);
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@PostMapping("/mes-package-details/saveAll")
|
||||
@ApiOperation(value = "保存包装明细")
|
||||
public ResultBean saveMesPackageDetails(@RequestBody List<MesPackageDetail> mesPackageDetailList) {
|
||||
try {
|
||||
//属性校验
|
||||
mesPackageDetailList.forEach(mesPackageDetail -> {
|
||||
ValidatorBean.checkNotNull(mesPackageDetail.getPackageNo(), "箱条码不能为空");
|
||||
});
|
||||
String userName = AuthUtil.getSessionUser().getUserName();
|
||||
mesBoxingErrorProofingService.saveMesPackageDetails(mesPackageDetailList, userName);
|
||||
return ResultBean.success("保存成功");
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PutMapping("/mes-package/update")
|
||||
@ApiOperation(value = "更新包装表")
|
||||
public ResultBean updateMesPackage(MesPackage mesPackage) {
|
||||
|
||||
try {
|
||||
//属性校验
|
||||
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
|
||||
ValidatorBean.checkNotNull(mesPackage.getIsSealed(), "是否封箱不能为空");
|
||||
|
||||
mesPackage.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName());
|
||||
mesBoxingErrorProofingService.updateMesPackage(mesPackage);
|
||||
return ResultBean.success("保存成功");
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@PutMapping("/mes-package-details/update")
|
||||
@ApiOperation(value = "更新包装明细")
|
||||
public ResultBean updateMesPackageDetails(MesPackageDetail mesPackage) {
|
||||
|
||||
try {
|
||||
//属性校验
|
||||
ValidatorBean.checkNotNull(mesPackage.getPackageNo(), "箱条码不能为空");
|
||||
ValidatorBean.checkNotNull(mesPackage.getSerialNumber(), "替换条码不能为空");
|
||||
ValidatorBean.checkNotNull(mesPackage.getOldSerialNumber(), "替换源条码不能为空");
|
||||
|
||||
ConvertBean.serviceModelUpdate(mesPackage, AuthUtil.getSessionUser().getUserName());
|
||||
mesBoxingErrorProofingService.updateMesPackageDetails(mesPackage);
|
||||
return ResultBean.success("保存成功");
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/unLock")
|
||||
@ApiOperation(value = "解锁")
|
||||
public ResultBean unLock(String pwd) {
|
||||
try {
|
||||
//属性校验
|
||||
ValidatorBean.checkNotNull(pwd, "密码不能为空");
|
||||
|
||||
mesBoxingErrorProofingService.unLock(AuthUtil.getOrganizeCode(), AuthUtil.getSessionUser().getUserName(), pwd);
|
||||
return ResultBean.success("解锁成功");
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -0,0 +1,47 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.controller.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEnumDetailService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.constant.MesCommonConstant;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail;
|
||||
import cn.estsh.impp.framework.boot.auth.AuthUtil;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppBusiException;
|
||||
import cn.estsh.impp.framework.boot.exception.ImppExceptionBuilder;
|
||||
import cn.estsh.impp.framework.boot.util.ResultBean;
|
||||
import cn.estsh.impp.framework.boot.util.ValidatorBean;
|
||||
import io.swagger.annotations.ApiOperation;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : 枚举明细配置
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/9 19:27
|
||||
* @Modify:
|
||||
**/
|
||||
@RestController
|
||||
@RequestMapping(MesCommonConstant.MES_YANFEN + "/mesEnumDetail")
|
||||
public class MesEnumDetailController {
|
||||
|
||||
@Autowired
|
||||
private IMesEnumDetailService mesEnumDetailService;
|
||||
|
||||
@GetMapping("/find")
|
||||
@ApiOperation(value = "查询包装明细")
|
||||
public ResultBean findMesEnumDetail(MesEnumDetail mesEnumDetail) {
|
||||
try {
|
||||
ValidatorBean.checkNotNull(mesEnumDetail.getEnumCode(), "枚举代码不能为空");
|
||||
mesEnumDetail.setOrganizeCode(AuthUtil.getOrganizeCode());
|
||||
List<MesEnumDetail> mesEnumDetailList = mesEnumDetailService.findMesEnumDetail(mesEnumDetail);
|
||||
return ResultBean.success("查询成功").setResultList(mesEnumDetailList);
|
||||
} catch (ImppBusiException imppException) {
|
||||
return ResultBean.fail(imppException);
|
||||
} catch (Exception e) {
|
||||
return ImppExceptionBuilder.newInstance().buildExceptionResult(e);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,38 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEnumDetailService;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEnumDetail;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesEnumDetailRepository;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
/**
|
||||
* @Description : 枚举明细配置
|
||||
* @Reference :
|
||||
* @Author : junsheng.li
|
||||
* @CreateDate 2024/6/9 19:20
|
||||
* @Modify:
|
||||
**/
|
||||
@Service
|
||||
@Slf4j
|
||||
public class MesEnumDetailServiceImpl implements IMesEnumDetailService {
|
||||
|
||||
@Autowired
|
||||
private MesEnumDetailRepository mesEnumDetailRDao;
|
||||
|
||||
@Override
|
||||
public List<MesEnumDetail> findMesEnumDetail(MesEnumDetail mesEnumDetail) {
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(mesEnumDetail.getOrganizeCode());
|
||||
DdlPreparedPack.getStringEqualPack(mesEnumDetail.getEnumCode(), "enumCode", packBean);
|
||||
DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailCode(), "detailCode", packBean);
|
||||
DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailName(), "detailName", packBean);
|
||||
DdlPreparedPack.getStringEqualPack(mesEnumDetail.getDetailValue(), "detailValue", packBean);
|
||||
return mesEnumDetailRDao.findByHqlWhere(packBean);
|
||||
}
|
||||
}
|
@ -0,0 +1,51 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesWorkOrderExtService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
|
||||
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
|
||||
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderRepository;
|
||||
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.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
@Slf4j
|
||||
@Service
|
||||
public class MesWorkOrderExtService implements IMesWorkOrderExtService {
|
||||
|
||||
@Autowired
|
||||
private MesWorkOrderRepository workOrderRepository;
|
||||
|
||||
//根据生产工单号集合 查询生产工单数据
|
||||
@Override
|
||||
public List<MesWorkOrder> getWorkOrderList(String organizeCode, List<String> workOrderNoList) {
|
||||
|
||||
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(workOrderNoList)) return null;
|
||||
|
||||
workOrderNoList = workOrderNoList.size() == 1 ? workOrderNoList : workOrderNoList.stream().filter(o -> StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
||||
|
||||
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
|
||||
if (workOrderNoList.size() == 1) DdlPreparedPack.getStringEqualPack(workOrderNoList.get(0), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
|
||||
else DdlPreparedPack.getInPackList(workOrderNoList, MesPcnExtConstWords.WORK_ORDER_NO, packBean);
|
||||
|
||||
return workOrderRepository.findByHqlWhere(packBean);
|
||||
|
||||
}
|
||||
|
||||
//根据生产工单号集合 查询生产工单数据
|
||||
@Override
|
||||
public Map<String, MesWorkOrder> getWorkOrderMap(String organizeCode, List<String> workOrderNoList) {
|
||||
|
||||
List<MesWorkOrder> workOrderList = getWorkOrderList(organizeCode, workOrderNoList);
|
||||
|
||||
return CollectionUtils.isEmpty(workOrderList) ? null : workOrderList.stream().filter(o -> null != o).collect(Collectors.toMap(MesWorkOrder::getWorkOrderNo, o -> o));
|
||||
|
||||
}
|
||||
}
|
@ -1,110 +0,0 @@
|
||||
//package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station;
|
||||
//
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
//import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
|
||||
//import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseModuleService;
|
||||
//import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
||||
//import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
//import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
//import com.alibaba.fastjson.JSONObject;
|
||||
//import lombok.extern.slf4j.Slf4j;
|
||||
//import org.springframework.beans.factory.annotation.Autowired;
|
||||
//import org.springframework.stereotype.Service;
|
||||
//import org.springframework.util.StringUtils;
|
||||
//
|
||||
//import java.util.Map;
|
||||
//
|
||||
///**
|
||||
// * @Description : 展示组件:非排序生产(按钮 临时)
|
||||
// * @Author :wangjie
|
||||
// **/
|
||||
//@Slf4j
|
||||
//@Service("mesProductionNoSortFunctionModuleService")
|
||||
//class MesProductionNoSortFunctionModuleService extends BaseModuleService {
|
||||
//
|
||||
// @Autowired
|
||||
// private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
//
|
||||
// @Override
|
||||
// public boolean doFunction(StationRequestBean reqBean) {
|
||||
//
|
||||
// StationResultBean resultBean = new StationResultBean();
|
||||
//
|
||||
// String functionCmd = (String) reqBean.getDataMap().get(MesPcnExtConstWords.FUNCTION_CMD);
|
||||
// ButtonDynamicModel buttonDynamicModel = !StringUtils.isEmpty(functionCmd) ? JSONObject.parseObject(functionCmd, ButtonDynamicModel.class) : null;
|
||||
//
|
||||
// if (null != buttonDynamicModel)
|
||||
//
|
||||
//
|
||||
//
|
||||
// this.sendMessage(reqBean, resultBean, "后端未获取到业务功能指令!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
//
|
||||
// switch (command) {
|
||||
// case MesPcnExtConstWords.CMD_WORK_ORDER :
|
||||
// if (StringUtils.isEmpty(value)) {
|
||||
// this.sendMessage(reqBean, null, "请选择启动状态的生产工单!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// String selectWorkOrderNo = (String) doHandleSelectWorkOrderNo(reqBean, 1, null);
|
||||
// selectWorkOrderNo = (StringUtils.isEmpty(selectWorkOrderNo) || !selectWorkOrderNo.contains(MesPcnExtConstWords.COLON)) ? selectWorkOrderNo : selectWorkOrderNo.split(MesPcnExtConstWords.COLON)[1];
|
||||
// if (!StringUtils.isEmpty(selectWorkOrderNo) && selectWorkOrderNo.equals(value)) return result;
|
||||
// reqBean.setForceJumpProcess(true);
|
||||
// if ((Boolean) doHandleSelectWorkOrderNo(reqBean, 2, value.toString())) result = true;
|
||||
// else {
|
||||
// this.sendMessage(reqBean, null, String.format("切换的生产工单[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
// break;
|
||||
// case MesPcnExtConstWords.CMD_BUSI_FLAG :
|
||||
// if (StringUtils.isEmpty(value)) {
|
||||
// this.sendMessage(reqBean, null, "请点击业务按钮!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
// String curBusiFlag = (String) doHandleBusiFlag(reqBean, 1, null);
|
||||
// if (!StringUtils.isEmpty(curBusiFlag) && curBusiFlag.equals(value)) return result;
|
||||
// reqBean.setTriggerAutoFsm(true);
|
||||
// if (StringUtils.isEmpty(curBusiFlag)) {
|
||||
// if ((Boolean) doHandleBusiFlag(reqBean, 2, value.toString())) result = true;
|
||||
// else {
|
||||
// this.sendMessage(reqBean, null, String.format("业务按钮[%s]缓存失败,请重试!", value), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
// }
|
||||
// break;
|
||||
// case MesPcnExtConstWords.CMD_FORCE_CENTER_PASS :
|
||||
// if (StringUtils.isEmpty(value)) {
|
||||
// this.sendMessage(reqBean, null, "入参缺少产线强制放行的工步代码!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
// String pwd = (String) dataMap.get(MesPcnExtConstWords.PWD);
|
||||
// if (!jxProduceSnExtService.checkPorceCenterPassPwd(reqBean, pwd)) {
|
||||
// this.sendMessage(reqBean, null, String.format("产线强制放行验证密码[%s]不正确!", pwd), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// return result;
|
||||
// }
|
||||
// reqBean.setForceSpecStepCode(value.toString());
|
||||
// result = true;
|
||||
// break;
|
||||
// default:
|
||||
// break;
|
||||
// }
|
||||
//
|
||||
// if (!result) this.sendMessage(reqBean, null, "操作太频繁!", MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
// else {
|
||||
// //跳过工序
|
||||
// reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
|
||||
// reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
|
||||
// reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);
|
||||
// shippingDispatchService.doSendScanQueueNextExec(reqBean);
|
||||
// }
|
||||
// return result;
|
||||
// }
|
||||
//
|
||||
//}
|
@ -0,0 +1,110 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
|
||||
|
||||
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.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.IShippingDispatchService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
|
||||
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
|
||||
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
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 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.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 工位参数按钮事件接口实现【选择工单】
|
||||
**/
|
||||
@Service
|
||||
public class MesFunctionChooseCavityOrderService extends BaseSwsService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IShippingDispatchService shippingDispatchService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
|
||||
|
||||
//获取生产过程上下文对象
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
|
||||
|
||||
if (!productionProcessContext.getSuccess()) return false;
|
||||
|
||||
MesWorkCell workCell = productionProcessContext.getWorkCell();
|
||||
|
||||
if (StringUtils.isEmpty(workCell.getIsAllowOrder()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsAllowOrder()) {
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,工位未设置允许界面选工单!",
|
||||
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return false;
|
||||
}
|
||||
|
||||
List<StationKvBean> resultList = checkCavityOrderIsValid(buttonDynamicModel.getFunctionValue());
|
||||
if (CollectionUtils.isEmpty(resultList)) {
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,请检查选择的工单信息[%s]的有效性!",
|
||||
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return false;
|
||||
}
|
||||
|
||||
//保存手动选择的腔数及工单信息上下文
|
||||
productionDispatchContextStepService.saveFunctionChooseCavityOrderContext(reqBean, resultList);
|
||||
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s成功,请等待验证! 提交信息[%s]",
|
||||
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), buttonDynamicModel.getFunctionValue()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
|
||||
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
|
||||
reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);
|
||||
reqBean.setTriggerAutoFsm(true);
|
||||
|
||||
shippingDispatchService.doSendScanQueueIfNoQueue(reqBean, false);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
//腔数=工单个数 数据格式: 腔数;工单1;工单2;工单3
|
||||
private List<StationKvBean> checkCavityOrderIsValid(String functionValue) {
|
||||
|
||||
List<String> list = !StringUtils.isEmpty(functionValue) ? new ArrayList<>(Arrays.asList(functionValue.split(MesPcnExtConstWords.SEMICOLON))) : null;
|
||||
|
||||
if (CollectionUtils.isEmpty(list)) return null;
|
||||
|
||||
List<StationKvBean> resultList = null;
|
||||
|
||||
try {
|
||||
|
||||
Integer cavity = Integer.valueOf(list.get(0));
|
||||
|
||||
if (cavity != list.size() - 1) return null;
|
||||
|
||||
return StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.CAVITY, "腔数", list.remove(0)),
|
||||
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "加工单", list.stream().filter(o -> null != o).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON))));
|
||||
|
||||
} catch (NumberFormatException e) {
|
||||
|
||||
return null;
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,34 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
|
||||
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
|
||||
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
||||
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 工位参数按钮事件接口实现【重置工序】
|
||||
**/
|
||||
@Service
|
||||
public class MesFunctionJumpProcessService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IShippingDispatchService shippingDispatchService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
|
||||
|
||||
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
|
||||
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
|
||||
reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);
|
||||
reqBean.setForceJumpProcess(true);
|
||||
shippingDispatchService.doSendScanQueueNextExec(reqBean);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
|
||||
|
||||
import cn.estsh.i3plus.mes.pcn.actor.shipping.dispatch.IFsmCommonService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
|
||||
import cn.estsh.i3plus.platform.common.util.MesPcnConstWords;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @Description : 工位参数按钮事件接口实现【强过工步集】
|
||||
**/
|
||||
@Service
|
||||
public class MesFunctionJumpStateService extends BaseSwsService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IFsmCommonService fsmCommonService;
|
||||
|
||||
@Autowired
|
||||
private IShippingDispatchService shippingDispatchService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
|
||||
|
||||
Map<String, String> wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean);
|
||||
String jumpState = wcpcMap.get(MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode());
|
||||
|
||||
if (StringUtils.isEmpty(jumpState)) {
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s失败,未配置工位参数[%s]!",
|
||||
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName(), MesPcnEnumUtil.STATION_REQUEST_BEAN_CMD.JUMP_STATE.getCode()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT);
|
||||
return false;
|
||||
}
|
||||
|
||||
reqBean.setClientInfo(shippingDispatchService.getActorClientInfo(reqBean));
|
||||
reqBean.setInterfaceType(MesPcnConstWords.SHIPPING);
|
||||
reqBean.setBusiType(MesPcnConstWords.WS_CMD_DO_SCAN);
|
||||
reqBean.setScanInfo(jumpState);
|
||||
shippingDispatchService.doSendScanQueueNextExec(reqBean);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,37 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
|
||||
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import cn.estsh.impp.framework.boot.util.SpringContextsUtil;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 工位参数按钮事件接口实现【重置上下文】
|
||||
**/
|
||||
@Service
|
||||
public class MesFunctionResetCellContextService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean) {
|
||||
|
||||
//删除BASE上下文数据
|
||||
productionProcessContextStepService.deleteProductionProcessContext(reqBean);
|
||||
|
||||
//删除BUSI上下文数据
|
||||
return ((IStepService) SpringContextsUtil.getBean("mesProductionContextFlushStepService")).execute(reqBean).isCompleted();
|
||||
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) { return doFunction(reqBean); }
|
||||
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.station.function;
|
||||
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseSwsService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.IShippingDispatchService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.function.IFsmModuleFunctionService;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.model.ButtonDynamicModel;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
|
||||
import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
/**
|
||||
* @Description : 工位参数按钮事件接口实现【切换工位】
|
||||
**/
|
||||
@Service
|
||||
public class MesFunctionSwitchCellService extends BaseSwsService implements IFsmModuleFunctionService {
|
||||
|
||||
@Autowired
|
||||
private IShippingDispatchService shippingDispatchService;
|
||||
|
||||
@Override
|
||||
public boolean doFunction(StationRequestBean reqBean, StationResultBean resultBean, ButtonDynamicModel buttonDynamicModel) {
|
||||
|
||||
this.sendMessage(reqBean, resultBean.writeDbLog(), String.format("生产线[%s]工位[%s]%s,客户端已下线!",
|
||||
reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), buttonDynamicModel.getButtonName()), MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
return true;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,98 @@
|
||||
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.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.pojo.base.enumutil.CommonEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
|
||||
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.StringUtils;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
|
||||
/**
|
||||
* @Description : 倒计时显示工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesCountDownShowStepService")
|
||||
public class MesCountDownShowStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IFsmCommonService fsmCommonService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取工步参数
|
||||
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
|
||||
|
||||
//获取生产过程上下文对象有异常信息 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//获取工位信息
|
||||
MesWorkCell workCell = productionProcessContext.getWorkCell();
|
||||
|
||||
//不用显示倒计时, 客户端默认显示绿色无数字
|
||||
if (StringUtils.isEmpty(workCell.getIsShowTime()) || CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue() == workCell.getIsShowTime()) return stepResult;
|
||||
|
||||
//解析工位参数
|
||||
String countDownTime = doCalcCountDownCfg(reqBean);
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("[%sS]倒计时启动!", countDownTime));
|
||||
|
||||
}
|
||||
|
||||
private String doCalcCountDownCfg(StationRequestBean reqBean) {
|
||||
|
||||
//获取工位参数
|
||||
Map<String, String> wcpcMap = fsmCommonService.doHandleFsmWcpcMapDataForDoScan(reqBean);
|
||||
|
||||
//配置值: 60,5 60代表总倒计时,显示绿色; 5代表接近超时,显示黄色; 超时后显示红色
|
||||
String countDownCfg = wcpcMap.containsKey(MesPcnExtConstWords.COUNT_DOWN_CFG) ? wcpcMap.get(MesPcnExtConstWords.COUNT_DOWN_CFG) : null;
|
||||
String[] countDownCfgArr = !StringUtils.isEmpty(countDownCfg) ? countDownCfg.split(MesPcnExtConstWords.COMMA) : null;
|
||||
countDownCfgArr = (null != countDownCfgArr && countDownCfgArr.length == 2) ? countDownCfgArr : MesPcnExtConstWords.COUNT_DOWN_CFG_DEFAULT.split(MesPcnExtConstWords.COMMA);
|
||||
|
||||
List<StationKvBean> resultList = StationKvBeanUtil.addStationKvBeanList(new ArrayList<>(), new StationKvBean(MesExtEnumUtil.COLOR.GREEN.getValue(), "倒计时时长", countDownCfgArr[0]),
|
||||
new StationKvBean(MesExtEnumUtil.COLOR.YELLOW.getValue(), "即将超时", countDownCfgArr[1]), new StationKvBean(MesExtEnumUtil.COLOR.RED.getValue(), "已经超时", MesPcnExtConstWords.ZERO_STR));
|
||||
|
||||
//发送倒计时信号给客户端
|
||||
this.sendMessage(reqBean, new StationResultBean().busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.TIME_MODULE_CONTENT.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.CUSTOM.getValue()).resultList(resultList));
|
||||
|
||||
return countDownCfgArr[0];
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,112 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
|
||||
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.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesProductionProcessContext;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
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 com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @Description : 读BYPASS信号工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesEquipByPassReadStepService")
|
||||
public class MesEquipByPassReadStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipmentLogExtService equipmentLogExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getProductionProcessContext(reqBean);
|
||||
|
||||
if (productionProcessContext.getSuccess()) return stepResult.isCompleted(false);
|
||||
|
||||
//当前工位使用的设备
|
||||
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
if (null == cellEquipContext || StringUtils.isEmpty(cellEquipContext.getCtrlByPass())) return stepResult.isCompleted(false);
|
||||
|
||||
//获取生产过程上下文对象有异常信息
|
||||
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) return stepResult.isCompleted(false).msg(productionProcessContext.getMessage());
|
||||
|
||||
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
|
||||
|
||||
//根据变量类别[就绪信号]搜集设备数据变量接口逻辑信息
|
||||
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue());
|
||||
|
||||
//配置错误
|
||||
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfgAndValue(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue()).getSuccess())
|
||||
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage());
|
||||
|
||||
//搜集设备数据变量接口逻辑信息中的二级变量
|
||||
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
|
||||
|
||||
//根据变量类型与二级变量获取设备数据变量信息
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
|
||||
|
||||
//配置错误
|
||||
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
|
||||
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, productionProcessContext.getMessage());
|
||||
|
||||
//获取设备LOG采集数据
|
||||
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
|
||||
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
//匹配BYPASS有效性
|
||||
return matchByPassValid(reqBean, resultBean, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
|
||||
|
||||
}
|
||||
|
||||
private StepResult matchByPassValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
|
||||
MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
|
||||
//未采集到数据
|
||||
if (!equipLogDispatchContext.getIsCollectValue()) return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false,
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前未读取到设备[%s]BYPASS信号,持续监听中...", cellEquipContext.getEquipmentCode()));
|
||||
|
||||
//匹配BYPASS信号有效性
|
||||
Boolean result = (Boolean) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.BYPASS.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
|
||||
|
||||
//发送BYPASS信号给客户端
|
||||
this.sendMessage(reqBean, resultBean.busiType(MesPcnEnumUtil.STATION_BUSI_TYPE.BYPASS_MODULE.getValue()).dataType(MesPcnEnumUtil.STATION_DATA_TYPE.COLOR.getValue()).resultObj(result ? MesExtEnumUtil.COLOR.GREEN.getValue() : MesExtEnumUtil.COLOR.RED.getValue()));
|
||||
|
||||
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult,
|
||||
true, MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前已读取到设备[%s]BYSS信号[%s]!", cellEquipContext.getEquipmentCode(), resultBean.getResultObj()));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,206 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
|
||||
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.util.MesPcnExtConstWords;
|
||||
import cn.estsh.i3plus.mes.pcn.api.iservice.base.IPartService;
|
||||
import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||
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 com.alibaba.fastjson.JSONObject;
|
||||
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.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 读产出零件号工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesProductionPartNoReadStepService")
|
||||
public class MesProductionPartNoReadStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipmentLogExtService equipmentLogExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
|
||||
|
||||
@Autowired
|
||||
private IPartService partService;
|
||||
|
||||
@Override
|
||||
public StepResult init(StationRequestBean reqBean) {
|
||||
|
||||
//发送工步内容
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
|
||||
|
||||
return super.init(reqBean);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取工步参数
|
||||
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
|
||||
|
||||
//当前工序已存在产出零件号跟产出零件信息
|
||||
if (productionDispatchContextStepService.checkProductionPartNoIsExistContext(reqBean) && productionDispatchContextStepService.checkProductionPartIsExistContext(reqBean)) return stepResult;
|
||||
|
||||
//获取生产过程上下文对象有异常信息 抛出异常
|
||||
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
|
||||
|
||||
//根据变量类别[产出零件号]搜集设备数据变量接口逻辑信息
|
||||
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue());
|
||||
|
||||
//当前工位使用的设备
|
||||
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue()).getSuccess())
|
||||
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//搜集设备数据变量接口逻辑信息中的二级变量
|
||||
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
|
||||
|
||||
//根据变量类型与二级变量获取设备数据变量信息
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
|
||||
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//获取设备LOG采集数据
|
||||
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
|
||||
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
//验证设备通信质量
|
||||
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
|
||||
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
|
||||
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
|
||||
|
||||
//验证产出零件号的有效性
|
||||
return checkProductionPartNoValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
|
||||
|
||||
}
|
||||
|
||||
//验证产出零件号的有效性
|
||||
private StepResult checkProductionPartNoValid(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
|
||||
|
||||
//未采集到数据
|
||||
if (!equipLogDispatchContext.getIsCollectValue())
|
||||
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]产出零件号,持续监听中...", cellEquipContext.getEquipmentCode())),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||
|
||||
//读取的产出零件号进行规则匹配
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.PRODUCTION_PART_NO.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
|
||||
|
||||
//没有有效的数据
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
|
||||
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的头道模具号,持续监听中...", cellEquipContext.getEquipmentCode())),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||
|
||||
//发送工步内容
|
||||
String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
|
||||
|
||||
//获取产出零件信息 获取零件信息
|
||||
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, productionProcessContext, equipVariableCollectContextList);
|
||||
|
||||
//更新展示组件MODULE_CONTENT内容
|
||||
doCacheMoudleContext(reqBean, productionPartContextList);
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]产出零件号[%s]!", cellEquipContext.getEquipmentCode(), scanInfo));
|
||||
|
||||
}
|
||||
|
||||
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||
|
||||
//从上下文中取出零件信息集合
|
||||
Map<String, MesPart> partDataMap = productionDispatchContextStepService.getPartDataContext(reqBean);
|
||||
|
||||
//从读取信息中搜集零件编码并去重
|
||||
List<String> partNoList = (equipVariableCollectContextList.stream().filter(o -> (null != o)).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
|
||||
|
||||
//验证上下文中取出零件信息集合是否匹配一模多腔信息中搜集零件编码
|
||||
if (CollectionUtils.isEmpty(partDataMap) || (!partDataMap.keySet().containsAll(partNoList) || !partNoList.containsAll(partDataMap.keySet()))) partDataMap = partService.getPartMap(reqBean.getOrganizeCode(), partNoList);
|
||||
|
||||
//零件信息缺失 抛出异常
|
||||
List<MesProductionPartContext> productionPartContextList = getProductionPartContext(reqBean, resultBean, partNoList, partDataMap, equipVariableCollectContextList);
|
||||
|
||||
//保存设备当前一轮工序的产出零件号,产出零件信息,零件信息
|
||||
productionDispatchContextStepService.saveProductionPartNoContext(reqBean, equipVariableCollectContextList);
|
||||
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
|
||||
productionDispatchContextStepService.savePartDataContext(reqBean, partDataMap);
|
||||
|
||||
return productionPartContextList;
|
||||
|
||||
}
|
||||
|
||||
private List<MesProductionPartContext> getProductionPartContext(StationRequestBean reqBean, StationResultBean resultBean, List<String> partNoList, Map<String, MesPart> partDataMap, List<MesEquipVariableCollectContext> equipVariableCollectContextList) {
|
||||
List<String> filterList = CollectionUtils.isEmpty(partDataMap) ? null : partNoList.stream().filter(o -> (null != o && !partDataMap.containsKey(o))).collect(Collectors.toList());
|
||||
|
||||
//验证错误 抛出异常
|
||||
if (CollectionUtils.isEmpty(partDataMap) || !CollectionUtils.isEmpty(filterList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), String.format("请检查零件信息,零件编码%s信息不存在!", CollectionUtils.isEmpty(partDataMap) ? partNoList.toString() : filterList.toString()));
|
||||
|
||||
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
|
||||
equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(reqBean.getOrganizeCode(), o.getEquipVariableValue(), partDataMap.get(o.getEquipVariableValue()).getPartName())));
|
||||
|
||||
return productionPartContextList;
|
||||
|
||||
}
|
||||
|
||||
private void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
|
||||
//存储展示组件MODULE_CONTENT内容
|
||||
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
|
||||
}
|
||||
|
||||
//封装展示组件MODULE_CONTENT内容
|
||||
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
|
||||
List<List<StationKvBean>> dataList = new ArrayList<>();
|
||||
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.PART_NAME, "零件名称", o.getPartName())));
|
||||
return dataList;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,148 @@
|
||||
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.serviceimpl.fsm.BaseStepService;
|
||||
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
|
||||
import cn.estsh.i3plus.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
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("mesWorkOrderCheckNosortStepService")
|
||||
public class MesWorkOrderCheckNosortStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesWorkOrderExtService workOrderExtService;
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//获取上下文生产扫/读信息:加工单
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = productionDispatchContextStepService.getScanWorkOrderNoContext(reqBean);
|
||||
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), "上下文中缺失待验证的加工单信息!");
|
||||
|
||||
//获取上下文产出零件信息
|
||||
List<MesProductionPartContext> cachedProductionPartContextList = productionDispatchContextStepService.getProductionPartContext(reqBean);
|
||||
|
||||
//清除本次已获取得到的加工单信息
|
||||
productionDispatchContextStepService.deleteScanWorkOrderNoContext(reqBean);
|
||||
|
||||
//非扫描场景 清除历史产出零件信息
|
||||
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionDispatchContextStepService.deleteProductionPartContext(reqBean);
|
||||
|
||||
//验证工单的有效性
|
||||
List<MesProductionPartContext> productionPartContextList = new ArrayList<>();
|
||||
if (!checkWorkOrderValid(reqBean, resultBean, stepResult, productionProcessContext, equipVariableCollectContextList, productionPartContextList).isCompleted()) return execNonCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
||||
|
||||
//扫描场景下合并历史产出零件信息
|
||||
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() == equipVariableCollectContextList.get(0).getMessageSource() && !CollectionUtils.isEmpty(cachedProductionPartContextList)) productionPartContextList.addAll(cachedProductionPartContextList);
|
||||
|
||||
//保存上下文产出零件信息
|
||||
productionDispatchContextStepService.saveProductionPartContext(reqBean, productionPartContextList);
|
||||
|
||||
//更新展示组件MODULE_CONTENT内容
|
||||
doCacheMoudleContext(reqBean, productionPartContextList);
|
||||
|
||||
if (MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue() != equipVariableCollectContextList.get(0).getMessageSource()) return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean, stepResult, String.format("上下文中的加工单%s验证工单状态成功!", stepResult.getObj().toString()));
|
||||
|
||||
//当前工位使用的设备
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
if (cellEquipmentContext.getCavity().compareTo(productionPartContextList.size()) > 0)
|
||||
return execDynamicsCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, false,
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, String.format("当前扫描信息加工单[%s]验证工单状态成功,已知腔数[%s],还需要再连续扫描[%s]次加工单!",
|
||||
equipVariableCollectContextList.get(0).getEquipVariableValue(), cellEquipmentContext.getCavity(), cellEquipmentContext.getCavity() - productionPartContextList.size()));
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前扫描信息加工单[%s]验证工单状态成功,上下文中的加工单个数[%s]已满足腔数!", equipVariableCollectContextList.get(0).getEquipVariableValue(), productionPartContextList.size()));
|
||||
|
||||
}
|
||||
|
||||
//验证工单的有效性
|
||||
private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult,
|
||||
MesProductionProcessContext productionProcessContext, List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList) {
|
||||
|
||||
//搜集生产工单号
|
||||
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)).distinct().collect(Collectors.toList());
|
||||
|
||||
//获取生产工单信息
|
||||
Map<String, MesWorkOrder> workOrderMap = workOrderExtService.getWorkOrderMap(reqBean.getOrganizeCode(), workOrderNoList);
|
||||
|
||||
for (String workOrderNo : workOrderNoList) {
|
||||
|
||||
if (StringUtils.isEmpty(workOrderNo)) continue;
|
||||
|
||||
MesWorkOrder workOrderDb = (CollectionUtils.isEmpty(workOrderMap) || !workOrderMap.containsKey(workOrderNo)) ? null : workOrderMap.get(workOrderNo);
|
||||
if (null == workOrderDb) return stepResult.isCompleted(false).msg(String.format("加工单号[%s]无效!", workOrderNo));
|
||||
|
||||
if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workOrderDb.getWorkOrderStatus())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrderDb.getWorkOrderStatus())));
|
||||
|
||||
if (!workOrderDb.getWorkCenterCode().equals(reqBean.getWorkCenterCode())) return stepResult.isCompleted(false).msg(String.format("加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrderDb.getWorkCenterCode(), reqBean.getWorkCenterCode()));
|
||||
|
||||
}
|
||||
|
||||
equipVariableCollectContextList.stream().filter(o -> null != o).forEach(o -> productionPartContextList.add(new MesProductionPartContext().copyPartNo(workOrderMap.get(o.getEquipVariableValue()))));
|
||||
|
||||
return stepResult.obj(filterList);
|
||||
|
||||
}
|
||||
|
||||
private void doCacheMoudleContext(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
|
||||
//存储展示组件MODULE_CONTENT内容
|
||||
productionDispatchContextStepService.saveModuleContentContext(reqBean, getModuleContextData(reqBean, productionPartContextList));
|
||||
}
|
||||
|
||||
//封装展示组件MODULE_CONTENT内容
|
||||
private List<List<StationKvBean>> getModuleContextData(StationRequestBean reqBean, List<MesProductionPartContext> productionPartContextList) {
|
||||
List<List<StationKvBean>> dataList = new ArrayList<>();
|
||||
productionPartContextList.forEach(o -> StationKvBeanUtil.addStationKvBeanList(dataList, new ArrayList<>(),
|
||||
new StationKvBean(MesPcnExtConstWords.WORK_ORDER_NO, "工单号", o.getWorkOrderNo()), new StationKvBean(MesPcnExtConstWords.PART_NO, "零件编码", o.getPartNo()), new StationKvBean(MesPcnExtConstWords.QTY, "工单数", String.valueOf(o.getQty().intValue()))));
|
||||
return dataList;
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,149 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
|
||||
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipVariableCfgRuleMatchDispatchService;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesEquipmentLogExtService;
|
||||
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.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipLogDispatchContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||
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.pojo.base.enumutil.MesPcnEnumUtil;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariable;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesEquipmentVariableCfg;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProdRouteOptParam;
|
||||
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 com.alibaba.fastjson.JSONObject;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Optional;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 读取加工单工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesWorkOrderReadStepService")
|
||||
public class MesWorkOrderReadStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipmentLogExtService equipmentLogExtService;
|
||||
|
||||
@Autowired
|
||||
private IMesEquipVariableCfgRuleMatchDispatchService equipVariableCfgRuleMatchService;
|
||||
|
||||
@Override
|
||||
public StepResult init(StationRequestBean reqBean) {
|
||||
|
||||
//发送工步内容
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
|
||||
|
||||
return super.init(reqBean);
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//获取工步参数
|
||||
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean, stepParamMap);
|
||||
|
||||
//当前工序已存在读取待验证的加工单信息
|
||||
if (productionDispatchContextStepService.checkScanWorkOrderNoIsExistContext(reqBean)) return stepResult;
|
||||
|
||||
//获取生产过程上下文对象有异常信息 抛出异常
|
||||
if (!productionProcessContextStepService.getEquipmentVariableCfgList(productionProcessContext).getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//从上下文的设备数据变量接口逻辑对象集合中取出当前设备信息的逻辑类型对应的接口逻辑对象集合
|
||||
List<MesEquipmentVariableCfg> equipmentVariableCfgList = productionProcessContext.getEquipVariableCfgListByVct();
|
||||
|
||||
//根据变量类别[加工单]搜集设备数据变量接口逻辑信息
|
||||
equipmentVariableCfgList = productionProcessContextStepService.collectEquipmentVariableCfgList(equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue());
|
||||
|
||||
//当前工位使用的设备
|
||||
MesCellEquipContext cellEquipContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContextStepService.checkNecessaryEquipmentVariableCfg(productionProcessContext, cellEquipContext, equipmentVariableCfgList, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue()).getSuccess())
|
||||
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//搜集设备数据变量接口逻辑信息中的二级变量
|
||||
List<String> categoryLevelTwoList = productionProcessContextStepService.collectCategoryLevelTwoList(equipmentVariableCfgList);
|
||||
|
||||
//根据变量类型与二级变量获取设备数据变量信息
|
||||
List<MesEquipmentVariable> equipmentVariableList = productionProcessContextStepService.findEquipmentVariableList(productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION.getValue(), categoryLevelTwoList);
|
||||
|
||||
//配置错误 抛出异常
|
||||
if (!productionProcessContextStepService.checkIsEmptyEquipmentVariableList(productionProcessContext, cellEquipContext, equipmentVariableList, MesExtEnumUtil.EQUIP_VARIABLE_TYPE.PRODUCTION, categoryLevelTwoList).getSuccess())
|
||||
execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//获取设备LOG采集数据
|
||||
MesEquipLogDispatchContext equipLogDispatchContext = equipmentLogExtService.doHandleEquipmentLogList(cellEquipContext, equipmentVariableList, equipmentVariableCfgList);
|
||||
this.sendMessage(reqBean, resultBean, JSONObject.toJSONString(equipLogDispatchContext), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
|
||||
|
||||
//验证设备通信质量
|
||||
productionDispatchContextStepService.sendEquipQualityMessage(reqBean, cellEquipContext);
|
||||
if (!equipmentLogExtService.checkEquipQuality(cellEquipContext.getQuality()))
|
||||
execDynamicsCompleteAndSendMsg(reqBean, resultBean.writeDbLog(), stepResult, false,
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, String.format("请检查设备的质量状态,读取到设备[%s]的数据变量质量值为[%s]!", cellEquipContext.getEquipmentCode(), cellEquipContext.getQuality()));
|
||||
|
||||
//匹配读取的加工单的有效性
|
||||
return matchWorkOrderValid(reqBean, resultBean, stepParamMap, stepResult, productionProcessContext, cellEquipContext, equipLogDispatchContext);
|
||||
|
||||
}
|
||||
|
||||
//匹配读取的加工单的有效性
|
||||
private StepResult matchWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, Optional<Map<String, MesProdRouteOptParam>> stepParamMap, StepResult stepResult, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesEquipLogDispatchContext equipLogDispatchContext) {
|
||||
|
||||
//未采集到数据
|
||||
if (!equipLogDispatchContext.getIsCollectValue())
|
||||
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean, stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]加工单,持续监听中...", cellEquipContext.getEquipmentCode())),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.GUIDE, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||
|
||||
//读取的加工单进行规则匹配
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = (List<MesEquipVariableCollectContext>) equipVariableCfgRuleMatchService.matchEquipVariableCfgCollectContext(reqBean, productionProcessContext, MesExtEnumUtil.EQUIP_VARIABLE_CFG_CATEGORY.WORK_ORDER.getValue(), equipLogDispatchContext.getEquipVariableCfgCollectContextList());
|
||||
|
||||
//没有有效的数据
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList))
|
||||
execThreadSleepAndSendTaskCompleteAndThrowEx(reqBean, resultBean.writeDbLog(), stepResult.isCompleted(false).msg(String.format("当前未读取到设备[%s]有效的加工单,持续监听中...", cellEquipContext.getEquipmentCode())),
|
||||
MesPcnEnumUtil.STATION_BUSI_TYPE.MESSAGE, MesPcnEnumUtil.STATION_DATA_TYPE.EXP_TEXT, stepParamMap, MesPcnExtConstWords.READ_FAILURE_SLEEP, MesPcnExtConstWords.READ_FAILURE_SLEEP_DEFAULT_TIME);
|
||||
|
||||
//保存设备当前一轮工序的待验证的加工单信息
|
||||
productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
|
||||
|
||||
//发送工步内容
|
||||
String scanInfo = equipVariableCollectContextList.stream().filter(o -> null != o).map(MesEquipVariableCollectContext::getEquipVariableValue).collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.READ);
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, String.format("当前已读取到设备[%s]加工单信息[%s]!", cellEquipContext.getEquipmentCode(), scanInfo));
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,127 @@
|
||||
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.pojo.context.MesCellEquipContext;
|
||||
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesEquipVariableCollectContext;
|
||||
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.platform.common.tool.TimeTool;
|
||||
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.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Description : 扫描加工单工步
|
||||
* @Author : wangjie
|
||||
**/
|
||||
@Slf4j
|
||||
@Service("mesWorkOrderScanStepService")
|
||||
public class MesWorkOrderScanStepService extends BaseStepService {
|
||||
|
||||
@Autowired
|
||||
private IMesProductionProcessContextStepService productionProcessContextStepService;
|
||||
|
||||
@Autowired
|
||||
private IMesProductionDispatchContextStepService productionDispatchContextStepService;
|
||||
|
||||
@Override
|
||||
public StepResult guide(StationRequestBean reqBean) {
|
||||
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean);
|
||||
|
||||
return execSuccessCompleteAndSendGuideReturn(reqBean, new StationResultBean().writeDbLog(), "请扫描加工单!");
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public StepResult execute(StationRequestBean reqBean) {
|
||||
|
||||
StationResultBean resultBean = new StationResultBean();
|
||||
|
||||
StepResult stepResult = StepResult.getSuccessComplete();
|
||||
|
||||
//扫描信息置空
|
||||
String scanInfo = reqBean.resetScanInfo(reqBean.getScanInfo());
|
||||
|
||||
//获取上下文信息
|
||||
MesProductionProcessContext productionProcessContext = productionProcessContextStepService.getCurCellEquipment(reqBean);
|
||||
|
||||
//获取生产过程上下文对象有异常信息 抛出异常
|
||||
if (!productionProcessContext.getSuccess()) execExpSendMsgAndThrowEx(reqBean, resultBean.writeDbLog(), productionProcessContext.getMessage());
|
||||
|
||||
//存储生产过程上下文对象
|
||||
productionProcessContextStepService.saveProductionProcessContext(reqBean, productionProcessContext);
|
||||
|
||||
//当前工位使用的设备
|
||||
MesCellEquipContext cellEquipmentContext = productionProcessContext.getCurCellEquip();
|
||||
|
||||
//如果没有扫描信息, 取手选工单信息, 封装扫/读信息:加工单信息
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList;
|
||||
if (!StringUtils.isEmpty(scanInfo)) equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult, scanInfo);
|
||||
else equipVariableCollectContextList = doHandleScanProductSnContext(reqBean, stepResult);
|
||||
|
||||
//扫描信息为空
|
||||
if (CollectionUtils.isEmpty(equipVariableCollectContextList)) execSendGuideAndThrowEx(reqBean, resultBean.writeDbLog(), "请扫描加工单!");
|
||||
|
||||
//保存上下文扫/读信息:加工单
|
||||
productionDispatchContextStepService.saveScanWorkOrderNoContext(reqBean, equipVariableCollectContextList);
|
||||
|
||||
return execSuccessCompleteAndSendMsgReturn(reqBean, resultBean.writeDbLog(), stepResult, stepResult.getMsg());
|
||||
|
||||
}
|
||||
|
||||
|
||||
//封装扫/读信息:加工单信息 (扫描)
|
||||
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult, String scanInfo) {
|
||||
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
|
||||
|
||||
equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), scanInfo, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN.getValue()));
|
||||
|
||||
//发送工步内容
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.SCAN);
|
||||
|
||||
stepResult.msg(String.format("当前扫描信息加工单[%s]!", scanInfo));
|
||||
|
||||
return equipVariableCollectContextList;
|
||||
|
||||
}
|
||||
|
||||
//封装扫/读信息:加工单信息 (选择)
|
||||
private List<MesEquipVariableCollectContext> doHandleScanProductSnContext(StationRequestBean reqBean, StepResult stepResult) {
|
||||
|
||||
List<StationKvBean> chooseCavityOrder = productionDispatchContextStepService.getFunctionChooseCavityOrderContext(reqBean);
|
||||
|
||||
if (CollectionUtils.isEmpty(chooseCavityOrder)) return null;
|
||||
|
||||
List<String> pickList = new ArrayList<>(Arrays.asList(chooseCavityOrder.stream().filter(o -> (null != o && o.getKey().equals(MesPcnExtConstWords.WORK_ORDER_NO))).findFirst().get().getValue().split(MesPcnExtConstWords.SEMICOLON)));
|
||||
|
||||
List<MesEquipVariableCollectContext> equipVariableCollectContextList = new ArrayList<>();
|
||||
|
||||
pickList.stream().filter(o -> !StringUtils.isEmpty(o)).forEach(o -> equipVariableCollectContextList.add(new MesEquipVariableCollectContext(reqBean.getOrganizeCode(), o, TimeTool.getNowTime(true), MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK.getValue())));
|
||||
|
||||
//发送工步内容
|
||||
String scanInfo = chooseCavityOrder.stream().filter(o -> null != o).map(o -> o.getName() + "[" + o.getValue() + "]").collect(Collectors.joining(MesPcnExtConstWords.SEMICOLON));
|
||||
productionDispatchContextStepService.doSendStepContextMessage(reqBean, scanInfo, MesExtEnumUtil.CELL_MESSAGE_SOURCE.PICK);
|
||||
|
||||
stepResult.msg(String.format("当前选择信息%s!", scanInfo));
|
||||
|
||||
return equipVariableCollectContextList;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
|
||||
|
||||
import cn.estsh.i3plus.pojo.base.annotation.AnnoOutputColumn;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesProductionRecord;
|
||||
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
|
||||
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import io.swagger.annotations.ApiParam;
|
||||
import lombok.Data;
|
||||
import org.springframework.util.CollectionUtils;
|
||||
import org.springframework.util.StringUtils;
|
||||
|
||||
import javax.persistence.Column;
|
||||
import java.io.Serializable;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 生产过程上下文对象-生产开班记录
|
||||
*/
|
||||
@Data
|
||||
public class MesProdShiftContext implements Serializable {
|
||||
|
||||
private static final long serialVersionUID = 1522652732930288855L;
|
||||
|
||||
@ApiParam("班组代码")
|
||||
private String shiftGroup;
|
||||
|
||||
@ApiParam("班次代码")
|
||||
private String shiftCode;
|
||||
|
||||
}
|
Loading…
Reference in New Issue