opt:空载具出入库

This commit is contained in:
2025-11-04 15:41:39 +08:00
parent ca06c4c132
commit 957af8db2b
19 changed files with 108 additions and 28 deletions

View File

@@ -34,6 +34,8 @@ import org.nl.wms.basedata_manage.service.dto.StructattrChangeDto;
import org.nl.wms.decision_manage.service.sectStrategy.IStSectStrategyService;
import org.nl.wms.decision_manage.service.sectStrategy.dao.StSectStrategy;
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.base.EmptyVehicleOutHandler;
import org.nl.wms.decision_manage.service.strategyConfig.enums.StragegyTypeEnum;
import org.nl.wms.sch_manage.enums.StatusEnum;
import org.nl.wms.warehouse_manage.enums.IOSEnum;
import org.nl.wms.warehouse_manage.record.service.IStIvtStructivtflowService;
@@ -354,7 +356,12 @@ public class StructattrServiceImpl extends ServiceImpl<StructattrMapper, Structa
for (String decisionerType : strategy) {
Decisioner decisioner = decisionerMap.get(decisionerType);
log.info("执行出库规格:" + decisioner.strategyConfig.getStrategy_name());
list = decisioner.handler(list, JSONObject.toJSON(param));
if(StragegyTypeEnum.STRAGEGY_TYPE.code("空托盘").equals(param.getStragegyType()) || StatusEnum.IOBILL_TYPE_IN.code("空桶入库").equals(param.getStragegyType())) {
EmptyVehicleOutHandler emptyVehicleOutHandler = SpringContextHolder.getBean(EmptyVehicleOutHandler.class);
list = emptyVehicleOutHandler.handler(list, (JSONObject) JSON.toJSON(param));
} else {
list = decisioner.handler(list, JSONObject.toJSON(param));
}
if (CollectionUtils.isEmpty(list)) {
throw new BadRequestException("当前策略" + decisioner.strategyConfig.getStrategy_name() + "无可用货位,分配前数量:" + list.size());
}

View File

@@ -58,7 +58,7 @@ public class StStrategyConfig implements Serializable {
*限定参数
*/
@TableField(typeHandler = FastjsonSortTypeHandler.class)
private JSONObject form_data = new JSONObject();;
private JSONObject form_data = new JSONObject();
/**
* 描述
*/

View File

@@ -0,0 +1,62 @@
package org.nl.wms.decision_manage.service.strategyConfig.decisioner.impl.base;
import com.alibaba.fastjson.JSONObject;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.ObjectUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.MapOf;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.StructattrVechielDto;
import org.nl.wms.basedata_manage.service.dto.StrategyStructMaterialVO;
import org.nl.wms.decision_manage.service.strategyConfig.decisioner.Decisioner;
import org.nl.wms.decision_manage.service.strategyConfig.enums.StragegyTypeEnum;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
/**
* @author zxm
* @Date 2025年11月4日15:12:37
* 空载具出库任务
*/
@Service("emptyVehicleOut")
@Slf4j
public class EmptyVehicleOutHandler extends Decisioner<StrategyStructMaterialVO, JSONObject> {
/**
* 出入库明细服务
*/
@Autowired
private IStructattrService iStructattrService;
@Override
public List<StrategyStructMaterialVO> handler(List<StrategyStructMaterialVO> list, JSONObject param) {
//查新空托盘
//当前条件只有id批次
log.info("---------执行空托盘出库分配规则---------");
BigDecimal planQty = param.getBigDecimal("qty");
List<StructattrVechielDto> vechielDtos =
iStructattrService.collectVechicleNoGroup(MapOf.of(
"stor_code", param.getString("stor_code")
, "sect_code", param.getString("sect_code")
, "is_lock", "false"
, "occupancy_state", "2"
, "order_by", "ivt.update_time asc"));
if (ObjectUtils.isEmpty(vechielDtos)) {
throw new BadRequestException("库存分配失败,失败原因:没有空托盘");
}
List<StrategyStructMaterialVO> divStruct = new ArrayList<>();
for (StructattrVechielDto vechielDto : vechielDtos) {
StrategyStructMaterialVO materialVO = new StrategyStructMaterialVO();
BeanUtils.copyProperties(vechielDto, materialVO);
divStruct.add(materialVO);
}
return divStruct;
}
}

View File

@@ -530,7 +530,7 @@ public class MesToWmsServiceImpl implements MesToWmsService {
param.put("material_code", materDao.getMaterial_code());
param.put("pcsn", groupPlate.getPcsn());
param.put("qty", dto.getQty());
param.put("qty_unit_name", dto.getQty_unit_name());
param.put("qty_unit_name", groupPlate.getQty_unit_name());
param.put("stor_id", sectattr.getStor_id());
param.put("supp_code", groupPlate.getSupp_code());
param.put("supp_name", groupPlate.getSupp_name());

View File

@@ -335,7 +335,9 @@ public class PdaIosInServiceImpl implements PdaIosInService {
if (StringUtils.isNotBlank(whereJson.getString("search"))) {
materialQuery.setSearch(whereJson.getString("search").trim().toUpperCase());
}
Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build());
materialQuery.setIs_used("1");
Page mapPage = iMdMeMaterialbaseService.pageMaps(pageQuery.build(), materialQuery.build().orderByAsc("material_code"));
return PdaResponse.build(mapPage);
}
@@ -707,12 +709,20 @@ public class PdaIosInServiceImpl implements PdaIosInService {
if (vehicleDao.getStoragevehicle_name().contains("托盘")) {
String materialCode = StatusEnum.VEHICLE_TYPE.code("空托盘");
whereJson.put("material_id", iMdMeMaterialbaseService.getByCode(materialCode, false).getMaterial_id());
MdMeMaterialbase mdMeMaterialbase = iMdMeMaterialbaseService.getByCode(materialCode, false);
if(null == mdMeMaterialbase){
throw new BadRequestException("请先维护物料编码=【"+StatusEnum.VEHICLE_TYPE.code("空托盘")+"】的空托盘物料");
}
whereJson.put("material_id", mdMeMaterialbase.getMaterial_id());
whereJson.put("material_code", materialCode);
whereJson.put("pcsn", "空托盘入库");
} else {
String materialCode = StatusEnum.VEHICLE_TYPE.code("空料桶");
whereJson.put("material_id", iMdMeMaterialbaseService.getByCode(materialCode, false).getMaterial_id());
MdMeMaterialbase mdMeMaterialbase = iMdMeMaterialbaseService.getByCode(materialCode, false);
if(null == mdMeMaterialbase){
throw new BadRequestException("请先维护物料编码=【"+StatusEnum.VEHICLE_TYPE.code("空料桶")+"】的空料桶物料");
}
whereJson.put("material_id", mdMeMaterialbase.getMaterial_id());
whereJson.put("material_code", materialCode);
whereJson.put("pcsn", "空料桶入库");
}

View File

@@ -2,6 +2,7 @@ package org.nl.wms.sch_manage.service.dao.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import org.apache.ibatis.annotations.Param;
import org.nl.wms.sch_manage.service.dao.SchBasePoint;
import org.nl.wms.sch_manage.service.dto.SchBasePointQuery;
@@ -50,7 +51,7 @@ public interface SchBasePointMapper extends BaseMapper<SchBasePoint> {
* @param pages 参数
* @return IPage<SchBasePoint>
*/
IPage<SchBasePoint> selectPageLeftJoin(IPage<SchBasePoint> pages, SchBasePointQuery whereJson);
IPage<SchBasePoint> selectPageLeftJoin(IPage<SchBasePoint> pages, @Param("whereJson")SchBasePointQuery whereJson);
SchBasePoint getNotTaskByRegionAndType(String regionCode, String type);

View File

@@ -40,7 +40,7 @@
FROM
`sch_base_point` p
<where>
<if test="whereJson.workshop_code != null and workshop_code != ''">
<if test="whereJson.workshop_code != null and whereJson.workshop_code != ''">
p.workshop_code = #{whereJson.workshop_code}
</if>
<if test="whereJson.blurry != null">

View File

@@ -7,7 +7,7 @@ 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.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.sch_manage.enums.TaskStatus;

View File

@@ -6,7 +6,7 @@ import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.sch_manage.enums.TaskStatus;
import org.nl.wms.sch_manage.service.ISchBaseTaskService;

View File

@@ -7,7 +7,7 @@ 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.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.sch_manage.enums.TaskStatus;

View File

@@ -10,7 +10,7 @@ import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
import org.nl.wms.ext_manage.service.WmsToMesService;

View File

@@ -9,7 +9,7 @@ import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;
@@ -191,8 +191,9 @@ public class VehicleOutTask extends AbstractTask {
new UpdateWrapper<SchBasePoint>().lambda()
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code2())
.set(SchBasePoint::getVehicle_code, taskObj.getVehicle_code())
.set(SchBasePoint::getIng_task_code,null)
.set(SchBasePoint::getIng_task_code,null)
.set(SchBasePoint::getIos_id, null)
.set(SchBasePoint::getVehicle_qty, 1)
.set(SchBasePoint::getPoint_status,"2"));
//删除组盘表

View File

@@ -225,6 +225,13 @@ public class DownEmptyUpFullTask extends AbstractTask {
}
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
outBillService.taskFinish(taskObj);
//点位2
pointService.update(new LambdaUpdateWrapper<SchBasePoint>()
.set(SchBasePoint::getVehicle_code, null)
@@ -236,11 +243,6 @@ public class DownEmptyUpFullTask extends AbstractTask {
.set(SchBasePoint::getIng_task_code,null)
.eq(SchBasePoint::getPoint_code, taskObj.getPoint_code1()));
List<GroupPlate> groupPlates = iMdPbGroupplateService.list(new QueryWrapper<GroupPlate>().lambda()
.eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
boolean groupPlatesNotEmpty = CollectionUtils.isNotEmpty(groupPlates);
String groupId = null;
if(groupPlatesNotEmpty){
@@ -281,8 +283,6 @@ public class DownEmptyUpFullTask extends AbstractTask {
// //删除
// iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));
outBillService.taskFinish(taskObj);
// iMdPbGroupplateService.update(new LambdaUpdateWrapper<>(GroupPlate.class)
// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
// .eq(GroupPlate::getStoragevehicle_code,taskObj.getVehicle_code()));

View File

@@ -10,7 +10,7 @@ import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IStructattrService;
import org.nl.wms.basedata_manage.service.dao.Structattr;

View File

@@ -180,6 +180,7 @@ public class SeparateMaterialTask extends AbstractTask {
.eq(GroupPlate::getStoragevehicle_code, taskObj.getVehicle_code())
.eq(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("入库")));
outBillService.taskFinish(taskObj);
boolean groupPlatesNotEmpty = CollectionUtils.isNotEmpty(groupPlates);
String groupId = null;
@@ -211,8 +212,6 @@ public class SeparateMaterialTask extends AbstractTask {
// .set(GroupPlate::getStatus, IOSEnum.GROUP_PLATE_STATUS.code("出库"))
// .eq(GroupPlate::getStoragevehicle_code,taskObj.getVehicle_code()));
outBillService.taskFinish(taskObj);
// //删除
// iMdPbGroupplateService.delete(Collections.singleton(taskObj.getGroup_id()));

View File

@@ -13,7 +13,7 @@ import org.nl.common.domain.vo.DeptVo;
import org.nl.config.language.LangProcess;
import org.nl.wms.system_manage.service.dept.dto.DeptTree;
import org.nl.common.utils.CopyUtil;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.system_manage.service.dept.ISysDeptService;
import org.nl.wms.system_manage.service.dept.dao.SysDept;
import org.nl.wms.system_manage.service.dept.dao.mapper.SysDeptMapper;

View File

@@ -19,7 +19,7 @@ import org.nl.common.utils.SecurityUtils;
import org.nl.common.domain.vo.MenuMetaVo;
import org.nl.common.domain.vo.MenuVo;
import org.nl.common.utils.CopyUtil;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.config.language.LangProcess;
import org.nl.wms.system_manage.service.dict.dao.Dict;
import org.nl.wms.system_manage.service.dict.dao.mapper.SysDictMapper;

View File

@@ -19,7 +19,7 @@ import org.nl.common.utils.dto.CurrentUser;
import org.nl.config.FileProperties;
import org.nl.common.utils.FileUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.wms.system_manage.service.dept.ISysDeptService;
import org.nl.wms.system_manage.service.role.ISysRoleService;
import org.nl.wms.system_manage.service.secutiry.dto.AuthUserDto;

View File

@@ -16,7 +16,7 @@ import org.nl.common.domain.query.PageQuery;
import org.nl.common.exception.BadRequestException;
import org.nl.common.utils.CodeUtil;
import org.nl.common.utils.SecurityUtils;
import org.nl.common.utils.IdUtil;;
import org.nl.common.utils.IdUtil;
import org.nl.config.SpringContextHolder;
import org.nl.wms.basedata_manage.enums.BaseDataEnum;
import org.nl.wms.basedata_manage.service.IBsrealStorattrService;