From f123cc2e2d702e34959dbbfd9879fd568187f400 Mon Sep 17 00:00:00 2001 From: liyongde <1419499670@qq.com> Date: Thu, 17 Aug 2023 13:55:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E5=AF=B9=E6=8E=A5=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E4=B8=8E=E4=BE=8B=E5=AD=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../task_manage/task/tasks/hn/HNMLTask.java | 258 ++++++++++++------ .../task/tasks/hn/mapper/HNMapper.java | 11 + .../task/tasks/hn/mapper/HNMapper.xml | 5 + .../task_manage/task/tasks/yz/YZQLTask.java | 183 ------------- .../task_manage/task/tasks/yz/YZSKTask.java | 156 +++++++---- nladmin-ui/src/views/wms/ext/record/index.vue | 233 ++++++++++++++++ .../views/wms/ext/record/sysInteractRecord.js | 27 ++ 7 files changed, 542 insertions(+), 331 deletions(-) create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java create mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml delete mode 100644 nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java create mode 100644 nladmin-ui/src/views/wms/ext/record/index.vue create mode 100644 nladmin-ui/src/views/wms/ext/record/sysInteractRecord.js diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java index 2b7f88b..830d99b 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/HNMLTask.java @@ -1,13 +1,15 @@ package org.nl.wms.sch.task_manage.task.tasks.hn; 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.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.Data; import org.nl.common.exception.BadRequestException; import org.nl.system.service.notice.ISysNoticeService; +import org.nl.wms.database.material.service.IMdBaseMaterialService; +import org.nl.wms.database.material.service.dao.MdBaseMaterial; import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; @@ -19,12 +21,16 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; import org.nl.wms.sch.task_manage.enums.*; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.sch.task_manage.task.tasks.hn.mapper.HNMapper; +import org.nl.wms.util.PointUtils; import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.math.BigDecimal; import java.util.Arrays; @@ -32,18 +38,15 @@ import java.util.List; import java.util.stream.Collectors; /** - * @author ldjun 混碾满料任务 + * @author ldjun * @version 1.0 * @date 2023年05月16日 16:44 - * @desc desc + * @desc 混碾满料任务: 混碾机 -> 困料输送线 */ @Component -@Data -@TaskType("HNMLTask") +@TaskType("HLMLTask") public class HNMLTask extends AbstractTask { - - private static String TASK_CONFIG_CODE = "HNMLTask"; - + private static String TASK_CONFIG_CODE = "HLMLTask"; @Autowired private ISchBasePointService pointService; @Autowired @@ -54,23 +57,28 @@ public class HNMLTask extends AbstractTask { private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; @Autowired private IPdmBdWorkorderService workorderService; - @Autowired private ISysNoticeService noticeService; + @Autowired + private IMdBaseMaterialService materialService; + @Autowired + private HNMapper hnMapper; + @Override + @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); TaskUtils.setUpdateByAcs(taskObj); taskService.updateById(taskObj); } else if (status.equals(TaskStatus.FINISHED)) { // 完成 @@ -84,32 +92,43 @@ public class HNMLTask extends AbstractTask { * 具体业务 */ @Override - protected void create() { // 找点+下发、 定时任务 + @Transactional(rollbackFor = Exception.class) + protected void create() { // 找点+下发-定时任务 // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); // 配置信息 SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); + String requestParam = task.getRequest_param();// 任务的其他数据 + JSONObject jsonObject = JSONObject.parseObject(requestParam); // 找终点 SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); + task.setRemark("未存在生产该料的压机!"); + taskService.updateById(task); // 消息通知 - noticeService.createNotice("未找到所需点位!", TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode()); + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), NoticeTypeEnum.WARN.getCode()); continue; } + // 叫料完成 +// requestMaterialRecordService.callMaterialFinish(point.getRecord_id()); // 设置终点并修改创建成功状态 task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); - taskService.update(task); + task.setRemark(""); + task.setVehicle_type(GeneralDefinition.MATERIAL_CUP); + // 告知acs去左边右边 + int number = getNumber(point); + task.setResponse_param(new JSONObject().fluentPut("direction", number).toJSONString()); + taskService.updateById(task); point.setIng_task_code(task.getTask_code()); - pointService.update(point); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); //下发 // this.renotifyAcs(task); @@ -117,28 +136,28 @@ public class HNMLTask extends AbstractTask { } - private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extData) { - String workorderCode = extData.getString("workorder_code"); - PdmBdWorkorder one = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper().eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); - lam.in(SchBasePoint::getRegion_code, nextRegionStr) - .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) - .like(ObjectUtil.isNotEmpty(one), SchBasePoint::getCan_vehicle_type, one.getVehicle_type()) - .eq(SchBasePoint::getIs_used, true) - .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 - .or() - .eq(SchBasePoint::getIng_task_code, "")) - .orderByAsc(SchBasePoint::getIn_order_seq) - .orderByAsc(SchBasePoint::getPoint_code); - List schBasePoints = pointService.list(lam); - return ObjectUtil.isNotEmpty(schBasePoints) ? schBasePoints.get(0) : null; + private static int getNumber(SchBasePoint point) { + String deviceCode = point.getDevice_code(); // 获取设备编码 + int number = Integer.parseInt(deviceCode.replaceAll("[^0-9]", "")); + // 1左边2右边 + number = (number % 2) == 0 ? 2 : (number % 2); + return number; + } + + /** + * 根据压机工单的原料编码以及点位的更新时间 + * + * @param nextRegionStr + * @param requestParam + * @return + */ + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject requestParam) { + return null; } @Override - public void forceFinish(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + public void forceFinish(String task_code) { // 人工完成任务 + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } @@ -146,70 +165,74 @@ public class HNMLTask extends AbstractTask { } @Override - public void cancel(String task_code) { - SchBaseTask taskObj = taskService.getById(task_code); + public void cancel(String task_code) { // 人工取消任务 + SchBaseTask taskObj = taskService.getByCode(task_code); if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + // todo: 通知acs取消任务 } public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { // 获取参数 String endPoint = taskObj.getPoint_code2(); // 终点 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - // 载具编码:没有就创建一个 - String vehicle_code = ObjectUtil.isNotEmpty(taskObj.getVehicle_code()) ? taskObj.getVehicle_code() : IdUtil.getSnowflake(1, 1).nextIdStr(); SchBasePoint endPointObj = pointService.getById(endPoint); - PdmBdWorkorder workorderCode = - ObjectUtil.isNotEmpty(extGroupData.getString("workorder_code")) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, extGroupData.getString("workorder_code"))) - : null; - // 要把数据存到组盘表 - SchBaseVehiclematerialgroup groupEntity = new SchBaseVehiclematerialgroup(); - groupEntity.setMaterial_id(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getMaterial_id() - : ""); - groupEntity.setStanding_time(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getStanding_time() - : 0); - groupEntity.setIs_full(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBoolean("is_full") - : true); - groupEntity.setMaterial_qty(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getInteger("material_qty") - : 0); - groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(extGroupData) - ? extGroupData.getBigDecimal("material_weight") - : BigDecimal.valueOf(0)); - groupEntity.setWorkorder_code(ObjectUtil.isNotEmpty(workorderCode) - ? workorderCode.getWorkorder_code() - : ""); - groupEntity.setVehicle_code(vehicle_code); - groupEntity.setVehicle_type(taskObj.getVehicle_type()); - groupEntity.setPoint_code(endPoint); - groupEntity.setPoint_name(endPointObj.getPoint_name()); - groupEntity.setPcsn( DateUtil.format(DateUtil.date(), "yyyyMMdd")); - groupEntity.setInstorage_time(DateUtil.now()); - groupEntity.setTask_code(taskObj.getTask_code()); - groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 绑定 - groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 - groupEntity.setIs_delete(false); - vehiclematerialgroupService.create(groupEntity); - + String responseParam = taskObj.getResponse_param(); + JSONObject responseObj = JSONObject.parseObject(responseParam); + // 要把数据存到组盘表。压制工单放进去, + SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getOne( + new LambdaQueryWrapper() + .eq(SchBaseVehiclematerialgroup::getGroup_id, taskObj.getGroup_id())); + if (ObjectUtil.isEmpty(groupEntity)) { + // 找不到组盘信息 + throw new BadRequestException("找不到组盘信息"); + } // 终点去除正在执行的任务, 设置载具编码、载具类型、载具数量 if (ObjectUtil.isNotEmpty(endPointObj)) { endPointObj.setIng_task_code(""); - endPointObj.setVehicle_code(vehicle_code); - endPointObj.setVehicle_type(taskObj.getVehicle_type()); endPointObj.setVehicle_qty(1); - endPointObj.setPoint_status(PointStatusEnum.FULL_POINT.getCode()); // 有料 - pointService.update(endPointObj); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + // 终点为公用点位,需要获取左右方向 + String parentPointCode = endPointObj.getParent_point_code(); + String[] split = parentPointCode.split(","); + if (split.length > 1) { + parentPointCode = split[responseObj.getInteger("direction") - 1]; + } + // 找到父点位 + SchBasePoint yjDevice = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, parentPointCode)); + // 父点位(设备)需要切换成非空状态 + PointUtils.setUpdateByType(yjDevice, taskFinishedType); + yjDevice.setPoint_status(PointStatusEnum.FULL_POINT.getCode()); + pointService.updateById(yjDevice); + // 找压机工单 + PdmBdWorkorder one = workorderService.getOne(new LambdaQueryWrapper() + .eq(yjDevice != null, PdmBdWorkorder::getPoint_code, yjDevice.getPoint_code()) + .eq(PdmBdWorkorder::getWorkorder_status, WorkOrderStatusEnum.PRODUCING.getCode())); + if (ObjectUtil.isNotEmpty(one)) { + // 给组盘数据设置批次:压制工单+混砂机号+碾次 + groupEntity.setWorkorder_code(one.getWorkorder_code()); + StringBuilder pcsn = new StringBuilder(); + pcsn.append(one.getWorkorder_code()).append(groupEntity.getPoint_code()).append(groupEntity.getMix_times()); + groupEntity.setPcsn(pcsn.toString()); + groupEntity.setPoint_code(endPointObj.getPoint_code()); // 当前位置 + groupEntity.setPoint_name(endPointObj.getPoint_name()); + groupEntity.setMove_way(groupEntity.getMove_way() + " -> " + endPointObj.getPoint_code()); + groupEntity.setMaterial_id(one.getMaterial_id()); + // *根据压机的工单物料标识查找静置时间 + MdBaseMaterial mdBaseMaterial = materialService.getById(one.getMaterial_id()); + groupEntity.setStanding_time(mdBaseMaterial.getStanding_time()); + } } - taskObj.setRemark("任务完成"); + // 更新组盘数据 + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); + groupEntity.setTask_code(taskObj.getTask_code()); // 当前任务的编码 + TaskUtils.setGroupUpdateByType(groupEntity, taskFinishedType); + vehiclematerialgroupService.updateById(groupEntity); + // 起点清空 - 由ACS请求修改 + taskObj.setRemark(GeneralDefinition.TASK_FINISH); taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); TaskUtils.setUpdateByType(taskObj, taskFinishedType); @@ -224,12 +247,67 @@ public class HNMLTask extends AbstractTask { : null; if (one != null) { one.setIng_task_code(""); - pointService.update(one); + PointUtils.setUpdateByType(one, taskFinishedType); + pointService.updateById(one); } - taskObj.setRemark("任务取消"); + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); taskObj.setTask_status(TaskStatus.CANCELED.getCode()); taskObj.setFinished_type(taskFinishedType.getCode()); TaskUtils.setUpdateByType(taskObj, taskFinishedType); taskService.updateById(taskObj); } + + // 组盘 + @Override + public String setGroupPlate(JSONObject param) { + // 吨袋号(泥料号+2位年+月日时分+设备号+碾次)x + // LMS组盘时生成混料批次:压制工单+混砂机号+碾次 + String vehicleCode = param.getString("vehicle_code"); + String vehicleType = param.getString("vehicle_type"); + // 泥料物料对应不出物料标识 + String materialCode = param.getString("material_code"); // 泥料编码 + String mixTimes = param.getString("mix_number"); // 碾次 + // 载具类型默认料盅 + if (vehicleType == null) { + vehicleType = GeneralDefinition.MATERIAL_CUP; + } + String deviceCode = param.getString("device_code"); + BigDecimal weight = param.getBigDecimal("weight"); + SchBasePoint basePoint = pointService.getOne(new LambdaQueryWrapper() + .eq(SchBasePoint::getPoint_code, deviceCode) + .eq(SchBasePoint::getIs_used, true)); + if (vehicleCode == null || vehicleCode.equals(GeneralDefinition.NO)) { + throw new BadRequestException("载具编码不能为空"); + } + // 找到相同组盘信息就直接返回id,避免任务取消组盘信息还存在,重复插入 + // 找到不直接返回,用那条数据进行修改 + SchBaseVehiclematerialgroup groupEntity = vehiclematerialgroupService.getGroupInfo(vehicleCode, vehicleType, + GroupBindMaterialStatusEnum.BOUND.getValue()); + if (groupEntity == null) { + groupEntity = new SchBaseVehiclematerialgroup(); + groupEntity.setGroup_id(IdUtil.getSnowflake(1, 1).nextIdStr()); + } + // 要把数据存到组盘表 + groupEntity.setMaterial_id(GeneralDefinition.UNKNOWN); // 物料标识等任务完成后赋值 + groupEntity.setRedundance_material_code(materialCode); + groupEntity.setCreate_id(GeneralDefinition.ACS_ID); + groupEntity.setCreate_name(GeneralDefinition.ACS_NAME); + groupEntity.setCreate_time(DateUtil.now()); + groupEntity.setVehicle_code(vehicleCode); + groupEntity.setVehicle_type(vehicleType); + groupEntity.setSource_vehicle_code(basePoint.getPoint_code()); + groupEntity.setPoint_code(basePoint.getPoint_code()); // 当前位置 + groupEntity.setPoint_name(basePoint.getPoint_name()); + groupEntity.setMove_way(basePoint.getPoint_code()); // 头次 + groupEntity.setMix_times(mixTimes); // 碾次 + groupEntity.setInstorage_time(DateUtil.now()); + groupEntity.setMaterial_weight(ObjectUtil.isNotEmpty(weight)// 重量 + ? weight + : BigDecimal.valueOf(0)); + groupEntity.setGroup_bind_material_status(GroupBindMaterialStatusEnum.BOUND.getValue()); // 待绑定 + groupEntity.setGroup_status(GroupStatusEnum.IN_STORAGE.getType()); // 暂时不维护。 + groupEntity.setIs_delete(false); + vehiclematerialgroupService.saveOrUpdate(groupEntity); + return groupEntity.getGroup_id(); + } } diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java new file mode 100644 index 0000000..a3b4aa9 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.java @@ -0,0 +1,11 @@ +package org.nl.wms.sch.task_manage.task.tasks.hn.mapper; + +import org.springframework.stereotype.Service; + +/** + * @Author: lyd + * @Description: + * @Date: 2023/8/17 + */ +public interface HNMapper { +} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml new file mode 100644 index 0000000..00472c9 --- /dev/null +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/hn/mapper/HNMapper.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java deleted file mode 100644 index 853b881..0000000 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZQLTask.java +++ /dev/null @@ -1,183 +0,0 @@ -package org.nl.wms.sch.task_manage.task.tasks.yz; - -import cn.hutool.core.lang.Assert; -import cn.hutool.core.util.ObjectUtil; -import com.alibaba.fastjson.JSONObject; -import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import lombok.extern.slf4j.Slf4j; -import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; -import org.nl.wms.sch.group.service.dao.SchBaseVehiclematerialgroup; -import org.nl.wms.sch.point.service.ISchBasePointService; -import org.nl.wms.sch.point.service.dao.SchBasePoint; -import org.nl.wms.sch.task.service.ISchBaseTaskService; -import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; -import org.nl.wms.sch.task.service.dao.SchBaseTask; -import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; -import org.nl.wms.sch.task_manage.AbstractTask; -import org.nl.wms.sch.task_manage.enums.GroupBindMaterialStatusEnum; -import org.nl.wms.sch.task_manage.enums.PointStatusEnum; -import org.nl.wms.sch.task_manage.task.TaskType; -import org.nl.wms.sch.task_manage.task.core.TaskStatus; -import org.nl.wms.util.PointUtils; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Component; - -import java.util.Arrays; -import java.util.List; -import java.util.stream.Collectors; - -/** - * @Author: lyd - * @Description: 压制缺料任务 - * @Date: 2023/5/25 - */ -@Slf4j -@Component -@TaskType("YZQLTask") -public class YZQLTask extends AbstractTask { - private static String TASK_CONFIG_CODE = "YZQLTask"; - - @Autowired - private ISchBasePointService pointService; - @Autowired - private ISchBaseTaskService taskService; - @Autowired - private ISchBaseTaskconfigService taskConfigService; - @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private IPdmBdWorkorderService workorderService; - - @Override - protected void create() throws BadRequestException { - // 获取任务 - List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); - // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE); - for (SchBaseTask task : tasks) { - List startRegionStr = Arrays.stream(taskConfig.getStart_region_str().split(",")).collect(Collectors.toList()); - // 找起点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); - jsonObject.put("vehicle_type", task.getVehicle_type()); - SchBasePoint point = findStartPoint(startRegionStr, jsonObject); - if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); - // 消息通知 - continue; - } - // 设置起点并修改创建成功状态 - task.setPoint_code1(point.getPoint_code()); - task.setTask_status(TaskStatus.CREATED.getCode()); - task.setVehicle_code(point.getVehicle_code()); - taskService.update(task); - - point.setIng_task_code(task.getTask_code()); - pointService.update(point); - - //下发 -// this.renotifyAcs(task); - } - } - - /** - * 找起点业务:根据起点区域寻找所需点位, 必须要工单 - * - * @param startRegionStr : 区域列表 - * @param extGroupData : 外部参数,包含条件所需的信息 - * @return - * @description : JSONObject获取不到就是null - */ - private SchBasePoint findStartPoint(List startRegionStr, JSONObject extGroupData) { - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper().eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - Assert.notNull(workOrder, "工单不能为空!"); - String vehicleType = workOrder.getVehicle_type(); - String materialId = workOrder.getMaterial_id(); - int standingTime = workOrder.getStanding_time(); // 静置时间 - Assert.notNull(materialId, "物料不能为空!"); - Assert.notNull(vehicleType, "载具类型不能为空!"); - Assert.notNull(standingTime, "静置时间不能为空!"); - // 找到所需要物料的载具编号 - List list = vehiclematerialgroupService.list(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getMaterial_id, materialId) - .eq(SchBaseVehiclematerialgroup::getVehicle_type, vehicleType) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue()) - .apply("DATE_ADD(instorage_time, INTERVAL " + standingTime + " MINUTE) <= NOW()") - .orderByAsc(SchBaseVehiclematerialgroup::getPoint_code)); - // 获取第一个 - SchBaseVehiclematerialgroup vehiclematerialgroup = ObjectUtil.isNotEmpty(list) ? list.get(0) : null; - if (ObjectUtil.isEmpty(vehiclematerialgroup)) return null; - SchBasePoint one = pointService.getOne(new LambdaQueryWrapper() - .in(SchBasePoint::getRegion_code, startRegionStr) - .eq(SchBasePoint::getPoint_status, PointStatusEnum.FULL_POINT.getCode()) - .eq(SchBasePoint::getVehicle_code, vehiclematerialgroup.getVehicle_code()) - .eq(SchBasePoint::getVehicle_type, vehicleType)); - return one; - } - - - @Override - protected void updateStatus(String task_code, TaskStatus status) { - // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); - if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { - throw new BadRequestException("该任务已完成!"); - } - if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { - throw new BadRequestException("该任务已取消!"); - } - // 获取参数 - String startPoint = taskObj.getPoint_code1(); // 起点 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - SchBasePoint startPointObj = pointService.getById(startPoint); - // 根据传来的类型去对任务进行操作 - if (status.equals(TaskStatus.EXECUTING)) { // 执行中 - taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); - taskObj.setRemark("执行中"); - } - if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 任务上有载具编码 -> 获取当前载具编码的组盘信息 - SchBaseVehiclematerialgroup one = vehiclematerialgroupService.getOne(new LambdaQueryWrapper() - .eq(SchBaseVehiclematerialgroup::getVehicle_code, taskObj.getVehicle_code()) - .eq(SchBaseVehiclematerialgroup::getVehicle_type, taskObj.getVehicle_type()) - .eq(SchBaseVehiclematerialgroup::getGroup_bind_material_status, GroupBindMaterialStatusEnum.BOUND.getValue())); - // 将载具设置为已解绑 - one.setGroup_bind_material_status(GroupBindMaterialStatusEnum.UNBOUND.getValue()); - vehiclematerialgroupService.update(one); - // 释放点位,将点位设置为空位,清空数据 - if (ObjectUtil.isNotEmpty(startPointObj)) { - PointUtils.clearPoint(startPointObj); - } - // 任务修改成完成 - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - } - if (status.equals(TaskStatus.CANCELED)) { // 取消 - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - // 释放点位,起点正在执行的任务清空 - if (ObjectUtil.isNotEmpty(startPointObj)) { - startPointObj.setIng_task_code(""); - pointService.update(startPointObj); - } - } - taskService.update(taskObj); - } - - @Override - public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); - } - - @Override - public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); - } -} diff --git a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java index 0719920..9f40b11 100644 --- a/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java +++ b/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch/task_manage/task/tasks/yz/YZSKTask.java @@ -4,9 +4,7 @@ import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import org.nl.common.exception.BadRequestException; -import org.nl.wms.pdm.workorder.service.IPdmBdWorkorderService; -import org.nl.wms.pdm.workorder.service.dao.PdmBdWorkorder; -import org.nl.wms.sch.group.service.ISchBaseVehiclematerialgroupService; +import org.nl.system.service.notice.ISysNoticeService; import org.nl.wms.sch.point.service.ISchBasePointService; import org.nl.wms.sch.point.service.dao.SchBasePoint; import org.nl.wms.sch.task.service.ISchBaseTaskService; @@ -14,11 +12,17 @@ import org.nl.wms.sch.task.service.ISchBaseTaskconfigService; import org.nl.wms.sch.task.service.dao.SchBaseTask; import org.nl.wms.sch.task.service.dao.SchBaseTaskconfig; import org.nl.wms.sch.task_manage.AbstractTask; +import org.nl.wms.sch.task_manage.GeneralDefinition; +import org.nl.wms.sch.task_manage.enums.NoticeTypeEnum; import org.nl.wms.sch.task_manage.enums.PointStatusEnum; +import org.nl.wms.sch.task_manage.enums.TaskFinishedTypeEnum; import org.nl.wms.sch.task_manage.task.TaskType; import org.nl.wms.sch.task_manage.task.core.TaskStatus; +import org.nl.wms.util.PointUtils; +import org.nl.wms.util.TaskUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component; +import org.springframework.transaction.annotation.Transactional; import java.util.Arrays; import java.util.List; @@ -26,14 +30,13 @@ import java.util.stream.Collectors; /** * @Author: lyd - * @Description: 压制送空载具任务 + * @Description: 压制送空盅任务 * @Date: 2023/5/25 */ @Component @TaskType("YZSKTask") public class YZSKTask extends AbstractTask { private static String TASK_CONFIG_CODE = "YZSKTask"; - @Autowired private ISchBasePointService pointService; @Autowired @@ -41,64 +44,72 @@ public class YZSKTask extends AbstractTask { @Autowired private ISchBaseTaskconfigService taskConfigService; @Autowired - private ISchBaseVehiclematerialgroupService vehiclematerialgroupService; - @Autowired - private IPdmBdWorkorderService workorderService; + private ISysNoticeService noticeService; + @Override + @Transactional(rollbackFor = Exception.class) protected void create() throws BadRequestException { // 获取任务 List tasks = taskService.findTasksByTaskStatus(TASK_CONFIG_CODE, TaskStatus.APPLY); // 配置信息 - SchBaseTaskconfig taskConfig = taskConfigService.getById(TASK_CONFIG_CODE); + SchBaseTaskconfig taskConfig = taskConfigService.getOne(new LambdaQueryWrapper() + .eq(SchBaseTaskconfig::getConfig_code, TASK_CONFIG_CODE)); for (SchBaseTask task : tasks) { - List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")).collect(Collectors.toList()); + TaskUtils.setUpdateByAcs(task); // 修改修改者 + List nextRegionStr = Arrays.stream(taskConfig.getNext_region_str().split(",")) + .collect(Collectors.toList()); // 找终点 - String extGroupData = task.getExt_group_data(); - JSONObject jsonObject = JSONObject.parseObject(extGroupData); + String requestParam = task.getRequest_param(); + JSONObject jsonObject = JSONObject.parseObject(requestParam); SchBasePoint point = findNextPoint(nextRegionStr, jsonObject); + String vehicleType = jsonObject.getString("vehicle_type"); if (ObjectUtil.isEmpty(point)) { - task.setRemark("未找到所需点位!"); - taskService.update(task); + task.setRemark("送空盅任务未找到混料机空位!"); + taskService.updateById(task); // 消息通知 + noticeService.createNotice(task.getRemark(), TASK_CONFIG_CODE + task.getTask_code(), + NoticeTypeEnum.WARN.getCode()); continue; } // 设置终点并修改创建成功状态 task.setPoint_code2(point.getPoint_code()); task.setTask_status(TaskStatus.CREATED.getCode()); - taskService.update(task); + if (task.getVehicle_type() == null) { + task.setVehicle_type(vehicleType != null ? vehicleType : GeneralDefinition.MATERIAL_CUP); + } + taskService.updateById(task); point.setIng_task_code(task.getTask_code()); - pointService.update(point); + PointUtils.setUpdateByAcs(point); + pointService.updateById(point); //下发 -// this.renotifyAcs(task); + //this.renotifyAcs(task); } } /** - * 寻找终点 + * 在混料区域找一个空位放着 * * @param nextRegionStr - * @param extGroupData + * @param requestParam * @return */ - private SchBasePoint findNextPoint(List nextRegionStr, JSONObject extGroupData) { - String workorderCode = extGroupData.getString("workorder_code"); - PdmBdWorkorder workOrder = ObjectUtil.isNotEmpty(workorderCode) - ? workorderService.getOne(new LambdaQueryWrapper() - .eq(PdmBdWorkorder::getWorkorder_code, workorderCode)) - : null; - String vehicleType = ObjectUtil.isNotEmpty(workOrder) && ObjectUtil.isNotEmpty(workOrder.getVehicle_type()) - ? workOrder.getVehicle_type() - : null; + private SchBasePoint findNextPoint(List nextRegionStr, JSONObject requestParam) { + String vehicleType = ObjectUtil.isNotEmpty(requestParam.getString("vehicle_type")) + ? requestParam.getString("vehicle_type") + : GeneralDefinition.MATERIAL_CUP; // 载具已经设置可为空,当不需要校验工单时候也不会出现空指针 LambdaQueryWrapper lam = new LambdaQueryWrapper<>(); - lam.eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) - .like(vehicleType != null, SchBasePoint::getCan_vehicle_type, vehicleType) + lam.in(SchBasePoint::getRegion_code, nextRegionStr) + .eq(SchBasePoint::getPoint_status, PointStatusEnum.EMPTY_POINT.getCode()) + .like(SchBasePoint::getCan_vehicle_type, vehicleType) + .eq(SchBasePoint::getPoint_type, GeneralDefinition.DOCKING_POINT) // 对接位 .and(la -> la.isNull(SchBasePoint::getIng_task_code) // 当前执行的任务为空或者NULL,有数据表示锁住 .or() .eq(SchBasePoint::getIng_task_code, "")) + .eq(SchBasePoint::getIs_used, true) .orderByAsc(SchBasePoint::getIn_order_seq) .orderByAsc(SchBasePoint::getPoint_code); List schBasePoints = pointService.list(lam); @@ -106,58 +117,87 @@ public class YZSKTask extends AbstractTask { } @Override + @Transactional(rollbackFor = Exception.class) protected void updateStatus(String task_code, TaskStatus status) { // 校验任务 - SchBaseTask taskObj = taskService.getById(task_code); + SchBaseTask taskObj = taskService.getByCode(task_code); if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { throw new BadRequestException("该任务已完成!"); } if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { throw new BadRequestException("该任务已取消!"); } - // 获取参数 - String endPoint = taskObj.getPoint_code2(); // 获取终点 - String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) ? taskObj.getVehicle_type() : ""; - // 获取外部参数 - JSONObject extGroupData = ObjectUtil.isNotEmpty(taskObj.getExt_group_data()) - ? JSONObject.parseObject(taskObj.getExt_group_data()) - : null; - SchBasePoint endPointObj = pointService.getById(endPoint); // 根据传来的类型去对任务进行操作 if (status.equals(TaskStatus.EXECUTING)) { // 执行中 taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); taskObj.setRemark("执行中"); + TaskUtils.setUpdateByAcs(taskObj); + taskService.updateById(taskObj); } if (status.equals(TaskStatus.FINISHED)) { // 完成 - // 设置载具类型、点位状态、释放点位 - if (ObjectUtil.isNotEmpty(endPoint)) { - endPointObj.setIng_task_code(""); - endPointObj.setVehicle_type(vehicleType); - endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); - pointService.update(endPointObj); - } - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("任务完成"); + this.finishTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } if (status.equals(TaskStatus.CANCELED)) { // 取消 - // 释放点位 - if (ObjectUtil.isNotEmpty(endPoint)) { - endPointObj.setIng_task_code(""); - pointService.update(endPointObj); - } - taskObj.setTask_status(TaskStatus.CANCELED.getCode()); - taskObj.setRemark("任务取消"); + this.cancelTask(taskObj, TaskFinishedTypeEnum.AUTO_ACS); } - taskService.update(taskObj); } @Override public void forceFinish(String task_code) { - this.updateStatus(task_code, TaskStatus.FINISHED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); } @Override public void cancel(String task_code) { - this.updateStatus(task_code, TaskStatus.CANCELED); + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.cancelTask(taskObj, TaskFinishedTypeEnum.MANUAL_PC); + } + + public void finishTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + String vehicleType = ObjectUtil.isNotEmpty(taskObj.getVehicle_type()) + ? taskObj.getVehicle_type() + : GeneralDefinition.MATERIAL_CUP; + SchBasePoint endPointObj = pointService.getById(endPoint); + // 设置载具类型、点位状态、释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + endPointObj.setVehicle_type(vehicleType); + endPointObj.setVehicle_qty(1); + endPointObj.setVehicle_code(taskObj.getVehicle_code()); + endPointObj.setPoint_status(PointStatusEnum.EMPTY_VEHICLE.getCode()); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark(GeneralDefinition.TASK_FINISH); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); // 区分完成者 + taskService.updateById(taskObj); + } + + public void cancelTask(SchBaseTask taskObj, TaskFinishedTypeEnum taskFinishedType) { + // 获取参数 + String endPoint = taskObj.getPoint_code2(); // 获取终点 + SchBasePoint endPointObj = pointService.getById(endPoint); + // 释放点位 + if (ObjectUtil.isNotEmpty(endPoint)) { + endPointObj.setIng_task_code(""); + PointUtils.setUpdateByType(endPointObj, taskFinishedType); + pointService.updateById(endPointObj); + } + taskObj.setRemark(GeneralDefinition.TASK_CANCEL); + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setFinished_type(taskFinishedType.getCode()); + TaskUtils.setUpdateByType(taskObj, taskFinishedType); + taskService.updateById(taskObj); } } diff --git a/nladmin-ui/src/views/wms/ext/record/index.vue b/nladmin-ui/src/views/wms/ext/record/index.vue new file mode 100644 index 0000000..3a0ebd1 --- /dev/null +++ b/nladmin-ui/src/views/wms/ext/record/index.vue @@ -0,0 +1,233 @@ + + + + + diff --git a/nladmin-ui/src/views/wms/ext/record/sysInteractRecord.js b/nladmin-ui/src/views/wms/ext/record/sysInteractRecord.js new file mode 100644 index 0000000..9f6d776 --- /dev/null +++ b/nladmin-ui/src/views/wms/ext/record/sysInteractRecord.js @@ -0,0 +1,27 @@ +import request from '@/utils/request' + +export function add(data) { + return request({ + url: 'api/sysInteractRecord', + method: 'post', + data + }) +} + +export function del(ids) { + return request({ + url: 'api/sysInteractRecord/', + method: 'delete', + data: ids + }) +} + +export function edit(data) { + return request({ + url: 'api/sysInteractRecord', + method: 'put', + data + }) +} + +export default { add, edit, del }