diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java index a08a14e..8c7e9de 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/IMdPdGroupbucketService.java @@ -1,8 +1,11 @@ package org.nl.wms.basedata_manage.service; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.IService; import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; +import java.util.List; + /** *

* 组桶记录表 服务类 @@ -13,4 +16,12 @@ import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; */ public interface IMdPdGroupbucketService extends IService { + /** + * 根据桶号获取信息 + * @param vehicleCode + * @return + */ + List getBucketInfoByBucket(String vehicleCode); + + void upDateWeight(String weight, String vehicleCode); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java index 78c2c6e..70d0fa1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.java @@ -1,8 +1,11 @@ package org.nl.wms.basedata_manage.service.dao.mapper; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; +import java.util.List; + /** *

* 组桶记录表 Mapper 接口 @@ -13,4 +16,7 @@ import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; */ public interface MdPdGroupbucketMapper extends BaseMapper { + List getBucketInfoByBucket(String vehicleCode); + + void upDateWeight(String weight, String vehicleCode); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml index 260e3a1..3ba1d9e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/dao/mapper/MdPdGroupbucketMapper.xml @@ -1,5 +1,25 @@ + + UPDATE md_pd_groupbucket + SET qty = #{weight} - bucket_weight + WHERE + bucket_code = #{vehicleCode} + + diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java index 479d877..621292f 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/basedata_manage/service/impl/MdPdGroupbucketServiceImpl.java @@ -1,11 +1,14 @@ package org.nl.wms.basedata_manage.service.impl; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService; import org.nl.wms.basedata_manage.service.dao.MdPdGroupbucket; import org.nl.wms.basedata_manage.service.dao.mapper.MdPdGroupbucketMapper; import org.springframework.stereotype.Service; +import java.util.List; + /** *

* 组桶记录表 服务实现类 @@ -17,4 +20,13 @@ import org.springframework.stereotype.Service; @Service public class MdPdGroupbucketServiceImpl extends ServiceImpl implements IMdPdGroupbucketService { + @Override + public List getBucketInfoByBucket(String vehicleCode) { + return this.baseMapper.getBucketInfoByBucket(vehicleCode); + } + + @Override + public void upDateWeight(String weight, String vehicleCode) { + this.baseMapper.upDateWeight(weight, vehicleCode); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java index 8b86911..e1d90b1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/controller/PdaProductionController.java @@ -86,4 +86,17 @@ public class PdaProductionController { public ResponseEntity preProcessingDown(@RequestBody JSONObject whereJson) { return new ResponseEntity<>(pdaProductionService.preProcessingDown(whereJson), HttpStatus.OK); } + + @PostMapping("/getGroupBucketInfo") + @Log("生产下料-获取物料信息") + @SaIgnore + public ResponseEntity getGroupBucketInfo(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.getGroupBucketInfo(whereJson), HttpStatus.OK); + } + @PostMapping("/productionLine") + @Log("生产下料-下料") + @SaIgnore + public ResponseEntity productionLine(@RequestBody JSONObject whereJson) { + return new ResponseEntity<>(pdaProductionService.productionLine(whereJson), HttpStatus.OK); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java index 285335f..5d96b19 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/PdaProductionService.java @@ -65,4 +65,8 @@ public interface PdaProductionService { * @return */ PdaResponse takeFinish(JSONObject param); + + PdaResponse getGroupBucketInfo(JSONObject param); + + PdaResponse productionLine(JSONObject param); } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java index d5a19b5..242afe1 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/DefaultPdaBuildParamService.java @@ -2,6 +2,7 @@ package org.nl.wms.pda.general_management.service.impl; import cn.hutool.core.date.DateUtil; import cn.hutool.core.map.MapUtil; +import cn.hutool.core.util.ObjectUtil; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -45,6 +46,7 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { private IMdPbGroupplateService groupplateService; @Resource private IRawAssistIStorService rawAssistIStorService; + @Override public void doGroupPallet(JSONObject param, SchBasePoint startPoint) { JSONArray rows = param.getJSONArray("rows"); @@ -73,7 +75,7 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { ); // 查找分配明细 Map map = new HashMap<>(); - map.put("iostorinvdtl_id",dtlDao.get(0).getIostorinvdtl_id()); + map.put("iostorinvdtl_id", dtlDao.get(0).getIostorinvdtl_id()); List disDtl = rawAssistIStorService.getDisDtl(map); // 类型转换 ArrayList tableMater = new ArrayList<>(); @@ -118,8 +120,10 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService { for (int i = 0; i < rows.size(); i++) { HashMap table = new HashMap<>(); JSONObject row = rows.getJSONObject(i); - table.put("group_id", row.getString("group_id")); - table.put("storagevehicle_code", startPoint.getVehicle_code()); + table.put("group_id", ObjectUtil.isEmpty(row.getString("group_id")) + ? row.getString("id") : row.getString("group_id")); + table.put("storagevehicle_code", ObjectUtil.isEmpty(row.getString("vehicle_code")) + ? row.getString("bucket_code") : row.getString("vehicle_code")); table.put("material_id", row.getString("material_id")); table.put("pcsn", row.getString("pcsn")); table.put("qty", row.getBigDecimal("qty")); diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java index 65def5a..d1696eb 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/pda/general_management/service/impl/PdaProductionServiceImpl.java @@ -11,6 +11,7 @@ import org.nl.common.exception.BadRequestException; import org.nl.common.utils.SecurityUtils; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleextService; import org.nl.wms.basedata_manage.service.IMdPbStoragevehicleinfoService; +import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService; import org.nl.wms.basedata_manage.service.ISectattrService; import org.nl.wms.basedata_manage.service.dao.MdPbStoragevehicleext; import org.nl.wms.basedata_manage.service.dao.Sectattr; @@ -22,6 +23,8 @@ 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.AbstractTask; +import org.nl.wms.sch_manage.service.util.TaskFactory; import org.nl.wms.sch_manage.service.util.tasks.PreProcessingInTask; import org.nl.wms.warehouse_management.enums.IOSEnum; import org.nl.wms.warehouse_management.service.IMdPbGroupplateService; @@ -71,6 +74,10 @@ public class PdaProductionServiceImpl implements PdaProductionService { private PreProcessingInTask preProcessingInTask; @Resource private ISchBaseTaskService taskService; + @Resource + private IMdPdGroupbucketService groupbucketService; + @Resource + private TaskFactory taskFactory; @Override public PdaResponse getGroupInfo(JSONObject param) { // search; @@ -220,7 +227,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { @Override public PdaResponse leftoverMaterialBack(JSONObject param) { - // search, rows + // search, rows 按照托盘号原来的库区回去 String search = param.getString("search"); SchBasePoint startPoint = pointService.getByPointCode(search, false); if (ObjectUtil.isEmpty(startPoint)) { @@ -237,7 +244,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { log.info("剩料回库"); // 剩料回库 param.put("rows", res); - Sectattr sectattr = sectattrService.findByCode(startPoint.getIn_sect(), false); + Sectattr sectattr = sectattrService.findByCode(startPoint.getOut_sect(), false); param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("剩料回库")); // 1 创建入库单、明细、分配明细 Map invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr); @@ -253,7 +260,7 @@ public class PdaProductionServiceImpl implements PdaProductionService { // 空载具回库 JSONObject vin = new JSONObject(); vin.put("storagevehicle_code", search); - vin.put("sect_code", startPoint.getIn_sect()); + vin.put("sect_code", startPoint.getOut_sect()); vin.put("point_code", startPoint.getPoint_code()); vehicleInService.create(vin); } @@ -290,4 +297,29 @@ public class PdaProductionServiceImpl implements PdaProductionService { // todo: 下发允许AGV通过 return null; } + + @Override + public PdaResponse getGroupBucketInfo(JSONObject param) { + // vehicle_code + assertNotBlankJson(param, "载具号不能为空!", "vehicle_code"); + return PdaResponse.requestParamOk(groupbucketService + .getBucketInfoByBucket( + param.getString("vehicle_code"))); + } + + @Override + public PdaResponse productionLine(JSONObject param) { + // point_code, vehicle_code + log.info("手持下料:{}", param); + assertNotBlankJson(param, "载具号不能为空!", "vehicle_code"); + assertNotBlankJson(param, "点位不能为空!", "point_code"); + String pointCode = param.getString("point_code"); + SchBasePoint point = pointService.getByPointCode(pointCode, false); + if (ObjectUtil.isEmpty(point)) { + throw new BadRequestException("点位[" + pointCode +"]不存在!"); + } + AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code())); + task.create(param); + return PdaResponse.requestOk(); + } } diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml index 88380dc..1aa908e 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/dao/mapper/SchBasePointMapper.xml @@ -111,11 +111,16 @@ diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CenterInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CenterInTask.java new file mode 100644 index 0000000..df98a95 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/CenterInTask.java @@ -0,0 +1,188 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.sch_manage.enums.TaskEnum; +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.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IRawAssistIStorService; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +/** + * 中间站入库 + * @Author: lyd + * @Date: 2025/12/4 + */ +@Component(value = "CenterInTask") +@TaskType("CenterInTask") +public class CenterInTask extends AbstractTask { + @Resource + private ISchBaseTaskService taskService; + @Resource + private IRawAssistIStorService rawAssistIStorService; + + @Resource + private IOStorInvDisMapper ioStorInvDisMapper; + @Resource + private ISchBasePointService pointService; + @Override + public String create(JSONObject json) { + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setConfig_code(CenterInTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code1")); + task.setPoint_code2(json.getString("point_code2")); + task.setVehicle_code(json.getString("vehicle_code")); + task.setMaterial_id(json.getString("material_id")); + task.setMaterial_qty(json.getBigDecimal("material_qty")); + task.setGroup_id(json.getString("group_id")); + task.setRequest_param(json.toString()); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setPriority(json.getString("Priority")); + task.setIs_wait(json.getString("is_wait")); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 +// this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + @Override + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ZERO); + acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + private void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + //分配表清除任务 + ioStorInvDisMapper.update(new IOStorInvDis(), new LambdaUpdateWrapper<>(IOStorInvDis.class) + .set(IOStorInvDis::getTask_id, null) + .set(IOStorInvDis::getPoint_code, null) + .set(IOStorInvDis::getIs_issued, 0) + .set(IOStorInvDis::getWork_status, IOSEnum.INBILL_DIS_STATUS.code("未生成")) + .eq(IOStorInvDis::getTask_id, taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + private void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + rawAssistIStorService.taskFinish(taskObj); + // 更新起点 + pointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, "") + ); + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java index d0430eb..a878544 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/RawInTask.java @@ -166,10 +166,7 @@ public class RawInTask extends AbstractTask { if (ObjectUtil.isEmpty(taskObj)) { throw new BadRequestException("该任务不存在"); } - rawAssistIStorService.taskFinish(taskObj); - taskObj.setTask_status(TaskStatus.FINISHED.getCode()); - taskObj.setRemark("已完成"); - taskService.updateById(taskObj); + this.finishTask(taskObj); } @Override diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java new file mode 100644 index 0000000..536d249 --- /dev/null +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/sch_manage/service/util/tasks/TabletingInTask.java @@ -0,0 +1,220 @@ +package org.nl.wms.sch_manage.service.util.tasks; + +import cn.hutool.core.date.DateUtil; +import cn.hutool.core.util.ObjectUtil; +import com.alibaba.fastjson.JSONObject; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import org.nl.common.exception.BadRequestException; +import org.nl.common.utils.CodeUtil; +import org.nl.common.utils.SecurityUtils; +import org.nl.config.IdUtil; +import org.nl.wms.basedata_manage.enums.BaseDataEnum; +import org.nl.wms.basedata_manage.service.IMdPdGroupbucketService; +import org.nl.wms.basedata_manage.service.ISectattrService; +import org.nl.wms.basedata_manage.service.dao.Sectattr; +import org.nl.wms.pda.general_management.service.PdaBuildParamService; +import org.nl.wms.sch_manage.enums.TaskEnum; +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.ACSTaskTypeEnum; +import org.nl.wms.sch_manage.service.util.AbstractTask; +import org.nl.wms.sch_manage.service.util.AcsTaskDto; +import org.nl.wms.sch_manage.service.util.TaskType; +import org.nl.wms.warehouse_management.enums.IOSConstant; +import org.nl.wms.warehouse_management.enums.IOSEnum; +import org.nl.wms.warehouse_management.service.IRawAssistIStorService; +import org.nl.wms.warehouse_management.service.dao.IOStorInvDis; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.List; +import java.util.Map; + +/** + * 压片入库 + * @Author: lyd + * @Date: 2025/12/4 + */ +@Component(value = "TabletingInTask") +@TaskType("TabletingInTask") +public class TabletingInTask extends AbstractTask { + + @Resource + private IMdPdGroupbucketService groupbucketService; + + @Resource + private ISchBasePointService pointService; + + @Resource + private ISchBaseTaskService taskService; + @Resource + private ISectattrService sectattrService; + @Resource + private PdaBuildParamService defaultPdaBuildParam; + @Resource + private IRawAssistIStorService rawAssistIStorService; + @Override + public String create(JSONObject json) { + //point_code, vehicle_code + String vehicleCode = json.getString("vehicle_code"); + List bucket = groupbucketService.getBucketInfoByBucket(vehicleCode); + if (bucket.size() == 0) { + throw new BadRequestException("该载具未存在组桶信息,请先组桶!"); + } + // 找一个没任务的称重位 + List czws = pointService.getCanUsePointByRegion("ZZC01"); + if (czws.size() == 0) { + throw new BadRequestException("找不到中转区的称重位!"); + } + JSONObject jsonObject = bucket.get(0); + SchBasePoint point = czws.get(0); + SchBaseTask task = new SchBaseTask(); + task.setTask_id(IdUtil.getStringId()); + task.setTask_code(CodeUtil.getNewCode("TASK_CODE")); + task.setTask_status(TaskStatus.CREATED.getCode()); + task.setConfig_code(TabletingInTask.class.getSimpleName()); + task.setPoint_code1(json.getString("point_code")); + task.setPoint_code2(point.getPoint_code()); + task.setVehicle_code(json.getString("vehicle_code")); + task.setMaterial_id(jsonObject.getString("material_id")); + task.setMaterial_qty(jsonObject.getBigDecimal("qty")); + task.setGroup_id(jsonObject.getString("group_id")); + task.setRequest_param(json.toString()); + task.setTask_type(TaskEnum.TASK_TYPE.code("料箱")); + task.setPriority("1"); + task.setIs_wait("0"); + task.setCreate_id(SecurityUtils.getCurrentUserId()); + task.setCreate_name(SecurityUtils.getCurrentNickName()); + task.setCreate_time(DateUtil.now()); + taskService.save(task); + + // 下发任务 +// this.sendTaskOne(task.getTask_id()); + return task.getTask_id(); + } + + public AcsTaskDto sendAcsParam(String taskId) { + SchBaseTask taskDao = taskService.getById(taskId); + + // 组织下发给acs的数据 + AcsTaskDto acsTaskDto = new AcsTaskDto(); + acsTaskDto.setExt_task_id(taskDao.getTask_id()); + acsTaskDto.setTask_code(taskDao.getTask_code()); + acsTaskDto.setStart_device_code(taskDao.getPoint_code1()); + acsTaskDto.setNext_device_code(taskDao.getPoint_code2()); + acsTaskDto.setVehicle_code(taskDao.getVehicle_code()); + + acsTaskDto.setVehicle_type(IOSConstant.ONE); + acsTaskDto.setIs_wait(IOSConstant.ZERO); + acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode()); + + acsTaskDto.setPriority(IOSConstant.ONE); + acsTaskDto.setAgv_system_type(IOSConstant.THREE); + acsTaskDto.setIs_get_pause(IOSConstant.ZERO); + acsTaskDto.setIs_put_pause(IOSConstant.ZERO); + + return acsTaskDto; + } + + @Override + protected void updateStatus(String task_code, TaskStatus status) { + // 校验任务 + SchBaseTask taskObj = taskService.getByCode(task_code); + if (taskObj.getTask_status().equals(TaskStatus.FINISHED.getCode())) { + throw new BadRequestException("该任务已完成!"); + } + if (taskObj.getTask_status().equals(TaskStatus.CANCELED.getCode())) { + throw new BadRequestException("该任务已取消!"); + } + // 根据传来的类型去对任务进行操作 + if (status.equals(TaskStatus.EXECUTING)) { + taskObj.setTask_status(TaskStatus.EXECUTING.getCode()); + taskObj.setRemark("执行中"); + taskService.updateById(taskObj); + } + if (status.equals(TaskStatus.FINISHED)) { + this.finishTask(taskObj); + } + if (status.equals(TaskStatus.CANCELED)) { + this.cancelTask(taskObj); + } + } + + private void cancelTask(SchBaseTask taskObj) { + // 取消任务 + taskService.update(new LambdaUpdateWrapper() + .set(SchBaseTask::getIs_delete, BaseDataEnum.IS_YES_NOT.code("是")) + .set(SchBaseTask::getTask_status, TaskStatus.CANCELED.getCode()) + .set(SchBaseTask::getRemark, "已取消") + .eq(SchBaseTask::getTask_id, taskObj.getTask_id()) + ); + + // 更新任务状态 + taskObj.setTask_status(TaskStatus.CANCELED.getCode()); + taskObj.setRemark("已取消"); + taskService.updateById(taskObj); + } + + private void finishTask(SchBaseTask taskObj) { + // 任务完成 + taskObj.setTask_status(TaskStatus.FINISHED.getCode()); + taskObj.setRemark("已完成"); + taskService.updateById(taskObj); + // 更新起点 + pointService.update( + new UpdateWrapper().lambda() + .set(SchBasePoint::getVehicle_code, "") + .set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("空位")) + .eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()) + .set(SchBasePoint::getIng_task_code, "") + ); + SchBasePoint startPoint = pointService.getByPointCode(taskObj.getPoint_code2(), false); + // todo: 获取重量 + groupbucketService.upDateWeight("26.8", taskObj.getVehicle_code()); + JSONObject param = new JSONObject(); + // 创建入库任务 + List infos = groupbucketService.getBucketInfoByBucket(taskObj.getVehicle_code()); + Sectattr sectattr = sectattrService.findByCode(startPoint.getIn_sect(), false); + param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("中间站入库")); + param.put("rows", infos); + // 1 创建入库单、明细、分配明细 + Map invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr); + String invId = rawAssistIStorService.insertDtl(invObj); + // 2 调用分配 + Map divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId); + rawAssistIStorService.divStruct(divObj); + // 3 创建任务 + Map jsonMst = defaultPdaBuildParam.buildTaskData(startPoint, invId); + rawAssistIStorService.divPoint(jsonMst); + } + + @Override + public void forceFinish(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + this.finishTask(taskObj); + } + + @Override + public void cancel(String task_code) { + SchBaseTask taskObj = taskService.getByCode(task_code); + if (ObjectUtil.isEmpty(taskObj)) { + throw new BadRequestException("该任务不存在"); + } + if (!TaskStatus.CREATE.getCode().equals(taskObj.getTask_status())) { + throw new BadRequestException("任务状态必须为生成才能取消任务"); + } + this.cancelTask(taskObj); + } + + @Override + public void taskConfirm(String task_code) { + + } +} diff --git a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java index 6ef4e1d..d7c45e2 100644 --- a/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java +++ b/wms/nladmin-system/nlsso-server/src/main/java/org/nl/wms/warehouse_management/enums/IOSEnum.java @@ -33,7 +33,8 @@ public enum IOSEnum { // 入库业务类型 IN_BILL_TYPE(MapOf.of( "手工入库", "0009", "原辅料入库", "0001", - "剩料回库", "0002" + "剩料回库", "0002", + "中间站入库", "0003" )), // 出库业务类型 @@ -49,14 +50,16 @@ public enum IOSEnum { // 入库任务配置类编码 IN_CONFIG_CODE(MapOf.of("0009", "HandInTask", - "0001", "RawInTask", "0002", "RawInTask" + "0001", "RawInTask", "0002", "RawInTask", "0003", "CenterInTask" )), // 出库任务配置类编码 OUT_CONFIG_CODE(MapOf.of( "1009", "HandOutTask", "1001", "CallMaterialTask" )), - + // 下料任务配置编码 + DOWN_CONFIG_CODE(MapOf.of("YPQ", "TabletingInTask" + )), // 移库任务配置类编码 MOVE_CONFIG_CODE(MapOf.of("2001","InsideMoveTask", "2004", "CheckMoveTask" )),