Merge remote-tracking branch 'origin/uat-temp-wj-chongqingdaqu-dev' into uat-temp-wj-chongqingdaqu-dev

uat-temp-wj-chongqingdaqu-dev
xiangwei.zhang 4 months ago
commit 2ef7005f16

@ -12,8 +12,8 @@ import java.util.Map;
public interface IMesAssemblyExtService {
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则")
List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap);
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则 ; 判断是否剔除平行工位")
List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel);
@ApiOperation(value = "【排序线】获取生产工单装配件绑定记录 [前道所有装配件] -同时- 关联不可用规则 ; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道")
List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap,

@ -32,8 +32,8 @@ public interface IMesProdRuleCfgExtService {
@ApiOperation(value = "【非排序线】获取产品加工规则 【根据PID获取】 -之后- 关联不可用规则")
MesProdRuleContext getProdRuleNosortContextByPid(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap);
@ApiOperation(value = "【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) -同时- 关联不可用规则")
MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap);
@ApiOperation(value = "【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) -同时- 关联不可用规则 ; 判断是否剔除平行工位")
MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel);
@ApiOperation(value = "【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道")
MesProdRuleContext getProdRuleSortPreCraftContext(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap,

@ -77,7 +77,7 @@ public class MesSortShippingCheckController {
MesSortShippingCheckModel model = sortShippingCheckService.doShippingOrderNoQuery(shippingOrderManagement);
long end = System.currentTimeMillis();
scanLogUtil.info("扫描发运单执行结束", end - start);
return ResultBean.success(model.getMsg()).setResultObject(model);
return ResultBean.success(model != null ? model.getMsg() : "").setResultObject(model);
} catch (ImppBusiException imppException) {
scanLogUtil.error(imppException.getErrorMsg());
return ResultBean.fail(imppException);

@ -53,9 +53,9 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
@Autowired
private IMesMediaFileCfgService mediaFileCfgService;
//【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则
//【排序线】获取生产工单装配件绑定记录 -同时- 关联不可用规则 ; 判断是否剔除平行工位
@Override
public List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
public List<MesProductionAssemblySortContext> getProductionAssemblySortContextList(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel) {
if (null == prodRuleContext) return null;
@ -67,6 +67,12 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return null;
//平行工位 获取当前工位的第一个装配件的工艺顺序号
Integer processSeq = isFilterParallel ? getProcessSeq(workOrderAssemblyList, prodRuleContext.getWorkCellCode()) : null;
if (!StringUtils.isEmpty(processSeq)) {
prodRuleContext.setParallelInfo(String.format("{%s:%s}", MesPcnExtConstWords.PROCESS_SEQ, processSeq));
}
// 搜集待装配或者解绑的数据
List<MesWorkOrderAssembly> unBindList = workOrderAssemblyList.stream().filter(o -> (null != o &&
(o.getAssemblyStatus().compareTo(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue()) == 0 ||
@ -88,7 +94,8 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
//【排序线】获取生产工单装配件绑定记录 [前道所有装配件,无爆炸图与音频文件逻辑] -同时- 关联不可用规则 ; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道
@Override
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
public List<MesProductionAssemblySortContext> getProductionAssemblySortPreCraftContextList(MesProdRuleContext prodRuleContext, Map<String, MesWorkCell> workCellMap,
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
if (null == prodRuleContext) return null;
@ -147,35 +154,85 @@ public class MesAssemblyExtService implements IMesAssemblyExtService {
}
//【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否过滤后道
//【排序线】获取生产工单装配件清单[前道所有装配件] 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道
@Override
public List<MesWorkOrderAssembly> getWorkOrderAssemblyListPreCraft(MesProdRuleContext prodRuleContext, Boolean isFilterParallel, Boolean isFilterAfterCraft) {
//【排序线】获取生产工单装配件清单
List<MesWorkOrderAssembly> workOrderAssemblyList = getWorkOrderAssemblyList(prodRuleContext, true);
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList;
if (CollectionUtils.isEmpty(workOrderAssemblyList) || (!isFilterParallel && !isFilterAfterCraft)) return workOrderAssemblyList;
//获取当前工位的第一个装配件的工艺顺序号
Optional<MesWorkOrderAssembly> optional = workOrderAssemblyList.stream().filter(o -> (null != o && prodRuleContext.getWorkCellCode().equals(o.getWorkCellCode()))).findFirst();
if ((null == optional || !optional.isPresent()) || StringUtils.isEmpty(optional.get().getProcessSeq())) return workOrderAssemblyList;
Integer processSeq = isFilterAfterCraft ? getProcessSeq(workOrderAssemblyList, prodRuleContext.getWorkCellCode()) : null;
//平行工位, 需要剔除相同工艺顺序号的工位的装配件
//平行工位
if (isFilterParallel) {
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && (StringUtils.isEmpty(o.getProcessSeq()) ||
o.getProcessSeq().compareTo(optional.get().getProcessSeq()) != 0 || o.getWorkCellCode().equals(prodRuleContext.getWorkCellCode())))).collect(Collectors.toList());
//返回涉及到的平行工位代码集合
List<String> parallelCellCodeList = checkIsExistParallelCellCode(workOrderAssemblyList, prodRuleContext.getWorkCellCode(), processSeq);
if (!CollectionUtils.isEmpty(parallelCellCodeList)) {
prodRuleContext.setParallelInfo(String.format("{%s:%s}", MesPcnExtConstWords.WORK_CELL_CODE, JSONObject.toJSONString(parallelCellCodeList)));
//剔除平行工位的装配件
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o && (StringUtils.isEmpty(o.getProcessSeq())
|| StringUtils.isEmpty(o.getWorkCellCode()) || !parallelCellCodeList.contains(o.getWorkCellCode())))).collect(Collectors.toList());
}
}
if (CollectionUtils.isEmpty(workOrderAssemblyList)) return workOrderAssemblyList;
//根据工序顺序号过滤后道
if (isFilterAfterCraft) {
if (isFilterAfterCraft && !StringUtils.isEmpty(processSeq)) {
workOrderAssemblyList = workOrderAssemblyList.stream().filter(o -> (null != o &&
(StringUtils.isEmpty(o.getProcessSeq()) || o.getProcessSeq().compareTo(optional.get().getProcessSeq()) <= 0))).collect(Collectors.toList());
(StringUtils.isEmpty(o.getProcessSeq()) || o.getProcessSeq().compareTo(processSeq) <= 0))).collect(Collectors.toList());
}
return workOrderAssemblyList;
}
//获取当前工位的第一个装配件的工艺顺序号
private Integer getProcessSeq(List<MesWorkOrderAssembly> workOrderAssemblyList, String workCellCode) {
Optional<MesWorkOrderAssembly> optional = workOrderAssemblyList.stream().filter(o -> (null != o && workCellCode.equals(o.getWorkCellCode()) && !StringUtils.isEmpty(o.getProcessSeq()))).findFirst();
return (null != optional && optional.isPresent()) ? optional.get().getProcessSeq() : null;
}
//返回涉及到的平行工位代码集合
private List<String> checkIsExistParallelCellCode(List<MesWorkOrderAssembly> workOrderAssemblyList, String workCellCode, Integer processSeq) {
//根据工艺顺序号分组
Map<String, List<MesWorkOrderAssembly>> processSeqMap = CollectionUtils.isEmpty(workOrderAssemblyList) ? null :
workOrderAssemblyList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getWorkCellCode()) &&
!StringUtils.isEmpty(o.getProcessSeq()) && !StringUtils.isEmpty(o.getCraftCode())))
.collect(Collectors.groupingBy(o -> new StringJoiner(MesPcnExtConstWords.AND).add(o.getCraftCode()).add(o.getProcessSeq().toString()).toString()));
if (CollectionUtils.isEmpty(processSeqMap)) return null;
List<String> parallelCellCodeList = null;
for (Map.Entry<String, List<MesWorkOrderAssembly>> entry : processSeqMap.entrySet()) {
if (null == entry) continue;
//搜集工位代码集合再去重
List<String> workCellCodeList = (entry.getValue().stream().filter(o -> null != o).map(MesWorkOrderAssembly::getWorkCellCode)
.collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
if (CollectionUtils.isEmpty(workCellCodeList) || workCellCodeList.size() == 1) continue;
//判断是否是当前工位的平行工位
if (!workCellCodeList.contains(workCellCode)) {
//存在processSeq则表示需要过滤后道, 判断当前循环的工艺顺序号是否属于后道
if (!StringUtils.isEmpty(processSeq)) {
List<Integer> processSeqList = (entry.getValue().stream().filter(o -> null != o).map(MesWorkOrderAssembly::getProcessSeq)
.collect(Collectors.toList())).stream().filter(o -> !StringUtils.isEmpty(o)).distinct().collect(Collectors.toList());
//工艺顺序号升序
processSeqList.sort(Comparator.naturalOrder());
if (processSeqList.get(0).compareTo(processSeq) > 0) continue;
}
//工艺顺序号升序
workCellCodeList.sort(Comparator.naturalOrder());
workCellCodeList.remove(0);
} else {
//当前工位
workCellCodeList.remove(workCellCode);
}
if (CollectionUtils.isEmpty(parallelCellCodeList)) parallelCellCodeList = new ArrayList<>();
parallelCellCodeList.addAll(workCellCodeList);
}
return parallelCellCodeList;
}
//获取装配件绑定记录【排序】
@Override
public List<MesProductionAssembly> getProductionAssemblySortList(String organizeCode, String productSn) {

@ -12,7 +12,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesProdRuleNosortCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.repository.MesProdRuleNoSortCfgRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -23,7 +22,6 @@ import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.StringJoiner;
@Slf4j
@Service
@ -131,10 +129,10 @@ public class MesProdRuleCfgExtService implements IMesProdRuleCfgExtService {
return prodRuleContext;
}
//【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) -同时- 关联不可用规则
//【排序线】获取产品加工规则(条码对应的装配件绑定记录,目前条码等同工单) -同时- 关联不可用规则; 判断是否剔除平行工位
@Override
public MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, prodRuleIgnoreCfgMap));
public MesProdRuleContext getProdRuleSortContext(MesProdRuleContext prodRuleContext, Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Boolean isFilterParallel) {
return prodRuleContext.assemblyDataJson(assemblyExtService.getProductionAssemblySortContextList(prodRuleContext, prodRuleIgnoreCfgMap, isFilterParallel));
}
//【排序线】获取产品加工规则 [前道所有装配件] -同时- 关联不可用规则; 判断是否剔除平行工位 ; 判断是否根据工序顺序号过滤后道

@ -210,7 +210,7 @@ public class MesShippingLoadingCheckService implements IMesShippingLoadingCheckS
//根据扫描的装车单找到是否先装车配置
//若配置为否,则查询装车单中所有的发运单是否都进行【排序发运校验】完成,若【排序发运校验】没完成,则提示,先进行排序发运校验。
if (Objects.equals(loadingList.getIsFirstInstall(), MesCommonConstant.FALSE_INTEGER)) {
if (!Objects.equals(shippingGroup.getIsFirstInstall(), MesCommonConstant.TRUE_INTEGER)) {
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(loadingListDetail.getShippingId(),"id",packBean);
MesShippingOrderManagement orderManagement = shippingOrderManagementRepository.getByProperty(packBean);

@ -136,17 +136,18 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
@Override
public MesSortShippingCheckModel doShippingOrderNoQuery(MesShippingOrderManagement shippingOrderManagement) {
//返回数据组装
MesSortShippingCheckModel model = new MesSortShippingCheckModel();
//校验发运单
MesShippingOrderManagement orderManagement = getMesShippingOrderManagement(shippingOrderManagement);
if(Objects.isNull(orderManagement)){
return null;
model.setMsg(String.format("发运单【%s】已跳过请扫描下一个发运单",shippingOrderManagement.getShippingCode()));
return model;
}
//校验发运单扫描顺序
checkShippingOrderSeq(shippingOrderManagement, orderManagement);
//根据扫描的发运单找到是否装车配置,若是,则根据发运单查询是否生成装车单,若没生成装车单则提示此发运单配置是否装车为是,但没生成装车单,请检查数据!
checkLoadingList(shippingOrderManagement, orderManagement);
//返回数据组装
MesSortShippingCheckModel model = new MesSortShippingCheckModel();
if (!StringUtils.isEmpty(orderManagement.getCheckSeqCode())) {
model.setIsScanLocationCode(true);
}
@ -759,7 +760,7 @@ public class MesSortShippingCheckService implements IMesSortShippingCheckService
shippingList.addAll(mesJisShippings);
}
}
} else {
} else if (Objects.equals(shippingGroup.getIsFirstInstall(), CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValue())){
//查询装车单明细
DdlPackBean orderManagementPackBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(orderManagement.getLoadingListId(),"pid",orderManagementPackBean);

@ -17,7 +17,6 @@ import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroup;
import cn.estsh.i3plus.pojo.mes.bean.MesPartShippingGroupDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesProduceSn;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkOrder;
import cn.estsh.i3plus.pojo.mes.bean.edi.cd.MesCimVolvoJisRackIdDetail;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesCustSortInfo;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagement;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingOrderManagementDetail;
@ -46,7 +45,7 @@ import java.util.stream.Stream;
**/
@Service
@Slf4j
public class mesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements IMesShippingScanStrategyService {
public class MesShippingCheckVolvoRackNoAndPartNoStrategyServiceImpl implements IMesShippingScanStrategyService {
@Autowired
private MesShippingOrderManagementRepository shippingOrderManagementRepository;
@Autowired

@ -44,7 +44,7 @@ import java.util.stream.Stream;
**/
@Service
@Slf4j
public class mesShippingScanOrderStrategyServiceImpl implements IMesShippingScanStrategyService {
public class MesShippingScanOrderStrategyServiceImpl implements IMesShippingScanStrategyService {
@Autowired
private MesShippingOrderManagementRepository shippingOrderManagementRepository;
@Autowired

@ -8,9 +8,11 @@ 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.convert.ConvertBean;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.codemaker.SnowflakeIdMaker;
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.MesProductionAssembly;
import cn.estsh.i3plus.pojo.mes.bean.MesProductionAssemblyUnique;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -20,6 +22,7 @@ import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesProductionAssemblyUniqueRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesWorkOrderAssemblyRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@ -184,6 +187,47 @@ public class MesAssemblySaveSortStepService extends BaseStepService {
}
//删除平行工位的装配件
public void deleteSortWorkOrderAssembly(StationRequestBean reqBean, MesProdRuleContext prodRuleContext) {
if (StringUtils.isEmpty(prodRuleContext.getParallelInfo())) return;
Map<String, Object> parallelInfoMap = JSONObject.parseObject(prodRuleContext.getParallelInfo(), Map.class);
DdlPackBean packBean = DdlPackBean.getDdlPackBean(reqBean.getOrganizeCode());
DdlPreparedPack.getStringEqualPack(prodRuleContext.getWorkOrderNo(), MesPcnExtConstWords.WORK_ORDER_NO, packBean);
DdlPreparedPack.getStringEqualPack(prodRuleContext.getProductSn(), MesPcnExtConstWords.PRODUCT_SN, packBean);
DdlPreparedPack.getStringEqualPack(reqBean.getWorkCenterCode(), MesPcnExtConstWords.WORK_CENTER_CODE, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue(), MesPcnExtConstWords.ASSEMBLY_STATUS, packBean);
if (parallelInfoMap.containsKey(MesPcnExtConstWords.WORK_CELL_CODE)) {
List<String> workCellCodeList = (List<String>) parallelInfoMap.get(MesPcnExtConstWords.WORK_CELL_CODE);
if (workCellCodeList.size() == 1) DdlPreparedPack.getStringEqualPack(workCellCodeList.get(0), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
else DdlPreparedPack.getInPackList(workCellCodeList, MesPcnExtConstWords.WORK_CELL_CODE, packBean);
} else {
Integer processSeq = (Integer) parallelInfoMap.get(MesPcnExtConstWords.PROCESS_SEQ);
DdlPreparedPack.getStringEqualPack(prodRuleContext.getCraftCode(), MesPcnExtConstWords.CRAFT_CODE, packBean);
DdlPreparedPack.getNumEqualPack(processSeq, MesPcnExtConstWords.PROCESS_SEQ, packBean);
DdlPreparedPack.getNumNOEqualPack(prodRuleContext.getWorkCellCode(), MesPcnExtConstWords.WORK_CELL_CODE, packBean);
}
int count = workOrderAssemblyRepository.updateByPropertiesNoSync(
new String[]{MesPcnExtConstWords.MODIFY_USER, MesPcnExtConstWords.MODIFY_DATE_TIME, MesPcnExtConstWords.SYSTEM_SYNC_STATUS,
MesPcnExtConstWords.SYSTEM_SYNC_DATE_TIME, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.REMARK},
new Object[]{reqBean.getUserInfo(), TimeTool.getNowTime(true), CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(),
MesPcnExtConstWords.EMPTY, CommonEnumUtil.IS_VAILD.INVAILD.getValue(), String.format("平行工位[%s]标记无效!", reqBean.getWorkCellCode())},
packBean);
this.sendMessage(reqBean, new StationResultBean().writeDbLog(), String.format("加工单[%s]在工位[%s]标记平行工位的装配件条数[%s]",
prodRuleContext.getWorkOrderNo(), reqBean.getWorkCellCode(), count), MesPcnEnumUtil.STATION_BUSI_TYPE.RUNNING_INFO, MesPcnEnumUtil.STATION_DATA_TYPE.TEXT);
}
//删除平行工位的装配件
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -222,4 +266,5 @@ public class MesAssemblySaveSortStepService extends BaseStepService {
return stepResult;
}
}

@ -14,7 +14,6 @@ import cn.estsh.i3plus.pojo.mes.model.StationResultBean;
import cn.estsh.i3plus.pojo.mes.model.StepResult;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.util.StringUtils;
import java.util.List;
import java.util.Map;
@ -34,13 +33,11 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
}
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext,
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
Map<String, MesWorkCell> workCellMap = productionProcessContextStepService.dispatchWorkCellMap(reqBean);
MesProdRuleContext prodRuleContext = new MesProdRuleContext(reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode())
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//是否剔除平行工位[工步参数]
String isFilterParallel = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.IS_FILTER_PARALLEL)) ? stepParamMap.get().get(MesPcnExtConstWords.IS_FILTER_PARALLEL).getParamValue() : null;
//是否根据工序顺序号过滤后道[工步参数]
@ -54,9 +51,4 @@ public class MesAssemblyShowSortPreCraftStepService extends MesAssemblyShowSortS
return showProductionAssembly(reqBean, resultBean, workCenter, prodRuleContextList, true, false);
}
//判断配置设置是否过滤数据的标志
private Boolean isFilterCfg(String isFilterCfg) {
return StringUtils.isEmpty(isFilterCfg) ? false : true;
}
}

@ -10,6 +10,7 @@ import cn.estsh.i3plus.mes.pcn.serviceimpl.fsm.BaseStepService;
import cn.estsh.i3plus.mes.pcn.util.PojoAttrUtil;
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.MesProdRuleIgnoreCfg;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCell;
import cn.estsh.i3plus.pojo.mes.bean.MesWorkCenter;
@ -118,11 +119,14 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
//获取装配件信息(子类进行重写)
public MesProdRuleContext getProdRuleSortContext(StationRequestBean reqBean, MesProductionProcessContext productionProcessContext, MesCellEquipContext cellEquipContext, MesProductionPsInContext productionPsInContext,
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap) {
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap, Optional<Map<String, MesProdRouteOptParam>> stepParamMap) {
MesProdRuleContext prodRuleContext = new MesProdRuleContext(
reqBean.getOrganizeCode(), reqBean.getWorkCenterCode(), reqBean.getWorkCellCode(), reqBean.getProcessCode(), productionProcessContext.getCraftCode()).isCheckBindSeq(getIsCheckBindSeq(productionProcessContext.getWorkCell()))
.equipmentCode(cellEquipContext.getEquipmentCode()).workOrderNo(productionPsInContext.getWorkOrderNo()).productSn(productionPsInContext.getProductSn()).foreignKey(productionPsInContext.getForeignKey());
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext, prodRuleIgnoreCfgMap);
//是否剔除平行工位[工步参数]
String isFilterParallel = (null != stepParamMap && stepParamMap.isPresent() && stepParamMap.get().containsKey(MesPcnExtConstWords.IS_FILTER_PARALLEL)) ? stepParamMap.get().get(MesPcnExtConstWords.IS_FILTER_PARALLEL).getParamValue() : null;
return prodRuleCfgExtService.getProdRuleSortContext(prodRuleContext, prodRuleIgnoreCfgMap, isFilterCfg(isFilterParallel));
}
//判断是否按序扫描
@ -157,6 +161,9 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
List<MesProdRuleContext> prodRuleContextList, List<MesProductionPartContext> productionPartContextList,
List<MesProductionPsInContext> productionPsInContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
//获取工步参数
Optional<Map<String, MesProdRouteOptParam>> stepParamMap = getStepParams(reqBean);
//获取加工不可用规则
Map<String, List<MesProdRuleIgnoreCfg>> prodRuleIgnoreCfgMap = productionProcessContextStepService.getProdRuleIgnoreCfgContextMap(reqBean, productionProcessContext);
@ -174,7 +181,13 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
productionPsOutContextList.stream().filter(o -> (null != o && o.getWorkOrderNo().equals(productionPsInContext.getWorkOrderNo()))).findFirst().get().foreignKey(productionPsInContext.getForeignKey());
//获取装配件信息
prodRuleContextList.add(getProdRuleSortContext(reqBean, productionProcessContext, cellEquipContext, productionPsInContext, prodRuleIgnoreCfgMap));
MesProdRuleContext prodRuleContext = getProdRuleSortContext(reqBean, productionProcessContext, cellEquipContext, productionPsInContext, prodRuleIgnoreCfgMap, stepParamMap);
prodRuleContextList.add(prodRuleContext);
//标记平行工位数据为无效
if (!StringUtils.isEmpty(prodRuleContext.getParallelInfo())) {
((MesAssemblySaveSortStepService) SpringContextsUtil.getBean("mesAssemblySaveSortStepService")).deleteSortWorkOrderAssembly(reqBean, prodRuleContext);
}
}
@ -275,9 +288,10 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
}
//封装装配件信息
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblyContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) {
private MesAssemblyShowContext assemblyShowContext(MesProductionAssemblySortContext productionAssemblyContext, Boolean isNeedShowMatchRule, String topRowInfo) {
MesAssemblyShowContext assemblyShowContext = new MesAssemblyShowContext();
BeanUtils.copyProperties(productionAssemblyContext, assemblyShowContext);
overrideAssemblyPartName(productionAssemblyContext, assemblyShowContext);
if (isNeedShowMatchRule) assemblyShowContext.setMatchTypeName(showMatchRule(assemblyShowContext));
assemblyShowContext.setAssemblyStatusName(MesExtEnumUtil.ASSEMBLY_STATUS.valueOfDescription(assemblyShowContext.getAssemblyStatus()));
if (MesExtEnumUtil.ASSEMBLY_STATUS.ASSEMBLY_STATUS_30.getValue() != assemblyShowContext.getAssemblyStatus())
@ -288,9 +302,23 @@ public class MesAssemblyShowSortStepService extends BaseStepService {
return assemblyShowContext;
}
//显示规则
private MesAssemblyShowContext overrideAssemblyPartName(MesProductionAssemblySortContext productionAssemblyContext, MesAssemblyShowContext assemblyShowContext) {
if (StringUtils.isEmpty(productionAssemblyContext.getDisplayRule())) return assemblyShowContext;
if (productionAssemblyContext.getDisplayRule().compareTo(MesExtEnumUtil.DISPLAY_RULE.DISPLAY_RULE_10.getValue()) == 0) return assemblyShowContext;
if (productionAssemblyContext.getDisplayRule().compareTo(MesExtEnumUtil.DISPLAY_RULE.DISPLAY_RULE_20.getValue()) == 0) return assemblyShowContext.assemblyPartName(productionAssemblyContext.getActionName());
if (StringUtils.isEmpty(productionAssemblyContext.getActionName())) return assemblyShowContext;
return assemblyShowContext.assemblyPartName(assemblyShowContext.getAssemblyPartName() + MesPcnExtConstWords.SQUARE_BRACKETS_L + productionAssemblyContext.getActionName() + MesPcnExtConstWords.SQUARE_BRACKETS_R);
}
private String showMatchRule(MesAssemblyShowContext assemblyShowContext) {
if (!MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.checkIsNeedShowMatchRule(assemblyShowContext.getMatchType())) return MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfDescription(assemblyShowContext.getMatchType());
return MesExtEnumUtil.ASSEMBLY_MATCH_TYPE.valueOfDescription(assemblyShowContext.getMatchType()) + "【" + assemblyShowContext.getMatchRule() + "】";
}
//判断配置设置是否过滤数据的标志
public Boolean isFilterCfg(String isFilterCfg) {
return StringUtils.isEmpty(isFilterCfg) ? false : true;
}
}

@ -2,6 +2,7 @@ package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.step;
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.actor.shipping.dispatch.IFsmCommonService;
import cn.estsh.i3plus.mes.pcn.util.StationKvBeanUtil;
import cn.estsh.i3plus.platform.common.tool.TimeTool;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
@ -13,6 +14,7 @@ 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;
@ -29,6 +31,9 @@ import java.util.stream.Collectors;
@Service("mesWorkOrderCheckSortStepService")
public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepService {
@Autowired
private IFsmCommonService fsmCommonService;
@Override
public StepResult execute(StationRequestBean reqBean) {
@ -175,6 +180,8 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
private StepResult checkWorkOrderValid(StationRequestBean reqBean, StationResultBean resultBean, StepResult stepResult, MesProductionProcessContext productionProcessContext,
List<MesEquipVariableCollectContext> equipVariableCollectContextList, List<MesProductionPartContext> productionPartContextList,
List<MesProductionPsInContext> productionPsInContextList, List<MesProductionPsOutContext> productionPsOutContextList) {
//是否支持扫描完成状态的工单[工位参数]
String cfg = getAllowScanCompleteOrderCfg(reqBean);
//从上下文中取出生产线与工位对象
MesWorkCenter workCenter = productionProcessContext.getWorkCenter();
@ -200,7 +207,9 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return stepResult.isCompleted(false).msg((String) itemMap.get(MesPcnExtConstWords.MESSAGE));
MesWorkOrder workOrder = (MesWorkOrder) itemMap.get(MesWorkOrder.class.getSimpleName());
if (!MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
if (StringUtils.isEmpty(cfg) && !MesExtEnumUtil.ORDER_STATUS.checkAllowStatus(workCenter.getCenterType(), workOrder.getWorkOrderStatus()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
if (!StringUtils.isEmpty(cfg) && !MesExtEnumUtil.ORDER_STATUS.checkNosortAllowStatus(workOrder.getWorkOrderStatus()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息工单状态[%s]!", workOrderNo, MesExtEnumUtil.ORDER_STATUS.valueOfDescription(workOrder.getWorkOrderStatus())));
if (!workOrder.getWorkCenterCode().equals(reqBean.getWorkCenterCode()))
return stepResult.isCompleted(false).msg(String.format("请检查工单信息,加工单[%s]信息所属生产线[%s]与当前生产线[%s]不一致!", workOrderNo, workOrder.getWorkCenterCode(), reqBean.getWorkCenterCode()));
@ -291,4 +300,10 @@ public class MesWorkOrderCheckSortStepService extends MesWorkOrderCheckStepServi
return true;
}
//是否支持扫描完成状态的工单[工位参数]
private String getAllowScanCompleteOrderCfg(StationRequestBean reqBean) {
String cfg = fsmCommonService.handleFsmWcpcMapDataForDoScan(reqBean).get(MesPcnExtConstWords.ALLOW_SCAN_COMPLETE_ORDER_CFG);
return (!StringUtils.isEmpty(cfg) && cfg.equals(CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr())) ? cfg : null;
}
}

@ -111,22 +111,23 @@ public class MesWorkOrderSaveSortStepService extends BaseStepService {
propertyMap.put(MesPcnExtConstWords.QC_STATUS, Integer.valueOf(productResult));
}
//末工位 或者 非加工中
if (isEndWorkCell || productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) != 0) {
if (!isEndWorkCell) {
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
propertyMap.put(MesPcnExtConstWords.START_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.ONLINE_TIME, productionPartContext.getOnlineTime());
} else {
productionPartContext.setOfflineTime(TimeTool.getNowTime(true));
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
propertyMap.put(MesPcnExtConstWords.START_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.ONLINE_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.END_TIME, productionPartContext.getOfflineTime());
propertyMap.put(MesPcnExtConstWords.OFFLINE_TIME, productionPartContext.getOfflineTime());
propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, new Double(1));
propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, new Double(0));
}
//加工中
if (!isEndWorkCell && productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) < 0) {
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue());
propertyMap.put(MesPcnExtConstWords.START_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.ONLINE_TIME, productionPartContext.getOnlineTime());
}
//末工位
if (isEndWorkCell && productionPartContext.getWorkOrderStatus().compareTo(MesExtEnumUtil.ORDER_STATUS.PROCESS.getValue()) <= 0) {
productionPartContext.setOfflineTime(TimeTool.getNowTime(true));
propertyMap.put(MesPcnExtConstWords.WORK_ORDER_STATUS, MesExtEnumUtil.ORDER_STATUS.COMPLETE.getValue());
propertyMap.put(MesPcnExtConstWords.START_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.ONLINE_TIME, productionPartContext.getOnlineTime());
propertyMap.put(MesPcnExtConstWords.END_TIME, productionPartContext.getOfflineTime());
propertyMap.put(MesPcnExtConstWords.OFFLINE_TIME, productionPartContext.getOfflineTime());
propertyMap.put(MesPcnExtConstWords.COMPLETE_QTY, new Double(1));
propertyMap.put(MesPcnExtConstWords.UN_COMPLETE_QTY, new Double(0));
}
//当存在修改字段的情况下进行修改工单信息

@ -78,4 +78,8 @@ public class MesAssemblyShowContext implements Serializable {
return this;
}
public MesAssemblyShowContext assemblyPartName(String assemblyPartName) {
this.assemblyPartName = assemblyPartName;
return this;
}
}

@ -113,6 +113,10 @@ public class MesProdRuleContext implements Serializable {
@ApiParam(name = "产成零件号")
private String outPartNos;
//显示前道所有装配件工步写的工位代码对应值的JSON信息, 显示装配件工步写的工艺顺序号对应值的JSON信息
@ApiParam(name = "平行 工位/工艺顺序号")
private String parallelInfo;
public MesProdRuleContext() {}
public MesProdRuleContext(String organizeCode) {

@ -500,6 +500,8 @@ public class MesPcnExtConstWords {
public static final String MANY_CELL_TRIGGER_JUMP_PROCESS_PWD = "MANY_CELL_TRIGGER_JUMP_PROCESS_PWD";
// 非排序顺序防错级别配置[工位参数] 1=物料 否则=生产线
public static final String CHECK_PRODUCT_SEQ_CFG = "CHECK_PRODUCT_SEQ_CFG";
// 排序线当前工位是否允许扫描完成状态的工单(用于末道拍照工位)
public static final String ALLOW_SCAN_COMPLETE_ORDER_CFG = "ALLOW_SCAN_COMPLETE_ORDER_CFG";
// 工位/工步 参数按钮事件
public static final String FUNCTION_CMD = "FUNCTION_CMD";

Loading…
Cancel
Save