opt: 压片前段业务

This commit is contained in:
2026-01-08 20:00:35 +08:00
parent e7f84b13b0
commit 72ad55b1c9
13 changed files with 375 additions and 47 deletions

View File

@@ -1,5 +1,6 @@
package org.nl.wms.basedata_manage.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

View File

@@ -4,6 +4,7 @@ import com.alibaba.fastjson.JSONObject;
import org.nl.wms.basedata_manage.service.dao.Sectattr;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import java.util.Map;
@@ -49,12 +50,12 @@ public interface PdaBuildParamService {
/**
* 构建出库单参数
* @param param
* @param sectattr
* @param storId
* @return
*/
JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr);
JSONObject doBuildOutInvObj(JSONObject param, String storId);
JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId);
JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto);
JSONObject buildOutAllSetData(SchBasePoint endPoint, String invId);

View File

@@ -33,6 +33,7 @@ import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDisDto;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.springframework.stereotype.Service;
import javax.annotation.Resource;
@@ -163,26 +164,25 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
}
@Override
public JSONObject doBuildOutInvObj(JSONObject param, Sectattr sectattr) {
public JSONObject doBuildOutInvObj(JSONObject param, String storId) {
JSONObject insertInvObj = new JSONObject();
JSONArray rows = param.getJSONArray("rows");
JSONObject row = rows.getJSONObject(0);
List<JSONObject> result = filterAndSumByMaterialIdAndPcsn(rows);
List<JSONObject> rowList = new ArrayList<>();
for (JSONObject rowObj : result) {
List<JSONObject> temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", row.getString("stor_id")
, "sect_id", row.getString("sect_id")
, "struct_code", row.getString("struct_code")
, "material_code", row.getString("material_code")
List<JSONObject> temps = outBillService.getCanuseSpecifiedIvt(MapOf.of("stor_id", rowObj.getString("stor_id")
, "sect_id", rowObj.getString("sect_id")
, "struct_code", rowObj.getString("struct_code")
, "material_code", rowObj.getString("material_code")
, "pcsn", rowObj.getString("pcsn")
, "vehicle_code", row.getString("vehicle_code")));
, "vehicle_code", rowObj.getString("vehicle_code")));
if (temps.size() > 0) {
JSONObject temp = temps.get(0);
temp.put("plan_qty", rowObj.getString("qty"));
rowList.add(temp);
}
}
insertInvObj.put("stor_id", sectattr.getStor_id());
insertInvObj.put("stor_id", storId);
insertInvObj.put("bill_status", "10");
insertInvObj.put("bill_type", param.getString("bill_type"));
insertInvObj.put("biz_date", DateUtil.format(new Date(), "yyyy-MM-dd"));
@@ -224,27 +224,28 @@ public class DefaultPdaBuildParamService implements PdaBuildParamService {
}
@Override
public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, String invId) {
public JSONObject buildManuaOutDivData(JSONObject param, Sectattr outStructAttr, IOStorInvDtlDto ioStorInvDtlDto) {
JSONObject outDivObj = new JSONObject();
JSONObject row = param.getJSONArray("rows").getJSONObject(0);
List<MdPbStoragevehicleextDto> dtoList = outBillService.queryAvailableSpecifiedInv(MapOf.of("stor_id", outStructAttr.getStor_id()
, "material_code", row.getString("material_code")
, "sect_id", outStructAttr.getSect_id()
, "struct_code", row.getString("struct_code")
, "pcsn", row.getString("pcsn")
, "vehicle_code", row.getString("vehicle_code")));
if (dtoList.size() == 0) {
throw new BadRequestException("未找到库存信息!");
// 对应的明细id和主表id
JSONObject row = new JSONObject();
outDivObj.put("row", row);
row.put("iostorinv_id", ioStorInvDtlDto.getIostorinv_id());
row.put("iostorinvdtl_id", ioStorInvDtlDto.getIostorinvdtl_id());
// 托盘中的某个明细
JSONObject pRow = param.getJSONObject("row");
String vehicleCode = pRow.getString("vehicle_code");
JSONArray dtLMaterialInfo = groupplateService.getDtLMaterialInfo(vehicleCode, ioStorInvDtlDto.getMaterial_id(), ioStorInvDtlDto.getPcsn());
outDivObj.put("rows", dtLMaterialInfo);
for (int i = 0; i < dtLMaterialInfo.size(); i++) {
JSONObject rowsJSONObject = dtLMaterialInfo.getJSONObject(i);
rowsJSONObject.put("sect_id", pRow.getString("sect_id"));
rowsJSONObject.put("sect_name", pRow.getString("sect_name"));
rowsJSONObject.put("sect_code", pRow.getString("sect_code"));
rowsJSONObject.put("struct_id", pRow.getString("struct_id"));
rowsJSONObject.put("struct_code", pRow.getString("struct_code"));
rowsJSONObject.put("struct_name", pRow.getString("struct_name"));
}
JSONObject jsonObject = JSONObject.parseObject(JSON.toJSONString(dtoList.get(0)));
List<Map<String, Object>> invDtls = ioStorInvDtlMapper.selectMaps(new LambdaQueryWrapper<IOStorInvDtl>()
.eq(IOStorInvDtl::getIostorinv_id, invId));
for (Map<String, Object> invDtl : invDtls) {
invDtl.put("storagevehicle_code", row.getString("vehicle_code"));
}
jsonObject.put("iostorinv_id", invId);
outDivObj.put("row", jsonObject);
outDivObj.put("rows", invDtls);
return outDivObj;
}

View File

@@ -1,6 +1,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.JSON;
import com.alibaba.fastjson.JSONArray;
@@ -41,6 +42,7 @@ import org.nl.wms.warehouse_management.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_management.service.dao.IOStorInvDtl;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_management.service.dao.mapper.IOStorInvDtlMapper;
import org.nl.wms.warehouse_management.service.dto.IOStorInvDtlDto;
import org.redisson.api.RLock;
import org.redisson.api.RedissonClient;
import org.springframework.stereotype.Service;
@@ -111,22 +113,21 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(search)) {
throw new BadRequestException("载具不存在!");
}
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1"));
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(search, Arrays.asList("1", "2"));
return PdaResponse.requestParamOk(res);
}
@Override
public PdaResponse getStockGroupInfo(JSONObject param) {
// sect_code, material_id, pcsn
if (ObjectUtil.isEmpty(param.get("sect_code"))) {
throw new BadRequestException("请选择库区!");
}
// material_id, pcsn
List<JSONObject> res = groupplateService.getStockGroupInfo(param);
return PdaResponse.requestParamOk(res);
}
@Override
@Transactional(rollbackFor = Exception.class)
public PdaResponse confirmCallMaterial(JSONObject param) {
// hint: 没有创建出库单
// point_code, rowsect_code
log.info("手持托盘叫料:{}", param);
if (ObjectUtil.isEmpty(param.get("point_code"))) {
@@ -140,12 +141,47 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(endPoint)) {
throw new BadRequestException("输入的点位不存在或者点位已被禁用, 请检查输入点位是否正确或是否被禁用!");
}
if (!"1".equals(endPoint.getPoint_status())) {
throw new BadRequestException("该点位不是空位,请检查后呼叫!");
}
// 判断任务是否创建
List<SchBaseTask> tasks = taskService.getTaskByQuery(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getPoint_code1, pointCode));
if (tasks.size() > 0) {
throw new BadRequestException("该点位已创建过任务!");
}
JSONObject row = param.getJSONObject("row");
// 如果是制粒,需要走正规出入库流程
if ("ZLQ".equals(endPoint.getRegion_code())) {
Structattr structattr = structattrService.getByCode(row.getString("struct_code"));
param.put("bill_type", IOSEnum.OUT_BILL_TYPE.code("批料出库"));
// 1 创建出库单、明细、分配明细
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(row.getString("vehicle_code"), Arrays.asList("1", "2"));
param.put("rows", res);
JSONObject invObj = defaultPdaBuildParam.doBuildOutInvObj(param, structattr.getStor_id());
String invId = outBillService.insertDtl(invObj);
Sectattr sectattr = sectattrService.findByCode(structattr.getSect_code(), false);
// 2 循环根据插入的dtl 去寻找袋的组盘信息调用手动分配
List<IOStorInvDtlDto> billDtl = outBillService.getOutBillDtl(MapUtil.of("iostorinv_id", invId));
for (IOStorInvDtlDto ioStorInvDtlDto : billDtl) {
JSONObject divObj = defaultPdaBuildParam.buildManuaOutDivData(param, sectattr, ioStorInvDtlDto);
outBillService.manualDiv(divObj);
}
// 3 创建任务
JSONObject jsonMst = defaultPdaBuildParam.buildOutAllSetData(endPoint, invId);
outBillService.allSetPoint(jsonMst);
return PdaResponse.requestOk("呼叫成功!");
}
// 创建任务
JSONObject taskParam = new JSONObject();
taskParam.put("point_code1", row.getString("struct_code"));
taskParam.put("point_code2", param.getString("point_code"));
taskParam.put("vehicle_code", row.getString("vehicle_code"));
// 代表任务完成的时候不需要调用库存完成
taskParam.put("flag", "1");
palletOutTask.create(taskParam);
return PdaResponse.requestOk("呼叫成功!");
}
@@ -405,7 +441,15 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (res.size() == 0) {
throw new BadRequestException("当前托盘号不存在物料信息,请检查!");
}
preProcessingInTask.create(param);
// 如果是仓位就需要走原辅料入库
Sectattr sectCode = sectattrService.findByCode(param.getString("sect_code"), false);
if (ObjectUtil.isNotEmpty(sectCode)) {
// 辅料入库
param.put("rows", res);
receivedIn(param);
} else {
preProcessingInTask.create(param);
}
return PdaResponse.requestOk();
}
@@ -424,6 +468,16 @@ public class PdaProductionServiceImpl implements PdaProductionService {
param.getString("vehicle_code")));
}
/**
* 各工序作业完成,组盘后下料入库或缓存:
* 1、称量、粉碎下料组盘后扫点位/载具点确认,系统分配物料存放室或批料室空货位入库;
* 2、压片下料组盘后扫点位、载具点确认系统分配中间站空货位入库
* 3、包衣下料组盘后扫点位点呼叫AGV系统呼叫AGV来取货扫点位、载具点确认系统分配中间站空货位入库
* 4、码垛完成后扫点位、载具点确认系统分配缓存点位搬运暂存
* 5、缠膜完成后扫点位、载具点确认系统分配缓存点位搬运暂存
* @param param
* @return
*/
@Override
public PdaResponse productionLine(JSONObject param) {
// point_code, vehicle_code
@@ -435,11 +489,55 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(point)) {
throw new BadRequestException("点位[" + pointCode +"]不存在!");
}
if (point.getRegion_code().startsWith("FSSQ")) {
// 粉碎室入库逻辑
productionInStorage(param, point);
return PdaResponse.requestOk();
}
AbstractTask task = taskFactory.getTask(IOSEnum.DOWN_CONFIG_CODE.code(point.getRegion_code()));
task.create(param);
return PdaResponse.requestOk();
}
/**
* 入库
* @param param
*/
@Transactional(rollbackFor = Exception.class)
public void productionInStorage(JSONObject param, SchBasePoint point) {
// 入库库区
String inSect = point.getIn_sect();
if (ObjectUtil.isEmpty(inSect)) {
throw new BadRequestException("点位【" + point.getPoint_code() + "】未配置入库库区!");
}
Sectattr sectattr = sectattrService.findByCode(inSect, false);
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("库区不存在,请确保库区存在!");
}
// 入库三件套
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("粉碎入库"));
// 设置rows(需要根据物料和批次区分)
List<JSONObject> res = groupplateService.getPalletViewByVehicleCode(param.getString("vehicle_code")
, Arrays.asList("1"));
// 需要过滤出物料id+批次并汇总qty
JSONArray jsonArray = new JSONArray();
jsonArray.addAll(res);
List<JSONObject> jsonObjects = DefaultPdaBuildParamService.filterAndSumByMaterialIdAndPcsn(jsonArray);
param.put("rows", jsonObjects);
// 1 创建入库单、明细、分配明细
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, point, sectattr);
String invId = rawAssistIStorService.insertDtl(invObj);
// 2 调用分配
Map<String, Object> divObj = defaultPdaBuildParam.buildDivStructData(param, sectattr, invId, true);
rawAssistIStorService.divStruct(divObj);
// 3 创建任务
Map<String, Object> jsonMst = defaultPdaBuildParam.buildTaskData(point, invId);
rawAssistIStorService.divPoint(jsonMst);
}
@SneakyThrows
@Override
public PdaResponse receivedIn(JSONObject param) {
@@ -459,6 +557,9 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (ObjectUtil.isEmpty(startPoint.getVehicle_code())) {
throw new BadRequestException("点位载具号为空!");
}
if (!ObjectUtil.equals(startPoint.getVehicle_code(), param.getString("vehicle_code"))) {
throw new BadRequestException("点位载具号不一致!!!");
}
Sectattr sectattr = sectattrService.findByCode(sect_code, true);
if (ObjectUtil.isEmpty(sectattr)) {
throw new BadRequestException("库区不存在或者被禁用!");
@@ -469,6 +570,7 @@ public class PdaProductionServiceImpl implements PdaProductionService {
if (tasks.size() > 0) {
throw new BadRequestException("该点位已创建过任务!");
}
storagevehicleinfoService.getByCode(param.getString("vehicle_code"));
param.put("bill_type", IOSEnum.IN_BILL_TYPE.code("原辅料入库"));
// 1 创建入库单、明细、分配明细
Map<String, Object> invObj = defaultPdaBuildParam.doBuildInvObj(param, startPoint, sectattr);

View File

@@ -100,7 +100,9 @@ public class PalletOutTask extends AbstractTask {
// 点位上锁
structattrService.update(new LambdaUpdateWrapper<Structattr>()
.set(Structattr::getLock_type, IOSEnum.LOCK_TYPE.code("其他锁"))
.set(Structattr::getLock_type, ObjectUtil.isNotEmpty(json.get("flag"))
? IOSEnum.LOCK_TYPE.code("其他锁")
: IOSEnum.LOCK_TYPE.code("出库锁"))
.eq(Structattr::getStruct_code, task.getPoint_code1()));
// 下发任务
@@ -123,7 +125,7 @@ public class PalletOutTask extends AbstractTask {
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(taskDao.getIs_wait());
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
@@ -192,6 +194,11 @@ public class PalletOutTask extends AbstractTask {
.set(SchBasePoint::getPoint_status, IOSEnum.POINT_STATUS.code("有箱有料"))
.set(SchBasePoint::getIng_task_code, taskObj.getTask_id())
);
JSONObject jsonObject = JSONObject.parseObject(taskObj.getRequest_param());
if (ObjectUtil.isEmpty(jsonObject.get("flag"))) {
// 解锁、库存清空
outBillService.taskFinish(taskObj);
}
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");

View File

@@ -46,6 +46,7 @@ public class PreProcessingInTask extends AbstractTask {
@Override
public String create(JSONObject json) {
// 获取终点
// 考虑提供的室区域还是库区
List<SchBasePoint> points = pointService.getCanUsePointByRegion(json.getString("sect_code"));
if (ObjectUtil.isEmpty(points)) {
throw new BadRequestException("暂无可用点位!");
@@ -88,7 +89,7 @@ public class PreProcessingInTask extends AbstractTask {
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(IOSConstant.ZERO);
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setAgv_system_type(IOSConstant.THREE);

View File

@@ -0,0 +1,189 @@
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.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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
/**
* 生产入库:粉碎入库
* @author: lyd
* @date: 2026/1/8
*/
@Component("ProduceInTask")
public class ProduceInTask 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(ProduceInTask.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.AGV_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);
}
}
@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())
);
//分配表清除任务
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);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
rawAssistIStorService.taskFinish(taskObj);
// 更新起点
pointService.update(
new UpdateWrapper<SchBasePoint>().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) {
}
}

View File

@@ -26,6 +26,7 @@ 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 org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
@@ -87,7 +88,7 @@ public class RawInTask extends AbstractTask {
acsTaskDto.setVehicle_type(IOSConstant.ONE);
acsTaskDto.setIs_wait(IOSConstant.ZERO);
acsTaskDto.setTask_type(ACSTaskTypeEnum.CTU_TASK.getCode());
acsTaskDto.setTask_type(ACSTaskTypeEnum.AGV_TASK.getCode());
acsTaskDto.setPriority(IOSConstant.ONE);
acsTaskDto.setAgv_system_type(IOSConstant.THREE);
@@ -121,6 +122,7 @@ public class RawInTask extends AbstractTask {
}
}
@Transactional(rollbackFor = Exception.class)
public void cancelTask(SchBaseTask taskObj) {
// 取消任务
taskService.update(new LambdaUpdateWrapper<SchBaseTask>()
@@ -144,6 +146,7 @@ public class RawInTask extends AbstractTask {
taskService.updateById(taskObj);
}
@Transactional(rollbackFor = Exception.class)
public void finishTask(SchBaseTask taskObj) {
// 任务完成
taskObj.setTask_status(TaskStatus.FINISHED.getCode());

View File

@@ -35,12 +35,14 @@ public enum IOSEnum {
"原辅料入库", "0001",
"剩料回库", "0002",
"中间站入库", "0003",
"直接入库", "0004"
"直接入库", "0004",
"粉碎入库", "0005"
)),
// 出库业务类型
OUT_BILL_TYPE(MapOf.of("手工出库", "1009",
"原辅料出库", "1001",
"批料出库", "1002",
"直接出库", "1099"
)),
@@ -52,12 +54,15 @@ public enum IOSEnum {
// 入库任务配置类编码
IN_CONFIG_CODE(MapOf.of("0009", "HandInTask",
"0001", "RawInTask", "0002", "RawInTask", "0003", "CenterInTask"
"0001", "RawInTask",
"0002", "RawInTask",
"0003", "CenterInTask",
"0005", "ProduceInTask"
)),
// 出库任务配置类编码
OUT_CONFIG_CODE(MapOf.of( "1009", "HandOutTask",
"1001", "CallMaterialTask"
"1001", "CallMaterialTask", "1002", "PalletOutTask"
)),
// 下料任务配置编码
DOWN_CONFIG_CODE(MapOf.of("YPQ", "TabletingInTask"

View File

@@ -1,5 +1,6 @@
package org.nl.wms.warehouse_management.service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
@@ -113,4 +114,6 @@ public interface IMdPbGroupplateService extends IService<GroupPlate> {
* @return List<MdMeMaterialbase>
*/
List<MdMeMaterialbase> queryMaterList();
JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn);
}

View File

@@ -1,5 +1,6 @@
package org.nl.wms.warehouse_management.service.dao.mapper;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -69,4 +70,6 @@ public interface MdPbGroupplateMapper extends BaseMapper<GroupPlate> {
List<JSONObject> getPalletViewByVehicleCode(String search, List<String> status);
List<JSONObject> getStockGroupInfo(JSONObject param);
JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn);
}

View File

@@ -207,9 +207,15 @@
AND
mg.pcsn = #{pcsn}
</if>
<if test="sect_code != null and sect_code != ''">
AND
ss.sect_code = #{sect_code}
</if>
</select>
<select id="getDtLMaterialInfo" resultType="com.alibaba.fastjson.JSONObject">
SELECT
g.*,
g.vehicle_code AS storagevehicle_code,
g.qty AS canuse_qty
FROM
`md_pb_groupplate` g
WHERE g.vehicle_code = #{vehicleCode} AND g.material_id = #{materialId}
AND g.pcsn = #{pcsn} AND `status` = '2'
</select>
</mapper>

View File

@@ -2,6 +2,7 @@ package org.nl.wms.warehouse_management.service.impl;
import cn.hutool.core.date.DateUtil;
import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
@@ -212,4 +213,9 @@ public class MdPbGroupplateServiceImpl extends ServiceImpl<MdPbGroupplateMapper,
.eq(MdMeMaterialbase::getIs_used, IOSConstant.ONE)
);
}
@Override
public JSONArray getDtLMaterialInfo(String vehicleCode, String materialId, String pcsn) {
return this.baseMapper.getDtLMaterialInfo(vehicleCode, materialId, pcsn);
}
}