opt:叫料、退料退空桶优化

This commit is contained in:
2025-10-23 15:30:55 +08:00
parent 4f88171f28
commit 06a1cab391
10 changed files with 71 additions and 45 deletions

View File

@@ -90,6 +90,6 @@ public class LogMessageConstant {
/**
* 索引路径
*/
public final static String INDEX_DIR = "D:\\software\\lucene\\index";
public final static String INDEX_DIR = "C:\\software\\lucene\\index";
}

View File

@@ -211,6 +211,11 @@
attr.stor_id = #{param.stor_id}
</if>
<if test="param.stor_code != null and param.stor_code != ''">
AND
attr.stor_code = #{param.stor_code}
</if>
<if test="param.sect_id != null and param.sect_id != ''">
AND
attr.sect_id = #{param.sect_id}
@@ -234,6 +239,11 @@
mater.material_name LIKE CONCAT('%', #{param.material_code},'%') )
</if>
<if test="param.material_model != null and param.material_model != ''">
AND
mater.material_model LIKE CONCAT('%', #{material_model},'%')
</if>
<if test="param.pcsn != null and param.pcsn != ''">
AND
ext.pcsn LIKE #{param.pcsn}

View File

@@ -26,6 +26,7 @@ import java.util.Map;
@RestController
@RequestMapping("/api/mes")
@Slf4j
@SaIgnore
public class MesToWmsController {
@Resource
@@ -49,7 +50,7 @@ public class MesToWmsController {
}
@PostMapping("/getStructIvt")
@PostMapping("/getStructivt")
@Log("查询库存")
@SaIgnore
public ResponseEntity<Object> getStructIvt(@RequestBody JSONObject whereJson) {

View File

@@ -9,13 +9,6 @@ public class MesBackMaterialRequestDto {
@NotBlank(message = "设备号不可为空")
private String device_code;
@NotBlank(message = "料桶号不可为空")
private String vehicle_code;
@NotBlank(message = "物料编码不可为空")
private String material_code;
@NotBlank(message = "批次")
private String pcsn;
private String qty_unit_name;
@@ -23,12 +16,6 @@ public class MesBackMaterialRequestDto {
@NotBlank(message = "数量不可为空")
private String qty;
@NotBlank(message = "供应商编码不可为空")
private String supp_code;
@NotBlank(message = "供应商名称不可为空")
private String supp_name;
private String remark;
@NotBlank(message = "任务号不可为空")

View File

@@ -156,7 +156,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
}
// 出库的仓位
Structattr outStructAttr = structattrService.getByVehicleCode(dto.getStruct_code());
Structattr outStructAttr = structattrService.getByCode(dto.getStruct_code());
if (ObjectUtil.isEmpty(outStructAttr)) {
throw new BadRequestException("仓位【" + dto.getStruct_code() + "】不存在!");
}
@@ -165,6 +165,11 @@ public class MesToWmsServiceImpl implements MesToWmsService {
throw new BadRequestException("仓位【" + dto.getStruct_code() + "】上没有料,无法叫料!");
}
//只有料桶缓存库区的料才能被叫料
if(!"LT".equals(outStructAttr.getStor_code())){
throw new BadRequestException("只有料桶缓存库区的料才能被叫料!");
}
List<SchBaseTask> taskList = taskService.list(new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getExt_task_code, dto.getTask_code()));
@@ -443,14 +448,10 @@ public class MesToWmsServiceImpl implements MesToWmsService {
if (dto.getIsManual() != null && dto.getIsManual()) {
dto.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
dto.setPcsn("退料");
dto.setQty_unit_name("");
//退料需要判断
if("1".equals(dto.getTask_type())){
if(StringUtils.isEmpty(dto.getMaterial_code())){
throw new BadRequestException("物料编码不可为空");
}
if(StringUtils.isEmpty(dto.getQty())){
throw new BadRequestException("数量不可为空");
}
@@ -463,24 +464,27 @@ public class MesToWmsServiceImpl implements MesToWmsService {
if (tryLock) {
log.info("MES下发设备退料信息输入参数--------------------------------------" + MesResponse.requestOk());
//根据点位去查找对应的料桶号信息
SchBasePoint point = pointService.getById(dto.getDevice_code());
//根据料桶号去载具表匹配料桶类型
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getByCode(dto.getVehicle_code());
MdPbStoragevehicleinfo mdPbStoragevehicleinfo = iMdPbStoragevehicleinfoService.getByCode(point.getVehicle_code());
if(mdPbStoragevehicleinfo == null){
throw new BadRequestException("未找到载具编码为:" + dto.getVehicle_code() + "的载具!");
throw new BadRequestException("机台"+dto.getDevice_code()+"上没有载具的载具!");
}
//通过料桶号的料桶类型,匹配确认入库库区
Dict dict= dictService.getDictByCodeAndValue("storagevehicle_type",mdPbStoragevehicleinfo.getStoragevehicle_type());
if(dict==null){
throw new BadRequestException("未找到载具编码为" + dto.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
throw new BadRequestException("未找到载具编码为" + point.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
}
//查询库区
Sectattr sectattr = sectattrService.findByCode(dict.getPara1());
if(sectattr==null){
throw new BadRequestException("未找到载具编码为" + dto.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
throw new BadRequestException("未找到载具编码为" + point.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
}
JSONObject param = new JSONObject();
@@ -494,28 +498,35 @@ public class MesToWmsServiceImpl implements MesToWmsService {
//退料
if("1".equals(dto.getTask_type())){
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(dto.getMaterial_code(), true);
//查询组盘
GroupPlate groupPlate = iMdPbGroupplateService.getOne(new LambdaQueryWrapper<GroupPlate>()
.eq(GroupPlate::getStoragevehicle_code, point.getVehicle_code())
.eq(GroupPlate::getStatus, "03"));
if (ObjectUtil.isEmpty(groupPlate)) {
throw new BadRequestException("点位"+point.getPoint_code()+"上的托盘不存在组盘信息!");
}
MdMeMaterialbase materDao = iMdMeMaterialbaseService.getByCode(groupPlate.getMaterial_id(), true);
//通过托盘号查找组盘信息
param.put("sect_code",sectattr.getSect_code());
param.put("sect_id",sectattr.getSect_id());
param.put("vehicle_code",dto.getVehicle_code());
param.put("vehicle_code",point.getVehicle_code());
param.put("storagevehicle_code", param.getString("vehicle_code"));
param.put("site_code",dto.getDevice_code());
param.put("material_id",materDao.getMaterial_code());
param.put("material_code",materDao.getMaterial_code());
param.put("pcsn",dto.getPcsn());
param.put("pcsn",groupPlate.getPcsn());
param.put("qty",dto.getQty());
param.put("qty_unit_name",dto.getQty_unit_name());
param.put("stor_id",sectattr.getStor_id());
param.put("supp_code",dto.getSupp_code());
param.put("supp_name",dto.getSupp_name());
param.put("supp_code",groupPlate.getSupp_code());
param.put("supp_name",groupPlate.getSupp_name());
pdaIosInService.zwConfirmReturnMaterial(param);
} else if("2".equals(dto.getTask_type())){
//退空桶
param.put("vehicle_code",dto.getVehicle_code());
param.put("vehicle_code",point.getVehicle_code());
param.put("storagevehicle_code", param.getString("vehicle_code"));
param.put("site_code",dto.getDevice_code());
param.put("sect_id",sectattr.getSect_id());

View File

@@ -609,9 +609,11 @@ public class PdaIosInServiceImpl implements PdaIosInService {
// 生成回库任务
whereJson.put("config_code", IOSConstant.BACK_IN_TASK);
whereJson.put("Priority", TaskEnum.ACS_PRIORITY.code("1"));
//入库分配
groupPlate(whereJson);
//更新状态为组盘状态
iMdPbGroupplateService.update(new LambdaUpdateWrapper<>(GroupPlate.class)
.set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("组盘"))
.eq(GroupPlate::getStoragevehicle_code,whereJson.getString("vehicle_code")));
// groupPlate(whereJson);
whereJson.put("bill_type",StatusEnum.IOBILL_TYPE_IN.code("余料入库"));
whereJson.put("stragegy_type",StatusEnum.IOBILL_TYPE_IN.code("余料入库"));

View File

@@ -122,7 +122,7 @@ public class GetMaterialFromMesTask {
// 组装本地实体
MdMeMaterialbase material = new MdMeMaterialbase();
material.setMaterial_code(materialCode);
material.setMaterial_name(mesRecord.getMaterial_name());
material.setMaterial_name(mesRecord.getMaterial_description());
material.setMaterial_id(mesRecord.getId());
// material.setMaterial_spec(mesRecord.getMaterialModel());
material.setMaterial_model(mesRecord.getMaterial_type());

View File

@@ -3,7 +3,9 @@ package org.nl.wms.sch_manage.service.util.tasks.zw;
import cn.hutool.core.date.DateUtil;
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.update.LambdaUpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil;
@@ -23,6 +25,7 @@ import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
@@ -53,7 +56,7 @@ public class DownEmptyUpFullTask extends AbstractTask {
@Resource
private IInBillService rawAssistIStorService;
private IOutBillService outBillService;
@Resource
@@ -214,7 +217,18 @@ public class DownEmptyUpFullTask extends AbstractTask {
}
//如果是序列2
else{
rawAssistIStorService.taskFinish(taskObj);
//判断序列1的任务是否已完成
List<SchBaseTask> schBaseTaskList = taskService.list(new LambdaQueryWrapper<SchBaseTask>()
.eq(SchBaseTask::getTask_group_seq, 1)
.eq(SchBaseTask::getTask_group_id,taskObj.getTask_group_id())
.eq(SchBaseTask::getTask_status, TaskStatus.FINISHED.getCode()));
if(CollectionUtils.isEmpty(schBaseTaskList)){
throw new BadRequestException("前置任务未完成请先完成任务序列为1的任务!");
}
outBillService.taskFinish(taskObj);
//点位2
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
@@ -256,8 +270,8 @@ public class DownEmptyUpFullTask extends AbstractTask {
.set(Structattr::getUpdate_time, DateUtil.now())
.eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
//删除
iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
// //删除
// iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
//反馈到MES系统
if("自动".equals(taskObj.getCreate_mode())){

View File

@@ -23,6 +23,7 @@ import org.nl.wms.sch_manage.service.util.TaskType;
import org.nl.wms.warehouse_manage.enums.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.inAndOut.service.IInBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.IOutBillService;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
@@ -54,7 +55,7 @@ public class SeparateMaterialTask extends AbstractTask {
@Resource
private IInBillService rawAssistIStorService;
private IOutBillService outBillService;
@Resource
@@ -174,7 +175,7 @@ public class SeparateMaterialTask extends AbstractTask {
taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成");
taskService.updateById(taskObj);
rawAssistIStorService.taskFinish(taskObj);
outBillService.taskFinish(taskObj);
//更改点位的托盘信息,空托盘的点位 2为空托盘放置点位
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
@@ -195,8 +196,8 @@ public class SeparateMaterialTask extends AbstractTask {
.set(Structattr::getUpdate_time, DateUtil.now())
.eq(Structattr::getStruct_code, taskObj.getPoint_code1()));
//删除
iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
// //删除
// iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
//反馈到MES系统
if("自动".equals(taskObj.getCreate_mode())){

View File

@@ -1273,8 +1273,8 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
.storagevehicleCode(ioStorInvDis.getStoragevehicle_code())
.structCode(ioStorInvDis.getStruct_code()).taskType(task.getConfig_code()).inBound(false).build();
iStructattrService.changeStruct(changeDto);
//出库完成后删除组盘
iMdPbGroupplateService.delete(Collections.singleton(task.getGroup_id()));
// //出库完成后删除组盘
// iMdPbGroupplateService.delete(Collections.singleton(task.getGroup_id()));
// 查询该明细下是否还有未完成的分配明细
int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)