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

View File

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

View File

@@ -9,13 +9,6 @@ public class MesBackMaterialRequestDto {
@NotBlank(message = "设备号不可为空") @NotBlank(message = "设备号不可为空")
private String device_code; private String device_code;
@NotBlank(message = "料桶号不可为空")
private String vehicle_code;
@NotBlank(message = "物料编码不可为空")
private String material_code;
@NotBlank(message = "批次")
private String pcsn; private String pcsn;
private String qty_unit_name; private String qty_unit_name;
@@ -23,12 +16,6 @@ public class MesBackMaterialRequestDto {
@NotBlank(message = "数量不可为空") @NotBlank(message = "数量不可为空")
private String qty; private String qty;
@NotBlank(message = "供应商编码不可为空")
private String supp_code;
@NotBlank(message = "供应商名称不可为空")
private String supp_name;
private String remark; private String remark;
@NotBlank(message = "任务号不可为空") @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)) { if (ObjectUtil.isEmpty(outStructAttr)) {
throw new BadRequestException("仓位【" + dto.getStruct_code() + "】不存在!"); throw new BadRequestException("仓位【" + dto.getStruct_code() + "】不存在!");
} }
@@ -165,6 +165,11 @@ public class MesToWmsServiceImpl implements MesToWmsService {
throw new BadRequestException("仓位【" + dto.getStruct_code() + "】上没有料,无法叫料!"); throw new BadRequestException("仓位【" + dto.getStruct_code() + "】上没有料,无法叫料!");
} }
//只有料桶缓存库区的料才能被叫料
if(!"LT".equals(outStructAttr.getStor_code())){
throw new BadRequestException("只有料桶缓存库区的料才能被叫料!");
}
List<SchBaseTask> taskList = taskService.list(new QueryWrapper<SchBaseTask>().lambda() List<SchBaseTask> taskList = taskService.list(new QueryWrapper<SchBaseTask>().lambda()
.eq(SchBaseTask::getExt_task_code, dto.getTask_code())); .eq(SchBaseTask::getExt_task_code, dto.getTask_code()));
@@ -443,14 +448,10 @@ public class MesToWmsServiceImpl implements MesToWmsService {
if (dto.getIsManual() != null && dto.getIsManual()) { if (dto.getIsManual() != null && dto.getIsManual()) {
dto.setTask_code(CodeUtil.getNewCode("TASK_CODE")); dto.setTask_code(CodeUtil.getNewCode("TASK_CODE"));
dto.setPcsn("退料");
dto.setQty_unit_name(""); dto.setQty_unit_name("");
//退料需要判断 //退料需要判断
if("1".equals(dto.getTask_type())){ if("1".equals(dto.getTask_type())){
if(StringUtils.isEmpty(dto.getMaterial_code())){
throw new BadRequestException("物料编码不可为空");
}
if(StringUtils.isEmpty(dto.getQty())){ if(StringUtils.isEmpty(dto.getQty())){
throw new BadRequestException("数量不可为空"); throw new BadRequestException("数量不可为空");
} }
@@ -463,24 +464,27 @@ public class MesToWmsServiceImpl implements MesToWmsService {
if (tryLock) { if (tryLock) {
log.info("MES下发设备退料信息输入参数--------------------------------------" + MesResponse.requestOk()); 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){ if(mdPbStoragevehicleinfo == null){
throw new BadRequestException("未找到载具编码为:" + dto.getVehicle_code() + "的载具!"); throw new BadRequestException("机台"+dto.getDevice_code()+"上没有载具的载具!");
} }
//通过料桶号的料桶类型,匹配确认入库库区 //通过料桶号的料桶类型,匹配确认入库库区
Dict dict= dictService.getDictByCodeAndValue("storagevehicle_type",mdPbStoragevehicleinfo.getStoragevehicle_type()); Dict dict= dictService.getDictByCodeAndValue("storagevehicle_type",mdPbStoragevehicleinfo.getStoragevehicle_type());
if(dict==null){ if(dict==null){
throw new BadRequestException("未找到载具编码为" + dto.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!"); throw new BadRequestException("未找到载具编码为" + point.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
} }
//查询库区 //查询库区
Sectattr sectattr = sectattrService.findByCode(dict.getPara1()); Sectattr sectattr = sectattrService.findByCode(dict.getPara1());
if(sectattr==null){ if(sectattr==null){
throw new BadRequestException("未找到载具编码为" + dto.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!"); throw new BadRequestException("未找到载具编码为" + point.getVehicle_code() + "的载具入库库区,请检查字典中是否维护!");
} }
JSONObject param = new JSONObject(); JSONObject param = new JSONObject();
@@ -494,28 +498,35 @@ public class MesToWmsServiceImpl implements MesToWmsService {
//退料 //退料
if("1".equals(dto.getTask_type())){ 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_code",sectattr.getSect_code());
param.put("sect_id",sectattr.getSect_id()); 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("storagevehicle_code", param.getString("vehicle_code"));
param.put("site_code",dto.getDevice_code()); param.put("site_code",dto.getDevice_code());
param.put("material_id",materDao.getMaterial_code()); param.put("material_id",materDao.getMaterial_code());
param.put("material_code",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",dto.getQty());
param.put("qty_unit_name",dto.getQty_unit_name()); param.put("qty_unit_name",dto.getQty_unit_name());
param.put("stor_id",sectattr.getStor_id()); param.put("stor_id",sectattr.getStor_id());
param.put("supp_code",dto.getSupp_code()); param.put("supp_code",groupPlate.getSupp_code());
param.put("supp_name",dto.getSupp_name()); param.put("supp_name",groupPlate.getSupp_name());
pdaIosInService.zwConfirmReturnMaterial(param); pdaIosInService.zwConfirmReturnMaterial(param);
} else if("2".equals(dto.getTask_type())){ } 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("storagevehicle_code", param.getString("vehicle_code"));
param.put("site_code",dto.getDevice_code()); param.put("site_code",dto.getDevice_code());
param.put("sect_id",sectattr.getSect_id()); 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("config_code", IOSConstant.BACK_IN_TASK);
whereJson.put("Priority", TaskEnum.ACS_PRIORITY.code("1")); 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("bill_type",StatusEnum.IOBILL_TYPE_IN.code("余料入库"));
whereJson.put("stragegy_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(); MdMeMaterialbase material = new MdMeMaterialbase();
material.setMaterial_code(materialCode); material.setMaterial_code(materialCode);
material.setMaterial_name(mesRecord.getMaterial_name()); material.setMaterial_name(mesRecord.getMaterial_description());
material.setMaterial_id(mesRecord.getId()); material.setMaterial_id(mesRecord.getId());
// material.setMaterial_spec(mesRecord.getMaterialModel()); // material.setMaterial_spec(mesRecord.getMaterialModel());
material.setMaterial_model(mesRecord.getMaterial_type()); 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.date.DateUtil;
import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.ObjectUtil;
import com.alibaba.fastjson.JSONObject; import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException; import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil; import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.IdUtil; 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.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum; 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.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.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
@@ -53,7 +56,7 @@ public class DownEmptyUpFullTask extends AbstractTask {
@Resource @Resource
private IInBillService rawAssistIStorService; private IOutBillService outBillService;
@Resource @Resource
@@ -214,7 +217,18 @@ public class DownEmptyUpFullTask extends AbstractTask {
} }
//如果是序列2 //如果是序列2
else{ 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 //点位2
pointService.update(new LambdaUpdateWrapper<SchBasePoint>() pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
@@ -256,8 +270,8 @@ public class DownEmptyUpFullTask extends AbstractTask {
.set(Structattr::getUpdate_time, DateUtil.now()) .set(Structattr::getUpdate_time, DateUtil.now())
.eq(Structattr::getStruct_code, taskObj.getPoint_code4())); .eq(Structattr::getStruct_code, taskObj.getPoint_code4()));
//删除 // //删除
iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id())); // iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
//反馈到MES系统 //反馈到MES系统
if("自动".equals(taskObj.getCreate_mode())){ 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.IOSConstant;
import org.nl.wms.warehouse_manage.enums.IOSEnum; 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.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.IOStorInvDis;
import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper; import org.nl.wms.warehouse_manage.inAndOut.service.dao.mapper.IOStorInvDisMapper;
import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService; import org.nl.wms.warehouse_manage.service.IMdPbGroupplateService;
@@ -54,7 +55,7 @@ public class SeparateMaterialTask extends AbstractTask {
@Resource @Resource
private IInBillService rawAssistIStorService; private IOutBillService outBillService;
@Resource @Resource
@@ -174,7 +175,7 @@ public class SeparateMaterialTask extends AbstractTask {
taskObj.setTask_status(TaskStatus.FINISHED.getCode()); taskObj.setTask_status(TaskStatus.FINISHED.getCode());
taskObj.setRemark("已完成"); taskObj.setRemark("已完成");
taskService.updateById(taskObj); taskService.updateById(taskObj);
rawAssistIStorService.taskFinish(taskObj); outBillService.taskFinish(taskObj);
//更改点位的托盘信息,空托盘的点位 2为空托盘放置点位 //更改点位的托盘信息,空托盘的点位 2为空托盘放置点位
pointService.update(new LambdaUpdateWrapper<SchBasePoint>() pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
@@ -195,8 +196,8 @@ public class SeparateMaterialTask extends AbstractTask {
.set(Structattr::getUpdate_time, DateUtil.now()) .set(Structattr::getUpdate_time, DateUtil.now())
.eq(Structattr::getStruct_code, taskObj.getPoint_code1())); .eq(Structattr::getStruct_code, taskObj.getPoint_code1()));
//删除 // //删除
iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id())); // iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
//反馈到MES系统 //反馈到MES系统
if("自动".equals(taskObj.getCreate_mode())){ if("自动".equals(taskObj.getCreate_mode())){

View File

@@ -1273,8 +1273,8 @@ public class OutBillServiceImpl extends ServiceImpl<IOStorInvMapper,IOStorInv> i
.storagevehicleCode(ioStorInvDis.getStoragevehicle_code()) .storagevehicleCode(ioStorInvDis.getStoragevehicle_code())
.structCode(ioStorInvDis.getStruct_code()).taskType(task.getConfig_code()).inBound(false).build(); .structCode(ioStorInvDis.getStruct_code()).taskType(task.getConfig_code()).inBound(false).build();
iStructattrService.changeStruct(changeDto); 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) int countDis = ioStorInvDisMapper.selectCount(new LambdaQueryWrapper<>(IOStorInvDis.class)