rsf-admin/src/page/waitPakin/SelectSiteModel.jsx
@@ -19,6 +19,27 @@ }, })); const SelectSiteButton = (props) => { const { source, setOpen, refresh, notify } = props; const record = useRecordContext(); const handleClick = async () => { setOpen(false); const id = record.id; const res = await request.post(`/waitPakin/merge`, {waitPakins: source, siteId: id}); if (res?.data?.code === 200) { refresh(); notify(res.data.msg); } else { notify(res.data.msg); } }; return ( <Button label="toolbar.selectSite" onClick={handleClick} /> ); }; const SelectSiteModel = (props) => { const { open, setOpen, source } = props; const translate = useTranslate(); @@ -47,6 +68,7 @@ <DialogContent> <List resource='deviceSite' filter={{type : 1}} sx={{ flexGrow: 1, transition: (theme) => @@ -68,17 +90,7 @@ <StyledDatagrid preferenceKey='deviceSite' bulkActionButtons={false} rowClick='toggleSelection' onToggleItem={async (id)=>{ setOpen(false); const res = await request.post(`/waitPakin/merge`, {waitPakins: source, siteId: id}); if (res?.data?.code === 200) { refresh(); notify(res.data.msg); } else { notify(res.data.msg); } }} rowClick={false} omit={['id','name', 'createTime','label', 'createBy', 'memo', 'updateBy$', 'createBy$', 'createTime', 'updateTime']} > <NumberField source="id" /> @@ -97,9 +109,7 @@ <BooleanField source="statusBool" label="common.field.status" sortable={false} /> <TextField source="memo" label="common.field.memo" sortable={false} /> <WrapperField cellClassName="opt" label="common.field.opt"> <Button label="toolbar.selectSite" onClick={(event)=>{ setOpen(false) }}/> <SelectSiteButton source={source} setOpen={setOpen} refresh={refresh} notify={notify} /> </WrapperField> </StyledDatagrid> </List> rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/LocUseStatusType.java
File was deleted rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -7,7 +7,6 @@ import com.vincent.rsf.server.api.entity.dto.InTaskMsgDto; import com.vincent.rsf.server.api.entity.dto.LocTypeDto; import com.vincent.rsf.server.api.controller.params.TaskInParam; import com.vincent.rsf.server.api.entity.enums.LocUseStatusType; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.server.api.entity.enums.TaskType; @@ -387,7 +386,7 @@ String shallowLocNo = LocUtils.getShallowLoc(slaveProperties, loc1.getCode()); // 检测目标库位是否为空库位 Loc shallowLoc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode,shallowLocNo)); if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) { if (shallowLoc != null && shallowLoc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { if (LocUtils.locMoveCheckLocTypeComplete(shallowLoc, locTypeDto)) { loc = shallowLoc; deviceNo = shallowLoc.getDeviceNo(); @@ -446,7 +445,7 @@ List<Loc> locMasts = null; locMasts = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getRow, nearRow) .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getType, locTypeDto.getLocType1()) .eq(Loc::getAreaId,area) .orderByAsc(Loc::getLev) @@ -461,7 +460,7 @@ //相似物料打开,判断深库位有没有货,没货就放深库位,有货就不操作 Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getRow, shallowLoc) .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getAreaId,area) ); if (!Cools.isEmpty(locMast2)) { @@ -472,7 +471,7 @@ //相似物料关闭,判断深库位有没有货,有货就放浅库位,无货就不操作 Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getCode, shallowLoc) .in(Loc::getUseStatus, LocUseStatusType.Empty_Pallet.type,LocUseStatusType.In_Stock.type) .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type,LocStsType.LOC_STS_TYPE_F.type) .eq(Loc::getAreaId,area) ); if (!Cools.isEmpty(locMast2)) { @@ -481,7 +480,7 @@ }else{ locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getCode, shallowLoc) .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getAreaId,area) ); if (!Cools.isEmpty(locMast2)) { @@ -500,7 +499,7 @@ String shallowLoc = LocUtils.getDeepLoc(slaveProperties, locMast1.getCode()); Loc locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getCode, shallowLoc) .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getAreaId,area) ); if (!Cools.isEmpty(locMast2)) { @@ -509,7 +508,7 @@ } else { locMast2 = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getCode, shallowLoc) .in(Loc::getUseStatus, LocUseStatusType.Empty_Pallet.type,LocUseStatusType.In_Stock.type) .in(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type,LocStsType.LOC_STS_TYPE_D.type) .eq(Loc::getAreaId,area) ); if (!Cools.isEmpty(locMast2)) { @@ -528,7 +527,7 @@ } //查询当前库位类型空库位 小于5个则locmast = null List<Loc> locTypeLocMasts = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus,LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getDeviceNo, deviceNo) .eq(Loc::getType, locTypeDto.getLocType1()) .eq(Loc::getAreaId,area) @@ -537,7 +536,7 @@ loc = null; } // 递归查询 if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) { if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 if (times < rowCount * 2) { times = times + 1; @@ -574,7 +573,7 @@ InTaskMsgDto inTaskMsgDto = new InTaskMsgDto(); List<Loc> loc1 = locService.list(new LambdaQueryWrapper<Loc>() .eq(Loc::getAreaId, area) .eq(Loc::getUseStatus, LocUseStatusType.Empty_Slot.type) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type) .eq(Loc::getType, locTypeDto.getLocType1()) .orderByAsc(Loc::getRow) .orderByAsc(Loc::getCol) @@ -600,7 +599,7 @@ inTaskMsgDto.setStaNo(Integer.parseInt(deviceSite.getDeviceSite())); } // 递归查询 if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocUseStatusType.Empty_Slot.type)) { if (Cools.isEmpty(loc) || !loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { // 当前巷道无空库位时,递归调整至下一巷道,检索全部巷道无果后,跳出递归 if (times < 5) { times = times + 1; rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/TaskServiceImpl.java
@@ -2,11 +2,13 @@ import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.server.api.entity.enums.OrderType; import com.vincent.rsf.server.api.entity.enums.TaskStsType; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.entity.enums.TaskType; import com.vincent.rsf.server.api.utils.LocUtils; import com.vincent.rsf.server.manager.controller.params.GenerateTaskParams; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.PakinIOStatus; @@ -62,6 +64,11 @@ @Autowired private LocItemService locItemService; @Autowired private DeviceBindService deviceBindService; @Autowired private WarehouseAreasService warehouseAreasService; /** * @param @@ -82,6 +89,20 @@ if (Objects.isNull(deviceSite)) { throw new CoolException("站点不存在!!"); } DeviceBind deviceBind = deviceBindService.getById(LocUtils.getAreaType(Integer.valueOf(deviceSite.getSite()))); if (Cools.isEmpty(deviceBind)) { throw new CoolException("库位规则未知"); } WarehouseAreas warehouseArea = warehouseAreasService.getById(deviceBind.getTypeId()); if (Cools.isEmpty(warehouseArea)) { throw new CoolException("未找到所属库区信息"); } /**获取库位*/ String targetLoc = LocManageUtil.getTargetLoc(warehouseArea.getId()); if (Cools.isEmpty(targetLoc)) { throw new CoolException("该站点对应库区未找到库位"); } /**获取组拖*/ List<Long> ids = waitPakin.getWaitPakins().stream().map(WaitPakin::getId).collect(Collectors.toList()); List<WaitPakin> waitPakins = waitPakinService.list(new LambdaQueryWrapper<WaitPakin>() @@ -100,7 +121,7 @@ task.setTaskCode(ruleCode) .setTaskStatus(TaskStsType.GENERATE_IN.id.shortValue()) .setTaskType(TaskType.TASK_TYPE_IN.type.shortValue()) .setTargLoc(LocManageUtil.getTargetLoc()) .setTargLoc(targetLoc) .setBarcode(pakin.getBarcode()) .setTargSite(deviceSite.getDeviceCode()) .setCreateBy(loginUserId) rsf-server/src/main/java/com/vincent/rsf/server/manager/utils/LocManageUtil.java
@@ -21,11 +21,14 @@ * @return * @time 2025/3/31 08:50 */ public static String getTargetLoc() { public static String getTargetLoc(Long areaId) { //TODO 库位策略后续排期 LocService locService = SpringUtils.getBean(LocService.class); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type), false); Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() .eq(Loc::getAreaId, areaId) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_O.type), false ); return !Objects.isNull(loc) ? loc.getCode() : null; }