add:手持外包材管理

This commit is contained in:
2025-12-29 17:55:54 +08:00
parent ebb75d2ed5
commit 39473900c2
7 changed files with 659 additions and 10 deletions

View File

@@ -6,7 +6,6 @@ import com.alibaba.fastjson.JSONObject;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.nl.common.logging.annotation.Log;
import org.nl.wms.pda.general_management.service.PdaPublicInterfaceService;
import org.nl.wms.pda.packaging_management.service.PdaPackagingService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.HttpStatus;
@@ -61,4 +60,46 @@ public class PdaPackagingController {
return new ResponseEntity<>(pdaPackagingService.confirmTransfer(whereJson), HttpStatus.OK);
}
@PostMapping("/queryPointInDtl")
@Log("外包材送入-查询点位库存明细")
@SaIgnore
public ResponseEntity<Object> queryPointInDtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPackagingService.queryPointInDtl(whereJson), HttpStatus.OK);
}
@PostMapping("/queryPointInDownload")
@Log("外包材送入-查询外包材区域点位下拉框")
@SaIgnore
public ResponseEntity<Object> queryPointInDownload() {
return new ResponseEntity<>(pdaPackagingService.queryPointInDownload(), HttpStatus.OK);
}
@PostMapping("/packInConfirm")
@Log("外包材送入-送入")
@SaIgnore
public ResponseEntity<Object> packInConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPackagingService.packInConfirm(whereJson), HttpStatus.OK);
}
@PostMapping("/queryPointDrawDtl")
@Log("外包材领用-查询点位库存明细")
@SaIgnore
public ResponseEntity<Object> queryPointDrawDtl(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPackagingService.queryPointDrawDtl(whereJson), HttpStatus.OK);
}
@PostMapping("/queryDrawConfirm")
@Log("外包材领用-确认取货")
@SaIgnore
public ResponseEntity<Object> queryDrawConfirm(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPackagingService.queryDrawConfirm(whereJson), HttpStatus.OK);
}
@PostMapping("/packConfirmReturn")
@Log("外包材还回-确认还回")
@SaIgnore
public ResponseEntity<Object> packConfirmReturn(@RequestBody JSONObject whereJson) {
return new ResponseEntity<>(pdaPackagingService.packConfirmReturn(whereJson), HttpStatus.OK);
}
}

View File

@@ -15,15 +15,17 @@ public interface PdaPackagingService {
/**
* 外包材收货-根据点位查询下拉框
*
* @param whereJson {
* point_code: 点位编码
* }
* }
* @return PdaResponse
*/
PdaResponse queryPointRegion(JSONObject whereJson);
/**
* 外包材收货-确认收货
*
* @param whereJson {
* point_code: 点位编码
* region_code: 区域编码
@@ -34,28 +36,91 @@ public interface PdaPackagingService {
* qty: 数量
* qty_unit_name: 计量单位名称
* remark: 备注
* }
* }
* @return PdaResponse
*/
PdaResponse confirmStock(JSONObject whereJson);
/**
* 外包材转运-查询明细
*
* @param whereJson {
* out_point: 移出点位
* }
* }
* @return PdaResponse
*/
PdaResponse queryTransferDtl(JSONObject whereJson);
/**
* 外包材转运-确认转运
*
* @param whereJson {
* out_point: 移出点位
* in_point: 移入点位
* rows: 勾选的列表明细
* }
* out_point: 移出点位
* in_point: 移入点位
* rows: 勾选的列表明细
* }
* @return PdaResponse
*/
PdaResponse confirmTransfer(JSONObject whereJson);
/**
* 外包材送入-查询库存明细
*
* @param whereJson {
* point_code: 点位编码
* }
* @return PdaResponse
*/
PdaResponse queryPointInDtl(JSONObject whereJson);
/**
* 外包材送入-查询外包材区域点位下拉框
* @return PdaResponse
*/
PdaResponse queryPointInDownload();
/**
* 外包材送入-送入
* @param whereJson {
*
* }
* @return PdaResponse
*/
PdaResponse packInConfirm(JSONObject whereJson);
/**
* 外包材领用-查询点位库存明细
* @param whereJson {
*
* }
* @return PdaResponse
*/
PdaResponse queryPointDrawDtl(JSONObject whereJson);
/**
* 外包材领用-确认取货
* @param whereJson {
* point_code: 点位编码
* total_qty: 总数量
* rows: 外包材库存明细
* }
* @return PdaResponse
*/
PdaResponse queryDrawConfirm(JSONObject whereJson);
/**
*
* @param whereJson {
* point_code: 点位
* material_id: 物料标识
* material_code: 物料编码
* material_name: 物料名称
* pcsn: 批号
* qty: 数量
* remark: 备注
*
* }
* @return PdaResponse
*/
PdaResponse packConfirmReturn(JSONObject whereJson);
}

View File

@@ -6,6 +6,7 @@ import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.IdUtil;
import org.nl.common.utils.JSONObjectOf;
import org.nl.common.utils.SecurityUtils;
import org.nl.wms.pda.general_management.service.PdaPublicInterfaceService;
@@ -16,6 +17,9 @@ import org.nl.wms.pdm_management.service.dao.MdPdmPackaging;
import org.nl.wms.pdm_management.service.dao.mapper.MdPdmPackagingMapper;
import org.nl.wms.sch_manage.service.ISchBasePointService;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.util.tasks.PackagingMiddleTask;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.nl.wms.warehouse_management.enums.IOSEnum;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
@@ -60,11 +64,17 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
@Resource
private MdPdmPackagingMapper mdPdmPackagingMapper;
/**
* 内包材送入中间站任务类
*/
@Resource
private PackagingMiddleTask packagingMiddleTask;
@Override
public PdaResponse queryPointRegion(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") + "");
}
return pdaPublicInterfaceService.queryRegionDropdown(JSONObjectOf.of("region", pointDao.getRegion_code()));
}
@@ -136,4 +146,150 @@ public class PdaPackagingServiceImpl implements PdaPackagingService {
});
return PdaResponse.requestOk();
}
@Override
public PdaResponse queryPointInDtl(JSONObject whereJson) {
// 判断点位是否是agv对接区
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "");
}
if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("AGV对接区"))) {
throw new BadRequestException("当前点位不在AGV对接区请先转运【" + whereJson.getString("point_code") + "");
}
whereJson.put("out_point", whereJson.getString("point_code"));
return PdaResponse.requestParamOk(mdPdmPackagingMapper.queryTransferDtl(whereJson));
}
@Override
public PdaResponse queryPointInDownload() {
List<SchBasePoint> pointDaoList = iSchBasePointService.list(
new QueryWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getRegion_code, IOSEnum.REGION_CODE.code("外包材区域"))
.eq(SchBasePoint::getIs_used, IOSConstant.ONE)
);
return PdaResponse.requestParamOk(pointDaoList);
}
@Override
@Transactional
public PdaResponse packInConfirm(JSONObject whereJson) {
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
// 创建agv任务
JSONObject jsonTask = new JSONObject();
jsonTask.put("point_code1", whereJson.getString("point_code"));
jsonTask.put("point_code2", 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"));
packagingMiddleTask.create(jsonTask);
return PdaResponse.requestOk();
}
@Override
public PdaResponse queryPointDrawDtl(JSONObject whereJson) {
// 判断点位是否是外包材区
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前点位不存在【" + whereJson.getString("point_code") + "");
}
if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) {
throw new BadRequestException("当前点位不在外包材区域,不允许领用!");
}
whereJson.put("out_point", whereJson.getString("point_code"));
return PdaResponse.requestParamOk(mdPdmPackagingMapper.queryTransferDtl(whereJson));
}
@Override
@Transactional
public PdaResponse queryDrawConfirm(JSONObject whereJson) {
List<JSONObject> rows = whereJson.getJSONArray("rows").toJavaList(JSONObject.class);
// 查询原库存数量
List<MdPdmPackaging> oldPackDaoList = iMdPdmPackagingService.list(
new QueryWrapper<MdPdmPackaging>().lambda()
.in(MdPdmPackaging::getPacking_id, rows.stream()
.map(row -> row.getString("packing_id"))
.collect(Collectors.toList()))
);
for (JSONObject json : rows) {
MdPdmPackaging packDao = oldPackDaoList.stream()
.filter(row -> row.getPacking_id().equals(json.getString("packing_id")))
.findFirst().orElse(null);
// 计算重量
double new_qty = NumberUtil.sub(packDao.getQty(), json.getBigDecimal("qty")).doubleValue();
if (new_qty == 0) {
// 删除库存信息
iMdPdmPackagingService.removeById(packDao);
} else {
// 更新库存信息
packDao.setQty(BigDecimal.valueOf(new_qty));
iMdPdmPackagingService.updateById(packDao);
}
}
return PdaResponse.requestOk();
}
@Override
@Transactional
public PdaResponse packConfirmReturn(JSONObject whereJson) {
SchBasePoint pointDao = iSchBasePointService.getById(whereJson.getString("point_code"));
if (ObjectUtil.isEmpty(pointDao)) {
throw new BadRequestException("当前点位不存在【"+whereJson.getString("point_code")+"");
}
// 判断点位区域是否是外包材区域
if (!pointDao.getRegion_code().equals(IOSEnum.REGION_CODE.code("外包材区域"))) {
throw new BadRequestException("当前点位不属于还回区域点位【"+whereJson.getString("point_code")+"");
}
// 查询当前点位是否有库存
List<MdPdmPackaging> packDaoList = iMdPdmPackagingService.list(
new QueryWrapper<MdPdmPackaging>().lambda()
.eq(MdPdmPackaging::getPoint_code, whereJson.getString("point_code"))
);
MdPdmPackaging mdPdmPackaging = new MdPdmPackaging();
mdPdmPackaging.setPacking_id(IdUtil.getStringId());
mdPdmPackaging.setMaterial_id(whereJson.getString("material_id"));
mdPdmPackaging.setPcsn(whereJson.getString("pcsn"));
mdPdmPackaging.setPoint_code(whereJson.getString("point_code"));
mdPdmPackaging.setQty(whereJson.getBigDecimal("qty"));
mdPdmPackaging.setRemark(whereJson.getString("remark"));
mdPdmPackaging.setCreate_id(SecurityUtils.getCurrentUserId());
mdPdmPackaging.setCreate_name(SecurityUtils.getCurrentNickName());
mdPdmPackaging.setCreate_time(DateUtil.now());
if (ObjectUtil.isNotEmpty(packDaoList)) {
// 判断物料是否相同
boolean is_like = packDaoList.stream()
.allMatch(row -> row.getMaterial_id().equals(whereJson.getString("material_id")));
if (!is_like) {
throw new BadRequestException("当前点位物料与还回物料不符!");
}
// 查询是否有相同批次
MdPdmPackaging likePcsnDao = packDaoList.stream()
.filter(row -> row.getPcsn().equals(whereJson.getString("pcsn")))
.findFirst().orElse(null);
if (ObjectUtil.isNotEmpty(likePcsnDao)) {
// 重量叠加
likePcsnDao.setQty(NumberUtil.add(likePcsnDao.getQty(), whereJson.getBigDecimal("qty")));
likePcsnDao.setCreate_id(SecurityUtils.getCurrentUserId());
likePcsnDao.setCreate_name(SecurityUtils.getCurrentNickName());
likePcsnDao.setCreate_time(DateUtil.now());
likePcsnDao.setRemark(whereJson.getString("remark"));
iMdPdmPackagingService.updateById(likePcsnDao);
} else {
// 新增点位库存记录
iMdPdmPackagingService.save(mdPdmPackaging);
}
} else {
// 新增带你为库存记录
iMdPdmPackagingService.save(mdPdmPackaging);
}
return PdaResponse.requestOk();
}
}

View File

@@ -0,0 +1,176 @@
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.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.ISchBaseTaskService;
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;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* <p>
* 内包材送入任务类(中间站至外包材点位)
* </p>
*
* @author Liuxy
* @since 2025-12-29
*/
@Component(value = "PackagingInTask")
@TaskType("PackagingInTask")
public class PackagingInTask extends AbstractTask {
@Autowired
private ISchBaseTaskService taskService;
/**
* 外包材服务类
*/
@Resource
private IMdPdmPackagingService iMdPdmPackagingService;
@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.CREATE.getCode());
task.setConfig_code(PackagingInTask.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.setPriority(json.getString("Priority"));
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.setPriority(IOSConstant.ONE);
return acsTaskDto;
}
@Override
@Transactional
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);
}
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
}
@Override
@Transactional
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);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
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())
);
}
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.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);
}
@Override
public void taskConfirm(String task_code) {
}
}

View File

@@ -0,0 +1,204 @@
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.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;
import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_management.enums.IOSConstant;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* <p>
* 内包材送入中间站任务类
* </p>
*
* @author Liuxy
* @since 2025-12-29
*/
@Component(value = "PackagingMiddleTask")
@TaskType("PackagingMiddleTask")
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();
task.setTask_id(IdUtil.getStringId());
task.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
task.setTask_status(TaskStatus.CREATE.getCode());
task.setConfig_code(PackagingMiddleTask.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.setPriority(json.getString("Priority"));
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.setPriority(IOSConstant.ONE);
return acsTaskDto;
}
@Override
@Transactional
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);
}
}
@Override
@Transactional
public void forceFinish(String task_code) {
SchBaseTask taskObj = taskService.getByCode(task_code);
if (ObjectUtil.isEmpty(taskObj)) {
throw new BadRequestException("该任务不存在");
}
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
}
@Override
@Transactional
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);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
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())
);
}
}
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
.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);
}
@Override
public void taskConfirm(String task_code) {
}
}

View File

@@ -42,6 +42,11 @@ public class IOSConstant {
*/
public final static String CREATE_TYPE = "1";
/**
* AGV中间站点位编码
*/
public final static String AGVZJZ001 = "AGVZJZ001";
/**
* 更新库存状态:加可用(插入数据)
*/

View File

@@ -118,7 +118,9 @@ public enum IOSEnum {
CHECK_DTL_STATUS(MapOf.of("生成", "10", "移库中", "15", "盘点中", "20", "回库中", "30", "完成", "99")),
// 区域编码
REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01")),
REGION_CODE(MapOf.of("出入库区域", "INOUR01", "AGV对接区", "AGVDJ01", "临时储存区", "LSCC01"
, "外包材区域", "WBCZC01"
)),
;