From fa98960659e894357a504ee8f34350c4112890b9 Mon Sep 17 00:00:00 2001 From: tuqiang <437016993@qq.com> Date: Thu, 27 Feb 2025 10:43:17 +0800 Subject: [PATCH] =?UTF-8?q?rev:=E4=BB=A3=E7=A0=81=E4=BC=98=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/java/org/nl/acs/AcsConfig.java | 4 + .../run/TwoNDCSocketConnectionAutoRun.java | 2 + .../agv/ndctwo/AgvNdcTwoDeviceDriver.java | 22 +++ .../wms/service/impl/SpxToAcsServiceImpl.java | 40 +++++ .../service/impl/InstructionServiceImpl.java | 8 +- .../task/service/impl/WorkServiceImpl.java | 43 ++++- .../task/service/impl/TaskServiceImpl.java | 13 +- .../nl/hand/controller/HandController.java | 2 +- .../org/nl/hand/controller/PdaController.java | 13 ++ .../java/org/nl/hand/service/PdaService.java | 5 + .../nl/hand/service/dao/mapper/PdaMapper.java | 3 + .../nl/hand/service/dao/mapper/PdaMapper.xml | 84 +++++---- .../nl/hand/service/impl/HandServiceImpl.java | 2 +- .../nl/hand/service/impl/PdaServiceImpl.java | 164 +++++++++++++++--- .../java/org/nl/hand/service/vo/PointVo.java | 16 ++ .../java/org/nl/hand/service/vo/WorkVo.java | 1 + .../src/views/acs/material/index.vue | 2 + acs/nladmin-ui/src/views/acs/point/index.vue | 2 +- acs/nladmin-ui/src/views/acs/task/index.vue | 37 ++-- acs/nladmin-ui/src/views/acs/work/index.vue | 2 +- .../src/views/system/param/index.vue | 14 +- 21 files changed, 386 insertions(+), 93 deletions(-) create mode 100644 acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java index 861eb82..84d202b 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/AcsConfig.java @@ -143,4 +143,8 @@ public interface AcsConfig { * 选择A点还是B点 */ String CHOOSE = "choose"; + /** + * 标准桶重 + */ + String WEIGHT = "weight"; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java index 10371b7..01d5373 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/auto/run/TwoNDCSocketConnectionAutoRun.java @@ -18,6 +18,8 @@ import org.nl.acs.instruction.service.InstructionService; import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.point.domain.AcsPoint; +import org.nl.acs.point.service.IAcsPointService; import org.nl.config.SpringContextHolder; import org.nl.config.lucene.service.LuceneExecuteLogService; import org.nl.config.lucene.service.dto.LuceneLogDto; diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java index fa88f0d..706370c 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/device_driver/agv/ndctwo/AgvNdcTwoDeviceDriver.java @@ -29,6 +29,8 @@ import org.nl.acs.instruction.service.impl.InstructionServiceImpl; import org.nl.acs.log.service.DeviceExecuteLogService; import org.nl.acs.monitor.DeviceStageMonitor; import org.nl.acs.opc.DeviceAppService; +import org.nl.acs.point.domain.AcsPoint; +import org.nl.acs.point.service.IAcsPointService; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.acs.task.service.impl.TaskServiceImpl; @@ -36,6 +38,7 @@ import org.nl.config.lucene.service.LuceneExecuteLogService; import org.nl.config.lucene.service.dto.LuceneLogDto; import org.nl.system.service.param.ISysParamService; import org.nl.config.SpringContextHolder; +import org.springframework.beans.factory.annotation.Autowired; import java.util.Map; @@ -58,6 +61,7 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic DeviceErrorLogService deviceErrorLogService = SpringContextHolder.getBean(DeviceErrorLogServiceImpl.class); DeviceService deviceService = SpringContextHolder.getBean(DeviceService.class); LuceneExecuteLogService luceneExecuteLogService = SpringContextHolder.getBean(LuceneExecuteLogService.class); + IAcsPointService acsPointService = SpringContextHolder.getBean(IAcsPointService.class); TwoAgvPhase twoAgvPhase = new TwoAgvPhase(); String error_code = "0"; @@ -283,6 +287,15 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(inst)) { + AcsPoint point = acsPointService.findByCode(inst.getStart_device_code()); + if (ObjectUtil.isNotEmpty(point)) { + point.setPoint_status("0"); + acsPointService.update(point); + } else { + log.info("未找到指令号{}对应的终点设备", ikey); + } + } data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() .device_code(this.getDeviceCode()) @@ -407,6 +420,15 @@ public class AgvNdcTwoDeviceDriver extends AbstractDeviceDriver implements Devic } if (device.getDeviceDriver() instanceof StandardOrdinarySiteDeviceDriver) { standardOrdinarySiteDeviceDriver = (StandardOrdinarySiteDeviceDriver) device.getDeviceDriver(); + if (ObjectUtil.isNotEmpty(inst)) { + AcsPoint point = acsPointService.findByCode(inst.getNext_device_code()); + if (ObjectUtil.isNotEmpty(point)) { + point.setPoint_status("1"); + acsPointService.update(point); + } else { + log.info("未找到指令号{}对应的终点设备", ikey); + } + } data = ndcAgvService.sendAgvOneModeInst(phase, index, 0); LuceneLogDto logDto = LuceneLogDto.builder() .device_code(this.getDeviceCode()) diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java index 9a7f09a..ad81f9f 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/ext/wms/service/impl/SpxToAcsServiceImpl.java @@ -7,6 +7,10 @@ import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.AcsConfig; +import org.nl.acs.data.domain.Materialbase; +import org.nl.acs.data.service.IMaterialbaseService; +import org.nl.acs.data.service.impl.MaterialbaseServiceImpl; import org.nl.acs.ext.wms.service.SpxToAcsService; import org.nl.acs.order.mapper.OrderMapper; import org.nl.acs.order.service.OrderDetailService; @@ -19,6 +23,7 @@ import org.nl.acs.product.service.IProductdtlService; import org.nl.acs.sch.task.service.ISchBaseTaskService; import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; +import org.nl.system.service.param.ISysParamService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.stereotype.Service; @@ -41,6 +46,12 @@ public class SpxToAcsServiceImpl implements SpxToAcsService { @Autowired private OrderDetailService orderDetailService; + @Autowired + private IMaterialbaseService materialbaseService; + @Autowired + ISysParamService paramService; + @Autowired + private OrderService orderService; @Override @@ -77,6 +88,17 @@ public class SpxToAcsServiceImpl implements SpxToAcsService { return; } String productionNr = jsonObject.getString("ProductionNr"); + List orderDtos = orderService.lambdaQuery() + .eq(OrderDto::getMfg_order_name, productionNr) + .list(); + if (orderDtos.size() > 0) { + JSONObject jo = new JSONObject(); + jo.put("ID", id); + jo.put("message", "已存在对应工单"); + errArr.add(jo); + return; + } + String recipeName = jsonObject.getString("RecipeName"); String recipeCode = jsonObject.getString("RecipeCode"); Float quantity = jsonObject.getFloatValue("Quantity"); @@ -87,9 +109,12 @@ public class SpxToAcsServiceImpl implements SpxToAcsService { if (lineID == null) { lineID = 0; } + String currentUserId = SecurityUtils.getCurrentUserId(); String startTime = jsonObject.getString("StartTime"); JSONArray components = Optional.ofNullable(jsonObject.getJSONArray("Components")).orElse(new JSONArray()); List list = new ArrayList<>(); + List materiallist = new ArrayList<>(); + String weight = paramService.findByCode(AcsConfig.WEIGHT).getValue(); // 工单明细表插入 for (int j = 0; j < components.size(); j++) { JSONObject jo = components.getJSONObject(j); @@ -101,6 +126,20 @@ public class SpxToAcsServiceImpl implements SpxToAcsService { } String unit = jo.getString("Unit"); OrderDetailDto orderDetailDto = new OrderDetailDto(); + Materialbase code = materialbaseService.findByCode(product_code); + if (code == null) { + Materialbase materialbase = new Materialbase(); + materialbase.setMaterial_code(product_code) + .setMaterial_id(IdUtil.getSnowflake(1, 1).nextId() + "") + .setMaterial_name(componentName) + .setBase_unit_id(unit) + .setQty(Float.parseFloat(weight)) + .setCreate_id(Long.getLong(currentUserId)) + .setCreate_name(currentNickName) + .setCreate_time(currentTime); + + materiallist.add(materialbase); + } orderDetailDto.setMaterial_id(IdUtil.getSnowflake(1, 1).nextId() + "") .setSeq_no(j + 1) .setMaterial_code(product_code) @@ -113,6 +152,7 @@ public class SpxToAcsServiceImpl implements SpxToAcsService { .setCreate_time(currentTime); list.add(orderDetailDto); } + materialbaseService.saveBatch(materiallist); orderDetailService.saveBatch(list); // 插入工单表 OrderDto dto = new OrderDto(); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java index 624fc41..7f1b228 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/instruction/service/impl/InstructionServiceImpl.java @@ -1176,8 +1176,12 @@ public class InstructionServiceImpl extends CommonServiceImpl implements WorkService { + private static final List VALID_STATUS = Arrays.asList("0", "1"); @Autowired private WorkMapper workMapper; @Autowired @@ -160,6 +163,13 @@ public class WorkServiceImpl extends ServiceImpl implements Wo if (StrUtil.equals(CommonFinalParam.FINISHED, work.getStatus())) { throw new BadRequestException("该配料任务已完成!"); } + List list = taskService.lambdaQuery() + .in(Task::getTask_status, VALID_STATUS) + .list(); + if (list.size()>0) { + throw new BadRequestException("已存在正在执行中或者就绪的AGV任务!"); + } + String mfg_order_name = work.getMfg_order_name(); OrderDto dto = orderService.findByCode(mfg_order_name); if (ObjectUtil.isEmpty(dto)){ @@ -176,6 +186,25 @@ public class WorkServiceImpl extends ServiceImpl implements Wo throw new BadRequestException("工单起点和终点未确认!"); } + AcsPoint startPoint = acsPointService.lambdaQuery() + .eq(AcsPoint::getPoint_code, "QZJYTW2") + .one(); + AcsPoint nextPoint = acsPointService.lambdaQuery() + .eq(AcsPoint::getPoint_code,taskDto.getNext_device_code()) + .one(); + if (ObjectUtil.isEmpty(nextPoint)) { + throw new BadRequestException("终点设备不存在"); + } + if (!nextPoint.getIs_used().booleanValue() || nextPoint.getPoint_status().equals(CommonFinalParam.ONE)) { + throw new BadRequestException("下发任务失败的原因是:终点点位被禁用或者终点点位有货,请检查起点点位"+nextPoint.getPoint_code()+"的状态!"); + } + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("起点设备不存在"); + } + if (!startPoint.getIs_used().booleanValue() || startPoint.getPoint_status().equals(CommonFinalParam.ZERO)) { + throw new BadRequestException("下发任务失败的原因是:起点点位被禁用或者起点点位无货,请检查起点点位"+startPoint.getPoint_code()+"的状态!"); + } + taskDto.setStart_device_code("QZJYTW2"); taskDto.setTask_type(CommonFinalParam.ONE); taskDto.setAgv_system_type(CommonFinalParam.TWO); @@ -194,16 +223,16 @@ public class WorkServiceImpl extends ServiceImpl implements Wo } work.setRemain_num(work.getRemain_num() - 1); //当前数量为0,则修改状态为已完成 - if (work.getRemain_num() == 0) { - work.setStatus(TaskStatus.FINISHED.getCode()); - } +// if (work.getRemain_num() == 0) { +// work.setStatus(TaskStatus.FINISHED.getCode()); +// } workMapper.updateById(work); List works = workMapper.selectList(Wrappers.lambdaQuery(Work.class).eq(Work::getMfg_order_name, mfg_order_name).eq(Work::getStatus, TaskStatus.FINISHED.getCode())); // 工单所有配料任务都完成,则工单状态改为已完成 - if (works.size() == dto.getDetail_count()) { - dto.setStatus(CommonFinalParam.FINISHED); - orderService.update(dto); - } +// if (works.size() == dto.getDetail_count()) { +// dto.setStatus(CommonFinalParam.FINISHED); +// orderService.update(dto); +// } } @Override diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java index ad70911..810635e 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/acs/task/service/impl/TaskServiceImpl.java @@ -783,7 +783,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme @Transactional(rollbackFor = Exception.class) public void finish(TaskIdAndStatusDTO taskIdAndStatus) { TaskDto entity = this.findById(taskIdAndStatus.getTask_id()); - TaskDto updateTask = this.findById(taskIdAndStatus.getTask_id()); if (entity == null) { throw new BadRequestException(LangProcess.msg("error_sysAuth")); } @@ -802,14 +801,6 @@ public class TaskServiceImpl extends CommonServiceImpl impleme taskMapper.updateById(task); //移除任务缓存信息 this.removeByCodeFromCache(entity.getTask_code()); - if (!TaskStatusEnum.FINISHED.getIndex().equals(updateTask.getTask_status())) { - //反馈上位系统任务状态 - this.feedWmsTaskStatus(entity); - //关闭仙工运单序列 - if (StrUtil.equals(task.getTask_type(), TaskTypeEnum.Standard_AGV_Task.getCode())) { - this.markComplete(entity); - } - } } @Override @@ -985,8 +976,8 @@ public class TaskServiceImpl extends CommonServiceImpl impleme log.info("未找到对应的AGV指令类型,任务号:" + acsTask.getTask_code() + ",task_type:" + acsTask.getTask_type()); } instructionservice.create2(instdto); -// acsTask.setTask_status(CommonFinalParam.ONE); -// this.update(acsTask); + acsTask.setTask_status(CommonFinalParam.ONE); + this.update(acsTask); return instdto; } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java index b3ef776..3a455b9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/HandController.java @@ -46,7 +46,7 @@ public class HandController { return new ResponseEntity<>(handService.confirm(whereJson),HttpStatus.OK); } - @Log("确认配料作业") + @Log("确认终点设备") @PostMapping(value = "/confirmZZDevice") public ResponseEntity confirmZZDevice(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(handService.confirmZZDevice(whereJson),HttpStatus.OK); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java index 3d1007b..dee19b9 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/controller/PdaController.java @@ -44,6 +44,19 @@ public class PdaController { return new ResponseEntity<>(pdaService.queryWorks(whereJson), HttpStatus.OK); } + @PostMapping("/queryPoints") + @Log("点位查询") + public ResponseEntity queryPoints() { + return new ResponseEntity<>(pdaService.queryPoints(), HttpStatus.OK); + } + + @PostMapping("/operation") + @Log("更新点位状态") + public ResponseEntity operation(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaService.operation(whereJson), HttpStatus.OK); + } + + @PostMapping("/queryDevices") @Log("查询所有点位") @ApiOperation("查询所有点位") diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java index 95540ed..ff62bee 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/PdaService.java @@ -6,6 +6,7 @@ import org.nl.acs.sch.task.service.dao.Work; import org.nl.hand.service.dao.dto.PdaDto; import org.nl.hand.service.dao.vo.PdaResponseVo; import org.nl.hand.service.vo.OrderVo; +import org.nl.hand.service.vo.PointVo; import org.nl.hand.service.vo.WorkVo; import java.util.List; @@ -27,6 +28,8 @@ public interface PdaService { List queryWorks(JSONObject whereJson); + List queryPoints(); + List getExcWorks(); PdaResponseVo sendWork(JSONObject whereJson); @@ -41,4 +44,6 @@ public interface PdaService { PdaResponseVo pause(JSONObject whereJson); + PdaResponseVo operation(JSONObject whereJson); + } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java index fcffccb..b6583d3 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.java @@ -2,6 +2,7 @@ package org.nl.hand.service.dao.mapper; import org.apache.ibatis.annotations.Param; import org.nl.hand.service.vo.OrderVo; +import org.nl.hand.service.vo.PointVo; import org.nl.hand.service.vo.WorkVo; import java.util.List; @@ -13,4 +14,6 @@ public interface PdaMapper { List getWorks(@Param("mfg_order_name") String mfg_order_name); List getExcWorks(); + + List getPoints(); } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml index c839743..e0ee017 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/dao/mapper/PdaMapper.xml @@ -12,6 +12,7 @@ Case status WHEN '0' THEN '就绪' WHEN '1' THEN '执行中' + WHEN '4' THEN '暂停' ELSE '' END AS status, realstart_time, @@ -21,47 +22,68 @@ order by realstart_time ASC + diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java index c5b99b4..c50f814 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/HandServiceImpl.java @@ -44,7 +44,7 @@ public class HandServiceImpl implements HandService { @Override public PdaResponseVo confirm(JSONObject whereJson) { Work work = workService.findByCode(whereJson.getString("work_code")); - if (work != null){ + if (work == null){ return PdaResponseVo.pdaResultOk("配料作业不存在"); } workService.confirm(work.getWork_id()); diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java index eb50db3..5170fbc 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/impl/PdaServiceImpl.java @@ -2,22 +2,35 @@ package org.nl.hand.service.impl; import cn.hutool.core.collection.CollectionUtil; import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.IdUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; import lombok.extern.slf4j.Slf4j; +import org.nl.acs.common.base.CommonFinalParam; +import org.nl.acs.data.domain.Materialbase; +import org.nl.acs.data.service.IMaterialbaseService; import org.nl.acs.device.domain.Device; import org.nl.acs.device.service.DeviceService; +import org.nl.acs.order.mapper.OrderDetailMapper; +import org.nl.acs.order.mapper.OrderMapper; import org.nl.acs.order.service.OrderService; +import org.nl.acs.order.service.dto.OrderDetailDto; import org.nl.acs.order.service.dto.OrderDto; +import org.nl.acs.point.domain.AcsPoint; +import org.nl.acs.point.service.IAcsPointService; import org.nl.acs.sch.task.service.WorkService; import org.nl.acs.sch.task.service.dao.Work; +import org.nl.acs.sch.task.service.dao.mapper.WorkMapper; import org.nl.acs.sch.task_manage.task.core.TaskStatus; +import org.nl.acs.task.domain.Task; import org.nl.acs.task.service.TaskService; import org.nl.acs.task.service.dto.TaskDto; import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; import org.nl.common.utils.SecurityUtils; import org.nl.config.language.LangProcess; import org.nl.hand.service.PdaService; @@ -25,16 +38,25 @@ import org.nl.hand.service.dao.dto.PdaDto; import org.nl.hand.service.dao.mapper.PdaMapper; import org.nl.hand.service.dao.vo.PdaResponseVo; import org.nl.hand.service.vo.OrderVo; +import org.nl.hand.service.vo.PointVo; import org.nl.hand.service.vo.WorkVo; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; -import java.util.List; -import java.util.Map; +import java.util.*; +import java.util.stream.Collectors; @Slf4j @Service public class PdaServiceImpl implements PdaService { + + private static final List VALID_REGIONS = Arrays.asList("1", "2"); + private static final List VALID_STATUS = Arrays.asList("0", "1"); + + @Autowired + private OrderMapper orderMapper; + @Autowired + private OrderDetailMapper orderDetailMapper; @Autowired private PdaMapper pdaMapper; @Autowired @@ -45,6 +67,14 @@ public class PdaServiceImpl implements PdaService { private DeviceService deviceService; @Autowired private TaskService taskserver; + @Autowired + private IMaterialbaseService materialbaseService; + @Autowired + private WorkMapper workMapper; + @Autowired + private TaskService taskService; + @Autowired + private IAcsPointService acsPointService; @Override public List queryOrders() { @@ -54,22 +84,54 @@ public class PdaServiceImpl implements PdaService { @Override public PdaResponseVo startOrder(JSONObject whereJson) { String mfg_order_name = whereJson.getString("mfg_order_name"); - if (StrUtil.isEmpty(mfg_order_name)){ - return PdaResponseVo.pdaResultOk("工单号为空!"); - } - OrderDto dto = orderService.findByCode(mfg_order_name); - if (ObjectUtil.isNull(dto)){ - return PdaResponseVo.pdaResultOk("工单不存在"); - } String currentUserId = SecurityUtils.getCurrentUserId(); String currentUsername = SecurityUtils.getCurrentUsername(); - dto.setStatus("1"); - dto.setRealstart_time(DateUtil.now()); - dto.setUpdate_optid(currentUserId); - dto.setUpdate_optname(currentUsername); - dto.setUpdate_time(DateUtil.now()); - orderService.updateById(dto); - return PdaResponseVo.pdaResultOk("工单:[" + dto.getMfg_order_name() + "]已开始"); + OrderDto orderDto = orderService.findByCode(mfg_order_name); + if (ObjectUtil.isNull(orderDto)&& "0".equals(orderDto.getStatus())) { + throw new BadRequestException("工单状态不为开始"); + } + orderDto.setStatus("1"); + orderDto.setRealstart_time(DateUtil.now()); + orderDto.setUpdate_optid(currentUserId); + orderDto.setUpdate_optname(currentUsername); + orderDto.setUpdate_time(DateUtil.now()); + //生成配料任务 + List list = orderDetailMapper.selectList(Wrappers.lambdaQuery(OrderDetailDto.class).eq(OrderDetailDto::getWorkorder_id, orderDto.getWorkorder_id())); + Set materialCodes = list.stream().map(OrderDetailDto::getMaterial_code).collect(Collectors.toSet()); + Map materialbaseMap = materialbaseService.findByCodes(materialCodes); + List works = new ArrayList<>(); + for (OrderDetailDto orderDetailDto : list) { + String material_code = orderDetailDto.getMaterial_code(); + if (material_code == null) { + throw new BadRequestException("物料编码不能为空"); + } + Materialbase materialbase = materialbaseMap.get(material_code); + if (materialbase == null) { + throw new BadRequestException("不存在物料编码为" + material_code + "的物料!"); + } + + int count = (int) Math.ceil((double) orderDetailDto.getProductin_qty() / materialbase.getQty()); + Work work = new Work(); + work.setWork_id(IdUtil.getSnowflake(1, 1).nextId() + "") + .setWork_code(CodeUtil.getNewCode("WORK_CODE")) + .setStatus("0") + .setSeq_no(orderDetailDto.getSeq_no()) + .setMfg_order_name(orderDetailDto.getMfg_order_name()) + .setMaterial_code(orderDetailDto.getMaterial_code()) + .setMaterial_name(orderDetailDto.getMaterial_name()) + .setResource_name(orderDto.getResource_name()) + .setRequire_num(count) + .setRemain_num(count) + .setQty(orderDetailDto.getProductin_qty()) + .setCreate_by(currentUsername) + .setCreate_time(DateUtil.now()) + .setUpdate_by(currentUsername) + .setUpdate_time(DateUtil.now()); + works.add(work); + } + workService.saveBatch(works); + orderMapper.updateById(orderDto); + return PdaResponseVo.pdaResultOk("工单:[" + orderDto.getMfg_order_name() + "]已开始"); } @Override @@ -131,6 +193,10 @@ public class PdaServiceImpl implements PdaService { } return pdaMapper.getWorks(whereJson.getString("mfg_order_name")); } + @Override + public List queryPoints() { + return pdaMapper.getPoints(); + } @Override public List getExcWorks() { @@ -177,6 +243,13 @@ public class PdaServiceImpl implements PdaService { } work.setStatus(TaskStatus.FINISHED.getCode()); workService.updateById(work); + OrderDto dto = orderService.findByCode(work.getMfg_order_name()); + List works = workMapper.selectList(Wrappers.lambdaQuery(Work.class).eq(Work::getMfg_order_name, work.getMfg_order_name()).eq(Work::getStatus, TaskStatus.FINISHED.getCode())); + // 工单所有配料任务都完成,则工单状态改为已完成 + if (works.size() == dto.getDetail_count()) { + dto.setStatus(CommonFinalParam.FINISHED); + orderService.update(dto); + } return PdaResponseVo.pdaResultOk("完成配料作业成功"); } @@ -184,9 +257,10 @@ public class PdaServiceImpl implements PdaService { public JSONArray queryAllPoints() { //查询所有设备 List list = deviceService.lambdaQuery() + .in(Device::getRegion, VALID_REGIONS) .list(); if (CollectionUtil.isEmpty(list)) { - throw new BadRequestException(LangProcess.msg("error_no_regional")); + throw new BadRequestException("未查询到设备!"); } JSONArray arr = JSONArray.parseArray(JSON.toJSONString(list)); JSONArray result = new JSONArray(); @@ -204,19 +278,41 @@ public class PdaServiceImpl implements PdaService { public Map callTask(PdaDto dto) { JSONArray errArr = new JSONArray(); String start_device_code = dto.getStart_device_code(); - String next_device_code = dto.getNext_device_code(); if (StrUtil.isEmpty(start_device_code)) { throw new BadRequestException("起点不能为空"); } - if (StrUtil.isEmpty(next_device_code)) { - throw new BadRequestException("终点不能为空"); + List list = taskService.lambdaQuery() + .in(Task::getTask_status, VALID_STATUS) + .list(); + if (list.size()>0) { + throw new BadRequestException("已存在正在执行中或者就绪的AGV任务!"); + } + + AcsPoint startPoint = acsPointService.lambdaQuery() + .eq(AcsPoint::getPoint_code, start_device_code) + .one(); + AcsPoint nextPoint = acsPointService.lambdaQuery() + .eq(AcsPoint::getPoint_code,"QZJYTW1") + .one(); + if (ObjectUtil.isEmpty(nextPoint)) { + throw new BadRequestException("终点设备不存在"); + } + if (!nextPoint.getIs_used().booleanValue() || nextPoint.getPoint_status().equals(CommonFinalParam.ONE)) { + throw new BadRequestException("下发任务失败的原因是:终点点位被禁用或者终点点位有货,请检查起点点位"+nextPoint.getPoint_code()+"的状态!"); + } + if (ObjectUtil.isEmpty(startPoint)) { + throw new BadRequestException("起点设备不存在"); } + if (!startPoint.getIs_used().booleanValue() || startPoint.getPoint_status().equals(CommonFinalParam.ZERO)) { + throw new BadRequestException("下发任务失败的原因是:起点点位被禁用或者起点点位无货,请检查起点点位"+startPoint.getPoint_code()+"的状态!"); + } + JSONObject jo = new JSONObject(); jo.put("start_device_code", start_device_code); - jo.put("next_device_code", next_device_code); + jo.put("next_device_code", "QZJYTW1"); jo.put("start_point_code", start_device_code); - jo.put("next_point_code", next_device_code); + jo.put("next_point_code", "QZJYTW1"); jo.put("task_type", "1"); jo.put("priority", "1"); @@ -251,4 +347,28 @@ public class PdaServiceImpl implements PdaService { workService.pause(work.getWork_id()); return PdaResponseVo.pdaResultOk("暂停成功"); } + + @Override + public PdaResponseVo operation(JSONObject whereJson) { + String point_code = whereJson.getString("point_code"); + String type = whereJson.getString("type");//1:点位状态修改有货,0:点位状态修改无货 + if (StrUtil.isEmpty(point_code)) { + return PdaResponseVo.pdaResultOk("点位为空"); + } + if (StrUtil.isEmpty(type)) { + return PdaResponseVo.pdaResultOk("类型为空"); + } + AcsPoint point = acsPointService.findByCode(point_code); + if (ObjectUtil.isEmpty(point)) { + return PdaResponseVo.pdaResultOk("点位不存在"); + } + if (type.equals("1")) { + point.setPoint_status("1"); + } + if (type.equals("0")) { + point.setPoint_status("0"); + } + acsPointService.updateById(point); + return PdaResponseVo.pdaResultOk("更新成功"); + } } diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java new file mode 100644 index 0000000..24f1276 --- /dev/null +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/PointVo.java @@ -0,0 +1,16 @@ +package org.nl.hand.service.vo; + +import lombok.Data; + +/** + * @Author: tq + * @Description: 点位查询 + * @Date: 2024/10/15 + */ +@Data +public class PointVo { + private String point_code;//点位编码 + private String point_name;//点位名称 + private String point_status;//点位状态 + private String is_used;//是否启用 +} diff --git a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java index b9fd253..de9b981 100644 --- a/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java +++ b/acs/nladmin-system/nlsso-server/src/main/java/org/nl/hand/service/vo/WorkVo.java @@ -14,6 +14,7 @@ public class WorkVo { private String mfg_order_name; private String material_code; private String material_name; + private String resource_name; private float qty; private String next_device_code; private int require_num; diff --git a/acs/nladmin-ui/src/views/acs/material/index.vue b/acs/nladmin-ui/src/views/acs/material/index.vue index 242e8fd..287d593 100644 --- a/acs/nladmin-ui/src/views/acs/material/index.vue +++ b/acs/nladmin-ui/src/views/acs/material/index.vue @@ -120,6 +120,8 @@ + + 禁用 diff --git a/acs/nladmin-ui/src/views/acs/task/index.vue b/acs/nladmin-ui/src/views/acs/task/index.vue index fae4a91..46ac37f 100644 --- a/acs/nladmin-ui/src/views/acs/task/index.vue +++ b/acs/nladmin-ui/src/views/acs/task/index.vue @@ -267,7 +267,6 @@ -