rev:生产调度相关

This commit is contained in:
zhangzhiqiang
2023-05-24 09:42:52 +08:00
parent db5c1de411
commit 1ce759c718
17 changed files with 232 additions and 95 deletions

View File

@@ -89,7 +89,8 @@ public class AcsToWmsController {
@ApiOperation("向wms反馈设备状态")
@SaIgnore
public ResponseEntity<Object> feedDeviceStatusType(@RequestBody JSONObject param) {
return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(param), HttpStatus.OK);
return null;
// return new ResponseEntity<>(acsToWmsService.feedDeviceStatusType(param), HttpStatus.OK);
}

View File

@@ -22,6 +22,8 @@ import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.service.TaskService;
import org.nl.wms.product_manage.sch.service.dto.TaskDto;
import org.nl.wms.product_manage.sch.tasks.WashMachineryTask;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Lazy;
import org.springframework.http.HttpStatus;
@@ -47,6 +49,8 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
private TaskService taskService;
@Autowired
private CacheLineHandService cacheLineHandService;
@Autowired
private IPdmProduceWorkorderService workorderService;
@@ -203,17 +207,12 @@ public class AcsToWmsServiceImpl implements AcsToWmsService{
public Map<String, Object> orderStatus(JSONObject orderJson) {
JSONObject result = new JSONObject();
try {
JSONObject map = new JSONObject();
map.put("workorder_id", orderJson.getString("workorder_id"));
map.put("workorder_status", orderJson.getString("status"));
map.put("update_id", "1");
map.put("real_qty", orderJson.getString("real_qty"));
map.put("device_code", "");
map.put("update_name", "acs");
map.put("update_time", DateUtil.now());
map.put("realproduceend_date", DateUtil.now());
WQLObject.getWQLObject("PDM_produce_workOrder").update(map, "workorder_id = '" + orderJson.getString("workorder_id") + "'");
//OptionRecord.record(OptionRecord.OptionEnum.UPDATEOP, OptionRecord.Buss.WORKORDER,orderJson.getString("workorder_id"),MapOf.of("workorder_status", orderJson.getString("status")));
PdmProduceWorkorder workorder = new PdmProduceWorkorder();
workorder.setWorkorder_id(orderJson.getString("workorder_id"));
workorder.setWorkorder_status(orderJson.getString("status"));
workorder.setDq_real_qty(orderJson.getBigDecimal("real_qty"));
workorder.setRealproduceend_date(DateUtil.now());
workorderService.updateById(workorder);
} catch (Exception e){
result.put("status", 400);
result.put("message", e.getMessage());

View File

@@ -52,7 +52,11 @@ public class AgvInstService {
@Autowired
private ISchCachelineVehicleService cachelineVehicleService;
public static void main(String[] args) {
String a= "A1_DC_15_6";
int i = a.lastIndexOf("_");
System.out.println(a.substring(0, i));
}
//满料请求点位确认
//1.判断当前设备路由表是否配置下一道路由设备,如果不是则说明直接到清洗
@@ -81,11 +85,14 @@ public class AgvInstService {
if (next.getParams().get("cacheLine") == null){
throw new BadRequestException("当前任务下一道工序无可用设备");
}
nextPoint = next.getParams().get("cacheLine");
nextPoint = getParamByXml(workprodure, next, nextPoint);
cacheVehile = getCacheVehile(nextPoint, null);
}
if (StringUtils.isBlank(nextPoint)){
throw new BadRequestException("逻辑非配错误,请检查代码");
结果校验:{
if (StringUtils.isBlank(nextPoint)) {
throw new BadRequestException("逻辑非配错误,请检查代码");
}
}
basePointService.update(new UpdateWrapper<SchBasePoint>()
.set("lock_type",StatusEnum.LOCK_ON.getCode()).set("task_id",task.getString("task_id")).eq("point_code",nextPoint));
@@ -96,7 +103,20 @@ public class AgvInstService {
schBaseTask.setTask_status(StatusEnum.TASK_START_END_P.getCode());
schBaseTask.setUpdate_time(new Date());
taskService.updateById(schBaseTask);
};
}
private String getParamByXml(Map<String, String> workprodure, FlowElement next, String nextPoint) {
Object cacheLine = next.getParams().get("cacheLine");
if (cacheLine instanceof String){
nextPoint = (String) cacheLine;
}
if (cacheLine instanceof Map){
nextPoint = ((Map<String, String>) cacheLine).get(workprodure.get("device_code").substring(0, workprodure.get("device_code").lastIndexOf("_")));
}
return nextPoint;
}
;
public FlowElement getFlowElement(JSONObject task,Map<String,String> workprodure){
if (CollectionUtils.isEmpty(workprodure)){
@@ -126,7 +146,7 @@ public class AgvInstService {
//3.agv根据对应载具列表行进扫码匹配匹配到对应物料则创建点对点任务
public void empMatter(JSONObject task){
//参数
String targetDevice = task.getString("next_point_code");
String targetDevice = task.getString("point_code2");
String material_id = task.getString("material_id");
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
.eq("point_code", targetDevice)
@@ -157,12 +177,14 @@ public class AgvInstService {
}
public String getCacheVehile(String cacheLine,String materialId){
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
if (vehicle.size()>0){
if (vehicle.size()>count){
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
if (StringUtils.isNotEmpty(cacheLine)){
int count = taskService.count(new QueryWrapper<SchBaseTask>().eq("point_code2", cacheLine).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
String status = StringUtils.isBlank(materialId) ? StatusEnum.CACHE_VEL_EMT.getCode() : StatusEnum.CACHE_VEL_FULL.getCode();
List<SchCachelineVehicle> vehicle = cachelineVehicleService.getCachelineVehicle(MapOf.of("vehicle_status", status, "material_id", materialId));
if (vehicle.size()>0){
if (vehicle.size()>count){
return vehicle.stream().map(SchCachelineVehicle::getVehicle_code).collect(Collectors.joining(","));
}
}
}
return "";

View File

@@ -72,7 +72,7 @@
WHERE d.is_delete = 0
ORDER BY
device_code
LIMIT 10
LIMIT 200
ENDSELECT
ENDQUERY
ENDIF

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
@@ -18,11 +19,17 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.impl.AgvInstService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -31,7 +38,10 @@ import java.util.Map;
@Slf4j
@Service
public class SpeEmpTask extends AbstractAcsTask {
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
AgvInstService agvInstService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
@@ -62,28 +72,33 @@ public class SpeEmpTask extends AbstractAcsTask {
@Override
@Transactional
public String createTask(JSONObject param) {
//{"workorder_code":230523019,"device_code":"A1_TW_15_6_D","type":"1"}
String point_code = param.getString("device_code");
String quantity = param.getString("quantity");
String type = param.getString("type");
JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0);
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(chectIndDatabase)){
Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code")));
PdmProduceWorkorder one = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.lt("workorder_status", StatusEnum.TASK_FINISH.getCode()));
Assert.notNull(one, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code2", point_code).lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code")));
}
JSONObject form = new JSONObject(MapOf.of("start_point_code","",
"next_point_code",point_code,"return_point_code", "","vehicle_code",
"","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id")));
"","product_area",one.getProduct_area(),"quantity", quantity,"type",type,"material_id", one.getMaterial_id()));
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = packageParam(form, taskId);
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
taskService.save(task.toJavaObject(SchBaseTask.class));
try {
pointConfirm(task);
//下发
}catch (Exception ex){
log.error("SpeEmpTask#点位确认异常:{}",ex.getMessage());
task.put("task_status", TaskStatusEnum.SURE_START_ERROR.getCode());
task.put("remark",ex.getMessage());
WQLObject.getWQLObject("sch_base_task").update(task);

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
@@ -19,11 +20,17 @@ import org.nl.modules.wql.core.bean.WQLObject;
import org.nl.wms.ext.acs.service.impl.AgvInstService;
import org.nl.wms.product_manage.sch.manage.AbstractAcsTask;
import org.nl.wms.product_manage.sch.manage.TaskStatusEnum;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.scheduler_manage.service.task.ISchBaseTaskService;
import org.nl.wms.scheduler_manage.service.task.dao.SchBaseTask;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
@@ -32,11 +39,15 @@ import java.util.Map;
@Slf4j
@Service
public class SpeFullTask extends AbstractAcsTask {
@Autowired
private IPdmProduceWorkorderService workorderService;
@Autowired
private ISchBaseTaskService taskService;
@Autowired
AgvInstService agvInstService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
private static String OPT_NAME = "ACS回调# ";
public SpeFullTask() {
@@ -63,25 +74,29 @@ public class SpeFullTask extends AbstractAcsTask {
@Override
@Transactional
public String createTask(JSONObject param) {
//{"quantity":5,"workorder_code":230523019,"device_code":"A1_TW_15_6_M","type":"2"}
String point_code = param.getString("device_code");
String quantity = param.getString("quantity");
String type = param.getString("type");
JSONObject order = WQLObject.getWQLObject("PDM_produce_workOrder").query("workorder_code = '" + param.getString("workorder_code") + "' and is_delete = 0 and workorder_status != "+StatusEnum.TASK_FINISH.getCode()).uniqueResult(0);
PdmProduceWorkorder order = workorderService.getOne(new QueryWrapper<PdmProduceWorkorder>()
.eq("workorder_code", param.getString("workorder_code"))
.eq("is_delete", false)
.lt("workorder_status", StatusEnum.TASK_FINISH.getCode()));
Assert.notNull(order, String.format("下发工单%s不存在未完成工单", param.getString("workorder_code")));
JSONArray chectIndDatabase = WQLObject.getWQLObject("SCH_BASE_Task").query((AcsTaskEnum.REQUEST_CALLTYPE_FULL.getCode().equals(type) ? "point_code1" : "point_code2") + "= '" + point_code + "' and task_status < " + StatusEnum.TASK_FINISH.getCode()).getResultJSONArray(0);
if (ObjectUtil.isNotEmpty(chectIndDatabase)){
Assert.notNull(order, String.format("设备%s存在未完成任务", param.getString("point_code")));
List<SchBaseTask> list = taskService.list(new QueryWrapper<SchBaseTask>()
.eq("point_code1", point_code).lt("task_status", StatusEnum.TASK_FINISH.getCode())
);
if (!CollectionUtils.isEmpty(list)){
throw new BadRequestException(String.format("设备%s存在未完成任务", param.getString("device_code")));
}
JSONObject empPoint = WQL.getWO("sch_point").addParamMap(MapOf.of("flag", "2", "point_code", point_code, "point_type", StatusEnum.POINT_LOCATION_EMP.getCode())).process().uniqueResult(0);
JSONObject form = new JSONObject(MapOf.of("start_point_code",point_code,
"next_point_code","","return_point_code", empPoint.getString("point_code"),"vehicle_code",
"","product_area",order.getString("product_area"),"quantity", quantity,"type",type,"material_id", order.getString("material_id")));
"","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getProduct_area()));
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = packageParam(form, taskId);
WQLObject.getWQLObject("SCH_BASE_Task").insert(task);
taskService.save(task.toJavaObject(SchBaseTask.class));
try {
pointConfirm(task);
//下发

View File

@@ -11,7 +11,7 @@
WHERE
device.is_delete = '0'
<if test="workprocedure_id != null and workprocedure_id != ''">
device.workprocedure_id = #{workprocedure_id}
and device.workprocedure_id = #{workprocedure_id}
</if>
and device.device_code not in (
select o.device_code as device_code

View File

@@ -14,6 +14,7 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import io.jsonwebtoken.lang.Assert;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.NotNull;
import org.nl.common.TableDataInfo;
@@ -63,6 +64,7 @@ import java.util.stream.Collectors;
* @since 2023-04-26
*/
@Service
@Slf4j
public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorkorderMapper, PdmProduceWorkorder> implements IPdmProduceWorkorderService {
@Autowired
private IMdPbClassstandardService classstandardService;
@@ -179,9 +181,9 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
String workorder_id = param.getJSONObject("row").getString("workorder_id");
this.update(new UpdateWrapper<PdmProduceWorkorder>()
.set("workorder_status", WorkerOrderEnum.FORCE_COMPLETE.getCode())
.set("update_id", SecurityUtils.getCurrentUserId())
.set("update_name", SecurityUtils.getCurrentNickName())
.set("update_time", new Date())
.set("confirm_id", SecurityUtils.getCurrentUserId())
.set("confirm_name", SecurityUtils.getCurrentNickName())
.set("confirm_time", new Date())
.in("workorder_id", workorder_id));
JSONArray array = new JSONArray();
JSONObject map = new JSONObject();
@@ -190,7 +192,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
array.add(map);
Map<String, Object> result = wmsToAcsService.orderStatusUpdate(array);
if (!HttpStatus.OK.equals(result.get("status"))) {
throw new BadRequestException((String) result.get("message"));
log.error((String) result.get("message"));
}
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, workorder_id);
}
@@ -525,8 +527,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
if (((int) resp.get("status")) == (HttpStatus.BAD_REQUEST.value())) {
throw new BadRequestException(String.valueOf(resp.get("message")));
}
workOrder.setReal_qty(null);
this.update(workOrder, new QueryWrapper<PdmProduceWorkorder>().eq("workorder_id", param.getString("workorder_id")));
this.recordWorkOrder(OptionRecord.OptionEnum.UPDATE, result.getWorkorder_id());
return RestBusinessTemplate.execute(() -> resp);
}

View File

@@ -9,7 +9,7 @@
FROM
sch_cacheline_vehilematerial v
LEFT JOIN sch_cacheline_position p ON p.vehicle_code = v.vehicle_code
WHERE p.vehicle_code <> '' and
WHERE p.vehicle_code <![CDATA[<>]]> '' and
v.vehicle_status = #{vehicle_status}
<if test="material_id != null and material_id != ''">
v.material_id = #{material_id}

View File

@@ -91,7 +91,7 @@
</select>
<select id="getDeviceWorkprodure" resultType="java.util.Map">
select
r.workprocedure_code,r.workprocedure_id from pdm_bi_device dev
r.workprocedure_code,r.workprocedure_id,p.device_code from pdm_bi_device dev
LEFT join sch_base_point p on p.device_code = dev.device_code
LEFT JOIN pdm_bi_workprocedure r on dev.workprocedure_id = r.workprocedure_id
where p.point_code = #{pointCode};

View File

@@ -4,6 +4,7 @@ import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import javax.xml.stream.XMLStreamConstants;
@@ -19,6 +20,9 @@ import java.util.Map;
*/
@Service("flow")
public class FlowConverter implements BaseConverter {
@Autowired
ParamConverter paramConverter;
String[] labels = new String[]{"id","name","sourceRef","targetRef"};
@Override
@SneakyThrows
@@ -35,8 +39,8 @@ public class FlowConverter implements BaseConverter {
break;
}
if (XMLStreamConstants.START_ELEMENT == xtr.next()){
System.out.println(xtr.getLocalName());
element.getParams().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value"));
ParamElement process = (ParamElement)paramConverter.process(xtr);
element.getParams().put(process.getId(),process.getValue());
i++;
}
}

View File

@@ -17,7 +17,7 @@ public class FlowElement extends BaseElement {
private FlowElement targetRef;
private String sourceRefId;
private String targetRefId;
private Map<String,String> params = new HashMap<>();
private Map<String,Object> params = new HashMap<>();
@@ -55,11 +55,11 @@ public class FlowElement extends BaseElement {
this.targetRefId = targetRefId;
}
public Map<String, String> getParams() {
public Map<String, Object> getParams() {
return params;
}
public void setParams(Map<String, String> params) {
public void setParams(Map<String, Object> params) {
this.params = params;
}
}

View File

@@ -0,0 +1,42 @@
package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl;
import lombok.SneakyThrows;
import org.apache.commons.lang3.StringUtils;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseConverter;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import org.springframework.stereotype.Service;
import javax.xml.stream.XMLStreamConstants;
import javax.xml.stream.XMLStreamReader;
/*
* @author ZZQ
* @Date 2023/5/19 11:00
*/
@Service("param")
public class ParamConverter implements BaseConverter {
String[] labels = new String[]{"id","value"};
@Override
@SneakyThrows
public BaseElement process(XMLStreamReader xtr) {
ParamElement element = new ParamElement();
setBaseLabel(element,xtr,labels);
element.setValue(xtr.getAttributeValue(null,"value"));
String has = xtr.getAttributeValue(null, "has");
if (StringUtils.isNotEmpty(has)){
int i = 0;
while (true){
if (i == Integer.valueOf(has)){
break;
}
if (XMLStreamConstants.START_ELEMENT == xtr.next()){
element.getItem().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value"));
i++;
}
}
element.setValue(element.getItem());
}
return element;
}
}

View File

@@ -0,0 +1,18 @@
package org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl;
import lombok.Data;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.BaseElement;
import java.util.HashMap;
import java.util.Map;
/*
* @author ZZQ
* @Date 2023/5/21 18:03
*/
@Data
public class ParamElement extends BaseElement {
private Object value;
private Map<String,String> item = new HashMap<>();
}

View File

@@ -1,22 +1,22 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions>
<process id="JGXJ" name="机关下料">
<start id="start" name="Starter" targetRef="A1_JGXJ"></start>
<flow id="A1_JGXJ" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
<param id="cacheLine" value="A1_HCX_01"/>
<process id="JGXL" name="机关下料">
<start id="start" name="Starter" targetRef="A1_JGXL"></start>
<flow id="A1_JGXL" name="机关下料工序" has="1" sourceRef="start" targetRef="A1_TWYTJ">
<param id="cacheLine" has="2">
<item key="A1_JGXL_15" value="A1_HCX_01"></item>
<item key="A1_JGXL_22" value="A1_HCX_02"></item>
</param>
</flow>
<flow id="A1_TWYTJ" name="推弯工序" has="1" sourceRef="A1_JGXJ" targetRef="A1_SKQX">
<param id="cacheLine" value="A1_HCX_01"/>
<flow id="A1_TWYTJ" name="推弯一体工序" sourceRef="A1_JGXJ" targetRef="A1_SKQX">
</flow>
<flow id="A1_SKQX" name="深坑清洗" sourceRef="A1_TWYTJ" targetRef="end"></flow>
<end id="end" name="Junior Reject End" sourceRef="A1_SKQX"></end>
</process>
<process id="WXXL" name="直管无屑下料">
<start id="start" name="Starter" targetRef="A1_WXXL"></start>
<flow id="A1_WXXL" name="无屑下料工序" has="3" sourceRef="starter" targetRef="A1_STLS">
<param id="param1" value="param1"/>
<param id="param2" value="param2"/>
<param id="param3" value="param3"/>
<flow id="A1_WXXL" name="无屑下料工序" has="1" sourceRef="starter" targetRef="A1_STLS">
<param id="cacheLine" value="A1_HCX_03"/>
</flow>
<flow id="A1_STLS" name="三通拉伸工序" sourceRef="A1_WXXL" targetRef="A1_TK"></flow>
<flow id="A1_TK" name="镗孔" sourceRef="A1_TK" targetRef="end"></flow>