diff --git a/src/main/java/com/wms/controller/ExcelController.java b/src/main/java/com/wms/controller/ExcelController.java index dd1471c..69e3fd8 100644 --- a/src/main/java/com/wms/controller/ExcelController.java +++ b/src/main/java/com/wms/controller/ExcelController.java @@ -5,15 +5,18 @@ import com.alibaba.excel.EasyExcel; import com.alibaba.excel.support.ExcelTypeEnum; import com.alibaba.excel.write.style.HorizontalCellStyleStrategy; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wms.annotation.MyLog; import com.wms.constants.enums.*; import com.wms.entity.app.ResponseEntity; -import com.wms.entity.app.request.LocationQuery; -import com.wms.entity.app.request.StockQuery; -import com.wms.entity.app.request.TaskRecordQuery; -import com.wms.entity.app.request.VehicleQuery; +import com.wms.entity.app.dto.PageDto; +import com.wms.entity.app.request.*; import com.wms.entity.app.vo.FileVo; +import com.wms.entity.app.vo.LocationVo; +import com.wms.entity.app.vo.UploadRecordVo; import com.wms.entity.table.*; import com.wms.service.*; +import com.wms.utils.HttpUtils; import com.wms.utils.StringUtils; import com.wms.utils.excel.listener.*; import com.wms.utils.excel.style.ExcelContentStyle; @@ -62,6 +65,40 @@ public class ExcelController { private final GoodsService goodsService;// 物料服务 private final WorkStationConfigService workStationConfigService;// 工站配置服务 + /** + * 查询上传记录 + * @param uploadRecordQuery 查询参数 + * @return 结果 + */ + @PostMapping("/queryUploadRecord") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "查询上传记录", logMethod = "queryUploadRecord") + public String queryUploadRecord(@RequestBody UploadRecordQuery uploadRecordQuery) { + logger.info("接收到查询上传记录请求:{},请求ip:{}", convertJsonString(uploadRecordQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + Page page = uploadRecordQuery.toMpPage(); + Page recordPage = uploadRecordService.page(page, new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(uploadRecordQuery.getFileType()), UploadRecord::getFileType, uploadRecordQuery.getFileType()) + .like(StringUtils.isNotEmpty(uploadRecordQuery.getFileDescription()), UploadRecord::getFileDescription, uploadRecordQuery.getFileDescription()) + .like(StringUtils.isNotEmpty(uploadRecordQuery.getFileName()), UploadRecord::getFileName, uploadRecordQuery.getFileName())); + + PageDto pageDto = PageDto.of(recordPage, record -> BeanUtil.copyProperties(record, UploadRecordVo.class)); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("查询成功"); + response.setReturnData(pageDto); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("查询上传记录发生异常:{}", convertJsonString(e)); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("查询上传记录发生异常"); + return convertJsonString(response); + } + } + /** * 导入库存信息 * diff --git a/src/main/java/com/wms/controller/JobComponent.java b/src/main/java/com/wms/controller/JobComponent.java index f32c1ca..ade5153 100644 --- a/src/main/java/com/wms/controller/JobComponent.java +++ b/src/main/java/com/wms/controller/JobComponent.java @@ -49,7 +49,6 @@ public class JobComponent { * 向Wcs下发任务 * 每2秒执行一次 */ - @Async @Scheduled(fixedDelay = 2000) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public void executeTasks() { @@ -83,7 +82,6 @@ public class JobComponent { /** * 检测工作 */ - @Async @Scheduled(fixedDelay = 2000) @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) public void detectWork() { diff --git a/src/main/java/com/wms/controller/KateWorkQueryController.java b/src/main/java/com/wms/controller/KateWorkQueryController.java new file mode 100644 index 0000000..412247c --- /dev/null +++ b/src/main/java/com/wms/controller/KateWorkQueryController.java @@ -0,0 +1,330 @@ +package com.wms.controller; + +import cn.hutool.core.bean.BeanUtil; +import com.alibaba.fastjson2.JSON; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.wms.annotation.MyLog; +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.StockDto; +import com.wms.entity.app.request.DbsQuery; +import com.wms.entity.app.request.KateOrdersQuery; +import com.wms.entity.app.request.StockQuery; +import com.wms.entity.app.vo.DbsVo; +import com.wms.entity.app.vo.KateOrdersVo; +import com.wms.entity.app.vo.LocationVo; +import com.wms.entity.app.vo.StockVo; +import com.wms.entity.table.KateDBS; +import com.wms.entity.table.KateOrders; +import com.wms.entity.table.Stock; +import com.wms.service.KateDBSService; +import com.wms.service.KateOrdersService; +import com.wms.service.StockService; +import com.wms.service.WorkStationConfigService; +import com.wms.utils.HttpUtils; +import com.wms.utils.StringUtils; +import com.wms.utils.WmsUtils; +import jakarta.servlet.http.HttpServletRequest; +import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Controller; +import org.springframework.transaction.annotation.Isolation; +import org.springframework.transaction.annotation.Propagation; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.transaction.interceptor.TransactionAspectSupport; +import org.springframework.web.bind.annotation.*; + +import java.math.BigDecimal; +import java.text.SimpleDateFormat; +import java.time.LocalDateTime; +import java.time.format.DateTimeFormatter; + +import static com.wms.utils.StringUtils.convertJsonString; + +/** + * WMS库存控制类 + * + * @author 梁州 + * @date 2023/2/14 + */ +@Controller +@CrossOrigin +@RequiredArgsConstructor(onConstructor = @__(@Autowired)) +@RequestMapping(value = "/wms/kateWork") +public class KateWorkQueryController { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); + /** + * DBS服务 + */ + private final KateDBSService kateDBSService; + /** + * 工单服务 + */ + private final KateOrdersService kateOrderService; + /** + * 站台配置服务 + */ + private final WorkStationConfigService workStationConfigService; + + /** + * 请求头部信息 + */ + private final HttpServletRequest servletRequest; + + /** + * 查询DBS + */ + @PostMapping("/getDbs") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String getDbs(@RequestBody DbsQuery dbsQuery) { + logger.info("接收到查询Dbs请求:{},请求ip:{}", convertJsonString(dbsQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + Page page = dbsQuery.toMpPage(); + Page dbsPage = kateDBSService.page(page, new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(dbsQuery.getWorkOrder()), KateDBS::getWorkOrder, dbsQuery.getWorkOrder())); + + PageDto pageDto = PageDto.of(dbsPage, dbs -> BeanUtil.copyProperties(dbs, DbsVo.class)); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("查询DBS成功"); + response.setReturnData(pageDto); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("查询DBS发生异常:{}", convertJsonString(e)); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("查询DBS发生异常"); + return convertJsonString(response); + } + } + + + /** + * 更新DBS + * + * @param dbsQuery 修改参数 + * @return 结果 + */ + @PostMapping("/updateDbs") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "更新DBS", logMethod = "updateDbs") + public String updateDbs(@RequestBody DbsQuery dbsQuery) { + logger.info("接收到更新DBS请求:{},请求ip:{}", convertJsonString(dbsQuery), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(dbsQuery.getDbsId())) {// id为空,不允许执行 + logger.error("请求的id为空,不允许修改。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求的id为空,不允许修改。"); + return convertJsonString(rsp); + } + boolean updateResult = kateDBSService.update(new LambdaUpdateWrapper() + .set(dbsQuery.getWorkSequence() != null, KateDBS::getWorkSequence, dbsQuery.getWorkSequence()) + .set(dbsQuery.getDbsStatus() != null, KateDBS::getDbsStatus, dbsQuery.getDbsStatus()) + .set(StringUtils.isNotEmpty(dbsQuery.getMachineNo()), KateDBS::getMachineNo, dbsQuery.getMachineNo()) + .set(dbsQuery.getPlanStartDate() != null, KateDBS::getPlanStartDate, dbsQuery.getPlanStartDate()) + .set(KateDBS::getLastUpdateTime, LocalDateTime.now()) + .set(KateDBS::getLastUpdateUser, dbsQuery.getUserName()) + .eq(KateDBS::getDbsId, dbsQuery.getDbsId())); + if (updateResult) { + logger.info("更新Dbs成功。"); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新Dbs成功。"); + } else { + logger.error("更新Dbs失败。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("更新Dbs失败。"); + } + return convertJsonString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("更新Dbs发生异常:{}", convertJsonString(e)); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("更新Dbs发生异常"); + return convertJsonString(rsp); + } + } + + /** + * 删除Dbs + * + * @param dbsQuery dbs查询参数 + * @return 结果 + */ + @PostMapping("/deleteDbs") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "删除dbs", logMethod = "deleteDbs") + public String deleteDbs(@RequestBody DbsQuery dbsQuery) { + logger.info("接收到删除dbs请求:{},请求ip:{}", convertJsonString(dbsQuery), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(dbsQuery.getDbsId())) {// id为空,不允许执行 + logger.error("请求的id为空,不允许修改。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求的id为空,不允许修改。"); + return convertJsonString(rsp); + } + // 删除数据 + if (kateDBSService.remove(new LambdaQueryWrapper().eq(KateDBS::getDbsId, dbsQuery.getDbsId()))) { + // 返回成功 + logger.info("删除dbs成功"); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("删除dbs成功"); + } else { + // 返回失败 + logger.error("删除dbs失败"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("删除dbs失败"); + } + return convertJsonString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("删除dbs发生异常:{}", convertJsonString(e)); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("删除dbs发生异常"); + return convertJsonString(rsp); + } + } + + /** + * 查询工单 + */ + @PostMapping("/getOrders") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + public String getOrders(@RequestBody KateOrdersQuery kateOrdersQuery) { + logger.info("接收到查询工单请求:{},请求ip:{}", convertJsonString(kateOrdersQuery), HttpUtils.getIpAddr(servletRequest)); + ResponseEntity response = new ResponseEntity(); + try { + Page page = kateOrdersQuery.toMpPage(); + Page ordersPage = kateOrderService.page(page, new LambdaQueryWrapper() + .like(StringUtils.isNotEmpty(kateOrdersQuery.getWorkOrder()), KateOrders::getWorkOrder, kateOrdersQuery.getWorkOrder()) + .like(StringUtils.isNotEmpty(kateOrdersQuery.getGoodsId()), KateOrders::getGoodsId, kateOrdersQuery.getGoodsId()) + .like(StringUtils.isNotEmpty(kateOrdersQuery.getSupplyArea()), KateOrders::getSupplyArea, kateOrdersQuery.getSupplyArea())); + + PageDto pageDto = PageDto.of(ordersPage, orders -> BeanUtil.copyProperties(orders, KateOrdersVo.class)); + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("查询工单成功"); + response.setReturnData(pageDto); + return convertJsonString(response); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.error("查询工单发生异常:{}", convertJsonString(e)); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("查询工单发生异常"); + return convertJsonString(response); + } + } + + + /** + * 更新工单 + * + * @param kateOrdersQuery 修改参数 + * @return 结果 + */ + @PostMapping("/updateOrders") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "更新工单", logMethod = "updateOrders") + public String updateOrders(@RequestBody KateOrdersQuery kateOrdersQuery) { + logger.info("接收到更新工单请求:{},请求ip:{}", convertJsonString(kateOrdersQuery), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(kateOrdersQuery.getOrderId())) {// id为空,不允许执行 + logger.error("请求的id为空,不允许修改。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求的id为空,不允许修改。"); + return convertJsonString(rsp); + } + boolean updateResult = kateOrderService.update(new LambdaUpdateWrapper() + .set(kateOrdersQuery.getOrderStatus() != null, KateOrders::getOrderStatus, kateOrdersQuery.getOrderStatus()) + .set(kateOrdersQuery.getLackQuantity() != null, KateOrders::getLackQuantity, kateOrdersQuery.getLackQuantity()) + .set(kateOrdersQuery.getPickedQuantity() != null, KateOrders::getPickedQuantity, kateOrdersQuery.getPickedQuantity()) + .set(kateOrdersQuery.getRequirementQuantity() != null, KateOrders::getRequirementQuantity, kateOrdersQuery.getRequirementQuantity()) + .set(kateOrdersQuery.getOrderStatus() == 4, KateOrders::getFinishTime, LocalDateTime.now()) + .set(kateOrdersQuery.getOrderStatus() == 4, KateOrders::getUserName, kateOrdersQuery.getUserName()) + .eq(KateOrders::getOrderId, kateOrdersQuery.getOrderId())); + if (updateResult) { + logger.info("更新工单成功。"); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("更新工单成功。"); + } else { + logger.error("更新工单失败。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("更新工单失败。"); + } + return convertJsonString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("更新工单发生异常:{}", convertJsonString(e)); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("更新工单发生异常"); + return convertJsonString(rsp); + } + } + + /** + * 删除工单 + * + * @param kateOrdersQuery 查询参数 + * @return 结果 + */ + @PostMapping("/deleteOrders") + @ResponseBody + @Transactional(isolation = Isolation.REPEATABLE_READ, propagation = Propagation.REQUIRED) + @MyLog(logTitle = "删除工单", logMethod = "deleteOrders") + public String deleteOrders(@RequestBody KateOrdersQuery kateOrdersQuery) { + logger.info("接收到删除工单请求:{},请求ip:{}", convertJsonString(kateOrdersQuery), HttpUtils.getIpAddr(servletRequest)); + // 创建响应信息 + ResponseEntity rsp = new ResponseEntity(); + try { + if (StringUtils.isEmpty(kateOrdersQuery.getOrderId())) {// id为空,不允许执行 + logger.error("请求的id为空,不允许修改。"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("请求的id为空,不允许修改。"); + return convertJsonString(rsp); + } + // 删除数据 + if (kateOrderService.remove(new LambdaQueryWrapper().eq(KateOrders::getOrderId, kateOrdersQuery.getOrderId()))) { + // 返回成功 + logger.info("删除工单成功"); + rsp.setCode(ResponseCode.OK.getCode()); + rsp.setMessage("删除工单成功"); + } else { + // 返回失败 + logger.error("删除工单失败"); + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("删除工单失败"); + } + return convertJsonString(rsp); + } catch (Exception e) { + // 回滚事务 + TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); + logger.info("删除工单发生异常:{}", convertJsonString(e)); + // 返回其他异常 + rsp.setCode(ResponseCode.ERROR.getCode()); + rsp.setMessage("删除工单发生异常"); + return convertJsonString(rsp); + } + } +} \ No newline at end of file diff --git a/src/main/java/com/wms/controller/TaskController.java b/src/main/java/com/wms/controller/TaskController.java index 329ec67..10b3a05 100644 --- a/src/main/java/com/wms/controller/TaskController.java +++ b/src/main/java/com/wms/controller/TaskController.java @@ -10,7 +10,6 @@ import com.wms.constants.enums.*; import com.wms.entity.app.*; import com.wms.entity.app.dto.PageDto; import com.wms.entity.app.dto.extend.StockDetailInfo; -import com.wms.entity.app.dto.extend.TaskDetailInfo; import com.wms.entity.app.request.*; import com.wms.entity.app.vo.BoxPrintData; import com.wms.entity.app.vo.StandPickFinishVo; @@ -363,7 +362,7 @@ public class TaskController { stockService.update(stock, new LambdaUpdateWrapper().eq(Stock::getStockId, stock.getStockId())); }); // 当前载具 - Vehicle currentVehicle = vehicleService.getOne(new LambdaQueryWrapper().eq(Vehicle::getVehicleId, inTask.getVehicleId())); + Vehicle currentVehicle = vehicleService.getOne(new LambdaQueryWrapper().eq(Vehicle::getVehicleId, inTask.getVehicleId()).last("limit 1")); if (currentVehicle == null) { // 添加载具 Vehicle newVehicle = new Vehicle(); @@ -448,6 +447,7 @@ public class TaskController { // 释放原来的库位 locationService.update(new LambdaUpdateWrapper() .set(Location::getLocationStatus, LocationStatus.EMPTY.getCode()) + .set(Location::getVehicleId, "") .eq(Location::getLocationId, outTask.getOrigin())); } } @@ -547,7 +547,7 @@ public class TaskController { response.setMessage("暂无可用库位!"); return convertJsonString(response); } else { - Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId"))); + Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId")).last("limit 1")); LambdaUpdateWrapper updateLocationWrapper = new LambdaUpdateWrapper() .set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()) .set(Location::getVehicleId, wcsVehicleInRequest.getVehicleNo()) @@ -633,7 +633,7 @@ public class TaskController { response.setMessage("暂无可用库位!"); return convertJsonString(response); } else { - Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId"))); + Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId")).last("limit 1")); LambdaUpdateWrapper updateLocationWrapper = new LambdaUpdateWrapper() .set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()) .set(Location::getVehicleId, duplicateLocationRequest.getVehicleId()) @@ -778,7 +778,8 @@ public class TaskController { // 查找到对应的拣选任务 PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() .eq(PickTask::getVehicleId, boxArriveRequest.getVehicleNo()) - .eq(PickTask::getStandId, boxArriveRequest.getLocation())); + .eq(PickTask::getStandId, boxArriveRequest.getLocation()) + .last("limit 1")); if (pickTask == null || StringUtils.isEmpty(pickTask.getPickTaskId())) { logger.error("拣选任务查询失败"); response.setCode(ResponseCode.ERROR.getCode()); @@ -793,6 +794,12 @@ public class TaskController { standService.update(new LambdaUpdateWrapper() .set(Stand::getPickVehicle, boxArriveRequest.getVehicleNo()) .eq(Stand::getStandId, pickTask.getStandId())); + // 重置当前站台非当前箱子的已完成拣选任务 + pickTaskService.update(new LambdaUpdateWrapper() + .set(PickTask::getPickStatus, PickTaskStatusEnum.NEW.getCode()) + .ne(PickTask::getVehicleId, boxArriveRequest.getVehicleNo()) + .eq(PickTask::getStandId, boxArriveRequest.getLocation()) + .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode())); response.setCode(ResponseCode.OK.getCode()); response.setMessage("上报成功"); @@ -837,7 +844,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -851,7 +859,8 @@ public class TaskController { // 根据站台号查找对应的载具号 PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() .eq(PickTask::getStandId, standId) - .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode())); + .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()) + .last("limit 1")); if (pickTask == null || StringUtils.isEmpty(pickTask.getVehicleId())) { logger.error("当前站台查不到正在拣选的箱子"); response.setCode(ResponseCode.ERROR.getCode()); @@ -862,7 +871,8 @@ public class TaskController { // 查找库存信息 Stock stock = stockService.getOne(new LambdaQueryWrapper() .eq(Stock::getVehicleId, vehicleId) - .apply("goods_related ->> '$.goodsId' = {0}", workQuery.getGoodsId())); + .apply("goods_related ->> '$.goodsId' = {0}", workQuery.getGoodsId()) + .last("limit 1")); if (stock == null || StringUtils.isEmpty(stock.getStockId()) || stock.getGoodsRelated() == null) { logger.error("请求料号:{}与正在拣选的箱子:{}无对应关系", workQuery.getGoodsId(), vehicleId); response.setCode(ResponseCode.ERROR.getCode()); @@ -899,7 +909,8 @@ public class TaskController { ELocationConfig eConfig = eLocationConfigService.getOne(new LambdaQueryWrapper() .eq(ELocationConfig::getWorkStation, standId) .eq(ELocationConfig::getWorkOrder, tempWork.getWorkOrder()) - .eq(ELocationConfig::getWorkCenter, tempWork.getWorkCenter())); + .eq(ELocationConfig::getWorkCenter, tempWork.getWorkCenter()) + .last("limit 1")); if (eConfig != null) { // 当次拣选数量 BigDecimal thisPickNum = realNum.compareTo(tempWork.getNeedNum().subtract(tempWork.getPickedNum())) > 0 ? tempWork.getNeedNum().subtract(tempWork.getPickedNum()) : realNum; @@ -1029,7 +1040,8 @@ public class TaskController { // 站台号从ip获取 targetStand = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); } if (targetStand == null) { logger.error("查询拣选站台错误。"); @@ -1048,7 +1060,8 @@ public class TaskController { // 查询当前站台的拣货任务 PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() .eq(PickTask::getStandId, targetStand.getStandId()) - .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode())); + .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()) + .last("limit 1")); if (pickTask == null) { // 返回成功 response.setCode(ResponseCode.OK.getCode()); @@ -1098,7 +1111,7 @@ public class TaskController { } if (eTaskFeedbackRequest.getTaskType() == 1) {// 拣选任务 // 根据taskId查找对应的workFlow - WorkFlow workFlow = workFlowService.getOne(new LambdaQueryWrapper().eq(WorkFlow::getWorkFlowId, eTaskFeedbackRequest.getTaskId())); + WorkFlow workFlow = workFlowService.getOne(new LambdaQueryWrapper().eq(WorkFlow::getWorkFlowId, eTaskFeedbackRequest.getTaskId()).last("limit 1")); if (workFlow == null) { logger.error("反馈的任务号查找不到对应的工作信息。"); response.setCode(ResponseCode.ERROR.getCode()); @@ -1145,7 +1158,8 @@ public class TaskController { // 更新库存数量 Stock existStock = stockService.getOne(new LambdaQueryWrapper() .apply("goods_related -> '$.goodsId' = {0}", workFlow.getGoodsId()) - .eq(Stock::getVehicleId, eTaskFeedbackRequest.getVehicleNo())); + .eq(Stock::getVehicleId, eTaskFeedbackRequest.getVehicleNo()) + .last("limit 1")); if (existStock != null && existStock.getGoodsRelated() != null) { StockDetailInfo goodsDetail = existStock.getGoodsRelated(); goodsDetail.setRemainNum(goodsDetail.getRemainNum().subtract(BigDecimal.valueOf(eTaskFeedbackRequest.getConfirmNum()))); @@ -1166,7 +1180,8 @@ public class TaskController { } else {// 小盒子放入大盒子 // 根据location查询到对应的配置 ELocationConfigLast eLocationConfigLast = eLocationConfigLastService.getOne(new LambdaQueryWrapper() - .eq(ELocationConfigLast::getELocationId, eTaskFeedbackRequest.getLocation())); + .eq(ELocationConfigLast::getELocationId, eTaskFeedbackRequest.getLocation()) + .last("limit 1")); if (eLocationConfigLast != null) { // 设置状态为已取走 eLocationConfigLast.setBoxStatus(2); @@ -1207,7 +1222,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -1218,6 +1234,12 @@ public class TaskController { response.setMessage("请求参数缺少站台号。"); return convertJsonString(response); } + if (StringUtils.isEmpty(workConfirmRequest.getGoodsId())) { + logger.error("请求参数缺少料号。"); + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("请求参数缺少料号。"); + return convertJsonString(response); + } // 判断当前站台是否还有亮灯数据 if (etagLocationService.exists(new LambdaQueryWrapper() .eq(ETagLocation::getWorkStation, standId) @@ -1230,7 +1252,8 @@ public class TaskController { // 查询当前站台的拣货任务 PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() .eq(PickTask::getStandId, standId) - .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode())); + .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()) + .last("limit 1")); if (pickTask == null) { // 没有拣货任务,直接放行 // 调用Wcs的放行接口 @@ -1258,7 +1281,8 @@ public class TaskController { // 更新库存数量 Stock existStock = stockService.getOne(new LambdaQueryWrapper() .apply("goods_related -> '$.goodsId' = {0}", workConfirmRequest.getGoodsId()) - .eq(Stock::getVehicleId, pickTask.getVehicleId())); + .eq(Stock::getVehicleId, pickTask.getVehicleId()) + .last("limit 1")); StockDetailInfo goodsRelated = existStock.getGoodsRelated(); goodsRelated.setRemainNum(workConfirmRequest.getRemainNumReal()); existStock.setGoodsRelated(goodsRelated); @@ -1395,28 +1419,26 @@ public class TaskController { ResponseEntity response = new ResponseEntity(); try { // 获取站台号 - String standId = ""; + Stand targetStand; if (StringUtils.isNotEmpty(wcsDisposeVehicleRequest.getLocation())) { // 站台号从请求参数中获取 - standId = wcsDisposeVehicleRequest.getLocation(); + targetStand = standService.getById(wcsDisposeVehicleRequest.getLocation()); } else { // 站台号从ip获取 - Stand standOfIp = standService.getOne(new LambdaQueryWrapper() + targetStand = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); - if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { - standId = standOfIp.getStandId(); - } + .eq(Stand::getStandType, 2) + .last("limit 1")); } - if (StringUtils.isEmpty(standId)) { - logger.error("请求参数缺少站台号。"); + if (targetStand == null) { + logger.error("查询拣选站台错误。"); response.setCode(ResponseCode.ERROR.getCode()); - response.setMessage("请求参数缺少站台号。"); + response.setMessage("查询拣选站台错误。"); return convertJsonString(response); } // 判断当前站台是否还有亮灯数据 if (etagLocationService.exists(new LambdaQueryWrapper() - .eq(ETagLocation::getWorkStation, standId) + .eq(ETagLocation::getWorkStation, targetStand.getStandId()) .eq(ETagLocation::getPickStatus, 1))) { logger.error("站台灯光未全部拍灭,请检查。"); response.setCode(ResponseCode.ERROR.getCode()); @@ -1425,19 +1447,18 @@ public class TaskController { } // 查询当前站台的拣货任务 PickTask pickTask = pickTaskService.getOne(new LambdaQueryWrapper() - .eq(PickTask::getStandId, standId) - .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode())); + .eq(PickTask::getStandId, targetStand.getStandId()) + .eq(PickTask::getPickStatus, PickTaskStatusEnum.FINISH.getCode()) + .last("limit 1")); if (pickTask == null) { // 没有拣货任务,直接放行 - // 调用Wcs的放行接口 -// wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(standId, null)); // 更新站台信息 standService.update(new LambdaUpdateWrapper() .set(Stand::getLastUseTime, LocalDateTime.now()) .set(Stand::getPickVehicle, "") .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); response.setCode(ResponseCode.OK.getCode()); response.setMessage("确认成功,放行"); } else { @@ -1447,6 +1468,10 @@ public class TaskController { List goodsIdList = new ArrayList<>(); if (outsideVehicles != null && !outsideVehicles.isEmpty()) { for (OutsideVehicles outsideVehicle : outsideVehicles) { + if (Objects.equals(outsideVehicle.getGoodsId(), targetStand.getPickGoods())) { + // 正在拣货的物料除外 + continue; + } if (!goodsIdList.contains(outsideVehicle.getGoodsId())) { goodsIdList.add(outsideVehicle.getGoodsId()); } @@ -1455,14 +1480,14 @@ public class TaskController { if (goodsIdList.size() > 0) { // 判断这些物料是不是当前站台的工作流中是否需要 if (workFlowService.exists(new LambdaQueryWrapper() - .eq(WorkFlow::getWorkStation, standId) + .eq(WorkFlow::getWorkStation, targetStand.getStandId()) .in(WorkFlow::getGoodsId, goodsIdList) .ne(WorkFlow::getWorkStatus, 2))) { // 更新站台信息 standService.update(new LambdaUpdateWrapper() .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "当前料箱还有其他物料需要拣货") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); // 需要,不放行,返回前台提示信息 response.setCode(ResponseCode.ERROR.getCode()); response.setMessage("当前料箱还有其他物料需要拣货"); @@ -1474,17 +1499,17 @@ public class TaskController { // 删除当前拣选任务 pickTaskService.removeById(pickTask); // 不需要,放行 - wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(standId, pickTask.getVehicleId())); + wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(targetStand.getStandId(), pickTask.getVehicleId())); // 判断是不是已经完成工作 if (workFlowService.exists(new LambdaQueryWrapper() - .eq(WorkFlow::getWorkStation, standId) + .eq(WorkFlow::getWorkStation, targetStand.getStandId()) .ne(WorkFlow::getWorkStatus, 2))) { standService.update(new LambdaUpdateWrapper() .set(Stand::getLastUseTime, LocalDateTime.now()) .set(Stand::getPickVehicle, "") .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); // 当前站台工作未全部完成 response.setMessage("确认成功,放行"); } else { @@ -1493,7 +1518,7 @@ public class TaskController { .set(Stand::getPickVehicle, "") .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); // 当前站台工作已全部完成,需要提示工作完成,打印标签 response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。"); } @@ -1507,10 +1532,10 @@ public class TaskController { // 删除当前拣选任务 pickTaskService.removeById(pickTask); // 放行 - wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(standId, pickTask.getVehicleId())); + wcsService.sendWcsDisposeVehicle(new WcsDisposeVehicleRequest(targetStand.getStandId(), pickTask.getVehicleId())); // 判断是不是已经完成工作 if (workFlowService.exists(new LambdaQueryWrapper() - .eq(WorkFlow::getWorkStation, standId) + .eq(WorkFlow::getWorkStation, targetStand.getStandId()) .ne(WorkFlow::getWorkStatus, 2))) { // 当前站台工作未全部完成 standService.update(new LambdaUpdateWrapper() @@ -1518,7 +1543,7 @@ public class TaskController { .set(Stand::getPickVehicle, "") .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); response.setMessage("确认成功,放行"); } else { standService.update(new LambdaUpdateWrapper() @@ -1526,7 +1551,7 @@ public class TaskController { .set(Stand::getPickVehicle, "") .set(Stand::getPickGoods, "") .set(Stand::getPickTip, "当前工作已经全部完成,请至完成界面进行后续工作。") - .eq(Stand::getStandId, standId)); + .eq(Stand::getStandId, targetStand.getStandId())); // 当前站台工作已全部完成,需要提示工作完成,打印标签 response.setMessage("当前工作已经全部完成,请至完成界面进行后续工作。"); } @@ -1567,7 +1592,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -1583,7 +1609,8 @@ public class TaskController { standPickFinishVo.setStandId(standId); try { // 获取当前站台已完成数量 - List allWorkFlows = workFlowService.list(); + List allWorkFlows = workFlowService.list(new LambdaQueryWrapper() + .eq(WorkFlow::getWorkStation, standId)); if (allWorkFlows == null || allWorkFlows.isEmpty()) { standPickFinishVo.setTip("当前站台没有工作"); standPickFinishVo.setPlanRows(0); @@ -1659,7 +1686,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -1722,7 +1750,7 @@ public class TaskController { return convertJsonString(response); } // 查询物料是否是间接物料 - Goods goods = goodsService.getOne(new LambdaQueryWrapper().eq(Goods::getGoodsId, callEmptyVehicleRequest.getGoodsId()).eq(Goods::getGoodsInVehicleType, "间接物料")); + Goods goods = goodsService.getOne(new LambdaQueryWrapper().eq(Goods::getGoodsId, callEmptyVehicleRequest.getGoodsId()).eq(Goods::getGoodsInVehicleType, "间接物料").last("limit 1")); if (goods == null) { logger.error("当前物料不是间接物料"); response.setCode(ResponseCode.ERROR.getCode()); @@ -1846,7 +1874,7 @@ public class TaskController { response.setMessage("暂无可用库位!"); return convertJsonString(response); } else { - Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId"))); + Location nextLocation = locationService.getOne(new LambdaQueryWrapper().eq(Location::getLocationId, resultMap.get("nextLocationId")).last("limit 1")); LambdaUpdateWrapper updateLocationWrapper = new LambdaUpdateWrapper() .set(Location::getLocationStatus, LocationStatus.OCCUPY.getCode()) .set(Location::getVehicleId, requestBackQuery.getVehicleId()) @@ -1898,10 +1926,12 @@ public class TaskController { } } } + response.setCode(ResponseCode.OK.getCode()); + response.setMessage("可以回库。"); + } else { + response.setCode(ResponseCode.ERROR.getCode()); + response.setMessage("不可以回库。"); } - - response.setCode(ResponseCode.OK.getCode()); - response.setMessage("可以回库。"); return convertJsonString(response); } catch (Exception e) { // 回滚事务 @@ -1936,7 +1966,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -1961,7 +1992,8 @@ public class TaskController { BoxPrintData boxPrintData = new BoxPrintData(); // 查找电子标签库位 ETagLocation eTagLocation = etagLocationService.getOne(new LambdaQueryWrapper() - .eq(ETagLocation::getELocationId, eLocationConfig.getELocationId())); + .eq(ETagLocation::getELocationId, eLocationConfig.getELocationId()) + .last("limit 1")); // 获取工作流信息 List workFlows = workFlowService.list(new LambdaQueryWrapper() .eq(WorkFlow::getWorkOrder, eLocationConfig.getWorkOrder()) @@ -1969,7 +2001,8 @@ public class TaskController { .eq(WorkFlow::getWorkStation, eLocationConfig.getWorkStation())); // 查询DBS KateDBS kateDBS = kateDBSService.getOne(new LambdaQueryWrapper() - .eq(KateDBS::getWorkOrder, eLocationConfig.getWorkOrder())); + .eq(KateDBS::getWorkOrder, eLocationConfig.getWorkOrder()) + .last("limit 1")); if (eTagLocation == null || workFlows == null || workFlows.isEmpty() || kateDBS == null) { // 存在数据异常,跳过 continue; @@ -2029,7 +2062,8 @@ public class TaskController { // 站台号从ip获取 Stand standOfIp = standService.getOne(new LambdaQueryWrapper() .eq(Stand::getStandIp, HttpUtils.getIpAddr(servletRequest)) - .eq(Stand::getStandType, 2)); + .eq(Stand::getStandType, 2) + .last("limit 1")); if (standOfIp != null && StringUtils.isNotEmpty(standOfIp.getStandId())) { standId = standOfIp.getStandId(); } @@ -2042,7 +2076,7 @@ public class TaskController { } // 判断大盒子号是否正确 List stationConfigs = workStationConfigService.list(new LambdaQueryWrapper() - .eq(WorkStationConfig::getBigBox, sortBoxRequest.getBigBoxNo()) + .eq(WorkStationConfig::getBigBox, sortBoxRequest.getBigBoxNo()) .eq(WorkStationConfig::getWorkStation, standId)); if (stationConfigs == null || stationConfigs.isEmpty()) { logger.error("请输入正确的大盒子号。"); @@ -2074,7 +2108,8 @@ public class TaskController { ELocationConfigLast eConfigLast = eLocationConfigLastService.getOne(new LambdaQueryWrapper() .eq(ELocationConfigLast::getWorkStation, standId) .eq(ELocationConfigLast::getWorkCenter, smallBox) - .eq(ELocationConfigLast::getBoxStatus, 0)); + .eq(ELocationConfigLast::getBoxStatus, 0) + .last("limit 1")); if (eConfigLast != null) { // 当次拣选数量 ETaskData eTaskData = new ETaskData(); diff --git a/src/main/java/com/wms/entity/app/dto/GoodsDto.java b/src/main/java/com/wms/entity/app/dto/GoodsDto.java index d52cab0..e84b0cf 100644 --- a/src/main/java/com/wms/entity/app/dto/GoodsDto.java +++ b/src/main/java/com/wms/entity/app/dto/GoodsDto.java @@ -1,11 +1,11 @@ package com.wms.entity.app.dto; -import com.baomidou.mybatisplus.annotation.TableField; -import com.baomidou.mybatisplus.annotation.TableId; +import com.wms.entity.app.dto.extend.KanbanEntity; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; -import java.util.Date; +import java.util.List; /** * 物料 @@ -17,29 +17,87 @@ public class GoodsDto { */ private String goodsId; /** - * 物料名称 + * 物料名称/描述 */ private String goodsName; /** * 单位 */ private String goodsUnit; - /** - * 物料ID - */ - private String itemId; /** * 物料分类 */ private String goodsType; /** - * 有效天数 + * 供应商分类 */ - private Integer lifeDays; + private String providerType; /** - * 仓储分类 + * 重量 */ - private String invCategory; + private BigDecimal weight; + /** + * 重量单位 + */ + private String weightUnit; + /** + * 每盒数量 + */ + private BigDecimal quantityPerBox; + /** + * 拆包方式 + */ + private String unpackingType; + /** + * 载具类型 + */ + private String vehicleType; + /** + * 载具类型描述 + */ + private String vehicleTypeDescription; + /** + * 物料载具类型 + */ + private String goodsInVehicleType; + /** + * 补料方式 + * PULL:有看板 + * PUSH:无看板 + */ + private String feedingType; + /** + * 每个看板包含物料数量 + */ + private BigDecimal quantityPerKanban; + /** + * 看板的数量 + */ + private BigDecimal kanbanNum; + /** + * 看板详细信息 + */ + private List kanbanList; + /** + * 补货点 + */ + private BigDecimal feedingValue; + /** + * 备注1 + */ + private String remark1; + /** + * 备注2 + */ + private String remark2; + /** + * 备注3 + */ + private String remark3; + /** + * 数据来源 + */ + private String dataSource; /** * 最后更新日期 */ diff --git a/src/main/java/com/wms/entity/app/request/DbsQuery.java b/src/main/java/com/wms/entity/app/request/DbsQuery.java new file mode 100644 index 0000000..aacda83 --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/DbsQuery.java @@ -0,0 +1,49 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +@EqualsAndHashCode(callSuper = true) +@Data +public class DbsQuery extends PageQuery { + /** + * id + */ + @JsonProperty("dbsId") + private String dbsId; + /** + * 顺序号 + */ + @JsonProperty("workSequence") + private Integer workSequence; + /** + * 工单 + */ + @JsonProperty("workOrder") + private String workOrder; + /** + * 机器序列号 + */ + @JsonProperty("machineNo") + private String machineNo; + /** + * 计划开工日期 + */ + @JsonProperty("planStartDate") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime planStartDate; + /** + * dbs的状态 + * 0:未开始 + * 1:已开始未完成 + * 2:已完成 + */ + @JsonProperty("dbsStatus") + private Integer dbsStatus; +} diff --git a/src/main/java/com/wms/entity/app/request/GoodsQuery.java b/src/main/java/com/wms/entity/app/request/GoodsQuery.java index 9d7c4d5..45cf7ad 100644 --- a/src/main/java/com/wms/entity/app/request/GoodsQuery.java +++ b/src/main/java/com/wms/entity/app/request/GoodsQuery.java @@ -1,9 +1,17 @@ package com.wms.entity.app.request; +import cn.hutool.core.bean.BeanUtil; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; +import com.wms.entity.app.dto.extend.KanbanEntity; import com.wms.entity.table.Goods; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; /** * 物料查询请求 @@ -17,10 +25,119 @@ public class GoodsQuery extends PageQuery { @JsonProperty("goodsId") private String goodsId; /** - * 物料名称 + * 物料名称/描述 */ @JsonProperty("goodsName") private String goodsName; + /** + * 单位 + */ + @JsonProperty("goodsUnit") + private String goodsUnit; + /** + * 物料分类 + */ + @JsonProperty("goodsType") + private String goodsType; + /** + * 供应商分类 + */ + @JsonProperty("providerType") + private String providerType; + /** + * 重量 + */ + @JsonProperty("weight") + private BigDecimal weight; + /** + * 重量单位 + */ + @JsonProperty("weightUnit") + private String weightUnit; + /** + * 每盒数量 + */ + @JsonProperty("quantityPerBox") + private BigDecimal quantityPerBox; + /** + * 拆包方式 + */ + @JsonProperty("unpackingType") + private String unpackingType; + /** + * 载具类型 + */ + @JsonProperty("vehicleType") + private String vehicleType; + /** + * 载具类型描述 + */ + @JsonProperty("vehicleTypeDescription") + private String vehicleTypeDescription; + /** + * 物料载具类型 + */ + @JsonProperty("goodsInVehicleType") + private String goodsInVehicleType; + /** + * 补料方式 + * PULL:有看板 + * PUSH:无看板 + */ + @JsonProperty("feedingType") + private String feedingType; + /** + * 每个看板包含物料数量 + */ + @JsonProperty("quantityPerKanban") + private BigDecimal quantityPerKanban; + /** + * 看板的数量 + */ + @JsonProperty("kanbanNum") + private BigDecimal kanbanNum; + /** + * 看板详细信息 + */ + @JsonProperty("kanbanList") + private List kanbanList; + /** + * 补货点 + */ + @JsonProperty("feedingValue") + private BigDecimal feedingValue; + /** + * 备注1 + */ + @JsonProperty("remark1") + private String remark1; + /** + * 备注2 + */ + @JsonProperty("remark2") + private String remark2; + /** + * 备注3 + */ + @JsonProperty("remark3") + private String remark3; + /** + * 数据来源 + */ + @JsonProperty("dataSource") + private String dataSource; + /** + * 最后更新日期 + */ + @JsonProperty("lastUpdateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime lastUpdateTime; + /** + * 最后更新用户 + */ + @JsonProperty("lastUpdateUser") + private String lastUpdateUser; /** @@ -28,10 +145,6 @@ public class GoodsQuery extends PageQuery { * @return goodsPO */ public Goods toGoodsPO() { - Goods goodsPO = new Goods(); - goodsPO.setGoodsId(goodsId);// 物料编号 - goodsPO.setGoodsName(goodsName);// 物料描述 - - return goodsPO; + return BeanUtil.copyProperties(this, Goods.class); } } diff --git a/src/main/java/com/wms/entity/app/request/KateOrdersQuery.java b/src/main/java/com/wms/entity/app/request/KateOrdersQuery.java new file mode 100644 index 0000000..8470745 --- /dev/null +++ b/src/main/java/com/wms/entity/app/request/KateOrdersQuery.java @@ -0,0 +1,107 @@ +package com.wms.entity.app.request; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@EqualsAndHashCode(callSuper = true) +@Data +public class KateOrdersQuery extends PageQuery { + /** + * id + */ + @JsonProperty("orderId") + private String orderId; + /** + * Order + */ + @JsonProperty("workOrder") + private String workOrder; + /** + * Material + */ + @JsonProperty("goodsId") + private String goodsId; + /** + * Item + */ + @JsonProperty("item") + private String item; + /** + * Description + */ + @JsonProperty("description") + private String description; + /** + * SLoc + */ + @JsonProperty("sLoc") + private String sLoc; + /** + * Type + */ + @JsonProperty("type") + private String type; + /** + * Status + */ + @JsonProperty("originStatus") + private String originStatus; + /** + * SupplyArea + */ + @JsonProperty("supplyArea") + private String supplyArea; + /** + * SortStrng + */ + @JsonProperty("sortString") + private String sortString; + /** + * Requirement Qty + */ + @JsonProperty("requirementQuantity") + private BigDecimal requirementQuantity; + /** + * BUn + */ + @JsonProperty("goodsUnit") + private String goodsUnit; + /** + * 工单状态 + * 0:未开始 + * 1:已生成任务 + * 2:已呼叫料箱 + * 3:正在拣选 + * 4:拣选完成 + */ + @JsonProperty("orderStatus") + private Integer orderStatus; + /** + * 缺少数量 + */ + @JsonProperty("lackQuantity") + private BigDecimal lackQuantity; + /** + * 实际拣选数量 + */ + @JsonProperty("pickedQuantity") + private BigDecimal pickedQuantity; + /** + * 操作人员 + */ + @JsonProperty("userName") + private String userName; + /** + * 完成时间 + */ + @JsonProperty("finishTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime finishTime; +} diff --git a/src/main/java/com/wms/entity/app/request/UserQuery.java b/src/main/java/com/wms/entity/app/request/UserQuery.java index 414a127..8a7e628 100644 --- a/src/main/java/com/wms/entity/app/request/UserQuery.java +++ b/src/main/java/com/wms/entity/app/request/UserQuery.java @@ -1,12 +1,14 @@ package com.wms.entity.app.request; import cn.hutool.core.bean.BeanUtil; +import com.fasterxml.jackson.annotation.JsonFormat; import com.fasterxml.jackson.annotation.JsonProperty; import com.wms.entity.table.User; import com.wms.utils.MyPassword; import com.wms.utils.StringUtils; import lombok.Data; import lombok.EqualsAndHashCode; +import org.springframework.format.annotation.DateTimeFormat; import java.time.LocalDateTime; @@ -33,9 +35,13 @@ public class UserQuery extends PageQuery{ private String loginPassword; /** 添加时间 */ @JsonProperty("addTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime addTime; /** 更新时间 */ @JsonProperty("updateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private LocalDateTime updateTime; /** 添加用户名 */ @JsonProperty("addUser") diff --git a/src/main/java/com/wms/entity/app/vo/DbsVo.java b/src/main/java/com/wms/entity/app/vo/DbsVo.java new file mode 100644 index 0000000..65a0362 --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/DbsVo.java @@ -0,0 +1,62 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.time.LocalDateTime; + +/** + * DbsVo + */ +@Data +public class DbsVo { + /** + * DBS计划Id + */ + @JsonProperty("dbsId") + private String dbsId; + /** + * 顺序号 + */ + @JsonProperty("workSequence") + private Integer workSequence; + /** + * 机器序列号 + */ + @JsonProperty("machineNo") + private String machineNo; + /** + * 工单 + */ + @JsonProperty("workOrder") + private String workOrder; + /** + * 计划开工日期 + */ + @JsonProperty("planStartDate") + @DateTimeFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDateTime planStartDate; + /** + * dbs的状态 + * 0:未开始 + * 1:已开始未完成 + * 2:已完成 + */ + @JsonProperty("dbsStatus") + private Integer dbsStatus; + /** + * 最近更新时间 + */ + @JsonProperty("lastUpdateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime lastUpdateTime; + /** + * 最近更新用户 + */ + @JsonProperty("lastUpdateUser") + private String lastUpdateUser; +} diff --git a/src/main/java/com/wms/entity/app/vo/GoodsVo.java b/src/main/java/com/wms/entity/app/vo/GoodsVo.java index ff76f05..ecf3baa 100644 --- a/src/main/java/com/wms/entity/app/vo/GoodsVo.java +++ b/src/main/java/com/wms/entity/app/vo/GoodsVo.java @@ -1,45 +1,134 @@ package com.wms.entity.app.vo; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import com.wms.entity.app.dto.extend.KanbanEntity; import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; -import java.util.Date; +import java.math.BigDecimal; +import java.time.LocalDateTime; +import java.util.List; @Data public class GoodsVo { /** * 物料编号 */ + @JsonProperty("goodsId") private String goodsId; /** - * 物料名称 + * 物料名称/描述 */ + @JsonProperty("goodsName") private String goodsName; /** * 单位 */ + @JsonProperty("goodsUnit") private String goodsUnit; - /** - * 物料ID - */ - private String itemId; /** * 物料分类 */ + @JsonProperty("goodsType") private String goodsType; /** - * 有效天数 + * 供应商分类 */ - private Integer lifeDays; + @JsonProperty("providerType") + private String providerType; /** - * 仓储分类 + * 重量 */ - private String invCategory; + @JsonProperty("weight") + private BigDecimal weight; + /** + * 重量单位 + */ + @JsonProperty("weightUnit") + private String weightUnit; + /** + * 每盒数量 + */ + @JsonProperty("quantityPerBox") + private BigDecimal quantityPerBox; + /** + * 拆包方式 + */ + @JsonProperty("unpackingType") + private String unpackingType; + /** + * 载具类型 + */ + @JsonProperty("vehicleType") + private String vehicleType; + /** + * 载具类型描述 + */ + @JsonProperty("vehicleTypeDescription") + private String vehicleTypeDescription; + /** + * 物料载具类型 + */ + @JsonProperty("goodsInVehicleType") + private String goodsInVehicleType; + /** + * 补料方式 + * PULL:有看板 + * PUSH:无看板 + */ + @JsonProperty("feedingType") + private String feedingType; + /** + * 每个看板包含物料数量 + */ + @JsonProperty("quantityPerKanban") + private BigDecimal quantityPerKanban; + /** + * 看板的数量 + */ + @JsonProperty("kanbanNum") + private BigDecimal kanbanNum; + /** + * 看板详细信息 + */ + @JsonProperty("kanbanList") + private List kanbanList; + /** + * 补货点 + */ + @JsonProperty("feedingValue") + private BigDecimal feedingValue; + /** + * 备注1 + */ + @JsonProperty("remark1") + private String remark1; + /** + * 备注2 + */ + @JsonProperty("remark2") + private String remark2; + /** + * 备注3 + */ + @JsonProperty("remark3") + private String remark3; + /** + * 数据来源 + */ + @JsonProperty("dataSource") + private String dataSource; /** * 最后更新日期 */ - private Date lastUpdateTime; + @JsonProperty("lastUpdateTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime lastUpdateTime; /** * 最后更新用户 */ + @JsonProperty("lastUpdateUser") private String lastUpdateUser; } diff --git a/src/main/java/com/wms/entity/app/vo/KateOrdersVo.java b/src/main/java/com/wms/entity/app/vo/KateOrdersVo.java new file mode 100644 index 0000000..351183a --- /dev/null +++ b/src/main/java/com/wms/entity/app/vo/KateOrdersVo.java @@ -0,0 +1,108 @@ +package com.wms.entity.app.vo; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.fasterxml.jackson.annotation.JsonProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.math.BigDecimal; +import java.time.LocalDateTime; + +/** + * DbsVo + */ +@Data +public class KateOrdersVo { + /** + * id + */ + @JsonProperty("orderId") + private String orderId; + /** + * Order + */ + @JsonProperty("workOrder") + private String workOrder; + /** + * Material + */ + @JsonProperty("goodsId") + private String goodsId; + /** + * Item + */ + @JsonProperty("item") + private String item; + /** + * Description + */ + @JsonProperty("description") + private String description; + /** + * SLoc + */ + @JsonProperty("sLoc") + private String sLoc; + /** + * Type + */ + @JsonProperty("type") + private String type; + /** + * Status + */ + @JsonProperty("originStatus") + private String originStatus; + /** + * SupplyArea + */ + @JsonProperty("supplyArea") + private String supplyArea; + /** + * SortStrng + */ + @JsonProperty("sortString") + private String sortString; + /** + * Requirement Qty + */ + @JsonProperty("requirementQuantity") + private BigDecimal requirementQuantity; + /** + * BUn + */ + @JsonProperty("goodsUnit") + private String goodsUnit; + /** + * 工单状态 + * 0:未开始 + * 1:已生成任务 + * 2:已呼叫料箱 + * 3:正在拣选 + * 4:拣选完成 + */ + @JsonProperty("orderStatus") + private Integer orderStatus; + /** + * 缺少数量 + */ + @JsonProperty("lackQuantity") + private BigDecimal lackQuantity; + /** + * 实际拣选数量 + */ + @JsonProperty("pickedQuantity") + private BigDecimal pickedQuantity; + /** + * 操作人员 + */ + @JsonProperty("userName") + private String userName; + /** + * 完成时间 + */ + @JsonProperty("finishTime") + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") + private LocalDateTime finishTime; +} diff --git a/src/main/java/com/wms/entity/table/UploadRecord.java b/src/main/java/com/wms/entity/table/UploadRecord.java index 59d08d9..a55de51 100644 --- a/src/main/java/com/wms/entity/table/UploadRecord.java +++ b/src/main/java/com/wms/entity/table/UploadRecord.java @@ -67,7 +67,7 @@ public class UploadRecord { uploadRecord.setFileName(fileVo.getName()); uploadRecord.setUploadTime(LocalDateTime.now()); uploadRecord.setUploadUser(fileVo.getUserName()); - uploadRecord.setFileDescription("fileDescription"); + uploadRecord.setFileDescription(fileDescription); return uploadRecord; } } diff --git a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java index bcc67bd..668707f 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/ValidateServiceImplements.java @@ -280,7 +280,7 @@ public class ValidateServiceImplements implements IValidateService { @Override public String validateGetWorkVoRequest(WorkQuery workQuery) { if (workQuery == null || StringUtils.isEmpty(workQuery.getGoodsId())) { - return "请求参数补全,料号必须可少"; + return "请求参数不完整,料号必须可少"; } return ""; 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 0fccbd5..9b88fe6 100644 --- a/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java +++ b/src/main/java/com/wms/service/business/serviceImplements/WorkServiceImplements.java @@ -11,6 +11,8 @@ import com.wms.service.business.IWorkService; import com.wms.utils.StringUtils; import com.wms.utils.WmsUtils; import lombok.RequiredArgsConstructor; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -19,6 +21,7 @@ import java.time.LocalDateTime; import java.util.*; import static com.wms.config.InitLocalConfig.configMap; +import static com.wms.utils.StringUtils.convertJsonString; /** * 工作服务接口的实现 @@ -26,6 +29,7 @@ import static com.wms.config.InitLocalConfig.configMap; @Service @RequiredArgsConstructor(onConstructor = @__(@Autowired)) public class WorkServiceImplements implements IWorkService { + private final Logger logger = LoggerFactory.getLogger(this.getClass()); private final WorkStationConfigService workStationConfigService;// 工作站配置服务 private final WorkFlowService workFlowService;// 工作流服务 private final KateDBSService kateDBSService;// DBS服务 @@ -64,11 +68,11 @@ public class WorkServiceImplements implements IWorkService { } // 当前站台分配的工位 List currentStationWorkFlows = new ArrayList<>(); - // 先找NWL机型 - findWorks(workStation, currentStationWorkFlows, "NWL"); + // 先找MWL机型 + findWorks(workStation, currentStationWorkFlows, "MWL"); if (currentStationWorkFlows.isEmpty()) { - // 找非NWL机型 - findWorks(workStation, currentStationWorkFlows, "NOT_NWL"); + // 找非MWL机型 + findWorks(workStation, currentStationWorkFlows, "NOT_MWL"); } // 如果当前站台有任务 if (!currentStationWorkFlows.isEmpty()) { @@ -152,6 +156,7 @@ public class WorkServiceImplements implements IWorkService { eLocationConfigService.saveBatch(eLocationConfigList); } } catch (Exception e) { + logger.error("创建站台:{}工作发生异常:{}", workStation, convertJsonString(e)); throw new Exception("创建站台:" + workStation + "工作发生异常!"); } finally { // 当前站台创建任务完成 @@ -216,6 +221,7 @@ public class WorkServiceImplements implements IWorkService { .in(KateOrders::getOrderId, orderIds) .eq(KateOrders::getOrderStatus, 1)); } catch (Exception e) { + logger.error("执行站台:{}工作发生异常:{}", workStation, convertJsonString(e)); throw new Exception("执行站台:" + workStation + "工作发生异常!"); } finally { // 当前站台创建任务完成 @@ -305,6 +311,7 @@ public class WorkServiceImplements implements IWorkService { goodsToStationService.remove(new LambdaQueryWrapper() .eq(GoodsToStation::getWorkStation, workStation)); } catch (Exception e) { + logger.error("完成站台:{}工作发生异常:{}", workStation, convertJsonString(e)); throw new Exception("完成站台:" + workStation + "工作发生异常!"); } finally { // 当前站台工作完成 @@ -324,8 +331,8 @@ public class WorkServiceImplements implements IWorkService { // 查到当前站台所有的小工位 List currentStationConfigsOfNwl = workStationConfigService.list(new LambdaQueryWrapper() .eq(WorkStationConfig::getWorkStation, workStation) - .eq(Objects.equals(model, "NWL"), WorkStationConfig::getModel, model) - .ne(!Objects.equals(model, "NWL"), WorkStationConfig::getModel, "NWL")); + .eq(Objects.equals(model, "MWL"), WorkStationConfig::getModel, model) + .ne(!Objects.equals(model, "MWL"), WorkStationConfig::getModel, "MWL")); // 当前站台未分配库位 if (currentStationConfigsOfNwl == null || currentStationConfigsOfNwl.isEmpty()) { return; @@ -344,7 +351,7 @@ public class WorkServiceImplements implements IWorkService { List kateWorkOrders = kateOrdersService.list(new LambdaQueryWrapper() .eq(KateOrders::getSupplyArea, workConfig.getSmallBox()) .eq(KateOrders::getOrderStatus, 0) - .eq(KateOrders::getSLoc, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); + .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); // 当前工位没有未完成的工单 if (kateWorkOrders == null || kateWorkOrders.isEmpty()) { continue; @@ -386,7 +393,7 @@ public class WorkServiceImplements implements IWorkService { .eq(KateOrders::getWorkOrder, currentWorkCenterAndOrderDto.getWorkOrder()) .eq(KateOrders::getSupplyArea, currentWorkCenterAndOrderDto.getWorkCenter()) .eq(KateOrders::getOrderStatus, 0) - .eq(KateOrders::getSLoc, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); + .eq(KateOrders::getSortString, configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()))); for (KateOrders tempOrder : kateWorkOrderList) { // 生成workFlow WorkFlow tempWorkFlow = new WorkFlow(); diff --git a/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java b/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java index 0cd3415..cdb1dec 100644 --- a/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java +++ b/src/main/java/com/wms/utils/excel/listener/UploadKateOrdersListener.java @@ -5,13 +5,10 @@ import com.alibaba.excel.read.listener.ReadListener; import com.alibaba.excel.util.ListUtils; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.wms.constants.enums.ConfigMapKeyEnum; -import com.wms.entity.app.dto.extend.StockDetailInfo; import com.wms.entity.table.*; import com.wms.service.*; import com.wms.utils.StringUtils; -import com.wms.utils.excel.vo.KateDbsExcelVo; import com.wms.utils.excel.vo.KateOrdersExcelVo; -import com.wms.utils.excel.vo.StockExcelVo; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -62,11 +59,11 @@ public class UploadKateOrdersListener implements ReadListener @Override public void invoke(KateOrdersExcelVo kateOrdersExcelVo, AnalysisContext analysisContext) { String slocFilterString = configMap.get(ConfigMapKeyEnum.SLOC_FILTER_STRING.getConfigKey()); - if (StringUtils.isNotEmpty(slocFilterString) && Objects.equals(kateOrdersExcelVo.getSLoc(), slocFilterString)) { + if (StringUtils.isNotEmpty(slocFilterString) && Objects.equals(kateOrdersExcelVo.getSortString(), slocFilterString)) { // 符合筛选字符串 if (StringUtils.isNotEmpty(kateOrdersExcelVo.getWorkOrder()) && StringUtils.isNotEmpty(kateOrdersExcelVo.getGoodsId()) - && StringUtils.isNotEmpty(kateOrdersExcelVo.getSLoc()) + && StringUtils.isNotEmpty(kateOrdersExcelVo.getSortString()) && StringUtils.isNotEmpty(kateOrdersExcelVo.getSupplyArea()) && kateOrdersExcelVo.getRequirementQuantity() != null) { // 符合条件 @@ -99,17 +96,44 @@ public class UploadKateOrdersListener implements ReadListener private void saveData() { List kateOrdersList = new ArrayList<>(); for (KateOrdersExcelVo kateOrdersExcelVo : cachedDataList) { - if (kateOrdersService.exists(new LambdaQueryWrapper() + // 查看当前List中是否有该工单 + List currentOrdersList = kateOrdersList.stream().filter(kateOrders -> + Objects.equals(kateOrders.getWorkOrder(), kateOrdersExcelVo.getWorkOrder()) + && Objects.equals(kateOrders.getGoodsId(), kateOrdersExcelVo.getGoodsId()) + && Objects.equals(kateOrders.getSupplyArea(), kateOrdersExcelVo.getSupplyArea()) + ).toList(); + if (!currentOrdersList.isEmpty()) { + KateOrders currentOrder = currentOrdersList.get(0); + // 设定数量 + currentOrder.setRequirementQuantity(currentOrder.getRequirementQuantity().add(kateOrdersExcelVo.getRequirementQuantity())); + currentOrder.setLackQuantity(currentOrder.getLackQuantity().add(kateOrdersExcelVo.getRequirementQuantity())); + // 先移除 + kateOrdersList.removeIf(kateOrders -> + Objects.equals(kateOrders.getWorkOrder(), kateOrdersExcelVo.getWorkOrder()) + && Objects.equals(kateOrders.getGoodsId(), kateOrdersExcelVo.getGoodsId()) + && Objects.equals(kateOrders.getSupplyArea(), kateOrdersExcelVo.getSupplyArea())); + // 再添加 + kateOrdersList.add(currentOrder); + continue; + } + // 查询数据库是否存在重复数据 + KateOrders existsKateOrders = kateOrdersService.getOne(new LambdaQueryWrapper() .eq(KateOrders::getWorkOrder, kateOrdersExcelVo.getWorkOrder()) .eq(KateOrders::getGoodsId, kateOrdersExcelVo.getGoodsId()) - .eq(KateOrders::getSupplyArea, kateOrdersExcelVo.getSupplyArea()))) { + .eq(KateOrders::getSupplyArea, kateOrdersExcelVo.getSupplyArea()) + .last("limit 1")); + if (existsKateOrders != null) { // 数据重复 + existsKateOrders.setRequirementQuantity(existsKateOrders.getRequirementQuantity().add(kateOrdersExcelVo.getRequirementQuantity())); + existsKateOrders.setLackQuantity(existsKateOrders.getLackQuantity().add(kateOrdersExcelVo.getRequirementQuantity())); + kateOrdersList.add(existsKateOrders); continue; } KateOrdersLast kateOrdersLast = kateOrdersLastService.getOne(new LambdaQueryWrapper() .eq(KateOrdersLast::getWorkOrder, kateOrdersExcelVo.getWorkOrder()) .eq(KateOrdersLast::getGoodsId, kateOrdersExcelVo.getGoodsId()) - .eq(KateOrdersLast::getSupplyArea, kateOrdersExcelVo.getSupplyArea())); + .eq(KateOrdersLast::getSupplyArea, kateOrdersExcelVo.getSupplyArea()) + .last("limit 1")); if (kateOrdersLast != null) { // 之前存在过 KateOrders oldKateOrders = new KateOrders();