rsf-server/src/main/java/com/vincent/rsf/server/api/service/impl/PdaOutStockServiceImpl.java
@@ -10,10 +10,10 @@ import com.vincent.rsf.server.api.entity.params.CallForEmptyContainersParam; import com.vincent.rsf.server.api.entity.params.ContainerWaveParam; import com.vincent.rsf.server.api.service.PdaOutStockService; import com.vincent.rsf.server.common.constant.Constants; import com.vincent.rsf.server.manager.controller.params.LocToTaskParams; import com.vincent.rsf.server.manager.entity.*; import com.vincent.rsf.server.manager.enums.AsnExceStatus; import com.vincent.rsf.server.manager.enums.StationTypeEnum; import com.vincent.rsf.server.manager.enums.TaskStsType; import com.vincent.rsf.server.manager.enums.*; import com.vincent.rsf.server.manager.service.*; import com.vincent.rsf.server.manager.service.impl.BasContainerServiceImpl; import lombok.Synchronized; @@ -48,6 +48,8 @@ private LocService locService; @Autowired private BasContainerServiceImpl basContainerService; @Autowired private LocItemService locItemService; @Override public R getOutStockTaskItem(String barcode) { @@ -257,14 +259,14 @@ if (Cools.isEmpty(basContainer)){ throw new CoolException("未查询到相关容器规则"); } String barcodeType = "barcode REGEXP "+basContainer.getCodeType(); String barcodeType = "barcode REGEXP '"+basContainer.getCodeType()+"'"; //容器类型查询 起点 Loc loc = locService.getOne(new LambdaQueryWrapper<Loc>() .apply(barcodeType) .eq(Loc::getDeleted, 0) .eq(Loc::getStatus, 1) .eq(Loc::getUseStatus, LocStsType.LOC_STS_TYPE_D.type) .in(Loc::getAreaId, areaList) .eq(Loc::getUseStatus, "O") .orderByDesc(Loc::getId) .last("LIMIT 1"), false); @@ -272,21 +274,17 @@ if (Cools.isEmpty(loc)){ throw new CoolException("未查询到符合条件的托盘"); } // if (basStation.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) { // //光电站点: // Long area = basStation.getArea(); // //是否需要转非光电站点 // //立库出库==》结束 // //AGV==》立库==》结束 // } else { // //非光电站点 // //是否需要转光电站点 // //AGV==》结束 // //立库出库==》AGV==》结束 // // } return R.ok().add(loc); //生成盘点任务参数 LocToTaskParams locToTaskParams = new LocToTaskParams(); locToTaskParams.setType(Constants.TASK_TYPE_OUT_STOCK_EMPTY) .setSiteNo(basStation.getStationName()) .setOrgLoc(loc.getId().toString()); try{ locItemService.generateTaskEmpty(TaskResouceType.TASK_RESOUCE_STOCK_TYPE.val,locToTaskParams,loginUserId); } catch (Exception e){ throw new CoolException(e.getMessage()); } return R.ok(); } rsf-server/src/main/java/com/vincent/rsf/server/common/constant/Constants.java
@@ -98,6 +98,11 @@ public static final String TASK_TYPE_OUT_STOCK = "outStock"; /** * 容器出库 */ public static final String TASK_TYPE_OUT_STOCK_EMPTY = "empty"; /** * 库存盘点出库 */ public static final String TASK_TYPE_OUT_CHECK = "check"; rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocToTaskParams.java
@@ -14,7 +14,7 @@ @ApiModel(value = "LocToTaskParams", description = "库存出库参数") public class LocToTaskParams { @ApiModelProperty("类型: check:盘点出库, outStock: 库存出库") @ApiModelProperty("类型: check:盘点出库, outStock: 库存出库, empty:空板出库") private String type; @ApiModelProperty("原单据ID (用户单据出库查找业务类型") rsf-server/src/main/java/com/vincent/rsf/server/manager/enums/TaskResouceType.java
@@ -16,6 +16,8 @@ TASK_RESOUCE_CHECK_TYPE("5", "盘点出库任务"), TASK_RESOUCE_EMPTY_TYPE("6", "空容器出库任务"), ; TaskResouceType(String val, String desc) { this.val = Short.parseShort(val); rsf-server/src/main/java/com/vincent/rsf/server/manager/schedules/TaskSchedules.java
@@ -1,5 +1,6 @@ package com.vincent.rsf.server.manager.schedules; import com.alibaba.fastjson.JSON; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; @@ -8,6 +9,7 @@ import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.cfg.CoercionAction; import com.fasterxml.jackson.databind.cfg.CoercionInputShape; import com.vincent.rsf.framework.common.Cools; import com.vincent.rsf.framework.common.R; import com.vincent.rsf.framework.exception.CoolException; import com.vincent.rsf.server.api.config.RemotesInfoProperties; @@ -255,6 +257,10 @@ BasStation station = basStationService.getOne(new LambdaQueryWrapper<BasStation>() .eq(BasStation::getStationName, task.getTaskStatus().equals(TaskStsType.GENERATE_IN.id) ? task.getOrgSite() : task.getTargSite())); if (Cools.isEmpty(station)){ log.info("非光电站点任务下发:站点信息异常,任务信息:"+ JSON.toJSONString(task)); continue; } if (station.getType().equals(StationTypeEnum.STATION_TYPE_MUTI.type)) { continue; } rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocItemService.java
@@ -11,6 +11,7 @@ public interface LocItemService extends IService<LocItem> { void generateTask(Short resouce, LocToTaskParams map, Long loginUserId) throws Exception; void generateTaskEmpty(Short resouce, LocToTaskParams map, Long loginUserId) throws Exception; Task genMoveTask(LocToTaskParams map, Long loginUserId); rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocItemServiceImpl.java
@@ -55,6 +55,74 @@ /** * 库存出库生成出库任务 * type: 空板出库 * * @param resouce * @param map * @param loginUserId * @return */ @Override @Synchronized @Transactional(rollbackFor = Exception.class) public synchronized void generateTaskEmpty(Short resouce, LocToTaskParams map, Long loginUserId) throws Exception { if (Objects.isNull(map.getSiteNo())) { throw new CoolException("目标站点不能为空!"); } if (Objects.isNull(map.getOrgLoc())) { throw new CoolException("源库位不能为空!"); } String siteNo = map.getSiteNo(); Task task = new Task(); Loc loc = locService.getById(Long.decode(map.getOrgLoc())); logger.info("库位:>{}", loc.getCode()); if (Objects.isNull(loc)) { throw new CoolException("数据错误:所选库存信息不存在!!"); } if (!loc.getUseStatus().equals(LocStsType.LOC_STS_TYPE_D.type)) { throw new CoolException("库位:" + loc.getCode() + ",不处于D.空板状态,不可执行R.出库预约操作!!"); } loc.setUseStatus(LocStsType.LOC_STS_TYPE_R.type); if (!locService.updateById(loc)) { throw new CoolException("库位状态更新失败!!"); } String ruleCode = SerialRuleUtils.generateRuleCode(SerialRuleCode.SYS_TASK_CODE, null); task.setOrgLoc(loc.getCode()) .setTaskCode(ruleCode) .setResource(resouce) .setTargSite(siteNo) .setSort(Constants.TASK_SORT_DEFAULT_VALUE) .setUpdateBy(loginUserId) .setCreateBy(loginUserId) .setCreateTime(new Date()) .setUpdateTime(new Date()) .setTaskStatus(TaskStsType.GENERATE_OUT.id) .setBarcode(loc.getBarcode()) .setMemo(map.getMemo()); if (map.getType().equals(Constants.TASK_TYPE_OUT_STOCK_EMPTY)) { //空容器出库 DeviceSite deviceSite = deviceSiteService.getOne(new LambdaQueryWrapper<DeviceSite>() .eq(!Objects.isNull(loc.getChannel()), DeviceSite::getChannel, loc.getChannel()) .eq(DeviceSite::getSite, siteNo).eq(DeviceSite::getType, TaskType.TASK_TYPE_EMPITY_OUT.type)); if (Objects.isNull(deviceSite)) { throw new CoolException("站点不支持空容器出库!!"); } task.setTaskType(TaskType.TASK_TYPE_EMPITY_OUT.type).setWarehType(deviceSite.getDevice()); } else { throw new CoolException("空容器出库!!其他类型无效,进入类型:"+map.getType()); } if (!taskService.save(task)) { throw new CoolException("任务创建失败!!"); } } /** * 库存出库生成出库任务 * type: check 盘点, stock: 库存出库 * * @param resouce