diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index 5ff1379..f6de774 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -68,6 +68,7 @@ public class ExcelController { private final GoodsService goodsService;// 物料服务 private final WorkStationConfigService workStationConfigService;// 工站配置服务 private final WorkSummaryService workSummaryService;// 工作分析服务 + private final KanbanService kanbanService;// 看板服务 private final List uploadFileHashStringList = new ArrayList<>(); @@ -265,6 +266,45 @@ public class ExcelController { } } + /** + * 导入看板 + * + * @param file 文件 + * @return 导入结果 + */ + @PostMapping("/uploadKanban") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String uploadKanban(@RequestPart("file") MultipartFile file, @RequestPart("obj") FileVo fileVo) { + logger.info("导入物料,请求ip:{},文件详情:{}", getIpAddr(servletRequest), convertJsonString(fileVo)); + ResponseEntity response = new ResponseEntity(); + try { + // 判断是否重复导入 + if (uploadFileHashStringList.contains(fileVo.getHash())) { + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请勿导入相同文件。"); + return convertJsonString(response); + } + uploadFileHashStringList.add(fileVo.getHash()); + // 导入excel + EasyExcel.read(file.getInputStream(), GoodsExcelVo.class, new UploadGoodsListener(goodsService, fileVo.getUserName())).sheet("基本信息").doRead(); + // 添加导入记录 + uploadRecordService.save(UploadRecord.ofFileVo(fileVo, "GOODS")); + uploadFileHashStringList.remove(fileVo.getHash()); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("导入物料成功。"); + return convertJsonString(response); + } catch (Exception e) { + logger.error("导入物料异常:{}", e.getMessage()); + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + uploadFileHashStringList.remove(fileVo.getHash()); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("导入物料异常:" + e.getMessage()); + return convertJsonString(response); + } + } + /** * 导入工站配置 * @@ -337,6 +377,36 @@ public class ExcelController { .doWrite(stockPoList.stream().map(StockExcelVo::of).toList()); } +// /** +// * 导出CLC看板需求 +// * +// * @param response 请求 +// */ +// @PostMapping("/downloadClcKanbanRequirementExcel") +// @ResponseBody +// public void downloadClcKanbanRequirementExcel(@RequestBody KanbanRequest request, HttpServletResponse response) throws IOException { +// logger.info("导出CLC看板需求,筛选参数:{},请求ip:{}", convertJsonString(request), getIpAddr(servletRequest)); +// //设置响应格式 +// response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); +//// response.setContentType("application/vnd.ms-excel"); //文件扩展名为excel格式 +// response.setCharacterEncoding("utf-8"); +// // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系 +// String fileName = URLEncoder.encode("CLC看板需求", StandardCharsets.UTF_8).replaceAll("\\+", "%20"); +// response.setHeader("Content-Disposition", "attachment;filename*=utf-8''" + fileName + ".xlsx"); +// // 内容样式 +// HorizontalCellStyleStrategy horizontalCellStyleStrategy = ExcelContentStyle.getContentStyle(); +// // 获取看板需求 +// List KanbanList = kanbanService.list(new LambdaQueryWrapper() +// .eq(StringUtils.isNotEmpty(request.getGoodsId()), Kanban::getGoodsId, request.getGoodsId()) +// .eq(request.getKanbanStatus() != null, Kanban::getKanbanStatus, request.getKanbanStatus())); +// +// EasyExcel.write(response.getOutputStream(), ClcKanbanExcelVo.class) +// .excelType(ExcelTypeEnum.XLSX) +// .registerWriteHandler(horizontalCellStyleStrategy) +// .sheet("CLC看板需求") +// .doWrite(KanbanList.stream().map(ClcKanbanExcelVo::of).toList()); +// } + /** * 导出CLC看板需求 * diff --git a/src/main/java/com/wms/controller/KateWorkQueryController.java b/src/main/java/com/wms/controller/KateWorkQueryController.java index 55def3d..17f1f1c 100644 --- a/src/main/java/com/wms/controller/KateWorkQueryController.java +++ b/src/main/java/com/wms/controller/KateWorkQueryController.java @@ -9,12 +9,14 @@ import com.wms.constants.enums.ResponseCode; import com.wms.entity.app.ResponseEntity; import com.wms.entity.app.dto.PageDto; import com.wms.entity.app.dto.StockOfGoodsDto; +import com.wms.entity.app.dto.extend.KanbanEntity; import com.wms.entity.app.request.*; import com.wms.entity.app.vo.*; import com.wms.entity.table.*; import com.wms.service.*; import com.wms.utils.HttpUtils; import com.wms.utils.StringUtils; +import com.wms.utils.excel.vo.ClcKanbanRequirementExcelVo; import jakarta.servlet.http.HttpServletRequest; import lombok.RequiredArgsConstructor; import org.slf4j.Logger; @@ -30,8 +32,8 @@ import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDateTime; -import java.util.List; -import java.util.Objects; +import java.util.*; +import java.util.stream.Collectors; import static com.wms.utils.StringUtils.convertJsonString; @@ -71,6 +73,14 @@ public class KateWorkQueryController { * 工作总结服务 */ private final WorkSummaryService workSummaryService; + /** + * 物料服务 + */ + private final GoodsService goodsService; + /** + * 看板服务 + */ + private final KanbanService kanbanService; /** * 请求头部信息 */ @@ -547,6 +557,87 @@ public class KateWorkQueryController { } } + /** + * 生成CLC看板需求 + */ + @PostMapping("/genClcKanbanRequirement") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "生成CLC看板需求", logMethod = "genClcKanbanRequirement") + public String genClcKanbanRequirement(@RequestBody KanbanRequest request) { + logger.info("生成CLC看板需求:{},请求ip:{}", convertJsonString(request), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + // 查询所有pull的物料 + List pullGoodsList = goodsService.list(new LambdaQueryWrapper() + .eq(Goods::getFeedingType, "PULL")); + if (pullGoodsList == null || pullGoodsList.isEmpty()) { + logger.error("没有PULL的物料信息。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("没有PULL的物料信息。"); + return convertJsonString(response); + } + // 查询所有的库存信息 + List stockOfGoodsDtoList = stockService.selectSumOfGoods(""); + // 将库存信息转换为Map + Map stockOfGoodsDtoMap = stockOfGoodsDtoList.stream().collect(Collectors.toMap(StockOfGoodsDto::getGoodsId, stockOfGoodsDto -> stockOfGoodsDto)); + List dealKanbanList = new ArrayList<>(); + for (Goods pullGoods : pullGoodsList) { + if (pullGoods.getKanbanList() == null || pullGoods.getKanbanList().isEmpty()) { + // 没有看板数据,不需要生成看板需求 + continue; + } + // 目标数量 + BigDecimal targetNum = pullGoods.getKanbanNum().multiply(pullGoods.getQuantityPerKanban()); + BigDecimal remainNum = BigDecimal.ZERO; + // 判断是否包含请求物料 + if (stockOfGoodsDtoMap.containsKey(pullGoods.getGoodsId())) { + // 筛选出当前库存 + StockOfGoodsDto stockOfGoodsDto = stockOfGoodsDtoMap.get(pullGoods.getGoodsId()); + remainNum = stockOfGoodsDto.getRemainNumSum(); + } + // 计算需要多少个看板 + BigDecimal needKanbanQuantity = targetNum.subtract(remainNum).divide(pullGoods.getQuantityPerKanban(), 0, RoundingMode.FLOOR); + // 看板表中当前物料的所有看板 + List kanbanList = kanbanService.list(new LambdaQueryWrapper() + .eq(Kanban::getGoodsId, pullGoods.getGoodsId()) + .orderByAsc(Kanban::getKanbanStatus) + .orderByAsc(Kanban::getLastPullTime)); + List emptyKanbanList = kanbanList.stream().filter(kanban -> kanban.getKanbanStatus() == 0).toList(); + // 扣除之前就有的空看板 + needKanbanQuantity = needKanbanQuantity.subtract(BigDecimal.valueOf(emptyKanbanList.size())); + // 之前的满看板 + List fullKanbanList = kanbanList.stream().filter(kanban -> kanban.getKanbanStatus() == 1).toList(); + for (Kanban kanban : fullKanbanList) { + if (needKanbanQuantity.compareTo(BigDecimal.ZERO) <= 0) { + break; + } + kanban.setKanbanStatus(0); + kanban.setLastRequestTime(LocalDateTime.now()); + kanban.setLastRequestUser(request.getUserName()); + // 添加更新列表 + dealKanbanList.add(kanban); + // 更新需求看板的数量 + needKanbanQuantity = needKanbanQuantity.subtract(BigDecimal.ONE); + } + } + // 更新看板表 + kanbanService.updateBatchById(dealKanbanList); + + logger.info("生成CLC看板需求成功。"); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("生成CLC看板需求成功。"); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("生成CLC看板需求发生异常:{}", convertJsonString(e)); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("生成CLC看板需求发生异常"); + return convertJsonString(response); + } + } + /** * 查询工作流 */ diff --git a/src/main/java/com/wms/controller/LocationController.java b/src/main/java/com/wms/controller/LocationController.java index 4da7127..01313c1 100644 --- a/src/main/java/com/wms/controller/LocationController.java +++ b/src/main/java/com/wms/controller/LocationController.java @@ -468,59 +468,26 @@ public class LocationController { rsp.setMessage("缺少库位号"); return convertJsonString(rsp); } - - // 判断拣货状态的变更 - if (eLocationQuery.getPickStatus() != null) { - // 查询原来的电子标签库位信息 - ETagLocation eTagLocationBefore = etagLocationService.getOne(new LambdaQueryWrapper() - .eq(ETagLocation::getELocationId, eLocationQuery.getELocationId()).last("limit 1")); - if (Objects.equals(eTagLocationBefore.getPickStatus(), eLocationQuery.getPickStatus())) { - // 返回失败 - logger.error("请勿重复更新拣货状态。"); - rsp.setCode(ResponseCode.ERROR.getCode()); - rsp.setMessage("请勿重复更新拣货状态。"); - return convertJsonString(rsp); - } - if (eLocationQuery.getPickStatus() == 1) { - // 如果要设定为拣货中,需设定其他信息 - // TODO -// if (StringUtils.isEmpty(eLocationQuery.getVehicleNo()) -// || ) { -// -// } - } else if (eLocationQuery.getPickStatus() == 0) { - // 此时要模拟拍灯反馈 - WcsETaskFeedbackRequest wcsETaskFeedbackRequest = new WcsETaskFeedbackRequest(); - wcsETaskFeedbackRequest.setLocation(eTagLocationBefore.getELocationId()); - wcsETaskFeedbackRequest.setTaskId(eTagLocationBefore.getTaskId()); - wcsETaskFeedbackRequest.setTaskType(eTagLocationBefore.getTaskType()); - wcsETaskFeedbackRequest.setVehicleNo(eTagLocationBefore.getVehicleNo()); - wcsETaskFeedbackRequest.setConfirmNum(eLocationQuery.getConfirmNum() != null ? eLocationQuery.getConfirmNum() : eTagLocationBefore.getNeedNum()); - wcsETaskFeedbackRequest.setNeedNum(eTagLocationBefore.getNeedNum()); - wcsETaskFeedbackRequest.setUserName(eLocationQuery.getUserName()); - ResponseEntity result = JSON.parseObject(taskController.getETaskFeedBack(wcsETaskFeedbackRequest), ResponseEntity.class); - if (result != null && Objects.equals(result.getCode(), ResponseCode.OK.getCode())) { - logger.info("更新电子标签库位拣货状态成功。"); - rsp.setCode(ResponseCode.OK.getCode()); - rsp.setMessage("更新电子标签库位拣货状态成功。"); - } else { - logger.error("更新电子标签库位拣货状态失败"); - rsp.setCode(ResponseCode.ERROR.getCode()); - rsp.setMessage(result == null ? "更新电子标签库位拣货状态失败" : "更新电子标签库位拣货状态失败," + result.getMessage()); - } - return convertJsonString(rsp); - } + LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() + .set(eLocationQuery.getELocationStatus() != null, ETagLocation::getELocationStatus, eLocationQuery.getELocationStatus()) + .set(eLocationQuery.getPickStatus() != null, ETagLocation::getPickStatus, eLocationQuery.getPickStatus()) + .eq(ETagLocation::getELocationId, eLocationQuery.getELocationId()); + if (etagLocationService.update(updateWrapper)) { + // 更新成功 + logger.info("更新电子标签库位信息成功。"); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新电子标签库位信息成功。"); } else { - LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper() - .set(eLocationQuery.getELocationStatus() != null, ETagLocation::getELocationStatus, eLocationQuery.getELocationStatus()) - .set(eLocationQuery.getPickStatus() != null, ETagLocation::getPickStatus, eLocationQuery.getPickStatus()); + // 更新失败 + logger.error("更新电子标签库位信息失败。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("更新电子标签库位信息失败。"); } - return convertJsonString(rsp); } catch (Exception e) { // 回滚事务 TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); - logger.info("更新载具信息发生异常:{}", convertJsonString(e)); + logger.error("更新载具信息发生异常:{}", convertJsonString(e)); // 返回其他异常 rsp.setCode(ResponseCode.ERROR.getCode()); rsp.setMessage("更新载具信息发生异常"); diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 86cbd04..e5a73aa 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -39,6 +39,7 @@ import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.web.bind.annotation.*; import java.math.BigDecimal; +import java.math.RoundingMode; import java.time.LocalDateTime; import java.util.*; import java.util.stream.Collectors; @@ -148,6 +149,10 @@ public class TaskController { * 库存更新服务 */ private final IStockUpdateRecordService stockUpdateRecordService; + /** + * 看板服务 + */ + private final KanbanService kanbanService; /** * 日志服务 */ @@ -362,6 +367,30 @@ public class TaskController { stockService.save(newStock); stockUpdateRecordService.addStockUpdateRecord(null, newStock, StockUpdateReasonEnum.ADD_IN.getReason(), inTask.getUserName(), BigDecimal.ZERO); } + // 消除看板 + Goods goods = goodsService.getOne(new LambdaQueryWrapper().eq(Goods::getGoodsId, inTask.getGoodsRelated().getGoodsId()).last("limit 1")); + if (goods != null && goods.getFeedingType().equals("PULL")) { + if (goods.getKanbanList() != null && !goods.getKanbanList().isEmpty()) { + BigDecimal kanbanQuantity = inTask.getGoodsRelated().getOpNum().divide(goods.getQuantityPerKanban(), 0, RoundingMode.FLOOR); + // 查这个料的看板需求 + List waitForUpdateKanban = new ArrayList<>(); + List kanbanList = kanbanService.list(new LambdaQueryWrapper() + .eq(Kanban::getGoodsId, goods.getGoodsId()) + .eq(Kanban::getKanbanStatus, 0) + .orderByAsc(Kanban::getLastPullTime)); + for (Kanban kanban : kanbanList) { + if (kanbanQuantity.compareTo(BigDecimal.ZERO) <= 0) { + break; + } + kanban.setKanbanStatus(1); + kanban.setLastPullTime(LocalDateTime.now()); + waitForUpdateKanban.add(kanban); + kanbanQuantity = kanbanQuantity.subtract(BigDecimal.ONE); + } + // 更新看板信息 + kanbanService.updateBatchById(waitForUpdateKanban); + } + } } } // 更新库存状态 @@ -1987,14 +2016,6 @@ public class TaskController { return convertJsonString(response); } } - // 验证载具号是否重复入库 - if (vehicleService.exists(new LambdaQueryWrapper().eq(Vehicle::getVehicleId, requestBackQuery.getVehicleId()) - .and(wrapper -> wrapper.eq(Vehicle::getVehicleStatus, VehicleStatus.ON.getCode())))) { - logger.error("当前箱子{}已在库中,无法回库。", requestBackQuery.getVehicleId()); - response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("当前箱子" + requestBackQuery.getVehicleId() + "已在库中,无法回库。"); - return convertJsonString(response); - } // 判断当前载具是否有回库任务 boolean hasBackTask = taskService.exists(new LambdaQueryWrapper() .eq(Task::getVehicleId, requestBackQuery.getVehicleId()) @@ -2110,7 +2131,8 @@ public class TaskController { public String requestALocation(String vehicleId) { String nextLocationId = ""; - for (int i = 0; i < locationService.count(new LambdaQueryWrapper().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); i++) { + int emptyLocationSize = (int) locationService.count(new LambdaQueryWrapper().eq(Location::getLocationStatus, LocationStatus.EMPTY.getCode())); + for (int i = 0; i < emptyLocationSize; i++) { Map resultMap = locationService.getOneLocation("", ""); if (resultMap.isEmpty() || !resultMap.containsKey("nextLocationId")) { return ""; @@ -2428,7 +2450,19 @@ public class TaskController { } // 查找到所有的工单 List orderIds = eConfigLastList.stream().map(ELocationConfigLast::getWorkOrder).distinct().toList(); - List toBeLightedOrders = orderIds.stream().skip((long) (sortBoxRequest.getOrderOfOrders() - 1) * orderQuantity).limit(orderQuantity).toList(); + // 利用DBS对这些工单id进行排序 + List kateDBSList = kateDBSService.list(new LambdaQueryWrapper() + .in(KateDBS::getWorkOrder, orderIds) + .orderByAsc(KateDBS::getWorkSequence)); + if (kateDBSList == null || kateDBSList.isEmpty()) { + logger.error("DBS查询错误,请检查DBS清单数据。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("DBS查询错误,请检查DBS清单数据。"); + return convertJsonString(response); + } + // 查询到这些工单的dbs + List orderedOrdersIds = kateDBSList.stream().map(KateDBS::getWorkOrder).distinct().toList(); + List toBeLightedOrders = orderedOrdersIds.stream().skip((long) (sortBoxRequest.getOrderOfOrders() - 1) * orderQuantity).limit(orderQuantity).toList(); // 生成亮灯数据 if (!toBeLightedOrders.isEmpty()) { for (ELocationConfigLast eConfigLast : eConfigLastList) { diff --git a/src/main/java/com/wms/entity/app/request/KanbanRequest.java b/src/main/java/com/wms/entity/app/request/KanbanRequest.java new file mode 100644 index 0000000..6126822 --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/KanbanRequest.java @@ -0,0 +1,57 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import java.time.LocalDateTime; + +/** + * 看板请求 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class KanbanRequest extends PageQuery { + /** + * 主键id + */ + @JsonProperty("recordId") + private String recordId; + /** + * 料号 + */ + @JsonProperty("goodsId") + private String goodsId; + /** + * 看板id + */ + @JsonProperty("kanbanId") + private String kanbanId; + /** + * 看板状态 + * 0:空 + * 1:满 + */ + @JsonProperty("kanbanStatus") + private Integer kanbanStatus; + /** + * 上次补货时间 + */ + @JsonProperty("lastPullTime") + private LocalDateTime lastPullTime; + /** + * 上次补货人员 + */ + @JsonProperty("lastPullUser") + private String lastPullUser; + /** + * 上次请求看板时间 + */ + @JsonProperty("lastRequestTime") + private LocalDateTime lastRequestTime; + /** + * 上次请求看板用户 + */ + @JsonProperty("lastRequestUser") + private String lastRequestUser; +} diff --git a/src/main/java/com/wms/entity/app/vo/KanbanVo.java b/src/main/java/com/wms/entity/app/vo/KanbanVo.java new file mode 100644 index 0000000..af12c20 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/KanbanVo.java @@ -0,0 +1,55 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 看板显示类 + */ +@Data +public class KanbanVo { + /** + * 主键id + */ + @JsonProperty("recordId") + private String recordId; + /** + * 料号 + */ + @JsonProperty("goodsId") + private String goodsId; + /** + * 看板id + */ + @JsonProperty("kanbanId") + private String kanbanId; + /** + * 看板状态 + * 0:空 + * 1:满 + */ + @JsonProperty("kanbanStatus") + private Integer kanbanStatus; + /** + * 上次补货时间 + */ + @JsonProperty("lastPullTime") + private LocalDateTime lastPullTime; + /** + * 上次补货人员 + */ + @JsonProperty("lastPullUser") + private String lastPullUser; + /** + * 上次请求看板时间 + */ + @JsonProperty("lastRequestTime") + private LocalDateTime lastRequestTime; + /** + * 上次请求看板用户 + */ + @JsonProperty("lastRequestUser") + private String lastRequestUser; +} diff --git a/src/main/java/com/wms/entity/table/Kanban.java b/src/main/java/com/wms/entity/table/Kanban.java new file mode 100644 index 0000000..9013ca8 --- /dev/null +++ b/src/main/java/com/wms/entity/table/Kanban.java @@ -0,0 +1,58 @@ +package com.wms.entity.table; + +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import lombok.Data; + +import java.time.LocalDateTime; + +/** + * 看板表 + */ +@Data +@TableName(value = "tbl_app_kanban", autoResultMap = true) +public class Kanban { + /** + * 主键id + */ + @TableId("record_id") + private String recordId; + /** + * 料号 + */ + @TableField("goods_id") + private String goodsId; + /** + * 看板id + */ + @TableField("kanban_id") + private String kanbanId; + /** + * 看板状态 + * 0:空 + * 1:满 + */ + @TableField("kanban_status") + private Integer kanbanStatus; + /** + * 上次补货时间 + */ + @TableField("last_pull_time") + private LocalDateTime lastPullTime; + /** + * 上次补货人员 + */ + @TableField("last_pull_user") + private String lastPullUser; + /** + * 上次请求看板时间 + */ + @TableField("last_request_time") + private LocalDateTime lastRequestTime; + /** + * 上次请求看板用户 + */ + @TableField("last_request_user") + private String lastRequestUser; +} diff --git a/src/main/java/com/wms/mapper/KanbanMapper.java b/src/main/java/com/wms/mapper/KanbanMapper.java new file mode 100644 index 0000000..67071b6 --- /dev/null +++ b/src/main/java/com/wms/mapper/KanbanMapper.java @@ -0,0 +1,12 @@ +package com.wms.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.wms.entity.table.Kanban; +import org.apache.ibatis.annotations.Mapper; + +/** + * 看板Mapper + */ +@Mapper +public interface KanbanMapper extends BaseMapper { +} diff --git a/src/main/java/com/wms/service/KanbanService.java b/src/main/java/com/wms/service/KanbanService.java new file mode 100644 index 0000000..83a3167 --- /dev/null +++ b/src/main/java/com/wms/service/KanbanService.java @@ -0,0 +1,10 @@ +package com.wms.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.wms.entity.table.Kanban; + +/** + * 看板服务接口 + */ +public interface KanbanService extends IService { +} diff --git a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java index 73ab85d..e41fd4f 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -292,6 +292,11 @@ public class WorkServiceImplements implements IWorkService { // 有标签未打印 return "有标签未打印"; } + if (!eLocationConfigService.exists(new LambdaQueryWrapper() + .eq(ELocationConfig::getWorkStation, workStation))) { + // 没有标签,说明点过确认。 + return "没有可以确认完成的工作,请勿重复点击。"; + } // 查找当前站台的标签配置 List eLocationConfigList = eLocationConfigService.list(new LambdaQueryWrapper() .eq(ELocationConfig::getWorkStation, workStation)); diff --git a/src/main/java/com/wms/service/serviceImplements/KanbanServiceImpl.java b/src/main/java/com/wms/service/serviceImplements/KanbanServiceImpl.java new file mode 100644 index 0000000..891a8b8 --- /dev/null +++ b/src/main/java/com/wms/service/serviceImplements/KanbanServiceImpl.java @@ -0,0 +1,14 @@ +package com.wms.service.serviceImplements; + +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.wms.entity.table.Kanban; +import com.wms.mapper.KanbanMapper; +import com.wms.service.KanbanService; +import org.springframework.stereotype.Service; + +/** + * 看板服务实现 + */ +@Service +public class KanbanServiceImpl extends ServiceImpl implements KanbanService { +} diff --git a/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java index 0a6b1be..1da48b2 100644 --- a/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java +++ b/src/main/java/com/wms/service/serviceImplements/LocationServiceImplements.java @@ -54,12 +54,6 @@ public class LocationServiceImplements extends ServiceImpl getOneLocation(String inPoint, String goodsId) { Map resultMap = new HashMap<>(); - // 查找对应站台 - LambdaQueryWrapper locationQueryWrapper = new LambdaQueryWrapper() - .eq(Location::getAreaId, 1) - .eq(Location::getLocationStatus, 0) - .eq(Location::getLocationType, 1) - .eq(Location::getIsLock, 0); // 添加对应设备的查询条件 int equipmentId = -1; if (StringUtils.isNotEmpty(inPoint)) { @@ -74,7 +68,7 @@ public class LocationServiceImplements extends ServiceImpl LRUStandQueryWrapper = new LambdaQueryWrapper() @@ -88,12 +82,12 @@ public class LocationServiceImplements extends ServiceImpl getOneLocationByEquipmentId(Map resultMap, LambdaQueryWrapper locationQueryWrapper, int equipmentId) { + private Map getOneLocationByEquipmentId(Map resultMap, int equipmentId) { resultMap.clear(); - locationQueryWrapper.eq(Location::getEquipmentId, equipmentId); - locationQueryWrapper.orderByDesc(Location::getWDepth) + LambdaQueryWrapper locationQueryWrapper = new LambdaQueryWrapper() + .eq(Location::getAreaId, 1) + .eq(Location::getLocationStatus, 0) + .eq(Location::getLocationType, 1) + .eq(Location::getIsLock, 0) + .eq(Location::getEquipmentId, equipmentId) + .orderByDesc(Location::getWDepth) .orderByAsc(List.of(Location::getWCol, Location::getWLayer, Location::getWRow)); List availableLocations = locationMapper.selectList(locationQueryWrapper); for (Location oneAvailableLocation : availableLocations) { diff --git a/src/main/java/com/wms/utils/excel/vo/ClcKanbanExcelVo.java b/src/main/java/com/wms/utils/excel/vo/ClcKanbanExcelVo.java new file mode 100644 index 0000000..2d1345f --- /dev/null +++ b/src/main/java/com/wms/utils/excel/vo/ClcKanbanExcelVo.java @@ -0,0 +1,46 @@ +package com.wms.utils.excel.vo; + +import com.alibaba.excel.annotation.ExcelProperty; +import com.wms.entity.table.Kanban; +import lombok.Data; + +/** + * 看板需求ExcelVo + */ +@Data +public class ClcKanbanExcelVo { + /** + * 料号 + */ + @ExcelProperty("料号") + private String goodsId; + /** + * 看板id + */ + @ExcelProperty("看板") + private String kanbanId; + /** + * 看板状态 + * 0:空 + * 1:满 + */ + @ExcelProperty("状态") + private String kanbanStatus; + + /** + * 将KanbanPo转化为KanbanExcelVo + * @param kanbanPo 数据库Po + * @return ExcelVo + */ + public static ClcKanbanExcelVo of(Kanban kanbanPo) { + ClcKanbanExcelVo excelVo = new ClcKanbanExcelVo(); + excelVo.setKanbanId(kanbanPo.getKanbanId()); + excelVo.setGoodsId(kanbanPo.getGoodsId()); + if (kanbanPo.getKanbanStatus() == 1) { + excelVo.setKanbanStatus("满"); + } else { + excelVo.setKanbanStatus("空"); + } + return excelVo; + } +} diff --git a/src/main/resources/mapper/KanbanMapper.xml b/src/main/resources/mapper/KanbanMapper.xml new file mode 100644 index 0000000..489f7e3 --- /dev/null +++ b/src/main/resources/mapper/KanbanMapper.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file