自动化立体仓库 - WMS系统
zwl
2025-12-31 b187814d7cfa5ace1ed9c203372524c69fe56553
src/main/java/com/zy/asrs/controller/MobileController.java
@@ -1,29 +1,35 @@
package com.zy.asrs.controller;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.mapper.Wrapper;
import com.core.annotations.ManagerAuth;
import com.core.common.BaseRes;
import com.core.common.Cools;
import com.core.common.R;
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.entity.param.CombParam;
import com.zy.asrs.service.LocDetlService;
import com.zy.asrs.service.LocMastService;
import com.zy.asrs.service.MobileService;
import com.zy.asrs.service.OrderService;
import com.zy.common.model.MobileLocDetlVo;
import com.core.exception.CoolException;
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.MobileAdjustResult;
import com.zy.asrs.mapper.ManLocDetlMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.service.impl.OrderDetlPakinServiceImpl;
import com.zy.asrs.service.impl.OrderDetlPakoutServiceImpl;
import com.zy.asrs.service.impl.OrderPakinServiceImpl;
import com.zy.asrs.service.impl.OrderPakoutServiceImpl;
import com.zy.asrs.utils.OrderInAndOutUtil;
import com.zy.common.model.WrkDto;
import com.zy.common.utils.HttpHandler;
import com.zy.common.web.BaseController;
import io.swagger.annotations.ApiOperation;
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 org.springframework.transaction.annotation.Transactional;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import java.text.SimpleDateFormat;
import java.util.*;
/**
 * 移动端接口控制器
@@ -41,76 +47,633 @@
    private LocDetlService locDetlService;
    @Autowired
    private OrderService orderService;
    @Autowired
    private OrderDetlService orderDetlService;
    @Autowired
    private DocTypeService docTypeService;
    @Autowired
    private WrkMastService wrkMastService;
    @Autowired
    private WrkDetlService wrkDetlService;
    @Autowired
    private BasDevpService basDevpService;
    @Autowired
    private PackService packService;
    @Autowired
    private ManLocDetlMapper manLocDetlMapper;
    @Autowired
    private WrkDetlLogService wrkDetlLogService;
    /**
     * 根据单号检索单据数据
     */
    @RequestMapping("/order/serach/orderNo/auth")
    @Resource
    private StaDescService staDescService;
    @Autowired
    private OrderPakinServiceImpl orderPakinService;
    @Autowired
    private TaskService taskService;
    @Autowired
    private OrderDetlPakinServiceImpl orderDetlPakinService;
    @Autowired
    private OrderPakoutServiceImpl orderPakoutService;
    @Autowired
    private OrderDetlPakoutServiceImpl orderDetlPakoutService;
    @RequestMapping("/pda/WarehouseOut/v1")
    @ManagerAuth(memo = "并板途中拣料-参考念初")
    public R WarehouseOutV1(@RequestBody CombParam combParam) {
        return mobileService.WarehouseOutV1(combParam, getHostId(), getUserId());
    }
    @RequestMapping("/pda/WarehouseOutPickMerge/v1")
    @ManagerAuth(memo = "拣料途中并板")
    public R WarehouseOutPickMergeV1(@RequestBody WarehouseOutPickMergeParam param) {
        if (Cools.isEmpty(param,param.getLocNo(),param.getBarcode(),param.getCombMats())) {
            return R.parse("参数不能为空!");
        }
        return mobileService.WarehouseOutPickMergeV1(param, getHostId(), getUserId());
    }
    @RequestMapping("/pick/in")
    @ManagerAuth(memo = "并板入库")
    public R pickConfirm(@RequestBody PickConfirmParam param) {
        if(Cools.isEmpty(param,param.getList(),param.getLocNo(),param.getStaNo())) {
            return R.parse("参数不完整");
        }
        return mobileService.pickConfirm(param, getUserId());
    }
    @RequestMapping("/barcode/list/all")
    @ManagerAuth(memo = "并板入库途中拣料出库获取任务信息")
    public R orderOutListOrder(@RequestParam(required = false) String barcode) {
        return mobileService.orderOutListOrder(barcode, getUserId());
    }
    @RequestMapping("/barcode/list/pick")
    @ManagerAuth(memo = "拣料入库途中并板获取任务信息")
    public R orderOutListOrderPick(@RequestParam(required = false) String barcode) {
        return mobileService.orderOutListOrderPick(barcode, getUserId());
    }
    @RequestMapping("/loc/f/list")
    @ManagerAuth(memo = "获取在库库位")
    public R locNoF(@RequestParam(required = false) String locNo) {
        Wrapper<LocMast> wrapper = new EntityWrapper<LocMast>()
                .eq("loc_sts", "F");
        if (!Cools.isEmpty(locNo)) {
            wrapper.like("loc_no", locNo);
        }
        List<LocMast> list = locMastService.selectList(wrapper);
        return R.ok().add(list);
    }
    @RequestMapping("/pick/sta/list")
    @ManagerAuth(memo = "获取并板站")
    public R pickSta() {
        List<StaDesc> list = staDescService.selectList(new EntityWrapper<StaDesc>()
                .eq("type_no", 104));
        return R.ok().add(list);
    }
    @RequestMapping("/pick/mat/list")
    @ManagerAuth(memo = "获取并板物料")
    public R pickMats(@RequestParam(required = false) String matnr, @RequestParam(required = false) String orderNo) {
        return mobileService.pickMats(matnr, orderNo);
    }
    @PostMapping("/scan/order/mats")
    @ManagerAuth(memo = "扫码获取组托物料")
    public R scanMats(@RequestBody PakinMatsByQRParams params) {
        if (Objects.isNull(params)) {
            return R.parse("参数不能为空!!");
        }
        return mobileService.getMatsByQRcode(params);
    }
    // 商品上架
    @RequestMapping("/mat/onSale/auth")
    @ManagerAuth
    public R orderSearchByBarcode(@RequestParam String orderNo){
        Order order = orderService.selectByNo(orderNo);
        if (order.getSettle() > 2) {
            return R.ok();
        }
        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
        if (Cools.isEmpty(orderDetls)) {
            return R.ok();
        }
        return R.ok().add(orderDetls);
    public R matOnSale(@RequestBody CombParam combParam){
        mobileService.onSale(combParam);
        return R.ok("上架成功");
    }
    // 商品下架
    @RequestMapping("/mat/offSale/auth")
    //@ManagerAuth
    public R matOffSale(@RequestBody OffSaleParam offSaleParam){
        mobileService.offSale(offSaleParam);
        return R.ok("下架成功");
    }
    @GetMapping("/cache/locs")
    @ManagerAuth
    @ApiOperation("获取缓存区库位信息")
    public R getCacheLocs() {
        return mobileService.getCacheLocs();
    }
    @PostMapping("/cache/agv/call")
    @ApiOperation("呼叫AGV搬运")
    @ManagerAuth
    public R callAgvMove(@RequestBody AgvCallParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.callAgvMove(params, getUserId());
    }
    @PostMapping("/cache/out/call")
    @ApiOperation("呼叫AGV搬运")
    @ManagerAuth
    public R OutCallAgv(@RequestBody AgvCallParams params) {
        if (Objects.isNull(params)) {
            return R.error("参数不能为空!!");
        }
        return mobileService.OutCallAgv(params, getUserId());
    }
    // 组托 ----------------------------------------------------------------------------------------------------
    /**
     * 组托
     * 根据单号检索单据数据
     * http://localhost:8081/jkwms/mobile/order/serach/orderNo/auth?orderNo=123123
     */
//    @RequestMapping("/order/search/orderNo/auth")
//    @ManagerAuth
//    public R orderSearchByBarcode(@RequestParam String orderNo){
//        Order order = orderService.selectByNo(orderNo);
//        if (order == null) {
//            return R.ok();
//        }
//        DocType docType = docTypeService.selectById(order.getDocType());
//        if (docType.getPakin() == null || docType.getPakin() != 1) {
//            return R.ok();
//        }
//        if (order.getSettle() > 2) {
//            return R.ok();
//        }
//        List<OrderDetl> orderDetls = orderService.selectWorkingDetls(order.getId());
//        if (Cools.isEmpty(orderDetls)) {
//            return R.ok();
//        }
//        return R.ok().add(orderDetls);
//    }
    @RequestMapping("/order/search/orderNo/auth")
    @ManagerAuth
    public R orderSearchByBarcode(@RequestParam String orderNo){
        OrderPakin orderPakin = orderPakinService.selectByNo(orderNo);
        if (orderPakin == null) {
            return R.ok();
        }
        DocType docType = docTypeService.selectById(orderPakin.getDocType());
        if (docType.getPakin() != 1) {
            return R.ok();
        }
        List<OrderDetlPakin> orderDetlPakins = orderPakinService.selectWorkingDetls(orderPakin.getId());
        if (Cools.isEmpty(orderDetlPakins)) {
            return R.ok();
        }
        List<OrderDetlPakin> orderDetls1= new ArrayList<>();
        for (OrderDetlPakin orderDetl : orderDetlPakins) {
            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
                orderDetls1.add(orderDetl);
            }
        }
        return R.ok().add(orderDetls1);
    }
    @RequestMapping("/order/search/orderNo/out/auth")
    @ManagerAuth
    public R orderSearchByBarcodeOut(@RequestParam String orderNo){
        OrderPakout orderPakout = orderPakoutService.selectByNo(orderNo);
        if (orderPakout == null) {
            return R.ok();
        }
        DocType docType = docTypeService.selectById(orderPakout.getDocType());
        List<OrderDetlPakout> orderDetlPakouts = orderPakoutService.selectWorkingDetls(orderPakout.getId());
        if (Cools.isEmpty(orderDetlPakouts)) {
            return R.ok();
        }
        List<OrderDetlPakout> orderDetls1= new ArrayList<>();
        for (OrderDetlPakout orderDetl : orderDetlPakouts) {
            if(orderDetl.getAnfme()-orderDetl.getWorkQty()>0){
                orderDetls1.add(orderDetl);
            }
        }
        return R.ok().add(orderDetls1);
    }
    @RequestMapping("/comb/auth")
    @ManagerAuth(memo = "组托")
    public R comb(@RequestBody CombParam combParam){
        mobileService.comb(combParam, getUserId());
        return R.ok("组托成功");
    }
    @RequestMapping("/pack/get/auth")
    @ManagerAuth
    public R packGet(@RequestParam String barcode){
        Pack pack = packService.selectByBarcode(barcode);
        if (pack == null) {
            return R.ok();
        }
        if (pack.getSettle() == 1L) {
            return R.ok().add(pack);
        }
        return R.ok("组托成功");
    }
    @RequestMapping("/pack/comb/auth")
    @ManagerAuth(memo = "下线组托")
    public R packComb(@RequestBody CombParam combParam){
        mobileService.packComb(combParam, getUserId());
        return R.ok("组托成功");
    }
    // 出库 ---------------------------------------------------------------------------------------------------
    @RequestMapping("/pakout/query/auth")
    @ManagerAuth
    @Deprecated
    public R pakoutQuery(@RequestParam(required = false) String barcode,
                         @RequestParam(required = false) Integer staNo,
                         @RequestParam(required = false) String matnr){
        if (Cools.isEmpty(barcode) && Cools.isEmpty(matnr)) {
            return R.ok();
        }
        if (!Cools.isEmpty(barcode)) {
            List<WrkDetl> wrkDetls = wrkDetlService.selectList(new EntityWrapper<WrkDetl>().eq("zpallet", barcode));
            return R.ok().add(wrkDetls);
        }
        if (!Cools.isEmpty(matnr)) {
            if (!Cools.isEmpty(staNo)) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectPakoutQuery(staNo, matnr);
                return R.ok().add(wrkDetls);
            }
        }
        return R.ok();
    }
    /**
     * 出库确认 - 扫托盘码
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/pakout/confirm/barcode/auth")
    @ManagerAuth
    public R pakoutQueryByBarcode(@RequestParam(required = false) String barcode){
        if (Cools.isEmpty(barcode)) {
            return R.ok();
        }
        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();
    }
    /**
     *  根据库位号查找库存明细
     * 出库确认 - 扫货物  广德宜科版
     * 1.全板 返回 101
     * 2.拣料 返回 103
     */
    @RequestMapping("/locDetl")
    @RequestMapping("/pakout/confirm/goods/auth")       //待完善  原因(客户未给出详细信息)
    @ManagerAuth
    public R getLocDetl(@RequestParam(required = false)String locNo,
                        @RequestParam(required = false)String matNo){
        if (!Cools.isEmpty(locNo)) {
            LocMast locMast = locMastService.selectById(locNo);
            if (null == locMast || !"F".equals(locMast.getLocSts())) {
                return R.parse(BaseRes.EMPTY);
    public R pakoutQueryByGoods(@RequestBody GDYKConfirmGoodsParam combParam){
        if (Cools.isEmpty(combParam)) {
            return R.ok();
        }
//        List<Order> orders = orderService.selectorderNoL(batch);
//        OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>().eq("matnr", combParam.getMatnr()).eq("batch", combParam.getBatch()).eq("order_no",combParam.getOrderNo()));
        Order order = OrderInAndOutUtil.selectByNo(Boolean.FALSE, combParam.getOrderNo());
        List<OrderDetl> orderDetlList = OrderInAndOutUtil.selectByOrderId(Boolean.FALSE, order.getId());
        OrderDetl orderDetl = null;
        for (OrderDetl orderDetl1 : orderDetlList){
            if (combParam.getMatnr().equals(orderDetl1.getMatnr()) && combParam.getBatch().equals(orderDetl1.getBatch())){
                orderDetl = orderDetl1;
                break;
            }
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                    .eq("loc_no", locNo).orderBy("appe_time", false));
            List<MobileLocDetlVo> res = new ArrayList<>();
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                res.add(vo);
            });
            return R.ok().add(res);
        }
        if (!Cools.isEmpty(matNo)) {
            List<LocDetl> locDetls = locDetlService.selectList(new EntityWrapper<LocDetl>()
                    .eq("matnr", matNo).orderBy("appe_time", false));
            List<MobileLocDetlVo> res = new ArrayList<>();
            locDetls.forEach(locDetl -> {
                MobileLocDetlVo vo = new MobileLocDetlVo();
                vo.setLocNo(locDetl.getLocNo());
                vo.setMatnr(locDetl.getMatnr());
                vo.setMaktx(locDetl.getMaktx());
                vo.setCount(locDetl.getAnfme());
                res.add(vo);
            });
            return R.ok().add(res);
        if (Cools.isEmpty(orderDetl)){
            return R.error("未查到数据");
        }
        return R.parse(BaseRes.PARAM);
        if (!orderDetl.getQty$().equals("已完成")){
            return R.error("任务未完成");
        }
        //复核数
        orderDetl.setSource(1);
//        orderDetlService.updateById(orderDetl);
        OrderInAndOutUtil.updateOrderDetl(Boolean.FALSE,order,orderDetl);
        return R.ok();
    }
    // 根据库位码和商品码搜索商品
    @RequestMapping("/mat/find/auth")
    public R find(@RequestParam(required = false) String locNo
            , @RequestParam(required = false) String matnr){
        //List<ManLocDetl> manLocDetls = manLocDetlMapper.selectItem0(locNo, matnr);
        ManLocDetl manLocDetl = manLocDetlMapper.selectLocNo0(locNo, matnr);
        return R.ok(manLocDetl);
        //return R.ok(manLocDetlMapper.selectItem0(locNo, matnr));
    }
    /**
     * 出库确认 - 拣料出库 - 选择具体条码商品
     */
    @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
    @Transactional
    public R pakoutConfirm(@RequestBody List<WrkDetl> list) {
        if (Cools.isEmpty(list)) {
            return R.ok();
        }
        Set<Integer> wrkNos = new HashSet<>();
        List<WrkDto> dtos = new ArrayList<>();
        for (WrkDetl wrkDetl : list) {
            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"))) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkNo);
                boolean complete = true;
                for (WrkDetl wrkDetl : wrkDetls) {
                    if (wrkDetl.getInspect() == null || wrkDetl.getInspect() == 0) {
                        complete = false;
                        break;
                    }
                }
                if (complete) {
                    wrkMast.setInvWh("Y");
                    wrkMast.setModiTime(new Date());
                    if (!wrkMastService.updateById(wrkMast)) {
                        throw new CoolException("修改工作档" + wrkNo + "失败");
                    }
                }
            }
        }
        return R.ok("完成确认");
    }
    // 盘点 ----------------------------------------------------------------------------------------------------
    @RequestMapping("/checkDetl/auth")
    @ManagerAuth
    public R getCheckDetl(@RequestParam(required = false) Integer staNo) {
        if (null == staNo || staNo == 0) {
            return R.ok();
        }
        BasDevp basDevp = basDevpService.selectById(staNo);
        if (null != basDevp && basDevp.getWrkNo() != null) {
            WrkMast wrkMast = wrkMastService.selectById(basDevp.getWrkNo());
            if (wrkMast != null && wrkMast.getIoType() == 107) {
                List<WrkDetl> wrkDetls = wrkDetlService.selectByWrkNo(wrkMast.getWrkNo());
                if (!Cools.isEmpty(wrkDetls)) {
                    MobileAdjustResult result = new MobileAdjustResult();
                    result.setStaNo(staNo);
                    result.setWrkNo(wrkMast.getWrkNo());
                    result.setWrkDetls(wrkDetls);
                    return R.ok().add(result);
                }
            }
        }
        return R.ok();
    }
    @RequestMapping("/adjust/auth")
    @ManagerAuth(memo = "盘点")
    public R adjust(@RequestBody MobileAdjustParam combParam){
        mobileService.adjust(combParam, getUserId());
        return R.ok("盘点成功");
    }
    @PostMapping("/order/out/pakout/auth")
    @ManagerAuth(memo = "订单出库")
    public synchronized R pakoutByOrder(@RequestBody JSONObject param) {
        if(!param.containsKey("staNo") || !param.containsKey("orderNo")){
            return R.parse(BaseRes.PARAM);
        }
        mobileService.pakoutByOrder(param,getUserId());
        return R.ok("出库成功");
    }
    /**
     * 补空板
     *
     * @param locNo 目标站点
     * @param size  托盘大小 1:小托盘  2:大托盘
     * @return
     */
    // pda呼叫空料框出库
    @PostMapping("/callEmptyBinOutBound")
    @ManagerAuth(memo = "pda呼叫空料框出库")
    public synchronized R callEmptyBinOutBound(@RequestParam(required = false) String locNo
            , @RequestParam(required = false) String size) {
        if (Cools.isEmpty(locNo) || Cools.isEmpty(size)) {
            return R.error("站点或者大小不能为空");
        }
        WrkMast wrkMast = wrkMastService.selectOne(new EntityWrapper<WrkMast>().eq("io_type", 110).eq("memo", locNo));
        if (wrkMast != null) {
            return R.error("该站点="+locNo+"已经有空板出库任务,为了不堵塞堆垛机接驳站点,禁止下发多个空板出库任务");
        }
        return mobileService.callEmptyBinOutBound(locNo,size,getUserId());
    }
    /**
     * 空板回库或者拣料回库
     *
     * @param sourceStaNo
     * @param staNo
     * @return
     */
    @RequestMapping("/AGVStartReturn")
    public synchronized R AGVStartReturn(@RequestParam(required = false) String sourceStaNo
            , @RequestParam(required = false) String staNo
            , @RequestParam(required = false) String taskNo) {
        if (Cools.isEmpty(sourceStaNo) || Cools.isEmpty(staNo)) {
            return R.error("源站点和托盘码不能为空");
        }
        List<Task> tasks = taskService.selectList(new EntityWrapper<Task>().eq("source_sta_no", sourceStaNo).eq("barcode", staNo));
        if (tasks.size() > 0) {
            return R.error("该托盘="+staNo+"已经存在搬运任务,请不要重复下发");
        }
        String barcode = staNo.substring(0,1);
        if(barcode.equals("3")){
            taskNo = "307";
        }else if(barcode.equals("4")){
            taskNo = "402";
        }else if(barcode.equals("5")){
            taskNo = "401";
        }
        R r = R.ok();
        //生成AGV搬运出库任务
        // 保存工作档
        Task task = new Task();
        Date date = new Date();
        String TaskNo = 555555 + "aa" + date.getTime();
        task.setWrkNo((int) date.getTime())
                .setTaskNo(TaskNo)
                .setIoTime(date)
                .setWrkSts(301L) // 工作状态:301.任务下发
                .setIoType(3) // 入出库状态: 3.站到站  4.站到区域
                .setTaskType("agv")
                .setIoPri(10D)
                .setFullPlt("Y") // 满板:Y
                .setPicking("N") // 拣料
                .setExitMk("N")// 退出
                .setStaNo(taskNo)
                .setSourceStaNo(sourceStaNo)//agv取货站点
                .setEmptyMk("N")// 空板
                .setBarcode(staNo)// 托盘码
                .setLinkMis("N")
                .setAppeUser(9945L)
                .setAppeTime(date)
                .setModiUser(9945L)
                .setModiTime(date);
        if (!taskService.insert(task)) {
            throw new CoolException("保存工作档失败");
        }
        return r;
    }
    @RequestMapping("/orderIn")
    public synchronized R AGVOrderInReturn() {
        List<OrderPakin> settle = orderPakinService.selectList(new EntityWrapper<OrderPakin>().in("settle", 1, 2));
        List<String> list = new ArrayList<>();
        for (OrderPakin orderPakin : settle) {
            if (orderPakin.getSettle()==2){
                List<OrderDetlPakin> orderId = orderDetlPakinService.selectList(new EntityWrapper<OrderDetlPakin>().eq("order_id", orderPakin.getId()));
                Boolean boo=true;
                for (OrderDetlPakin orderDetlPakin : orderId) {
                    if (orderDetlPakin.getAnfme()>orderDetlPakin.getWorkQty()){
                        boo=false;
                        break;
                    }
                }
                if (!boo) {
                    list.add(orderPakin.getOrderNo());
                }
            }else {
                list.add(orderPakin.getOrderNo());
            }
        }
        return R.ok(list);
    }
    @RequestMapping("/orderOut")
    public synchronized R AGVOrderOutReturn() {
        List<OrderPakout> settle = orderPakoutService.selectList(new EntityWrapper<OrderPakout>().in("settle", 1, 2).eq("doc_type",11));
        List<String> list = new ArrayList<>();
        for (OrderPakout orderPakout: settle) {
            if (orderPakout.getSettle()==2){
                List<OrderDetlPakout> orderId = orderDetlPakoutService.selectList(new EntityWrapper<OrderDetlPakout>().eq("order_id", orderPakout.getId()));
                Boolean boo=true;
                for (OrderDetlPakout orderDetlPakout: orderId) {
                    if (orderDetlPakout.getAnfme()>orderDetlPakout.getWorkQty()){
                        boo=false;
                        break;
                    }
                }
                if (boo) {
                    settle.remove(orderPakout);
                }else {
                    list.add(orderPakout.getOrderNo());
                }
            }else {
                list.add(orderPakout.getOrderNo());
            }
        }
        return R.ok(list);
    }
}