src/main/java/com/zy/asrs/mapper/LocDetlMapper.java
@@ -71,4 +71,7 @@ int updateStockFreeze(String matnr, String locNo, Integer stockFreeze); @Select("SELECT loc_no FROM asr_loc_detl WHERE matnr = #{matnr} GROUP BY loc_no") List<String> selectLocNo(@Param("matnr") String matnr); } src/main/java/com/zy/asrs/service/LocDetlService.java
@@ -67,4 +67,6 @@ List<LocDetl> selectByLocNo(String locNo); List<String> selectLocNo(String matnr); } src/main/java/com/zy/asrs/service/LocMastService.java
@@ -1,7 +1,6 @@ package com.zy.asrs.service; import com.baomidou.mybatisplus.service.IService; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import java.util.List; @@ -60,4 +59,5 @@ Integer updateLocType2ByRBL(Integer locType2, Integer startRow, Integer endRow, Integer startBay, Integer endBay, Integer startLev, Integer endLev); void updateByLocNo(LocMast locMast); } src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java
@@ -182,6 +182,11 @@ } @Override public List<String> selectLocNo(String matnr) { return this.baseMapper.selectLocNo(matnr); } @Override public int updateStockFreeze(String matnr, String locNo, Integer stockFreeze) { return this.baseMapper.updateStockFreeze(matnr, locNo, stockFreeze); } src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java
@@ -1,9 +1,9 @@ package com.zy.asrs.service.impl; import com.alibaba.fastjson.JSON; import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.baomidou.mybatisplus.service.impl.ServiceImpl; import com.core.common.Cools; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.mapper.LocMastMapper; import com.zy.asrs.service.LocMastService; @@ -17,7 +17,6 @@ import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; @Slf4j @@ -186,4 +185,9 @@ public Integer updateLocType2ByRBL(Integer locType2, Integer startRow, Integer endRow, Integer startBay, Integer endBay, Integer startLev, Integer endLev) { return this.baseMapper.updateLocType2ByRBL(locType2, startRow, endRow, startBay, endBay, startLev, endLev); } public void updateByLocNo(LocMast locMast){ this.update(locMast,new EntityWrapper<LocMast>().eq("loc_no",locMast.getLocNo())); } } src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java
@@ -445,6 +445,9 @@ wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); wrkDetl.setModiUser(userId); wrkDetl.setSuppCode(locDto.getContainerCode()); wrkDetl.setThreeCode(locDto.getCsocode()); wrkDetl.setDeadTime(locDto.getIsoseq()); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java
@@ -9,7 +9,6 @@ import com.zy.asrs.task.handler.AutoReplenishmentHandler; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component; import java.util.List; @@ -28,7 +27,7 @@ /* 定时处理自动补货单据 */ @Scheduled(cron = "0/5 * * * * ? ") //@Scheduled(cron = "0/5 * * * * ? ") public void excute(){ DocType docType = docTypeService.selectOne(new EntityWrapper<DocType>().eq("doc_name", "自动补货单")); List<Order> orderList = orderService.selectList(new EntityWrapper<Order>() src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java
@@ -2,20 +2,18 @@ import com.baomidou.mybatisplus.mapper.EntityWrapper; import com.core.exception.CoolException; import com.zy.asrs.entity.LocDetl; import com.zy.asrs.entity.LocMast; import com.zy.asrs.entity.Order; import com.zy.asrs.entity.OrderDetl; import com.zy.asrs.service.LocDetlService; import com.zy.asrs.service.LocMastService; import com.zy.asrs.service.OrderDetlService; import com.zy.asrs.service.WorkService; 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.common.model.enums.WorkNoType; import com.zy.common.service.CommonService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; 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; @@ -30,10 +28,18 @@ @Autowired private LocMastService locMastService; @Autowired private WorkService workService; private CommonService commonService; @Autowired private WrkMastService wrkMastService; @Autowired private WrkDetlService wrkDetlService; @Autowired private OrderService orderService; @Transactional public ReturnT<String> start(Order order) { Date now = new Date(); Set<String> locNos = pakoutLoc(order); for (String locNo : locNos){ @@ -42,10 +48,16 @@ throw new CoolException("库位状态已变更"); } //生成工作档 WrkMast wrkMast = createWrkMast(locNo,locMast.getBarcode(),now); //生成工作档明细 List<LocDetl> locDetls = locDetlService.selectByLocNo(locNo); createWrkDetl(locDetls, wrkMast,order.getOrderNo(),now); //修改库位状态 locMast.setLocSts("R"); locMastService.updateByLocNo(locMast); } order.setSettle(2L); orderService.updateById(order); return SUCCESS; @@ -56,44 +68,115 @@ Set<String> locNos = new HashSet<>(); //根据订单生成四项库出库工作档 List<OrderDetl> orderDetlList = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", order.getOrderNo())); orderDetlList.forEach(orderDetl -> { for(OrderDetl orderDetl : orderDetlList){ if(orderDetl.getAnfme() - orderDetl.getQty() <= 0){ continue; } String matnr = orderDetl.getMatnr(); Double orderAnfme = orderDetl.getAnfme(); List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>() .eq("matnr", matnr) .eq("loc_sts","F") .groupBy("loc_no")); for (LocDetl locDetl : locDetls){ String locNo = locDetl.getLocNo(); //订单待出数量减去库存数量 orderAnfme -= locDetl.getAnfme(); //添加待出库库位 locNos.add(locNo); 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; } } } }); // 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; } public static void main(String[] args) { for (int i=0; i<10; i++){ for (int y=0; y<10; y++){ System.out.println(i); System.out.println(y); if(y == 5){ break; } } private WrkMast createWrkMast(String locNo,String barCode,Date now){ int ioType = 101; int workNo = commonService.getWorkNo(WorkNoType.getWorkNoType(ioType)); WrkMast wrkMast = new WrkMast(); wrkMast.setWrkNo(workNo); wrkMast.setIoTime(now); wrkMast.setWrkSts(21L); // 工作状态:21.生成出库任务 wrkMast.setIoType(ioType); // 入出库状态 wrkMast.setIoPri(300D); // 优先级:13 //wrkMast.setOutMost(outMost?1:0);; //wrkMast.setCrnNo(outMost?outCrnNo:locMast.getCrnNo()); //wrkMast.setSourceStaNo(loc); // 源站 wrkMast.setStaNo(300); // 目标站 wrkMast.setSourceLocNo(locNo); // 源库位 wrkMast.setFullPlt("Y"); // 满板:Y wrkMast.setPicking("N"); // 拣料 wrkMast.setExitMk("N"); // 退出 wrkMast.setEmptyMk("N"); // 空板 wrkMast.setLinkMis("N"); wrkMast.setBarcode(barCode); //wrkMast.setAppeUser(userId); // 操作人员数据 wrkMast.setAppeTime(now); //wrkMast.setModiUser(userId); wrkMast.setModiTime(now); wrkMast.setMk("Y"); if (!wrkMastService.insert(wrkMast)) { throw new CoolException("保存工作档失败,出库库位号:"+locNo); } return wrkMast; } private void createWrkDetl(List<LocDetl> locDetls, WrkMast wrkMast,String orderNo, Date now){ locDetls.forEach(locDetl -> { WrkDetl wrkDetl = new WrkDetl(); BeanUtils.copyProperties(locDetl,wrkDetl); wrkDetl.setZpallet(wrkMast.getBarcode()); wrkDetl.setIoTime(now); wrkDetl.setWrkNo(wrkMast.getWrkNo()); //wrkDetl.setBatch(locDetl.getBatch()); wrkDetl.setOrderNo(orderNo); //wrkDetl.setAnfme(locDetl.getAnfme()); // 数量 wrkDetl.setAppeTime(now); //wrkDetl.setAppeUser(userId); wrkDetl.setModiTime(now); //wrkDetl.setSuppCode(locDetl.getSuppCode()); //wrkDetl.setModiUser(userId); if (!wrkDetlService.insert(wrkDetl)) { throw new CoolException("保存工作档明细失败"); } }); } } src/main/java/com/zy/common/web/WcsController.java
@@ -10,7 +10,6 @@ import com.zy.common.model.LocTypeDto; import com.zy.common.model.StartupDto; import com.zy.common.service.CommonService; import com.zy.common.service.erp.ErpService; import com.zy.common.web.param.ReplenishmentParam; import com.zy.common.web.param.SearchLocParam; import lombok.extern.slf4j.Slf4j; @@ -49,7 +48,11 @@ @Autowired private MatService matService; @Autowired private ErpService erpService; private AgvWaitPakinService agvWaitPakinService; @Autowired private AgvWorkService agvWorkService; // @Autowired // private ErpService erpService; @PostMapping("/pakin/loc/v1") @ResponseBody @@ -299,11 +302,38 @@ } /* 四项库往AGV补货,wcs调用此接口 四项库往AGV补货,生成AGV入库通知档 */ @PostMapping("/replenishment") @ResponseBody public R replenishment(@RequestBody ReplenishmentParam param){ Date now = new Date(); Integer wrkNo = param.getWrkNo(); List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo); wrkDetls.forEach(wrkDetl -> { AgvWaitPakin agvWaitPakin = new AgvWaitPakin(); BeanUtils.copyProperties(wrkDetl,agvWaitPakin); agvWaitPakin.setIoStatus("Y"); agvWaitPakin.setModiTime(now); agvWaitPakin.setAppeTime(now); agvWaitPakinService.insert(agvWaitPakin); }); return R.ok(); } /* 生成AGV工作档 */ @PostMapping("/start") @ResponseBody public R start(@RequestBody ReplenishmentParam param){ //绑定站点 //agvWorkService.createWaitPainWrkMastStart(agvBasDevpList, getUserId()); return R.ok(); src/main/java/com/zy/common/web/param/ReplenishmentParam.java
@@ -8,4 +8,6 @@ private String containerCode; //agv站点 private String devNo; //工作号 private Integer wrkNo; } src/main/resources/application.yml
@@ -10,9 +10,9 @@ enabled: false datasource: driver-class-name: com.microsoft.sqlserver.jdbc.SQLServerDriver url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs #url: jdbc:sqlserver://localhost:1433;databasename=tzskasrs #url: jdbc:sqlserver://192.168.4.15:1433;databasename=tzskasrs #url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs url: jdbc:sqlserver://10.10.10.40:1433;databasename=tzskasrs username: sa password: sa@123 mvc: src/main/webapp/views/agvBasDevpVisualized/basDevp.html
@@ -81,7 +81,7 @@ {{#if agvWaitPakin.batch}} 序列码:{{agvWaitPakin.batch}} </br> {{/if}} 托盘码:{{agvWaitPakin.zpallet}} </br> 料箱码:{{agvWaitPakin.suppCode}} </br> 数量:{{agvWaitPakin.anfme}} </div> {{/if}} @@ -98,7 +98,7 @@ {{#if agvWrkDetl.batch}} 序列码:{{agvWrkDetl.batch}} </br> {{/if}} 托盘码:{{agvWrkDetl.zpallet}} </br> 料箱码:{{agvWaitPakin.suppCode}} </br> 数量:{{agvWrkDetl.anfme}} </div> {{/if}}