From 83b2c23efd1c1ba3d995193b3240f3d868f4d592 Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期二, 22 八月 2023 16:28:34 +0800 Subject: [PATCH] AGV出入库作业 库存汇总页面 库存规则 分析页加上AGV数据 AGV库存明细统计 AGV库位地图 --- src/main/webapp/static/js/agvPakStore/stockOut.js | 177 + src/main/webapp/views/allLocDetl/locDetl_detail.html | 168 + src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java | 48 src/main/java/com/zy/asrs/controller/AgvLocDetlController.java | 82 src/main/webapp/views/home/console.html | 8 src/main/webapp/views/agvPakStore/emptyIn.html | 76 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java | 34 src/main/java/com/zy/asrs/controller/AgvBasDevpController.java | 16 src/main/java/com/zy/asrs/controller/AgvIoWorkController.java | 173 + src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | 50 src/main/java/com/zy/asrs/utils/Utils.java | 10 src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 159 + src/main/java/com/zy/asrs/service/AllLocDetlService.java | 8 src/main/webapp/static/js/common.js | 1 src/main/java/com/zy/asrs/controller/AgvMapController.java | 258 ++ src/main/java/com/zy/asrs/service/impl/AgvBasMapServiceImpl.java | 23 src/main/webapp/static/js/agvPakStore/locCheckOut.js | 161 + src/main/webapp/views/agvPakStore/pakStore.html | 133 + src/main/webapp/static/js/agvPakStore/emptyIn.js | 62 src/main/java/com/zy/asrs/service/AgvBasMapService.java | 13 src/main/webapp/views/home/agvMap.html | 1069 +++++++++ src/main/resources/mapper/ViewStayTimeMapper.xml | 67 src/main/java/com/zy/asrs/controller/AgvOpenController.java | 18 src/main/java/com/zy/asrs/service/impl/AllLocDetlServiceImpl.java | 11 src/main/webapp/views/agvPakStore/emptyOut.html | 150 + src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html | 6 src/main/java/com/zy/common/service/AgvCommonService.java | 8 src/main/webapp/views/agvPakStore/locMove.html | 130 + src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js | 256 ++ src/main/webapp/views/agvBasDevpVisualized/basDevp.html | 13 src/main/webapp/views/agvPakStore/locDetlQuery.html | 189 + src/main/java/com/zy/asrs/mapper/AgvBasMapMapper.java | 20 src/main/java/com/zy/asrs/service/AgvBasDevpService.java | 3 src/main/java/com/zy/asrs/mapper/AllLocDetlMapper.java | 12 src/main/webapp/static/js/agvPakStore/stockAdjust.js | 241 ++ src/main/java/com/zy/common/model/AgvBasDevpDto.java | 4 src/main/java/com/zy/asrs/controller/AllLocDetlController.java | 84 src/main/java/com/zy/asrs/entity/AgvBasMap.java | 100 src/main/webapp/views/agvPakStore/stockAdjust.html | 133 + src/main/webapp/views/agvPakStore/locCheckOut.html | 132 + src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java | 6 src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java | 35 src/main/java/com/zy/asrs/service/AgvLocDetlService.java | 11 src/main/webapp/static/js/allLocDetl/locDetl.js | 601 +++++ src/main/webapp/static/js/agvPakStore/emptyOut.js | 204 + src/main/webapp/views/allLocDetl/locDetl.html | 81 src/main/java/com/zy/asrs/entity/param/StockOutParam.java | 3 src/main/webapp/static/js/agvPakStore/pakStore.js | 202 + src/main/java/com/zy/asrs/service/AgvWorkService.java | 18 src/main/java/com/zy/asrs/entity/AllLocDetl.java | 266 ++ src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java | 13 src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java | 5 src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java | 8 src/main/java/com/zy/asrs/service/AgvLocMastService.java | 5 src/main/webapp/views/agvPakStore/matQuery.html | 173 + src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java | 41 src/main/webapp/views/agvPakStore/stockOut.html | 131 + src/main/webapp/static/js/agvPakStore/locMove.js | 135 + src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java | 16 src/main/webapp/views/agvPakStore/locDetlCheckQuery.html | 230 ++ src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html | 59 src/main/java/com/zy/asrs/controller/ReportQueryController.java | 6 62 files changed, 6,456 insertions(+), 99 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java index 241d8cd..36413b6 100644 --- a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java +++ b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java @@ -158,6 +158,9 @@ return R.ok(); } + /* + 绔欑偣鏄庣粏 + */ @RequestMapping(value = "/basDevp/detail/list/auth") public R basDevpDetailList(@RequestParam(defaultValue = "1")Integer curr, @RequestParam(defaultValue = "10")Integer limit, @@ -185,14 +188,13 @@ } } - return R.error("鏁版嵁寮傚父"); + return R.ok(); } @RequestMapping(value = "/basDevp/visualized/list/auth") public R visualizedList(@RequestBody JSONObject param){ String stationCode = param.get("stationCode").toString(); - Map<String, Object> result = agvBasDevpService.getAgvBasDevpDtoByStationCode(stationCode); @@ -208,8 +210,8 @@ List<String> devNos = (List<String>) map.get("devNo"); List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> { AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); - if(agvWrkMast.getIoType() == 103){ - throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�103.鎷f枡鍏ュ簱锛屾棤娉曟墽琛屽鍣ㄧ鍦轰换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); + if(agvWrkMast.getIoType() != 101 && agvWrkMast.getIoType() != 110){ + throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓嶄负101.鍑哄簱锛屾棤娉曟墽琛屽鍣ㄧ鍦轰换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); } return agvWrkMast; }).collect(Collectors.toList()); @@ -219,7 +221,7 @@ if(code == 0){ //灏嗗伐浣滃厷鐘舵�佹敼涓哄鍣ㄧ鍦� agvWrkMastList.forEach(agvWrkMast -> { - agvWrkMast.setWrkSts(207L); + agvWrkMast.setWrkSts(206L); agvWrkMastService.updateById(agvWrkMast); }); //淇敼绔欑偣鐘舵�� @@ -239,7 +241,7 @@ } /* - 鎷f枡鍏ュ簱 + 鎷f枡/鐩樼偣鍏ュ簱 */ @RequestMapping(value = "/basDevp/visualized/container/pickIn") public R visualiZedPickIn(@RequestBody Map<String,Object> map){ @@ -247,7 +249,7 @@ List<AgvWrkMast> agvWrkMastList = devNos.stream().map(devNo -> { AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); if(agvWrkMast.getIoType() == 101){ - throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�101.鍏ュ簱锛屾棤娉曟墽琛屾嫞鏂欏叆搴撲换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); + throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�101.鍑哄簱锛屾棤娉曟墽琛屾嫞鏂欏叆搴撲换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); } return agvWrkMast; }).collect(Collectors.toList()); diff --git a/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java b/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java new file mode 100644 index 0000000..e7f1044 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java @@ -0,0 +1,173 @@ +package com.zy.asrs.controller; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.core.annotations.ManagerAuth; +import com.core.common.BaseRes; +import com.core.common.Cools; +import com.core.common.DateUtils; +import com.core.common.R; +import com.zy.asrs.entity.AgvLocDetl; +import com.zy.asrs.entity.AgvLocMast; +import com.zy.asrs.entity.param.EmptyPlateOutParam; +import com.zy.asrs.entity.param.StockOutParam; +import com.zy.asrs.service.AgvBasDevpService; +import com.zy.asrs.service.AgvLocDetlService; +import com.zy.asrs.service.AgvLocMastService; +import com.zy.asrs.service.AgvWorkService; +import com.zy.common.web.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + +@RestController +@RequestMapping("/agv") +public class AgvIoWorkController extends BaseController { + + @Autowired + AgvLocDetlService agvLocDetlService; + @Autowired + AgvLocMastService agvLocMastService; + @Autowired + AgvWorkService agvWorkService; + @Autowired + AgvBasDevpService agvBasDevpService; + + @RequestMapping(value = "/stock/out/list/auth") + @ManagerAuth + public R list(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam(required = false)String orderByField, + @RequestParam(required = false)String orderByType, + @RequestParam(required = false)String condition, + @RequestParam Map<String, Object> param, + @RequestParam(required = false)Boolean unreason){ + if (!Cools.isEmpty(unreason) && unreason) { + + return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AgvLocDetl>() + .where(" DATALENGTH( batch ) != 11 or\n" + + " batch LIKE '%[a-z]%'"))); + } + param.remove("unreason"); + String row = ""; + EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>(); + if (param.get("row") != null) { + String chooseRow = (String) param.get("row"); + if (chooseRow.length() == 1) { + row = "0" + chooseRow; + param.remove("row"); + }else { + row = chooseRow; + param.remove("row"); + } + } + excludeTrash(param); + convert(param, wrapper); + allLike(AgvLocDetl.class, param.keySet(), wrapper, condition); + if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} + if (!row.equals("")){ + wrapper.and() + .where("loc_no like '" +row +"%'"); + } + Page<AgvLocDetl> agvLocDetlPage = agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper); + List<AgvLocDetl> collect = agvLocDetlPage.getRecords().stream().filter(agvLocDetl -> { + AgvLocMast agvLocMast = agvLocMastService.selectById(agvLocDetl.getLocNo()); + return agvLocMast.getLocSts().equals("F"); + }).collect(Collectors.toList()); + agvLocDetlPage.setRecords(collect); + return R.ok(agvLocDetlPage); + } + + @RequestMapping(value = "/locDetl/auth") + @ManagerAuth + public R stockOutList(@RequestParam(value = "locNos[]") List<String> locNos){ + if (!locNos.isEmpty()) { + List<AgvLocDetl> res = new ArrayList<>(); + for (String locNo : new HashSet<>(locNos)) { + List<AgvLocDetl> locDetls = agvLocDetlService.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo)); + if (!locDetls.isEmpty()) { + res.addAll(locDetls); + } + } + return R.ok().add(res); + } + return R.parse(BaseRes.EMPTY); + } + + @RequestMapping("/locCheck/out/start") + @ManagerAuth(memo = "AGV鐩樼偣鍑哄簱") + public R locCheckOutStart(@RequestBody StockOutParam param) { + agvWorkService.locCheckOut(param, getUserId()); + return R.ok("鍑哄簱鍚姩鎴愬姛"); + } + + @PostMapping(value = "/group/empty/stock") + @ManagerAuth(memo = "鑾峰彇鍚屼竴妤煎眰鐨勭┖搴撲綅") + public R getGroupEmptyStock(@RequestParam(required = false) String sourceLocNo) { + + if(Cools.isEmpty(sourceLocNo)){ + return null; + } + AgvLocMast agvLocMast = agvLocMastService.selectById(sourceLocNo); + if(Cools.isEmpty(agvLocMast)){ + return null; + } + + int floor = Integer.parseInt(sourceLocNo.split("@")[1]); + + List<String> locNoList = agvLocMastService.queryGroupEmptyStock(floor); + + return R.ok().add(locNoList); + } + + @RequestMapping("/loc/move/start") + @ManagerAuth(memo = "搴撲綅绉昏浆") + public R locMoveStart(@RequestParam String sourceLocNo, + @RequestParam String targetLocNo) { + + agvWorkService.locMove(sourceLocNo, targetLocNo, getUserId()); + return R.ok("绉诲簱鍚姩鎴愬姛"); + } + + @RequestMapping("/available/empty/put/site") + @ManagerAuth(memo = "鍙敤绔欑偣閫夋嫨") + public R availableEmptyPutSite(){ + return R.ok().add(agvBasDevpService.getAvailableEmptyInSite()); + } + + @RequestMapping("/empty/plate/in/start") + @ManagerAuth(memo = "绌烘澘鍏ュ簱") + public R emptyPlateInStart(@RequestParam String sourceStaNo) { + return R.ok("鍏ュ簱鍚姩鎴愬姛").add(agvWorkService.emptyPlateIn(sourceStaNo, getUserId())); + } + + @RequestMapping("/empty/plate/out/start") + @ManagerAuth(memo = "绌烘澘鍑哄簱") + public R emptyPlateOutStart(EmptyPlateOutParam param) { + agvWorkService.emptyPlateOut(param, getUserId()); + return R.ok("鍑哄簱鍚姩鎴愬姛"); + } + + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + String val = String.valueOf(entry.getValue()); + if (val.contains(RANGE_TIME_LINK)){ + String[] dates = val.split(RANGE_TIME_LINK); + wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); + wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else { + if (entry.getKey().equals("locNo")) { + wrapper.eq("loc_no", String.valueOf(entry.getValue())); + } else { + wrapper.like(entry.getKey(), String.valueOf(entry.getValue())); + } + } + } + } + +} diff --git a/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java b/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java index ac62291..c909439 100644 --- a/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java +++ b/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java @@ -1,5 +1,8 @@ package com.zy.asrs.controller; +import com.alibaba.excel.EasyExcel; +import com.alibaba.excel.write.style.column.LongestMatchColumnWidthStyleStrategy; +import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.plugins.Page; import com.core.annotations.ManagerAuth; @@ -7,13 +10,21 @@ import com.core.common.DateUtils; import com.core.common.R; import com.zy.asrs.entity.AgvLocDetl; +import com.zy.asrs.entity.LocDetl; +import com.zy.asrs.entity.Mat; import com.zy.asrs.service.AgvLocDetlService; +import com.zy.asrs.service.MatService; import com.zy.common.web.BaseController; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.net.URLEncoder; +import java.util.List; import java.util.Map; @RestController @@ -22,6 +33,8 @@ @Autowired private AgvLocDetlService agvLocDetlService; + @Autowired + private MatService matService; @RequestMapping(value = "/locDetl/list/auth") @ManagerAuth @@ -63,6 +76,75 @@ return R.ok(agvLocDetlService.selectPage(new Page<>(curr, limit), wrapper)); } + @RequestMapping(value = "/locDetl/statis/auth") + @ManagerAuth(memo = "AGV搴撳瓨鏄庣粏缁熻") + public R statis(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam Map<String, Object> param) { + Page<AgvLocDetl> stockStatis = agvLocDetlService.getStockStatis(toPage(curr, limit, param, AgvLocDetl.class)); + for (AgvLocDetl locDetl : stockStatis.getRecords()) { + Mat mat = matService.selectByMatnr(locDetl.getMatnr()); + if (mat != null) { + locDetl.sync(mat); + } + } + return R.ok().add(stockStatis); + } + + /* + 鑾峰彇搴撳瓨鎬绘暟 + */ + @RequestMapping("/locDetl/count") + public R getAllCount(){ + Integer sum = agvLocDetlService.sum(); + return R.ok(sum); + } + + @RequestMapping(value = "/locDetl/statis/export") + public void statisExport(HttpServletResponse response) throws IOException { + List<AgvLocDetl> excel = agvLocDetlService.getStockStatisExcel(); + for (AgvLocDetl locDetl : excel) { + Mat mat = matService.selectByMatnr(locDetl.getMatnr()); + if (mat != null) { + locDetl.sync(mat); + } + } + response.setContentType("application/vnd.ms-excel"); + response.setCharacterEncoding("utf-8"); + String fileName = URLEncoder.encode("搴撳瓨鏄庣粏缁熻鎶ヨ〃", "UTF-8"); + response.setHeader("Content-disposition", "attachment;filename=" + fileName + ".xlsx"); + EasyExcel.write(response.getOutputStream(), LocDetl.class) + .registerWriteHandler(new LongestMatchColumnWidthStyleStrategy()) + .sheet("琛�1") + .doWrite(excel); + } + + @RequestMapping(value = "/locDetl/export/auth") + @ManagerAuth(memo = "搴撲綅鏄庣粏瀵煎嚭") + public synchronized R export(@RequestBody JSONObject param){ + List<String> fields = JSONObject.parseArray(param.getJSONArray("fields").toJSONString(), String.class); + EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>(); + Map<String, Object> map = excludeTrash(param.getJSONObject("locDetl")); + String row = ""; + if (map.get("row") != null) { + String chooseRow = (String) map.get("row"); + if (chooseRow.length() == 1) { + row = "0" + chooseRow; + map.remove("row"); + }else { + row = chooseRow; + map.remove("row"); + } + } + convert(map, wrapper); + if (!row.equals("")){ + wrapper.and() + .where("loc_no like '" +row +"%'"); + } + List<AgvLocDetl> list = agvLocDetlService.selectList(wrapper); + return R.ok(exportSupport(list, fields)); + } + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ for (Map.Entry<String, Object> entry : map.entrySet()){ String val = String.valueOf(entry.getValue()); diff --git a/src/main/java/com/zy/asrs/controller/AgvMapController.java b/src/main/java/com/zy/asrs/controller/AgvMapController.java new file mode 100644 index 0000000..defe628 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/AgvMapController.java @@ -0,0 +1,258 @@ +package com.zy.asrs.controller; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.core.annotations.ManagerAuth; +import com.core.common.R; +import com.zy.asrs.entity.AgvLocDetl; +import com.zy.asrs.entity.AgvLocMast; +import com.zy.asrs.entity.BasMap; +import com.zy.asrs.service.AgvBasMapService; +import com.zy.asrs.service.AgvLocDetlService; +import com.zy.asrs.service.AgvLocMastService; +import com.zy.asrs.utils.Utils; +import com.zy.common.utils.RedisUtil; +import com.zy.common.web.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import java.util.ArrayList; +import java.util.List; + +@RestController +@RequestMapping("/agv") +public class AgvMapController extends BaseController { + + @Autowired + private AgvLocMastService agvLocMastService; + @Autowired + private AgvLocDetlService agvLocDetlService; + @Autowired + private AgvBasMapService agvBasMapService; + @Autowired + private RedisUtil redisUtil; + + private static final List<String> DISABLE_LOC_NO = new ArrayList<String>() {{ +// add("0200101"); +// add("0300101"); +// add("0400101"); +// add("0500101"); +// add("0600101"); +// add("0700101"); +// add("0800101"); +// add("0900101"); +// add("1000101"); +// add("1100101"); +// add("1200101"); + }}; + + @GetMapping("/map/getData/{floor}/{lev}/auth") + @ManagerAuth + public String getMapData(@PathVariable("floor") Integer floor, @PathVariable("lev") Integer lev) { + BasMap basMap = agvBasMapService.selectLatestMap(lev,floor); + //瑙f瀽json鍦板浘鏁版嵁 + List<ArrayList> arrayLists = JSON.parseArray(basMap.getData(), ArrayList.class); + + + //鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁 + List<AgvLocMast> locMasts = agvLocMastService.selectLocByLevAndFloor(lev,floor); + for (AgvLocMast locMast : locMasts) { + Integer row = locMast.getRow1(); + Integer bay = locMast.getBay1(); + + + int x = bay; + int y = row; + //1妤� + if(floor == 1){ + x = generateMap1Row(row); + y = generateMap1Bay(bay); + } + //3妤� + if(floor == 3){ + y = generateMap3Row(row); + x = generateMap3Bay(bay); + } + + + ArrayList rowData = arrayLists.get(x); + Object o = rowData.get(y); + + JSONObject jsonObject = JSON.parseObject(o.toString()); + if (DISABLE_LOC_NO.contains(locMast.getLocNo())) { + //绂佹搴撲綅 + jsonObject.put("value", 10);//灏嗙鐢ㄥ簱浣嶈繘琛岃缃� + } + jsonObject.put("locNo", locMast.getLocNo());//璁剧疆搴撲綅鍙� + jsonObject.put("locSts", locMast.getLocSts());//搴撲綅鐘舵�� + //鏇存柊list + rowData.set(y, jsonObject); + arrayLists.set(x, rowData); + } + + return JSONObject.toJSONString(arrayLists); + } + + private Integer generateMap1Row(int row){ + int x = 21-row; + if(row > 1){ + x --; + } + if(row > 3){ + x --; + } + if(row > 4){ + x --; + } + if(row > 6){ + x --; + } + if(row > 8){ + x --; + } + if(row > 10){ + x --; + } + if(row > 12){ + x --; + } + return x; + + } + + private Integer generateMap1Bay(int bay){ + int y = bay; + if(y > 28){ + y ++; + } + if(y > 57){ + y ++; + } + return y; + } + + private Integer generateMap3Row(int row){ + int x = row; + Integer[] rowAdd = {2,4,6,8,9,11,12,14,16,18,19,21,23,25,27,29,31,33}; + for(int i=0; i<rowAdd.length; i++){ + if(row >= rowAdd[i]){ + x ++; + } + } + return x; + } + + private Integer generateMap3Bay(int bay){ + int y = 73-bay; + if(bay >= 15) y --; + if(bay >= 47) y --; + return y; + } + + @RequestMapping("/map/searchData/auth") + @ManagerAuth + public R searchLoc(@RequestParam("lev") Integer lev, + @RequestParam("locNo") String locNo, + @RequestParam("orderNo") String orderNo, + @RequestParam("specs") String specs, + @RequestParam("matnr") String matnr, + @RequestParam("maktx") String maktx + ) { + + List<AgvLocDetl> locDetls = agvLocDetlService.searchByLike(orderNo, matnr, maktx, specs, locNo); + ArrayList<AgvLocDetl> lists = new ArrayList<>(); + for (AgvLocDetl locDetl : locDetls) {//杩囨护鎺変笉鏄綋鍓嶆ゼ灞傜殑鏁版嵁 + int lev1 = Utils.getAgvLev(locDetl.getLocNo()); + if (lev1 == lev) { + lists.add(locDetl); + } + } + + //鎼滅储鎸囧畾搴撲綅鍙凤紝鍗充娇搴撲綅涓虹┖锛屼篃鍙互杩斿洖鏁版嵁 + AgvLocMast locMast = agvLocMastService.selectById(locNo); + if (locMast != null) { + AgvLocDetl locDetl = new AgvLocDetl(); + locDetl.setLocNo(locMast.getLocNo()); + lists.add(locDetl); + } + return R.ok().add(lists); + } + + /* + @GetMapping("/map/realtime/getData/{lev}/auth") + @ManagerAuth + public String getRealtimeMapData(@PathVariable("lev") Integer lev) { + BasMap basMap = basMapService.selectLatestMap(lev); + //瑙f瀽json鍦板浘鏁版嵁 + List<ArrayList> arrayLists = JSON.parseArray(basMap.getData(), ArrayList.class); +// ArrayList<HashMap<String, Integer>> lineRows = new ArrayList<>(); +// int dataRow = 0; +// int dataRowCount = 0; +// for (int i = 1; i < arrayLists.size(); i++) { +// boolean flag = true; +// ArrayList rows = arrayLists.get(i); +// for (int j = 1; j < rows.size() - 1; j++) { +// Object o = rows.get(j); +// JSONObject jsonObject = JSON.parseObject(o.toString()); +// int value = Integer.parseInt(jsonObject.get("value").toString()); +// if (value >= 0 && value != 3) { +// //鍙湁璇ヨ涓殑浠讳竴涓�鍒楁湁鏁版嵁锛屽垯涓嶉渶瑕佸垱寤虹┖鐧借 +// flag = false; +// } +// } +// +// if (flag) { +// //绌虹櫧琛岄渶瑕佽烦杩� +// HashMap<String, Integer> map = new HashMap<>(); +// map.put("start", dataRow); +// int end = i - 1 - dataRowCount; +// map.put("end", end); +// map.put("count", dataRowCount); +// dataRow = end; +// dataRowCount++; +// lineRows.add(map); +// } +// } + + //鑾峰彇褰撳墠妤煎眰搴撲綅鏁版嵁 + List<LocMast> locMasts = locMastService.selectLocByLev(lev); + for (LocMast locMast : locMasts) { + Integer row = locMast.getRow1(); + Integer bay = locMast.getBay1(); +// for (HashMap<String, Integer> lineRow : lineRows) { +// if (row > lineRow.get("start") && row <= lineRow.get("end")) { +// row += lineRow.get("count"); +// break; +// } +// } + + ArrayList rowData = arrayLists.get(row); + Object o = rowData.get(bay); + JSONObject jsonObject = JSON.parseObject(o.toString()); + if (DISABLE_LOC_NO.contains(locMast.getLocNo())) { + //绂佹搴撲綅 + jsonObject.put("value", 10);//灏嗙鐢ㄥ簱浣嶈繘琛岃缃� + } + jsonObject.put("locNo", locMast.getLocNo());//璁剧疆搴撲綅鍙� + jsonObject.put("locSts", locMast.getLocSts());//搴撲綅鐘舵�� + //鏇存柊list + rowData.set(bay, jsonObject); + arrayLists.set(row, rowData); + } + + return JSONObject.toJSONString(arrayLists); + } */ + +// @GetMapping("/map/resetMap/{lev}/auth") +// @ManagerAuth +// public R resetMap(@PathVariable("lev") Integer lev) { +// Object o = redisUtil.get("realtimeBasMap_" + lev); +// if (o == null) { +// return R.error(); +// } +// redisUtil.del("realtimeBasMap_" + lev); +// basMapService.deleteByLev(lev); +// return R.ok(); +// } + +} diff --git a/src/main/java/com/zy/asrs/controller/AgvOpenController.java b/src/main/java/com/zy/asrs/controller/AgvOpenController.java index 9ad92d1..8b2d906 100644 --- a/src/main/java/com/zy/asrs/controller/AgvOpenController.java +++ b/src/main/java/com/zy/asrs/controller/AgvOpenController.java @@ -107,10 +107,14 @@ //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 agvWrkMastService.updateWrkStsByWrkNo(agvWrkMast.getWrkNo(),205); - //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 - if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){ + //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱 + if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103 || agvWrkMast.getIoType() == 107){ //淇敼鍑哄簱绔欑偣鐘舵�� agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode()); + } + //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱 + if(agvWrkMast.getIoType() == 110){ + agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode()); } } @@ -154,16 +158,10 @@ @Transactional public void success(AgvWrkMast agvWrkMast, AgvTaskCallBackParam param) { - //鍏ュ簱浠诲姟 || 鎷f枡鍏ュ簱浠诲姟 - if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53){ + //鍏ュ簱浠诲姟 || 鎷f枡鍏ュ簱浠诲姟 ||鐩樼偣鍐嶅叆搴� ||绌烘澘鍏ュ簱 + if(agvWrkMast.getIoType() == 1 || agvWrkMast.getIoType() == 53 || agvWrkMast.getIoType() == 57 || agvWrkMast.getIoType() == 10){ //淇敼婧愮珯鐐圭姸鎬佷负O.绌猴紝浠ュ強瑙g粦鎵樼洏鏉$爜 agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvWrkMast.getSourceLocNo(),"O",""); - } - - //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 - if(agvWrkMast.getIoType() == 101 || agvWrkMast.getIoType() == 103){ - //淇敼婧愬簱浣嶇姸鎬� - } //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负203.RCS鏀捐揣涓� diff --git a/src/main/java/com/zy/asrs/controller/AllLocDetlController.java b/src/main/java/com/zy/asrs/controller/AllLocDetlController.java new file mode 100644 index 0000000..91f3ed5 --- /dev/null +++ b/src/main/java/com/zy/asrs/controller/AllLocDetlController.java @@ -0,0 +1,84 @@ +package com.zy.asrs.controller; + +import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.baomidou.mybatisplus.plugins.Page; +import com.core.annotations.ManagerAuth; +import com.core.common.Cools; +import com.core.common.DateUtils; +import com.core.common.R; +import com.zy.asrs.entity.AllLocDetl; +import com.zy.asrs.service.AllLocDetlService; +import com.zy.common.web.BaseController; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; + +import java.util.Map; + +@RestController +@RequestMapping("/all") +public class AllLocDetlController extends BaseController { + + @Autowired + private AllLocDetlService allLocDetlService; + + @RequestMapping(value = "/locDetl/list/auth") + @ManagerAuth + public R list(@RequestParam(defaultValue = "1")Integer curr, + @RequestParam(defaultValue = "10")Integer limit, + @RequestParam(required = false)String orderByField, + @RequestParam(required = false)String orderByType, + @RequestParam(required = false)String condition, + @RequestParam Map<String, Object> param, + @RequestParam(required = false)Boolean unreason){ + if (!Cools.isEmpty(unreason) && unreason) { + + return R.ok(allLocDetlService.selectPage(new Page<>(curr, limit), new EntityWrapper<AllLocDetl>() + .where(" DATALENGTH( batch ) != 11 or\n" + + " batch LIKE '%[a-z]%'"))); + } + param.remove("unreason"); + String row = ""; + EntityWrapper<AllLocDetl> wrapper = new EntityWrapper<>(); + if (param.get("row") != null) { + String chooseRow = (String) param.get("row"); + if (chooseRow.length() == 1) { + row = "0" + chooseRow; + param.remove("row"); + }else { + row = chooseRow; + param.remove("row"); + } + } + excludeTrash(param); + convert(param, wrapper); + allLike(AllLocDetl.class, param.keySet(), wrapper, condition); + if (!Cools.isEmpty(orderByField)){wrapper.orderBy(humpToLine(orderByField), "asc".equals(orderByType));} + if (!row.equals("")){ + wrapper.and() + .where("loc_no like '" +row +"%'"); + } + + return R.ok(allLocDetlService.selectPage(new Page<>(curr, limit), wrapper)); + } + + + private <T> void convert(Map<String, Object> map, EntityWrapper<T> wrapper){ + for (Map.Entry<String, Object> entry : map.entrySet()){ + String val = String.valueOf(entry.getValue()); + if (val.contains(RANGE_TIME_LINK)){ + String[] dates = val.split(RANGE_TIME_LINK); + wrapper.ge(entry.getKey(), DateUtils.convert(dates[0])); + wrapper.le(entry.getKey(), DateUtils.convert(dates[1])); + } else { + if (entry.getKey().equals("locNo")) { + wrapper.eq("loc_no", String.valueOf(entry.getValue())); + } else { + wrapper.like(entry.getKey(), String.valueOf(entry.getValue())); + } + } + } + } + +} diff --git a/src/main/java/com/zy/asrs/controller/ReportQueryController.java b/src/main/java/com/zy/asrs/controller/ReportQueryController.java index cd42ffc..c05293c 100644 --- a/src/main/java/com/zy/asrs/controller/ReportQueryController.java +++ b/src/main/java/com/zy/asrs/controller/ReportQueryController.java @@ -71,8 +71,10 @@ if (!Cools.isEmpty(locNo) && !locNo.equals("null")) { bean.setLoc_no(locNo); } - List<ViewStayTimeBean> list = reportQueryMapper.queryViewStayTimeList(bean); - int count = reportQueryMapper.getViewStayTimeCount(bean); +// List<ViewStayTimeBean> list = reportQueryMapper.queryViewStayTimeList(bean); +// int count = reportQueryMapper.getViewStayTimeCount(bean); + List<ViewStayTimeBean> list = reportQueryMapper.queryAllViewStayTimeList(bean); + int count = reportQueryMapper.getAllViewStayTimeCount(bean); Page<ViewStayTimeBean> page = new Page<>(); page.setRecords(list); page.setTotal(count); diff --git a/src/main/java/com/zy/asrs/entity/AgvBasMap.java b/src/main/java/com/zy/asrs/entity/AgvBasMap.java new file mode 100644 index 0000000..7b8b25e --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/AgvBasMap.java @@ -0,0 +1,100 @@ +package com.zy.asrs.entity; + +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableId; +import com.baomidou.mybatisplus.annotations.TableName; +import com.baomidou.mybatisplus.enums.IdType; +import com.core.common.Cools; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("agv_bas_map") +public class AgvBasMap implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value= "") + @TableId(value = "id", type = IdType.AUTO) + private Integer id; + + /** + * 鍦板浘鏁版嵁 + */ + @ApiModelProperty(value= "鍦板浘鏁版嵁") + private String data; + + /** + * 鍒涘缓鏃堕棿 + */ + @ApiModelProperty(value= "鍒涘缓鏃堕棿") + @TableField("create_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date createTime; + + /** + * 鏇存柊鏃堕棿 + */ + @ApiModelProperty(value= "鏇存柊鏃堕棿") + @TableField("update_time") + @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss") + private Date updateTime; + + /** + * 鏇存柊鍓嶅湴鍥炬暟鎹� + */ + @ApiModelProperty(value= "鏇存柊鍓嶅湴鍥炬暟鎹�") + @TableField("last_data") + private String lastData; + + /** + * 灞� + */ + @ApiModelProperty(value= "灞�") + private Integer lev; + + /** + * 妤� + */ + @ApiModelProperty(value= "妤�") + private Integer floor; + + public AgvBasMap() {} + + public AgvBasMap(String data, Date createTime, Date updateTime, String lastData, Integer lev) { + this.data = data; + this.createTime = createTime; + this.updateTime = updateTime; + this.lastData = lastData; + this.lev = lev; + } + +// BasMap basMap = new BasMap( +// null, // 鍦板浘鏁版嵁 +// null, // 鍒涘缓鏃堕棿 +// null, // 鏇存柊鏃堕棿 +// null, // 鏇存柊鍓嶅湴鍥炬暟鎹� +// null // 妤煎眰 +// ); + + public String getCreateTime$(){ + if (Cools.isEmpty(this.createTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.createTime); + } + + public String getUpdateTime$(){ + if (Cools.isEmpty(this.updateTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.updateTime); + } + + +} diff --git a/src/main/java/com/zy/asrs/entity/AllLocDetl.java b/src/main/java/com/zy/asrs/entity/AllLocDetl.java new file mode 100644 index 0000000..a532bda --- /dev/null +++ b/src/main/java/com/zy/asrs/entity/AllLocDetl.java @@ -0,0 +1,266 @@ +package com.zy.asrs.entity; + +import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; +import com.alibaba.excel.annotation.ExcelProperty; +import com.baomidou.mybatisplus.annotations.TableField; +import com.baomidou.mybatisplus.annotations.TableName; +import com.core.common.Cools; +import com.core.common.SpringUtils; +import com.zy.asrs.service.LocMastService; +import com.zy.common.utils.Synchro; +import com.zy.system.entity.User; +import com.zy.system.service.UserService; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.text.SimpleDateFormat; +import java.util.Date; + +@Data +@TableName("all_loc_detl") +@ExcelIgnoreUnannotated +public class AllLocDetl implements Serializable { + + private static final long serialVersionUID = 1L; + + @ApiModelProperty(value= "搴撲綅鍙�") + @TableField("loc_no") + private String locNo; + + @ApiModelProperty(value= "鎵樼洏鏉$爜") + private String zpallet; + + @ApiModelProperty(value= "鏁伴噺") + @ExcelProperty("鏁伴噺") + private Double anfme; + + @ApiModelProperty(value= "鐗╂枡鍙�") + @ExcelProperty("鐗╂枡鍙�") + private String matnr; + + @ApiModelProperty(value= "鐗╂枡鍙�") + @ExcelProperty("鐗╂枡鍙�") + private String maktx; + + @ApiModelProperty(value= "搴忓垪鐮�") + @ExcelProperty("搴忓垪鐮�") + private String batch; + + @ApiModelProperty(value= "鍗曟嵁缂栧彿") + @ExcelProperty("鍗曟嵁缂栧彿") + @TableField("order_no") + private String orderNo; + + @ApiModelProperty(value= "瑙勬牸") + private String specs; + + @ApiModelProperty(value= "鎵规") + private String model; + + @ApiModelProperty(value= "棰滆壊") + private String color; + + @ApiModelProperty(value= "鍝佺墝") + private String brand; + + @ApiModelProperty(value= "鍗曚綅") + private String unit; + + @ApiModelProperty(value= "鍗曚环") + private Double price; + + @ApiModelProperty(value= "sku") + private String sku; + + @ApiModelProperty(value= "鍖呮暟") + private Double units; + + @ApiModelProperty(value= "鏉$爜") + private String barcode; + + @ApiModelProperty(value= "鐗╂枡鐘舵��") + private String origin; + + @ApiModelProperty(value= "鍘傚") + private String manu; + + @ApiModelProperty(value= "鍗曟嵁鏃堕棿") + @TableField("manu_date") + private String manuDate; + + @ApiModelProperty(value= "鍝侀」鏁�") + @TableField("item_num") + private String itemNum; + + @ApiModelProperty(value= "瀹夊叏搴撳瓨閲�") + @TableField("safe_qty") + private Double safeQty; + + @ApiModelProperty(value= "閲嶉噺") + private Double weight; + + @ApiModelProperty(value= "闀垮害") + private Double length; + + @ApiModelProperty(value= "浣撶Н") + private Double volume; + + @ApiModelProperty(value= "涓夋柟缂栫爜") + @TableField("three_code") + private String threeCode; + + @ApiModelProperty(value= "渚涘簲鍟�") + private String supp; + + @ApiModelProperty(value= "渚涘簲鍟嗙紪鐮�") + @TableField("supp_code") + private String suppCode; + + @ApiModelProperty(value= "鏄惁鎵规 1: 鏄� 0: 鍚� ") + @TableField("be_batch") + private Integer beBatch; + + @ApiModelProperty(value= "淇濊川鏈�") + @TableField("dead_time") + private String deadTime; + + @ApiModelProperty(value= "棰勮澶╂暟") + @TableField("dead_warn") + private Integer deadWarn; + + @ApiModelProperty(value= "鍒惰喘 1: 鍒堕�� 2: 閲囪喘 3: 澶栧崗 ") + private Integer source; + + @ApiModelProperty(value= "瑕佹眰妫�楠� 1: 鏄� 0: 鍚� ") + private Integer inspect; + + @ApiModelProperty(value= "鍗遍櫓鍝� 1: 鏄� 0: 鍚� ") + private Integer danger; + + @ApiModelProperty(value= "淇敼浜哄憳") + @TableField("modi_user") + private Long modiUser; + + @ApiModelProperty(value= "淇敼鏃堕棿") + @TableField("modi_time") + private Date modiTime; + + @ApiModelProperty(value= "鍒涘缓鑰�") + @TableField("appe_user") + private Long appeUser; + + @ApiModelProperty(value= "娣诲姞鏃堕棿") + @TableField("appe_time") + private Date appeTime; + + @ApiModelProperty(value= "澶囨敞") + private String memo; + + @TableField("stock_freeze") + @ApiModelProperty(value= "搴撳瓨鍐荤粨{1:姝e父,0:鍐荤粨}") + private Integer stockFreeze; + + public String getLocNo$(){ + LocMastService service = SpringUtils.getBean(LocMastService.class); + LocMast locMast = service.selectById(this.locNo); + if (!Cools.isEmpty(locMast)){ + return String.valueOf(locMast.getLocNo()); + } + return null; + } + + public String getBeBatch$(){ + if (null == this.beBatch){ return null; } + switch (this.beBatch){ + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.beBatch); + } + } + + public String getSource$(){ + if (null == this.source){ return null; } + switch (this.source){ + case 1: + return "鍒堕��"; + case 2: + return "閲囪喘"; + case 3: + return "澶栧崗"; + default: + return String.valueOf(this.source); + } + } + + public String getInspect$(){ + if (null == this.inspect){ return null; } + switch (this.inspect){ + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.inspect); + } + } + + public String getDanger$(){ + if (null == this.danger){ return null; } + switch (this.danger){ + case 1: + return "鏄�"; + case 0: + return "鍚�"; + default: + return String.valueOf(this.danger); + } + } + + public String getModiUser$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.modiUser); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getUsername()); + } + return null; + } + + public String getModiTime$(){ + if (Cools.isEmpty(this.modiTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.modiTime); + } + + public String getAppeUser$(){ + UserService service = SpringUtils.getBean(UserService.class); + User user = service.selectById(this.appeUser); + if (!Cools.isEmpty(user)){ + return String.valueOf(user.getUsername()); + } + return null; + } + + public String getAppeTime$(){ + if (Cools.isEmpty(this.appeTime)){ + return ""; + } + return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(this.appeTime); + } + + public void sync(Object source) { + Synchro.Copy(source, this); + } + + public String getStockFreeze$() { + if (Cools.isEmpty(this.stockFreeze)){ + return ""; + } + return this.stockFreeze == 1 ? "姝e父" : "鍐荤粨"; + } + +} diff --git a/src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java b/src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java index 17ca693..38656a4 100644 --- a/src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java +++ b/src/main/java/com/zy/asrs/entity/param/EmptyPlateOutParam.java @@ -1,14 +1,19 @@ package com.zy.asrs.entity.param; +import lombok.Data; + import java.util.List; /** * Created by vincent on 2020/6/13 */ +@Data public class EmptyPlateOutParam { // 鍑虹珯鍙� private Integer outSite; + // AGV鍑虹珯鍙� + private String stationCode; // 搴撲綅鍙烽泦鍚� private List<String> locNos; diff --git a/src/main/java/com/zy/asrs/entity/param/StockOutParam.java b/src/main/java/com/zy/asrs/entity/param/StockOutParam.java index e864f9b..2c3ef14 100644 --- a/src/main/java/com/zy/asrs/entity/param/StockOutParam.java +++ b/src/main/java/com/zy/asrs/entity/param/StockOutParam.java @@ -13,6 +13,9 @@ // 鍑虹珯鍙� private Integer outSite; + // AGV鍑烘垬鍙� + private String station; + // 鐗╂枡缂栧彿闆嗗悎 private List<LocDetl> locDetls; diff --git a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java index 3609fa9..b5e060a 100644 --- a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java +++ b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java @@ -4,12 +4,18 @@ import com.zy.asrs.entity.AgvBasDevp; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Select; import org.springframework.stereotype.Repository; + +import java.util.List; @Mapper @Repository public interface AgvBasDevpMapper extends BaseMapper<AgvBasDevp> { @Delete("delete from agv_bas_devp") - public void deleteAll(); + void deleteAll(); + + @Select("select dev_no from agv_bas_devp where loc_sts = 'O'") + List<String> getAvailableEmptyInSite(); } diff --git a/src/main/java/com/zy/asrs/mapper/AgvBasMapMapper.java b/src/main/java/com/zy/asrs/mapper/AgvBasMapMapper.java new file mode 100644 index 0000000..48be966 --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/AgvBasMapMapper.java @@ -0,0 +1,20 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.AgvBasMap; +import com.zy.asrs.entity.BasMap; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface AgvBasMapMapper extends BaseMapper<AgvBasMap> { + + @Select("select top 1 * from agv_bas_map where lev = #{lev} and floor = #{floor} order by id desc") + BasMap selectLatestMap(@Param("lev")Integer lev, @Param("floor")Integer floor);//鑾峰彇鏈�鏂板湴鍥炬暟鎹� + + boolean deleteByLev(Integer lev);//鍒犻櫎鎸囧畾妤煎眰鍦板浘 + +} diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java index beef7e1..e2e6631 100644 --- a/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java +++ b/src/main/java/com/zy/asrs/mapper/AgvLocDetlMapper.java @@ -2,9 +2,6 @@ import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.AgvLocDetl; -import com.zy.asrs.entity.LocDetl; -import com.zy.asrs.entity.result.StockVo; -import com.zy.common.model.QueryStockPreDo; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; @@ -18,4 +15,42 @@ @Repository public interface AgvLocDetlMapper extends BaseMapper<AgvLocDetl> { + @Update("update agv_loc_detl set loc_no = '${targetLoc}' where loc_no = '${sourceLoc}' ") + void updateStock(@Param("sourceLoc")String sourceLoc, @Param("targetLoc")String targetLoc); + + @Select("select * from\n" + + "(\n" + + "\t\tselect\n" + + "\t\tROW_NUMBER() over (order by sum(a.anfme) desc) as row\n" + + "\t\t, a.matnr\n" + + "\t\t, sum(a.anfme) as anfme\n" + + "\t\tfrom agv_loc_detl a\n" + + "\t\twhere 1=1\n" + + "\t\tgroup by a.matnr\n" + + " ) t where t.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize})") + List<AgvLocDetl> getStockStatis(Map<String, Object> map); + + @Select("select count(1) as count from\n" + + " (\n" + + " select\n" + + " a.matnr\n" + + " from agv_loc_detl a\n" + + " where 1=1\n" + + " \n" + + " group by a.matnr\n" + + " ) b") + Integer getStockStatisCount(Map<String, Object> map); + + @Select("SELECT SUM(anfme) FROM agv_loc_detl") + Integer sum(); + + @Select("select\n" + + " ROW_NUMBER() over (order by sum(a.anfme) desc) as row\n" + + " , a.matnr\n" + + " , sum(a.anfme) as anfme\n" + + " from agv_loc_detl a\n" + + " where 1=1\n" + + " group by a.matnr") + List<AgvLocDetl> getStockStatisExcel(); + } diff --git a/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java index 7192e4f..0c93dc9 100644 --- a/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java +++ b/src/main/java/com/zy/asrs/mapper/AgvLocMastMapper.java @@ -2,10 +2,7 @@ import com.baomidou.mybatisplus.mapper.BaseMapper; import com.zy.asrs.entity.AgvLocMast; -import org.apache.ibatis.annotations.Delete; -import org.apache.ibatis.annotations.Mapper; -import org.apache.ibatis.annotations.Param; -import org.apache.ibatis.annotations.Update; +import org.apache.ibatis.annotations.*; import java.util.List; @@ -24,4 +21,12 @@ List<AgvLocMast> queryFreeLocMast2(Short locType1, Integer rowBeg, Integer rowEnd, Integer bayBeg, Integer bayEnd, Integer levBeg, Integer levEnd); + @Select("select loc_no " + + "from agv_loc_mast " + + "where loc_sts = 'O' and floor = ${floor}") + List<String> queryGroupEmptyStock(@Param("floor")int floor); + + + @Select("SELECT * FROM agv_loc_mast WHERE lev1 = #{lev} And floor = #{floor}") + List<AgvLocMast> selectLocByLevAndFloor(@Param("lev")int lev, @Param("floor")int floor); } diff --git a/src/main/java/com/zy/asrs/mapper/AllLocDetlMapper.java b/src/main/java/com/zy/asrs/mapper/AllLocDetlMapper.java new file mode 100644 index 0000000..dfefbab --- /dev/null +++ b/src/main/java/com/zy/asrs/mapper/AllLocDetlMapper.java @@ -0,0 +1,12 @@ +package com.zy.asrs.mapper; + +import com.baomidou.mybatisplus.mapper.BaseMapper; +import com.zy.asrs.entity.AllLocDetl; +import org.apache.ibatis.annotations.Mapper; +import org.springframework.stereotype.Repository; + +@Mapper +@Repository +public interface AllLocDetlMapper extends BaseMapper<AllLocDetl> { + +} diff --git a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java index a816b9c..71723d3 100644 --- a/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java +++ b/src/main/java/com/zy/asrs/mapper/ReportQueryMapper.java @@ -23,6 +23,12 @@ //涓嶅垎椤垫煡璇㈡墍鏈変俊鎭紝鐢ㄤ簬excel瀵煎嚭 public List<ViewStayTimeBean> getViewStayTimeAll(ViewStayTimeBean viewStayTime); + //鍒嗛〉鏌ヨAGV鍜屽洓椤瑰簱搴撳瓨婊炵暀鏃堕棿 + public List<ViewStayTimeBean> queryAllViewStayTimeList(ViewStayTimeBean viewStayTime); + public int getAllViewStayTimeCount(ViewStayTimeBean viewStayTime); + //涓嶅垎椤垫煡璇GV鍜屽洓椤瑰簱鎵�鏈変俊鎭紝鐢ㄤ簬excel瀵煎嚭 + public List<ViewStayTimeBean> getAllViewStayTimeAll(ViewStayTimeBean viewStayTime); + // // 搴撲綅Map @Select("select distinct row1 from asr_loc_mast order by row1 asc") List<Integer> getViewLocRowTotal(); diff --git a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java index 755e724..3bdd91a 100644 --- a/src/main/java/com/zy/asrs/service/AgvBasDevpService.java +++ b/src/main/java/com/zy/asrs/service/AgvBasDevpService.java @@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.AgvBasDevp; +import java.util.List; import java.util.Map; public interface AgvBasDevpService extends IService<AgvBasDevp> { @@ -14,4 +15,6 @@ public void updateLocStsAndBarcodeByDevNo(String devNo, String locSts, String barcode); public Map<String, Object> getAgvBasDevpDtoByStationCode(String stationCode); + + public List<String> getAvailableEmptyInSite(); } diff --git a/src/main/java/com/zy/asrs/service/AgvBasMapService.java b/src/main/java/com/zy/asrs/service/AgvBasMapService.java new file mode 100644 index 0000000..0d95bf1 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/AgvBasMapService.java @@ -0,0 +1,13 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.AgvBasMap; +import com.zy.asrs.entity.BasMap; + +public interface AgvBasMapService extends IService<AgvBasMap> { + + BasMap selectLatestMap(Integer lev, Integer floor);//鑾峰彇鏈�鏂板湴鍥炬暟鎹� + + boolean deleteByLev(Integer lev);//鍒犻櫎鎸囧畾妤煎眰鍦板浘 + +} diff --git a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java index 8cfd7f0..eb52bf6 100644 --- a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java +++ b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java @@ -1,5 +1,6 @@ package com.zy.asrs.service; +import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.AgvLocDetl; import com.zy.common.model.LocDto; @@ -12,4 +13,14 @@ public double queryStockAndSetLocDto(String matnr, String batch, String orderNo, List<LocDto> locDtoList, double issued); + public void updateStock(String sourceLoc, String targetLoc); + + Page<AgvLocDetl> getStockStatis(Page<AgvLocDetl> page); + + Integer sum(); + + List<AgvLocDetl> getStockStatisExcel(); + + List<AgvLocDetl> searchByLike(String orderNo, String matnr, String maktx, String specs, String locNo); + } diff --git a/src/main/java/com/zy/asrs/service/AgvLocMastService.java b/src/main/java/com/zy/asrs/service/AgvLocMastService.java index 2271da4..afcb341 100644 --- a/src/main/java/com/zy/asrs/service/AgvLocMastService.java +++ b/src/main/java/com/zy/asrs/service/AgvLocMastService.java @@ -19,4 +19,9 @@ void updateLocType2ByRBL(Integer locType2, AgvLocRule locRule); public void updateLocStsByLocNo(String locNo, String locSts); + + public List<String> queryGroupEmptyStock(int floor); + + List<AgvLocMast> selectLocByLevAndFloor(int lev, int floor); + } diff --git a/src/main/java/com/zy/asrs/service/AgvWorkService.java b/src/main/java/com/zy/asrs/service/AgvWorkService.java index f97aa5d..3379e72 100644 --- a/src/main/java/com/zy/asrs/service/AgvWorkService.java +++ b/src/main/java/com/zy/asrs/service/AgvWorkService.java @@ -2,6 +2,8 @@ import com.zy.asrs.entity.AgvBasDevp; import com.zy.asrs.entity.AgvWrkMast; +import com.zy.asrs.entity.param.EmptyPlateOutParam; +import com.zy.asrs.entity.param.StockOutParam; import com.zy.common.model.StartupDto; import com.zy.common.model.TaskDto; @@ -24,5 +26,21 @@ */ void pickIn(List<AgvWrkMast> agvWrkMastList); + /* + 鐩樼偣鍑哄簱 + */ + void locCheckOut(StockOutParam param, Long userId); + + /* + 搴撲綅绉昏浆 + */ + void locMove(String sourceLocNo, String targetLocNo, Long userId); + + /* + 绌烘澘鍏ュ簱 + */ + String emptyPlateIn(String sourceStaion, Long userId); + + void emptyPlateOut(EmptyPlateOutParam param, Long userId); } diff --git a/src/main/java/com/zy/asrs/service/AllLocDetlService.java b/src/main/java/com/zy/asrs/service/AllLocDetlService.java new file mode 100644 index 0000000..1770fa5 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/AllLocDetlService.java @@ -0,0 +1,8 @@ +package com.zy.asrs.service; + +import com.baomidou.mybatisplus.service.IService; +import com.zy.asrs.entity.AllLocDetl; + +public interface AllLocDetlService extends IService<AllLocDetl> { + +} diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java index 069fae5..f9759e6 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java @@ -109,16 +109,11 @@ AgvBasDevpDto agvBasDevpDto = new AgvBasDevpDto(); BeanUtils.copyProperties(agvBasDevp, agvBasDevpDto); -// if (Cools.isEmpty(agvBasDevpDto.getBarcode())) { -// return agvBasDevpDto; -// } - + //濡傛灉宸ヤ綔浣嶇姸鎬佷负0.绌哄簱浣�,鍒欑洿鎺ヨ繑鍥� if("O".equals(agvBasDevpDto.getLocSts())){ return agvBasDevpDto; } -// AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() -// .eq("barcode", agvBasDevpDto.getBarcode())); AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() .eq("loc_no", agvBasDevpDto.getDevNo()) .or().eq("source_loc_no",agvBasDevpDto.getDevNo())); @@ -139,6 +134,8 @@ } } + setFlagForAgvBasDevpDto(agvWrkMast,agvBasDevpDto); + return agvBasDevpDto; }).collect(Collectors.toList()); @@ -153,4 +150,29 @@ return result; } + private void setFlagForAgvBasDevpDto(AgvWrkMast agvWrkMast, AgvBasDevpDto agvBasDevpDto){ + //褰撳伐浣滄。绫诲瀷涓�101.鍑哄簱 骞朵笖 宸ヤ綔浣嶇姸鎬佷负F.鍦ㄥ簱鏃讹紝鏄剧ず瀹瑰櫒绂诲満鎸夐挳 + if(agvWrkMast.getIoType() == 101 && "F".equals(agvBasDevpDto.getLocSts())){ + agvBasDevpDto.setContainerMoveOutFlag(true); + } + + //褰撳伐浣滄。绫诲瀷涓�101.鍑哄簱 骞朵笖 宸ヤ綔浣嶇姸鎬佷负F.鍦ㄥ簱鏃讹紝鏄剧ず瀹瑰櫒绂诲満鎸夐挳 + if(agvWrkMast.getIoType() == 110 && "D".equals(agvBasDevpDto.getLocSts())){ + agvBasDevpDto.setContainerMoveOutFlag(true); + } + + //褰撳伐浣滄。绫诲瀷涓�103.鎷f枡鍑哄簱 骞朵笖 宸ヤ綔浣嶇姸鎬佷负F.鍦ㄥ簱鏃讹紝鏄剧ず鎷f枡/鐩樼偣鍏ュ簱鎸夐挳 + if(agvWrkMast.getIoType() == 103 && "F".equals(agvBasDevpDto.getLocSts())){ + agvBasDevpDto.setPickInFlag(true); + } + //褰撳伐浣滄。绫诲瀷涓�107.鐩樼偣鍑哄簱 骞朵笖 宸ヤ綔浣嶇姸鎬佷负F.鍦ㄥ簱鏃讹紝鏄剧ず鎷f枡/鐩樼偣鍏ュ簱鎸夐挳 + if(agvWrkMast.getIoType() == 107 && "F".equals(agvBasDevpDto.getLocSts())){ + agvBasDevpDto.setPickInFlag(true); + } + } + + public List<String> getAvailableEmptyInSite() { + return this.baseMapper.getAvailableEmptyInSite(); + } + } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvBasMapServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvBasMapServiceImpl.java new file mode 100644 index 0000000..2869e4d --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/AgvBasMapServiceImpl.java @@ -0,0 +1,23 @@ +package com.zy.asrs.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.AgvBasMap; +import com.zy.asrs.entity.BasMap; +import com.zy.asrs.mapper.AgvBasMapMapper; +import com.zy.asrs.service.AgvBasMapService; +import org.springframework.stereotype.Service; + +@Service +public class AgvBasMapServiceImpl extends ServiceImpl<AgvBasMapMapper, AgvBasMap> implements AgvBasMapService { + + @Override + public BasMap selectLatestMap(Integer lev, Integer floor) { + return this.baseMapper.selectLatestMap(lev,floor); + } + + @Override + public boolean deleteByLev(Integer lev) { + return this.baseMapper.deleteByLev(lev); + } + +} diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java index 736601e..597f97d 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java @@ -2,6 +2,7 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.mapper.Wrapper; +import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.zy.asrs.entity.AgvLocDetl; @@ -80,6 +81,53 @@ } + /* + 鏇存柊搴撳瓨鏄庣粏 + */ + public void updateStock(String sourceLoc, String targetLoc) { + this.baseMapper.updateStock(sourceLoc,targetLoc); + } + + public Page<AgvLocDetl> getStockStatis(Page<AgvLocDetl> page) { + page.setRecords(baseMapper.getStockStatis(page.getCondition())); + page.setTotal(baseMapper.getStockStatisCount(page.getCondition())); + return page; + } + + /* + 鑾峰彇搴撳瓨鎬绘暟 + */ + public Integer sum() { + return this.baseMapper.sum(); + } + + public List<AgvLocDetl> getStockStatisExcel(){ + return this.baseMapper.getStockStatisExcel(); + } + + public List<AgvLocDetl> searchByLike(String orderNo, String matnr, String maktx, String specs, String locNo) { + if (Cools.isEmpty(orderNo) && Cools.isEmpty(matnr) && Cools.isEmpty(maktx) && Cools.isEmpty(specs) && Cools.isEmpty(locNo)) { + return new ArrayList<AgvLocDetl>(); + } + EntityWrapper<AgvLocDetl> wrapper = new EntityWrapper<>(); + if(Cools.isEmpty(orderNo)){ + wrapper.like("order_no",orderNo); + } + if(Cools.isEmpty(matnr)){ + wrapper.like("matnr",matnr); + } + if(Cools.isEmpty(maktx)){ + wrapper.like("maktx",maktx); + } + if(Cools.isEmpty(specs)){ + wrapper.like("specs",specs); + } + if(Cools.isEmpty()){ + wrapper.like("loc_no",locNo); + } + return this.selectList(wrapper); + } + private List<String> queryAgvStaNosByFloor(int floor){ List<String> agvStaNos = new ArrayList<>(); if(floor == 1){ diff --git a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java index 8f3d445..e67221b 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java @@ -1,5 +1,6 @@ package com.zy.asrs.service.impl; +import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.AgvLocRule; @@ -18,10 +19,10 @@ public class AgvLocMastServiceImpl extends ServiceImpl<AgvLocMastMapper, AgvLocMast> implements AgvLocMastService { @Autowired - AgvLocMastMapper agvLockMastMapper; + AgvLocMastMapper agvLocMastMapper; public void clearLoc(){ - agvLockMastMapper.deleteAll(); + agvLocMastMapper.deleteAll(); } public void initLocFloor1() { @@ -94,4 +95,15 @@ this.updateById(agvLocMast); } + public List<String> queryGroupEmptyStock(int floor) { + return this.baseMapper.queryGroupEmptyStock(floor); + } + + public List<AgvLocMast> selectLocByLevAndFloor(int lev, int floor) { + + List<AgvLocMast> agvLocMastList = this.selectList(new EntityWrapper<AgvLocMast>().eq("lev1", lev).eq("floor", floor)); + return agvLocMastList; + //return this.agvLocMastMapper.selectLocByLevAndFloor(lev,floor); + } + } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java index f5ea49e..faa8d95 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -5,6 +5,8 @@ import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; +import com.zy.asrs.entity.param.EmptyPlateOutParam; +import com.zy.asrs.entity.param.StockOutParam; import com.zy.asrs.service.*; import com.zy.common.model.LocDto; import com.zy.common.model.OrderDto; @@ -38,7 +40,7 @@ @Autowired private AgvBasDevpService agvBasDevpService; @Autowired - private AgvLocMastService agvLockMastService; + private AgvLocMastService agvLocMastService; @Autowired private AgvLocDetlService agvLocDetlService; @Autowired @@ -104,7 +106,7 @@ agvTaskDtos.forEach(taskDto -> { - AgvLocMast agvLocMast = agvLockMastService.selectById(taskDto.getLocNo()); + AgvLocMast agvLocMast = agvLocMastService.selectById(taskDto.getLocNo()); AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", taskDto.getLocNo())); //宸ヤ綔妗f墍闇�鍙傛暟 @@ -128,7 +130,7 @@ modifyOrderDetl(taskDto.getLocDtos().get(0), userId); //鏇存柊婧愮珯鐐逛俊鎭� String locSts = ioType == 101 ? "R" : "P"; - updateAgvLocMast(agvLockMastService.selectById(sourceLocNo),locSts); + updateAgvLocMast(agvLocMastService.selectById(sourceLocNo),locSts); //鏇存柊鐩爣绔欑偣鐘舵�� //locSts = ioType == 101 ? "S" : "Q"; updateAgvBasDevp(agvBasDevpService.selectById(targetLocNo),"S"); @@ -143,7 +145,11 @@ agvWrkMastList.forEach(agvWrkMast -> { //淇敼宸ヤ綔鍏� agvWrkMast.setWrkSts(201L); - agvWrkMast.setIoType(53); + + //鏍规嵁鍑哄簱绫诲瀷 璁剧疆鍏ュ簱绫诲瀷 53鎷f枡鍏ュ簱 57鐩樼偣鍏ュ簱 + int ioType = agvWrkMast.getIoType() == 103 ? 53 : 57; + + agvWrkMast.setIoType(ioType); String locNo = agvWrkMast.getLocNo(); agvWrkMast.setLocNo(agvWrkMast.getSourceLocNo()); agvWrkMast.setSourceLocNo(locNo); @@ -151,22 +157,139 @@ agvWrkMastService.updateById(agvWrkMast); AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", agvWrkMast.getWrkNo())); - AgvLocMast agvLocMast = agvLockMastService.selectById(agvWrkMast.getLocNo()); + AgvLocMast agvLocMast = agvLocMastService.selectById(agvWrkMast.getLocNo()); AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocMast.getLocNo())); AgvBasDevp agvBasDevp = agvBasDevpService.selectById(agvWrkMast.getSourceLocNo()); - //淇敼宸ヤ綔鍏氭槑缁� - agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme()); - agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo())); - //淇敼搴撳瓨淇℃伅 - agvLocDetl.setAnfme(agvWrkDetl.getAnfme()); - agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo())); - //淇敼搴撲綅淇℃伅 - agvLocMast.setLocSts("Q"); - agvLockMastService.selectById(agvLocMast); - //淇敼绔欑偣淇℃伅 - agvBasDevp.setLocSts("R"); - agvBasDevpService.updateById(agvBasDevp); + //鎷f枡鍏ュ簱 + if(ioType == 53){ + //淇敼宸ヤ綔鍏氭槑缁� + agvWrkDetl.setAnfme(agvLocDetl.getAnfme() - agvWrkDetl.getAnfme()); + agvWrkDetlService.update(agvWrkDetl,new EntityWrapper<AgvWrkDetl>().eq("wrk_no",agvWrkDetl.getWrkNo())); + //淇敼搴撳瓨淇℃伅 + agvLocDetl.setAnfme(agvWrkDetl.getAnfme()); + agvLocDetlService.update(agvLocDetl,new EntityWrapper<AgvLocDetl>().eq("loc_no",agvLocDetl.getLocNo())); + } + //淇敼搴撲綅淇℃伅 + updateAgvLocMast(agvLocMast,"Q"); + //淇敼绔欑偣淇℃伅 + updateAgvBasDevp(agvBasDevp,"R"); + + }); + } + + /* + 鐩樼偣鍑哄簱 + */ + @Transactional + public void locCheckOut(StockOutParam param, Long userId) { + String station = param.getStation(); + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() + .eq("station_code", station) + .eq("loc_sts","O")); + + if(param.getLocDetls().size() > agvBasDevpList.size()){ + throw new CoolException("褰撳墠绔欑偣鍙敤缂撳瓨璐ф灦鏁伴噺涓�" + agvBasDevpList.size() + ",灏戜簬闇�瑕佺洏鐐瑰嚭搴撳簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鐩樼偣搴撲綅"); + } + + param.getLocDetls().forEach(locDetl -> { + AgvLocMast agvLocMast = agvLocMastService.selectById(locDetl.getLocNo()); + AgvLocDetl agvLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", locDetl.getLocNo())); + AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("station_code", station) + .eq("loc_sts","O")); + Date now = new Date(); + + //鐢熸垚宸ヤ綔鍏� + AgvWrkMast wrkMast = createWrkMast(107, 21L, locDetl.getLocNo(), agvBasDevp.getDevNo(), agvLocDetl.getZpallet(), now, userId); + //鐢熸垚宸ヤ綔鏄庣粏妗� + createWrkDetlReWrite(locDetl.getMatnr(),wrkMast.getWrkNo(),null,locDetl.getBatch(),locDetl.getCount(),wrkMast.getBarcode(),now,userId); + //淇敼搴撲綅淇℃伅 + updateAgvLocMast(agvLocMast,"P"); + //淇敼绔欑偣淇℃伅 + updateAgvBasDevp(agvBasDevp,"S"); + + }); + + } + + /* + 搴撲綅绉昏浆 + */ + @Transactional + public void locMove(String sourceLocNo, String targetLocNo, Long userId) { + AgvLocMast sourceLocMast = agvLocMastService.selectById(sourceLocNo); + AgvLocMast targetLocMast = agvLocMastService.selectById(targetLocNo); + AgvLocDetl sourceLocDetl = agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("loc_no", sourceLocMast.getLocNo())); + + if(!sourceLocMast.getLocSts().equals("F")){ + throw new CoolException(sourceLocMast.getLocNo() + "婧愬簱浣嶅嚭搴撳け璐ワ紝鐘舵�侊細"+sourceLocMast.getLocSts$()); + } + if(!targetLocMast.getLocSts().equals("O")){ + throw new CoolException("绉昏浆澶辫触锛岀洰鏍囧簱浣嶇姸鎬侊細"+targetLocMast.getLocSts$()); + } + + Date now = new Date(); + //鐢熸垚绉诲簱宸ヤ綔妗� + AgvWrkMast wrkMast = createWrkMast(11, 21L, sourceLocNo, targetLocNo, sourceLocDetl.getZpallet(), now, userId); + //鐢熸垚宸ヤ綔鍏氭槑缁� + createWrkDetlReWrite(sourceLocDetl.getMatnr(),wrkMast.getWrkNo(),null,sourceLocDetl.getBatch(),sourceLocDetl.getAnfme(),sourceLocDetl.getZpallet(),now,userId); + //淇敼鐩爣搴撲綅鐘舵�� + updateAgvLocMast(targetLocMast,"S"); + //淇敼鍘熷簱浣嶇姸鎬� + updateAgvLocMast(sourceLocMast,"R"); + } + + /* + 绌烘澘鍏ュ簱 + */ + @Transactional + public String emptyPlateIn(String sourceStaion, Long userId) { + Date now = new Date(); + // 婧愮珯鐐圭姸鎬佹娴� + AgvBasDevp agvBasDevp = agvBasDevpService.selectById(sourceStaion); + if(!agvBasDevp.getLocSts().equals("O")){ + throw new CoolException("褰撳墠宸ヤ綔浣嶇姸鎬佷负" + agvBasDevp.getLocSts()+",鏃犳硶杩涜绌烘澘鍏ュ簱"); + } + // 妫�绱㈠簱浣� + AgvLocMast locMast = agvCommonService.getLocNo(null, agvBasDevp.getFloor()); + // 鐢熸垚宸ヤ綔妗� 10.绌烘澘鍏ュ簱 + createWrkMast(10,201L,agvBasDevp.getDevNo(),locMast.getLocNo(),null,now,userId); + //鏇存柊婧愮珯鐐圭姸鎬� + updateAgvBasDevp(agvBasDevp,"R"); + //鏇存柊鐩爣搴撲綅鐘舵�� + updateAgvLocMast(locMast,"S"); + return locMast.getLocNo(); + } + + /* + 绌烘澘鍑哄簱 + */ + @Transactional + public void emptyPlateOut(EmptyPlateOutParam param, Long userId) { + Date now = new Date(); + //鍒ゆ柇鎵�閫夊伐浣滅珯绌轰綑宸ヤ綔浣嶆暟閲忔槸鍚︽弧瓒冲嚭搴撴暟閲� + List<AgvBasDevp> agvBasDevpList = agvBasDevpService.selectList(new EntityWrapper<AgvBasDevp>() + .eq("station_code", param.getStationCode()) + .eq("loc_sts","O")); + if(agvBasDevpList.size() < param.getLocNos().size()){ + throw new CoolException("褰撳墠宸ヤ綔绔欏彲鍑哄簱宸ヤ綔浣嶆暟閲忎负"+ agvBasDevpList.size() + "锛屽皬浜庤鍑哄簱鐨勫簱浣嶆暟閲忥紝璇烽噸鏂伴�夋嫨鍑哄簱搴撲綅"); + } + param.getLocNos().forEach(locNo -> { + AgvLocMast agvLocMast = agvLocMastService.selectById(locNo); + if(!agvLocMast.getLocSts().equals("D")){ + throw new CoolException(agvLocMast.getLocNo() + "搴撲綅鐘舵�佸凡缁忎笉涓篋.绌烘《/绌烘爤鏉匡紝璇烽噸鏂伴�夋嫨搴撲綅杩涜绌烘澘鍑哄簱"); + } + //妫�绱㈠伐浣滀綅 + AgvBasDevp agvBasDevp = agvBasDevpService.selectOne(new EntityWrapper<AgvBasDevp>() + .eq("station_code", param.getStationCode()) + .eq("loc_sts", "O")); + //鐢熸垚宸ヤ綔妗� + createWrkMast(110,21L,locNo,agvBasDevp.getDevNo(),null,now,userId); + //淇敼婧愬簱浣嶇姸鎬� + updateAgvLocMast(agvLocMast,"R"); + //淇敼鐩爣宸ヤ綔浣嶇姸鎬� + updateAgvBasDevp(agvBasDevp,"S"); }); } @@ -175,7 +298,7 @@ */ private void updateAgvLocMast(AgvLocMast locMast, String locSts){ locMast.setLocSts(locSts); - agvLockMastService.updateById(locMast); + agvLocMastService.updateById(locMast); } /* diff --git a/src/main/java/com/zy/asrs/service/impl/AllLocDetlServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AllLocDetlServiceImpl.java new file mode 100644 index 0000000..6484393 --- /dev/null +++ b/src/main/java/com/zy/asrs/service/impl/AllLocDetlServiceImpl.java @@ -0,0 +1,11 @@ +package com.zy.asrs.service.impl; + +import com.baomidou.mybatisplus.service.impl.ServiceImpl; +import com.zy.asrs.entity.AllLocDetl; +import com.zy.asrs.mapper.AllLocDetlMapper; +import com.zy.asrs.service.AllLocDetlService; +import org.springframework.stereotype.Service; + +@Service +public class AllLocDetlServiceImpl extends ServiceImpl<AllLocDetlMapper, AllLocDetl> implements AllLocDetlService { +} diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java index a706936..cc08129 100644 --- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java @@ -34,14 +34,17 @@ /* - 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 锛�1.鍏ュ簱 || 53锛屾嫞鏂欏叆搴�)鐨勬暟鎹� + 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 锛�1.鍏ュ簱 || 53锛屾嫞鏂欏叆搴� || 57.鐩樼偣鍏ュ簱 || 10.绌烘澘鍏ュ簱 || 11.搴撴牸绉昏浇)鐨勬暟鎹� */ @Scheduled(cron = "0/5 * * * * ? ") public void excutePutwayWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("wrk_sts", 205) .andNew().eq("io_type",53) - .or().eq("io_type",1)); + .or().eq("io_type",1) + .or().eq("io_type",57) + .or().eq("io_type",10) + .or().eq("io_type",11)); if(!Cools.isEmpty(agvWrkMastList)){ agvWrkMastList.stream().forEach(agvWrkMast -> { ReturnT<String> returnT = agvWrkMastHandler.completedPutWayWrk(agvWrkMast); @@ -50,13 +53,14 @@ } /* - 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 涓� 101鍑哄簱绫诲瀷鐨勬暟鎹� + 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负206.瀹瑰櫒绂诲満瀹屾垚 涓� (101.鍑哄簱 || 110.绌烘澘鍑哄簱) */ @Scheduled(cron = "0/5 * * * * ? ") public void excuteCarryWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() - .eq("wrk_sts", 207) - .eq("io_type",101)); + .eq("wrk_sts", 206) + .andNew().eq("io_type",110) + .or().eq("io_type",101)); if(!Cools.isEmpty(agvWrkMastList)){ agvWrkMastList.stream().forEach(agvWrkMast -> { ReturnT<String> returnT = agvWrkMastHandler.completedCarryWrk(agvWrkMast); @@ -66,15 +70,17 @@ /* putaway锛氫笂鏋� + 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负201.鐢熸垚鍏ュ簱浠诲姟ID 涓�(鍑哄簱绫诲瀷涓� 53.鎷f枡鍐嶅叆搴� || 1.鍏ュ簱 || 10.绌烘澘鍏ュ簱鏍� || 57.鐩樼偣鍐嶅叆搴�)鐨勬暟鎹� */ @Scheduled(cron = "0/5 * * * * ? ") public void startPutwayWrk(){ - List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) ,new EntityWrapper<AgvWrkMast>() - .eq("wrk_sts", 201) //201.鐢熸垚鍏ュ簱浠诲姟ID - .andNew().eq("io_type", 53).or() //53.鎷f枡鍐嶅叆搴� - .eq("io_type", 1)).getRecords(); + .eq("wrk_sts", 201) + .andNew().eq("io_type", 53) + .or().eq("io_type", 1) + .or().eq("io_type", 10) + .or().eq("io_type", 57)).getRecords(); if(!Cools.isEmpty(agvWrkMastList)){ try { @@ -87,15 +93,18 @@ /* carry锛氭惉杩愶紝缁熸寚鍑哄簱銆佺Щ搴撱�佺偣鍒扮偣鎼繍绛� + 瀹氭椂澶勭悊AGV宸ヤ綔妗d腑宸ヤ綔鐘舵�佷负21.鐢熸垚鍑哄簱浠诲姟 涓�(鍑哄簱绫诲瀷涓� 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 11.搴撴牸绉绘牻 || 110.绌烘澘鍑哄簱 || 107.鐩樼偣鍑哄簱)鐨勬暟鎹� */ @Scheduled(cron = "0/5 * * * * ? ") public void startCarryWrk(){ - List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectPage(new Page<>(1, 50) ,new EntityWrapper<AgvWrkMast>() - .eq("wrk_sts", 21) //21.鐢熸垚鍑哄簱浠诲姟 - .andNew().eq("io_type", 101).or() - .eq("io_type", 103)).getRecords(); + .eq("wrk_sts", 21) + .andNew().eq("io_type", 101) + .or().eq("io_type", 103) + .or().eq("io_type", 11) + .or().eq("io_type", 110) + .or().eq("io_type", 107)).getRecords(); if(!Cools.isEmpty(agvWrkMastList)){ try { diff --git a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java index 8084635..c49c3ec 100644 --- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java @@ -46,11 +46,16 @@ String barcode = agvWrkMast.getBarcode(); String orderNo = getOrderNoByWrkNo(wrkNo); - //淇敼宸ヤ綔妗g姸鎬佷负206.搴撳瓨鏇存柊瀹屾垚 - agvWrkMast.setWrkSts(206L); + //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚 + agvWrkMast.setWrkSts(207L); agvWrkMastService.updateById(agvWrkMast); - //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱 - agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F"); + if(agvWrkMast.getIoType() == 10){ + // 绌烘澘鍏ュ簱 璁剧疆搴撲綅鐘舵�佷负D.绌烘《/绌烘爤鏉� + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D"); + }else{ + //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱 + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F"); + } //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� agvWrkMastLogService.save(wrkNo); //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� @@ -59,6 +64,7 @@ agvWrkMastService.deleteById(wrkNo); //鍒犻櫎AGV宸ヤ綔鏄庣粏妗� agvWrkDetlService.delete(new EntityWrapper<AgvWrkDetl>().eq("wrk_no",wrkNo)); + //绫诲瀷涓哄嚭搴撴椂 if(agvWrkMast.getIoType() == 1){ //鏇存柊鐩爣搴撲綅鏄庣粏 agvLocDetlService.addLocDetlInfo(agvWrkMast.getLocNo(),wrkNo); @@ -66,7 +72,13 @@ agvWaitPakinLogService.save(barcode); //鍒犻櫎鍏ュ簱閫氱煡妗� agvWaitPakinService.delete(new EntityWrapper<AgvWaitPakin>().eq("zpallet",barcode)); - + } + //绫诲瀷涓哄簱浣嶇Щ杞椂 + if(agvWrkMast.getIoType() == 11){ + //鏇存柊搴撳瓨鏄庣粏 + agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); + //淇敼婧愬簱浣嶇姸鎬佷负O + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); } if(!isJSON(orderNo)){ //妫�鏌ヨ鍗曟槸鍚﹀凡瀹屾垚 @@ -82,17 +94,21 @@ return SUCCESS; } + @Transactional public ReturnT<String> completedCarryWrk(AgvWrkMast agvWrkMast) { int wrkNo = agvWrkMast.getWrkNo(); String orderNo = getOrderNoByWrkNo(wrkNo); - //淇敼宸ヤ綔妗g姸鎬佷负206.搴撳瓨鏇存柊瀹屾垚 - agvWrkMast.setWrkSts(206L); + //淇敼宸ヤ綔妗g姸鎬佷负207.搴撳瓨鏇存柊瀹屾垚 + agvWrkMast.setWrkSts(207L); agvWrkMastService.updateById(agvWrkMast); //淇敼婧愬簱浣嶇姸鎬佷负O agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); - //鏇存柊鐩爣搴撲綅鏄庣粏 - agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); + if(agvWrkMast.getIoType() == 101){ + //鏇存柊鐩爣搴撲綅鏄庣粏 101.鍑哄簱 鍒犻櫎婧愬簱浣嶅簱瀛樻槑缁� + agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); + } + //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� agvWrkMastLogService.save(wrkNo); //鐢熸垚AGV宸ヤ綔鏄庣粏鍘嗗彶妗� @@ -124,7 +140,7 @@ if(code == 0){ agvWrkMastList.forEach(agvWrkMast -> { //202.RCS鍙栬揣涓� - agvWrkMast.setWrkSts((long)202); + agvWrkMast.setWrkSts(202L); agvWrkMastService.updateById(agvWrkMast); if(agvWrkMast.getIoType() == 1){ //淇敼AGV鍏ュ簱閫氱煡妗g姸鎬佸叆鍑虹姸鎬佷负Y @@ -146,7 +162,7 @@ if(code == 0){ agvWrkMastList.forEach(agvWrkMast -> { //202.RCS鍙栬揣涓� - agvWrkMast.setWrkSts((long)202); + agvWrkMast.setWrkSts(202L); agvWrkMastService.updateById(agvWrkMast); }); //agvWrkMastService.updateBatchById(agvWrkMastList); @@ -159,16 +175,10 @@ private String getOrderNoByWrkNo(int wrkNo){ AgvWrkDetl agvWrkDetl = agvWrkDetlService.selectOne(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkNo)); + if(Cools.isEmpty(agvWrkDetl)){ + return null; + } return agvWrkDetl.getOrderNo(); - } - - public static void main(String[] args) { - String order = "[{\"anfme\":50.0,\"orderNo\":\"CS110011001111\"},{\"anfme\":50.0,\"orderNo\":\"CS110011001110\"}]"; - List<Map> maps = JSONArray.parseArray(order, Map.class); - maps.forEach(map -> { - Object orderNo = map.get("orderNo"); - System.out.println(orderNo ); - }); } private boolean isJSON(String str) { diff --git a/src/main/java/com/zy/asrs/utils/Utils.java b/src/main/java/com/zy/asrs/utils/Utils.java index 250745d..078066f 100644 --- a/src/main/java/com/zy/asrs/utils/Utils.java +++ b/src/main/java/com/zy/asrs/utils/Utils.java @@ -168,6 +168,16 @@ } /** + * 閫氳繃搴撲綅鍙疯幏鍙� 灞� + */ + public static int getAgvLev(String locNo) { + if (!Cools.isEmpty(locNo)) { + return Integer.parseInt(locNo.substring(11, 13)); + } + throw new RuntimeException("搴撲綅瑙f瀽寮傚父"); + } + + /** * 褰撴绱㈠埌鍙屾繁搴撲綅鐨勬祬搴撲綅鏃讹紝濡傛灉娣卞簱浣嶆棤璐э紝鍒欐斁鍏ュ搴旂殑娣卞簱浣� */ public static void toDeepIfEmptyByShallow(String shallowLoc) { diff --git a/src/main/java/com/zy/common/model/AgvBasDevpDto.java b/src/main/java/com/zy/common/model/AgvBasDevpDto.java index 0f0047f..1d4e2fb 100644 --- a/src/main/java/com/zy/common/model/AgvBasDevpDto.java +++ b/src/main/java/com/zy/common/model/AgvBasDevpDto.java @@ -18,4 +18,8 @@ private AgvWrkDetl agvWrkDetl; + private boolean containerMoveOutFlag; + + private boolean pickInFlag; + } diff --git a/src/main/java/com/zy/common/service/AgvCommonService.java b/src/main/java/com/zy/common/service/AgvCommonService.java index 9049ce8..579de34 100644 --- a/src/main/java/com/zy/common/service/AgvCommonService.java +++ b/src/main/java/com/zy/common/service/AgvCommonService.java @@ -72,9 +72,11 @@ AgvLocMast locMast = null; //搴撲綅瑙勫垯 - locMast = getLocByLocRule(agvWaitPakinList.get(0),floor); - if(!Cools.isEmpty(locMast)){ - return locMast; + if(!Cools.isEmpty(agvWaitPakinList)){ + locMast = getLocByLocRule(agvWaitPakinList.get(0),floor); + if(!Cools.isEmpty(locMast)){ + return locMast; + } } // 闈犺繎鎽嗘斁瑙勫垯 --- 鐩稿悓璁㈠崟鍙�, 鍚屽ぉ鍚岃鏍肩墿鏂� diff --git a/src/main/resources/mapper/ViewStayTimeMapper.xml b/src/main/resources/mapper/ViewStayTimeMapper.xml index 7c9b42d..b4fbba3 100644 --- a/src/main/resources/mapper/ViewStayTimeMapper.xml +++ b/src/main/resources/mapper/ViewStayTimeMapper.xml @@ -90,6 +90,51 @@ ) a </select> +<!-- 鍒嗛〉鏌ヨAGV鍜屽洓椤瑰簱鎵�鏈変俊鎭� --> +<select id="queryAllViewStayTimeList" parameterType="com.zy.asrs.entity.ViewStayTimeBean" resultType="com.zy.asrs.entity.ViewStayTimeBean"> + select + * + from ( + select + ROW_NUMBER() over (order by stay_time desc) as row + , * + from + ( + SELECT + GETDATE() AS today + , CONVERT(decimal, DATEDIFF(second,all_loc_detl.appe_time, GETDATE()) / 86400.0, 9) AS stay_time + , all_loc_detl.* + FROM all_loc_detl + where 1=1 + <include refid="viewStayTimeConditionSql"></include> + ) t + left join (select matnr as c ,store_max_date,store_max,store_min from man_mat) b + on t.matnr = b.c + left join (select matnr as f,sum(asr_loc_detl.anfme) as sum_qty from asr_loc_detl group by asr_loc_detl.matnr ) as z + on z.f= b.c + + ) a where a.row between ((#{pageNumber}-1)*#{pageSize}+1) and (#{pageNumber}*#{pageSize}) +</select> +<select id="getAllViewStayTimeCount" parameterType="com.zy.asrs.entity.ViewStayTimeBean" resultType="Integer"> + select + count(1) + from ( + select + ROW_NUMBER() over (order by stay_time desc) as row + , * + from + ( + SELECT + GETDATE() AS today + , CONVERT(decimal, DATEDIFF(second,all_loc_detl.appe_time, GETDATE()) / 86400.0, 9) AS stay_time + , all_loc_detl.* + FROM all_loc_detl + where 1=1 + <include refid="viewStayTimeConditionSql"></include> + ) t + ) a +</select> + <!-- 涓嶅垎椤垫煡璇㈡墍鏈変俊鎭紝鐢ㄤ簬excel瀵煎嚭 --> <select id="getViewStayTimeAll" parameterType="com.zy.asrs.entity.ViewStayTimeBean" resultType="com.zy.asrs.entity.ViewStayTimeBean"> select @@ -112,4 +157,26 @@ ) a </select> +<!-- 涓嶅垎椤垫煡璇GV鍜屽洓椤瑰簱鎵�鏈変俊鎭紝鐢ㄤ簬excel瀵煎嚭 --> +<select id="getAllViewStayTimeAll" parameterType="com.zy.asrs.entity.ViewStayTimeBean" resultType="com.zy.asrs.entity.ViewStayTimeBean"> + SELECT + * + FROM + ( + SELECT + ROW_NUMBER ( ) OVER ( ORDER BY stay_time DESC ) AS row, * + FROM + ( + SELECT + GETDATE( ) AS today, + CONVERT ( DECIMAL, DATEDIFF( SECOND, all_loc_detl.appe_time, GETDATE( ) ) / 86400.0, 9 ) AS stay_time, + dbo.all_loc_detl.* + FROM + all_loc_detl + where 1=1 + <include refid="viewStayTimeConditionSql"></include> + ) t + ) a +</select> + </mapper> diff --git a/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js b/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js new file mode 100644 index 0000000..7ddff9f --- /dev/null +++ b/src/main/webapp/static/js/agvLocDetlStatis/locDetlStatis.js @@ -0,0 +1,256 @@ +var pageCurr; +function getCol() { + var cols = [ + {field: 'anfme', align: 'center',title: '搴撳瓨鏁伴噺', style: 'font-weight: bold'} + ]; + arrRemove(detlCols, "field", "anfme") + arrRemove(detlCols, "field", "zpallet") + cols.push.apply(cols, detlCols); + // cols.push({field: 'anfme', align: 'center',title: '鏁伴噺', style: 'font-weight: bold'} + // ) + return cols; +} + +layui.use(['table','laydate', 'form'], function(){ + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locDetlStatis', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/agv/locDetl/statis/auth', + page: true, + limit: 20, + limits: [20, 30, 50, 100, 200, 500], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + form.on('checkbox(tableCheckbox)', function (data) { + var _index = $(data.elem).attr('table-index')||0; + if(data.elem.checked){ + res.data[_index][data.value] = 'Y'; + }else{ + res.data[_index][data.value] = 'N'; + } + }); + /** + * 鏄剧ず搴撳瓨鎬绘暟閲� + */ + $.ajax({ + url: baseUrl+"/agv/locDetl/count", + headers: {'token': localStorage.getItem('token')}, + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + $("#countNum").text(res.data + '涓�'); + } + }); + + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + table.on('sort(locDetlStatis)', function (obj) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + searchData['orderByField'] = obj.field; + searchData['orderByType'] = obj.type; + tableIns.reload({ + where: searchData, + page: { + curr: 1 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + } + }); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(locDetlStatis)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch(obj.event) { + case 'exportAll': + layer.closeAll(); + layer.load(1, {shade: [0.1,'#fff']}); + location.href = baseUrl + "/agv/locDetl/statis/export"; + layer.closeAll('loading'); + break; + case 'exportData': + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ + var titles=[]; + var fields=[]; + obj.config.cols[0].map(function (col) { + if (col.type === 'normal' && col.hide === false && col.toolbar == null) { + titles.push(col.title); + fields.push(col.field); + } + }); + var exportData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + exportData[this.name] = this.value; + }); + var param = { + 'locDetl': exportData, + 'fields': fields + }; + $.ajax({ + url: baseUrl+"/agv/locDetl/export/auth", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType:'json', + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.closeAll(); + if (res.code === 200) { + table.exportFile(titles,res.data,'xls'); + } else if (res.code === 403) { + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg) + } + } + }); + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(locDetlStatis)', function(obj){ + var data = obj.data; + switch (obj.event) { + // 璇︽儏 + case 'detail': + layer.open({ + type: 2, + title: '璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function(layero, index){ + setFormVal(layer.getChildFrame('#detail', index), data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + + } + }); + + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + pageCurr = 1; + tableReload(false); + }); + + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + tableReload(false); + }); + + // 鏃堕棿閫夋嫨鍣� + layDate.render({ + elem: '#modiTime\\$', + type: 'datetime' + }); + layDate.render({ + elem: '#appeTime\\$', + type: 'datetime' + }); + + +}); + +// 鍏抽棴鍔ㄤ綔 +$(document).on('click','#data-detail-close', function () { + parent.layer.closeAll(); +}); + +function tableReload(child) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + (child ? parent.tableIns : tableIns).reload({ + where: searchData, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + if (res.data.length === 0 && count !== 0) { + tableIns.reload({ + where: searchData, + page: { + curr: pageCurr-1 + } + }); + pageCurr -= 1; + } + limit(child); + } + }); +} + +function detailScreen(index) { + var detail = layer.getChildFrame('#data-detail', index); + var height = detail.height()+60; + if (height > ($(window).height()*0.9)) { + height = ($(window).height()*0.8); + } + layer.style(index, { +// top: (($(window).height()-height)/3)+"px", + height: height+'px' + }); +} + +$('body').keydown(function () { + if (event.keyCode === 13) { + $("#search").click(); + } +}); diff --git a/src/main/webapp/static/js/agvPakStore/emptyIn.js b/src/main/webapp/static/js/agvPakStore/emptyIn.js new file mode 100644 index 0000000..ce508e8 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/emptyIn.js @@ -0,0 +1,62 @@ +var pageCurr; +layui.use(['table','laydate', 'form'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + + getInBound(); + limit(); + + // 鑾峰彇鍏ュ簱鍙� + function getInBound(){ + $.ajax({ + url: baseUrl+"/agv/available/empty/put/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200){ + var tpl = $("#putSiteSelectTemplate").html(); + var template = Handlebars.compile(tpl); + var html = template(res); + $('#inSiteSelect').append(html); + form.render('select'); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg) + } + } + }) + } + + // 绌烘澘鍏ュ簱 + form.on('submit(inbound)', function (data) { + var inSite = $('#inSiteSelect').val(); + layer.confirm('璇风‘淇濊宸ヤ綔浣嶄笂宸叉斁鏈夌┖鏉�', function(){ + $.ajax({ + url: baseUrl+"/agv/empty/plate/in/start", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + data: {sourceStaNo: inSite}, + async: false, + success: function (res) { + if (res.code === 200){ + layer.msg("鍏ュ簱鍚姩鎴愬姛锛岀洰鏍囧簱浣嶏細" + res.data); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg) + } + } + }) + }); + + }); + + + +}) + diff --git a/src/main/webapp/static/js/agvPakStore/emptyOut.js b/src/main/webapp/static/js/agvPakStore/emptyOut.js new file mode 100644 index 0000000..23f2365 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/emptyOut.js @@ -0,0 +1,204 @@ +var pageCurr; + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'admin'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + + // 鑾峰彇鍑哄簱鍙� + function getOutBound(){ + // $.ajax({ + // url: baseUrl+"/agv/available/empty/put/site", + // headers: {'token': localStorage.getItem('token')}, + // method: 'POST', + // async: false, + // success: function (res) { + // if (res.code === 200){ + // var tpl = $("#takeSiteSelectTemplate").html(); + // var template = Handlebars.compile(tpl); + // var html = template(res); + // $('#staNoSelect').append(html); + // form.render('select'); + // } else if (res.code === 403){ + // top.location.href = baseUrl+"/"; + // }else { + // layer.msg(res.msg) + // } + // } + // }) + } + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locMast', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/agv/locMast/list/auth', + page: true, + limit: 16, + limits: [16, 30, 50, 100, 200, 500], + where: {loc_sts: "D",floor:$('#floorSelect option:selected').val()}, + even: true, + toolbar: '#toolbar', + defaultToolbar: ['filter'], + cellMinWidth: 50, + cols: [[ + {type: 'checkbox', fixed: 'left'} + ,{field: 'locNo', align: 'center',title: '搴撲綅鍙�',sort:true} + ,{field: 'locSts$', align: 'center',title: '搴撲綅鐘舵��',width:200} + // ,{field: 'whsType$', align: 'center',title: '搴撲綅绫诲瀷'} + ,{field: 'row1', align: 'center',title: '鎺�'} + ,{field: 'bay1', align: 'center',title: '鍒�'} + ,{field: 'lev1', align: 'center',title: '灞�'} + // ,{field: 'fullPlt', align: 'center',title: '婊℃澘', templet:function(row){ + // var html = "<input value='fullPlt' type='checkbox' disabled=鈥榙isabled鈥� lay-skin='primary' lay-filter='tableCheckbox' table-index='"+row.LAY_TABLE_INDEX+"'"; + // if(row.fullPlt === 'Y'){html += " checked ";} + // html += ">"; + // return html; + // },width:80} + ,{field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',event: 'modiUser'} + ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'} + ]], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + getOutBound(); + limit(); + form.on('checkbox(tableCheckbox)', function (data) { + var _index = $(data.elem).attr('table-index')||0; + if(data.elem.checked){ + res.data[_index][data.value] = 'Y'; + }else{ + res.data[_index][data.value] = 'N'; + } + }); + } + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(locMast)', function (obj) { + var data = table.checkStatus(obj.config.id).data; + switch (obj.event) { + case 'outbound': + var staNo = $("#staNoSelect").val(); + if (staNo === "" || staNo === null){ + layer.msg("璇烽�夋嫨鍑哄簱鍙�"); + return; + } + var locNos = []; + data.forEach(function(elem) { + locNos.push(elem.locNo); + }); + if (data.length === 0){ + layer.msg('璇疯嚦灏戦�変腑涓�琛屾暟鎹�'); + } else { + $.ajax({ + url: baseUrl+"/agv/empty/plate/out/start", + headers: {'token': localStorage.getItem('token')}, + data: { + stationCode: staNo, + locNos: locNos + }, + method: 'POST', + traditional:true, + success: function (res) { + if (res.code === 200){ + tableReload(); // 閲嶈浇琛ㄦ牸 + getOutBound(); // 閲嶈浇鍑哄簱鍙� + layer.msg(res.msg); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg) + } + } + }); + } + break; + } + }); + + function changeStation(){ + var floor = $('#floorSelect option:selected').val(); + $('#staNoSelect').empty(); + if(floor == 1){ + $('#staNoSelect').append("<option value=CS-101>CS-101</option>"); + $('#staNoSelect').append("<option value=CS-102>CS-102</option>") + } + if(floor == 3){ + $('#staNoSelect').append("<option value=CS-305>CS-305</option>"); + $('#staNoSelect').append("<option value=CS-306>CS-306</option>") + $('#staNoSelect').append("<option value=CS-307>CS-307</option>") + } + form.render(); + } + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + pageCurr = 1; + $('#detlTable').css("display", 'none'); + tableReload(false); + getOutBound(); + changeStation(); + }); + + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + $('#detlTable').css("display", 'none'); + tableReload(false); + getOutBound(); + }); + +}) + +function tableReload(child) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + (child ? parent.tableIns : tableIns).reload({ + where: searchData, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + if (res.data.length === 0 && count !== 0) { + tableIns.reload({ + where: searchData, + page: { + curr: pageCurr-1 + } + }); + pageCurr -= 1; + } + limit(child); + } + }); +} diff --git a/src/main/webapp/static/js/agvPakStore/locCheckOut.js b/src/main/webapp/static/js/agvPakStore/locCheckOut.js new file mode 100644 index 0000000..0f5d610 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/locCheckOut.js @@ -0,0 +1,161 @@ +var locDetlLayerIdx; +var tableIns; +var form; +var locDetlData = []; +function getCol() { + var cols = [ + {field: 'locNo', align: 'center',title: '搴撲綅鍙�', merge: true, style: 'font-weight: bold'} + ]; + cols.push.apply(cols, detlCols); + return cols; +} + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'admin', 'tableMerge'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + form = layui.form; + var admin = layui.admin; + var tableMerge = layui.tableMerge; + + tableIns = table.render({ + elem: '#chooseData', + headers: {token: localStorage.getItem('token')}, + data: [], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + done: function(res, curr, count) { + tableMerge.render(this); + limit(); + getOutBound(); + } + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(chooseData)', function (obj) { + switch (obj.event) { + case 'outbound': + if (locDetlData.length === 0){ + layer.msg('璇峰厛娣诲姞鐩樼偣搴撳瓨', {icon: 2}); + } else { + var staNo = $("#staNoSelect").val(); + if (staNo === "" || staNo === null){ + layer.msg("璇烽�夋嫨鐩樼偣绔�", {icon: 2}); + return; + } + let param = { + station: staNo, + locDetls: locDetlData + } + $.ajax({ + url: baseUrl+"/agv/locCheck/out/start", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + if (res.code === 200){ + locDetlData = []; + tableIns.reload({data: locDetlData}); + layer.msg(res.msg, {icon: 1}); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg, {icon: 2}) + } + } + }); + } + break; + } + }); + + // 鑾峰彇鍑哄簱鍙� + function getOutBound(){ + $.ajax({ + url: baseUrl+"/available/take/check/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200){ + var tpl = $("#takeSiteSelectTemplate").html(); + var template = Handlebars.compile(tpl); + var html = template(res); + $('#staNoSelect').append(html); + form.render('select'); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg) + } + } + }) + } + + $(document).on('click','#mat-query', function () { + let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false}); + locDetlLayerIdx = layer.open({ + type: 2, + title: false, + closeBtn: false, + maxmin: false, + area: ['90%', '85%'], + shadeClose: true, + content: 'locDetlCheckQuery.html', + success: function(layero, index){ + layer.close(loadIndex); + } + }); + }) + +}) + +// 娣诲姞琛ㄦ牸鏁版嵁 +function addTableData(data,floor) { + if(locDetlData[0]){ + if(floor != locDetlData[0].locNo.split('@')[1]){ + return false; + } + } + + for (let i=0;i<data.length;i++){ + let pass = false; + for (let j=0;j<locDetlData.length;j++){ + if (data[i].matnr === locDetlData[j].matnr && data[i].batch === locDetlData[j].batch && data[i].locNo === locDetlData[j].locNo) { + pass = true; + break; + } + } + if (pass) { + data.splice(i--, 1); + } else { + data[i]["count"] = data[i]["anfme"]; + } + + } + locDetlData.push.apply(locDetlData, data); + tableIns.reload({data: locDetlData}); + layer.close(locDetlLayerIdx); + return true; +} + +// 娣诲姞鐩樼偣绔欓�夋嫨 +function addStationData(data) { + $('#staNoSelect').empty(); + if(data == 1){ + $('#staNoSelect').append("<option value=CS-101>CS-101</option>"); + $('#staNoSelect').append("<option value=CS-102>CS-102</option>") + } + if(data == 3){ + $('#staNoSelect').append("<option value=CS-305>CS-305</option>"); + $('#staNoSelect').append("<option value=CS-306>CS-306</option>") + $('#staNoSelect').append("<option value=CS-307>CS-307</option>") + } + form.render(); +} diff --git a/src/main/webapp/static/js/agvPakStore/locMove.js b/src/main/webapp/static/js/agvPakStore/locMove.js new file mode 100644 index 0000000..0f2a120 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/locMove.js @@ -0,0 +1,135 @@ +var pageCurr = 0; +var tableIns; +function getCol() { + var cols = [ + {field: 'locNo', align: 'center',title: '搴撲綅鍙�', merge: true, style: 'font-weight: bold'} + ]; + cols.push.apply(cols, detlCols); + return cols; +} + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'tableMerge'], function() { + var table = layui.table; + var $ = layui.jquery; + var form = layui.form; + var tableMerge = layui.tableMerge; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locMatCode', + headers: {token: localStorage.getItem('token')}, + // url: baseUrl+'/locDetl/list/auth', + data:[], + page: true, + limit: 16, + limits: [16, 50, 100, 200, 500], + even: true, + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + tableMerge.render(this); + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + clearSelect(); + } + }); + +}); + +// 鎼滅储搴撲綅鐗╂枡 +function getLoc(el) { + tableIns.reload({ + url: baseUrl+'/agv/locDetl/list/auth' + , where: {loc_no: el.value} + , done:function (res) { + limit(); + clearSelect(); + // 鑾峰彇鍚屼竴鍫嗗灈鏈虹殑绌哄簱浣� + http.post(baseUrl + "/agv/group/empty/stock", {sourceLocNo: el.value}, function (res) { + if (res.data != null) { + var tpl = $("#emptyLocStock").html(); + var template = Handlebars.compile(tpl); + var html = template(res); + $('#targetLocNo').append(html); + layui.form.render('select'); + } + }); + } + }); +} + +// 绉诲簱鍚姩 +function locMove() { + var sourceLocNo = $("#sourceLocNo").val(); + var targetLocNo = $("#targetLocNo").val(); + if (sourceLocNo === null || sourceLocNo === ""){ + $("#sourceLocNo").css("border-color", "red"); + setTimeout(function () { + $("#sourceLocNo").css("border-color", "#b8b8b8"); + }, 1000); + layer.msg("璇疯緭鍏ユ簮搴撲綅"); + return; + } + if (targetLocNo === null || targetLocNo === "") { + $(".layui-select-title .layui-input").css("border-color", "red"); + setTimeout(function () { + $(".layui-select-title .layui-input").css("border-color", "#b8b8b8"); + }, 1000); + layer.msg("璇疯緭鍏ョ洰鏍囧簱浣�"); + return; + } + $.ajax({ + url: baseUrl + "/agv/loc/move/start", + headers: {'token': localStorage.getItem('token')}, + dataType: 'json', + data: { + sourceLocNo: sourceLocNo, + targetLocNo: targetLocNo + }, + method: 'POST', + success: function (res) { + if (res.code === 200) { + $("#sourceLocNo").val(""); + $("#targetLocNo").empty(); + layui.form.render('select'); + tableIns.reload({ + data: [], + url: '', + done:function (res) { + limit();clearSelect(); + } + }); + layer.msg(res.msg); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg); + } + } + }) +} + +function clearSelect() { + $("#targetLocNo").empty(); + layui.form.render('select'); +} diff --git a/src/main/webapp/static/js/agvPakStore/pakStore.js b/src/main/webapp/static/js/agvPakStore/pakStore.js new file mode 100644 index 0000000..dd0f6cb --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/pakStore.js @@ -0,0 +1,202 @@ +var matCodeLayerIdx; +var initCountVal = 0; +var matCodeData = []; +function getCol() { + var cols = [ + {fixed: 'left', field: 'anfme', title: '鏁伴噺锛堝繀濉級', align: 'center', edit:'text', width: 120, style:'color: blue;font-weight: bold'}, + {field: 'batch', title: '搴忓垪鐮侊紙閫夊~锛�', align: 'center', edit:'text', width: 200, style:'color: block;font-weight: bold'} + ]; + cols.push.apply(cols, matCols); + cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80}) + return cols; +} + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['admin', 'table','laydate', 'form'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var form = layui.form; + var admin = layui.admin; + + tableIns = table.render({ + elem: '#chooseData', + data: [], + even: true, + limit: 500, + cellMinWidth: 50, + toolbar: '#toolbar', + cols: [getCol()], + done: function (res, curr, count) { + limit(); + getInBound(); + } + }); + + // 椤甸潰淇敼 + table.on('edit(chooseData)', function (obj) { + let index = obj.tr.attr("data-index"); + let data = matCodeData[index]; + let modify = true; + if (obj.field === 'anfme'){ + let vle = Number(obj.value); + if (isNaN(vle)) { + layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2}); + modify = false; + } else { + if (vle <= 0) { + layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2}); + modify = false; + } + } + } + if (modify) { + data[obj.field] = obj.value; + } + tableIns.reload({data: matCodeData}); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(chooseData)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + var data = checkStatus.data; + switch(obj.event) { + case 'comb': + // 鍒ゆ柇鏄惁瀛樺湪鐗╂枡 + if (matCodeData.length === 0) { + layer.msg("璇峰厛鎻愬彇鍟嗗搧", {icon: 2}); + return; + } + // 鍒ゆ柇鐗╂枡鏁伴噺鏄惁瀛樺湪寮傚父 + for (var i=0;i<matCodeData.length;i++){ + if (isNaN(matCodeData[i].anfme)) { + layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2}); + return; + } + if (matCodeData[i].anfme <= 0){ + layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2}); + return; + } + } + let devpNo = $('#putSiteSelect').val(); + if (isEmpty(devpNo)) { + layer.msg("璇烽�夋嫨鍏ュ簱绔�", {icon: 2}); + return; + } + $.ajax({ + url: baseUrl+"/full/store/put/start", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify({ + devpNo: Number(devpNo), + list: matCodeData + }), + contentType:'application/json;charset=UTF-8', + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200){ + layer.msg("鍏ュ簱鍚姩鎴愬姛锛岀洰鏍囧簱浣嶏細" + res.data, {icon: 1}); + matCodeData = []; + $('#focusMatByMat').val(""); + tableIns.reload({data: matCodeData,done:function (res) { limit(); getInBound();}}); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg, {icon: 2}) + } + } + }) + break; + default: + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(chooseData)', function(obj){ + switch (obj.event) { + case 'remove': + let index = obj.tr.attr("data-index"); + matCodeData.splice(index, 1); + tableIns.reload({data: matCodeData}); + break; + } + }); + + // 鑾峰彇鍙敤鍏ュ簱绔欑偣 + function getInBound() { + $.ajax({ + url: baseUrl + "/available/put/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + success: function (res) { + if (res.code === 200) { + var tpl = $("#putSiteSelectTemplate").html(); + var template = Handlebars.compile(tpl); + var html = template(res); + $('#putSiteSelect').append(html); + form.render('select'); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg, {icon: 2}) + } + } + }) + } + + // 鎻愬彇鐗╂枡 + $(document).on('click','#mat-query', function () { + let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false}); + matCodeLayerIdx = admin.open({ + type: 2, + title: false, + closeBtn: false, + maxmin: false, + area: ['90%', '85%'], + shadeClose: true, + content: 'matQuery.html', + success: function(layero, index){ + layer.close(loadIndex); + } + }); + }) + +}); + + + +// 鎵爜 +function focusMat(el) { + if (isEmpty(el.value)) { + return + } + $.ajax({ + url: baseUrl + "/mat/" + el.value + "/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200) { + matCodeData = []; + var param = new Array(); + param[0] = res.data; + addTableData(param); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg, {icon: 2}) + } + } + }) +} + +// 娣诲姞琛ㄦ牸鏁版嵁 +function addTableData(list) { + list.map(function (d) { + d['anfme'] = initCountVal; + }) + matCodeData.push.apply(matCodeData, list); + tableIns.reload({data: matCodeData}); + layer.close(matCodeLayerIdx); +} diff --git a/src/main/webapp/static/js/agvPakStore/stockAdjust.js b/src/main/webapp/static/js/agvPakStore/stockAdjust.js new file mode 100644 index 0000000..52d8db1 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/stockAdjust.js @@ -0,0 +1,241 @@ +var initCountVal = 0; +var initAnfmeVal = "-"; +var matCodeData = []; +var currLocNo; +var matCodeLayerIdx; +function getCol() { + var cols = [ + {fixed: 'left', field: 'count', title: '瀹為檯鏁伴噺', align: 'center', edit:'text', width: 120, style:'color: blue;font-weight: bold'} + ,{field: 'anfme', align: 'center',title: '鏁伴噺'} + ,{field: 'batch', align: 'center',title: '搴忓垪鐮侊紙缂栬緫锛�', edit: true, style: 'font-weight:bold'} + ]; + arrRemove(detlCols, "field", "anfme"); + arrRemove(detlCols, "field", "batch"); + cols.push.apply(cols, detlCols); + cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width:80}) + return cols; +} + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'admin'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + + tableIns = table.render({ + elem: '#chooseData', + data: [], + even: true, + limit: 500, + cellMinWidth: 50, + toolbar: '#toolbar', + cols: [getCol()], + done: function (res, curr, count) { + limit(); + } + }); + + // 椤甸潰淇敼 + table.on('edit(chooseData)', function (obj) { + let index = obj.tr.attr("data-index"); + let data = matCodeData[index]; + let modify = true; + if (obj.field === 'count'){ + let vle = Number(obj.value); + if (isNaN(vle)) { + layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2}); + modify = false; + } else { + if (vle <= 0) { + layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2}); + modify = false; + } + } + } + if (modify) { + data[obj.field] = obj.value; + } + tableIns.reload({data: matCodeData}); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(chooseData)', function (obj) { + switch(obj.event) { + case 'adjust': + if (isEmpty(currLocNo)) { + layer.msg("璇峰厛妫�绱㈠簱浣�", {icon: 2}) + inputTip($("#searchLocNo")); + return; + } + if (matCodeData.length === 0) { + layer.msg("璇峰厛娣诲姞鏄庣粏", {icon: 2}); + return; + } + for (var i=0;i<matCodeData.length;i++){ + if (isNaN(matCodeData[i].count)) { + layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2}); + return; + } + if (matCodeData[i].count < 0){ + layer.msg("鏁伴噺涓嶈兘灏忎簬闆�", {icon: 2}); + return; + } + } + layer.confirm('纭畾璋冩暣'+currLocNo+'搴撲綅鐨勬槑缁嗗悧锛�', {shadeClose: true}, function(){ + $.ajax({ + url: baseUrl+"/locDdetl/adjust/start", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify({ + locNo: currLocNo, + list: matCodeData + }), + contentType:'application/json;charset=UTF-8', + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200){ + layer.msg(currLocNo + res.msg, {icon: 1}); + init(currLocNo) + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg, {icon: 2}) + } + } + }) + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(chooseData)', function(obj){ + var data = obj.data; + switch (obj.event) { + case 'remove': + let index = obj.tr.attr("data-index"); + matCodeData.splice(index, 1); + tableIns.reload({data: matCodeData}); + break; + } + }); + + // 妫�绱簨浠� + form.on('submit(search)', function (data) { + let locNo = data.field.loc_no; + if (locNo === "") { + inputTip($("#searchLocNo")); + layer.msg("璇疯緭鍏ュ簱浣嶅彿"); + return; + } + init(locNo); + }); + + // 閲嶇疆浜嬩欢 + form.on('submit(reset)', function (data) { + reset(); + }); + + function init(locNo) { + http.post(baseUrl + "/locDetl/list/auth", {locNo: locNo,limit: 1000}, function (res) { + matCodeData = []; + matCodeData = res.data.records; + for (var i = 0; i<matCodeData.length; i++) { + matCodeData[i]["count"] = matCodeData[i]["anfme"]; + } + locTips(true, locNo); + tableReload(); + }) + } + + function reset() { + clearFormVal($('#search-box')); + matCodeData = []; + tableReload(); + locTips(false); + } + + // 閲嶈浇琛ㄦ牸 + function tableReload() { + tableIns.reload({data: matCodeData}); + } + + // 搴撲綅鎻愮ず妗� + function locTips(retrieve, locNo) { + if (retrieve) { + http.post(baseUrl+"/locMast/"+locNo+"/auth", null, function (res) { + let data = res.data; + if (data != null) { + $(".retrieve").show(); + $("#locMsg").html(locNo + " ,搴撲綅鐘舵�侊細" + data.locSts$); + $('.not-retrieve').hide(); + currLocNo = locNo; + } else { + layer.msg("璇疯緭鍏ユ湁鏁堝簱浣嶅彿", {icon: 2}); + $('.not-retrieve').show(); + $("#locMsg").html(""); + $(".retrieve").hide(); + currLocNo = null; + inputTip($("#searchLocNo")); + } + }) + } else { + $('.not-retrieve').show(); + $("#locMsg").html(""); + $(".retrieve").hide(); + currLocNo = null; + } + } + + $(document).on('click','#mat-query', function () { + if (isEmpty(currLocNo)) { + layer.msg("璇峰厛妫�绱㈠簱浣�") + inputTip($("#searchLocNo")); + return; + } + let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false}); + matCodeLayerIdx = admin.open({ + type: 2, + title: false, + closeBtn: false, + maxmin: false, + area: ['90%', '85%'], + shadeClose: true, + content: 'matQuery.html', + success: function(layero, index){ + layer.close(loadIndex); + } + }); + }) + +}) + +// 鎼滅储妗嗙┖鍊兼彁绀� +function inputTip(el) { + el.css("border-color", "red"); + setTimeout(function () { + el.css("border-color", "#b8b8b8"); + }, 1000); +} + +// 娣诲姞琛ㄦ牸鏁版嵁 +function addTableData(data) { + for (let i=0;i<data.length;i++){ + for (let j=0;j<matCodeData.length;j++){ + if (data[i].matnr === matCodeData[j].matnr && data[i].batch === matCodeData[j].batch) { + data.splice(i, 1); + break; + } else { + data[i]['anfme'] = initAnfmeVal; + data[i]['count'] = initCountVal; + } + } + } + matCodeData.push.apply(matCodeData, data); + tableIns.reload({data: matCodeData}); + layer.close(matCodeLayerIdx); +} diff --git a/src/main/webapp/static/js/agvPakStore/stockOut.js b/src/main/webapp/static/js/agvPakStore/stockOut.js new file mode 100644 index 0000000..d9b2580 --- /dev/null +++ b/src/main/webapp/static/js/agvPakStore/stockOut.js @@ -0,0 +1,177 @@ +var locDetlLayerIdx; +var locDetlData = []; +function getCol() { + var cols = [ + {field: 'count', align: 'center',title: '鍑哄簱鏁伴噺', edit:'text', width: 130, style:'color: blue;font-weight: bold'} + ,{field: 'anfme', align: 'center',title: '搴撳瓨鏁伴噺'} + ,{field: 'locNo$', align: 'center',title: '搴撲綅鍙�'} + ]; + arrRemove(detlCols, 'field', 'anfme'); + cols.push.apply(cols, detlCols); + cols.push({fixed: 'right', title:'鎿嶄綔', align: 'center', toolbar: '#operate', width: 80}) + return cols; +} + +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate', 'form', 'admin'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var form = layui.form; + var admin = layui.admin; + + tableIns = table.render({ + elem: '#chooseData', + headers: {token: localStorage.getItem('token')}, + data: [], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + limit: 500, + cols: [getCol()], + done: function(res, curr, count) { + limit(); + getOutBound(); + } + }); + + // 椤甸潰淇敼 + table.on('edit(chooseData)', function (obj) { + let index = obj.tr.attr("data-index"); + let data = locDetlData[index]; + let modify = true; + if (obj.field === 'count'){ + let vle = Number(obj.value); + if (isNaN(vle)) { + layer.msg("璇疯緭鍏ユ暟瀛�", {icon: 2}); + modify = false; + } else { + if (vle <= 0) { + layer.msg("鏁伴噺蹇呴』澶т簬闆�", {icon: 2}); + modify = false; + } + if (vle > Number(data.anfme)) { + layer.msg("鍑哄簱鏁伴噺涓嶅緱澶т簬搴撳瓨鏁伴噺", {icon: 2}); + modify = false; + } + } + } + if (modify) { + data[obj.field] = obj.value; + } + tableIns.reload({data: locDetlData}); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(chooseData)', function (obj) { + switch (obj.event) { + case 'outbound': + if (locDetlData.length === 0){ + layer.msg('璇峰厛鎻愬彇鍟嗗搧搴撳瓨', {icon: 2}); + } else { + var staNo = $("#staNoSelect").val(); + if (staNo === "" || staNo === null){ + layer.msg("璇烽�夋嫨鍑哄簱鍙�", {icon: 2}); + return; + } + let param = { + outSite: staNo, + locDetls: locDetlData + } + $.ajax({ + url: baseUrl+"/plate/out/start", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + if (res.code === 200){ + locDetlData = []; + tableIns.reload({data: locDetlData,done:function (res) {limit();getOutBound();}}); + layer.msg(res.msg, {icon: 1}); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg, {icon: 2}) + } + } + }); + } + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(chooseData)', function(obj){ + switch (obj.event) { + case 'remove': + let index = obj.tr.attr("data-index"); + locDetlData.splice(index, 1); + tableIns.reload({data: locDetlData}); + break; + } + }); + + // 鑾峰彇鍑哄簱鍙� + function getOutBound(){ + $.ajax({ + url: baseUrl+"/available/take/site", + headers: {'token': localStorage.getItem('token')}, + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200){ + var tpl = $("#takeSiteSelectTemplate").html(); + var template = Handlebars.compile(tpl); + var html = template(res); + $('#staNoSelect').append(html); + form.render('select'); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg) + } + } + }) + } + + + $(document).on('click','#mat-query', function () { + let loadIndex = layer.msg('璇锋眰涓�...', {icon: 16, shade: 0.01, time: false}); + locDetlLayerIdx = layer.open({ + type: 2, + title: false, + closeBtn: false, + maxmin: false, + area: ['90%', '85%'], + shadeClose: true, + content: 'locDetlQuery.html', + success: function(layero, index){ + layer.close(loadIndex); + } + }); + }) + +}) + +// 娣诲姞琛ㄦ牸鏁版嵁 +function addTableData(data) { + for (var i=0;i<data.length;i++){ + let pass = false; + for (var j=0;j<locDetlData.length;j++){ + if (data[i].matnr === locDetlData[j].matnr && data[i].batch === locDetlData[j].batch && data[i].locNo$ === locDetlData[j].locNo$) { + pass = true; + break; + } + } + if (pass) { + data.splice(i--, 1); + } else { + data[i]["count"] = data[i]["anfme"]; + } + } + locDetlData.push.apply(locDetlData, data); + tableIns.reload({data: locDetlData}); + layer.close(locDetlLayerIdx); +} diff --git a/src/main/webapp/static/js/allLocDetl/locDetl.js b/src/main/webapp/static/js/allLocDetl/locDetl.js new file mode 100644 index 0000000..073a915 --- /dev/null +++ b/src/main/webapp/static/js/allLocDetl/locDetl.js @@ -0,0 +1,601 @@ +var pageCurr; +var tableData; +function getCol() { + var cols = [ + {field: 'locNo', align: 'center',title: '搴撲綅鍙�'}, + {field: 'matnr', align: 'center',title: '鐗╂枡鍙�', sort:true} + ,{field: 'maktx', align: 'center',title: '鐗╂枡鍚嶇О', sort:true} + ,{field: 'orderNo', align: 'center',title: '鍗曟嵁缂栧彿', hide: false} + ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true} + ,{field: 'anfme', align: 'center',title: '鏁伴噺'} + ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜'} + + ,{field: 'specs', align: 'center',title: '瑙勬牸'} + ,{field: 'model', align: 'center',title: '閫氱敤鍨嬪彿', hide: true} + ,{field: 'color', align: 'center',title: '棰滆壊', hide: true} + ,{field: 'brand', align: 'center',title: '鍝佺墝', hide: true} + ,{field: 'unit', align: 'center',title: '鍗曚綅', hide: true} + ,{field: 'price', align: 'center',title: '鍗曚环', hide: true} + ,{field: 'sku', align: 'center',title: 'sku', hide: true} + ,{field: 'units', align: 'center',title: '鍖呮暟', hide: true} + ,{field: 'barcode', align: 'center',title: '鏉$爜', hide: true} + ,{field: 'origin', align: 'center',title: '鐗╂枡鐘舵��', hide: true} + ,{field: 'manu', align: 'center',title: '鍘傚', hide: true} + ,{field: 'manuDate', align: 'center',title: '鍗曟嵁鏃堕棿', hide: true} + ,{field: 'itemNum', align: 'center',title: '鍝侀」鏁�', hide: true} + ,{field: 'safeQty', align: 'center',title: '瀹夊叏搴撳瓨閲�', hide: true} + ,{field: 'weight', align: 'center',title: '鍗曠鍑�閲�', hide: true} + ,{field: 'length', align: 'center',title: '鍗曠姣涢噸', hide: true} + ,{field: 'volume', align: 'center',title: '鍗曠浣撶Н', hide: true} + ,{field: 'threeCode', align: 'center',title: '绠卞瓙灏哄', hide: true} + ,{field: 'supp', align: 'center',title: '渚涘簲鍟�', hide: true} + ,{field: 'suppCode', align: 'center',title: '渚涘簲鍟嗙紪鐮�', hide: true} + ,{field: 'beBatch$', align: 'center',title: '鏄惁鎵规', hide: true} + ,{field: 'deadTime', align: 'center',title: '淇濊川鏈�', hide: true} + ,{field: 'deadWarn', align: 'center',title: '棰勮澶╂暟', hide: true} + ,{field: 'source$', align: 'center',title: '鍒惰喘', hide: true} + ,{field: 'check$', align: 'center',title: '瑕佹眰妫�楠�', hide: true} + ,{field: 'danger$', align: 'center',title: '鍗遍櫓鍝�', hide: true} + + ]; + + // cols.push.apply(cols, detlCols); + cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳',hide: true} + ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'} + ,{field: 'stockFreeze', align: 'center',title: '搴撳瓨鍐荤粨', templet: '#stockFreezeTpl'} + ) + return cols; +} + +layui.use(['table','laydate', 'form'], function(){ + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + + // 鏁版嵁娓叉煋 + tableIns = table.render({ + elem: '#locDetl', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/all/locDetl/list/auth', + page: true, + limit: 20, + where:{ + unreason: false + }, + limits: [20, 30, 50, 100, 200, 500], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + tableData = table.cache.locDetl; + pageCurr=curr; + limit(); + form.on('checkbox(tableCheckbox)', function (data) { + var _index = $(data.elem).attr('table-index')||0; + if(data.elem.checked){ + res.data[_index][data.value] = 'Y'; + }else{ + res.data[_index][data.value] = 'N'; + } + }); + } + }); + + // 鐩戝惉鎺掑簭浜嬩欢 + table.on('sort(locDetl)', function (obj) { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + searchData['orderByField'] = obj.field; + searchData['orderByType'] = obj.type; + tableIns.reload({ + where: searchData, + page: { + curr: 1 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + limit(); + } + }); + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(locDetl)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + switch(obj.event) { + case 'addData': + layer.open({ + type: 2, + title: '鏂板', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function(layero, index){ + layer.getChildFrame('#data-detail-submit-edit', index).hide(); + clearFormVal(layer.getChildFrame('#detail', index)); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + } + }); + break; + case 'refreshData': + tableIns.reload({ + page: { + curr: pageCurr + } + }); + limit(); + break; + case 'deleteData': + var data = checkStatus.data; + if (data.length === 0){ + layer.msg('璇烽�夋嫨鏁版嵁'); + } else { + layer.confirm('纭畾鍒犻櫎'+(data.length===1?'姝�':data.length)+'鏉℃暟鎹悧', function(){ + $.ajax({ + url: baseUrl+"/all/locDetl/delete/auth", + headers: {'token': localStorage.getItem('token')}, + data: {param: JSON.stringify(data)}, + method: 'POST', + traditional:true, + success: function (res) { + if (res.code === 200){ + layer.closeAll(); + tableReload(false); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg) + } + } + }) + }); + } + break; + case 'exportData': + layer.confirm('纭畾瀵煎嚭Excel鍚�', {shadeClose: true}, function(){ + var titles=[]; + var fields=[]; + obj.config.cols[0].map(function (col) { + if (col.type === 'normal' && col.hide === false && col.toolbar == null) { + titles.push(col.title); + fields.push(col.field); + } + }); + var exportData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + exportData[this.name] = this.value; + }); + var param = { + 'locDetl': exportData, + 'fields': fields + }; + var loadIndex = layer.msg('姝e湪瀵煎嚭...', {icon: 16, shade: 0.01, time: false}); + $.ajax({ + url: baseUrl+"/all/locDetl/export/auth", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify(param), + dataType:'json', + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + layer.close(loadIndex); + layer.closeAll(); + if (res.code === 200) { + table.exportFile(titles,res.data,'xls'); + } else if (res.code === 403) { + top.location.href = baseUrl+"/"; + } else { + layer.msg(res.msg) + } + } + }); + }); + break; + } + }); + + // 鐩戝惉琛屽伐鍏蜂簨浠� + table.on('tool(locDetl)', function(obj){ + var data = obj.data; + switch (obj.event) { + // 璇︽儏 + case 'detail': + layer.open({ + type: 2, + title: '璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function(layero, index){ + setFormVal(layer.getChildFrame('#detail', index), data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + // 缂栬緫 + case 'edit': + layer.open({ + type: 2, + title: '淇敼', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: 'locDetl_detail.html', + success: function(layero, index){ + layer.getChildFrame('#data-detail-submit-save', index).hide(); + setFormVal(layer.getChildFrame('#detail', index), data, false); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), false); + top.convertDisabled(layer.getChildFrame('#locNo,#matnr', index), true); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } + }); + break; + case 'locNo': + var param = top.reObject(data).locNo; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '搴撲綅鍙疯鎯�', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../locMast/locMast_detail.html', + success: function(layero, index){ + $.ajax({ + url: baseUrl+"/all/locMast/"+ param +"/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200){ + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403){ + parent.location.href = "/"; + }else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + case 'modiUser': + var param = top.reObject(data).modiUser; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '淇敼浜哄憳璇︽儏', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../user/user_detail.html', + success: function(layero, index){ + $.ajax({ + url: baseUrl+"/user/"+ param +"/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200){ + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403){ + parent.location.href = "/"; + }else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + case 'appeUser': + var param = top.reObject(data).appeUser; + if (param === undefined) { + layer.msg("鏃犳暟鎹�"); + } else { + layer.open({ + type: 2, + title: '鍒涘缓鑰呰鎯�', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: false, + content: '../user/user_detail.html', + success: function(layero, index){ + $.ajax({ + url: baseUrl+"/user/"+ param +"/auth", + headers: {'token': localStorage.getItem('token')}, + method: 'GET', + success: function (res) { + if (res.code === 200){ + setFormVal(layer.getChildFrame('#detail', index), res.data, true); + top.convertDisabled(layer.getChildFrame('#data-detail :input', index), true); + layer.getChildFrame('#data-detail-submit-save,#data-detail-submit-edit,#prompt', index).hide(); + layer.iframeAuto(index);layer.style(index, {top: (($(window).height()-layer.getChildFrame('#data-detail', index).height())/3)+"px"}); + layero.find('iframe')[0].contentWindow.layui.form.render('select'); + layero.find('iframe')[0].contentWindow.layui.form.render('checkbox'); + } else if (res.code === 403){ + parent.location.href = "/"; + }else { + layer.msg(res.msg) + } + } + }) + } + }); + } + break; + + } + }); + + // 鏁版嵁淇濆瓨鍔ㄤ綔 + form.on('submit(save)', function () { + if (banMsg != null){ + layer.msg(banMsg); + return; + } + method("add"); + }); + + // 鏁版嵁淇敼鍔ㄤ綔 + form.on('submit(edit)', function () { + method("update") + }); + + function method(name){ + var index = layer.load(1, { + shade: [0.5,'#000'] //0.1閫忔槑搴︾殑鑳屾櫙 + }); + var data = { +// id: $('#id').val(), + locNo: $('#locNo').val(), + matnr: $('#matnr').val(), + lgnum: $('#lgnum').val(), + tbnum: $('#tbnum').val(), + tbpos: $('#tbpos').val(), + zmatid: $('#zmatid').val(), + maktx: $('#maktx').val(), + werks: $('#werks').val(), + anfme: $('#anfme').val(), + altme: $('#altme').val(), + zpallet: $('#zpallet').val(), + bname: $('#bname').val(), + memo: $('#memo').val(), + modiUser: $('#modiUser').val(), + modiTime: top.strToDate($('#modiTime\\$').val()), + appeUser: $('#appeUser').val(), + appeTime: top.strToDate($('#appeTime\\$').val()), + + }; + $.ajax({ + url: baseUrl+"/all/locDetl/"+name+"/auth", + headers: {'token': localStorage.getItem('token')}, + data: top.reObject(data), + method: 'POST', + success: function (res) { + if (res.code === 200){ + parent.layer.closeAll(); + parent.$(".layui-laypage-btn")[0].click(); + $("#data-detail :input").each(function () { + $(this).val(""); + }); + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + }else { + layer.msg(res.msg) + } + layer.close(index); + } + }) + } + + // 澶嶉�夋浜嬩欢 + form.on('checkbox(detailCheckbox)', function (data) { + var el = data.elem; + if (el.checked) { + $(el).val('Y'); + } else { + $(el).val('N'); + } + }); + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + pageCurr = 1; + tableReload(false); + }); + + + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + tableReload(false); + }); + + //鏌ョ湅寮傚父鏁版嵁 + form.on('submit(unreason)', function (data) { + pageCurr = 1; + + tableIns.reload({ + where: { + unreason: true + }, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + + limit(child); + } + }); + }); + + // 鏃堕棿閫夋嫨鍣� + layDate.render({ + elem: '#modiTime\\$', + type: 'datetime' + }); + layDate.render({ + elem: '#appeTime\\$', + type: 'datetime' + }); + + form.on('switch(stockFreezeSwitch)', function (obj) { + let index = obj.othis.parents('tr').attr("data-index"); + let data = tableData[index]; + data[this.stockFreeze] = obj.elem.checked?1:0; + http.post(baseUrl + "/all/locDetl/updateStockFreeze/auth", { + locNo: data.locNo, + matnr: data.matnr, + stockFreeze: data[this.stockFreeze] + }, function (res) { + layer.msg(res.msg, {icon: 1}); + }); + }) + + +}); + +// 鍏抽棴鍔ㄤ綔 +$(document).on('click','#data-detail-close', function () { + parent.layer.closeAll(); +}); + +function tableReload(child) { + var searchData = { + unreason: false + }; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + (child ? parent.tableIns : tableIns).reload({ + where: searchData, + page: { + curr: pageCurr + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + pageCurr=curr; + if (res.data.length === 0 && count !== 0) { + tableIns.reload({ + where: searchData, + page: { + curr: pageCurr-1 + } + }); + pageCurr -= 1; + } + limit(child); + } + }); +} + +function setFormVal(el, data, showImg) { + for (var val in data) { + var find = el.find(":input[id='" + val + "']"); + if (find[0]!=null){ + if (find[0].type === 'checkbox'){ + if (data[val]==='Y'){ + find.attr("checked","checked"); + find.val('Y'); + } else { + find.remove("checked"); + find.val('N'); + } + continue; + } + } + find.val(data[val]); + if (showImg){ + var next = find.next(); + if (next.get(0)){ + if (next.get(0).localName === "img") { + find.hide(); + next.attr("src", data[val]); + next.show(); + } + } + } + } +} + +function clearFormVal(el) { + $(':input', el) + .val('') + .removeAttr('checked') + .removeAttr('selected'); +} + +function detailScreen(index) { + var detail = layer.getChildFrame('#data-detail', index); + var height = detail.height()+60; + if (height > ($(window).height()*0.9)) { + height = ($(window).height()*0.8); + } + layer.style(index, { +// top: (($(window).height()-height)/3)+"px", + height: height+'px' + }); +} + +$('body').keydown(function () { + if (event.keyCode === 13) { + $("#search").click(); + } +}); diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js index 5f5f4ca..795b739 100644 --- a/src/main/webapp/static/js/common.js +++ b/src/main/webapp/static/js/common.js @@ -222,6 +222,7 @@ var detlCols = [ ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: true} ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: false} + ,{field: 'matnr', align: 'center',title: '鐗╂枡鍙�',hide: true} ,{field: 'matnr', align: 'center',title: '鐗╂枡鍙�'} ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true, hide: false} ,{field: 'maktx', align: 'center',title: '鐗╂枡鍚嶇О'} diff --git a/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html index 1318a19..ae20a09 100644 --- a/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html +++ b/src/main/webapp/views/agvBasDevp/basDevpWaitPakinDetail.html @@ -70,6 +70,12 @@ pageSize: 'limit' }, parseData: function (res) { + if(!res.data){ + return { + 'code': res.code, + 'msg': res.msg, + } + } return { 'code': res.code, 'msg': res.msg, diff --git a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html index acec6aa..d39c441 100644 --- a/src/main/webapp/views/agvBasDevpVisualized/basDevp.html +++ b/src/main/webapp/views/agvBasDevpVisualized/basDevp.html @@ -61,15 +61,16 @@ <!-- <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}">鎷f枡鍏ュ簱</button>--> <!-- </div>--> - {{#if agvWrkDetl}} + {{#if containerMoveOutFlag}} <div style=" padding-bottom: 20px"> - <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="containerMoveOut">瀹瑰櫒绂诲満</button> - <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="pickIn">鎷f枡鍏ュ簱</button> - </div> {{/if}} - + {{#if pickInFlag}} + <div style=" padding-bottom: 20px"> + <button type="button" class="layui-btn layui-btn-normal" value="{{devNo}}" lay-submit lay-filter="pickIn">鎷f枡/鐩樼偣鍏ュ簱</button> + </div> + {{/if}} <div> 宸ヤ綔绔欑紪鐮侊細{{devNo}} </br> 绔欑偣鐘舵�侊細{{locSts$}} @@ -204,7 +205,7 @@ }); - //鎷f枡鍏ュ簱 + //鎷f枡/鐩樼偣鍏ュ簱 form.on('submit(pickIn)', function () { var devNoList = []; devNoList.push(this.value); diff --git a/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html b/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html new file mode 100644 index 0000000..bcfc8b6 --- /dev/null +++ b/src/main/webapp/views/agvLocDetlStatis/locDetlStatis.html @@ -0,0 +1,59 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储 + </button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆 + </button> + </div> + <div class="layui-inline"> + <fieldset class="layui-elem-field"> + <legend>鎬昏鏁伴噺</legend> + <div class="layui-field-box" id="countNum"> + 璇风◢绛� + </div> + </fieldset> + </div> +</div> + +<!-- 琛ㄦ牸 --> +<div class="layui-form"> + <table class="layui-hide" id="locDetlStatis" lay-filter="locDetlStatis"></table> +</div> +<script type="text/html" id="toolbar"> + + <div class="layui-btn-container layui-col-md1"> + <button class="layui-btn" lay-event="exportAll" style="margin-top: -0px">瀵煎嚭鍏ㄩ儴</button> + </div> +</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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/agvLocDetlStatis/locDetlStatis.js" charset="utf-8"></script> + +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/emptyIn.html b/src/main/webapp/views/agvPakStore/emptyIn.html new file mode 100644 index 0000000..bbcb3d3 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/emptyIn.html @@ -0,0 +1,76 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + } + + .function-area { + padding: 50px 80px; + } + .layui-form-label { + width: 120px; + } + .function-area .layui-form { + width: 300px; + } + + #btn-inbound { + display: none; + } + </style> +</head> +<body> + +<!-- 鍔熻兘鍖� --> +<div class="function-area"> + <div class="layui-form layui-form-pane"> + <div class="layui-form-item" style="margin-bottom: 30px"> + <label class="layui-form-label" style="">绌烘澘鍏ュ簱鍙�</label> + <div class="layui-input-block"> + <select id="inSiteSelect" lay-verify="required" lay-search=""> + <option value="">璇烽�夋嫨绔欑偣</option> + </select> + </div> + </div> + <hr style="margin-top: 10px"> + <div style="text-align: left; margin-top: 30px"> + <button class="layui-btn layui-btn-lg layui-btn-radius layui-btn-normal" id="btn-inbound" lay-submit lay-filter="inbound">鍚姩鍏ュ簱</button> + </div> + </div> +</div> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/agvPakStore/emptyIn.js" charset="utf-8"></script> + +<script type="text/template" id="putSiteSelectTemplate"> + {{#each data}} + <option value="{{this}}">{{this}}</option> + {{/each}} +</script> + +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/emptyOut.html b/src/main/webapp/views/agvPakStore/emptyOut.html new file mode 100644 index 0000000..3ba806e --- /dev/null +++ b/src/main/webapp/views/agvPakStore/emptyOut.html @@ -0,0 +1,150 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + padding-bottom: 20px; + } + #search-box { + padding: 30px 0 20px 0; + } + #search-box .layui-inline:first-child { + margin-left: 30px; + } + #search-box .layui-inline { + margin-right: 5px; + } + + #data-search-btn { + margin-left: 10px; + display: inline-block; + } + #data-search-btn.layui-btn-container .layui-btn { + margin-right: 20px; + } + + #staNoSpan { + text-align: center; + display: inline-block; + width: 100px; + font-size: 13px; + } + .layui-btn-container .layui-form-select { + display: inline-block; + width: 150px; + height: 30px; + } + .layui-btn-container .layui-form-select.layui-form-selected { + display: inline-block; + width: 150px; + } + .layui-btn-container .layui-select-title input { + font-size: 13px; + } + .layui-btn-container .layui-anim.layui-anim-upbit dd { + font-size: 13px; + } + + #btn-outbound { + margin-left: 60px; + display: none; + } + + </style> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <select id="floorSelect" name="floor" lay-filter="floorSelect"> + <option value="1">1妤�</option> + <option value="3">3妤�</option> + </select> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="row1" placeholder="鎺�" lay-verify="number" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="bay1" placeholder="鍒�" lay-verify="number" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="lev1" placeholder="灞�" lay-verify="number" autocomplete="off"> + </div> + </div> + + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> + </div> +</div> + +<script type="text/html" id="toolbar"> + <div class="layui-form"> + <div class="layui-btn-container"> + <!-- 1.閫夋嫨鍑哄簱鍙� --> + <span id="staNoSpan">绌烘澘鍑哄簱鍙o細</span> + <select id="staNoSelect" lay-verify="required"> + <option value="CS-101">CS-101</option> + <option value="CS-102">CS-102</option> + </select> + <!-- 2.鍚姩鍑哄簱 --> + <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">鍚姩鍑哄簱</button> + </div> + </div> +</script> + +<!-- 绌烘澘搴撲綅琛� --> +<table class="layui-hide" id="locMast" lay-filter="locMast"></table> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/agvPakStore/emptyOut.js" charset="utf-8"></script> + +<!--鍚姩鍑哄簱--> +<div id="outboundDiv"> + +</div> + +<script type="text/template" id="takeSiteSelectTemplate"> + {{#each data}} + <option value="{{this}}">{{this}}</option> + {{/each}} +</script> +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/locCheckOut.html b/src/main/webapp/views/agvPakStore/locCheckOut.html new file mode 100644 index 0000000..548e175 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/locCheckOut.html @@ -0,0 +1,132 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + } + #staNoSpan { + text-align: center; + display: inline-block; + width: 100px; + font-size: 13px; + } + .layui-btn-container .layui-form-select { + display: inline-block; + width: 150px; + height: 30px; + } + .layui-btn-container .layui-form-select.layui-form-selected { + display: inline-block; + width: 150px; + } + .layui-btn-container .layui-select-title input { + font-size: 13px; + } + .layui-btn-container .layui-anim.layui-anim-upbit dd { + font-size: 13px; + } + + #btn-outbound { + margin-left: 60px; + } + + /*----------------------------------*/ + .function-area { + padding: 20px 50px; + } + .function-btn { + font-size: 16px; + padding: 1px 2px; + width: 100px; + height: 50px; + border-color: #2b425b; + border-radius: 4px; + border-width: 2px; + background: none; + border-style: solid; + transition: 0.4s; + cursor: pointer; + letter-spacing: 1.5px; + } + .function-btn:hover { + background-color: #2b425b; + color: #fff; + } + + #mat-query { + display: none; + } + #btn-outbound { + display: none; + } + </style> +</head> +<body style="padding-bottom: 30px"> + +<!-- 鍔熻兘鍖� --> +<div class="function-area"> + <button id="mat-query" class="function-btn">鎻愬彇搴撳瓨</button> +</div> + +<hr> + +<!-- 琛ㄦ牸 --> +<div style="padding-bottom: 5px; margin-bottom: 45px"> + + <!-- 澶撮儴 --> + <script type="text/html" id="toolbar"> + <div class="layui-form"> + <div class="layui-btn-container"> + <!-- 1.閫夋嫨鍑哄簱鍙� --> + <span id="staNoSpan">鐩樼偣绔欙細</span> + <select id="staNoSelect" lay-verify="required"> + <option value="">璇烽�夋嫨绔欑偣</option> + </select> + <!-- 2.鍚姩鍑哄簱 --> + <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">鐩樼偣鍑哄簱</button> + </div> + </div> + </script> + + <!-- 琛� --> + <script type="text/html" id="operate"> + <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">绉婚櫎</a> + </script> + + <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/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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/agvPakStore/locCheckOut.js" charset="utf-8"></script> + +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html b/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html new file mode 100644 index 0000000..faf54f8 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html @@ -0,0 +1,230 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + body { + padding: 0 20px; + } + .layui-table-box { + border-right: 1px solid #9F9F9F; + border-left: 1px solid #9F9F9F; + } + + #search-box { + padding: 30px 0 20px 0; + } + #search-box .layui-inline:first-child { + margin-left: 30px; + } + #search-box .layui-inline { + margin-right: 5px; + } + + #data-search-btn { + margin-left: 10px; + display: inline-block; + } + #data-search-btn.layui-btn-container .layui-btn { + margin-right: 20px; + } + + </style> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<fieldset class="layui-elem-field site-demo-button" style="margin: 20px;"> + <legend>鎼滅储鏍�</legend> + <!-- 鎼滅储鏍� --> + <div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鎻忚堪" autocomplete="off"> + </div> + </div> + <!-- 鏃ユ湡鑼冨洿 --> + <div class="layui-inline" style="width: 300px"> + <div class="layui-input-inline"> + <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> + </div> + </div> +</fieldset> + +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">鎻愬彇</button> + </div> +</script> + +<div class="layui-form"> + <table class="layui-hide" id="stockOut" lay-filter="stockOut"></table> +</div> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> + +</body> +<script> + + function getCol() { + let cols = [ + {type: 'checkbox', merge: ['locNo']} + ,{field: 'locNo', align: 'center',title: '搴撲綅鍙�', merge: true, width:150, style: 'font-weight: bold'} + ]; + cols.push.apply(cols, detlCols); + cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide: true} + ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}) + return cols; + } + + layui.config({ + base: baseUrl + "/static/layui/lay/modules/" + }).use(['table','laydate', 'form', 'admin', 'tableMerge'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + var tableMerge = layui.tableMerge; + + // 鏁版嵁娓叉煋 + locDetlTableIns = table.render({ + elem: '#stockOut', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/agv/stock/out/list/auth', + page: true, + limit: 20, + limits: [20, 50, 100, 200, 500], + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + tableMerge.render(this); + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + } + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(stockOut)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + var data = checkStatus.data; + switch(obj.event) { + case 'confirm': + if (data.length === 0){ + layer.msg("璇烽�夋嫨鏁版嵁", {icon: 2}); + return; + } + //鍒ゆ柇鏄惁1妤煎拰3妤煎簱浣嶅悓鏃惰鍕鹃�� + var floor = data[0].locNo.split('@')[1]; + var flag = true; + let locNos = []; + data.forEach(function(elem) { + if(floor != elem.locNo.split('@')[1]){ + flag = false; + } + locNos.push(elem.locNo); + }); + if(!flag){ + layer.msg("褰撳墠閫夋嫨鐨勫簱浣嶅彿瀛樺湪涓嶅悓妤煎眰锛岃閫夋嫨鍚屼竴妤煎眰涓嬬殑搴撲綅", {icon: 2}); + return; + } + + $.ajax({ + url: baseUrl+"/agv/locDetl/auth", + headers: {'token': localStorage.getItem('token')}, + data: {locNos:locNos}, + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200) { + data = res.data; + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg) + } + } + }) + flag = parent.addTableData(data,floor); + if(flag){ + parent.addStationData(floor); + }else{ + layer.msg("褰撳墠閫夋嫨鐨勫簱浣嶅彿瀛樺湪涓嶅悓妤煎眰锛岃閫夋嫨鍚屼竴妤煎眰涓嬬殑搴撲綅", {icon: 2}); + return; + } + break; + } + }); + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + tableReload(); + }); + + layDate.render({ + elem: '.layui-laydate-range' + ,type: 'datetime' + ,range: true + }); + }) + + function tableReload() { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + locDetlTableIns.reload({ + where: searchData + }); + } + +</script> +</html> + diff --git a/src/main/webapp/views/agvPakStore/locDetlQuery.html b/src/main/webapp/views/agvPakStore/locDetlQuery.html new file mode 100644 index 0000000..c23ef35 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/locDetlQuery.html @@ -0,0 +1,189 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + body { + } + .layui-table-box { + border-right: 1px solid #9F9F9F; + border-left: 1px solid #9F9F9F; + } + + #search-box { + padding: 30px 0 20px 0; + } + #search-box .layui-inline:first-child { + margin-left: 30px; + } + #search-box .layui-inline { + margin-right: 5px; + } + + #data-search-btn { + margin-left: 10px; + display: inline-block; + } + #data-search-btn.layui-btn-container .layui-btn { + margin-right: 20px; + } + </style> +</head> +<body> +<div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;"> + <span style="font-size: large; font-weight: bold">鎻愬彇搴撳瓨鍟嗗搧</span> +</div> +<!-- 鎼滅储鏍� --> +<fieldset class="layui-elem-field site-demo-button" style="margin: 20px;"> + <legend>鎼滅储鏍�</legend> + <!-- 鎼滅储鏍� --> + <div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鎻忚堪" autocomplete="off"> + </div> + </div> + <!-- 鏃ユ湡鑼冨洿 --> + <div class="layui-inline" style="width: 300px"> + <div class="layui-input-inline"> + <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + </div> + </div> +</fieldset> + +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">鎻愬彇</button> + </div> +</script> + +<div class="layui-form"> + <table class="layui-hide" id="stockOut" lay-filter="stockOut"></table> +</div> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> + +</body> +<script> + + function getCol() { + var cols = [ + {type: 'checkbox'} + ,{field: 'locNo$', align: 'center',title: '搴撲綅鍙�'} + ]; + cols.push.apply(cols, detlCols); + cols.push({field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide: true} + ,{field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'}) + return cols; + } + + layui.config({ + base: baseUrl + "/static/layui/lay/modules/" + }).use(['table','laydate', 'form', 'admin'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + + // 鏁版嵁娓叉煋 + locDetlTableIns = table.render({ + elem: '#stockOut', + headers: {token: localStorage.getItem('token')}, + url: baseUrl+'/stock/out/list/auth', + page: true, + limits: [16, 30, 50, 100, 200, 500], + limit: 16, + even: true, + toolbar: '#toolbar', + cellMinWidth: 50, + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function(res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl+"/"; + } + } + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(stockOut)', function (obj) { + var checkStatus = table.checkStatus(obj.config.id); + var data = checkStatus.data; + switch(obj.event) { + case 'confirm': + if (data.length === 0){ + layer.msg("璇烽�夋嫨鏁版嵁"); + return; + } + parent.addTableData(data); + break; + } + }); + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + tableReload(); + }); + + layDate.render({ + elem: '.layui-laydate-range' + ,type: 'datetime' + ,range: true + }); + }) + + function tableReload() { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + locDetlTableIns.reload({ + where: searchData, + }); + } +</script> +</html> + diff --git a/src/main/webapp/views/agvPakStore/locMove.html b/src/main/webapp/views/agvPakStore/locMove.html new file mode 100644 index 0000000..d71c086 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/locMove.html @@ -0,0 +1,130 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + padding-bottom: 20px; + } + .function-area { + padding: 50px 80px 50px 70px; + display: inline-block; + } + .cool-auto-complete-div { + height: 40px; + border-radius: 5px; + border: 1px solid #b8b8b8; + color: #888; + box-shadow: inset 0 1px 2px #ECECEC; + -moz-box-shadow: inset 0 1px 2px #ECECEC; + -webkit-box-shadow: inset 0 1px 2px #ECECEC; + } + + .function-btn { + margin-left: 15px; + background: #E27575; + border: none; + padding: 10px 25px 10px 25px; + color: #FFF; + box-shadow: 1px 1px 5px #B6B6B6; + border-radius: 3px; + text-shadow: 1px 1px 1px #9E3F3F; + cursor: pointer; + } + .function-btn:hover { + opacity: 0.8 + } + + .layui-layer-lan .layui-layer-btn a { + background: #4476A7; + border-color: #4476A7; + color: #fff; + } + .layui-layer-lan .layui-layer-btn .layui-layer-btn1 { + background: #fff; + color: #333; + border-color: #E9E7E7; + } + .layui-layer-lan .layui-layer-btn .layui-layer-btn1:hover { + background-color: #f7f7f7; + } + + #loc-move-btn { + display: none; + } + </style> +</head> +<body> + +<div class="function-area layui-form"> + <!-- 婧愬簱浣� --> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input id="sourceLocNo" class="layui-input" onkeyup="getLoc(this)" type="text" placeholder="婧愬簱浣�" autocomplete="off"> + </div> + </div> + <div class="layui-form-mid" style="float: none; display: inline-block; margin-left: 10px">-</div> + <div class="layui-input-inline"> + <select id="targetLocNo" name="modules" lay-verify="required" lay-search=""> + <option value="">鐩爣绌哄簱浣�</option> + </select> + </div> + <button id="loc-move-btn" class="function-btn" onclick="locMove()" style="background: #4476A7;text-shadow: inherit;height: 45px;font-size: 15px;margin-left: 20px">搴撲綅绉昏浆</button> +</div> + +<hr> + +<table class="layui-table" id="locMatCode" lay-filter="locMatCode"></table> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/agvPakStore/locMove.js" charset="utf-8"></script> + +<script type="text/template" id="emptyLocStock"> + <option value="">璇疯緭鍏ュ苟閫夋嫨</option> + {{#each data}} + <option value="{{this}}">{{this}}</option> + {{/each}} +</script> + +<div id="locMoveWindow" style="height: 100%;display: none"> + <div style="float: left;width: 35%;height: 100%"> + <div> + <span style="display: block">婧愬簱浣�</span> + <input type="text"> + </div> + </div> + <div style="float: left;width: 30%;height: 100%;position: relative;"> + <span style="position:absolute;top: 45%;left: 50%;color: #666;transform: translateX(-50%);;display: block">绉昏浆鑷�</span> + <hr style="position: absolute; top: 50%;width: 100%;border: none;height: 1px;background-color: #666"> + + </div> + <div style="float: right;width: 35%;height: 100%"> + <div> + <span style="display: block">鐩爣搴撲綅</span> + <input type="text"> + </div> + </div> +</div> +</body> +</html> diff --git a/src/main/webapp/views/agvPakStore/matQuery.html b/src/main/webapp/views/agvPakStore/matQuery.html new file mode 100644 index 0000000..433d45c --- /dev/null +++ b/src/main/webapp/views/agvPakStore/matQuery.html @@ -0,0 +1,173 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + body { + /*overflow: hidden;*/ + } + .layui-table-box { + border-right: 1px solid #9F9F9F; + border-left: 1px solid #9F9F9F; + } + </style> +</head> +<body> +<div style="padding: 25px; line-height: 22px; background-color: #393D49; color: #fff; font-weight: 300;"> + <span style="font-size: large; font-weight: bold">閫夋嫨鍟嗗搧</span> +</div> +<div class="layui-card" style="padding: 0 20px; overflow: scroll;"> + <fieldset class="layui-elem-field site-demo-button" style="margin: 20px;"> + <legend>鎼滅储鏍�</legend> + <div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> + <!-- 鏃ユ湡鑼冨洿 --> + <div class="layui-inline" style="width: 300px"> + <div class="layui-input-inline"> + <input class="layui-input layui-laydate-range" name="modi_time" type="text" placeholder="璧峰鏃堕棿 - 缁堟鏃堕棿" autocomplete="off" style="width: 300px"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + </div> + </div> + </fieldset> + + <div class="layui-form"> + <table class="layui-hide" id="mat" lay-filter="mat"></table> + </div> +</div> + +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn" id="btn-confirm" lay-event="confirm" style="">鎻愬彇</button> + </div> +</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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> + +</body> +<script> + function getCol() { + let cols = [ + {type: 'checkbox', fixed: 'left'} + ]; + cols.push.apply(cols, matCols); + cols.push( + {field: 'modiUser$', align: 'center',title: '淇敼浜哄憳', hide: true}, + {field: 'modiTime$', align: 'center',title: '淇敼鏃堕棿'} + ) + return cols; + } + + layui.config({ + base: baseUrl + "/static/layui/lay/modules/" + }).use(['table','laydate', 'form', 'admin'], function() { + var table = layui.table; + var $ = layui.jquery; + var layer = layui.layer; + var layDate = layui.laydate; + var form = layui.form; + var admin = layui.admin; + + // 鐗╂枡鏌ヨ鏁版嵁琛� + matQueryTable = table.render({ + elem: '#mat', + headers: {token: localStorage.getItem('token')}, + url: baseUrl + '/mat/list/auth', + page: true, + limit: 7, + limits: [7, 10, 30,50,100], + even: true, + cellMinWidth: 50, + toolbar: '#toolbar', + cols: [getCol()], + request: { + pageName: 'curr', + pageSize: 'limit' + }, + parseData: function (res) { + return { + 'code': res.code, + 'msg': res.msg, + 'count': res.data.total, + 'data': res.data.records + } + }, + response: { + statusCode: 200 + }, + done: function (res, curr, count) { + if (res.code === 403) { + top.location.href = baseUrl + "/"; + } + } + }); + + // 鐩戝惉澶村伐鍏锋爮浜嬩欢 + table.on('toolbar(mat)', function (obj) { + let checkStatus = table.checkStatus(obj.config.id); + let data = checkStatus.data; + switch(obj.event) { + case 'confirm': + if (data.length === 0){ + layer.msg("璇烽�夋嫨鏁版嵁", {icon: 2}); + return; + } + parent.addTableData(data); + break; + } + }); + + // 鎼滅储鏍忔悳绱簨浠� + form.on('submit(search)', function (data) { + tableReload(); + }); + + layDate.render({ + elem: '.layui-laydate-range' + ,type: 'datetime' + ,range: true + }); + }) + + function tableReload() { + var searchData = {}; + $.each($('#search-box [name]').serializeArray(), function() { + searchData[this.name] = this.value; + }); + matQueryTable.reload({ + where: searchData + }); + } + +</script> +</html> + diff --git a/src/main/webapp/views/agvPakStore/pakStore.html b/src/main/webapp/views/agvPakStore/pakStore.html new file mode 100644 index 0000000..820bbee --- /dev/null +++ b/src/main/webapp/views/agvPakStore/pakStore.html @@ -0,0 +1,133 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + } + + .function-area { + padding: 20px 50px; + } + .function-btn { + font-size: 16px; + padding: 1px 2px; + width: 100px; + height: 50px; + border-color: #2b425b; + border-radius: 4px; + border-width: 2px; + background: none; + border-style: solid; + transition: 0.4s; + cursor: pointer; + letter-spacing: 1.5px; + } + .function-btn:hover { + background-color: #2b425b; + color: #fff; + } + + .layui-layer-page .layui-layer-content { + position: relative; + overflow: visible !important; + } + + #mat-query { + display: none; + } + + #staNoSpan { + text-align: center; + display: inline-block; + width: 100px; + font-size: 13px; + } + .layui-btn-container .layui-form-select { + display: inline-block; + width: 150px; + height: 30px; + } + .layui-btn-container .layui-form-select.layui-form-selected { + display: inline-block; + width: 150px; + } + .layui-btn-container .layui-select-title input { + font-size: 13px; + } + .layui-btn-container .layui-anim.layui-anim-upbit dd { + font-size: 13px; + } + + #btn-comb { + margin-left: 60px; + display: none; + } + </style> +</head> +<body> +<!-- 鍔熻兘鍖� --> +<div class="function-area"> + <button id="mat-query" class="function-btn">鎻愬彇鍟嗗搧</button> +</div> + +<hr> + +<!-- 琛ㄦ牸 --> +<div style="padding-bottom: 5px; margin-bottom: 45px"> + + <!-- 澶撮儴 --> + <script type="text/html" id="toolbar"> + <div class="layui-form"> + <div class="layui-btn-container"> + <!-- 1.閫夋嫨鍏ュ簱鍙� --> + <span id="staNoSpan">鍏ュ簱鍙o細</span> + <select id="putSiteSelect" lay-verify="required"> + <option value="">璇烽�夋嫨绔欑偣</option> + </select> + <!-- 2.鍚姩鍑哄簱 --> + <button class="layui-btn layui-btn-normal layui-btn-lg" id="btn-comb" lay-event="comb" style="">鍚姩鍏ュ簱</button> + </div> + </div> + </script> + + <!-- 琛� --> + <script type="text/html" id="operate"> + <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">绉婚櫎</a> + </script> + + <table class="layui-table" id="chooseData" lay-filter="chooseData"></table> +</div> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/pakStore/pakStore.js" charset="utf-8"></script> + +<script type="text/template" id="putSiteSelectTemplate"> + {{#each data}} + <option value="{{this}}">{{this}}</option> + {{/each}} +</script> +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/stockAdjust.html b/src/main/webapp/views/agvPakStore/stockAdjust.html new file mode 100644 index 0000000..bd758e9 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/stockAdjust.html @@ -0,0 +1,133 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + } + + /* search */ + .layui-card-header { + border-bottom: none; + } + #search-box { + padding: 30px 0 10px 0; + } + #search-box .layui-inline:first-child { + margin-left: 30px; + } + #search-box .layui-inline { + margin-right: 5px; + } + + #data-search-btn { + margin-left: 10px; + display: inline-block; + } + #data-search-btn.layui-btn-container .layui-btn { + margin-right: 20px; + } + + /* add */ + .function-area { + padding: 15px 0 20px 40px; + } + .function-btn { + font-size: 16px; + padding: 1px 1px 1px 1px; + width: 120px; + height: 40px; + border-color: #2b425b; + border-radius: 4px; + border-width: 1px; + background: none; + border-style: solid; + transition: 0.4s; + cursor: pointer; + } + .function-btn:hover { + background-color: #2b425b; + color: #fff; + } + + #mat-query { + display: none; + } + #btn-adjust { + display: none; + } + </style> +</head> +<body style="padding-bottom: 30px"> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input id="searchLocNo" class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off" style="height: 45px;border-color: #b8b8b8"> + </div> + </div> + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">妫�绱�</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> + </div> + <!-- 搴撲綅鎻愮ず --> + <div style="display: inline-block; font-size: 20px;font-weight: 300"> + <div class="not-retrieve" style="color: #ff0000;font-family: '榛戜綋';"> + 璇峰厛妫�绱㈠簱浣� + </div> + <div class="retrieve" style="display: none;color: #0097ff;font-family: '榛戜綋';"> + 褰撳墠妫�绱㈠簱浣�: <span id="locMsg" style=""></span> + </div> + + </div> +</div> + +<hr> + +<!-- 鍔熻兘鍖� --> +<div class="function-area"> + <button id="mat-query" class="function-btn">鏂板搴撳瓨</button> +</div> + +<!-- 澶撮儴 --> +<script type="text/html" id="toolbar"> + <button class="layui-btn layui-btn-lg" id="btn-adjust" lay-event="adjust" style="">璋冩暣搴撳瓨</button> +</script> + +<!-- 琛� --> +<script type="text/html" id="operate"> + <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">绉婚櫎</a> +</script> + +<!-- 琛ㄦ牸 --> +<table class="layui-table" id="chooseData" lay-filter="chooseData"></table> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> +<script type="text/javascript" src="../../static/js/pakStore/stockAdjust.js" charset="utf-8"></script> + +</body> +</html> + diff --git a/src/main/webapp/views/agvPakStore/stockOut.html b/src/main/webapp/views/agvPakStore/stockOut.html new file mode 100644 index 0000000..3e02f19 --- /dev/null +++ b/src/main/webapp/views/agvPakStore/stockOut.html @@ -0,0 +1,131 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> + <style> + html { + height: 100%; + padding: 10px; + background-color: #f1f1f1; + box-sizing: border-box; + } + body { + background-color: #fff; + border-radius: 5px; + box-shadow: 0 0 3px rgba(0,0,0,.3); + padding-bottom: 20px; + } + + #staNoSpan { + text-align: center; + display: inline-block; + width: 100px; + font-size: 13px; + } + .layui-btn-container .layui-form-select { + display: inline-block; + width: 150px; + height: 30px; + } + .layui-btn-container .layui-form-select.layui-form-selected { + display: inline-block; + width: 150px; + } + .layui-btn-container .layui-select-title input { + font-size: 13px; + } + .layui-btn-container .layui-anim.layui-anim-upbit dd { + font-size: 13px; + } + + #btn-outbound { + margin-left: 60px; + display: none; + } + + /*----------------------------------*/ + .function-area { + padding: 20px 50px; + } + .function-btn { + font-size: 16px; + padding: 1px 2px; + width: 100px; + height: 50px; + border-color: #2b425b; + border-radius: 4px; + border-width: 2px; + background: none; + border-style: solid; + transition: 0.4s; + cursor: pointer; + letter-spacing: 1.5px; + } + .function-btn:hover { + background-color: #2b425b; + color: #fff; + } + + #mat-query { + display: none; + } + </style> +</head> +<body> + +<!-- 鍔熻兘鍖� --> +<div class="function-area"> + <button id="mat-query" class="function-btn">鎻愬彇搴撳瓨</button> +</div> + +<hr> + +<!-- 琛ㄦ牸 --> +<div style="padding-bottom: 5px; margin-bottom: 45px"> + + <!-- 澶撮儴 --> + <script type="text/html" id="toolbar"> + <div class="layui-form"> + <div class="layui-btn-container"> + <!-- 1.閫夋嫨鍑哄簱鍙� --> + <span id="staNoSpan">鍑哄簱鍙o細</span> + <select id="staNoSelect" lay-verify="required"> + <option value="">璇烽�夋嫨绔欑偣</option> + </select> + <!-- 2.鍚姩鍑哄簱 --> + <button class="layui-btn layui-btn-lg" id="btn-outbound" lay-event="outbound">鍚姩鍑哄簱</button> + </div> + </div> + </script> + + <!-- 琛� --> + <script type="text/html" id="operate"> + <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="remove">绉婚櫎</a> + </script> + + <table class="layui-table" id="chooseData" lay-filter="chooseData"></table> +</div> + +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<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> +</body> +</html> + diff --git a/src/main/webapp/views/allLocDetl/locDetl.html b/src/main/webapp/views/allLocDetl/locDetl.html new file mode 100644 index 0000000..7ad2afa --- /dev/null +++ b/src/main/webapp/views/allLocDetl/locDetl.html @@ -0,0 +1,81 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 鎼滅储鏍� --> +<div id="search-box" class="layui-form layui-card-header"> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="loc_no" placeholder="搴撲綅鍙�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="zpallet" placeholder="鎵樼洏鐮�" autocomplete="off"> + </div> + </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="matnr" placeholder="鐗╂枡鍙�" autocomplete="off"> + </div> + </div> +<!-- <div class="layui-inline">--> +<!-- <div class="layui-input-inline">--> +<!-- <input class="layui-input" type="text" name="row" placeholder="鎺掓暟" autocomplete="off">--> +<!-- </div>--> +<!-- </div>--> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="text" name="condition" placeholder="璇疯緭鍏�" autocomplete="off"> + </div> + + </div> + + <!-- 寰呮坊鍔� --> + <div id="data-search-btn" class="layui-btn-container layui-form-item" style="display: inline-block"> + <button id="search" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="search">鎼滅储</button> + <button id="reset" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="reset">閲嶇疆</button> +<!-- <button id="unreason" class="layui-btn layui-btn-primary layui-btn-radius" lay-submit lay-filter="unreason">鏌ョ湅寮傚父鏁版嵁</button>--> + </div> + +</div> + +<!-- 琛ㄦ牸 --> +<div class="layui-form"> + <table class="layui-hide" id="locDetl" lay-filter="locDetl"></table> +</div> +<script type="text/html" id="toolbar"> + <div class="layui-btn-container"> + <button class="layui-btn layui-btn-primary layui-btn-sm" id="btn-export" lay-event="exportData" style="margin-top: 10px">瀵煎嚭</button> + </div> +</script> + +<script type="text/html" id="operate"> + <a class="layui-btn layui-btn-primary layui-btn-xs" lay-event="detail">璇︽儏</a> +</script> + +<script type="text/html" id="stockFreezeTpl"> + <input type="checkbox" name="stockFreeze" value="{{d.stockFreeze}}" lay-skin="switch" lay-text="姝e父|鍐荤粨" lay-filter="stockFreezeSwitch" {{ d.stockFreeze === 1 ? 'checked' : '' }}> +</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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/allLocDetl/locDetl.js" charset="utf-8"></script> + +<iframe id="detail-iframe" scrolling="auto" style="display:none;"></iframe> + +</body> +</html> + diff --git a/src/main/webapp/views/allLocDetl/locDetl_detail.html b/src/main/webapp/views/allLocDetl/locDetl_detail.html new file mode 100644 index 0000000..7684ede --- /dev/null +++ b/src/main/webapp/views/allLocDetl/locDetl_detail.html @@ -0,0 +1,168 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="utf-8"> + <title></title> + <meta name="renderer" content="webkit"> + <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> + <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/common.css" media="all"> +</head> +<body> + +<!-- 璇︽儏 --> +<div id="data-detail" class="layer_self_wrap"> + <form id="detail" class="layui-form"> + <!-- + <div class="layui-inline" style="display: none"> + <label class="layui-form-label"><span class="not-null">*</span>缂栥��銆�鍙凤細</label> + <div class="layui-input-inline"> + <input id="id" class="layui-input" type="text" placeholder="缂栧彿"> + </div> + </div> + --> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label"><span class="not-null">*</span>搴� 浣� 鍙凤細</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="locNo" class="layui-input" type="text" onkeyup="check(this.id, 'locDetl')" lay-verify="required" style="display: none"> + <input id="locNo$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="locMastQueryBylocNo" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="locMastQueryBylocNoSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label"><span class="not-null">*</span>鐗┿��銆�鏂欙細</label> + <div class="layui-input-inline"> + <input id="matnr" class="layui-input" type="text" onkeyup="check(this.id, 'locDetl')" lay-verify="required" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">浠� 搴� 鍙凤細</label> + <div class="layui-input-inline"> + <input id="lgnum" class="layui-input" type="text" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label" style="font-size: x-small">杞偍璇锋眰缂栧彿锛�</label> + <div class="layui-input-inline"> + <input id="tbnum" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">琛� 椤� 鐩細</label> + <div class="layui-input-inline"> + <input id="tbpos" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label" style="font-size: x-small">鐗╂枡鏍囩ID锛�</label> + <div class="layui-input-inline"> + <input id="zmatid" class="layui-input" type="text" > + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鐗╂枡鎻忚堪锛�</label> + <div class="layui-input-inline"> + <input id="maktx" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">宸ャ��銆�鍘傦細</label> + <div class="layui-input-inline"> + <input id="werks" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鏁般��銆�閲忥細</label> + <div class="layui-input-inline"> + <input id="anfme" class="layui-input" type="text" lay-verify="number" > + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鍗曘��銆�浣嶏細</label> + <div class="layui-input-inline"> + <input id="altme" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">鎵樼洏鏉$爜锛�</label> + <div class="layui-input-inline"> + <input id="zpallet" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">鐢ㄦ埛ID锛�</label> + <div class="layui-input-inline"> + <input id="bname" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;"> + <label class="layui-form-label">澶囥��銆�娉細</label> + <div class="layui-input-inline"> + <input id="memo" class="layui-input" type="text"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">淇敼浜哄憳锛�</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="modiUser" class="layui-input" type="text" lay-verify="number" style="display: none"> + <input id="modiUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="userQueryBymodiUser" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="userQueryBymodiUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">淇敼鏃堕棿锛�</label> + <div class="layui-input-inline"> + <input id="modiTime$" class="layui-input" type="text" autocomplete="off"> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">鍒� 寤� 鑰咃細</label> + <div class="layui-input-inline cool-auto-complete"> + <input id="appeUser" class="layui-input" type="text" lay-verify="number" style="display: none"> + <input id="appeUser$" class="layui-input cool-auto-complete-div" onclick="autoShow(this.id)" type="text" placeholder="璇疯緭鍏�..." onfocus=this.blur()> + <div class="cool-auto-complete-window"> + <input class="cool-auto-complete-window-input" data-key="userQueryByappeUser" onkeyup="autoLoad(this.getAttribute('data-key'))"> + <select class="cool-auto-complete-window-select" data-key="userQueryByappeUserSelect" onchange="confirmed(this.getAttribute('data-key'))" multiple="multiple"> + </select> + </div> + </div> + </div> + <div class="layui-inline" style="width:31%;display: none"> + <label class="layui-form-label">娣诲姞鏃堕棿锛�</label> + <div class="layui-input-inline"> + <input id="appeTime$" class="layui-input" type="text" autocomplete="off"> + </div> + </div> + + + <hr class="layui-bg-gray"> + + <div id="data-detail-btn" class="layui-btn-container layui-form-item"> + <div id="data-detail-submit-save" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="save">淇濆瓨</div> + <div id="data-detail-submit-edit" type="button" class="layui-btn layui-btn-normal" lay-submit lay-filter="edit">淇敼</div> + <div id="data-detail-close" type="button" class="layui-btn" lay-submit lay-filter="close">鍏抽棴</div> + </div> + + <div id="prompt"> + 娓╅Θ鎻愮ず锛氳浠旂粏濉啓鐩稿叧淇℃伅锛�<span class="extrude"><span class="not-null">*</span> 涓哄繀濉�夐」銆�</span> + </div> + </form> +</div> +</body> +<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> +<script type="text/javascript" src="../../static/js/common.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/cool.js" charset="utf-8"></script> +<script type="text/javascript" src="../../static/js/locDetl/locDetl.js" charset="utf-8"></script> +</html> + diff --git a/src/main/webapp/views/home/agvMap.html b/src/main/webapp/views/home/agvMap.html new file mode 100644 index 0000000..e3c0e7a --- /dev/null +++ b/src/main/webapp/views/home/agvMap.html @@ -0,0 +1,1069 @@ +<!DOCTYPE html> +<html lang="en"> +<head> + <meta charset="UTF-8"> + <title>搴撲綅鍦板浘</title> + <link rel="stylesheet" href="../../static/layui/css/layui.css" media="all"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> + <link rel="stylesheet" href="../../static/css/cool.css" media="all"> + <link rel="stylesheet" href="../../static/css/element.css"> + <script type="text/javascript" src="../../static/js/jquery/jquery-3.3.1.min.js"></script> + <script type="text/javascript" src="../../static/layui/layui.js"></script> + <script type="text/javascript" src="../../static/js/handlebars/handlebars-v4.5.3.js"></script> + <script type="text/javascript" src="../../static/js/common.js"></script> + <script type="text/javascript" src="../../static/js/vue.min.js"></script> + <script type="text/javascript" src="../../static/js/element.js"></script> + <style> + .pointContainer { + display: flex; + justify-content: center; + margin-top: 1px; + } + + .pointBox { + background: #bababa; + width: 40px; + height: 40px; + margin-right: 1px; + display: flex; + justify-content: center; + align-items: center; + font-size: 14px; + user-select: none; + color: #fff; + } + + .pointBox:hover{ + background: #00ff7f; + } + + .pointBoxEmpty { + background: #c2c934; + } + + .pointBoxOut { + background: #f1aa19; + } + + .pointBoxOutYy { + background: #618593; + } + + .pointBoxInYy { + background: #fa736f; + } + + .pointBoxGreen { + background: #00ff7f; + } + + .pointBoxBlue { + background: #55aaff; + } + + .pointBoxRed { + background: #ff0000; + } + + .pointBoxStart { + background: #ffaa00; + } + + .pointBoxEnd { + background: #ff55ff; + } + + .pointBoxStation { + background: #ffff00; + } + + .chargeStation { + background: #ffaa7f; + } + + .pointBoxDefault { + background: #86779d; + } + + .pointBoxSelected { + background: #00ff7f !important; + } + + .pointBoxSearch { + background: #9900ff; + } + + .crnLine{ + width: auto; + height: 2px; + margin: 10px 0; + background: #000; + position: relative; + } + + .popBox { + position: absolute; + } + + /*鍗$墖鏍峰紡start*/ + .apple-card { + width: 190px; + height: 254px; + margin: 0 auto; + background-color: #011522; + border-radius: 8px; + z-index: 1; + animation:fadeInOut 0.5s 1; + } + + .apple-card .tools { + display: flex; + align-items: center; + padding: 9px; + } + + .apple-card .circle { + padding: 0 4px; + } + + .apple-card .box { + display: inline-block; + align-items: center; + width: 10px; + height: 10px; + padding: 1px; + border-radius: 50%; + } + + .apple-card .red { + background-color: #ff605c; + position: relative; + } + + .apple-card .red:hover{ + background-color: #ff0300; + } + + .apple-card .red:hover::before { + content: "x"; + font-size: 11px; + color: #fff; + width: 10px; + height: 10px; + display: flex; + justify-content: center; + align-items: center; + position: absolute; + animation:fadeInOut 0.5s 1; + } + + .apple-card .yellow { + background-color: #ffbd44; + } + + .apple-card .green { + background-color: #00ca4e; + } + + .apple-card .card-content{ + color: #fff; + padding: 10px; + } + /*鍗$墖鏍峰紡end*/ + + /*婊戝姩鍗$墖start*/ + .hoverCard { + width: 150px; + height: 224px; + border-radius: 20px; + background: #f5f5f5; + position: relative; + padding: 1.8rem; + border: 2px solid #c3c6ce; + transition: 0.5s ease-out; + overflow: visible; + margin-top: 30px; + } + + .hoverCard .card-details { + color: black; + height: 100%; + gap: .5em; + display: grid; + place-content: center; + } + + .hoverCard .card-button { + transform: translate(-50%, 125%); + width: 60%; + border-radius: 1rem; + border: none; + background-color: #008bf8; + color: #fff; + font-size: 1rem; + padding: .5rem 1rem; + position: absolute; + left: 50%; + bottom: 0; + opacity: 0; + transition: 0.3s ease-out; + } + + .hoverCard .text-body { + color: rgb(134, 134, 134); + } + + /*Text*/ + .hoverCard .text-title { + font-size: 1.5em; + font-weight: bold; + } + + /*Hover*/ + .hoverCard:hover { + border-color: #008bf8; + box-shadow: 0 4px 18px 0 rgba(0, 0, 0, 0.25); + } + + .hoverCard:hover .card-button { + transform: translate(-50%, 50%); + opacity: 1; + } + /*婊戝姩鍗$墖end*/ + + /*妤煎眰鎺у埗start*/ + .floorSelect { + --text: #414856; + --radio: #7C96B2; + --radio-checked: #4F29F0; + --radio-size: 20px; + --width: 150px; + --height: 200px; + --border-radius: 10px; + width: var(--width); + height: var(--height); + border-radius: var(--border-radius); + color: var(--text); + position: relative; + box-shadow: 0 10px 30px rgba(65, 72, 86, 0.05); + display: grid; + grid-template-columns: auto var(--radio-size); + align-items: center; + } + + .floorSelect label { + cursor: pointer; + } + + .floorSelect input[type="radio"] { + -webkit-appearance: none; + -moz-appearance: none; + position: relative; + height: var(--radio-size); + width: var(--radio-size); + outline: none; + margin: 0; + cursor: pointer; + border: 2px solid var(--radio); + background: transparent; + border-radius: 50%; + display: grid; + justify-self: end; + justify-items: center; + align-items: center; + overflow: hidden; + transition: border .5s ease; + } + + .floorSelect input[type="radio"]::before, .floorSelect input[type="radio"]::after { + content: ""; + display: flex; + justify-self: center; + border-radius: 50%; + } + + .floorSelect input[type="radio"]::before { + position: absolute; + width: 100%; + height: 100%; + z-index: 1; + opacity: var(--opacity, 1); + } + + .floorSelect input[type="radio"]::after { + position: relative; + width: calc(100% /2); + height: calc(100% /2); + background: var(--radio-checked); + top: var(--y, 100%); + transition: top 0.5s cubic-bezier(0.48, 1.97, 0.5, 0.63); + } + + .floorSelect input[type="radio"]:checked { + --radio: var(--radio-checked); + } + + .floorSelect input[type="radio"]:checked::after { + --y: 0%; + animation: stretch-animate .3s ease-out .17s; + } + + .floorSelect input[type="radio"]:checked::before { + --opacity: 0; + } + + .floorSelect input[type="radio"]:checked ~ input[type="radio"]::after { + --y: -100%; + } + + .floorSelect input[type="radio"]:not(:checked)::before { + --opacity: 1; + transition: opacity 0s linear .5s; + } + + @keyframes stretch-animate { + 0% { + transform: scale(1, 1); + } + + 28% { + transform: scale(1.15, 0.85); + } + + 50% { + transform: scale(0.9, 1.1); + } + + 100% { + transform: scale(1, 1); + } + } + /*妤煎眰鎺у埗end*/ + + /*鎼滅储start*/ + .search-input { + line-height: 28px; + border: 2px solid transparent; + border-bottom-color: #777; + padding: .2rem 0; + outline: none; + background-color: transparent; + color: #0d0c22; + transition: .3s cubic-bezier(0.645, 0.045, 0.355, 1); + } + + .search-input:focus, .search-input:hover { + outline: none; + padding: .2rem 1rem; + border-radius: 1rem; + border-color: #7a9cc6; + } + + .search-input::placeholder { + color: #777; + } + + .search-input:focus::placeholder { + opacity: 0; + transition: opacity .3s; + } + /*鎼滅储end*/ + + @keyframes fadeInOut { + 0%{ + opacity: 0; + } + 100%{ + opacity: 1; + } + } + </style> +</head> +<body> +<div id="app" style="display: flex;justify-content: space-around;margin-top: 50px;flex-wrap: wrap;" @click="bgClick()"> + + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentFloor = 1" :style="{background: currentFloor==1?'red':''}">1妤�</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentFloor = 3" :style="{background: currentFloor==3?'red':''}">3妤�</button></div> + + <div style="flex: 18;display: flex;justify-content: center;" :style="{zoom:showScale/100.0,marginTop:(showScale)*4 + 'px'}"> + <div style="margin-top: -110px;"> + <div class="pointContainer" v-for="(x,index) in map" :key="index"> + <div v-if="index != 0 && (index != map.length-1)" v-for="(y,idx) in x" :key="idx"> + <div v-if="idx != 0 && (idx != map[index].length-1)"> + <div v-if="map[index][idx].value < 0" style="visibility: hidden;" class="pointBox"></div> + + <!--搴撲綅--> + <div v-else-if="map[index][idx].value == 0" @contextmenu.prevent="rightEvent(index,idx,$event)"> + <div v-if="map[index][idx].locSts == 'O'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxBlue">{{ map[index][idx].locSts }}</div> + <div v-else-if="map[index][idx].locSts == 'F'" @click.left="selectLoc(index,idx)" :class="{'pointBoxSelected':map[index][idx].locOutSelected,'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxRed">{{ map[index][idx].locSts }}</div> + <div v-else-if="map[index][idx].locSts == 'D'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxEmpty">{{ map[index][idx].locSts }}</div> + <div v-else-if="map[index][idx].locSts == 'P'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxOut">{{ map[index][idx].locSts }}</div> + <div v-else-if="map[index][idx].locSts == 'R'" :class="{'pointBoxSearch':map[index][idx].searchStatus}" class="pointBox pointBoxOutYy">{{ map[index][idx].locSts }}</div> + <div v-else-if="map[index][idx].locSts == 'S'" class="pointBox pointBoxInYy">{{ map[index][idx].locSts }}</div> + <div v-else class="pointBox pointBoxDefault" :class="{'pointBoxSearch':map[index][idx].searchStatus}">{{ map[index][idx].locSts }}</div> + </div> + + <!--姣嶈建閬�--> + <div v-else-if="map[index][idx].value == 3"> + <div class="pointBox" style="visibility: hidden;"></div> + </div> + + <!--绔欑偣--> + <div v-else-if="map[index][idx].value == 4" class="pointBox pointBoxStation" style="visibility: hidden;"></div> + <div v-else-if="map[index][idx].value == 5" class="pointBox chargeStation" + @contextmenu.prevent="rightEvent(index,idx,$event)"></div> + <div v-else-if="map[index][idx].value == 9" class="pointBox pointBoxRed" + @contextmenu.prevent="rightEvent(index,idx,$event)"></div> + + </div> + </div> + + <div style="width: 40px;display: flex;justify-content: center;align-items: center;"> + {{ getRealRowByX(index) }} + </div> + + </div> + </div> + + <div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 1" :style="{background: currentLev==1?'red':''}">1F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 2" :style="{background: currentLev==2?'red':''}">2F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 3" :style="{background: currentLev==3?'red':''}">3F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 4" :style="{background: currentLev==4?'red':''}">4F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 5" :style="{background: currentLev==5?'red':''}">5F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 6" :style="{background: currentLev==6?'red':''}">6F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 7" :style="{background: currentLev==7?'red':''}">7F</button></div> + <div style="margin-top: 20px;"><button class="layui-btn" @click="currentLev = 8" :style="{background: currentLev==8?'red':''}">8F</button></div> + <div class="lev-for-floor3" style="margin-top: 20px; display: none;"><button class="layui-btn" @click="currentLev = 8" :style="{background: currentLev==8?'red':''}">9F</button></div> + <div class="lev-for-floor3" style="margin-top: 20px; display: none;"><button class="layui-btn" @click="currentLev = 8" :style="{background: currentLev==8?'red':''}">10F</button></div> + <div class="lev-for-floor3" style="margin-top: 20px; display: none;"><button class="layui-btn" @click="currentLev = 8" :style="{background: currentLev==8?'red':''}">11F</button></div> + <div class="lev-for-floor3" style="margin-top: 20px; display: none;"><button class="layui-btn" @click="currentLev = 8" :style="{background: currentLev==8?'red':''}">12F</button></div> + </div> + </div> + <div style="padding: 40px 20px 10px 10px;" :style="window.innerWidth < 2000 ? 'margin-top: 0px;' : 'flex: 5;margin-top: -70px;'"> + <el-slider v-model="showScale" :marks="showScaleMarks"></el-slider> + <div style="display: flex;justify-content: space-between;flex-wrap: wrap;"> + <div class="hoverCard" style="width: 100%;"> + <div class="card-details" style="place-content: normal;height: auto;"> + <div class="text-body" style="display: flex;flex-wrap: wrap;"> + <div style="width: 100%;margin-bottom: 20px;"> + <div style="display: flex;justify-content: space-between;"> + <div><input v-model="searchMatnr" placeholder="鐗╂枡鍙�" type="text" class="search-input"></div> + <div><input v-model="searchOrderNo" placeholder="璁㈠崟鍙�" type="text" class="search-input"></div> + </div> + <div style="display: flex;justify-content: space-between;margin-top: 10px;"> + <div><input style="width: 110px;" v-model="searchMaktx" placeholder="鐗╂枡鍚嶇О" type="text" class="search-input"></div> + <div><input style="width: 110px;" v-model="searchSpecs" placeholder="瑙勬牸" type="text" class="search-input"></div> + <div><input style="width: 110px;" v-model="searchLocNo" placeholder="搴撲綅鍙�" type="text" class="search-input"></div> + </div> + <button style="width: 100%;margin-top: 10px;" @click="searchLoc" class="layui-btn layui-btn-sm">鎼滅储</button> + </div> +<!-- <div>--> +<!-- <button @click="locToLoc2" class="layui-btn layui-btn-sm">渚ц竟绉诲簱</button>--> +<!-- </div>--> + <div> + <button @click="init" class="layui-btn layui-btn-sm">鍒锋柊</button> + </div> + <div style="margin-left: 10px;"> + <button @click="resetSearch" class="layui-btn layui-btn-sm">閲嶇疆</button> + </div> + <div v-if="!locOutStatus" style="margin-left: 10px;"> + <button @click="locOutStatus = true" class="layui-btn layui-btn-sm">鍑哄簱閫夋嫨</button> + </div> + <div v-else style="margin-left: 10px;border: 1px red solid;display: flex;"> + <div> + <button @click="cancelSelectLoc" class="layui-btn layui-btn-sm">鍙栨秷閫夋嫨</button> + </div> + <div style="display: flex;justify-content: center;align-items: center;"> + <select v-model="outSite"> + <option v-for="(item,index) in outSites" :key="index" :value="item.siteId">{{ item.desc }}</option> + </select> + </div> + <div> + <button @click="locOut" class="layui-btn layui-btn-sm">鍑哄簱</button> + </div> + </div> + </div> + </div> + <button class="card-button">鍔熻兘鍖�</button> + </div> + + <div class="hoverCard"> + <div class="card-details"> + <div class="text-body" style="display: flex;justify-content: space-around;flex-wrap: wrap;"> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">绌哄簱浣�</div><div class="pointBox pointBoxBlue">O</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鍦ㄥ簱</div><div class="pointBox pointBoxRed">F</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">绌烘澘</div><div class="pointBox pointBoxEmpty">D</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鍑哄簱涓�</div><div class="pointBox pointBoxOut">P</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鍑哄簱棰勭害</div><div class="pointBox pointBoxOutYy">R</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鍏ュ簱棰勭害</div><div class="pointBox pointBoxInYy">S</div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鎼滅储缁撴灉</div><div class="pointBox pointBoxSearch"></div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">閫夋嫨缁撴灉</div><div class="pointBox pointBoxSelected"></div> + </div> + <div style="flex: 1;margin-top: 10px;"> + <div style="font-size: 10px;">鍏朵粬</div><div class="pointBox pointBoxDefault">鍏朵粬</div> + </div> + </div> + </div> + <button class="card-button">搴撲綅鐘舵��</button> + </div> + +<!-- <div class="hoverCard">--> +<!-- <div class="card-details">--> +<!-- <p class="text-title" style="text-align: center;">妤煎眰 {{currentLev}}F</p>--> +<!-- <div class="text-body" style="display: flex;">--> +<!-- <div class="floorSelect">--> +<!-- <label for="01">1F</label>--> +<!-- <input id="01" type="radio" name="r" v-model="currentLev" value="1" checked="">--> +<!-- <label for="02">2F</label>--> +<!-- <input id="02" type="radio" v-model="currentLev" name="r" value="2">--> +<!-- <label for="03">3F</label>--> +<!-- <input id="03" type="radio" v-model="currentLev" name="r" value="3">--> +<!-- <label for="04">4F</label>--> +<!-- <input id="04" type="radio" v-model="currentLev" name="r" value="4">--> +<!-- </div>--> +<!-- </div>--> +<!-- </div>--> +<!-- <button class="card-button">妤煎眰 {{currentLev}}F</button>--> +<!-- </div>--> + + </div> + </div> + + <div v-if="rightBox" @click.stop="" :style="{left: rightBoxLeft,top: rightBoxTop}" class="popBox"> + <div class="apple-card"> + <div class="tools"> + <div class="circle" @click.stop="rightBox = false"> + <span class="red box"></span> + </div> + <div class="circle"> + <span class="yellow box"></span> + </div> + <div class="circle"> + <span class="green box"></span> + </div> + </div> + <div class="card-content"> + <div> + 搴撲綅鍙�: {{ map[mapI][mapJ].locNo }} + </div> + <div style="margin-top: 10px;"> + 搴撲綅鐘舵��: {{ getLocSts(map[mapI][mapJ].locSts) }} + </div> + <div style="margin-top: 10px;display: flex;justify-content: space-between;flex-wrap: wrap;"> + <div style="margin-top: 5px;"> + <button class="layui-btn layui-btn-sm" @click="openLocDetail(map[mapI][mapJ].locNo)">搴撲綅璇︽儏</button> + </div> +<!-- <div style="margin-top: 5px;">--> +<!-- <button v-if="map[mapI][mapJ].locSts == 'F'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">搴撲綅绉昏浆</button>--> +<!-- <button v-else-if="map[mapI][mapJ].locSts == 'D'" class="layui-btn layui-btn-sm" @click="locMove(map[mapI][mapJ].locNo)">搴撲綅绉昏浆</button>--> +<!-- <button v-else class="layui-btn layui-btn-sm layui-btn-disabled" disabled>搴撲綅绉昏浆</button>--> +<!-- </div>--> + </div> + </div> + </div> + </div> + + <div v-if="crnBox" @click.stop="" :style="{left: crnBoxLeft,top: crnBoxTop}" class="popBox"> + <div class="apple-card"> + <div class="tools"> + <div class="circle" @click.stop="crnBox = false"> + <span class="red box"></span> + </div> + <div class="circle"> + <span class="yellow box"></span> + </div> + <div class="circle"> + <span class="green box"></span> + </div> + </div> + <div class="card-content"> + <div>鍫嗗灈鏈哄彿锛歿{crnList[crnBox - 1].crnNo}}</div> + <div>宸ヤ綔鍙凤細{{crnList[crnBox - 1].wrkNo}}</div> + <div>婧愬簱浣嶏細{{crnList[crnBox - 1].frmLocno}}</div> + <div>鐩爣搴撲綅锛歿{crnList[crnBox - 1].toLocno}}</div> + <div>鍙叆锛歿{crnList[crnBox - 1].inEnable}}</div> + <div>鍙嚭锛歿{crnList[crnBox - 1].outEnable}}</div> + <div>鐘舵�侊細{{crnList[crnBox - 1].crnSts$}}</div> + <div>寮傚父锛歿{crnList[crnBox - 1].crnErr$}}</div> + </div> + </div> + </div> + +</div> +<script> + + var $layui = layui.config({ + base: baseUrl + "/static/layui/lay/modules/" + }).use(['layer','form'], function () {}) + + var app = new Vue({ + el: '#app', + data: { + map: [], + mapData: "", + importData: null, + startPosition: "0500501", + endPosition: "0802501", + mapI: 0, + mapJ: 0, + rightBox: false, + rightBoxTop: "0px", + rightBoxLeft: "0px", + pointContainerWidth: 0, + currentLev: 1, + currentFloor: 1, + crnList: null, + crnBox: false, + crnBoxTop: "0px", + crnBoxLeft: "0px", + locOutStatus: false, + locOutLocNo: [], + searchMatnr: "", + searchOrderNo: "", + searchSpecs: "", + searchMaktx: "", + searchLocNo: "", + outSite: null, + outSites: null, + showScale: 65, //鎺у埗鍦板浘鏄剧ず澶у皬姣斾緥 + showScaleMarks: {//姣斾緥婊戝姩鏉℃樉绀烘爣璁� + 0: "0%", + 50: { + style: { + color: '#1989FA' + }, + label: "50%" + }, + 100: "100%", + }, + locStsList: [],//搴撲綅鐘舵�佸垪琛� + }, + created(){ + this.init() + + this.getOutSite() + }, + watch: { + map: { + deep: true, + handler(val) { + this.printData() + } + }, + currentLev: { + deep: true, + handler(val) { + this.init() + if (this.searchMatnr != "" + || this.searchOrderNo != "" + || this.searchSpecs != "" + || this.searchMaktx != "" + || this.searchLocNo != "") { + this.searchLoc() + } + } + }, + currentFloor: { + deep: true, + handler(val) { + if(this.currentFloor == 3){ + $(".lev-for-floor3").show(); + }else{ + $(".lev-for-floor3").hide(); + } + + this.init() + if (this.searchMatnr != "" + || this.searchOrderNo != "" + || this.searchSpecs != "" + || this.searchMaktx != "" + || this.searchLocNo != "") { + this.searchLoc() + } + } + } + }, + methods: { + init(){ + let that = this + var floor = $('#floorSelect option:selected').val(); + $.ajax({ + url: baseUrl + "/agv/map/getData/" + this.currentFloor + "/" +this.currentLev + "/auth", + headers: {'token': localStorage.getItem('token')}, + method: "get", + success: (data) => { + that.importDataClick(data) + } + }) + + this.locOutStatus = false + this.locOutLocNo = [] + + this.getLocStsList();//鑾峰彇搴撲綅鐘舵�佸垪琛� + }, + resetSearch(){ + this.searchMatnr = "" + this.searchOrderNo = "" + this.searchSpecs = "" + this.searchMaktx = "" + this.searchLocNo = "" + this.searchLoc() + }, + printData() { + this.mapData = JSON.stringify(this.map) + }, + importDataClick(mapData) { + let tmp = JSON.parse(mapData); + let data = [] + tmp.forEach((item, index) => { + let data2 = [] + item.forEach((val, idx) => { + val.searchStatus = false//鎼滅储鏍囪 + data2.push(val) + }) + this.pointContainerWidth = item.length * (40+1) + data.push(data2) + }) + this.map = data + this.printData() + }, + getRealRowByX(x) { + //鑾峰彇鐪熷疄搴撲綅琛屽彿锛岄�氳繃鍧愭爣x + let data = this.map + let rowData = data[x] + for (var i = 1; i < rowData.length; i++) { + if (rowData[i].locNo != undefined) { + let locNo = rowData[i].locNo; + return "#" + parseInt(locNo.substr(0, 2)); + } + } + + return ""; + }, + rightEvent(x, y, e) { + this.rightBox = true + this.mapI = x + this.mapJ = y + this.rightBoxTop = e.y + "px" + this.rightBoxLeft = e.x + "px" + }, + bgClick() { + this.rightBox = false + this.crnBox = false + }, + openLocDetail(locNo) { + url = '/agv/locDetl/list/auth'; + $layui.layer.open({ + type: 2, + title: '搴撲綅鐗╂枡', + maxmin: true, + area: [top.detailWidth, top.detailHeight], + shadeClose: true, + content: '../report/locDetl.html?locNo=' + locNo, + success: function(layero, index){ + } + }); + }, + getLocStsList() { + //鑾峰彇搴撲綅鐘舵�佸垪琛� + let that = this + $.ajax({ + url: baseUrl + "/basLocSts/list/auth", + headers: {'token': localStorage.getItem('token')}, + method: "get", + success: (res) => { + that.locStsList = res.data.records + } + }) + }, + getLocSts(locSts) { + //鑾峰彇搴撲綅鐘舵�� + let locStsList = this.locStsList + let locDesc = "" + locStsList.forEach((item,index) => { + if (item.locSts == locSts) { + locDesc = item.locDesc + } + }) + return locDesc + }, + locMove(locNo) { + //搴撲綅绉昏浆 + let that = this + $.ajax({ + url: baseUrl + "/loc/move/start", + headers: {'token': localStorage.getItem('token')}, + dataType: 'json', + data: { + sourceLocNo: locNo + }, + method: 'POST', + success: function (res) { + if (res.code === 200) { + $layui.layer.msg(res.msg); + that.init() + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + $layui.layer.msg(res.msg); + } + } + }) + }, + clickCrnBox(e,crnNo) { + this.crnBox = crnNo + this.crnBoxTop = e.y + "px" + this.crnBoxLeft = e.x + "px" + }, + locOut() { + //鍑哄簱 + let that = this + let locOutLocNo = this.locOutLocNo + if (locOutLocNo.length == 0) { + $layui.layer.msg("璇峰厛閫夋嫨搴撲綅"); + return; + } + + let map = this.map + //宸烽亾list + let bayList = [] + // 灏嗙敤鎴烽�夊畾鐨勫簱浣嶉�氳繃宸烽亾杩涜鍒嗙粍 + locOutLocNo.forEach((item,index) => { + let obj = { + x: item.x, + y: item.y, + locNo: map[item.x][item.y].locNo + } + + if (bayList[item.y] == undefined) { + bayList[item.y] = [obj] + }else { + bayList[item.y].push(obj) + } + }) + + //杩涜鎺掑簭 + bayList.forEach((item,index) => { + for (var i = 0; i < item.length; i++) { + for (var j = i+1; j < item.length; j++) { + if (item[i].x > item[j].x) { + //浜ゆ崲 + let tmp = item[j]; + item[j] = item[i] + item[i] = tmp + } + } + } + }) + + //鍑嗗鍑哄簱 + if (this.outSite == null) { + $layui.layer.msg("璇烽�夋嫨鍑哄簱绔欑偣"); + return; + } + + let locNos = [] + bayList.forEach((item,index) => { + item.forEach((val,idx) => { + locNos.push(val.locNo) + }) + }) + + let locDetls = [] + $.ajax({ + url: baseUrl+"/agv/locDetl/auth", + headers: {'token': localStorage.getItem('token')}, + data: {locNos:locNos}, + method: 'POST', + async: false, + success: function (res) { + if (res.code === 200) { + locDetls = res.data + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + layer.msg(res.msg) + } + } + }) + + locDetls.forEach((item,index) => { + item.count = item.anfme + }) + + $.ajax({ + url: baseUrl + "/plate/out/start", + headers: {'token': localStorage.getItem('token')}, + data: JSON.stringify({ + outSite: this.outSite, + locDetls: locDetls + }), + contentType:'application/json;charset=UTF-8', + method: 'POST', + success: function (res) { + if (res.code === 200){ + $layui.layer.msg(res.msg); + that.init() + } else if (res.code === 403){ + top.location.href = baseUrl+"/"; + } else { + $layui.layer.msg(res.msg) + } + } + }); + }, + searchDataIndex(data,dist) { + //鎼滅储璧峰鐐� + let searchStartPoint = -1; + dist.forEach((val,idx) => { + if (val.x == data.x && val.y == data.y) { + //鎵惧埌鐐逛綅 + searchStartPoint = idx + } + }) + return searchStartPoint; + }, + selectLoc(x, y) { + //閫夋嫨搴撲綅 + if (this.locOutStatus) { + let tmp = this.map + let selected = tmp[x][y].locOutSelected ? 0 : 1 + tmp[x][y].locOutSelected = selected + + if (selected) { + this.locOutLocNo.push({ + x: x, + y: y + }); + }else { + //鍓旈櫎鎺変笉閫夋嫨鍏冪礌 + let locOutLocNo = this.locOutLocNo + let tmp = [] + locOutLocNo.forEach((item,index) => { + if (item.x !== x || item.y !== y) { + tmp.push(item) + } + }) + this.locOutLocNo = tmp + } + + this.map = tmp + this.$forceUpdate() + } + }, + cancelSelectLoc() { + //鍙栨秷閫夋嫨搴撲綅 + let data = this.locOutLocNo + let tmp = this.map + data.forEach((item,index) => { + tmp[item.x][item.y].locOutSelected = 0; + }) + this.locOutLocNo = [] + this.map = tmp + this.locOutStatus = false + }, + searchLoc() { + //閫氳繃鐗╂枡缂栧彿鎼滅储搴撲綅鍙� + // if (this.searchValue == "") { + // $layui.layer.msg("璇疯緭鍏ョ墿鏂欑紪鍙锋垨璁㈠崟鍙�"); + // return; + // } + + let that = this; + $.ajax({ + url: baseUrl + "/agv/map/searchData/auth", + headers: {'token': localStorage.getItem('token')}, + dataType: 'json', + data: { + lev: this.currentLev, + locNo: this.searchLocNo, + orderNo: this.searchOrderNo, + specs: this.searchSpecs, + matnr: this.searchMatnr, + maktx: this.searchMaktx + }, + method: 'POST', + success: function (res) { + if (res.code === 200) { + let tmp = that.map + let data = res.data + tmp.forEach((item,index) => {//娓呯┖涔嬪墠鐨勬悳绱㈢粨鏋� + item.forEach((val,idx) => { + if (tmp[index][idx].searchStatus != undefined) { + tmp[index][idx].searchStatus = false;//鎼滅储鏍囪 + } + + }) + }) + + tmp.forEach((item,index) => {//娓呯┖涔嬪墠鐨勬悳绱㈢粨鏋� + item.forEach((val,idx) => { + if (tmp[index][idx].searchStatus != undefined) { + tmp[index][idx].searchStatus = false;//鎼滅储鏍囪 + } + + }) + }) + + data.forEach((item,i) => { + let locNo = item.locNo + tmp.forEach((item,index) => { + item.forEach((val,idx) => { + if (tmp[index][idx].locNo == locNo) { + tmp[index][idx].searchStatus = true//鎼滅储鏍囪 + } + }) + }) + }) + that.map = tmp + $layui.layer.msg("鎼滅储鎴愬姛"); + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + $layui.layer.msg(res.msg); + } + } + }) + }, + getOutSite() { + let that = this + $.ajax({ + url: baseUrl + "/agv/available/take/site", + headers: {'token': localStorage.getItem('token')}, + dataType: 'json', + data: {}, + method: 'POST', + success: function (res) { + if (res.code === 200) { + that.outSites = res.data + that.outSite = res.data[0].siteId + } else if (res.code === 403) { + top.location.href = baseUrl + "/"; + } else { + $layui.layer.msg(res.msg); + } + } + }) + }, + } + }) + +</script> +</body> +</html> \ No newline at end of file diff --git a/src/main/webapp/views/home/console.html b/src/main/webapp/views/home/console.html index aff7c04..0441f9f 100644 --- a/src/main/webapp/views/home/console.html +++ b/src/main/webapp/views/home/console.html @@ -266,11 +266,11 @@ var cols = [ //{field: 'appeTime$', title: '鍏ュ簱鏃堕棿', align: 'center', width: 165} {field: 'stay_time', align: 'center',title: '婊炵暀澶╂暟',width: 90} - ,{field: 'store_max_date', align: 'center',title: '搴撻緞涓婇檺',width: 90} - ,{field: 'store_min', title: '搴撳瓨涓嬮檺', align: 'center'} + //,{field: 'store_max_date', align: 'center',title: '搴撻緞涓婇檺',width: 90} + //,{field: 'store_min', title: '搴撳瓨涓嬮檺', align: 'center'} ,{field: 'sum_qty', title: '搴撳瓨鎬绘暟', align: 'center'} - ,{field: 'store_max', title: '搴撳瓨涓婇檺', align: 'center'} - ,{field: 'loc_no', align: 'center',title: '搴撲綅鍙�',width: 90} + //,{field: 'store_max', title: '搴撳瓨涓婇檺', align: 'center'} + ,{field: 'loc_no', align: 'center',title: '搴撲綅鍙�'} ]; cols.push.apply(cols, detlCols); -- Gitblit v1.9.1