rsf-admin/src/i18n/en.js
@@ -233,6 +233,7 @@ stationName: 'stationName', inAble: 'inAble', outAble: 'outAble', type: 'Site Type', useStatus: 'useStatus', status: 'status', area: 'area', rsf-admin/src/i18n/zh.js
@@ -254,6 +254,7 @@ }, basStation: { stationName: '站点名称', type: '站点类型', inAble: '能入', outAble: '能出', useStatus: '状态', rsf-admin/src/page/basicInfo/basStation/BasStationList.jsx
@@ -30,8 +30,8 @@ ReferenceInput, ReferenceArrayInput, AutocompleteInput, DeleteButton, DeleteButton, } from 'react-admin'; import { Box, Typography, Card, Stack } from '@mui/material'; import { styled } from '@mui/material/styles'; @@ -64,10 +64,10 @@ const filters = [ <SearchInput source="condition" alwaysOn />, <DateInput label='common.time.after' source="timeStart" />, <DateInput label='common.time.before' source="timeEnd" />, <DateInput label='common.time.after' source="timeStart" />, <DateInput label='common.time.before' source="timeEnd" />, <TextInput source="stationName" label="table.field.basStation.stationName" alwaysOn/>, <TextInput source="stationName" label="table.field.basStation.stationName" alwaysOn />, <NumberInput source="inAble" label="table.field.basStation.inAble" />, <NumberInput source="outAble" label="table.field.basStation.outAble" />, <TextInput source="useStatus" label="table.field.basStation.useStatus" />, @@ -127,26 +127,26 @@ <StyledDatagrid preferenceKey='basStation' bulkActionButtons={() => <BulkDeleteButton mutationMode={OPERATE_MODE} />} rowClick={(id, resource, record) => false} rowClick={(id, resource, record) => false} expandSingle={true} omit={['id', 'createTime', 'createBy', 'memo','updateBy','autoTransfer']} omit={['id', 'createTime', 'createBy', 'memo', 'updateBy', 'autoTransfer']} > <NumberField source="id" /> <TextField source="type$" label="table.field.basStation.type" /> <TextField source="stationName" label="table.field.basStation.stationName" /> <TextField source="useStatus$" label="table.field.basStation.useStatus" /> <TextField source="barcode" label="table.field.basStation.barcode" /> <TextField source="barcode" label="table.field.basStation.barcode" /> <FunctionField source="inAble" label="table.field.basStation.inAble" render={record => record.inAble === 1 ? '是' : '否'} /> /> <FunctionField source="outAble" label="table.field.basStation.outAble" render={record => record.inAble === 1 ? '是' : '否'} /> <NumberField source="area$" label="table.field.basStation.area" /> <NumberField source="area$" label="table.field.basStation.area" /> <FunctionField source="isCrossZone" label="table.field.basStation.isCrossZone" @@ -155,48 +155,43 @@ <WrapperField cellClassName="crossZoneArea" label="table.field.basStation.crossZoneArea"> <CrossZoneAreaField open={areaFieldDialog} setOpen={setAreaFieldDialog} /> </WrapperField> setOpen={setAreaFieldDialog} /> </WrapperField> <FunctionField source="isWcs" label="table.field.basStation.isWcs" render={record => record.inAble === 1 ? '是' : '否'} /> /> <WrapperField cellClassName="containerType" label="table.field.basStation.containerType"> <ContainerTypesField open={areaFieldDialog2} setOpen={setAreaFieldDialog2} /> setOpen={setAreaFieldDialog2} /> </WrapperField> <FunctionField source="autoTransfer" label="table.field.basStation.autoTransfer" render={record => record.inAble === 1 ? '是' : '否'} /> <ReferenceField source="updateBy" label="common.field.updateBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> <TextField source="updateBy$" label="common.field.updateBy" /> <DateField source="updateTime" label="common.field.updateTime" showTime /> <ReferenceField source="createBy" label="common.field.createBy" reference="user" link={false} sortable={false}> <TextField source="nickname" /> </ReferenceField> <DateField source="createTime" label="common.field.createTime" showTime /> <TextField source="createBy$" label="common.field.createBy" /> <DateField source="createTime" label="common.field.createTime" showTime /> <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"> <WrapperField cellClassName="opt" label="common.field.opt"> <EditButton sx={{ padding: '1px', fontSize: '.75rem' }} /> <DeleteButton sx={{ padding: '1px', fontSize: '.75rem' }} mutationMode={OPERATE_MODE} /> </WrapperField> </WrapperField> </StyledDatagrid> </List> <BasStationCreate open={createDialog} setOpen={setCreateDialog} /> <PageDrawer title='BasStation Detail' drawerVal={drawerVal} rsf-server/src/main/java/com/vincent/rsf/server/api/entity/enums/CallBackEvent.java
New file @@ -0,0 +1,24 @@ package com.vincent.rsf.server.api.entity.enums; /** * @author Ryan * @date 2025/9/4 * @description: 回调事件 * @version 1.0 */ public enum CallBackEvent { /**任务回调事件*/ CALL_BACK_EVENT_START("START", "取箱完成"), CALL_BACK_EVENT_OBIT("OBIT", "搬运中"), CALL_BACK_EVENT_END("END", "放箱完成"), ; CallBackEvent( String event, String desc) { this.event = event; this.desc = desc; } public String event; public String desc; } rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/WcsServiceImpl.java
@@ -18,6 +18,7 @@ import com.vincent.rsf.server.api.entity.dto.LocTypeDto; import com.vincent.rsf.server.api.controller.erp.params.TaskInParam; import com.vincent.rsf.server.api.entity.dto.SyncLocsDto; import com.vincent.rsf.server.api.entity.enums.CallBackEvent; import com.vincent.rsf.server.api.entity.params.CommonRequest; import com.vincent.rsf.server.api.entity.params.ExMsgParams; import com.vincent.rsf.server.api.entity.params.WcsTaskParams; @@ -464,13 +465,12 @@ if (Objects.isNull(params)) { return R.error("参数不能为空!!"); } Task task = taskService.getOne(new LambdaQueryWrapper<Task>().eq(Task::getTaskCode, params.getSeqNum())); if (Objects.isNull(task)) { throw new CoolException("任务不存在可已结束!!"); } if (params.getEventType().equals("END")) { /**取箱完成*/ if (params.getEventType().equals(CallBackEvent.CALL_BACK_EVENT_END.event)) { if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) @@ -482,10 +482,17 @@ throw new CoolException("任务状态修改失败!!"); } if (!basStationService.update(new LambdaUpdateWrapper<BasStation>() .eq(BasStation::getStationName, task.getOrgSite()) .set(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type))) { throw new CoolException("站点状态修改失败!!"); if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite())); if (Objects.isNull(station)) { throw new CoolException("数据错误,站点不存在!!"); } if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { station.setUseStatus(LocStsType.LOC_STS_TYPE_O.type); if (!basStationService.updateById(station)) { throw new CoolException("站点状态修改失败!!"); } } } } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) @@ -496,6 +503,18 @@ .set(Task::getTaskStatus, TaskStsType.COMPLETE_OUT.id))) { throw new CoolException("任务状态修改失败!!"); } /**修改出库站点状态*/ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>() .eq(BasStation::getStationName, task.getTargSite())); if (Objects.isNull(station)) { throw new CoolException("数据错误,站点不存在!!"); } if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { station.setUseStatus(LocStsType.LOC_STS_TYPE_F.type); if (!basStationService.updateById(station)) { throw new CoolException("站点状态修改失败!!"); } } } } rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/BasStation.java
@@ -7,6 +7,7 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.annotation.*; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.vincent.rsf.server.manager.enums.StationTypeEnum; import com.vincent.rsf.server.manager.service.WarehouseAreasService; import com.vincent.rsf.server.system.entity.DictData; import com.vincent.rsf.server.system.service.DictDataService; @@ -44,6 +45,9 @@ */ @ApiModelProperty(value= "站点名称") private String stationName; @ApiModelProperty("站点类型: {0:光电, 1:无光电}") private Integer type; /** * 可入 @@ -165,27 +169,10 @@ public BasStation() {} // BasStation basStation = new BasStation( // null, // 站点名称 // null, // 可入 // null, // 可出 // null, // 状态 // null, // 所属库区id // null, // 是否可跨区 // null, // 可跨区区域id // null, // 是否wcs站点 // null, // wcs站点信息 // null, // 容器类型 // null, // 条码 // null, // 是否自动调拨 // null, // 备注 // null, // 创建人 // null, // 创建时间 // null, // 更新人 // null // 更新时间 // ); public String getType$() { if (this.type == null) return null; return StationTypeEnum.getStationDesc(this.type); } public List<Long> getContainerTypes$(){ if (Cools.isEmpty(this.containerType)){ rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/StationTypeEnum.java
New file @@ -0,0 +1,33 @@ package com.vincent.rsf.server.manager.enums; /** * @author Ryan * @date 2025/9/4 * @description: 站点类型 * @version 1.0 */ public enum StationTypeEnum { //站点类型 STATION_TYPE_MUTI(0, "光电站点"), STATION_TYPE_NORMAL(1, "普通站点"), ; /**站点类型*/ public Integer type; /**站点说明*/ public String desc; StationTypeEnum(Integer type, String desc) { this.type = type; this.desc = desc; } public static String getStationDesc(Integer type) { if (type.equals(STATION_TYPE_MUTI.type)) { return STATION_TYPE_MUTI.desc; } else if (type.equals(STATION_TYPE_NORMAL.type)) { return STATION_TYPE_NORMAL.desc; } return null; } } rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/AutoRunSchedules.java
@@ -242,7 +242,6 @@ } } // 入库 应该根据工作档回去 // this.runStaToLoc(locGroupList, staGroupList, staTaskMemo); @@ -256,14 +255,6 @@ private List<Loc> getAreaLocs(List<Integer> locGroupList, List<String> staGroupList, String memo) { Integer startRow = Collections.min(locGroupList); Integer endRow = Collections.max(locGroupList); // STA IDLE // LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList); // List<BasStation> idleList = stationService.list(idleWrapper); // if (Cools.isEmpty(idleList)) { // return new ArrayList<>(); // } // Collections.shuffle(idleList); // LOC STOCK LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type); @@ -280,57 +271,8 @@ Collections.shuffle(stockList); return stockList; //生成入库工作档 // generateTask(idleList.get(0).getStationName(), stockList.get(0).getCode(), idleList.get(0).getBarcode()); } // 出库 private void runLocToSta(List<Integer> locGroupList, List<String> staGroupList, String memo) { Integer startRow = Collections.min(locGroupList); Integer endRow = Collections.max(locGroupList); // STA IDLE LambdaQueryWrapper<BasStation> idleWrapper = new LambdaQueryWrapper<BasStation>().eq(BasStation::getUseStatus, LocStsType.LOC_STS_TYPE_O.type).in(BasStation::getStationName, staGroupList); List<BasStation> idleList = stationService.list(idleWrapper); if (Cools.isEmpty(idleList)) { return; } Collections.shuffle(idleList); // LOC STOCK LambdaQueryWrapper<Loc> stockWrapper = new LambdaQueryWrapper<Loc>().eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_F.type); if (null != startRow) { stockWrapper.ge(Loc::getRow, startRow); } if (null != endRow) { stockWrapper.le(Loc::getRow, endRow); } List<Loc> stockList = locService.list(stockWrapper); if (Cools.isEmpty(stockList)) { return; } Collections.shuffle(stockList); Loc loc = stockList.get(0); List<LocItem> list = locItemService.list(new LambdaQueryWrapper<LocItem>().eq(LocItem::getLocId, loc.getId())); LocToTaskParams param = new LocToTaskParams(); param.setType(Constants.TASK_TYPE_OUT_STOCK); param.setTarLoc(loc.getCode()); param.setItems(list); param.setSiteNo(idleList.get(0).getStationName()); param.setMemo(memo); //生成出库工作档 try { locItemService.generateTask(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val, param, getLoginUserId()); } catch (Exception e) { log.info("生成出库任务失败", e); } } // 移库 private void runLocToLoc(List<Integer> locGroupList, String staTaskMemo) { @@ -384,52 +326,6 @@ } } private void generateTask(String sourceStaNo, String locNo, String barcode) { String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); if (StringUtils.isBlank(ruleCode)) { throw new CoolException("编码错误:请确认编码「SYS_TASK_CODE」是否已生成!!"); } Task task = new Task(); task.setTaskCode(ruleCode) .setTaskStatus(TaskStsType.GENERATE_IN.id) .setTaskType(TaskType.TASK_TYPE_IN.type) .setResource(TaskResouceType.TASK_RESOUCE_PAKIN_TYPE.val) .setTargLoc(locNo) .setBarcode(barcode) .setOrgSite(sourceStaNo) .setCreateBy(6666L) .setUpdateBy(6666L); if (!taskService.save(task)) { throw new CoolException("任务保存失败!!"); } LambdaQueryWrapper<Matnr> wrapper = new LambdaQueryWrapper<>(); wrapper.eq(Matnr::getStatus, 1); wrapper.orderByAsc(Matnr::getUpdateTime); List<Matnr> list = matnrService.page(new Page<>(1, 100), wrapper).getRecords(); Collections.shuffle(list); List<TaskItem> taskItems = new ArrayList<>(); int i = 0; for (Matnr item : list) { if (i > 5) { break; } TaskItem taskItem = new TaskItem(); BeanUtils.copyProperties(item, taskItem); taskItem.setTaskId(task.getId()) .setOrderType(OrderType.ORDER_IN.type) .setCreateBy(6666L) .setUpdateBy(6666L) .setExtendFields(item.getExtendFields()); taskItems.add(taskItem); item.setUpdateTime(new Date()); matnrService.updateById(item); i++; } taskItemService.saveBatch(taskItems); } public static List<String> getStaPrefixes(List<String> staGroupList) { Set<String> rowSet = new HashSet<>(); rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -85,12 +85,12 @@ private TransferOrderService transferOrderService; @Autowired private TransferService transferService; @Autowired private RestTemplate restTemplate; @Autowired private RemotesInfoProperties.RcsApi rcsApi; @Autowired private BasStationService basStationService; /** * @param @@ -234,14 +234,9 @@ // } } /** * 任务自动下发 * * @throws Exception */ @Scheduled(cron = "0/5 * * * * ? ") public void taskToWCS() { @Transactional(rollbackFor = Exception.class) public void pubTaskToWcs() { Long loginUserId = SystemAuthUtils.getLoginUserId(); List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type, @@ -252,36 +247,77 @@ .in(Task::getTaskStatus, integers) .orderByDesc(Task::getSort)); for (Task task : tasks) { // Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode())); // if (Objects.isNull(loc)) { // continue; // } // //判断是否深库位 // if (!LocUtils.isShallowLoc(loc.getCode())) { // //获取深库位对应的浅库位 // String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); // if (StringUtils.isBlank(shallowLoc)) { // continue; // } // Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); // if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { // //如果浅库位不在库跳出循环 // continue; // } // LocToTaskParams params = new LocToTaskParams(); // params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + ""); // //生成移库任务 // Task moveTask = locItemService.genMoveTask(params, loginUserId); // moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1); // if (!taskService.updateById(moveTask)) { // throw new Exception("任务优先级更新失败!!"); // } // } //TODO 调用下发任务接口 /**移库不做站点操作*/ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite())); if (station.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) { continue; } } /**下发普通站点任务,报错回滚,不再往下执行*/ pubTaskToWcs(task); } } /** * @author Ryan * @date 2025/9/4 * @description: 光电站点任务下发 * @version 1.0 */ @Scheduled(cron = "0/5 * * * * ? ") @Transactional(rollbackFor = Exception.class) public void taskToWCS() throws Exception { Long loginUserId = SystemAuthUtils.getLoginUserId(); List<Integer> list = Arrays.asList(TaskType.TASK_TYPE_IN.type, TaskType.TASK_TYPE_OUT.type, TaskType.TASK_TYPE_LOC_MOVE.type, TaskType.TASK_TYPE_EMPITY_IN.type , TaskType.TASK_TYPE_CHECK_IN.type, TaskType.TASK_TYPE_MERGE_IN.type, TaskType.TASK_TYPE_EMPITY_OUT.type, TaskType.TASK_TYPE_PICK_AGAIN_OUT.type, TaskType.TASK_TYPE_CHECK_OUT.type, TaskType.TASK_TYPE_MERGE_OUT.type); List<Integer> integers = Arrays.asList(TaskStsType.GENERATE_IN.id, TaskStsType.GENERATE_OUT.id); List<Task> tasks = taskService.list(new LambdaQueryWrapper<Task>() .in(Task::getTaskType, list) .in(Task::getTaskStatus, integers) .orderByDesc(Task::getSort)); for (Task task : tasks) { /**移库不做站点操作*/ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite())); /**过滤掉普通站点任务*/ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { continue; } Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getBarcode, task.getBarcode())); if (Objects.isNull(loc)) { continue; } //判断是否深库位 if (!LocUtils.isShallowLoc(loc.getCode())) { //获取深库位对应的浅库位 String shallowLoc = LocUtils.getShallowLoc(loc.getCode()); if (StringUtils.isBlank(shallowLoc)) { continue; } Loc shalloc = locService.getOne(new LambdaQueryWrapper<Loc>().eq(Loc::getCode, shallowLoc)); if (Objects.isNull(shalloc) || !shalloc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { //如果浅库位不在库跳出循环 continue; } LocToTaskParams params = new LocToTaskParams(); params.setOrgLoc(shallowLoc).setType(TaskType.TASK_TYPE_LOC_MOVE.type + ""); //生成移库任务 Task moveTask = locItemService.genMoveTask(params, loginUserId); moveTask.setSort(!Objects.isNull(task.getSort()) ? task.getSort() + 1 : Constants.TASK_SORT_DEFAULT_VALUE + 1); if (!taskService.updateById(moveTask)) { throw new Exception("任务优先级更新失败!!"); } } } /**下发任务*/ try { pubTaskToWcs(task); } catch (Exception e) { log.error(e.getMessage()); log.error("任务下发失败!!", e); } } } @@ -321,16 +357,36 @@ //任务类型,任务编码 itemParam.setTaskType(RcsTaskType.getTypeDesc(task.getTaskType())) .setSeqNum(task.getTaskCode()); //主参数 taskParams.setBatch(task.getBarcode()); if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getTargSite())); if (Objects.isNull(station)) { throw new CoolException("站点不存在!!"); } /**判断是否光电站点,非光店站点需管控站点状态*/ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { if (task.getTaskType() <= TaskType.TASK_TYPE_CHECK_IN.type && task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { throw new CoolException("当前站点不是F.在库状态!!"); } } else if (task.getTaskType() >= TaskType.TASK_TYPE_OUT.type) { if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { throw new CoolException("目标站点不是O.空闲状态!!"); } } } /**移库参数*/ if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc()); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_IN.type)) { /**全板入库参数*/ itemParam.setDestLoc(task.getTargLoc()) .setOriSta(task.getOrgSite()); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_IN.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_IN.type)) { /**拣料/盘点入库参数*/ itemParam.setDestLoc(task.getTargLoc()) .setOriSta(task.getTargSite()); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) @@ -338,13 +394,27 @@ || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type)) { /**出库参数*/ itemParam.setOriLoc(task.getOrgLoc()) .setDestSta(task.getTargSite()); } else if (task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { itemParam.setOriLoc(task.getOrgLoc()).setDestLoc(task.getTargLoc()); } else { /**站点间移库参数*/ itemParam.setOriSta(task.getOrgSite()).setDestSta(task.getTargSite()); BasStation curSta = basStationService.getOne(new LambdaQueryWrapper<BasStation>().eq(BasStation::getStationName, task.getOrgSite())); if (Objects.isNull(curSta)) { throw new CoolException("站点不存在!!"); } if (curSta.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { if (!curSta.getUseStatus().equals(LocStsType.LOC_STS_TYPE_F.type)) { throw new CoolException("当前站点不是F.在库状态!!"); } } if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { if (!station.getUseStatus().equals(LocStsType.LOC_STS_TYPE_O.type)) { throw new CoolException("目标站点不是O.空闲状态!!"); } } } List<TaskItemParam> items = Arrays.asList(itemParam); @@ -381,16 +451,32 @@ .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_IN.id))) { throw new CoolException("任务状态修改失败!!"); } /**排除移库功能*/ if (!task.getTaskType().equals(TaskType.TASK_TYPE_LOC_MOVE.type)) { /**如果是普通站点,修改站点状态为出库预约*/ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { station.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); if (!basStationService.updateById(station)) { throw new CoolException("站点预约失败!!"); } } } } else if (task.getTaskType().equals(TaskType.TASK_TYPE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_CHECK_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_MERGE_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_EMPITY_OUT.type) || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type) ) { || task.getTaskType().equals(TaskType.TASK_TYPE_PICK_AGAIN_OUT.type)) { if (!taskService.update(new LambdaUpdateWrapper<Task>().eq(Task::getTaskCode, task.getTaskCode()) .set(Task::getTaskStatus, TaskStsType.WCS_EXECUTE_OUT.id))) { throw new CoolException("任务状态修改失败!!"); } /**如果是普通站点,修改站点状态为入库预约*/ if (station.getType().equals(StationTypeEnum.STATION_TYPE_NORMAL.type)) { station.setUseStatus(LocStsType.LOC_STS_TYPE_S.type); if (!basStationService.updateById(station)) { throw new CoolException("站点预约失败!!"); } } } } else { throw new CoolException("任务下发失败!!"); rsf-server/src/main/resources/application-dev.yml
@@ -14,10 +14,10 @@ # url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # username: rsf username: root url: jdbc:mysql://10.10.10.200:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai password: xltys1995 # url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # password: 34821015 # url: jdbc:mysql://10.10.10.200:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai # password: xltys1995 url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai password: 34821015 type: com.alibaba.druid.pool.DruidDataSource druid: initial-size: 5