容器扣减匹配装配件站点工步

mes-uat-changshu0609-temp-wj-250616-xisu
王杰 4 weeks ago
parent 9bc0945a11
commit a6a28ab4fb

@ -131,6 +131,10 @@ public interface IMesProductionCustomContextStepService {
@ApiOperation(value = "根据noCalcOrderQty判断维度处理处理工单完成数上下文[保存]")
MesWorkOrderCompleteQtyContext dispatchWorkOrderCompleteQtyContext(StationRequestBean reqBean, Boolean noCalcOrderQty, String workOrderNo, Double calcCompleteQty);
@ApiOperation(value = "可扣减条码的缓存key")
String getContainerSnAtomicityKey(String organizeCode, MesContainerPackageDetailContext context);
@ApiOperation(value = "将可扣减的条码通过原子性的方式写到缓存, 并获取最新的实际库存")
void dispatchContainerSnAtomicity(String organizeCode, List<MesContainerPackageDetailContext> containerSnStationList);
}

@ -5,6 +5,7 @@ import cn.estsh.i3plus.ext.mes.pcn.pojo.model.MesWorkOrderCutDetailModel;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -258,4 +259,16 @@ public interface IMesProductionDispatchContextStepService {
@ApiOperation(value = "保存上下文推单队列信息")
Boolean dispatchSortQueuePushContext(StationRequestBean reqBean, List<MesQueueOrderPush> queueOrderPushList);
@ApiOperation(value = "获取弹框输入的工单数量")
Double getOrderQtyDialogContext(StationRequestBean reqBean);
@ApiOperation(value = "保存弹框输入的工单数量")
void dispatchOrderQtyDialogContext(StationRequestBean reqBean, String orderQty);
@ApiOperation(value = "获取站点用于缺料时进行上料绑定")
List<MesStation> getMatchStationContext(StationRequestBean reqBean);
@ApiOperation(value = "保存站点用于缺料时进行上料绑定")
void dispatchMatchStationContext(StationRequestBean reqBean, List<MesStation> stationList);
}

@ -0,0 +1,14 @@
package cn.estsh.i3plus.ext.mes.pcn.api.busi;
import cn.estsh.i3plus.pojo.mes.bean.MesConfig;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import io.swagger.annotations.ApiOperation;
import java.util.List;
public interface IMesStationContainSnExtService {
@ApiOperation(value = "根据设备代码查询站点信息")
List<MesStation> getStationList(String organizeCode, String equipmentCode);
}

@ -0,0 +1,160 @@
package cn.estsh.i3plus.ext.mes.pcn.apiservice.serviceimpl.busi;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesStationContainerSnExtService;
import cn.estsh.i3plus.ext.mes.pcn.pojo.context.MesContainerPackageDetailContext;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.base.bean.DdlPackBean;
import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.base.tool.DdlPreparedPack;
import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackage;
import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackageDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesContainerSnStation;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import cn.estsh.i3plus.pojo.mes.repository.MesContainerPackageDetailRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesContainerPackageRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesContainerSnStationRepository;
import cn.estsh.i3plus.pojo.mes.repository.MesStationRepository;
import cn.estsh.i3plus.pojo.mes.util.MesExtEnumUtil;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import org.springframework.util.StringUtils;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
*
*/
@Service
public class MesStationContainerSnExtService implements IMesStationContainerSnExtService {
@Autowired
private MesStationRepository stationRepository;
@Autowired
private MesContainerSnStationRepository containerSnStationRepository;
@Autowired
private MesContainerPackageRepository containerPackageRepository;
@Autowired
private MesContainerPackageDetailRepository containerPackageDetailRepository;
//根据设备代码查询站点信息
@Override
public List<MesStation> getStationList(String organizeCode, String equipmentCode) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(equipmentCode)) return null;
return stationRepository.findByProperty(
new String[]{MesPcnExtConstWords.ORGANIZE_CODE, MesPcnExtConstWords.IS_DELETED, MesPcnExtConstWords.IS_VALID, MesPcnExtConstWords.EQUIPMENT_CODE},
new Object[]{organizeCode, CommonEnumUtil.TRUE_OR_FALSE.FALSE.getValue(), CommonEnumUtil.IS_VAILD.VAILD.getValue(), equipmentCode});
}
//获取站点关联的容器条码
@Override
public Map<String, List<MesContainerSnStation>> getContainerSnStationMap(String organizeCode, List<MesStation> stationList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(stationList)) return null;
List<MesContainerSnStation> containerSnStationList = getContainerSnStationList(organizeCode, stationList);
return CollectionUtils.isEmpty(containerSnStationList) ? null :
containerSnStationList.stream().filter(o -> null != o).collect(Collectors.groupingBy(MesContainerSnStation::getContainerSn));
}
//获取站点关联的容器条码
@Override
public List<MesContainerSnStation> getContainerSnStationList(String organizeCode, List<MesStation> stationList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(stationList)) return null;
List<String> stations = stationList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getStation()))).map(MesStation::getStation).collect(Collectors.toList());
return getContainerSnStationListByStation(organizeCode, stations);
}
//获取站点关联的容器条码
@Override
public List<MesContainerSnStation> getContainerSnStationListByStation(String organizeCode, List<String> stationList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(stationList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (stationList.size() == 1) DdlPreparedPack.getStringEqualPack(stationList.get(0), MesPcnExtConstWords.STATION, packBean);
else DdlPreparedPack.getInPackList(stationList, MesPcnExtConstWords.STATION, packBean);
return containerSnStationRepository.findByHqlWhere(packBean);
}
//获取容器条码上料明细表信息【可扣减】【根据 主表seq,主表createDatetime,明细表createDatetime 正序】
@Override
@Transactional(propagation = Propagation.NOT_SUPPORTED)
public List<MesContainerPackageDetailContext> getContainerSnStationContext(String organizeCode, List<MesStation> stationList) {
//获取站点关联的容器条码, key = containerSn
Map<String, List<MesContainerSnStation>> containerSnStationMap = getContainerSnStationMap(organizeCode, stationList);
if (CollectionUtils.isEmpty(containerSnStationMap)) return null;
//获取容器条码上料主表信息【已关箱】
List<MesContainerPackage> containerPackageList = getContainerPackageListByContainerSn(organizeCode,
new ArrayList<>(containerSnStationMap.keySet()), MesExtEnumUtil.CONTAINER_PACKAGE_STATUS.STATUS_20.getValue());
if (CollectionUtils.isEmpty(containerPackageList)) return null;
//获取容器条码上料明细表信息
List<MesContainerPackageDetail> containerPackageDetailList = getContainerPackageDetailList(organizeCode, containerPackageList);
if (CollectionUtils.isEmpty(containerPackageDetailList)) return null;
//封装容器条码对应的【可扣减】的上料明细表信息
List<MesContainerPackageDetailContext> containerSnStationContextList = new ArrayList<>();
for (MesContainerPackageDetail containerPackageDetail : containerPackageDetailList) {
if (null == containerPackageDetail) continue;
MesContainerSnStation containerSnStation = containerSnStationMap.get(containerPackageDetail.getContainerSn()).get(0);
containerSnStationContextList.add(new MesContainerPackageDetailContext(containerPackageDetail).station(containerSnStation));
}
//根据 主表seq,主表createDatetime,明细表createDatetime 正序
containerSnStationContextList = containerSnStationContextList.stream().filter(o -> null != o).sorted(Comparator.comparing(MesContainerPackageDetailContext::getSeq)
.thenComparing(MesContainerPackageDetailContext::getCreateDatetime2Package).thenComparing(MesContainerPackageDetailContext::getCreateDatetime)).collect(Collectors.toList());
return containerSnStationContextList;
}
//获取容器条码上料主表信息
@Override
public List<MesContainerPackage> getContainerPackageList(String organizeCode, List<MesContainerSnStation> containerSnStationList, Integer packageStatus) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(containerSnStationList)) return null;
List<String> containerSnList = containerSnStationList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getContainerSn()))).map(MesContainerSnStation::getContainerSn).collect(Collectors.toList());
return getContainerPackageListByContainerSn(organizeCode, containerSnList, packageStatus);
}
//获取容器条码上料主表信息
@Override
public List<MesContainerPackage> getContainerPackageListByContainerSn(String organizeCode, List<String> containerSnList, Integer packageStatus) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(containerSnList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (containerSnList.size() == 1) DdlPreparedPack.getStringEqualPack(containerSnList.get(0), MesPcnExtConstWords.CONTAINER_SN, packBean);
else DdlPreparedPack.getInPackList(containerSnList, MesPcnExtConstWords.STATION, packBean);
DdlPreparedPack.getNumEqualPack(packageStatus, MesPcnExtConstWords.PACKAGE_STATUS, packBean);
return containerPackageRepository.findByHqlWhere(packBean);
}
//获取容器条码上料明细表信息【可扣减】
@Override
public List<MesContainerPackageDetail> getContainerPackageDetailList(String organizeCode, List<MesContainerPackage> containerPackageList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(containerPackageList)) return null;
List<Long> idList = containerPackageList.stream().filter(o -> null != o).map(MesContainerPackage::getId).collect(Collectors.toList());
return getContainerPackageDetailListById(organizeCode, idList);
}
//获取容器条码上料明细表信息【可扣减】
@Override
public List<MesContainerPackageDetail> getContainerPackageDetailListById(String organizeCode, List<Long> idList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(idList)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
if (idList.size() == 1) DdlPreparedPack.getNumEqualPack(idList.get(0), MesPcnExtConstWords.PID, packBean);
else DdlPreparedPack.getInPackList(idList, MesPcnExtConstWords.PID, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.CONTAINER_BARCODE_STATUS.STATUS_10.getValue(), MesPcnExtConstWords.SN_STATUS, packBean);
return containerPackageDetailRepository.findByHqlWhere(packBean);
}
//获取容器条码的一条上料明细表信息【可扣减】
@Override
public Boolean checkIsExistContainerPackageDetail(String organizeCode, Long id) {
if (StringUtils.isEmpty(organizeCode) || StringUtils.isEmpty(id)) return null;
DdlPackBean packBean = DdlPackBean.getDdlPackBean(organizeCode);
DdlPreparedPack.getNumEqualPack(id, MesPcnExtConstWords.PID, packBean);
DdlPreparedPack.getNumEqualPack(MesExtEnumUtil.CONTAINER_BARCODE_STATUS.STATUS_10.getValue(), MesPcnExtConstWords.SN_STATUS, packBean);
return containerPackageDetailRepository.isExitByHql(packBean);
}
}

@ -20,7 +20,7 @@ import org.springframework.util.StringUtils;
**/
@Slf4j
@Service("mesContainerSnScanStepService")
public class MesContainerSnScanStepService extends BaseStepService {
public class MesContainerMatchStationAssemblyStepService extends BaseStepService {
@Autowired
private IMesProductionProcessContextStepService productionProcessContextStepService;

@ -396,4 +396,26 @@ public class MesProductionCustomContextStepService extends BaseStepService imple
return workOrderCompleteQtyContext;
}
@Override
public String getContainerSnAtomicityKey(String organizeCode, MesContainerPackageDetailContext context) {
return new StringJoiner(MesPcnExtConstWords.COLON)
.add(organizeCode)
.add(MesPcnExtConstWords.CONTAINER_SN_REMAIN_CONTEXT)
.add(context.getStation())
.add(new StringJoiner(MesPcnExtConstWords.AND).add(context.getContainerSn()).add(context.getId().toString()).toString())
.toString();
}
//将可扣减的条码通过原子性的方式写到缓存, 并获取最新的实际库存
@Override
public void dispatchContainerSnAtomicity(String organizeCode, List<MesContainerPackageDetailContext> containerSnStationList) {
if (StringUtils.isEmpty(organizeCode) || CollectionUtils.isEmpty(containerSnStationList)) return;
containerSnStationList.stream().forEach(o -> {
String key = getContainerSnAtomicityKey(organizeCode, o);
Boolean success = dispatchFsmBusiDataAtomicity(organizeCode, key, o.getQty().toString(), MesPcnEnumUtil.EXPIRE_TIME.DEFAULT.getValue());
if (success) o.remainQty(o.getQty());
else o.remainQty(getFsmBusiData(organizeCode, key));
});
}
}

@ -9,6 +9,7 @@ import cn.estsh.i3plus.pojo.base.enumutil.CommonEnumUtil;
import cn.estsh.i3plus.pojo.mes.bean.MesPart;
import cn.estsh.i3plus.pojo.mes.bean.MesQueueOrderPush;
import cn.estsh.i3plus.pojo.mes.bean.MesRawPartCharging;
import cn.estsh.i3plus.pojo.mes.bean.MesStation;
import cn.estsh.i3plus.pojo.mes.bean.shipping.MesShippingQueue;
import cn.estsh.i3plus.pojo.mes.model.StationKvBean;
import cn.estsh.i3plus.pojo.mes.model.StationRequestBean;
@ -588,4 +589,31 @@ public class MesProductionDispatchContextStepService extends BaseStepService imp
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.QUEUE_PUSH_CONTEXT, JSONObject.toJSONString(queueOrderPushList));
}
//获取弹框输入的工单数量
@Override
public Double getOrderQtyDialogContext(StationRequestBean reqBean) {
String orderQty = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ORDER_QTY_DIALOG_CONTEXT);
return StringUtils.isEmpty(orderQty) ? new Double(0) : new Double(orderQty);
}
//获取弹框输入的工单数量
@Override
public void dispatchOrderQtyDialogContext(StationRequestBean reqBean, String orderQty) {
dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.ORDER_QTY_DIALOG_CONTEXT, orderQty);
}
//获取站点用于缺料时进行上料绑定
@Override
public List<MesStation> getMatchStationContext(StationRequestBean reqBean) {
String stationContext = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_CONTEXT);
return StringUtils.isEmpty(stationContext) ? null : JSONObject.parseArray(stationContext, MesStation.class);
}
//保存站点用于缺料时进行上料绑定
@Override
public void dispatchMatchStationContext(StationRequestBean reqBean, List<MesStation> stationList) {
if (CollectionUtils.isEmpty(stationList)) return;
dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.MATCH_STATION_CONTEXT, JSONObject.toJSONString(stationList));
}
}

@ -4,6 +4,7 @@ import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesEquipmentExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.base.IMesProdOrgExtService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesProductionProcessContextStepService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesQueueOrderPushService;
import cn.estsh.i3plus.ext.mes.pcn.api.busi.IMesStationContainerSnExtService;
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.IFsmRouteDataService;
@ -55,6 +56,9 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
@Autowired
private SnowflakeIdMaker snowflakeIdMaker;
@Autowired
private IMesStationContainerSnExtService stationContainerSnExtService;
private String getContextKey(StationRequestBean reqBean) {
return getFsmBusikey(reqBean, new StringJoiner(MesPcnExtConstWords.COLON).add(MesPcnExtConstWords.PRODUCTION_PROCESS_CONTEXT).add(MesPcnExtConstWords.BASE_DATA_CONTEXT).toString());
}
@ -687,4 +691,22 @@ public class MesProductionProcessContextStepService extends BaseStepService impl
return dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.CHOOSE_SHIPPING_RFID_ROUTE_MODE, CommonEnumUtil.TRUE_OR_FALSE.TRUE.getValueStr());
}
//处理设备站点
@Override
public List<MesStation> dispatchEquipmentStationContext(StationRequestBean reqBean, String equipmentCode) {
String station = getFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.EQUIPMENT_STATION_CONTEXT);
if (!StringUtils.isEmpty(station)) return JSONObject.parseArray(station, MesStation.class);
List<MesStation> stationList = stationContainerSnExtService.getStationList(reqBean.getOrganizeCode(), equipmentCode);
if (!CollectionUtils.isEmpty(stationList)) dispatchFsmBusiData(reqBean.getOrganizeCode(), getContextKey(reqBean), MesPcnExtConstWords.EQUIPMENT_STATION_CONTEXT, JSONObject.toJSONString(stationList));
return stationList;
}
//处理设备站点
@Override
public List<MesStation> dispatchEquipmentStationContext(StationRequestBean reqBean, String equipmentCode, List<Integer> stationTypeList) {
List<MesStation> stationList = dispatchEquipmentStationContext(reqBean, equipmentCode);
return CollectionUtils.isEmpty(stationList) ? null :
stationList.stream().filter(o -> (null != o && !StringUtils.isEmpty(o.getStationType()) && stationTypeList.contains(o.getStationType()))).collect(Collectors.toList());
}
}

@ -0,0 +1,55 @@
package cn.estsh.i3plus.ext.mes.pcn.pojo.context;
import cn.estsh.i3plus.ext.mes.pcn.pojo.util.MesPcnExtConstWords;
import cn.estsh.i3plus.pojo.mes.bean.MesContainerPackageDetail;
import cn.estsh.i3plus.pojo.mes.bean.MesContainerSnStation;
import io.swagger.annotations.ApiParam;
import lombok.Data;
import org.springframework.beans.BeanUtils;
import org.springframework.util.StringUtils;
import java.io.Serializable;
/**
* -
*/
@Data
public class MesContainerPackageDetailContext extends MesContainerPackageDetail implements Serializable {
private static final long serialVersionUID = 3519172978836073435L;
@ApiParam(name = "站点")
private String station;
@ApiParam("顺序号")
private Integer seq;
@ApiParam(value = "主表创建日期")
private String createDatetime2Package;
@ApiParam("库存")
private Double remainQty;
public MesContainerPackageDetailContext() {}
public MesContainerPackageDetailContext(MesContainerPackageDetail containerPackageDetail) {
BeanUtils.copyProperties(containerPackageDetail, this);
}
public MesContainerPackageDetailContext station(MesContainerSnStation containerSnStation) {
this.station = containerSnStation.getStation();
this.seq = !StringUtils.isEmpty(containerSnStation.getSeq()) ? containerSnStation.getSeq() : MesPcnExtConstWords.ZERO;
this.createDatetime2Package = containerSnStation.getCreateDatetime();
return this;
}
public MesContainerPackageDetailContext remainQty(String remainQty) {
return remainQty(!StringUtils.isEmpty(remainQty) ? new Double(remainQty) : new Double(MesPcnExtConstWords.ZERO));
}
public MesContainerPackageDetailContext remainQty(Double remainQty) {
this.remainQty = remainQty;
return this;
}
}

@ -127,6 +127,12 @@ public class MesProductionAssemblyContext implements Serializable {
@ApiParam("匹配时间")
public String matchDatetime;
@ApiParam(value = "工序用量")
public Double qty;
@ApiParam("容器匹配信息")
public String containerSnData;
public String repeatKeyToString() {
if (StringUtils.isEmpty(this.equipmentCode) || StringUtils.isEmpty(this.matchType) || (StringUtils.isEmpty(this.matchRule) && StringUtils.isEmpty(this.assemblyPartNo))) return null;
return String.format("%s:%s&%s:%s&%s:%s&%s:%s",

@ -33,9 +33,6 @@ public class MesProductionAssemblyNosortContext extends MesProductionAssemblyCon
@ApiParam(value = "是否忽略回车")
private Integer isIgnoreEntry;
@ApiParam(value = "工序用量")
private Double qty;
@ApiParam(name = "产成品图")
private String outPartNoPic;

@ -389,6 +389,12 @@ public class MesPcnExtConstWords {
public static final String ENUM_CODE = "enumCode";
//计划开始时间
public static final String PLAN_START_TIME = "planStartTime";
//站点名称
public static final String STATION = "station";
//容器条码
public static final String CONTAINER_SN = "containerSn";
//容器条码上料状态
public static final String PACKAGE_STATUS = "packageStatus";
//BaseBean字段不包含工厂, 用于对象复制剔除属性BeanUtils.copyProperties(Object source, Object target, String... ignoreProperties)
@ -685,6 +691,10 @@ public class MesPcnExtConstWords {
public static final String SHIPPING_RFID_ROUTE_MODE_CONTEXT = "SHIPPING_RFID_ROUTE_MODE_CONTEXT";
// 选择发运RFID生产模式
public static final String CHOOSE_SHIPPING_RFID_ROUTE_MODE = "CHOOSE_SHIPPING_RFID_ROUTE_MODE";
// 设备站点
public static final String EQUIPMENT_STATION_CONTEXT = "EQUIPMENT_STATION_CONTEXT";
// 容器条码扣减剩余上下文
public static final String CONTAINER_SN_REMAIN_CONTEXT = "CONTAINER_SN_REMAIN_CONTEXT";
// 上下文: 展示组件数据
public static final String MODULE_CONTENT_CONTEXT = "MODULE_CONTENT_CONTEXT";
@ -730,6 +740,10 @@ public class MesPcnExtConstWords {
public static final String PROD_TEMP_DATA_CONTEXT = "PROD_TEMP_DATA_CONTEXT";
// 上下文: 发运队列
public static final String SHIPPING_QUEUE_CONTEXT = "SHIPPING_QUEUE_CONTEXT";
// 上下文: 获取弹框输入的工单数量
public static final String ORDER_QTY_DIALOG_CONTEXT = "ORDER_QTY_DIALOG_CONTEXT";
// 用于缺料时进行上料绑定的站点
public static final String MATCH_STATION_CONTEXT = "MATCH_STATION_CONTEXT";
//OPC_API_PARAM

Loading…
Cancel
Save