add:手持空托盘堆叠
This commit is contained in:
@@ -50,6 +50,18 @@ public class PdaCommonController {
|
||||
public ResponseEntity<Object> inEmptyVehicle(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaCommonService.inEmptyVehicle(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/queryPointDtl")
|
||||
@Log("空载具堆叠-查询点位堆叠明细")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> queryPointDtl() {
|
||||
return new ResponseEntity<>(pdaCommonService.queryPointDtl(), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/callStackPlates")
|
||||
@Log("空载具堆叠-呼叫堆叠")
|
||||
@SaIgnore
|
||||
public ResponseEntity<Object> callStackPlates(@RequestBody JSONObject whereJson) {
|
||||
return new ResponseEntity<>(pdaCommonService.callStackPlates(whereJson), HttpStatus.OK);
|
||||
}
|
||||
@PostMapping("/confirmBagAssembly")
|
||||
@Log("物料组袋-确认组袋")
|
||||
@SaIgnore
|
||||
|
||||
@@ -44,4 +44,20 @@ public interface PdaCommonService {
|
||||
PdaResponse inEmptyVehicle(JSONObject param);
|
||||
|
||||
PdaResponse confirmBucketAssembly(AssemblyBucketParam param);
|
||||
|
||||
/**
|
||||
* 空载具堆叠-查询点位堆叠明细
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse queryPointDtl();
|
||||
|
||||
/**
|
||||
* 空载具堆叠-呼叫堆叠
|
||||
* @param whereJson {
|
||||
* point_code: 载具点位
|
||||
* row: {明细}
|
||||
* }
|
||||
* @return PdaResponse
|
||||
*/
|
||||
PdaResponse callStackPlates(JSONObject whereJson);
|
||||
}
|
||||
|
||||
@@ -2,9 +2,11 @@ package org.nl.wms.pda.general_management.service.impl;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
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.UpdateWrapper;
|
||||
import lombok.SneakyThrows;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
@@ -25,9 +27,14 @@ import org.nl.wms.pda.general_management.service.dto.AssemblyBagParam;
|
||||
import org.nl.wms.pda.general_management.service.dto.AssemblyBucketParam;
|
||||
import org.nl.wms.pda.general_management.service.dto.AssemblyPalletParam;
|
||||
import org.nl.wms.pda.util.PdaResponse;
|
||||
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.EmpStackPlatesTask;
|
||||
import org.nl.wms.sch_manage.service.util.tasks.EmpVehicleOutTask;
|
||||
import org.nl.wms.warehouse_management.enums.IOSConstant;
|
||||
import org.nl.wms.warehouse_management.enums.IOSEnum;
|
||||
import org.nl.wms.warehouse_management.service.IMdPbGroupplateService;
|
||||
import org.nl.wms.warehouse_management.service.VehicleInService;
|
||||
@@ -36,10 +43,13 @@ import org.nl.wms.warehouse_management.service.dao.GroupPlate;
|
||||
import org.redisson.api.RLock;
|
||||
import org.redisson.api.RedissonClient;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @Author: lyd
|
||||
@@ -72,6 +82,19 @@ public class PdaCommonServiceImpl implements PdaCommonService {
|
||||
private IMdPbStoragevehicleinfoService storagevehicleinfoService;
|
||||
@Resource
|
||||
private IMdPdGroupbucketService groupbucketService;
|
||||
|
||||
/**
|
||||
* 点位服务类
|
||||
*/
|
||||
@Resource
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 空托盘叠盘任务类
|
||||
*/
|
||||
@Resource
|
||||
private EmpStackPlatesTask empStackPlatesTask;
|
||||
|
||||
@SneakyThrows
|
||||
@Override
|
||||
public PdaResponse callEmptyVehicle(JSONObject param) {
|
||||
@@ -198,4 +221,65 @@ public class PdaCommonServiceImpl implements PdaCommonService {
|
||||
groupbucketService.save(groupbucket);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
|
||||
@Override
|
||||
public PdaResponse queryPointDtl() {
|
||||
List<SchBasePoint> pointDaoList = iSchBasePointService.list(
|
||||
new QueryWrapper<SchBasePoint>().lambda()
|
||||
.eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("空托盘堆叠区域"))
|
||||
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
|
||||
);
|
||||
List<String> pointCodeList = pointDaoList.stream()
|
||||
.map(SchBasePoint::getPoint_code)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
// 查询当前正在执行的任务
|
||||
List<SchBaseTask> taskList = taskService.list(
|
||||
new QueryWrapper<SchBaseTask>().lambda()
|
||||
.lt(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode())
|
||||
.eq(SchBaseTask::getIs_delete, IOSConstant.ZERO)
|
||||
.eq(SchBaseTask::getConfig_code, EmpStackPlatesTask.class.getSimpleName())
|
||||
.in(SchBaseTask::getPoint_code2, pointCodeList)
|
||||
);
|
||||
|
||||
// 需返回的集合
|
||||
List<JSONObject> resultList = new ArrayList<>();
|
||||
for (SchBasePoint pointDao : pointDaoList) {
|
||||
JSONObject json = new JSONObject();
|
||||
json.put("point_code", pointDao.getPoint_code());
|
||||
json.put("vehicle_qty", pointDao.getVehicle_qty());
|
||||
// 查询待堆叠数量
|
||||
List<SchBaseTask> collectQtyList = taskList.stream()
|
||||
.filter(row -> row.getPoint_code2().equals(pointDao.getPoint_code()))
|
||||
.collect(Collectors.toList());
|
||||
json.put("execution_task", ObjectUtil.isNotEmpty(collectQtyList) ? collectQtyList.size() : 0);
|
||||
// 计算剩余可堆叠数量
|
||||
json.put("remaining_qty", NumberUtil.sub(pointDao.getVehicle_max_qty(), pointDao.getVehicle_qty(),json.getIntValue("execution_task")));
|
||||
resultList.add(json);
|
||||
}
|
||||
return PdaResponse.requestParamOk(resultList);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional
|
||||
public PdaResponse callStackPlates(JSONObject whereJson) {
|
||||
// 判断起点点位是否存在
|
||||
SchBasePoint startPointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
|
||||
if (ObjectUtil.isEmpty(startPointDao)) {
|
||||
throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"】");
|
||||
}
|
||||
|
||||
// 计算叠盘位是否还能继续叠盘
|
||||
JSONObject row = whereJson.getJSONObject("row");
|
||||
if (row.getIntValue("remaining_qty") == 0) {
|
||||
throw new BadRequestException("当前堆叠位空托盘数量已满【"+row.getString("point_code")+"】");
|
||||
}
|
||||
|
||||
// 生成任务
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", whereJson.getString("point_code"));
|
||||
jsonTask.put("point_code2", row.getString("point_code"));
|
||||
empStackPlatesTask.create(jsonTask);
|
||||
return PdaResponse.requestOk();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -180,7 +180,9 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
|
||||
// 创建agv任务
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", whereJson.getString("point_code"));
|
||||
jsonTask.put("point_code2", IOSConstant.AGVZJZ001);
|
||||
// 判断点位是否需要二次配送
|
||||
SchBasePoint endPoint = iSchBasePointService.getById(whereJson.getString("in_point_code"));
|
||||
jsonTask.put("point_code2", endPoint.getIs_auto() ? whereJson.getString("in_point_code") : IOSConstant.AGVZJZ001);
|
||||
jsonTask.put("point_code3", whereJson.getString("in_point_code"));
|
||||
jsonTask.put("material_id", rows.get(0).getString("material_id"));
|
||||
jsonTask.put("material_qty", whereJson.getString("total_qty"));
|
||||
@@ -239,11 +241,11 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
|
||||
public PdaResponse packConfirmReturn(JSONObject whereJson) {
|
||||
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
|
||||
if (ObjectUtil.isEmpty(pointDao)) {
|
||||
throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"】");
|
||||
throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "】");
|
||||
}
|
||||
// 判断点位区域是否是外包材区域
|
||||
if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) {
|
||||
throw new BadRequestException("当前点位不属于还回区域点位【"+whereJson.getString("point_code")+"】");
|
||||
throw new BadRequestException("当前点位不属于还回区域点位【" + whereJson.getString("point_code") + "】");
|
||||
}
|
||||
// 查询当前点位是否有库存
|
||||
List<MdPdmPackaging> packDaoList = iMdPdmPackagingService.list(
|
||||
|
||||
@@ -1,20 +1,20 @@
|
||||
package org.nl.wms.sch_manage.service.util.tasks;
|
||||
|
||||
import cn.hutool.core.date.DateUtil;
|
||||
import cn.hutool.core.util.NumberUtil;
|
||||
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.pdm_management.service.IMdPdmPackagingService;
|
||||
import org.nl.wms.pdm_management.service.dao.MdPdmPackaging;
|
||||
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.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
@@ -28,24 +28,24 @@ import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 内包材送入任务类(中间站至外包材点位)
|
||||
* 空托盘叠盘任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
* @since 2025-12-29
|
||||
* @since 2025-12-30
|
||||
*/
|
||||
@Component(value = "PackagingInTask")
|
||||
@TaskType("PackagingInTask")
|
||||
public class PackagingInTask extends AbstractTask {
|
||||
@Component(value = "EmpStackPlatesTask")
|
||||
@TaskType("EmpStackPlatesTask")
|
||||
public class EmpStackPlatesTask extends AbstractTask {
|
||||
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 外包材服务类
|
||||
* 点位服务
|
||||
*/
|
||||
@Resource
|
||||
private IMdPdmPackagingService iMdPdmPackagingService;
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
@@ -53,15 +53,14 @@ public class PackagingInTask extends AbstractTask {
|
||||
task.setTask_id(IdUtil.getStringId());
|
||||
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
|
||||
task.setTask_status(TaskStatus.CREATE.getCode());
|
||||
task.setConfig_code(PackagingInTask.class.getSimpleName());
|
||||
task.setConfig_code(EmpStackPlatesTask.class.getSimpleName());
|
||||
task.setPoint_code1(json.getString("point_code1"));
|
||||
task.setPoint_code2(json.getString("point_code2"));
|
||||
task.setPoint_code3(json.getString("point_code3"));
|
||||
task.setVehicle_code(json.getString("vehicle_code"));
|
||||
task.setMaterial_id(json.getString("material_id"));
|
||||
task.setMaterial_qty(json.getBigDecimal("material_qty"));
|
||||
task.setRequest_param(json.toString());
|
||||
task.setTask_type(TaskEnum.TASK_TYPE.code("料箱"));
|
||||
task.setTask_type(TaskEnum.TASK_TYPE.code("载具"));
|
||||
task.setPriority(json.getString("Priority"));
|
||||
task.setCreate_id(SecurityUtils.getCurrentUserId());
|
||||
task.setCreate_name(SecurityUtils.getCurrentNickName());
|
||||
@@ -147,12 +146,10 @@ public class PackagingInTask extends AbstractTask {
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
// 更新点位库存
|
||||
iMdPdmPackagingService.update(
|
||||
new UpdateWrapper<MdPdmPackaging>().lambda()
|
||||
.set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code2())
|
||||
.eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3())
|
||||
);
|
||||
// 更新当前点位载具数量
|
||||
SchBasePoint pointDao = iSchBasePointService.getById(taskObj.getPoint_code2());
|
||||
pointDao.setVehicle_qty(NumberUtil.add(pointDao.getVehicle_qty(), Integer.valueOf(1)).intValue());
|
||||
iSchBasePointService.updateById(pointDao);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
@@ -14,9 +14,7 @@ import org.nl.wms.pdm_management.service.IMdPdmPackagingService;
|
||||
import org.nl.wms.pdm_management.service.dao.MdPdmPackaging;
|
||||
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.AbstractTask;
|
||||
import org.nl.wms.sch_manage.service.util.AcsTaskDto;
|
||||
@@ -30,7 +28,7 @@ import javax.annotation.Resource;
|
||||
|
||||
/**
|
||||
* <p>
|
||||
* 内包材送入中间站任务类
|
||||
* 内包材送入任务类
|
||||
* </p>
|
||||
*
|
||||
* @author Liuxy
|
||||
@@ -43,24 +41,12 @@ public class PackagingMiddleTask extends AbstractTask {
|
||||
@Autowired
|
||||
private ISchBaseTaskService taskService;
|
||||
|
||||
/**
|
||||
* 点位服务
|
||||
*/
|
||||
@Autowired
|
||||
private ISchBasePointService iSchBasePointService;
|
||||
|
||||
/**
|
||||
* 外包材服务类
|
||||
*/
|
||||
@Resource
|
||||
private IMdPdmPackagingService iMdPdmPackagingService;
|
||||
|
||||
/**
|
||||
* 内包材送入任务类
|
||||
*/
|
||||
@Resource
|
||||
private PackagingInTask packagingInTask;
|
||||
|
||||
@Override
|
||||
public String create(JSONObject json) {
|
||||
SchBaseTask task = new SchBaseTask();
|
||||
@@ -161,26 +147,12 @@ public class PackagingMiddleTask extends AbstractTask {
|
||||
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
|
||||
taskObj.setRemark("已完成");
|
||||
taskService.updateById(taskObj);
|
||||
// 判断第三个点位是否是agv搬运任务
|
||||
SchBasePoint pointDao = iSchBasePointService.getById(taskObj.getPoint_code3());
|
||||
if (pointDao.getIs_auto()) {
|
||||
// 生成中间站至内包材点位agv任务
|
||||
JSONObject jsonTask = new JSONObject();
|
||||
jsonTask.put("point_code1", taskObj.getPoint_code2());
|
||||
jsonTask.put("point_code2", taskObj.getPoint_code3());
|
||||
jsonTask.put("point_code3", taskObj.getPoint_code1());
|
||||
jsonTask.put("vehicle_code", taskObj.getVehicle_code());
|
||||
jsonTask.put("material_id", taskObj.getMaterial_qty());
|
||||
packagingInTask.create(jsonTask);
|
||||
|
||||
} else {
|
||||
// 直接更新点位库存
|
||||
iMdPdmPackagingService.update(
|
||||
new UpdateWrapper<MdPdmPackaging>().lambda()
|
||||
.set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3())
|
||||
.eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1())
|
||||
);
|
||||
}
|
||||
// 跟更新库存点位
|
||||
iMdPdmPackagingService.update(
|
||||
new UpdateWrapper<MdPdmPackaging>().lambda()
|
||||
.set(MdPdmPackaging::getPoint_code, taskObj.getPoint_code3())
|
||||
.eq(MdPdmPackaging::getPoint_code, taskObj.getPoint_code1())
|
||||
);
|
||||
}
|
||||
|
||||
@Transactional(rollbackFor = Exception.class)
|
||||
|
||||
@@ -119,7 +119,7 @@ public enum IOSEnum {
|
||||
|
||||
// 区域编码
|
||||
REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01"
|
||||
, "外包材区域", "WBCZC01"
|
||||
, "外包材区域", "WBCZC01", "空托盘堆叠区域", "EMPDD01"
|
||||
)),
|
||||
|
||||
;
|
||||
|
||||
Reference in New Issue
Block a user