add:手持外包材管理
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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();
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
@@ -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) {
|
||||
}
|
||||
}
|
||||
@@ -42,6 +42,11 @@ public class IOSConstant {
|
||||
*/
|
||||
public final static String CREATE_TYPE = "1";
|
||||
|
||||
/**
|
||||
* AGV中间站点位编码
|
||||
*/
|
||||
public final static String AGVZJZ001 = "AGVZJZ001";
|
||||
|
||||
/**
|
||||
* 更新库存状态:加可用(插入数据)
|
||||
*/
|
||||
|
||||
@@ -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"
|
||||
)),
|
||||
|
||||
;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user