src/main/java/com/zy/asrs/controller/WorkController.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/entity/param/StockOutFloorParam.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/LocDetlService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/WorkService.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/pakStore/locCheckOut.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/static/js/pakStore/stockOut.js | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/pakStore/locCheckOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 | |
src/main/webapp/views/pakStore/stockOut.html | ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史 |
src/main/java/com/zy/asrs/controller/WorkController.java
@@ -4,10 +4,7 @@ import com.core.common.Cools; import com.core.common.R; import com.zy.asrs.entity.WaitPakin; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.entity.param.FullStoreParam; import com.zy.asrs.entity.param.LocDetlAdjustParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.BasDevpService; import com.zy.asrs.service.WorkService; import com.zy.common.model.StartupDto; @@ -18,10 +15,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.*; /** * 工作流接口控制器 @@ -86,9 +80,70 @@ return R.ok("入库启动成功").add(workService.startupFullPutStore(fullStoreParam,getUserId())); } // @RequestMapping("/plate/out/start") // @ManagerAuth(memo = "出库作业") // public R fullStoreTakeStart(@RequestBody StockOutParam param) { // workService.startupFullTakeStore(param, getUserId()); // return R.ok("出库启动成功"); // } @RequestMapping("/plate/out/start") @ManagerAuth(memo = "出库作业") public R fullStoreTakeStart(@RequestBody StockOutParam param) { public R fullStoreTakeStart(@RequestBody StockOutFloorParam param) { if (param.getFloor() != null) { List<Integer> siteIdList = new ArrayList<>(); // 第一步:根据楼层选择站点集合 switch (param.getFloor()) { case 1: // 一楼(东区) siteIdList = Arrays.asList(121, 124, 125, 126); break; case 2: // 二楼(东区) siteIdList = Arrays.asList(221, 224, 226, 229); break; case 3: // 四楼(东区) siteIdList = Arrays.asList(411, 412, 413, 414); break; case 4: // 一楼(西区) siteIdList = Arrays.asList(103); // 只有一个站点 break; case 5: // 二楼(西区) siteIdList = Arrays.asList(201, 204, 206, 209); break; case 6: // 四楼(西区) siteIdList = Arrays.asList(401, 402, 403, 404); break; default: break; } // 第二步:根据 locNo 的排号,给每个 locDetl 设置 siteId if (param.getLocDetls() != null) { for (StockOutFloorParam.LocDetl locDetl : param.getLocDetls()) { String locNo = locDetl.getLocNo(); // 如:0312001 if (locNo != null && locNo.length() >= 2) { String rowStr = locNo.substring(0, 2); // 前两位为排号 int row = Integer.parseInt(rowStr); Integer siteId = null; // 站点分布规则 if (row == 1 || row == 2) { siteId = siteIdList.size() > 0 ? siteIdList.get(0) : null; } else if (row == 3 || row == 4) { siteId = siteIdList.size() > 1 ? siteIdList.get(1) : null; } else if (row == 5 || row == 6) { siteId = siteIdList.size() > 2 ? siteIdList.get(2) : null; } else if (row == 7 || row == 8) { siteId = siteIdList.size() > 3 ? siteIdList.get(3) : null; } // 设置 siteId locDetl.setSiteId(siteId); } } } } workService.startupFullTakeStore(param, getUserId()); return R.ok("出库启动成功"); } @@ -106,9 +161,71 @@ return R.ok("出库启动成功"); } // @RequestMapping("/locCheck/out/start") // @ManagerAuth(memo = "盘点出库") // public R locCheckOutStart(@RequestBody StockOutParam param) { // // workService.locCheckOut(param, getUserId()); // return R.ok("出库启动成功"); // } @RequestMapping("/locCheck/out/start") @ManagerAuth(memo = "盘点出库") public R locCheckOutStart(@RequestBody StockOutParam param) { public R locCheckOutStart(@RequestBody StockOutFloorParam param) { if (param.getFloor() != null) { List<Integer> siteIdList = new ArrayList<>(); // 第一步:根据楼层选择站点集合 switch (param.getFloor()) { case 1: // 一楼(东区) siteIdList = Arrays.asList(121, 124, 125, 126); break; case 2: // 二楼(东区) siteIdList = Arrays.asList(221, 224, 226, 229); break; case 3: // 四楼(东区) siteIdList = Arrays.asList(411, 412, 413, 414); break; case 4: // 一楼(西区) siteIdList = Arrays.asList(103); // 只有一个站点 break; case 5: // 二楼(西区) siteIdList = Arrays.asList(201, 204, 206, 209); break; case 6: // 四楼(西区) siteIdList = Arrays.asList(401, 402, 403, 404); break; default: break; } // 第二步:根据 locNo 的排号,给每个 locDetl 设置 siteId if (param.getLocDetls() != null) { for (StockOutFloorParam.LocDetl locDetl : param.getLocDetls()) { String locNo = locDetl.getLocNo(); // 如:0312001 if (locNo != null && locNo.length() >= 2) { String rowStr = locNo.substring(0, 2); // 前两位为排号 int row = Integer.parseInt(rowStr); Integer siteId = null; // 站点分布规则 if (row == 1 || row == 2) { siteId = siteIdList.size() > 0 ? siteIdList.get(0) : null; } else if (row == 3 || row == 4) { siteId = siteIdList.size() > 1 ? siteIdList.get(1) : null; } else if (row == 5 || row == 6) { siteId = siteIdList.size() > 2 ? siteIdList.get(2) : null; } else if (row == 7 || row == 8) { siteId = siteIdList.size() > 3 ? siteIdList.get(3) : null; } // 设置 siteId locDetl.setSiteId(siteId); } } } } workService.locCheckOut(param, getUserId()); return R.ok("出库启动成功"); } src/main/java/com/zy/asrs/entity/param/StockOutFloorParam.java
New file @@ -0,0 +1,44 @@ package com.zy.asrs.entity.param; import lombok.Data; import java.util.List; @Data public class StockOutFloorParam { // 出站口 private Integer floor; // 物料编号集合 private List<LocDetl> locDetls; @Data public static class LocDetl { private Integer siteId; // 库位号 private String locNo; // 商品编号 private String matnr; // 序列码 private String batch; // 数量 private Double count; private String sPgNO; private String outOrderNo; private String luHao; private Double weight; private String packing; private String proType; private String color; } } src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -6,6 +6,7 @@ import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.StockStatisDTO; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.param.StockOutFloorParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.result.StockVo; @@ -23,7 +24,7 @@ LocDetl selectItem(String locNo, WrkDetl wrkDetl); LocDetl selectItem(String locNo, StockOutParam.LocDetl locDetl); LocDetl selectItem(String locNo, StockOutFloorParam.LocDetl locDetl); Page<LocDetl> getStockOut(Page<LocDetl> page); /** src/main/java/com/zy/asrs/service/WorkService.java
@@ -3,10 +3,7 @@ import com.zy.asrs.entity.BasDevp; import com.zy.asrs.entity.WaitPakin; import com.zy.asrs.entity.WrkMast; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.entity.param.FullStoreParam; import com.zy.asrs.entity.param.LocDetlAdjustParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.param.*; import com.zy.common.model.LocDetlDto; import com.zy.common.model.StartupDto; import com.zy.common.model.TaskDto; @@ -22,10 +19,16 @@ */ String startupFullPutStore(FullStoreParam param, Long userId); // /** // * 出库作业 // */ // void startupFullTakeStore(StockOutParam param, Long userId); /** * 出库作业 */ void startupFullTakeStore(StockOutParam param, Long userId); void startupFullTakeStore(StockOutFloorParam param, Long userId); /** * 出库作业 @@ -61,10 +64,15 @@ */ public WrkMast emptyPlateOut(EmptyPlateOutParam param); // /** // * 盘点出库 // */ // void locCheckOut(StockOutParam param, Long userId); /** * 盘点出库 */ void locCheckOut(StockOutParam param, Long userId); void locCheckOut(StockOutFloorParam param, Long userId); /** * 库位移转 src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -6,6 +6,7 @@ import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.entity.StockStatisDTO; import com.zy.asrs.entity.WrkDetl; import com.zy.asrs.entity.param.StockOutFloorParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.result.StockVo; import com.zy.asrs.mapper.LocDetlMapper; @@ -235,5 +236,17 @@ } return null; } @Override public LocDetl selectItem(String locNo, StockOutFloorParam.LocDetl locDetl) { List<LocDetl> locDetls = this.baseMapper.selectItem3(locNo, locDetl.getMatnr()); if (locDetls != null) { for (LocDetl detl : locDetls) { if (MatCompareUtils.compare(locDetl, detl)) { return detl; } } } return null; } } src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -7,10 +7,7 @@ import com.core.common.SnowflakeIdWorker; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.EmptyPlateOutParam; import com.zy.asrs.entity.param.FullStoreParam; import com.zy.asrs.entity.param.LocDetlAdjustParam; import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.entity.param.*; import com.zy.asrs.service.*; import com.zy.asrs.utils.Utils; import com.zy.common.model.*; @@ -155,31 +152,81 @@ return null; } // @Override // @Transactional // public void startupFullTakeStore(StockOutFloorParam param, Long userId) { // // 目标站点状态检测 // BasDevp staNo = null; // // 获取库位明细 // List<LocDetlDto> locDetlDtos = new ArrayList<>(); // for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { // staNo = basDevpService.checkSiteStatus(paramLocDetl.getSiteId()); // // if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { // LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); // if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); // } // } // if (!locDetlDtos.isEmpty()) { // LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); // if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { // // 启动出库开始 101.出库 // stockOut(staNo, locDetlDtos, null, userId); // } else { // throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); // } // } else { // throw new CoolException("库存不存在"); // } // } @Override @Transactional public void startupFullTakeStore(StockOutParam param, Long userId) { // 目标站点状态检测 BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); // 获取库位明细 List<LocDetlDto> locDetlDtos = new ArrayList<>(); for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { public void startupFullTakeStore(StockOutFloorParam param, Long userId) { // 按 siteId 分组 Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>(); for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); if (one != null) { LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount()); Integer siteId = paramLocDetl.getSiteId(); if (siteId != null) { siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto); } } } } if (!locDetlDtos.isEmpty()) { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { // 启动出库开始 101.出库 stockOut(staNo, locDetlDtos, null, userId); } else { throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); } } else { if (siteIdToLocDetlsMap.isEmpty()) { throw new CoolException("库存不存在"); } // 遍历分组后的每个 siteId,逐个出库 for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) { Integer siteId = entry.getKey(); List<LocDetlDto> locDetlDtos = entry.getValue(); // 校验库位状态 LocMast locMast = locMastService.selectOne( new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()) ); if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { // 校验目标站点 BasDevp staNo = basDevpService.checkSiteStatus(siteId); // 执行出库 stockOut(staNo, locDetlDtos, null, userId); } else { throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); } } } @Override @Transactional @@ -653,29 +700,77 @@ return wrkMast; } // @Override // @Transactional // public void locCheckOut(StockOutParam param, Long userId) { // // 目标站点状态检测 // BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); // // 获取库位明细 // List<LocDetlDto> locDetlDtos = new ArrayList<>(); // for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { // if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { // LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); // if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); // } // } // if (!locDetlDtos.isEmpty()) { // LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); // if (locMast.getLocSts().equals("F")) { // // 启动出库开始 107.盘点出库 // stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); // } else { // throw new CoolException("所选库位存在状态不为F的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); // } // } else { // throw new CoolException("库位物料不存在"); // } // } @Override @Transactional public void locCheckOut(StockOutParam param, Long userId) { // 目标站点状态检测 BasDevp staNo = basDevpService.checkSiteStatus(param.getOutSite()); // 获取库位明细 List<LocDetlDto> locDetlDtos = new ArrayList<>(); for (StockOutParam.LocDetl paramLocDetl : param.getLocDetls()) { public void locCheckOut(StockOutFloorParam param, Long userId) { // 按 siteId 分组 Map<Integer, List<LocDetlDto>> siteIdToLocDetlsMap = new HashMap<>(); for (StockOutFloorParam.LocDetl paramLocDetl : param.getLocDetls()) { if (!Cools.isEmpty(paramLocDetl.getLocNo(), paramLocDetl.getMatnr(), paramLocDetl.getCount())) { LocDetl one = locDetlService.selectItem(paramLocDetl.getLocNo(), paramLocDetl); if (null != one) locDetlDtos.add(new LocDetlDto(one, paramLocDetl.getCount())); if (one != null) { LocDetlDto dto = new LocDetlDto(one, paramLocDetl.getCount()); Integer siteId = paramLocDetl.getSiteId(); if (siteId != null) { siteIdToLocDetlsMap.computeIfAbsent(siteId, k -> new ArrayList<>()).add(dto); } } } } if (!locDetlDtos.isEmpty()) { LocMast locMast = locMastService.selectOne(new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo())); if (locMast.getLocSts().equals("F")) { // 启动出库开始 107.盘点出库 if (siteIdToLocDetlsMap.isEmpty()) { throw new CoolException("库存不存在"); } // 遍历分组后的每个 siteId,逐个出库 for (Map.Entry<Integer, List<LocDetlDto>> entry : siteIdToLocDetlsMap.entrySet()) { Integer siteId = entry.getKey(); List<LocDetlDto> locDetlDtos = entry.getValue(); // 校验库位状态 LocMast locMast = locMastService.selectOne( new EntityWrapper<LocMast>().eq("loc_no", locDetlDtos.get(0).getLocDetl().getLocNo()) ); if (locMast.getLocSts().equals("F") || locMast.getLocSts().equals("D")) { // 校验目标站点 BasDevp staNo = basDevpService.checkSiteStatus(siteId); // 执行出库 stockOut(staNo, locDetlDtos, IoWorkType.CHECK_OUT, userId); } else { throw new CoolException("所选库位存在状态不为F的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); throw new CoolException("所选库位存在状态不为F、D的库位,库位号:" + locMast.getLocNo() + " 、当前状态:" + locMast.getLocSts() + "-" + locMast.getLocSts$()); } } else { throw new CoolException("库位物料不存在"); } } src/main/webapp/static/js/pakStore/locCheckOut.js
@@ -48,7 +48,7 @@ return; } let param = { outSite: staNo, floor: staNo, locDetls: locDetlData } $.ajax({ src/main/webapp/static/js/pakStore/stockOut.js
@@ -79,7 +79,7 @@ return; } let param = { outSite: staNo, floor: staNo, locDetls: locDetlData } $.ajax({ src/main/webapp/views/pakStore/locCheckOut.html
@@ -99,7 +99,12 @@ <span id="staNoSpan">盘点站:</span> <select id="staNoSelect" lay-verify="required"> <option value="">请选择站点</option> </select> <!-- <option value="1">一楼(东区)</option>--> <!-- <option value="2">二楼(东区)</option>--> <option value="3">四楼(东区)</option> <!-- <option value="4">一楼(西区)</option>--> <!-- <option value="5">二楼(西区)</option>--> <option value="6">四楼(西区)</option> </select> <!-- 2.启动出库 --> <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">盘点出库</button> </div> @@ -114,11 +119,11 @@ <table class="layui-table" id="chooseData" lay-filter="chooseData"></table> </div> <script type="text/template" id="takeSiteSelectTemplate"> {{#each data}} <option value="{{this}}">{{this}}</option> {{/each}} </script> <!--<script type="text/template" id="takeSiteSelectTemplate">--> <!-- {{#each data}}--> <!-- <option value="{{this}}">{{this}}</option>--> <!-- {{/each}}--> <!--</script>--> <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> <script type="text/javascript" src="../../static/layui/layui.js" charset="utf-8"></script> src/main/webapp/views/pakStore/stockOut.html
@@ -99,7 +99,14 @@ <span id="staNoSpan">出库口:</span> <select id="staNoSelect" lay-verify="required"> <option value="">请选择站点</option> <option value="1">一楼(东区)</option> <option value="2">二楼(东区)</option> <!-- <option value="3">四楼(东区)</option>--> <option value="4">一楼(西区)</option> <option value="5">二楼(西区)</option> <!-- <option value="6">四楼(西区)</option>--> </select> <!-- 2.启动出库 --> <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">启动出库</button> </div> @@ -121,11 +128,11 @@ <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> <script type="text/javascript" src="../../static/js/pakStore/stockOut.js" charset="utf-8"></script> <script type="text/template" id="takeSiteSelectTemplate"> {{#each data}} <option value="{{siteId}}">{{desc}}</option> {{/each}} </script> <!--<script type="text/template" id="takeSiteSelectTemplate">--> <!-- {{#each data}}--> <!-- <option value="{{siteId}}">{{desc}}</option>--> <!-- {{/each}}--> <!--</script>--> </body> </html>