From 9fc1cc53e9a0ec0e448eeed8025cb37802203059 Mon Sep 17 00:00:00 2001 From: zgw <13623675548@163.com> Date: Mon, 22 Dec 2025 16:44:13 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96=E9=A1=B5=E9=9D=A2=EF=BC=8C?= =?UTF-8?q?=E4=BF=AE=E6=AD=A3=E5=85=A5=E5=BA=93=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../api/service/impl/ToWcsServiceImpl.java | 2 +- .../api/service/impl/ToWmsServiceImpl.java | 99 ++--- .../mapper/BasCargoSpaceMapper.java | 3 +- .../service/impl/MydoJobServiceImpl.java | 6 - .../bas/cargoSpace/BasCargoSpaceMapper.xml | 222 +++++------ ruoyi-ui/src/views/in/job/index.vue | 268 +++++-------- ruoyi-ui/src/views/job/outJobManagement.vue | 271 ++++++------- ruoyi-ui/src/views/out/addOutStockout.vue | 19 + ruoyi-ui/src/views/out/outStockoutManage.vue | 373 ++++++++++++++---- ruoyi-ui/src/views/pda/trayMsg/index.vue | 10 +- 10 files changed, 697 insertions(+), 576 deletions(-) diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java index e8d36c0..4ffc9fd 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWcsServiceImpl.java @@ -40,7 +40,7 @@ public class ToWcsServiceImpl implements IToWcsService { @Override - //@Scheduled(fixedDelay=1500) + @Scheduled(fixedDelay=1500) public void pushOutMydoJob() { //查询所有未推送的料箱出库作业 MydoJob mydoJobParam = new MydoJob(); diff --git a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java index 2b26248..331458d 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/api/service/impl/ToWmsServiceImpl.java @@ -110,17 +110,21 @@ public class ToWmsServiceImpl implements IToWmsService { MydoJob mydoJob1 = mydoJobService.selectMydoJobByTrayCode(requestEnter.getTrayCode()); if (ObjUtil.isNotNull(mydoJob1) && !"1".equals(mydoJob1.getInOrOut())) { //空托盘处理 - String productId = "KTP0001"; - String cargoSpaceId = getCargoSpaceByProductInfo(productId); - if (!StringUtils.isNotBlank(cargoSpaceId)) { - return AjaxResult.error("无符合条件的货位用于分配,请检查库存区占用情况,物料号:" + productId); + if (mydoJob1.getCargoSpaceId()==null){ + String productId = "KTP0001"; + String cargoSpaceId = getCargoSpaceByProductInfo(productId); + if (!StringUtils.isNotBlank(cargoSpaceId)) { + return AjaxResult.error("无符合条件的货位用于分配,请检查库存区占用情况,物料号:" + productId); + } + mydoJob1.setCargoSpaceId(cargoSpaceId); + BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); + mydoJob1.setRoadwayId(basCargoSpace.getTheFloor().toString()); + mydoJob1.setStatus("3"); + mydoJobService.updateMydoJob(mydoJob1); + return AjaxResult.success(mydoJob1); + }else { + return AjaxResult.success(mydoJob1); } - mydoJob1.setCargoSpaceId(cargoSpaceId); - BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(cargoSpaceId); - mydoJob1.setRoadwayId(basCargoSpace.getTheFloor().toString()); - mydoJob1.setStatus("3"); - mydoJobService.insertMydoJob(mydoJob1); - return AjaxResult.success(mydoJob1); } //校验 - 条码已经有作业 if (ObjUtil.isNotNull(mydoJob1) && "1".equals(mydoJob1.getInOrOut())) { @@ -169,6 +173,7 @@ public class ToWmsServiceImpl implements IToWmsService { mydoJobDetail.setInOrOutDId(stockinDetailId); mydoJobDetail.setInOrOutId(inStockinDetail.getStockinId()); mydoJobDetailService.insertMydoJobDetail(mydoJobDetail); + trayMsgService.deleteTrayMsgById(trayMsg.getId()); return AjaxResult.success(mydoJob); } @@ -188,52 +193,52 @@ public class ToWmsServiceImpl implements IToWmsService { List stocks = basStockService.selectBasStockListByProductId(productId); //如果集合空 - 寻找未被占用的存储区组放货 - if (stocks.size() == 0) { - for (int i = 1; i <= 45; i++) { - BasCargoSpace cargospace = new BasCargoSpace(); + if (!stocks.isEmpty()) { + //如果物料已经存放在多个货位(区域) - 去重 + List stocksNew = stocks.stream().distinct().collect(Collectors.toList()); - //存储区 - String groupCodingNo = String.format("%03d", i); - cargospace.setGroupCodingNo(groupCodingNo); + //查询对应货位的区域在【BasCargoSpace】是否有空位 - 在groupCodingNo的分组中是否仍然有状态【1】的货位 + for (BasStock stock : stocksNew) { + //获取每种物料的存放货位信息 + BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId()); - //获取【groupCodingNo】所有货位 - List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceList(cargospace); + //获取每种物料的存放货位信息 - 存储区 + String group = cargoSpace.getGroupCodingNo(); - //判断是否全部未占用,即某存储区全部为空位 - 避免物料混放 - boolean isAllEmpty = cargoSpaces.stream().allMatch(c -> "1".equals(c.getStatus())); + //获取该存储区组的所有货位 + List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceListByGroupCodingNo(group); - //区域未占用 - 则分配最内侧货位 - if (isAllEmpty && cargoSpaces.size() > 0) { - cargoSpaces.sort(Comparator.comparing(BasCargoSpace::getGroupCoding).reversed()); - return cargoSpaces.get(0).getCargoSpaceId(); + //在集合中获取状态为【1】的货位 + for (BasCargoSpace cs : cargoSpaces) { + //货位状态:1(未占用) -> 返回该货位结果 + if ("1".equals(cs.getStatus())) { + return cs.getCargoSpaceId(); + } } - } + } + } + for (int i = 1; i <= 45; i++) { + BasCargoSpace cargospace = new BasCargoSpace(); + + //存储区 + String groupCodingNo = String.format("%03d", i); + cargospace.setGroupCodingNo(groupCodingNo); + + //获取【groupCodingNo】所有货位 + List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceList(cargospace); + + //判断是否全部未占用,即某存储区全部为空位 - 避免物料混放 + boolean isAllEmpty = cargoSpaces.stream().allMatch(c -> "1".equals(c.getStatus())); + + //区域未占用 - 则分配最内侧货位 + if (isAllEmpty && cargoSpaces.size() > 0) { + cargoSpaces.sort(Comparator.comparing(BasCargoSpace::getGroupCoding).reversed()); + return cargoSpaces.get(0).getCargoSpaceId(); + } } - //如果物料已经存放在多个货位(区域) - 去重 - List stocksNew = stocks.stream().distinct().collect(Collectors.toList()); - //查询对应货位的区域在【BasCargoSpace】是否有空位 - 在groupCodingNo的分组中是否仍然有状态【1】的货位 - for (BasStock stock : stocksNew) { - //获取每种物料的存放货位信息 - BasCargoSpace cargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(stock.getCargoSpaceId()); - - //获取每种物料的存放货位信息 - 存储区 - String group = cargoSpace.getGroupCodingNo(); - - //获取该存储区组的所有货位 - List cargoSpaces = basCargoSpaceService.selectBasCargoSpaceListByGroupCodingNo(group); - - //在集合中获取状态为【1】的货位 - for (BasCargoSpace cs : cargoSpaces) { - //货位状态:1(未占用) -> 返回该货位结果 - if ("1".equals(cs.getStatus())) { - return cs.getCargoSpaceId(); - } - } - - } } catch (Exception e) { log.error("入库子单获取目标货位失败,异常信息:" + e.getMessage()); } diff --git a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java index 828c341..19831be 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/bas/cargoSpace/mapper/BasCargoSpaceMapper.java @@ -2,6 +2,7 @@ package com.ruoyi.bas.cargoSpace.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.ruoyi.bas.cargoSpace.domain.BasCargoSpace; +import org.apache.ibatis.annotations.Param; import java.util.List; import java.util.Map; @@ -36,7 +37,7 @@ public interface BasCargoSpaceMapper extends BaseMapper * @param groupCodingNo 存储区组 * @return 库存信息集合 */ - public List selectBasCargoSpaceListByGroupCodingNo(String groupCodingNo); + public List selectBasCargoSpaceListByGroupCodingNo(@Param("groupCodingNo") String groupCodingNo); /** * 新增库存信息 diff --git a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java index 18b4af9..3b91ce1 100644 --- a/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java +++ b/ruoyi-admin/src/main/java/com/ruoyi/job/mydojob/service/impl/MydoJobServiceImpl.java @@ -278,8 +278,6 @@ public class MydoJobServiceImpl implements IMydoJobService { BasCargoSpace basCargoSpace = basCargoSpaceService.selectBasCargoSpaceByCargoSpaceId(mydoJob.getCargoSpaceId()); if (CollUtil.isNotEmpty(mydoJobDetails)) { List list = new ArrayList<>(); - - //查询盘点信息中的异常信息 CheckDifferenceRecord checkDifferenceRecordParam = new CheckDifferenceRecord(); checkDifferenceRecordParam.setTrayCode(mydoJob.getTrayCode()); @@ -307,18 +305,14 @@ public class MydoJobServiceImpl implements IMydoJobService { //正常库存 list.add(stockByInStockinDetail); } - } - //修改货位状态 basCargoSpace.setStatus("2"); basCargoSpace.setTrayCode(mydoJob.getTrayCode()); basCargoSpace.setCargoSpaceId(mydoJob.getCargoSpaceId()); basCargoSpaceService.updateBasCargoSpace(basCargoSpace); - //插入库存信息 basStockService.insertBasStockList(list); - //结束任务 mydoJob.setStatus("4"); mydoJob.setFinishTime(DateUtil.formatDateTime(DateUtil.date())); diff --git a/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml b/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml index 33ba8d5..85e1340 100644 --- a/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml +++ b/ruoyi-admin/src/main/resources/mapper/bas/cargoSpace/BasCargoSpaceMapper.xml @@ -1,54 +1,53 @@ + PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" + "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + - select - bcs.cargo_space_id, - bcs.warehouse_id, - bcs.roadway_id, - bcs.cargo_area_id, - bcs.the_type, - bcs.the_type_name, - bcs.cargo_space_name, - bcs.the_platoon, - bcs.the_column, - bcs.the_floor, - bcs.status, - bcs.locked, - bcs.tray_code, - bcs.cargo_hight, - bcs.iss_double, - bcs.group_coding_no, - bcs.group_coding, - bcs.cargo_space_logo, - bcs.this_cargo_area, - bw.warehouse_name + select bcs.cargo_space_id, + bcs.warehouse_id, + bcs.roadway_id, + bcs.cargo_area_id, + bcs.the_type, + bcs.the_type_name, + bcs.cargo_space_name, + bcs.the_platoon, + bcs.the_column, + bcs.the_floor, + bcs.status, + bcs.locked, + bcs.tray_code, + bcs.cargo_hight, + bcs.iss_double, + bcs.group_coding_no, + bcs.group_coding, + bcs.cargo_space_logo, + bcs.this_cargo_area, + bw.warehouse_name from bas_cargo_space bcs left join bas_warehouse bw on bcs.warehouse_id = bw.warehouse_id @@ -57,58 +56,44 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -140,7 +125,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" group_coding, cargo_space_logo, this_cargo_area, - + #{cargoSpaceId}, #{warehouseId}, @@ -161,7 +146,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" #{groupCoding}, #{cargoSpaceLogo}, #{thisCargoArea}, - + @@ -191,14 +176,14 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" update bas_cargo_space set locked = #{locked} - where group_coding_no in ( - select group_coding_no from bas_cargo_space where cargo_space_id = #{cargoSpaceId} - ) - and group_coding > #{groupCoding} + where group_coding_no in (select group_coding_no from bas_cargo_space where cargo_space_id = #{cargoSpaceId}) + and group_coding > #{groupCoding} - delete from bas_cargo_space where cargo_space_id = #{cargoSpaceId} + delete + from bas_cargo_space + where cargo_space_id = #{cargoSpaceId} @@ -209,9 +194,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" @@ -219,7 +203,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" SELECT TOP 1 cargo_space_id as cargoSpaceId FROM bas_cargo_space WHERE status = '1' - and locked = 'N' + and locked = 'N' and warehouse_id = #{warehouseId} @@ -255,24 +239,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" left join bas_stock bs on bs.cargo_space_id = bcs.cargo_space_id left join bas_product bp on bp.product_id = bs.product_id where br.out_locked = 'N' - and bcs.warehouse_id = #{warehouseId} - and bcs.roadway_id = #{roadwayId} - and bcs.cargo_area_id = #{cargoAreaId} - and bcs.the_type = #{theType} - and bcs.the_type_name like concat('%', #{theTypeName}, '%') - and bcs.cargo_space_name like concat('%', #{cargoSpaceName}, '%') - and bcs.the_platoon = #{thePlatoon} - and bcs.the_column = #{theColumn} - and bcs.the_floor = #{theFloor} - and bcs.status = #{status} - and bcs.locked = #{locked} - and bcs.tray_code like concat('%', #{trayCode}, '%') - and bcs.cargo_hight = #{cargoHight} - and bcs.iss_double = #{issDouble} - and bcs.group_coding_no = #{groupCodingNo} - and bcs.group_coding = #{groupCoding} - and bcs.cargo_space_logo = #{cargoSpaceLogo} - and bs.spare7 = #{spare7} - and bs.stock_status = #{stockStatus} + and bcs.warehouse_id = #{warehouseId} + and bcs.roadway_id = #{roadwayId} + and bcs.cargo_area_id = #{cargoAreaId} + and bcs.the_type = #{theType} + and bcs.the_type_name like concat('%', #{theTypeName}, + '%') + + and bcs.cargo_space_name like concat('%', + #{cargoSpaceName}, '%') + + and bcs.the_platoon = #{thePlatoon} + and bcs.the_column = #{theColumn} + and bcs.the_floor = #{theFloor} + and bcs.status = #{status} + and bcs.locked = #{locked} + and bcs.tray_code like concat('%', #{trayCode}, '%') + and bcs.cargo_hight = #{cargoHight} + and bcs.iss_double = #{issDouble} + and bcs.group_coding_no = #{groupCodingNo} + and bcs.group_coding = #{groupCoding} + and bcs.cargo_space_logo = #{cargoSpaceLogo} + and bs.spare7 = #{spare7} + and bs.stock_status = #{stockStatus} diff --git a/ruoyi-ui/src/views/in/job/index.vue b/ruoyi-ui/src/views/in/job/index.vue index 172f502..1ef4284 100644 --- a/ruoyi-ui/src/views/in/job/index.vue +++ b/ruoyi-ui/src/views/in/job/index.vue @@ -1,7 +1,7 @@ diff --git a/ruoyi-ui/src/views/out/addOutStockout.vue b/ruoyi-ui/src/views/out/addOutStockout.vue index 45a885a..c2bb8b8 100644 --- a/ruoyi-ui/src/views/out/addOutStockout.vue +++ b/ruoyi-ui/src/views/out/addOutStockout.vue @@ -329,9 +329,24 @@ export default { }; }, created() { + // 页面初始化时生成符合规范的主单号(RKyyyyMMddHHmmssSS) + this.formData.stockoutId = this.generateRKId() this.getWarehouseOptions(); }, methods: { + // 生成 RK 单号(两位毫秒,统一入出库格式) + generateRKId() { + const d = new Date() + const pad2 = (n) => String(n).padStart(2, '0') + const yyyy = d.getFullYear() + const MM = pad2(d.getMonth() + 1) + const dd = pad2(d.getDate()) + const HH = pad2(d.getHours()) + const mm = pad2(d.getMinutes()) + const ss = pad2(d.getSeconds()) + const cs = pad2(Math.floor(d.getMilliseconds() / 10)) + return `RK${yyyy}${MM}${dd}${HH}${mm}${ss}${cs}` + }, /** 获取仓库选项 */ getWarehouseOptions() { @@ -564,6 +579,10 @@ export default { this.$modal.msgError('请选择物资'); return; } + // 若用户重新建单或清空过主单号,保存前保证再次生成 + if (!this.formData.stockoutId) { + this.formData.stockoutId = this.generateRKId() + } const data = { outStockout: this.formData, detailList: this.materialList diff --git a/ruoyi-ui/src/views/out/outStockoutManage.vue b/ruoyi-ui/src/views/out/outStockoutManage.vue index 4ad2201..c63b1ef 100644 --- a/ruoyi-ui/src/views/out/outStockoutManage.vue +++ b/ruoyi-ui/src/views/out/outStockoutManage.vue @@ -10,18 +10,9 @@ @keyup.enter.native="handleQuery" /> - - - - - + - + - - + + + @@ -60,6 +61,16 @@ + + 单据新增 + {{'单据作废'}} - - {{'自动分配'}} - - - {{'手动分配'}} - - + - - - + + + - + @@ -133,11 +124,22 @@ - + + - - - + + + + + + - - - - - - - - - - + + + +
主单信息
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ +
+ 子单信息 +
+ 删除物资 + 选择物资 +
+
+ + + + + + + + + +
+
+ +
+ + + + + + + + 搜索 + 重置 + + + + + + + + + + + -
- - - - - - - @@ -313,7 +410,7 @@