自动化立体仓库 - WMS系统
18516761980
2022-06-25 16bb74e56d058e31fdcf3494346d5e86159ff798
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,7 +1,9 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
import com.core.exception.CoolException;
@@ -10,13 +12,13 @@
import com.zy.asrs.entity.param.MobileAdjustParam;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.service.*;
import com.zy.common.model.LocDto;
import com.zy.common.model.TaskDto;
import com.zy.common.model.WrkDto;
import com.zy.common.web.BaseController;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.annotation.Transactional;
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 org.springframework.web.bind.annotation.*;
import java.util.*;
@@ -36,6 +38,8 @@
    private LocDetlService locDetlService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
@@ -106,6 +110,7 @@
    @RequestMapping("/pakout/query/auth")
    @ManagerAuth
    @Deprecated
    public R pakoutQuery(@RequestParam(required = false) String barcode,
                         @RequestParam(required = false) Integer staNo,
                         @RequestParam(required = false) String matnr){
@@ -125,29 +130,69 @@
        return R.ok();
    }
    @RequestMapping("/pakout/query/auth/v2")
    /**
     * 出库确认 - 扫托盘码
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/pakout/confirm/barcode/auth")
    @ManagerAuth
    public R pakoutQueryV2(@RequestParam(required = false) String barcode,
                           @RequestParam(required = false) Integer staNo,
                           @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(barcode) && Cools.isEmpty(matnr)) {
    public R pakoutQueryByBarcode(@RequestParam(required = false) String barcode){
        if (Cools.isEmpty(barcode)) {
            return R.ok();
        }
        if (!Cools.isEmpty(barcode)) {
            WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
            if (wrkMast != null) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                // 去除已出库确认的明细
                wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() == 1);
                return R.ok().add(wrkDetls);
            }
        }
        if (!Cools.isEmpty(matnr)) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectPakoutQuery(staNo, matnr);
            return R.ok().add(wrkDetls);
        WrkMast wrkMast = wrkMastService.selectByBarcode(barcode);
        if (wrkMast != null) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
            // 去除已出库确认的明细
            wrkDetls.removeIf(wrkDetl -> wrkDetl.getInspect() != null && wrkDetl.getInspect() != 0);
            return R.ok().add(Cools.add("wrkNo", wrkMast.getWrkNo()).add("ioType", wrkMast.getIoType()).add("list", wrkDetls));
        }
        return R.ok();
    }
    /**
     * 出库确认 - 拣料出库 - 选择具体条码商品
     */
    @RequestMapping("/pakout/confirm/pick/auth")
    @ManagerAuth
    public R pakoutQueryByBarcode(@RequestParam(required = false) Integer wrkNo
                                , @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(wrkNo)) {
            return R.ok();
        }
        if (Cools.isEmpty(matnr)) {
            return R.ok();
        }
        WrkMast wrkMast = wrkMastService.selectById(wrkNo);
        if (wrkMast == null) {
            return R.ok();
        }
        String orderNo = null;
        List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
        for (WrkDetl wrkDetl : wrkDetls) {
            if (Cools.isEmpty(orderNo)) {
                orderNo = wrkDetl.getOrderNo();
            }
            if ((wrkDetl.getMatnr() + "-" + wrkDetl.getBatch()).equals(matnr)) {
                return R.ok().add(wrkDetl);
            }
        }
        // 替换 明细
        List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>().eq("loc_no", wrkMast.getSourceLocNo()));
        for (LocDetl locDetl : locDetls) {
            if ((locDetl.getMatnr() + "-" + locDetl.getBatch()).equals(matnr)) {
                WrkDetl wrkDetl = new WrkDetl();
                wrkDetl.sync(locDetl);
                wrkDetl.setOrderNo(orderNo);
                wrkDetl.setIoTime(wrkMast.getIoTime());
                wrkDetl.setWrkNo(wrkNo);
                return R.ok().add(wrkDetl);
            }
        }
        return R.error("系统错误,条码不存在");
    }
    @RequestMapping("/pakout/confirm/auth")
    @ManagerAuth
@@ -156,16 +201,46 @@
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        // todo:luxiaotao 拣料出库可修改工作档明细
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            wrkNos.add(wrkDetl.getWrkNo());
            wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
            if (wrkNos.contains(wrkDetl.getWrkNo())) {
                for (WrkDto dto : dtos) {
                    if (dto.getWrkNo().equals(wrkDetl.getWrkNo())) {
                        dto.getWrkDetls().add(wrkDetl);
                        break;
                    }
                }
            } else {
                wrkNos.add(wrkDetl.getWrkNo());
                dtos.add(new WrkDto(wrkDetl.getWrkNo(), wrkDetl));
            }
        }
        for (WrkDto dto : dtos) {
            WrkMast wrkMast = wrkMastService.selectById(dto.getWrkNo());
            if (wrkMast != null) {
                // 101
                if (wrkMast.getIoType() == 101) {
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetlService.updateInspect(wrkDetl.getWrkNo(), wrkDetl.getMatnr(), wrkDetl.getBatch());
                    }
                }
                // 103
                if (wrkMast.getIoType() == 103) {
                    if (!wrkDetlService.delete(new EntityWrapper<WrkDetl>().eq("wrk_no", wrkMast.getWrkNo()))) {
                        throw new CoolException("拣料出库确认失败");
                    }
                    for (WrkDetl wrkDetl : dto.getWrkDetls()) {
                        wrkDetl.setInspect(1);
                        if (!wrkDetlService.insert(wrkDetl)) {
                            throw new CoolException("拣料出库确认失败");
                        }
                    }
                }
            }
        }
        for (Integer wrkNo : wrkNos) {
            WrkMast wrkMast = wrkMastService.selectById(wrkNo);
            if (wrkMast.getWrkSts() == 14 && (Cools.isEmpty(wrkMast.getInvWh()) || wrkMast.getInvWh().equals("N"))) {
@@ -222,5 +297,62 @@
        return R.ok("盘点成功");
    }
    @PostMapping("/out/pakout/auth")
//    @ManagerAuth(memo = "根据订单出库")
    public synchronized R pakoutByOrder(@RequestBody JSONObject param) {
        if(!param.containsKey("staNo") || !param.containsKey("orderNo")){
            return R.parse(BaseRes.PARAM);
        }
        Integer staNo = param.containsKey("staNo") ? Integer.parseInt(param.get("staNo").toString()) : 0;
        String orderNo = param.containsKey("orderNo") ? param.get("orderNo").toString() : "";
        BasDevp sta = basDevpService.checkSiteStatus(staNo);
        //根据订单号生成出库任务工作档,待实现
        List<OrderDetl> orderDetls = orderDetlService.selectList(new EntityWrapper<OrderDetl>().eq("order_no", orderNo));
        for(OrderDetl orderDetl : orderDetls){
            //查询所有库位状态为F的库位信息
            List<LocDetl> locDetls = locDetlService.queryStock(orderDetl.getMatnr(),orderDetl.getBatch(),orderDetl.getOrderNo(),null);
            if (locDetls.size() == 0) {
                throw new CoolException("库存中没有该物料");
            }
        }
//        if (Cools.isEmpty(locDtos)) {
//            return R.parse(BaseRes.PARAM);
//        }
//        boolean lack = true;
//        for (LocDto locDto : locDtos) {
//            if (!locDto.isLack()) {
//                lack = false;
//                break;
//            }
//        }
//        if (lack) {
//            return R.error("库存不足");
//        }
//
//        Thread.sleep(1000L);
//
//        List<TaskDto> taskDtos = new ArrayList<>();
//        // 根据 (库位 & 出库站) 分组; 理想状态:一组为一次出库任务
//        for (LocDto locDto : locDtos) {
//            if (locDto.isLack()) { continue; }
//            TaskDto taskDto = new TaskDto(locDto.getLocNo(), locDto.getStaNo(), locDto);
//            if (TaskDto.has(taskDtos, taskDto)) {
//                TaskDto dto = TaskDto.find(taskDtos, taskDto);
//                assert dto != null;
//                dto.getLocDtos().addAll(taskDto.getLocDtos());
//            } else {
//                taskDtos.add(taskDto);
//            }
//        }
//        // -----------------------------------------------------------------------------------------------
//        for (TaskDto taskDto : taskDtos) {
//            BasDevp staNo = basDevpService.checkSiteStatus(taskDto.getStaNo());
//            workService.stockOut(staNo, taskDto, getUserId());
//        }
        return R.ok();
    }
}