代码更新

This commit is contained in:
ludj
2023-05-18 16:26:36 +08:00
parent d249c7db0b
commit 69d16d78ed
10 changed files with 529 additions and 167 deletions

View File

@@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage;
import org.nl.common.domain.query.PageQuery; import org.nl.common.domain.query.PageQuery;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import java.util.List; import java.util.List;
import java.util.Map; import java.util.Map;
@@ -66,6 +67,9 @@ public interface ISchBaseTaskService extends IService<SchBaseTask> {
*/ */
List<SchBaseTask> findUnFinishTasksByTaskConfig(String config_code, String task_code); List<SchBaseTask> findUnFinishTasksByTaskConfig(String config_code, String task_code);
List<SchBaseTask> findTasksByTaskStatus(String config_code, TaskStatus status);
/** /**
* 任务申请 * 任务申请
* *

View File

@@ -17,7 +17,7 @@ import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper; import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskMapper;
import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper; import org.nl.wms.sch.task.service.dao.mapper.SchBaseTaskconfigMapper;
import org.nl.wms.sch.task_manage.BaseTask; import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.TaskFactory; import org.nl.wms.sch.task_manage.task.TaskFactory;
import org.nl.wms.sch.task_manage.task.core.TaskStatus; import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@@ -104,6 +104,18 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
return schBaseTasks; return schBaseTasks;
} }
@Override
public List<SchBaseTask> findTasksByTaskStatus(String config_code, TaskStatus status) {
Assert.notNull(config_code, "任务配置编码不能为空!");
LambdaQueryWrapper<SchBaseTask> lam = new LambdaQueryWrapper<>();
lam.eq(SchBaseTask::getConfig_code, config_code)
.eq(SchBaseTask::getTask_status, status.getCode())
.ne(SchBaseTask::getIs_delete, true);
List<SchBaseTask> schBaseTasks = schBaseTaskMapper.selectList(lam);
return schBaseTasks;
}
@Override @Override
public void create(SchBaseTask entity) { public void create(SchBaseTask entity) {
String currentUserId = SecurityUtils.getCurrentUserId(); String currentUserId = SecurityUtils.getCurrentUserId();
@@ -134,7 +146,7 @@ public class SchBaseTaskServiceImpl extends ServiceImpl<SchBaseTaskMapper, SchBa
//3、叫料 //3、叫料
//4、叫空载具 //4、叫空载具
TaskFactory taskFactory = new TaskFactory(); TaskFactory taskFactory = new TaskFactory();
BaseTask task = taskFactory.getTask("HNMLTask"); AbstractTask task = taskFactory.getTask("HNMLTask");
task.apply(param); task.apply(param);
} }

View File

@@ -0,0 +1,182 @@
package org.nl.wms.sch.task_manage;
import cn.hutool.core.lang.Assert;
import cn.hutool.core.util.StrUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch.task.service.impl.SchBaseTaskconfigServiceImpl;
import org.nl.wms.sch.task_manage.task.AcsUtil;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.ArrayList;
import java.util.List;
/**
* @author ldjun
* @version 1.0
* @date 2023年05月16日 16:42
* @desc desc
*/
public abstract class AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
/**
* 创建
*/
protected abstract void create();
/**
* 下发
*/
protected abstract void issue();
/**
* 添加任务进行下发
*
* @return
*/
public List addTask() {
/* //任务基础表【sch_base_task】
WQLObject taskTab = WQLObject.getWQLObject("sch_base_task");
JSONArray tasks = taskTab.query("handle_class = '" + this.getClass().getName() + "' and task_status = '" + TaskStatusEnum.START_AND_POINT.getCode() + "' and is_delete ='0'").getResultJSONArray(0);
List<AcsTaskDto> arr = new ArrayList<>();
for (int i = 0, j = tasks.size(); i < j; i++) {
JSONObject json = tasks.getJSONObject(i);
AcsTaskDto taskDto = new AcsTaskDto();
taskDto.setExt_task_uuid(json.getString("task_id"));
taskDto.setTask_code(json.getString("task_code"));
taskDto.setTask_type("1");
//如果起点是码垛机械手的下料位置,终点是货架type要给2
JSONObject stratrObj = WQLObject.getWQLObject("sch_base_point").query("point_code='" + json.getString("start_point_code") + "'").uniqueResult(0);
JSONObject nextObj = WQLObject.getWQLObject("sch_base_point").query("point_code='" + json.getString("next_point_code") + "'").uniqueResult(0);
if (StrUtil.equals(stratrObj.getString("area_type"), AreaEnum.YZQY.getCode()) &&
StrUtil.equals(nextObj.getString("area_type"), AreaEnum.RYHCHJ.getCode())
) {
taskDto.setTask_type("2");
}
taskDto.setRoute_plan_code("normal");
taskDto.setStart_device_code(json.getString("start_point_code"));
taskDto.setNext_device_code(json.getString("next_point_code"));
taskDto.setVehicle_code(json.getString("vehicle_code"));
arr.add(taskDto);
}
return arr;*/
return null;
}
/**
* @return WCS的任务集合
* @discription 重新下发给wcs任务
* @author ldjun
* @created 2020年6月12日 下午5:52:28
*/
protected JSONObject renotifyAcs(SchBaseTask task) {
Assert.notNull(task);
List<SchBaseTask> taskList = new ArrayList<>();
taskList.add(task);
return this.renotifyAcs(taskList);
}
/**
* @return WCS的任务集合
* @discription 重新下发给wcs任务
* @author ldjun
* @created 2020年6月12日 下午5:52:28
*/
protected JSONObject renotifyAcs(List<SchBaseTask> taskList) {
//1、获取任务
//2、根据任务配置补全任务
//3、下发
List<AcsTaskDto> list = new ArrayList<>();
for (SchBaseTask task : taskList) {
AcsTaskDto taskDto = new AcsTaskDto();
taskDto.setExt_task_uuid(task.getTask_code());
taskDto.setTask_code(task.getTask_code());
taskDto.setRoute_plan_code("normal");
taskDto.setStart_device_code(task.getPoint_code1());
taskDto.setNext_device_code(task.getPoint_code2());
taskDto.setVehicle_code(task.getVehicle_code());
this.setTask(task.getConfig_code(), taskDto);
list.add(taskDto);
}
return AcsUtil.notifyAcs("api/wms/task", list);
}
private AcsTaskDto setTask(String config_code, AcsTaskDto taskDto) {
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(config_code);
taskDto.setPriority(taskConfig.getPriority());
taskDto.setTask_type(taskConfig.getAcs_task_type());
taskDto.setRoute_plan_code("normal");
return taskDto;
}
/**
* 定时任务
*/
protected void schedule() {
this.autoCreate();
this.create();
}
/**
* 自动生成任务
*/
public void autoCreate() {
}
protected abstract void updateStatus(String config_code, TaskStatus status);
/**
* 寻找合适的点位
*
* @return
*/
protected abstract List<Object> findPoints();
public void apply(JSONObject param) {
String point_code = "";
String config_code = "HNMLTask";
//1、校验数据
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(config_code);
Integer tcmn = taskConfig.getTask_create_max_num();
SchBaseTaskServiceImpl taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(taskConfig.getConfig_code());
Assert.isFalse(unFinishTasksByTaskConfig.size() > tcmn, "该点位{}申请的任务未完成数已超过上限,无法申请任务", point_code);
SchBaseTask task = new SchBaseTask();
task.setAcs_trace_id("");
task.setConfig_code(config_code);
task.setCreate_id("");
task.setCreate_mode("");
task.setPoint_code1("");
task.setVehicle_code("");
task.setTask_status(TaskStatus.APPLY.getCode());
SpringContextHolder.getBean(SchBaseTaskServiceImpl.class).create(task);
//1、如果是送料检测载具状态
//2、送空载具
//3、叫料
//4、叫空载具
//校验
}
}

View File

@@ -0,0 +1,30 @@
package org.nl.wms.sch.task_manage;
import lombok.Data;
@Data
public class AcsTaskDto {
//任务标识
private String ext_task_uuid;
//任务编码
private String task_code;
//任务类型
private String task_type;
//起点
private String start_device_code;
//下一点
private String next_device_code;
//载具号
private String vehicle_code;
//载具类型
private String vehicle_type;
//优先级
private String priority;
//备注
private String remark;
//扩展参数
private String params;
//路由类型
private String route_plan_code;
}

View File

@@ -0,0 +1,57 @@
package org.nl.wms.sch.task_manage;
import cn.hutool.core.util.ObjectUtil;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.reflections.Reflections;
import org.springframework.stereotype.Component;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.List;
import java.util.Set;
@Slf4j
@Component
public class AutoCreateTask {
private Set<Class<? extends AbstractTask>> subTypes = null;
@SneakyThrows
public void run() {
log.info("定时任务AutoCreateTask开始执行:");
if (ObjectUtil.isNull(subTypes) || subTypes.isEmpty()) {
Reflections reflections = new Reflections("org.nl");
//System.out.println(AbstractAcsTask.class.isAssignableFrom(DumpInvTask.class));
subTypes = reflections.getSubTypesOf(AbstractTask.class);
}
this.doExecute();
}
/**
* 需要按照任务配置类型并行执行
*/
private void doExecute() {
subTypes.forEach(clz -> {
// 调用AbstractAcsTask类的每个子类的schedule()方法
try {
Object obj = clz.newInstance();
//Method m = obj.getClass().getDeclaredMethod("schedule");
Method m = obj.getClass().getMethod("schedule");
List<AcsTaskDto> tasks = (List<AcsTaskDto>) m.invoke(obj);
} catch (InvocationTargetException e) {
e.printStackTrace();
log.info("定时器执行失败:{}", e.getTargetException().getMessage());
} catch (Exception e) {
e.printStackTrace();
log.info("定时器执行失败:{}", e.getMessage());
}
});
}
}

View File

@@ -1,82 +0,0 @@
package org.nl.wms.sch.task_manage;
import cn.hutool.core.lang.Assert;
import com.alibaba.fastjson.JSONObject;
import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch.task.service.impl.SchBaseTaskconfigServiceImpl;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.beans.factory.annotation.Autowired;
import java.util.List;
/**
* @author ldjun
* @version 1.0
* @date 2023年05月16日 16:42
* @desc desc
*/
public abstract class BaseTask {
@Autowired
private ISchBaseTaskService taskService;
/**
* 创建
*/
protected abstract void create(JSONObject param);
/**
* 下发
*/
protected abstract void issue();
/**
* 定时任务
*/
protected abstract void schedule();
protected abstract void updateStatus();
/**
* 寻找合适的点位
*
* @return
*/
protected abstract List<Object> findPoints();
public void apply(JSONObject param) {
String point_code = "";
String config_code = "HNMLTask";
//1、校验数据
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(config_code);
Integer tcmn = taskConfig.getTask_create_max_num();
SchBaseTaskServiceImpl taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
List<SchBaseTask> unFinishTasksByTaskConfig = taskService.findUnFinishTasksByTaskConfig(taskConfig.getConfig_code());
Assert.isFalse(unFinishTasksByTaskConfig.size() > tcmn, "该点位{}申请的任务未完成数已超过上限,无法申请任务", point_code);
SchBaseTask task = new SchBaseTask();
task.setAcs_trace_id("");
task.setConfig_code(config_code);
task.setCreate_id("");
task.setCreate_mode("");
task.setPoint_code1("");
task.setVehicle_code("");
task.setTask_status(TaskStatus.APPLY.getCode());
SpringContextHolder.getBean(SchBaseTaskServiceImpl.class).create(task);
//1、如果是送料检测载具状态
//2、送空载具
//3、叫料
//4、叫空载具
//校验
}
}

View File

@@ -0,0 +1,55 @@
package org.nl.wms.sch.task_manage.task;
import cn.hutool.core.util.StrUtil;
import cn.hutool.http.HttpRequest;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.nl.config.SpringContextHolder;
import org.nl.system.service.param.impl.SysParamServiceImpl;
import org.nl.wms.sch.task_manage.AcsTaskDto;
import org.springframework.http.HttpStatus;
import java.util.List;
/**
* ACS连接工具类:
*/
@Slf4j
public class AcsUtil {
public static JSONObject notifyAcs(String api, List<AcsTaskDto> list) {
//判断是否连接ACS系统
String isConnect = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("IS_CONNECT_ACS").getValue();
JSONObject result = new JSONObject();
if (StrUtil.equals("0", isConnect)) {
result.put("status", HttpStatus.BAD_REQUEST.value());
result.put("message", "未连接ACS!");
result.put("data", new JSONObject());
return result;
}
//ACS地址127.0.0.1:8010
String acsUrl = SpringContextHolder.getBean(SysParamServiceImpl.class).findByCode("ACS_URL").getValue();
String url = acsUrl + api;
log.info("下发acs任务的参数为:{}", list.toString());
try {
String resultMsg = HttpRequest.post(url)
.body(String.valueOf(list))
.execute().body();
result = JSONObject.parseObject(resultMsg);
} catch (Exception e) {
String msg = e.getMessage();
//ConnectException: Connection refused: connect
//网络不通
System.out.println(msg);
result.put("status", HttpStatus.BAD_REQUEST);
result.put("message", "网络不通,操作失败!");
result.put("data", new JSONObject());
}
//acs抛异常这里
/* if (result.getString("status").equals(String.valueOf(HttpStatus.BAD_REQUEST.value())))
throw new BadRequestException(result.getString("message"));*/
return result;
}
}

View File

@@ -1,6 +1,6 @@
package org.nl.wms.sch.task_manage.task; package org.nl.wms.sch.task_manage.task;
import org.nl.wms.sch.task_manage.BaseTask; import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.tasks.HNMLTask; import org.nl.wms.sch.task_manage.task.tasks.HNMLTask;
/** /**
@@ -11,7 +11,7 @@ import org.nl.wms.sch.task_manage.task.tasks.HNMLTask;
*/ */
public class TaskFactory { public class TaskFactory {
//使用 getShape 方法获取形状类型的对象 //使用 getShape 方法获取形状类型的对象
public BaseTask getTask(String taskType) { public AbstractTask getTask(String taskType) {
if (taskType == null) { if (taskType == null) {
return null; return null;
} }

View File

@@ -1,7 +1,18 @@
package org.nl.wms.sch.task_manage.task.tasks; package org.nl.wms.sch.task_manage.task.tasks;
import com.alibaba.fastjson.JSONObject; import cn.hutool.core.util.ObjectUtil;
import org.nl.wms.sch.task_manage.BaseTask; import org.nl.config.SpringContextHolder;
import org.nl.wms.sch.point.service.ISchBasePointService;
import org.nl.wms.sch.point.service.dao.SchBasePoint;
import org.nl.wms.sch.point.service.impl.SchBasePointServiceImpl;
import org.nl.wms.sch.task.service.ISchBaseTaskService;
import org.nl.wms.sch.task.service.dao.SchBaseTask;
import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch.task.service.impl.SchBaseTaskServiceImpl;
import org.nl.wms.sch.task.service.impl.SchBaseTaskconfigServiceImpl;
import org.nl.wms.sch.task_manage.AbstractTask;
import org.nl.wms.sch.task_manage.task.core.TaskStatus;
import org.springframework.scheduling.support.TaskUtils;
import java.util.List; import java.util.List;
@@ -11,14 +22,37 @@ import java.util.List;
* @date 2023年05月16日 16:44 * @date 2023年05月16日 16:44
* @desc desc * @desc desc
*/ */
public class HNMLTask extends BaseTask { public class HNMLTask extends AbstractTask {
private static String TASK_CONFIG_CODE = "HNMLTask";
@Override @Override
protected void updateStatus() { protected void updateStatus(String task_code, TaskStatus status) {
ISchBaseTaskService taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
taskService.updateById(null);
} }
@Override @Override
protected void create(JSONObject param) { protected void create() {
ISchBaseTaskService taskService = SpringContextHolder.getBean(SchBaseTaskServiceImpl.class);
ISchBasePointService pointService = SpringContextHolder.getBean(SchBasePointServiceImpl.class);
List<SchBaseTask> tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY);
SchBaseTaskconfig taskConfig = SpringContextHolder.getBean(SchBaseTaskconfigServiceImpl.class).getById(TASK_CONFIG_CODE);
for (SchBaseTask task : tasks) {
List<String> next_region_strs = taskConfig.getNext_region_strs();
if (ObjectUtil.isEmpty(next_region_strs)) continue;
SchBasePoint point = new SchBasePoint();
task.setPoint_code2(point.getPoint_code());
taskService.update(task);
pointService.update(point);
this.renotifyAcs(task);
//二车间-
}
} }

View File

@@ -5,17 +5,46 @@
<div v-if="crud.props.searchToggle"> <div v-if="crud.props.searchToggle">
<!-- 搜索 --> <!-- 搜索 -->
<label class="el-form-item-label">工单编号</label> <label class="el-form-item-label">工单编号</label>
<el-input v-model="query.workorder_code" clearable placeholder="工单编号" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> <el-input
<label class="el-form-item-label">点位编码</label> v-model="query.workorder_code"
<el-input v-model="query.point_code" clearable placeholder="点位编码" style="width: 185px;" class="filter-item" @keyup.enter.native="crud.toQuery" /> clearable
placeholder="工单编号"
style="width: 185px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
<label class="el-form-item-label">设备编码</label>
<el-input
v-model="query.point_code"
clearable
placeholder="设备编码"
style="width: 185px;"
class="filter-item"
@keyup.enter.native="crud.toQuery"
/>
<rrOperation :crud="crud" /> <rrOperation :crud="crud" />
</div> </div>
<!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'--> <!--如果想在工具栏加入更多按钮可以使用插槽方式 slot = 'left' or 'right'-->
<crudOperation :permission="permission" /> <crudOperation :permission="permission" />
<!--表单组件--> <!--表单组件-->
<el-dialog :close-on-click-modal="false" :before-close="crud.cancelCU" :visible.sync="crud.status.cu > 0" :title="crud.status.title" width="820px"> <el-dialog
<el-form ref="form" style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;" :inline="true" :model="form" :rules="rules" size="mini" label-width="135px" label-suffix=":"> :close-on-click-modal="false"
<el-form-item label="所属车间"> :before-close="crud.cancelCU"
:visible.sync="crud.status.cu > 0"
:title="crud.status.title"
width="820px"
>
<el-form
ref="form"
style="border: 1px solid #cfe0df;margin-top: 10px;padding-top: 10px;"
:inline="true"
:model="form"
:rules="rules"
size="mini"
label-width="135px"
label-suffix=":"
>
<el-form-item v-if="false" label="所属车间">
<el-select <el-select
v-model="form.workshop_code" v-model="form.workshop_code"
placeholder="请选择" placeholder="请选择"
@@ -31,6 +60,15 @@
<el-form-item label="工单编号" prop="workorder_code"> <el-form-item label="工单编号" prop="workorder_code">
<el-input v-model="form.workorder_code" style="width: 240px;" /> <el-input v-model="form.workorder_code" style="width: 240px;" />
</el-form-item> </el-form-item>
<el-form-item label="物料编码">
<el-input v-model="form.material_code" style="width: 240px;" disabled />
</el-form-item>
<el-form-item label="物料名称" prop="material_name">
<el-input v-model="form.material_name" style="width: 240px;" @focus="getMaterial" />
</el-form-item>
<el-form-item label="物料规格">
<el-input v-model="form.material_spec" style="width: 240px;" disabled />
</el-form-item>
<el-form-item label="计划数量" prop="plan_qty"> <el-form-item label="计划数量" prop="plan_qty">
<el-input-number <el-input-number
v-model.number="form.plan_qty" v-model.number="form.plan_qty"
@@ -63,46 +101,38 @@
/> />
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="物料名称" prop="material_name">
<el-input v-model="form.material_name" style="width: 240px;" @focus="getMaterial"/>
</el-form-item>
<el-form-item label="物料编码">
<el-input v-model="form.material_code" style="width: 240px;" disabled/>
</el-form-item>
<el-form-item label="物料规格">
<el-input v-model="form.material_spec" style="width: 240px;" disabled/>
</el-form-item>
<el-form-item label="计划开始时间" prop="planproducestart_date"> <el-form-item label="计划开始时间" prop="planproducestart_date">
<el-date-picker <el-date-picker
v-model="form.planproducestart_date" v-model="form.planproducestart_date"
type="datetime" type="datetime"
style="width: 240px;" style="width: 240px;"
placeholder="选择日期时间"> placeholder="选择日期时间"
</el-date-picker> />
</el-form-item> </el-form-item>
<el-form-item label="计划结束时间" prop="planproduceend_date"> <el-form-item label="计划结束时间" prop="planproduceend_date">
<el-date-picker <el-date-picker
v-model="form.planproduceend_date" v-model="form.planproduceend_date"
type="datetime" type="datetime"
style="width: 240px;" style="width: 240px;"
placeholder="选择日期时间"> placeholder="选择日期时间"
</el-date-picker> />
</el-form-item> </el-form-item>
<el-form-item label="实际开始时间"> <el-form-item label="实际开始时间">
<el-date-picker <el-date-picker
v-model="form.realproducestart_date" v-model="form.realproducestart_date"
type="datetime" type="datetime"
style="width: 240px;" style="width: 240px;"
placeholder="选择日期时间"> placeholder="选择日期时间"
</el-date-picker> />
</el-form-item> </el-form-item>
<el-form-item label="实际结束时间"> <el-form-item label="实际结束时间">
<el-date-picker <el-date-picker
v-model="form.realproduceend_date" v-model="form.realproduceend_date"
type="datetime" type="datetime"
style="width: 240px;" style="width: 240px;"
placeholder="选择日期时间"> placeholder="选择日期时间"
</el-date-picker> />
</el-form-item> </el-form-item>
<el-form-item label="静置时间(分钟)" prop="standing_time"> <el-form-item label="静置时间(分钟)" prop="standing_time">
<el-input-number <el-input-number
@@ -112,11 +142,17 @@
style="width: 240px;" style="width: 240px;"
/> />
</el-form-item> </el-form-item>
<el-form-item label="工单类型" prop="workorder_type"> <el-form-item v-if="false" label="工单类型" prop="workorder_type">
<el-input v-model="form.workorder_type" style="width: 240px;" /> <el-input v-model="form.workorder_type" style="width: 240px;" />
</el-form-item> </el-form-item>
<el-form-item label="所属区域" prop="region_code"> <el-form-item label="所属区域" prop="region_code">
<el-select v-model="form.region_code" filterable placeholder="请选择" style="width: 240px;" @change="setRegionName"> <el-select
v-model="form.region_code"
filterable
placeholder="请选择"
style="width: 240px;"
@change="setRegionName"
>
<el-option <el-option
v-for="item in regionList" v-for="item in regionList"
:key="item.region_code" :key="item.region_code"
@@ -129,10 +165,16 @@
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="区域名称"> <el-form-item label="区域名称">
<el-input v-model="form.region_name" style="width: 240px;" disabled/> <el-input v-model="form.region_name" style="width: 240px;" disabled />
</el-form-item> </el-form-item>
<el-form-item label="点位编码" prop="point_code"> <el-form-item label="设备编码" prop="point_code">
<el-select v-model="form.point_code" filterable placeholder="请选择" style="width: 240px;" @change="setPointName"> <el-select
v-model="form.point_code"
filterable
placeholder="请选择"
style="width: 240px;"
@change="setPointName"
>
<el-option <el-option
v-for="item in pointList" v-for="item in pointList"
:key="item.point_code" :key="item.point_code"
@@ -144,8 +186,8 @@
</el-option> </el-option>
</el-select> </el-select>
</el-form-item> </el-form-item>
<el-form-item label="点位名称"> <el-form-item label="设备名称">
<el-input v-model="form.point_name" style="width: 240px;" disabled/> <el-input v-model="form.point_name" style="width: 240px;" disabled />
</el-form-item> </el-form-item>
<el-form-item label="是否自动搬运" prop="is_needmove"> <el-form-item label="是否自动搬运" prop="is_needmove">
<el-radio-group v-model="form.is_needmove" style="width: 240px"> <el-radio-group v-model="form.is_needmove" style="width: 240px">
@@ -160,36 +202,71 @@
</div> </div>
</el-dialog> </el-dialog>
<!--表格渲染--> <!--表格渲染-->
<el-table ref="table" v-loading="crud.loading" :data="crud.data" size="mini" style="width: 100%;" @selection-change="crud.selectionChangeHandler"> <el-table
ref="table"
v-loading="crud.loading"
:data="crud.data"
size="mini"
style="width: 100%;"
@selection-change="crud.selectionChangeHandler"
>
<el-table-column type="selection" width="55" /> <el-table-column type="selection" width="55" />
<el-table-column prop="workorder_code" label="工单编号" :min-width="flexWidth('workorder_code',crud.data,'工单编号')"/> <el-table-column prop="workorder_code" label="工单编号" :min-width="flexWidth('workorder_code',crud.data,'工单编号')" />
<el-table-column prop="plan_qty" label="计划数量" :min-width="flexWidth('plan_qty',crud.data,'计划数量')"/> <el-table-column prop="plan_qty" label="计划数量" :min-width="flexWidth('plan_qty',crud.data,'计划数量')" />
<el-table-column prop="real_qty" label="实际数量" :min-width="flexWidth('real_qty',crud.data,'实际数量')"/> <el-table-column prop="real_qty" label="实际数量" :min-width="flexWidth('real_qty',crud.data,'实际数量')" />
<el-table-column prop="material_id" label="物料标识" :min-width="flexWidth('material_id',crud.data,'物料标识')"/> <el-table-column prop="material_id" label="物料标识" :min-width="flexWidth('material_id',crud.data,'物料标识')" />
<el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料标识')"/> <el-table-column prop="material_name" label="物料名称" :min-width="flexWidth('material_name',crud.data,'物料标识')" />
<el-table-column prop="vehicle_type" label="载具类型" :min-width="flexWidth('vehicle_type',crud.data,'载具类型')"/> <el-table-column prop="vehicle_type" label="载具类型" :min-width="flexWidth('vehicle_type',crud.data,'载具类型')" />
<el-table-column prop="planproducestart_date" label="计划开始时间" :min-width="flexWidth('planproducestart_date',crud.data,'计划开始时间')"/> <el-table-column
<el-table-column prop="planproduceend_date" label="计划结束时间" :min-width="flexWidth('planproduceend_date',crud.data,'计划结束时间')"/> prop="planproducestart_date"
<el-table-column prop="realproducestart_date" label="实际开始时间" :min-width="flexWidth('realproducestart_date',crud.data,'实际开始时间')"/> label="计划开始时间"
<el-table-column prop="realproduceend_date" label="实际结束时间" :min-width="flexWidth('realproduceend_date',crud.data,'实际结束时间')"/> :min-width="flexWidth('planproducestart_date',crud.data,'计划开始时间')"
<el-table-column prop="standing_time" label="静置时间(分钟)" :min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')"/> />
<el-table-column prop="point_code" label="点位编码" :min-width="flexWidth('point_code',crud.data,'点位编码')"/> <el-table-column
<el-table-column prop="point_name" label="点位名称" :min-width="flexWidth('point_name',crud.data,'点位名称')"/> prop="planproduceend_date"
<el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('region_code',crud.data,'区域编码')"/> label="计划结束时间"
<el-table-column prop="region_name" label="区域名称" :min-width="flexWidth('region_name',crud.data,'区域名称')"/> :min-width="flexWidth('planproduceend_date',crud.data,'计划结束时间')"
<el-table-column prop="workorder_status" label="工单状态" :min-width="flexWidth('workorder_status',crud.data,'工单状态')"/> />
<el-table-column
prop="realproducestart_date"
label="实际开始时间"
:min-width="flexWidth('realproducestart_date',crud.data,'实际开始时间')"
/>
<el-table-column
prop="realproduceend_date"
label="实际结束时间"
:min-width="flexWidth('realproduceend_date',crud.data,'实际结束时间')"
/>
<el-table-column
prop="standing_time"
label="静置时间(分钟)"
:min-width="flexWidth('standing_time',crud.data,'静置时间(分钟)')"
/>
<el-table-column prop="point_code" label="设备编码" :min-width="flexWidth('point_code',crud.data,'设备编码')" />
<el-table-column prop="point_name" label="设备名称" :min-width="flexWidth('point_name',crud.data,'设备名称')" />
<el-table-column prop="region_code" label="区域编码" :min-width="flexWidth('region_code',crud.data,'区域编码')" />
<el-table-column prop="region_name" label="区域名称" :min-width="flexWidth('region_name',crud.data,'区域名称')" />
<el-table-column
prop="workorder_status"
label="工单状态"
:min-width="flexWidth('workorder_status',crud.data,'工单状态')"
/>
<el-table-column prop="is_needmove" label="是否自动搬运" :min-width="flexWidth('is_needmove',crud.data,'是否自动搬运')"> <el-table-column prop="is_needmove" label="是否自动搬运" :min-width="flexWidth('is_needmove',crud.data,'是否自动搬运')">
<template slot-scope="scope"> <template slot-scope="scope">
{{scope.row.is_needmove?'是':'否'}} {{ scope.row.is_needmove ? '是' : '否' }}
</template> </template>
</el-table-column> </el-table-column>
<el-table-column prop="workorder_type" label="工单类型" :min-width="flexWidth('workorder_type',crud.data,'工单类型')"/> <el-table-column prop="workorder_type" label="工单类型" :min-width="flexWidth('workorder_type',crud.data,'工单类型')" />
<el-table-column prop="passback_status" label="回传MES状态" :min-width="flexWidth('passback_status',crud.data,'回传MES状态')"/> <el-table-column
<el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')"/> prop="passback_status"
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')"/> label="回传MES状态"
<el-table-column prop="create_time" label="创建时间" :min-width="flexWidth('create_time',crud.data,'创建时间')"/> :min-width="flexWidth('passback_status',crud.data,'回传MES状态')"
<el-table-column prop="update_name" label="修改人" :min-width="flexWidth('update_name',crud.data,'修改人')"/> />
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')"/> <el-table-column prop="workshop_code" label="车间编码" :min-width="flexWidth('workshop_code',crud.data,'车间编码')" />
<el-table-column prop="create_name" label="创建人" :min-width="flexWidth('create_name',crud.data,'创建人')" />
<el-table-column prop="create_time" label="创建时间" :min-width="flexWidth('create_time',crud.data,'创建时间')" />
<el-table-column prop="update_name" label="修改人" :min-width="flexWidth('update_name',crud.data,'修改人')" />
<el-table-column prop="update_time" label="修改时间" :min-width="flexWidth('update_time',crud.data,'修改时间')" />
<el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right"> <el-table-column v-permission="[]" label="操作" width="120px" align="center" fixed="right">
<template slot-scope="scope"> <template slot-scope="scope">
<udOperation <udOperation
@@ -202,7 +279,7 @@
<!--分页组件--> <!--分页组件-->
<pagination /> <pagination />
</div> </div>
<MaterialDialog :dialog-show.sync="materialDialog" @tableChanged="tableChanged"/> <MaterialDialog :dialog-show.sync="materialDialog" @tableChanged="tableChanged" />
</div> </div>
</template> </template>
@@ -210,7 +287,7 @@
import crudPdmBdWorkorder from './pdmBdWorkorder' import crudPdmBdWorkorder from './pdmBdWorkorder'
import crudSchBaseRegion from '@/views/wms/sch/region/schBaseRegion' import crudSchBaseRegion from '@/views/wms/sch/region/schBaseRegion'
import crudSchBasePoint from '@/views/wms/sch/point/schBasePoint' import crudSchBasePoint from '@/views/wms/sch/point/schBasePoint'
import CRUD, {crud, form, header, presenter} from '@crud/crud' import CRUD, { crud, form, header, presenter } from '@crud/crud'
import rrOperation from '@crud/RR.operation' import rrOperation from '@crud/RR.operation'
import crudOperation from '@crud/CRUD.operation' import crudOperation from '@crud/CRUD.operation'
import udOperation from '@crud/UD.operation' import udOperation from '@crud/UD.operation'
@@ -257,46 +334,35 @@ export default {
crudMethod: { ...crudPdmBdWorkorder } crudMethod: { ...crudPdmBdWorkorder }
}) })
}, },
created() {
this.getWorkShopList()
this.getRegionList()
},
data() { data() {
return { return {
permission: { permission: {},
},
rules: { rules: {
workorder_code: [ material_code: [
{ required: true, message: '工单编码不能为空', trigger: 'blur' } { required: true, message: '物料不能为空', trigger: 'blur' }
], ],
plan_qty: [ plan_qty: [
{ required: true, message: '计划数量不能为空', trigger: 'blur' } { required: true, message: '计划数量不能为空', trigger: 'blur' }
], ],
real_qty: [
{ required: true, message: '实际数量不能为空', trigger: 'blur' }
],
planproducestart_date: [ planproducestart_date: [
{ required: true, message: '计划开始不能为空', trigger: 'change' } { required: true, message: '计划开始不能为空', trigger: 'change' }
], ],
planproduceend_date: [ planproduceend_date: [
{ required: true, message: '计划结束不能为空', trigger: 'change' } { required: true, message: '计划结束不能为空', trigger: 'change' }
], ],
standing_time: [
{ required: true, message: '静置时间不能为空', trigger: 'change' }
],
point_code: [ point_code: [
{ required: true, message: '点位编码不能为空', trigger: 'change' } { required: true, message: '设备编码不能为空', trigger: 'change' }
], ],
region_code: [ region_code: [
{ required: true, message: '区域编码不能为空', trigger: 'change' } { required: true, message: '区域编码不能为空', trigger: 'change' }
],
workorder_type: [
{ required: true, message: '工单类型不能为空', trigger: 'blur' }
] ]
/* workorder_type: [
{ required: true, message: '工单类型不能为空', trigger: 'blur' }
]*/
}, },
queryTypeOptions: [ queryTypeOptions: [
{ key: 'workorder_code', display_name: '工单编号' }, { key: 'workorder_code', display_name: '工单编号' },
{ key: 'point_code', display_name: '点位编码' } { key: 'point_code', display_name: '设备编码' }
], ],
workShopList: [], workShopList: [],
regionList: [], regionList: [],
@@ -305,6 +371,10 @@ export default {
materialDialog: false materialDialog: false
} }
}, },
created() {
this.getWorkShopList()
this.getRegionList()
},
methods: { methods: {
item() { item() {
return item return item