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 @@ - + - + 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 @@ - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +