rev:生产调度修改

This commit is contained in:
zhangzhiqiang
2023-05-25 10:32:38 +08:00
parent 84ecbf0b83
commit b8da36f71b
28 changed files with 341 additions and 201 deletions

View File

@@ -51,6 +51,8 @@ public class AgvInstService {
private ISchBaseTaskService taskService;
@Autowired
private ISchCachelineVehicleService cachelineVehicleService;
@Autowired
private ISchCachelineVehicleService cachelineVe3hicleService;
public static void main(String[] args) {
String a= "A1_DC_15_6";
@@ -67,18 +69,19 @@ public class AgvInstService {
public void fullMaster(JSONObject task){
String quantity = task.getString("material_qty");
//获取当前生产工序下一道工序
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code"));
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(task.getString("point_code1"));
FlowElement next = getFlowElement(task,workprodure).next();
String nextPoint = null;
//判断缓存线是不是去深坑清洗深坑区域15个点判断空的物料坑位
String cacheVehile = "";
Map query = MapOf.of("workprocedure_id", workprodure.get("workprocedure_id")
Map query = MapOf.of("workprocedure_id", basePointService.getWorkprodureByCode(next.getId()).get("workprocedure_id")
, "qty", quantity);
//判断缓存线是不是去深坑清洗深坑区域15个点判断空的物料坑位
if (next.getName().equals("深坑清洗")){
query.put("material_id",task.getString("material_id"));
}
List<Map<String,String>> list = deviceService.workproceduceDevices(query);
String nextPoint = null;
String cacheVehile = "";
if (!CollectionUtils.isEmpty(list)){
nextPoint = list.get(0).get("point_code");
}else {
@@ -129,7 +132,7 @@ public class AgvInstService {
.eq("is_delete", "0")
.eq("is_used", "1")
);
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(material_id,devicePoint.getRegion_code());
SchProcessRoute processRoute = schProcessRouteService.findByMaterialId(devicePoint.getRegion_code());
if (processRoute == null){
throw new BadRequestException("当前没有配置对应工序调度线路:"+material_id+"/"+devicePoint.getRegion_code());
}
@@ -146,25 +149,16 @@ public class AgvInstService {
//3.agv根据对应载具列表行进扫码匹配匹配到对应物料则创建点对点任务
public void empMatter(JSONObject task){
//参数
String targetDevice = task.getString("point_code2");
String material_id = task.getString("material_id");
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
.eq("point_code", targetDevice)
.eq("is_delete", "0")
.eq("is_used", "1"));
JSONObject cacheLine = WQLObject.getWQLObject("SCH_cacheLine_region_relation").query("region_code = '"+devicePoint.getRegion_code()+"' and is_active = '"+StatusEnum.STATUS_TRUE.getCode()+"'").uniqueResult(0);
Assert.notNull(cacheLine, String.format("区域%s对应缓存线信息不存在", devicePoint.getRegion_code()));
//缓存线位置编码 :缺料请求获取缓存线满载具列表
String startPoint = cacheLine.getString("cacheline_code");
String cacheVehile = getCacheVehile(startPoint, material_id);
String startPoint = task.getString("cacheLine");
String cacheVehile = getCacheVehile(startPoint, task.getString("material_id"));
if (StringUtils.isBlank(cacheVehile)) {
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+material_id+"对应可用载具");
throw new BadRequestException("缓存线:"+startPoint+"没有物料"+task.getString("material_id")+"对应可用载具");
}
//判断当前物料载具已经任务分配数量:如果>物料已经分配任务。说明满了,不允许再分配
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", material_id).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
List<SchBaseTask> allocateTask = taskService.list(new QueryWrapper<SchBaseTask>().eq("point_code1", startPoint).eq("material_id", task.getString("material_id")).lt("task_status", StatusEnum.TASK_FINISH.getCode()));
if (allocateTask.size()>=cacheVehile.split(",").length){
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完任务id:{}",startPoint,material_id,allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,material_id));
log.error("callMatter 缓存线:{}上含有物料:{}的载具分配完任务id:{}",startPoint,task.getString("material_id"),allocateTask.stream().map(SchBaseTask::getTask_id).collect(Collectors.joining(",")));
throw new BadRequestException(String.format("缓存线%s上含物料%s的载具已分配完",startPoint,task.getString("material_id")));
}
SchBaseTask schBaseTask = task.toJavaObject(SchBaseTask.class);
schBaseTask.setVehicle_code(cacheVehile);

View File

@@ -8,6 +8,7 @@ import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.utils.api.ResultCode;
import org.nl.modules.common.exception.BizCoreException;
@@ -246,7 +247,7 @@ public class CacheLineHandController {
public ResponseEntity<Object> check(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
cacheLineHandService.check(param);
return new ResponseEntity<>(HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/checkEnd")
@@ -255,7 +256,7 @@ public class CacheLineHandController {
public ResponseEntity<Object> checkEnd(@RequestBody JSONObject param) {
log.info("海亮缓存线手持服务 [盘点] 接口被请求, 请求参数-{}", param);
cacheLineHandService.check(param);
return new ResponseEntity<>(HttpStatus.OK);
return new ResponseEntity<>(TableDataInfo.build(),HttpStatus.OK);
}
@PostMapping("/agvInBoxExceptionQuery")

View File

@@ -671,7 +671,6 @@ public class CacheLineHandServiceImpl implements CacheLineHandService {
//载具编码
String vehicle_code = param.getString("vehicle_code");
//缓存线位置编码
String position_code = param.getString("position_code");
// 封装给acs的数据
JSONArray jsonArray = new JSONArray();
JSONObject jsonObject = new JSONObject();

View File

@@ -1,15 +1,20 @@
package org.nl.wms.product_manage.controller.device;
import cn.dev33.satoken.annotation.SaIgnore;
import cn.hutool.core.date.DateUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.TableDataInfo;
import org.nl.common.anno.Log;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.product_manage.service.device.dto.DeviceQuery;
import org.nl.wms.product_manage.备份pdm.service.DeviceService;
import org.nl.wms.product_manage.备份pdm.service.dto.DeviceDto;
import org.springframework.beans.factory.annotation.Autowired;
@@ -19,6 +24,7 @@ import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Map;
/**
@@ -38,9 +44,19 @@ public class PdmBiDeviceController {
@GetMapping
@Log("查询生产设备")
@ApiOperation("查询生产设备")
//@PreAuthorize("@el.check('device:list')")
public ResponseEntity<Object> query(@RequestParam Map whereJson, Pageable page){
return new ResponseEntity<>(deviceService.queryAll(whereJson,page),HttpStatus.OK);
@SaIgnore
public ResponseEntity<Object> query(DeviceQuery query, PageQuery page){
Page<PdmBiDevice> result = iDeviceService.page(page.build(PdmBiDevice.class), query.build());
return new ResponseEntity<>(TableDataInfo.build(result),HttpStatus.OK);
}
@GetMapping("/list")
@Log("查询生产设备列表")
@ApiOperation("查询生产设备列表")
@SaIgnore
public ResponseEntity<Object> queryList(DeviceQuery query){
List<Map<String, Object>> list = iDeviceService.listMaps(query.build().select("device_code", "device_name"));
return new ResponseEntity<>(TableDataInfo.build(list),HttpStatus.OK);
}
@PostMapping

View File

@@ -15,6 +15,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.wms.product_manage.service.device.IPdmBiDeviceService;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderService;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -145,6 +146,14 @@ public class PdmProduceWorkorderController {
return new ResponseEntity<>(HttpStatus.OK);
}
@GetMapping("/reportQuery")
@Log("报工查询")
@ApiOperation("报工查询")
public ResponseEntity<Object> reportQuery(ReportQuery query) {
return new ResponseEntity<>(TableDataInfo.build(iPdmProduceWorkorderService.reportQuery(query)),HttpStatus.OK);
}
}

View File

@@ -8,6 +8,8 @@ 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.apache.commons.lang3.StringUtils;
import org.jetbrains.annotations.Nullable;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
import org.nl.common.enums.StatusEnum;
@@ -21,6 +23,12 @@ 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.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
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;
@@ -43,14 +51,20 @@ public class SpeEmpTask extends AbstractAcsTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
AgvInstService agvInstService;
private AgvInstService agvInstService;
@Autowired
private ISchBasePointService basePointService;
@Autowired
private ISchCachelineVehilematerialService cacheLineVechileService;
@Autowired
private ISchProcessRouteService schProcessRouteService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
public SpeEmpTask() {
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe());
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache());
SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe());
}
@@ -73,27 +87,26 @@ public class SpeEmpTask extends AbstractAcsTask {
@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");
String cahceLine = getRouteXmlFlowByWorkprodure(param);
if (cahceLine == null) { return null; }
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())
.eq("point_code2", param.getString("device_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",one.getProduct_area(),"quantity", quantity,"type",type,"material_id", one.getMaterial_id()));
"next_point_code",param.getString("device_code"),"return_point_code", "","vehicle_code",
"","product_area",one.getProduct_area(),"quantity", param.getString("quantity"),"type",param.getString("type"),"material_id", one.getMaterial_id()));
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
JSONObject task = packageParam(form, taskId);
taskService.save(task.toJavaObject(SchBaseTask.class));
task.put("cacheLine",cahceLine);
try {
pointConfirm(task);
//下发
@@ -106,6 +119,35 @@ public class SpeEmpTask extends AbstractAcsTask {
return taskId;
}
@Nullable
private String getRouteXmlFlowByWorkprodure(JSONObject param) {
Map<String,String> workprodure = basePointService.findDeviceWorkprodure(param.getString("device_code"));
SchBasePoint devicePoint = basePointService.getOne(new QueryWrapper<SchBasePoint>()
.eq("point_code", param.getString("device_code"))
.eq("is_delete", "0")
.eq("is_used", "1")
);
FlowElement flowElement = schProcessRouteService.checkWorkprodure(workprodure.get("workprocedure_code"), devicePoint.getRegion_code());
if (flowElement == null){
log.error("SpeEmpTask#createTask 没有对应路由线路{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code());
throw new BadRequestException("缺料请求没有配置对应路由线路"+workprodure.get("workprocedure_code")+"——"+devicePoint.getRegion_code());
}
FlowElement pre = flowElement.pre();
if (pre == null || ObjectUtil.isEmpty(pre.getParams().get("cacheLine"))){
log.error("SpeEmpTask#createTask 没有配置缓存线{},{}",workprodure.get("workprocedure_code"),devicePoint.getRegion_code());
return null;
}
Object tmp_cahceLine = pre.getParams().get("cacheLine");
String cahceLine = null;
if (tmp_cahceLine instanceof String){
cahceLine = (String) tmp_cahceLine;
}
if (tmp_cahceLine instanceof Map){
cahceLine = ((Map<String, String>) tmp_cahceLine).get(workprodure.get("spec"));
}
return cahceLine;
}
private JSONObject packageParam(JSONObject form, String task_id) {
JSONObject task = new JSONObject();
参数封装:{
@@ -149,72 +191,6 @@ public class SpeEmpTask extends AbstractAcsTask {
interface SpeStatusHandler{
void handle(JSONObject param,String status,JSONObject task);
}
class Spe2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
//到专机:更新设备上料位物料数量
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
log.error(OPT_NAME+"未定义任务状态:{}",sta);
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Spe2Cache implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
String workprocedureCode = param.getString("workorder_code");
String inboxtxm = param.getString("inboxtxm");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"),
"material_id", task.getString("material_id"),
"vehicle_code", inboxtxm,
"vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(),
//工单,工序?
"workorder_code", workprocedureCode,
"create_time", DateUtil.now(),
"update_time", DateUtil.now()
//物料规格,物料名称 从物料信息表关联查询
));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Cache2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
@@ -223,12 +199,10 @@ public class SpeEmpTask extends AbstractAcsTask {
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");

View File

@@ -2,15 +2,14 @@ package org.nl.wms.product_manage.sch.tasks.SpeMachinery;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.lang.Assert;
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 com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.enums.AcsTaskEnum;
import org.nl.common.enums.InterfaceLogType;
import org.nl.common.enums.StatusEnum;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.MapOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.modules.common.exception.BadRequestException;
@@ -22,6 +21,10 @@ 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.cacheline.ISchCachelineVehilematerialService;
import org.nl.wms.scheduler_manage.service.cacheline.dao.SchCachelineVehilematerial;
import org.nl.wms.scheduler_manage.service.point.ISchBasePointService;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
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;
@@ -44,7 +47,11 @@ public class SpeFullTask extends AbstractAcsTask {
@Autowired
private ISchBaseTaskService taskService;
@Autowired
AgvInstService agvInstService;
private ISchBasePointService pointService;
@Autowired
private ISchCachelineVehilematerialService cacheLineVechileService;
@Autowired
private AgvInstService agvInstService;
private final Map<String,SpeStatusHandler > SpeHandles= new HashMap<>();
private static String OPT_NAME = "ACS回调# ";
@@ -53,16 +60,16 @@ public class SpeFullTask extends AbstractAcsTask {
public SpeFullTask() {
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_MAC.name() ,new Spe2Spe());
SpeHandles.put(AcsTaskEnum.TASK_PRODUCT_CACHE.name() ,new Spe2Cache());
SpeHandles.put(AcsTaskEnum.TASK_CACHELINE_OUT.name() ,new Cache2Spe());
}
@Override
@Transactional
public void updateTaskStatus(JSONObject param,String status) {
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
log.info(InterfaceLogType.ACS_TO_LMS.getDesc());
// 指令执行中
JSONObject task = taskTable.query("task_id = '" + param.getString("task_id") + "'").uniqueResult(0);
AcsTaskEnum taskType = AcsTaskEnum.getType(task.getString("task_type"),"TASK_");
SchBaseTask task = taskService.getById(param.getString("task_id"));
AcsTaskEnum taskType = AcsTaskEnum.getType(task.getTask_type(),"TASK_");
try {
SpeHandles.get(taskType.name()).handle(param,status,task);
}catch (Exception ex){
@@ -74,7 +81,6 @@ 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");
@@ -92,9 +98,9 @@ public class SpeFullTask extends AbstractAcsTask {
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.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getProduct_area()));
"","product_area",order.getProduct_area(),"quantity", quantity,"type",type,"material_id", order.getMaterial_id()));
String taskId = IdUtil.getSnowflake(1, 1).nextId() + "";
String taskId = IdUtil.getStringId();
JSONObject task = packageParam(form, taskId);
taskService.save(task.toJavaObject(SchBaseTask.class));
try {
@@ -149,29 +155,38 @@ public class SpeFullTask extends AbstractAcsTask {
}
interface SpeStatusHandler{
void handle(JSONObject param,String status,JSONObject task);
void handle(JSONObject param,String status,SchBaseTask task);
}
class Spe2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
public void handle(JSONObject param, String sta,SchBaseTask task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_RUNNING.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
Map<String, String> extParam = (Map)param.get("ext_param");
if (extParam.get("put_finish") != null){
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",task.getVehicle_code2())
.eq("point_code",task.getPoint_code3()));
}
if (extParam.get("take_finish") != null){
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code","")
.eq("point_code",task.getPoint_code3()));
pointService.update(new UpdateWrapper<SchBasePoint>()
.set("vehicle_code",task.getVehicle_code2())
.eq("point_code",task.getPoint_code1()));
}
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
//到专机:更新设备上料位物料数量
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
@@ -184,63 +199,36 @@ public class SpeFullTask extends AbstractAcsTask {
}
class Spe2Cache implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
public void handle(JSONObject param, String sta,SchBaseTask task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
String workprocedureCode = param.getString("workorder_code");
String inboxtxm = param.getString("inboxtxm");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
Map<String, String> extParam = (Map)param.get("ext_param");
UpdateWrapper<SchBaseTask> wrapper = new UpdateWrapper<SchBaseTask>()
.set("task_status", StatusEnum.TASK_RUNNING.getCode())
.set("update_name", "acs")
.set("update_time", DateUtil.now()).eq("task_id", task.getTask_id());
if (extParam.get("outboxt")!= null){ wrapper.set("vehicle_code2",extParam.get("outboxt")); }
taskService.update(wrapper);
if (extParam.get("inboxt") != null){
SchCachelineVehilematerial vehilematerial = new SchCachelineVehilematerial();
vehilematerial.setVehmaterial_id(IdUtil.getStringId());
vehilematerial.setVehicle_code(extParam.get("inboxt"));
vehilematerial.setMaterial_id(task.getMaterial_id());
vehilematerial.setErr_type("0");
vehilematerial.setCreate_time(DateUtil.now());
vehilematerial.setQuantity(task.getMaterial_qty());
cacheLineVechileService.save(vehilematerial);
}
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.insert(MapOf.of("quantity", task.getString("material_qty"),
"material_id", task.getString("material_id"),
"vehicle_code", inboxtxm,
"vehicle_status", StatusEnum.CACHE_VEL_FULL.getCode(),
//工单,工序?
"workorder_code", workprocedureCode,
"create_time", DateUtil.now(),
"update_time", DateUtil.now()
//物料规格,物料名称 从物料信息表关联查询
));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
break;
default:
throw new BadRequestException(OPT_NAME+"未定义任务状态:"+sta);
}
}
}
class Cache2Spe implements SpeStatusHandler{
@Override
public void handle(JSONObject param, String sta,JSONObject task) {
AcsTaskEnum status = AcsTaskEnum.getType(sta,"status_");
WQLObject taskTable = WQLObject.getWQLObject("sch_base_task");
WQLObject cacheVehTable = WQLObject.getWQLObject("sch_cacheline_vehilematerial");
WQLObject pointTable = WQLObject.getWQLObject("SCH_BASE_Point");
WQLObject deviceTable = WQLObject.getWQLObject("pdm_bi_device");
String outboxtxm = param.getString("outboxtxm");
switch (status){
case STATUS_START:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_RUNNING.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
cacheVehTable.delete("vehicle_code = '" + outboxtxm + "'");
break;
case STATUS_FINISH:
taskTable.update(MapOf.of("task_status",StatusEnum.TASK_FINISH.getCode(),"update_name","acs","update_time", DateUtil.now()),"task_id = '"+task.getString("task_id")+"'");
String point_code2 = task.getString("point_code2");
JSONObject pointInfo = pointTable.query("point_code = '" + point_code2 + "'").uniqueResult(0);
JSONObject device = deviceTable.query("device_code = '" + pointInfo.getString("device_code") + "'").uniqueResult(0);
task.getDouble("material_qty");
double currentQty = device.getDouble("deviceinstor_qty") + task.getDouble("material_qty");
deviceTable.update(MapOf.of("deviceinstor_qty", String.valueOf(currentQty)), "device_code = '" + pointInfo.getString("device_code") + "'");
taskService.update(new UpdateWrapper<SchBaseTask>()
.set("task_status",StatusEnum.TASK_FINISH.getCode())
.set("update_name","acs")
.set("update_time",DateUtil.now()).eq("task_id",task.getTask_id()));
break;
case STATUS_CANNEL:
cancel(param.getString("task_id"));
@@ -254,6 +242,5 @@ public class SpeFullTask extends AbstractAcsTask {
@Override
public void pointConfirm(JSONObject param) {
agvInstService.fullMaster(param);
}
}

View File

@@ -29,6 +29,11 @@ public class PdmBiDevice implements Serializable {
@TableId(value = "device_code")
private String device_code;
/**
* 设备系列TW_15/TW_22:25/22
*/
private String spec;
/**
* 设备名称
*/

View File

@@ -23,7 +23,7 @@
GROUP_CONCAT(sch_base_task.task_id),
pdm_bi_device.inupperlimit_qty - ifnull( sum( sch_base_task.material_qty ), 0 ) - pdm_bi_device.deviceinstor_qty AS currentQty,
pdm_bi_device.device_code,
sch_base_point.point_code,
sch_base_point.point_code
from sch_base_point
left join pdm_bi_device on pdm_bi_device.device_code = sch_base_point.device_code
left JOIN sch_base_task ON sch_base_point.point_code = point_code2 and '7' > task_status
@@ -31,7 +31,7 @@
sch_base_point.point_type = '4'
and workprocedure_id = #{workprocedure_id}
<if test="material_id != null and material_id != ''">
and pdm_bi_device.material_id = #{material_id}
and (pdm_bi_device.material_id = #{material_id} or pdm_bi_device.material_id is null )
</if>
GROUP BY pdm_bi_device.device_code
HAVING currentQty > #{qty}

View File

@@ -0,0 +1,29 @@
package org.nl.wms.product_manage.service.device.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.common.domain.query.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.product_manage.service.device.dao.PdmBiDevice;
import org.nl.wms.system_manage.service.dept.dao.SysDept;
import java.util.List;
/*
* @author ZZQ
* @Date 2022/12/15 4:20 下午
*/
@Data
public class DeviceQuery extends BaseQuery<PdmBiDevice> {
private String search;
private String workprocedure_id;
private String product_area;
@Override
public void paramMapping() {
super.doP.put("search", QParam.builder().k(new String[]{"device_code"}).type(QueryTEnum.LK).build());
}
}

View File

@@ -4,8 +4,8 @@ import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.common.domain.query.PageQuery;
import org.nl.common.utils.OptionRecord;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.springframework.web.multipart.MultipartFile;
@@ -115,4 +115,6 @@ public interface IPdmProduceWorkorderService extends IService<PdmProduceWorkorde
*/
void replaceDevice(JSONObject param);
List<Map> reportQuery(ReportQuery query);
}

View File

@@ -2,6 +2,10 @@ package org.nl.wms.product_manage.service.workorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -13,4 +17,5 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface IPdmProduceWorkorderrecordService extends IService<PdmProduceWorkorderrecord> {
List<Map> getWorkorderRecordDtl(ReportQuery query);
}

View File

@@ -220,6 +220,10 @@ public class PdmProduceWorkorder implements Serializable {
* 完工时间
*/
private String confirm_time;
/**
* 自增序号
*/
private Integer seq_number;
}

View File

@@ -1,7 +1,12 @@
package org.nl.wms.product_manage.service.workorder.dao.mapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import java.util.List;
import java.util.Map;
/**
* <p>
@@ -13,4 +18,5 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface PdmProduceWorkorderrecordMapper extends BaseMapper<PdmProduceWorkorderrecord> {
List<Map> getWorkorderRecordDtl(@Param("query")ReportQuery query);
}

View File

@@ -2,4 +2,29 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper">
<select id="getWorkorderRecordDtl" resultType="java.util.Map">
SELECT
wr.workorder_code,
wr.device_code,
mb.material_name,
mb.material_spec,
mb.material_id,
re.*
FROM pdm_produce_workorderrecord re
INNER JOIN pdm_produce_workorder wr on re.workorder_id = wr.workorder_id
LEFT JOIN md_me_materialbase mb on mb.material_id = wr.material_id
where wr.is_delete = true
<if test="query.device_code != null and query.device_code != ''">
and wr.device_code = #{device_code}
</if>
<if test="query.workorder_code != null and query.workorder_code != ''">
and wr.workorder_code = #{workorder_code}
</if>
<if test="query.start_time != null and query.start_time != ''">
and wr.realproducestart_date >= #{query.start_time}
</if>
<if test="query.end_time != null and query.end_time != ''">
and #{query.end_time} >= wr.realproducestart_date
</if>
</select>
</mapper>

View File

@@ -0,0 +1,21 @@
package org.nl.wms.product_manage.service.workorder.dto;
import lombok.Data;
import org.nl.common.domain.query.BaseQuery;
import org.nl.common.domain.query.QParam;
import org.nl.common.enums.QueryTEnum;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
/*
* @author ZZQ
* @Date 2023/4/26 11:05
*/
@Data
public class ReportQuery extends BaseQuery<PdmProduceWorkorderrecord> {
private String device_code;
private String workorder_code;
private String report;
}

View File

@@ -39,6 +39,7 @@ import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorder;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import org.nl.wms.product_manage.service.workorder.dao.WorkorderRecord;
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderMapper;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.nl.wms.product_manage.service.workorder.dto.WorkorderQuery;
import org.nl.wms.system_manage.service.user.ISysUserService;
import org.nl.wms.system_manage.service.user.dao.SysUser;
@@ -639,7 +640,7 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
list.add(report_qty);
return list;
}
//TODO:切换设备
@Override
public void replaceDevice(JSONObject param) {
String produceorder_code = param.getString("produceorder_code");
@@ -669,4 +670,8 @@ public class IPdmProduceWorkorderServiceImpl extends ServiceImpl<PdmProduceWorko
//this.update(produceshiftorderDto);
}
@Override
public List<Map> reportQuery(ReportQuery query) {
return reportRecordService.getWorkorderRecordDtl(query);
}
}

View File

@@ -1,11 +1,16 @@
package org.nl.wms.product_manage.service.workorder.impl;
import lombok.var;
import org.nl.wms.product_manage.service.workorder.dao.PdmProduceWorkorderrecord;
import org.nl.wms.product_manage.service.workorder.dao.mapper.PdmProduceWorkorderrecordMapper;
import org.nl.wms.product_manage.service.workorder.IPdmProduceWorkorderrecordService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.product_manage.service.workorder.dto.ReportQuery;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
/**
* <p>
* 生产设备报工记录表 服务实现类
@@ -17,4 +22,8 @@ import org.springframework.stereotype.Service;
@Service
public class PdmProduceWorkorderrecordServiceImpl extends ServiceImpl<PdmProduceWorkorderrecordMapper, PdmProduceWorkorderrecord> implements IPdmProduceWorkorderrecordService {
@Override
public List<Map> getWorkorderRecordDtl(ReportQuery query) {
return this.baseMapper.getWorkorderRecordDtl(query);
}
}

View File

@@ -58,7 +58,7 @@ public class SchedulerController {
.or()
.like("process_name", blurry)
.or()
.like("material_spec", blurry);
.like("rule_code", blurry);
}
List<SchProcessRoute> list = processRouteService.list(query);
return new ResponseEntity<>(TableDataInfo.build(list), HttpStatus.OK);

View File

@@ -12,7 +12,7 @@
WHERE p.vehicle_code <![CDATA[<>]]> '' and
v.vehicle_status = #{vehicle_status}
<if test="material_id != null and material_id != ''">
v.material_id = #{material_id}
and v.material_id = #{material_id}
</if>
</select>
</mapper>

View File

@@ -41,9 +41,16 @@ public interface ISchBasePointService extends IService<SchBasePoint> {
/**
* 根据设备点位查询设备对应工序
* r.workprocedure_code,r.workprocedure_id,p.device_code
* @param point_code
* @return
*/
Map findDeviceWorkprodure(String point_code);
Map getWorkprodureById(String id);
Map getWorkprodureByCode(String code);
}

View File

@@ -1,6 +1,7 @@
package org.nl.wms.scheduler_manage.service.point.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import java.util.List;
@@ -30,4 +31,5 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
List<Map> selectPoint(Map<String,Object> map);
Map getDeviceWorkprodure(String pointCode);
Map getWorkprodure(@Param("workprodureId") String workprodureId,@Param("workprodureCode") String workprodureCode);
}

View File

@@ -91,9 +91,19 @@
</select>
<select id="getDeviceWorkprodure" resultType="java.util.Map">
select
r.workprocedure_code,r.workprocedure_id,p.device_code from pdm_bi_device dev
r.workprocedure_code,r.workprocedure_id,dev.device_code,dev.spec 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};
</select>
<select id="getWorkprodure" resultType="java.util.Map">
select * from pdm_bi_workprocedure
where
<if test="workprodureId != null and workprodureId != ''">
workprocedure_id = #{workprodureId}
</if>
<if test="workprodureCode != null and workprodureCode != ''">
workprocedure_code = #{workprodureCode}
</if>
</select>
</mapper>

View File

@@ -148,4 +148,18 @@ public class SchBasePointServiceImpl extends ServiceImpl<SchBasePointMapper, Sch
}
return null;
}
@Override
public Map getWorkprodureById(String workprodureId) {
if (StringUtils.isNotEmpty(workprodureId)){
return this.baseMapper.getWorkprodure(workprodureId,null);
}
return null;
}
@Override
public Map getWorkprodureByCode(String workprodureCode) {
if (StringUtils.isNotEmpty(workprodureCode)){
return this.baseMapper.getWorkprodure(null,workprodureCode);
}
return null;
}
}

View File

@@ -2,6 +2,7 @@ package org.nl.wms.scheduler_manage.service.scheduler;
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
/**
* <p>
@@ -13,5 +14,7 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISchProcessRouteService extends IService<SchProcessRoute> {
SchProcessRoute findByMaterialId(String materialId,String regionCode);
SchProcessRoute findByMaterialId(String ruleCode);
FlowElement checkWorkprodure(String workprodureCode,String ruleCode);
}

View File

@@ -2,14 +2,19 @@ package org.nl.wms.scheduler_manage.service.scheduler.impl;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.apache.commons.lang3.StringUtils;
import org.nl.modules.common.exception.BadRequestException;
import org.nl.wms.scheduler_manage.service.point.dao.SchBasePoint;
import org.nl.wms.scheduler_manage.service.scheduler.SchedulerService;
import org.nl.wms.scheduler_manage.service.scheduler.dao.SchProcessRoute;
import org.nl.wms.scheduler_manage.service.scheduler.dao.mapper.SchProcessRouteMapper;
import org.nl.wms.scheduler_manage.service.scheduler.ISchProcessRouteService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.nl.wms.scheduler_manage.service.scheduler.labelConverter.impl.FlowElement;
import org.nl.wms.system_manage.service.param.ISysParamService;
import org.nl.wms.system_manage.service.param.dao.Param;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.util.CollectionUtils;
/**
* <p>
@@ -23,18 +28,26 @@ import org.springframework.stereotype.Service;
public class SchProcessRouteServiceImpl extends ServiceImpl<SchProcessRouteMapper, SchProcessRoute> implements ISchProcessRouteService {
@Autowired
ISysParamService iSysParamService;
private ISysParamService iSysParamService;
@Autowired
private SchedulerService schedulerService;
@Override
public SchProcessRoute findByMaterialId(String materialId, String regionCode) {
public SchProcessRoute findByMaterialId(String ruleCode) {
Param one = iSysParamService.getOne(new QueryWrapper<Param>().eq("code", "process_route"));
String value = one.getValue();
if (value.equals("1")){
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",regionCode));
return this.getOne(new QueryWrapper<SchProcessRoute>().eq("rule_code",ruleCode));
}else {
if (StringUtils.isNotEmpty(materialId)){
return this.baseMapper.findByMaterialId(materialId);
}
return this.baseMapper.findByMaterialId(ruleCode);
}
}
@Override
public FlowElement checkWorkprodure(String workprodureCode,String ruleCode) {
SchProcessRoute processRoute = this.findByMaterialId(ruleCode);
if (processRoute != null){
return schedulerService.currentFlow(processRoute.getProcess_id(), workprodureCode);
}
return null;
}

View File

@@ -30,7 +30,7 @@ public class ParamConverter implements BaseConverter {
break;
}
if (XMLStreamConstants.START_ELEMENT == xtr.next()){
element.getItem().put(xtr.getAttributeValue(null,"id"),xtr.getAttributeValue(null,"value"));
element.getItem().put(xtr.getAttributeValue(null,"spec"),xtr.getAttributeValue(null,"value"));
i++;
}
}

View File

@@ -4,11 +4,11 @@
<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>
<item spec="15" value="A1_HCX_01"></item>
<item spec="22" value="A1_HCX_02"></item>
</param>
</flow>
<flow id="A1_TWYTJ" name="推弯一体工序" sourceRef="A1_JGXJ" targetRef="A1_SKQX">
<flow id="A1_TWYTJ" name="推弯一体工序" sourceRef="A1_JGXL" 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>