From b0d385b75db669ff53089b449691288b71fa41f9 Mon Sep 17 00:00:00 2001
From: liyongde <1419499670@qq.com>
Date: Tue, 5 Aug 2025 15:28:53 +0800
Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=8C=85=E4=BB=BB=E5=8A=A1?=
=?UTF-8?q?=E4=B8=8B=E5=8F=91?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
lms/nladmin-system/nlsso-server/pom.xml | 4 +
.../MdPbStoragevehicleinfoServiceImpl.java | 4 +-
.../service/impl/StructattrServiceImpl.java | 2 +-
.../service/impl/PdaJBServiceImpl.java | 345 ++++++++++--------
.../enums/TaskFinishedTypeEnum.java | 30 ++
.../sch_manage/service/util/AbstractTask.java | 4 +-
.../wms/sch_manage/service/util/AutoTask.java | 49 +--
.../service/util/tasks/jb/JbDownAgvTask.java | 16 +-
.../service/util/tasks/jb/JbUpAgvTask.java | 7 +-
.../wms/system_manage/enums/TagNameEnum.java | 7 +
.../src/main/resources/logback-spring.xml | 6 +-
.../views/wms/basedata/structattr/index.vue | 4 +-
.../src/views/wms/sch/taskconfig/index.vue | 230 ++++++------
13 files changed, 409 insertions(+), 299 deletions(-)
create mode 100644 lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/TaskFinishedTypeEnum.java
diff --git a/lms/nladmin-system/nlsso-server/pom.xml b/lms/nladmin-system/nlsso-server/pom.xml
index 0350f23..b9c5948 100644
--- a/lms/nladmin-system/nlsso-server/pom.xml
+++ b/lms/nladmin-system/nlsso-server/pom.xml
@@ -35,6 +35,10 @@
+ org.reflections
+ reflections
+ 0.9.10
+
org.codehaus.groovy
groovy-all
3.0.13
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleinfoServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleinfoServiceImpl.java
index b566cfa..ad3cbbb 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleinfoServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPbStoragevehicleinfoServiceImpl.java
@@ -45,8 +45,8 @@ public class MdPbStoragevehicleinfoServiceImpl extends ServiceImpl queryAll(Map whereJson, PageQuery page) {
// 查询条件
LambdaQueryWrapper queryWrapper = new QueryWrapper().lambda();
- String search = MapUtil.getStr(whereJson, "storagevehicle_code");
- String storagevehicle_type = MapUtil.getStr(whereJson, "storagevehicle_type");
+ String search = MapUtil.getStr(whereJson, "vehicle_code");
+ String storagevehicle_type = MapUtil.getStr(whereJson, "vehicle_type");
if (ObjectUtil.isNotEmpty(search)) {
queryWrapper.likeRight(MdPbStoragevehicleinfo::getStoragevehicle_code, search)
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
index c0399be..0d3940d 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/StructattrServiceImpl.java
@@ -148,7 +148,7 @@ public class StructattrServiceImpl extends ServiceImpl()
- .eq(Sectattr::getSect_code, dto.getSect_id())
+ .eq(Sectattr::getSect_code, dto.getSect_code())
.eq(Sectattr::getIs_delete, BaseDataEnum.IS_YES_NOT.code("否")));
BsrealStorattr bsrealStorattr = iBsrealStorattrService.findById(sectattr.getStor_id());
dto.setSect_id(sectattr.getSect_id());
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java
index d56032b..54f3f45 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda_manage/sch_manage/service/impl/PdaJBServiceImpl.java
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
@@ -29,9 +30,13 @@ import org.nl.wms.pm_manage.service.IPdmBdWorkorderService;
import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
import org.nl.wms.record_manage.service.IMdPbRegionMemberService;
import org.nl.wms.record_manage.service.dao.MdPbRegionMember;
+import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
+import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
+import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.sch_manage.service.util.tasks.jb.JbUpAgvTask;
+import org.nl.wms.system_manage.enums.TagNameEnum;
import org.nl.wms.system_manage.service.dict.ISysDictService;
import org.nl.wms.system_manage.service.dict.dao.Dict;
import org.nl.wms.system_manage.service.param.ISysParamService;
@@ -47,6 +52,9 @@ import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDtlMappe
import org.nl.wms.warehouse_manage.inAndOut.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
import org.nl.wms.warehouse_manage.service.dao.GroupPlate;
+import org.redisson.api.RLock;
+import org.redisson.api.RedissonClient;
+import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -54,6 +62,8 @@ import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.math.BigDecimal;
import java.util.*;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Consumer;
/**
* @Author: lyd
@@ -100,6 +110,10 @@ public class PdaJBServiceImpl implements PdaJBService {
private ISysParamService sysParamService;
@Resource
private IMdPbRegionMemberService regionMemberService;
+ @Resource
+ private RedissonClient redissonClient;
+ @Resource
+ private ISchBaseTaskService taskService;
@Override
public PdaResponse getOrderList(JSONObject whereJson) {
String flag = whereJson.getString("flag");
@@ -109,117 +123,129 @@ public class PdaJBServiceImpl implements PdaJBService {
return PdaResponse.requestParamOk(workorders);
}
+ @SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse callMaterial(JSONObject whereJson) {
log.info("解包叫料,请求参数:{}", whereJson);
// workorder_id、area、point_code
String pointCode = whereJson.getString("point_code");
- String workorderId = whereJson.getString("workorder_id");
- PdmBdWorkorder workorder = workorderService.getById(workorderId);
- if (ObjectUtil.isEmpty(workorder)) {
- throw new BadRequestException("工单不存在!");
- }
- if (!"1".equals(workorder.getWorkorder_status())) {
- throw new BadRequestException("该工单不是未生产,无法开工!");
- }
- // 出库的仓位
- Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code());
- if (ObjectUtil.isEmpty(outStructAttr)) {
- throw new BadRequestException("仓位【" + workorder.getStruct_code() + "】不存在!");
- }
- MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
- if (ObjectUtil.isEmpty(materialbase)) {
- throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
- }
- GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper()
- .eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code())
- .eq(GroupPlate::getStatus, "02"));
- if (ObjectUtil.isEmpty(groupPlate)) {
- throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!");
- }
- // 1、创建出库单、明细、分配明细
- JSONObject insertInvObj = new JSONObject();
- JSONArray tableData = new JSONArray();
- JSONObject table = new JSONObject();
- tableData.add(table);
- insertInvObj.put("stor_id", outStructAttr.getStor_id());
- insertInvObj.put("stor_code", outStructAttr.getStor_code());
- insertInvObj.put("bill_status", "10");
- insertInvObj.put("total_qty", workorder.getPlan_weight());
- insertInvObj.put("detail_count", 1);
- insertInvObj.put("bill_type", "1012");
- insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
- insertInvObj.put("tableData", tableData);
- table.put("turnout_struct_code", outStructAttr.getStruct_code());
- table.put("turnout_sect_code", outStructAttr.getSect_code());
- table.put("turnout_sect_name", outStructAttr.getSect_name());
- table.put("sect_id", outStructAttr.getSect_id());
- table.put("struct_id", outStructAttr.getStruct_id());
- table.put("group_id", groupPlate.getGroup_id());
- table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
- table.put("storagevehicle_type", workorder.getVehicle_type());
- table.put("material_id", materialbase.getMaterial_id());
- table.put("pcsn", groupPlate.getPcsn());
- table.put("qty", groupPlate.getQty());
- table.put("qty_unit_id", groupPlate.getQty_unit_id());
- table.put("qty_unit_name", groupPlate.getQty_unit_name());
- table.put("fronzen_qty", 0);
- table.put("status", "01");
- table.put("material_code", materialbase.getMaterial_code());
- table.put("material_name", materialbase.getMaterial_name());
- table.put("material_spec", materialbase.getMaterial_spec());
- String invId = outBillService.insertDtl(insertInvObj);
- // 调用手工分配
- JSONObject param = new JSONObject();
- JSONObject row = new JSONObject();
- JSONArray rows = new JSONArray();
- rows.add(row);
- param.put("rows", rows);
- IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper()
- .eq(IOStorInvDtl::getIostorinv_id, invId));
- param.put("row", dtl);
- row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
- row.put("pcsn", groupPlate.getPcsn());
- row.put("qty", groupPlate.getQty());
- row.put("qty_unit_name", groupPlate.getQty_unit_name());
- row.put("frozen_qty", groupPlate.getFrozen_qty());
- row.put("struct_id", outStructAttr.getStruct_id());
- row.put("struct_code", outStructAttr.getStruct_code());
- row.put("struct_name", outStructAttr.getStruct_name());
- row.put("sect_id", outStructAttr.getSect_id());
- row.put("sect_code", outStructAttr.getSect_code());
- row.put("sect_name", outStructAttr.getSect_name());
- row.put("material_code", groupPlate.getMaterial_code());
- row.put("material_name", groupPlate.getMaterial_name());
- row.put("edit", true);
- outBillService.manualDiv(param);
+ RLock lock = redissonClient.getLock(pointCode);
+ boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
+ try {
+ if (tryLock) {
+ String workorderId = whereJson.getString("workorder_id");
+ PdmBdWorkorder workorder = workorderService.getById(workorderId);
+ if (ObjectUtil.isEmpty(workorder)) {
+ throw new BadRequestException("工单不存在!");
+ }
+ if (!"1".equals(workorder.getWorkorder_status())) {
+ throw new BadRequestException("该工单不是未生产,无法开工!");
+ }
+ // 出库的仓位
+ Structattr outStructAttr = structattrService.getByCode(workorder.getStruct_code());
+ if (ObjectUtil.isEmpty(outStructAttr)) {
+ throw new BadRequestException("仓位【" + workorder.getStruct_code() + "】不存在!");
+ }
+ MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
+ if (ObjectUtil.isEmpty(materialbase)) {
+ throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
+ }
+ GroupPlate groupPlate = groupplateService.getOne(new LambdaQueryWrapper()
+ .eq(GroupPlate::getStoragevehicle_code, outStructAttr.getStoragevehicle_code())
+ .eq(GroupPlate::getStatus, "02"));
+ if (ObjectUtil.isEmpty(groupPlate)) {
+ throw new BadRequestException("托盘[" + outStructAttr.getStoragevehicle_code() + "]组盘信息不存在!");
+ }
+ // 1、创建出库单、明细、分配明细
+ JSONObject insertInvObj = new JSONObject();
+ JSONArray tableData = new JSONArray();
+ JSONObject table = new JSONObject();
+ tableData.add(table);
+ insertInvObj.put("stor_id", outStructAttr.getStor_id());
+ insertInvObj.put("stor_code", outStructAttr.getStor_code());
+ insertInvObj.put("bill_status", "10");
+ insertInvObj.put("total_qty", workorder.getPlan_weight());
+ insertInvObj.put("detail_count", 1);
+ insertInvObj.put("bill_type", "1012");
+ insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
+ insertInvObj.put("tableData", tableData);
+ table.put("turnout_struct_code", outStructAttr.getStruct_code());
+ table.put("turnout_sect_code", outStructAttr.getSect_code());
+ table.put("turnout_sect_name", outStructAttr.getSect_name());
+ table.put("sect_id", outStructAttr.getSect_id());
+ table.put("struct_id", outStructAttr.getStruct_id());
+ table.put("group_id", groupPlate.getGroup_id());
+ table.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
+ table.put("storagevehicle_type", workorder.getVehicle_type());
+ table.put("material_id", materialbase.getMaterial_id());
+ table.put("pcsn", groupPlate.getPcsn());
+ table.put("qty", groupPlate.getQty());
+ table.put("qty_unit_id", groupPlate.getQty_unit_id());
+ table.put("qty_unit_name", groupPlate.getQty_unit_name());
+ table.put("fronzen_qty", 0);
+ table.put("status", "01");
+ table.put("material_code", materialbase.getMaterial_code());
+ table.put("material_name", materialbase.getMaterial_name());
+ table.put("material_spec", materialbase.getMaterial_spec());
+ String invId = outBillService.insertDtl(insertInvObj);
+ // 调用手工分配
+ JSONObject param = new JSONObject();
+ JSONObject row = new JSONObject();
+ JSONArray rows = new JSONArray();
+ rows.add(row);
+ param.put("rows", rows);
+ IOStorInvDtl dtl = ioStorInvDtlMapper.selectOne(new LambdaQueryWrapper()
+ .eq(IOStorInvDtl::getIostorinv_id, invId));
+ param.put("row", dtl);
+ row.put("storagevehicle_code", outStructAttr.getStoragevehicle_code());
+ row.put("pcsn", groupPlate.getPcsn());
+ row.put("qty", groupPlate.getQty());
+ row.put("qty_unit_name", groupPlate.getQty_unit_name());
+ row.put("frozen_qty", groupPlate.getFrozen_qty());
+ row.put("struct_id", outStructAttr.getStruct_id());
+ row.put("struct_code", outStructAttr.getStruct_code());
+ row.put("struct_name", outStructAttr.getStruct_name());
+ row.put("sect_id", outStructAttr.getSect_id());
+ row.put("sect_code", outStructAttr.getSect_code());
+ row.put("sect_name", outStructAttr.getSect_name());
+ row.put("material_code", groupPlate.getMaterial_code());
+ row.put("material_name", groupPlate.getMaterial_name());
+ row.put("edit", true);
+ outBillService.manualDiv(param);
- // 创建任务
- SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper()
- .eq(SchBasePoint::getParent_point_code, pointCode)
- .eq(SchBasePoint::getRegion_code, "CKQ"));
- JSONObject taskParam = new JSONObject();
- taskParam.put("order_id", workorderId);
- taskParam.put("iostorinv_id", invId);
- taskParam.put("point_code", outPoint.getPoint_code());
- outBillService.allSetPoint(taskParam);
+ // 创建任务
+ SchBasePoint outPoint = pointService.getOne(new LambdaQueryWrapper()
+ .eq(SchBasePoint::getParent_point_code, pointCode)
+ .eq(SchBasePoint::getRegion_code, "CKQ"));
+ JSONObject taskParam = new JSONObject();
+ taskParam.put("order_id", workorderId);
+ taskParam.put("iostorinv_id", invId);
+ taskParam.put("point_code", outPoint.getPoint_code());
+ outBillService.allSetPoint(taskParam);
- // 3、工单状态修改,设置实际开始时间
- workorder.setWorkorder_status("3");
- workorder.setOperator(SecurityUtils.getCurrentNickName());
- workorder.setReal_weight(workorder.getPlan_weight());
- workorder.setRealproducestart_date(DateUtil.now());
- workorder.setUpdate_time(DateUtil.now());
- workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
- workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
- workorderService.updateById(workorder);
+ // 3、工单状态修改,设置实际开始时间
+ workorder.setWorkorder_status("3");
+ workorder.setOperator(SecurityUtils.getCurrentNickName());
+ workorder.setReal_weight(workorder.getPlan_weight());
+ workorder.setRealproducestart_date(DateUtil.now());
+ workorder.setUpdate_time(DateUtil.now());
+ workorder.setUpdate_id(SecurityUtils.getCurrentUserId());
+ workorder.setUpdate_name(SecurityUtils.getCurrentNickName());
+ workorderService.updateById(workorder);
+ } else {
+ throw new BadRequestException("速度太快啦,稍后再试...");
+ }
+ } finally {
+ if (tryLock) {
+ lock.unlock();
+ }
+ }
return PdaResponse.requestOk();
}
@Override
public PdaResponse getWeight(JSONObject whereJson) {
- // todo: 调用acs获取
String currentUserId = SecurityUtils.getCurrentUserId();
String pointCode = whereJson.getString("point_code");
String workorder_id = whereJson.getString("workorder_id");
@@ -227,6 +253,7 @@ public class PdaJBServiceImpl implements PdaJBService {
if (ObjectUtil.isEmpty(param)) {
throw new BadRequestException("请先定义 " + JB_STANDARD_ERROR + " 系统参数!");
}
+ // todo: 调用acs获取
JSONObject res = new JSONObject();
res.put("weight", "999.99");
res.put("flag", "1");
@@ -242,10 +269,12 @@ public class PdaJBServiceImpl implements PdaJBService {
return PdaResponse.requestParamOk(res);
}
+ @SneakyThrows
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse downMaterial(JSONObject whereJson) {
// 用任务组的方式下发任务(3条任务)
+ MDC.put(TagNameEnum.TAG_NAME.getTag(), TagNameEnum.PDA_JB_DOWN_MATERIAL.getTag());
log.info("解包下料,请求参数:{}", whereJson);
String currentUserId = SecurityUtils.getCurrentUserId();
String nickName = SecurityUtils.getCurrentNickName();
@@ -254,57 +283,79 @@ public class PdaJBServiceImpl implements PdaJBService {
String area = whereJson.getString("area");
// 设备
String pointCode = whereJson.getString("point_code");
- BigDecimal weight = whereJson.getBigDecimal("weight");
- String tpCode = whereJson.getString("tp_code");
- String ltCode = whereJson.getString("lt_code");
- String workorderId = whereJson.getString("workorder_id");
+ RLock lock = redissonClient.getLock(pointCode);
+ boolean tryLock = lock.tryLock(0, TimeUnit.SECONDS);
+ try {
+ if (tryLock) {
+ BigDecimal weight = whereJson.getBigDecimal("weight");
+ String tpCode = whereJson.getString("tp_code");
+ String ltCode = whereJson.getString("lt_code");
+ String workorderId = whereJson.getString("workorder_id");
+ // 存在任务就不继续
+ List list = taskService.list(new LambdaQueryWrapper()
+ .lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
+ .eq(SchBaseTask::getIs_delete, false)
+ .and(ll -> ll.like(SchBaseTask::getPoint_code1, pointCode).or()
+ .like(SchBaseTask::getPoint_code2, pointCode).or()
+ .like(SchBaseTask::getPoint_code3, pointCode).or()
+ .like(SchBaseTask::getPoint_code4, pointCode).or()));
+ if (list.size() > 0) {
+ throw new BadRequestException(pointCode + " 该点位已存在任务!");
+ }
+ PdmBdWorkorder workorder = workorderService.getById(workorderId);
+ if (ObjectUtil.isEmpty(workorder)) {
+ throw new BadRequestException("工单不存在!");
+ }
+ // 物料
+ MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
+ if (ObjectUtil.isEmpty(materialbase)) {
+ throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
+ }
+ // 0、创建组盘
+ GroupPlate groupPlate = new GroupPlate();
+ groupPlate.setGroup_id(IdUtil.getStringId());
+ groupPlate.setStoragevehicle_code(ltCode);
+ // 料桶类型根据工单,工单是根据点位
+ groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
+ groupPlate.setMaterial_id(materialbase.getMaterial_id());
+ groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
+ groupPlate.setQty(weight);
+ groupPlate.setQty_unit_id("11");
+ groupPlate.setQty_unit_name("kg");
+ groupPlate.setFrozen_qty(BigDecimal.ZERO);
+ groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
+ groupPlate.setCreate_id(currentUserId);
+ groupPlate.setCreate_name(nickName);
+ groupPlate.setCreate_time(now);
+ groupplateService.save(groupPlate);
- PdmBdWorkorder workorder = workorderService.getById(workorderId);
- if (ObjectUtil.isEmpty(workorder)) {
- throw new BadRequestException("工单不存在!");
+ Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
+ Sectattr sect = sectattrService.findByCode(dict.getPara1());
+ // 组装插入主表明细表的数据
+ Map insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
+ String invId = inBillService.insertDtl(insertInvObj);
+
+ // 组织数据,调用分配货位
+ JSONObject divObj = buildDivStructData(sect, invId);
+ inBillService.divStruct(divObj);
+
+ // 一键设置,创建任务
+ // 组建参数
+ Map jsonMst = buildTaskData(pointCode, workorderId, invId);
+ inBillService.divPoint(jsonMst);
+
+ // 工单完成
+ workorder.setWorkorder_status("5");
+ workorder.setRealproduceend_date(DateUtil.now());
+ workorderService.updateById(workorder);
+ }
+ } finally {
+ if (tryLock) {
+ lock.unlock();
+ } else {
+ throw new BadRequestException("速度太快啦,稍后再试...");
+ }
}
- // 物料
- MdMeMaterialbase materialbase = materialbaseService.getById(workorder.getMaterial_id());
- if (ObjectUtil.isEmpty(materialbase)) {
- throw new BadRequestException("物料【" + workorder.getMaterial_id() + "】不存在!");
- }
- // 0、创建组盘
- GroupPlate groupPlate = new GroupPlate();
- groupPlate.setGroup_id(IdUtil.getStringId());
- groupPlate.setStoragevehicle_code(ltCode);
- // 料桶类型根据工单,工单是根据点位
- groupPlate.setStoragevehicle_type(workorder.getVehicle_type());
- groupPlate.setMaterial_id(materialbase.getMaterial_id());
- groupPlate.setPcsn(DateUtil.format(new Date(), "yyyy-MM-dd"));
- groupPlate.setQty(weight);
- groupPlate.setQty_unit_id("11");
- groupPlate.setQty_unit_name("kg");
- groupPlate.setFrozen_qty(BigDecimal.ZERO);
- groupPlate.setStatus(IOSEnum.GROUP_PLATE_STATUS.code("组盘"));
- groupPlate.setCreate_id(currentUserId);
- groupPlate.setCreate_name(nickName);
- groupPlate.setCreate_time(now);
- groupplateService.save(groupPlate);
-
- Dict dict = dictService.getDictByCodeAndValue("storagevehicle_type", workorder.getVehicle_type());
- Sectattr sect = sectattrService.findByCode(dict.getPara1());
- // 组装插入主表明细表的数据
- Map insertInvObj = buildInsertData(ltCode, workorder, materialbase, groupPlate, sect);
- String invId = inBillService.insertDtl(insertInvObj);
-
- // 组织数据,调用分配货位
- JSONObject divObj = buildDivStructData(sect, invId);
- inBillService.divStruct(divObj);
-
- // 一键设置,创建任务
- // 组建参数
- Map jsonMst = buildTaskData(pointCode, workorderId, invId);
- inBillService.divPoint(jsonMst);
-
- // 工单完成
- workorder.setWorkorder_status("5");
- workorder.setRealproduceend_date(DateUtil.now());
- workorderService.updateById(workorder);
return PdaResponse.requestOk();
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/TaskFinishedTypeEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/TaskFinishedTypeEnum.java
new file mode 100644
index 0000000..85835cf
--- /dev/null
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/enums/TaskFinishedTypeEnum.java
@@ -0,0 +1,30 @@
+package org.nl.wms.sch_manage.enums;
+
+import lombok.AllArgsConstructor;
+import lombok.Getter;
+
+/**
+ * @Author: lyd
+ * @Description: 任务完成枚举
+ * @Date: 2023/6/13
+ */
+@Getter
+@AllArgsConstructor
+public enum TaskFinishedTypeEnum {
+ /**
+ * ACS自动完成
+ */
+ AUTO_ACS("1", "ACS自动完成"),
+ /**
+ * PC手动完成
+ */
+ MANUAL_PC("2", "PC手动完成"),
+ /**
+ * PDA手持
+ */
+ MANUAL_PDA("3", "PDA手持");
+
+ private final String code;
+
+ private final String description;
+}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java
index 9ad0afa..48b1b75 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AbstractTask.java
@@ -70,7 +70,9 @@ public abstract class AbstractTask {
// 查询未执行下发的任务
List taskList = taskService.list(new LambdaQueryWrapper()
.eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
- .eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode()));
+ .eq(SchBaseTask::getTask_status, TaskStatus.CREATED.getCode())
+ .orderByAsc(SchBaseTask::getTask_group_id)
+ .orderByAsc(SchBaseTask::getTask_group_seq));
if (ObjectUtil.isEmpty(taskList)) {
return;
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoTask.java
index a591eba..f1e33b6 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/AutoTask.java
@@ -5,32 +5,35 @@ import cn.hutool.core.util.ObjectUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import lombok.SneakyThrows;
import lombok.extern.slf4j.Slf4j;
+import org.nl.config.SpringContextHolder;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
import org.nl.wms.system_manage.enums.TagNameEnum;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
+import org.reflections.Reflections;
import org.slf4j.MDC;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.core.annotation.Order;
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
+@Order(value = 1)
public class AutoTask {
- /**
- * 任务服务
- */
- @Autowired
- private ISchBaseTaskService taskService;
+ private static Set> subTypes;
- /**
- * 任务工厂服务
- */
- @Autowired
- private TaskFactory taskFactory;
+ // 类加载时候执行扫描
+ static {
+ Reflections reflections = new Reflections("org.nl.wms.sch_manage.service.util.tasks");
+ subTypes = reflections.getSubTypesOf(AbstractTask.class);
+ }
@SneakyThrows
public void run() {
@@ -44,17 +47,19 @@ public class AutoTask {
* 定时下发任务
*/
private void sendTask() {
- List taskList = taskService.list(new LambdaQueryWrapper()
- .eq(SchBaseTask::getIs_delete, IOSConstant.IS_DELETE_NO)
- .eq(SchBaseTask::getTask_status, TaskStatus.CREATE.getCode())
- .orderByAsc(SchBaseTask::getTask_group_seq));
- if (ObjectUtil.isEmpty(taskList)) {
- return;
- }
- // 整理下发acs参数
- for (SchBaseTask taskDao : taskList) {
- AbstractTask task = taskFactory.getTask(taskDao.getConfig_code());
- task.sendTaskOne(taskDao.getTask_id());
- }
+ subTypes.forEach(clz -> {
+ // 调用AbstractAcsTask类的每个子类的schedule()方法
+ try {
+ Object obj = SpringContextHolder.getBean(clz);
+ Method m = obj.getClass().getMethod("schedule");
+ m.invoke(obj);
+ } catch (InvocationTargetException e) {
+ e.printStackTrace();
+ log.info("定时器执行失败:{}", e.getTargetException().getMessage());
+ } catch (Exception e) {
+ e.printStackTrace();
+ log.info("定时器执行失败:{}", e.getMessage());
+ }
+ });
}
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java
index 7b753f8..53b7d84 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbDownAgvTask.java
@@ -14,8 +14,10 @@ import org.nl.wms.pm_manage.service.dao.PdmBdWorkorder;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;
+import org.nl.wms.sch_manage.service.ISchBaseTaskconfigService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dao.SchBaseTask;
+import org.nl.wms.sch_manage.service.dao.SchBaseTaskconfig;
import org.nl.wms.sch_manage.service.util.AbstractTask;
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
@@ -45,6 +47,8 @@ public class JbDownAgvTask extends AbstractTask {
private IOStorInvDisMapper ioStorInvDisMapper;
@Resource
private ISchBasePointService pointService;
+ @Resource
+ private ISchBaseTaskconfigService taskconfigService;
@Override
public String create(JSONObject param) {
// 改造:多条任务
@@ -81,6 +85,7 @@ public class JbDownAgvTask extends AbstractTask {
@Override
public AcsTaskDto sendAcsParam(String taskId) {
SchBaseTask taskDao = taskService.getById(taskId);
+ SchBaseTaskconfig taskconfig = taskconfigService.getTaskByConfigCode(taskDao.getConfig_code());
// 组织下发给acs的数据
AcsTaskDto acsTaskDto = new AcsTaskDto();
@@ -90,8 +95,11 @@ public class JbDownAgvTask extends AbstractTask {
acsTaskDto.setNext_device_code(taskDao.getPoint_code2());
acsTaskDto.setStart_device_code2(taskDao.getPoint_code3());
acsTaskDto.setNext_device_code2(taskDao.getPoint_code4());
+ acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
+ acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
acsTaskDto.setPriority(taskDao.getPriority());
- acsTaskDto.setTask_type("1");
+ acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
+ acsTaskDto.setTask_type(taskconfig.getTask_type());
return acsTaskDto;
}
@@ -138,7 +146,7 @@ public class JbDownAgvTask extends AbstractTask {
private void finishTask(SchBaseTask taskObj) {
// 任务完成
- taskObj.setRemark("等待最后一条任务完成");
+ taskObj.setRemark("该任务已完成,等待最后一条任务完成后全部完成!");
if ("1".equals(taskObj.getTask_group_seq().toString())) {
// 开盖设置成有盖
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
@@ -154,9 +162,9 @@ public class JbDownAgvTask extends AbstractTask {
pointService.updateById(jbjPoint);
}
if ("3".equals(taskObj.getTask_group_seq().toString())) {
- // 开盖设置成有盖
+ // 开盖设置成空位
SchBasePoint khgPoint = pointService.getById(taskObj.getPoint_code2());
- khgPoint.setPoint_status("2");
+ khgPoint.setPoint_status("1");
khgPoint.setUpdate_time(DateUtil.now());
pointService.updateById(khgPoint);
SchBaseTask task = new SchBaseTask();
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java
index cf6587a..e083db1 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/jb/JbUpAgvTask.java
@@ -94,8 +94,6 @@ public class JbUpAgvTask extends AbstractTask {
acsTaskDto.setPriority(taskDao.getPriority());
acsTaskDto.setAgv_system_type(taskconfig.getAcs_task_type());
acsTaskDto.setTask_type(taskconfig.getTask_type());
- acsTaskDto.setTask_group_id(taskDao.getTask_group_id());
- acsTaskDto.setTask_group_seq(taskDao.getTask_group_seq());
return acsTaskDto;
}
@@ -180,6 +178,11 @@ public class JbUpAgvTask extends AbstractTask {
.set(Structattr::getStoragevehicle_code, taskObj.getVehicle_code2())
.set(Structattr::getOccupancy_state, 2)
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
+ } else {
+ // 仓位设置空
+ structattrService.update(new LambdaUpdateWrapper()
+ .set(Structattr::getOccupancy_state, 1)
+ .eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
}
}
diff --git a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/enums/TagNameEnum.java b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/enums/TagNameEnum.java
index 391e0e2..32549fb 100644
--- a/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/enums/TagNameEnum.java
+++ b/lms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/system_manage/enums/TagNameEnum.java
@@ -19,7 +19,14 @@ public enum TagNameEnum {
* LMS系统
*/
LMS("LMS系统"),
+ /***
+ * 自动下发任务到ACS
+ */
AUTO_TASK_SEND("自动下发任务到ACS"),
+ /**
+ * 解包手持下料
+ */
+ PDA_JB_DOWN_MATERIAL("解包手持下料"),
/**
* 标记符号
*/
diff --git a/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml b/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
index b708b69..3458b37 100644
--- a/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
+++ b/lms/nladmin-system/nlsso-server/src/main/resources/logback-spring.xml
@@ -103,9 +103,9 @@
-
-
-
+
+
+
diff --git a/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue b/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue
index 203dad4..d09c71c 100644
--- a/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue
+++ b/lms/nladmin-ui/src/views/wms/basedata/structattr/index.vue
@@ -133,7 +133,7 @@
-
+
-
+
{{ dict.label.occupancy_state[scope.row.occupancy_state] }}
diff --git a/lms/nladmin-ui/src/views/wms/sch/taskconfig/index.vue b/lms/nladmin-ui/src/views/wms/sch/taskconfig/index.vue
index b6bf28a..01013d9 100644
--- a/lms/nladmin-ui/src/views/wms/sch/taskconfig/index.vue
+++ b/lms/nladmin-ui/src/views/wms/sch/taskconfig/index.vue
@@ -136,6 +136,20 @@
style="width: 240px;"
/>
+
+
+
+
+
-
-
-
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
-
-
- 是
- 否
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
@@ -236,17 +236,17 @@
否
-
-
-
-
-
-
+
+
+
+
+
+
+
+
+
+
+
@@ -279,7 +279,7 @@
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+