From 747785dd1c86595f65c85fdeda289f917196c467 Mon Sep 17 00:00:00 2001 From: zyx <zyx123456> Date: 星期五, 17 十一月 2023 16:52:47 +0800 Subject: [PATCH] 优化agv工作档生成 组托时管控料箱码 拣料出库时生成工作党 AGV库存主档,工作主档的barcode也要记录料箱条码号 AGV工作党任务完成、取消优化 自动补货 管控不带料箱的托盘 盘点加上楼层选择 --- src/main/webapp/static/js/agvLocDetl/locDetl.js | 53 +++++++ src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java | 53 +++++++ src/main/java/com/zy/asrs/controller/AgvLocDetlController.java | 9 + src/main/java/com/zy/asrs/service/AgvWrkMastService.java | 2 src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java | 11 + src/main/webapp/views/agvLocDetl/locDetl.html | 5 src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java | 17 ++ src/main/java/com/zy/asrs/controller/AgvBasDevpController.java | 11 - src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java | 5 src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java | 2 src/main/java/com/zy/asrs/service/AgvLocMastService.java | 2 src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java | 13 + src/main/java/com/zy/asrs/controller/AgvIoWorkController.java | 4 src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java | 3 src/main/java/com/zy/asrs/service/AgvLocDetlService.java | 4 src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java | 24 +-- src/main/webapp/views/pakStore/locDetlCheckQuery.html | 7 + src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java | 75 ++++++---- src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java | 68 ++++----- src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java | 3 src/main/webapp/static/js/common.js | 2 src/main/webapp/views/agvPakStore/locDetlCheckQuery.html | 13 + src/main/resources/application.yml | 22 +- 23 files changed, 294 insertions(+), 114 deletions(-) diff --git a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java index c167c1d..e75e9b3 100644 --- a/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java +++ b/src/main/java/com/zy/asrs/controller/AgvBasDevpController.java @@ -6,10 +6,7 @@ import com.baomidou.mybatisplus.mapper.Wrapper; 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.core.common.*; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.entity.param.LocMastInitParam; @@ -217,7 +214,7 @@ try { devNos = (List<String>) map.get("devNo"); agvWrkMastList = devNos.stream().map(devNo -> { - AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() != 101 && agvWrkMast.getIoType() != 110){ throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓嶄负101.鍑哄簱锛屾棤娉曟墽琛屽鍣ㄧ鍦轰换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); } @@ -275,7 +272,7 @@ try { devNos = (List<String>) map.get("devNo"); agvWrkMastList = devNos.stream().map(devNo -> { - AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() == 101){ throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�101.鍑哄簱锛屾棤娉曟墽琛屾嫞鏂欏叆搴撲换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); } @@ -283,7 +280,7 @@ }).collect(Collectors.toList()); }catch (Exception e){ String devNo = map.get("devNo").toString(); - AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo)); + AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>().eq("loc_no", devNo).eq("wrk_sts",205L)); if(agvWrkMast.getIoType() == 101){ throw new CoolException("宸ヤ綔鍙蜂负" + agvWrkMast.getWrkNo() + "绫诲瀷涓�101.鍑哄簱锛屾棤娉曟墽琛屾嫞鏂欏叆搴撲换鍔★紝璇烽噸鏂伴�夋嫨绔欑偣銆�"); } diff --git a/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java b/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java index e7f1044..e7bc5c7 100644 --- a/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java +++ b/src/main/java/com/zy/asrs/controller/AgvIoWorkController.java @@ -66,6 +66,10 @@ param.remove("row"); } } + if(!Cools.isEmpty(param.get("floor"))){ + wrapper.like("loc_no","@"+param.get("floor")); + param.remove("floor"); + } excludeTrash(param); convert(param, wrapper); allLike(AgvLocDetl.class, param.keySet(), wrapper, condition); diff --git a/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java b/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java index c909439..d4a8e5c 100644 --- a/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java +++ b/src/main/java/com/zy/asrs/controller/AgvLocDetlController.java @@ -20,6 +20,7 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; @@ -145,6 +146,14 @@ return R.ok(exportSupport(list, fields)); } + @RequestMapping(value = "/locDetl/compare/auth") + @ManagerAuth(memo = "搴撳瓨鏄庣粏姣斿") + public R compareLocDetl(MultipartFile file) throws IOException { + agvLocDetlService.compareToEss(file); + + 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()); diff --git a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java index d474beb..39ddb69 100644 --- a/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java +++ b/src/main/java/com/zy/asrs/mapper/AgvBasDevpMapper.java @@ -38,6 +38,6 @@ "\tnum") List<Map<String,Object>> selectDevNoAndNumBystationCode(@Param("stationCode") String stationCode); - @Select("select station_code from agv_bas_devp group by station_code ") + @Select("select station_code from agv_bas_devp group by station_code") List<String> selectAllStationCode(); } diff --git a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java index 22cda63..3deaf54 100644 --- a/src/main/java/com/zy/asrs/service/AgvLocDetlService.java +++ b/src/main/java/com/zy/asrs/service/AgvLocDetlService.java @@ -5,7 +5,9 @@ import com.zy.asrs.entity.AgvLocDetl; import com.zy.common.model.LocDto; import com.zy.common.model.TaskDto; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; import java.util.List; public interface AgvLocDetlService extends IService<AgvLocDetl> { @@ -39,4 +41,6 @@ public AgvLocDetl selectLocdetl(String locNo,String matnr,String batch,String csocode,String isocode); + public void compareToEss(MultipartFile file) throws IOException; + } diff --git a/src/main/java/com/zy/asrs/service/AgvLocMastService.java b/src/main/java/com/zy/asrs/service/AgvLocMastService.java index afcb341..ae0a38f 100644 --- a/src/main/java/com/zy/asrs/service/AgvLocMastService.java +++ b/src/main/java/com/zy/asrs/service/AgvLocMastService.java @@ -18,7 +18,7 @@ void updateLocType2ByRBL(Integer locType2, AgvLocRule locRule); - public void updateLocStsByLocNo(String locNo, String locSts); + public void updateLocStsByLocNo(String locNo, String locSts, String barcode); public List<String> queryGroupEmptyStock(int floor); diff --git a/src/main/java/com/zy/asrs/service/AgvWrkMastService.java b/src/main/java/com/zy/asrs/service/AgvWrkMastService.java index 097a04a..0aca706 100644 --- a/src/main/java/com/zy/asrs/service/AgvWrkMastService.java +++ b/src/main/java/com/zy/asrs/service/AgvWrkMastService.java @@ -24,4 +24,6 @@ public List<AgvWrkMast> selectReadyAgvWrkMast(); + public AgvWrkMast selectByContainerCode(String containerCode); + } 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 6a4fe27..310b62a 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvBasDevpServiceImpl.java @@ -102,7 +102,9 @@ List<String> list = this.selectCacheShelvesStationCodeByFloor(3); if(list.contains(stationCode)){ - wrapper.orderBy("dev_no",false); + if(Cools.eq(stationCode,"CS-305") || Cools.eq(stationCode,"CS-306") || Cools.eq(stationCode,"CS-307")){ + wrapper.orderBy("dev_no",false); + } } List<AgvBasDevp> agvBasDevpList = this.selectList(wrapper); @@ -118,10 +120,21 @@ return agvBasDevpDto; } - AgvWrkMast agvWrkMast = agvWrkMastService.selectOne(new EntityWrapper<AgvWrkMast>() + List<AgvWrkMast> agvWrkMasts = agvWrkMastService.selectList(new EntityWrapper<AgvWrkMast>() .eq("loc_no", agvBasDevpDto.getDevNo()) .or().eq("source_loc_no",agvBasDevpDto.getDevNo())); + AgvWrkMast agvWrkMast = null; + for (AgvWrkMast wrkMast : agvWrkMasts){ + if(Cools.isEmpty(agvWrkMast)){ + agvWrkMast = wrkMast; + }else { + if(agvWrkMast.getWrkSts() < wrkMast.getWrkSts()){ + agvWrkMast = wrkMast; + } + } + } + agvBasDevpDto.setAgvWrkMast(agvWrkMast); if("F".equals(agvBasDevpDto.getLocSts()) || "R".equals(agvBasDevpDto.getLocSts())){ 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 5932832..fae83c0 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvLocDetlServiceImpl.java @@ -5,6 +5,7 @@ import com.baomidou.mybatisplus.plugins.Page; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; +import com.core.exception.CoolException; import com.zy.asrs.entity.AgvLocDetl; import com.zy.asrs.entity.AgvLocMast; import com.zy.asrs.entity.AgvWrkDetl; @@ -17,11 +18,21 @@ import com.zy.common.model.LocDto; import com.zy.common.model.TaskDto; import lombok.extern.slf4j.Slf4j; +import org.apache.poi.hssf.usermodel.HSSFWorkbook; +import org.apache.poi.ss.usermodel.DataFormatter; +import org.apache.poi.ss.usermodel.Row; +import org.apache.poi.ss.usermodel.Sheet; +import org.apache.poi.ss.usermodel.Workbook; +import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; +import java.io.IOException; +import java.io.InputStream; import java.util.ArrayList; +import java.util.Date; import java.util.List; import java.util.stream.Collectors; @@ -191,5 +202,47 @@ return this.baseMapper.selectLocdetl(locNo,matnr,batch,csocode,isocode); } + @Override + public void compareToEss(MultipartFile file) throws IOException { + InputStream inStream = file.getInputStream(); + String fileMime = file.getContentType(); + int excelVersion = 2007; + if ("application/vnd.ms-excel".equals(fileMime)) { + excelVersion = 2003; + } + Workbook book = null; + try { + if (excelVersion == 2003) { + book = new HSSFWorkbook(inStream); + } + else { // 褰� excel 鏄� 2007 鏃� + book = new XSSFWorkbook(inStream); + } + } catch (Exception e) { + log.error("fail", e); + throw new CoolException("瀵煎叆鏂囦欢鏍煎紡閿欒锛岃浣跨敤xls鍚庣紑鐨勬枃浠讹紒"); + } + + Sheet sheet = book.getSheetAt(0); + int totalRows = sheet.getLastRowNum() + 1; // 鎬� + Date now = new Date(); + DataFormatter dataFormatter = new DataFormatter(); + for (int i = 0; i < totalRows; i++) { + Row row = sheet.getRow(i); + // 搴撲綅鍙� + String locNo = dataFormatter.formatCellValue(row.getCell(0)); + // 瀹瑰櫒鐮� + String containerCode = dataFormatter.formatCellValue(row.getCell(1)); + + List<AgvLocDetl> agvLocDetls = this.selectList(new EntityWrapper<AgvLocDetl>().eq("loc_no", locNo).eq("supp_code", containerCode)); + if(Cools.isEmpty(agvLocDetls)){ + log.info("搴撲綅鍙凤細" + locNo + "锛屽鍣ㄧ爜锛�" + containerCode + "锛屼笉瀛樺湪鏄庣粏"); + } + if(agvLocDetls.size()>1){ + log.info("搴撲綅鍙凤細" + locNo + "锛屽鍣ㄧ爜锛�" + containerCode + "锛屽瓨鍦�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 0385081..9df60a7 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvLocMastServiceImpl.java @@ -137,9 +137,10 @@ this.baseMapper.updateLocType2(locType2,locRule.getRowBeg(),locRule.getRowEnd(),locRule.getBayBeg(),locRule.getBayEnd(),locRule.getLevBeg(),locRule.getLevEnd(),locRule.getFloor()); } - public void updateLocStsByLocNo(String locNo, String locSts) { + public void updateLocStsByLocNo(String locNo, String locSts, String barcode) { AgvLocMast agvLocMast = this.selectById(locNo); agvLocMast.setLocSts(locSts); + agvLocMast.setBarcode(barcode); this.updateById(agvLocMast); } diff --git a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java index 92dda9f..6dfd117 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvMobileServiceImpl.java @@ -40,6 +40,8 @@ private AgvBasDevpService agvBasDevpService; @Autowired private AgvLocDetlService agvLocDetlService; + @Autowired + private AgvWrkMastService agvWrkMastService; /* @@ -54,12 +56,17 @@ //妫�鏌ユ槸鍚﹀凡瀛樺湪鐩稿悓鐨勬墭鐩樻潯鐮侊紝瀛樺湪鍒欐姏鍑哄紓甯� if (agvWaitPakinService.selectCount(new EntityWrapper<AgvWaitPakin>().eq("supp_code", param.getBarcode())) > 0) { - throw new CoolException(param.getBarcode() + "鏁版嵁姝e湪杩涜鍏ュ簱"); + throw new CoolException(param.getBarcode() + "鏂欐兂鐮佸凡瀛樺湪AGV鍏ュ簱閫氱煡妗d腑"); } //妫�鏌ュ簱瀛樻槸鍚︽湁鐩稿悓鏂欑锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父 if(!Cools.isEmpty(agvLocDetlService.selectOne(new EntityWrapper<AgvLocDetl>().eq("supp_code",param.getBarcode())))){ - throw new CoolException(param.getBarcode() + "鏂欑鐮佸凡鍦ㄥ簱瀛樹腑"); + throw new CoolException(param.getBarcode() + "鏂欑鐮佸凡瀛樺湪AGV搴撳瓨鏄庣粏涓�"); + } + + //鏌ョ湅宸ヤ綔妗f槸鍚︽湁鐩稿悓鏂欑锛屽瓨鍦ㄥ垯鎶涘嚭寮傚父 + if(!Cools.isEmpty(agvWrkMastService.selectByContainerCode(param.getBarcode()))){ + throw new CoolException(param.getBarcode() + "鏂欑鐮佸凡瀛樺湪AGV宸ヤ綔妗d腑"); } if (Cools.isEmpty(param.getOrderNo())) { 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 47e234e..7e48d42 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWorkServiceImpl.java @@ -90,12 +90,10 @@ //妫�绱㈠簱浣嶏紝閫夋嫨鍚堥�傜殑搴撲綅 AgvLocMast agvLocMast = agvCommonService.getLocNo(agvWaitPakinList, agvBasDevp.getFloor()); //鐢熸垚宸ヤ綔妗� - //AgvWrkMast wrkMast = createWrkMast(agvBasDevp, agvLocMast, now, userId); AgvWrkMast wrkMast = createWrkMast(1,201L,agvBasDevp.getDevNo(),agvLocMast.getLocNo(),agvBasDevp.getBarcode(),now,userId, isConveyor); //鏍囪鏄惁涓鸿緭閫佺嚎鍏ュ簱 wrkMast.setMk(isConveyor ? "Y" : "N"); //鐢熸垚宸ヤ綔妗f槑缁� - //createWrkDetlReWrite(agvWaitPakinList,wrkMast,userId); agvWaitPakinList.forEach(wp -> { createWrkDetlReWrite(wp.getMatnr(),wrkMast.getWrkNo(),wp.getOrderNo(),wp.getBatch(),wp.getAnfme(),wp.getSuppCode(),now,userId,wp.getThreeCode(),wp.getDeadTime()); }); @@ -170,6 +168,11 @@ public void pickIn(List<AgvWrkMast> agvWrkMastList){ Date now = new Date(); agvWrkMastList.forEach(agvWrkMast -> { + + //淇濆瓨鎷f枡鍑哄簱鐨勫伐浣滄。鍜屾槑缁� + agvWrkMastLogService.save(agvWrkMast); + agvWrkDetlLogService.save(agvWrkMast.getWrkNo()); + //淇敼宸ヤ綔鍏� agvWrkMast.setWrkSts(201L); @@ -504,19 +507,17 @@ throw new CoolException(workNo+"宸ヤ綔妗d笉瀛樺湪"); } - if(wrkMast.getWrkSts() > 202){ - //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 - agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205); + //淇敼AGV宸ヤ綔妗g殑宸ヤ綔鐘舵�佷负205.宸ヤ綔瀹屾垚 + agvWrkMastService.updateWrkStsByWrkNo(wrkMast.getWrkNo(),205); - //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱 - if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){ - //淇敼鍑哄簱绔欑偣鐘舵�� - agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); - } - //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱 - if(wrkMast.getIoType() == 110){ - agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); - } + //鍑哄簱浠诲姟 101.鍑哄簱 || 103.鎷f枡鍑哄簱 || 107.鐩樼偣鍑哄簱 + if(wrkMast.getIoType() == 101 || wrkMast.getIoType() == 103 || wrkMast.getIoType() == 107){ + //淇敼鍑哄簱绔欑偣鐘舵�� + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); + } + //鍑哄簱浠诲姟 110.绌烘澘鍑哄簱 + if(wrkMast.getIoType() == 110){ + agvBasDevpService.updateLocStsAndBarcodeByDevNo(wrkMast.getLocNo(),"F",wrkMast.getBarcode()); } } @@ -532,31 +533,28 @@ throw new CoolException("褰撳墠浠诲姟涓嶅彲鍙栨秷"); } - //AGV鏈哄櫒浜烘湭鍙栬揣鍓嶅彇娑� - if(wrkMast.getWrkSts() < 203){ - //鍏ュ簱鍙栨秷 - if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){ - //婧愮珯鐐� - String devNo = wrkMast.getSourceLocNo(); - //鐩爣搴撲綅 - String locNo = wrkMast.getLocNo(); - agvLocMastService.updateLocStsByLocNo(locNo,"O"); - agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode()); + //鍏ュ簱鍙栨秷 + if(wrkMast.getIoType() == 1 || wrkMast.getIoType() == 10){ + //婧愮珯鐐� + String devNo = wrkMast.getSourceLocNo(); + //鐩爣搴撲綅 + String locNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"O",""); + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"F",wrkMast.getBarcode()); - //鍑哄簱鍙栨秷 - }else { - //婧愬簱浣� - String locNo = wrkMast.getSourceLocNo(); - //鐩爣绔欑偣 - String devNo = wrkMast.getLocNo(); - agvLocMastService.updateLocStsByLocNo(locNo,"F"); - if(devNo.contains("@")){ - agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O",""); - } + //鍑哄簱鍙栨秷 + }else { + //婧愬簱浣� + String locNo = wrkMast.getSourceLocNo(); + //鐩爣绔欑偣 + String devNo = wrkMast.getLocNo(); + agvLocMastService.updateLocStsByLocNo(locNo,"F",wrkMast.getBarcode()); + if(devNo.contains("@")){ + agvBasDevpService.updateLocStsAndBarcodeByDevNo(devNo,"O",""); } - } + //璁㈠崟鍥炴粴 //List<AgvWrkDetl> agvWrkDetlList = agvWrkDetlService.selectByWrkNo(wrkMast.getWrkNo()); List<AgvWrkDetl> agvWrkDetlList1 = agvWrkDetlService.selectList(new EntityWrapper<AgvWrkDetl>().eq("wrk_no", wrkMast.getWrkNo())); diff --git a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java index 66d1b6e..ff1c6b5 100644 --- a/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java +++ b/src/main/java/com/zy/asrs/service/impl/AgvWrkMastServiceImp.java @@ -143,6 +143,11 @@ //return this.baseMapper.selectReadyAgvWrkMast(); } + @Override + public AgvWrkMast selectByContainerCode(String containerCode) { + return this.selectOne(new EntityWrapper<AgvWrkMast>().eq("barcode",containerCode)); + } + private void getContainerMoveParam(List<AgvWrkMast> agvWrkMastList,List<Map<String,String>> positionCodeMapList){ //寰�瀹瑰櫒鍏ュ満鍙傛暟涓斁鍏ユ簮绔欑偣浣嶇疆 for(AgvWrkMast agvWrkMast : agvWrkMastList){ diff --git a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java index 37f2cff..d9cf22c 100644 --- a/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java +++ b/src/main/java/com/zy/asrs/task/AgvWrkMastScheduler.java @@ -122,7 +122,7 @@ /* 瀹氭椂澶勭悊绛夊緟鎵ц鐨勪换鍔� 宸ヤ綔鐘舵�佷负21.鐢熸垚鍑哄簱浠诲姟 涓旂洰鏍囧簱浣嶄腑涓嶅惈@瀛楃 */ - @Scheduled(cron = "0/5 * * * * ? ") + @Scheduled(cron = "0/10 * * * * ? ") public void dealWatiWrk(){ List<AgvWrkMast> agvWrkMastList = agvWrkMastService.selectReadyAgvWrkMast(); if(!Cools.isEmpty(agvWrkMastList)){ @@ -132,6 +132,5 @@ log.error(e.getMessage()); } } - } } diff --git a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java index 7050458..11912ac 100644 --- a/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java +++ b/src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java @@ -5,6 +5,7 @@ import com.zy.asrs.entity.DocType; import com.zy.asrs.entity.Order; import com.zy.asrs.service.DocTypeService; +import com.zy.asrs.service.MatService; import com.zy.asrs.service.OrderService; import com.zy.asrs.task.handler.AutoReplenishmentHandler; import lombok.extern.slf4j.Slf4j; @@ -24,12 +25,22 @@ private DocTypeService docTypeService; @Autowired private AutoReplenishmentHandler autoReplenishmentHandler; + @Autowired + private MatService matService; + + /* + 瀹氭椂渚垮埄搴撳瓨锛岀敓鎴愯嚜鍔ㄨˉ璐у崟鎹� + */ + //@Scheduled(cron = "0/5 * * * * ? ") + public void createOrder(){ + + } /* 瀹氭椂澶勭悊鑷姩琛ヨ揣鍗曟嵁 */ @Scheduled(cron = "0/5 * * * * ? ") - public void excute(){ + public void excuteOrder(){ DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "鑷姩琛ヨ揣鍗�")); List<Order> orderList = orderService.selectList(new EntityWrapper<Order>() .eq("doc_type", docType.getDocId()) 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 f7f3e71..b22bdd1 100644 --- a/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AgvWrkMastHandler.java @@ -8,6 +8,7 @@ import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; +import lombok.Synchronized; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; @@ -57,10 +58,10 @@ agvWrkMastService.updateById(agvWrkMast); if(agvWrkMast.getIoType() == 10){ // 绌烘澘鍏ュ簱 璁剧疆搴撲綅鐘舵�佷负D.绌烘《/绌烘爤鏉� - agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D"); + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"D",agvWrkMast.getBarcode()); }else{ //淇敼鐩爣搴撲綅鐘舵�佷负F.鍦ㄥ簱 - agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F"); + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getLocNo(),"F",agvWrkMast.getBarcode()); } //鐢熸垚AGV宸ヤ綔鍘嗗彶妗� agvWrkMastLogService.save(agvWrkMast); @@ -82,7 +83,7 @@ //鏇存柊搴撳瓨鏄庣粏 agvLocDetlService.updateStock(agvWrkMast.getSourceLocNo(),agvWrkMast.getLocNo()); //淇敼婧愬簱浣嶇姸鎬佷负O - agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O",""); } //鍒犻櫎AGV宸ヤ綔妗� @@ -113,7 +114,7 @@ agvWrkMast.setWrkSts(207L); agvWrkMastService.updateById(agvWrkMast); //淇敼婧愬簱浣嶇姸鎬佷负O - agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O"); + agvLocMastService.updateLocStsByLocNo(agvWrkMast.getSourceLocNo(),"O",""); if(agvWrkMast.getIoType() == 101){ //鏇存柊鐩爣搴撲綅鏄庣粏 101.鍑哄簱 鍒犻櫎婧愬簱浣嶅簱瀛樻槑缁� agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no",agvWrkMast.getSourceLocNo())); @@ -162,7 +163,6 @@ continue; } } - //202.RCS鍙栬揣涓� agvWrkMast.setWrkSts(202L); agvWrkMastService.updateById(agvWrkMast); @@ -171,10 +171,8 @@ agvWaitPakinService.updateIoStatus(agvWrkMast.getWrkNo(),"Y"); } } - return SUCCESS; } - return FAIL; } @@ -195,17 +193,11 @@ return FAIL; } + @Synchronized + @Transactional public ReturnT<String> dealWatiWrk(List<AgvWrkMast> agvWrkMastList) throws IOException { agvWrkMastList.forEach(agvWrkMast -> { -// //瀵绘壘绌虹珯鐐逛綅缃� -// AgvBasDevp agvBasDevp = agvBasDevpService.selectEmptyDevpByStation(agvWrkMast.getLocNo()); -// if(!Cools.isEmpty(agvBasDevp)){ -// agvBasDevpService.updateLocStsAndBarcodeByDevNo(agvBasDevp.getDevNo(),"S",null); -// agvWrkMast.setLocNo(agvBasDevp.getDevNo()); -// agvWrkMastService.updateById(agvWrkMast); -// } - //鏌ヨ璇ョ珯鐐规墍鏈夋殏瀛樹綅鍦ㄥ伐浣滄。涓嚭鐜扮殑娆℃暟 List<Map<String, Object>> devNoMaps = agvBasDevpService.selectDevNoAndNumBystationCode(agvWrkMast.getLocNo()); //鍙栫涓�涓殏瀛樹綅锛屽苟鏌ヨ鍏舵鏁颁笌閰嶇疆鐨勬鏁板仛姣旇緝 @@ -213,8 +205,8 @@ if((int)devNoMap.get("num") < maxWrokNum){ agvWrkMast.setLocNo(devNoMap.get("dev_no").toString()); agvWrkMastService.updateById(agvWrkMast); + log.info("after锛�" + devNoMap.toString() + ", wrkNo:" + agvWrkMast.getWrkNo() + ", locNo: " + agvWrkMast.getLocNo()); } - }); return SUCCESS; diff --git a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java index 3f5d2cd..cd21bd0 100644 --- a/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java +++ b/src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java @@ -1,11 +1,13 @@ package com.zy.asrs.task.handler; import com.baomidou.mybatisplus.mapper.EntityWrapper; +import com.core.common.Cools; import com.core.exception.CoolException; import com.zy.asrs.entity.*; import com.zy.asrs.service.*; import com.zy.asrs.task.AbstractHandler; import com.zy.asrs.task.core.ReturnT; +import com.zy.asrs.utils.Utils; import com.zy.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import org.springframework.beans.BeanUtils; @@ -13,10 +15,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; -import java.util.Date; -import java.util.HashSet; -import java.util.List; -import java.util.Set; +import java.util.*; @Service public class AutoReplenishmentHandler extends AbstractHandler<String> { @@ -84,7 +83,10 @@ //List<String> locNosSearch = locDetlService.selectLocNo(matnr); Set<String> locNosSearch = locDetlService.selectLocNo(matnr, batch, csocode, isocode); - for(String locNo : locNosSearch){ + //閲嶆柊鎺掑簭 骞朵笖妫�娴嬭搴撲綅鏄惁鍚病鏈夋枡绠辩爜鐨勭墿鏂欙紝濡傛湁鏈夊垯涓嶅厑璁稿嚭搴� + Set<String> resort = resort(locNosSearch); + + for(String locNo : resort){ List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); locNos.add(locNo); for (LocDetl locDetl :locDetls){ @@ -100,37 +102,44 @@ } } -// orderDetlList.forEach(orderDetl -> { -// -// if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ -// cont -// } -// -// String matnr = orderDetl.getMatnr(); -// Double orderAnfme = orderDetl.getAnfme(); -// -// List<String> locNosSearch = locDetlService.selectLocNo(matnr); -// -// for(String locNo : locNosSearch){ -// List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); -// locNos.add(locNo); -// for (LocDetl locDetl :locDetls){ -// if(matnr.equals(locDetl.getMatnr())){ -// orderAnfme -= locDetl.getAnfme(); -// } -// } -// if(orderAnfme <= 0){ -// orderDetl.setQty(orderDetl.getAnfme() - orderAnfme); -// orderDetlService.updateById(orderDetl); -// break; -// } -// } -// -// }); - return locNos; } + //鏍规嵁娣辨祬搴撲綅杩涜閲嶆柊鎺掑簭 + private Set<String> resort(Set<String> locNos){ + Set<String> locNosResort = new LinkedHashSet<>(); + + for(String locNoSearch : locNos){ + LocMast locMast = locMastService.selectById(locNoSearch); + if(!"F".equals(locMast.getLocSts())){ + continue; + } + + List<String> groupOuterLoc = Utils.getGroupOuterLoc(locNoSearch); + + if(Cools.isEmpty(groupOuterLoc)){ + locNosResort.add(locNoSearch); + }else { + groupOuterLoc.add(locNoSearch); + //濡傛灉鏄繁搴撲綅锛屽垯鍏堟壘澶栦晶鐨勫簱浣� + for (String locNoOut : groupOuterLoc){ + LocMast locMastOuter = locMastService.selectById(locNoOut); + //澶栦晶濡傛灉鏄嫞鏂欙紝鍒欏唴娴嬩笉鍏佽鍑� + if("P".equals(locMastOuter.getLocSts()) || "Q".equals(locMastOuter.getLocSts()) || "S".equals(locMastOuter.getLocSts())){ + break; + } + + if(!"F".equals(locMastOuter.getLocSts())){ + continue; + } + locNosResort.add(locNoOut); + + } + } + } + return locNosResort; + } + private WrkMast createWrkMast(String locNo,String barCode,Date now){ int ioType = 101; int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cf53eac..c0ffce8 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -73,21 +73,21 @@ password: Wlzh44338 agv: -# url: localhost:8080 -# taskCreatePath: /agv/task/create -# containerMoveInPath: /agv/container/moveIn -# containerMoveOutPath: /agv/container/moveOut -# containerArrivedPath: /agv/containerArrived - url: 10.10.10.182:9046 - taskCreatePath: /task/create - containerMoveInPath: /expand/api/moveIn/container - containerMoveOutPath: /expand/api/moveOut/container - containerArrivedPath: /conveyor/containerArrived + url: localhost:8080 + taskCreatePath: /agv/task/create + containerMoveInPath: /agv/container/moveIn + containerMoveOutPath: /agv/container/moveOut + containerArrivedPath: /agv/containerArrived +# url: 10.10.10.182:9046 +# taskCreatePath: /task/create +# containerMoveInPath: /expand/api/moveIn/container +# containerMoveOutPath: /expand/api/moveOut/container +# containerArrivedPath: /conveyor/containerArrived u8: url: http://192.168.1.55:8010 orderReportPath: /api/RdAudit agvBasDev: - maxWorkNum: 2 + maxWorkNum: 1 diff --git a/src/main/webapp/static/js/agvLocDetl/locDetl.js b/src/main/webapp/static/js/agvLocDetl/locDetl.js index 66b8d65..d408a1d 100644 --- a/src/main/webapp/static/js/agvLocDetl/locDetl.js +++ b/src/main/webapp/static/js/agvLocDetl/locDetl.js @@ -1,5 +1,6 @@ var pageCurr; var tableData; +var admin; function getCol() { var cols = [ {field: 'locNo', align: 'center',title: '搴撲綅鍙�'}, @@ -60,12 +61,15 @@ return cols; } -layui.use(['table','laydate', 'form'], function(){ +layui.config({ + base: baseUrl + "/static/layui/lay/modules/" +}).use(['table','laydate','admin','form'], function(){ var table = layui.table; var $ = layui.jquery; var layer = layui.layer; var layDate = layui.laydate; var form = layui.form; + admin = layui.admin; // 鏁版嵁娓叉煋 tableIns = table.render({ @@ -497,6 +501,11 @@ }); }); + // 瀵煎叆閿�鍞崟 + $("#compareToEss").click(function () { + $("#importExcel").trigger("click"); + }); + // 鏃堕棿閫夋嫨鍣� layDate.render({ elem: '#modiTime\\$', @@ -612,3 +621,45 @@ $("#search").click(); } }); +function upload(obj){ + if(!obj.files) { + return; + } + var file = obj.files[0]; + admin.confirm('纭瀵煎叆 [' + file.name +'] 鏂囦欢鍚楋紵', function (index) { + layer.load(1, {shade: [0.1,'#fff']}); + var url = baseUrl + "/agv/locDetl/compare/auth"; + var form = new FormData(); + form.append("file", file); + let xhr = new XMLHttpRequest(); + xhr.open("post", url, true); + xhr.setRequestHeader('token', localStorage.getItem('token')); + xhr.onload = uploadComplete; + xhr.onerror = uploadFailed; + xhr.onloadend = function () { + layer.closeAll('loading'); + }; + // xhr.upload.onprogress = progressFunction; + xhr.upload.onloadstart = function(){ + ot = new Date().getTime(); + oloaded = 0; + }; + xhr.send(form); + }, function(index){ + }); +} +function uploadComplete(evt) { + let res = JSON.parse(evt.target.responseText); + if(res.code === 200) { + layer.msg(res.msg, {icon: 1}); + insTb.reload({page: {curr: 1}}); + } else { + alert(res.msg); + // layer.msg(res.msg, {icon: 2}); + } +} +function uploadFailed(evt) { + let res = JSON.parse(evt.target.responseText); + alert(res.msg); + // layer.msg(res.msg, {icon: 2}); +} diff --git a/src/main/webapp/static/js/common.js b/src/main/webapp/static/js/common.js index b68a99d..fb4d280 100644 --- a/src/main/webapp/static/js/common.js +++ b/src/main/webapp/static/js/common.js @@ -226,8 +226,8 @@ var detlCols = [ ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: true} ,{field: 'zpallet', align: 'center',title: '鎵樼洏鏉$爜', hide: false} - ,{field: 'suppCode', align: 'center',title: '鏂欑鐮�', hide: false} ,{field: 'matnr', align: 'center',title: '瀛樿揣缂栫爜',hide: true} + ,{field: 'suppCode', align: 'center',title: '鏂欑鐮�', hide: false} ,{field: 'matnr', align: 'center',title: '瀛樿揣缂栫爜'} ,{field: 'anfme', align: 'center',title: '鏁伴噺'} ,{field: 'batch', align: 'center',title: '搴忓垪鐮�', width: 300, sort:true, hide: true} diff --git a/src/main/webapp/views/agvLocDetl/locDetl.html b/src/main/webapp/views/agvLocDetl/locDetl.html index cd1e631..2d4401d 100644 --- a/src/main/webapp/views/agvLocDetl/locDetl.html +++ b/src/main/webapp/views/agvLocDetl/locDetl.html @@ -9,6 +9,7 @@ <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"> + <link rel="stylesheet" href="../../static/css/admin.css?v=318" media="all"> </head> <body> @@ -58,6 +59,10 @@ <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> + <button style="display:none" id="compareToEss" > + <i class="layui-icon layui-icon-upload"></i> 搴撳瓨姣斿 + </button> + <input style="display:none" id="importExcel" type="file" onchange="upload(this)" > </script> <script type="text/html" id="operate"> diff --git a/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html b/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html index b4a0680..49614ff 100644 --- a/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html +++ b/src/main/webapp/views/agvPakStore/locDetlCheckQuery.html @@ -61,6 +61,11 @@ <input class="layui-input" type="text" name="maktx" placeholder="鐗╂枡鎻忚堪" autocomplete="off"> </div> </div> + <div class="layui-inline"> + <div class="layui-input-inline"> + <input class="layui-input" type="number" name="floor" placeholder="妤煎眰" autocomplete="off"> + </div> + </div> <!-- 鏃ユ湡鑼冨洿 --> <div class="layui-inline" style="width: 300px"> <div class="layui-input-inline"> @@ -210,6 +215,14 @@ tableReload(); }); + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + $('#detlTable').css("display", 'none'); + tableReload(false); + }); + layDate.render({ elem: '.layui-laydate-range' ,type: 'datetime' diff --git a/src/main/webapp/views/pakStore/locDetlCheckQuery.html b/src/main/webapp/views/pakStore/locDetlCheckQuery.html index 9245b3f..bf518ea 100644 --- a/src/main/webapp/views/pakStore/locDetlCheckQuery.html +++ b/src/main/webapp/views/pakStore/locDetlCheckQuery.html @@ -190,6 +190,13 @@ form.on('submit(search)', function (data) { tableReload(); }); + // 鎼滅储鏍忛噸缃簨浠� + form.on('submit(reset)', function (data) { + pageCurr = 1; + clearFormVal($('#search-box')); + $('#detlTable').css("display", 'none'); + tableReload(false); + }); layDate.render({ elem: '.layui-laydate-range' -- Gitblit v1.9.1