自动化立体仓库 - WMS系统
zyx
2023-10-12 816536ec6e6c394689ca050a9a4f59e5ce7d67ad
自动补货单
12个文件已修改
217 ■■■■ 已修改文件
src/main/java/com/zy/asrs/mapper/LocDetlMapper.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocDetlService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/LocMastService.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocDetlServiceImpl.java 5 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/LocMastServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/service/impl/WorkServiceImpl.java 3 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/AutoReplenishmentScheduler.java 3 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/asrs/task/handler/AutoReplenishmentHandler.java 145 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/WcsController.java 36 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/java/com/zy/common/web/param/ReplenishmentParam.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/resources/application.yml 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
src/main/webapp/views/agvBasDevpVisualized/basDevp.html 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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}}