自动化立体仓库 - WMS系统
#
zjj
2024-04-15 e061d201decb0c3344d1bfc2237081a7edc0aa0d
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -1,8 +1,7 @@
package com.zy.asrs.service.impl;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.baomidou.mybatisplus.mapper.EntityWrapper;
import com.baomidou.mybatisplus.plugins.Page;
import com.core.common.Cools;
import com.core.common.DateUtils;
import com.core.common.R;
@@ -11,15 +10,15 @@
import com.zy.asrs.entity.*;
import com.zy.asrs.entity.param.*;
import com.zy.asrs.entity.result.InOutCountDto;
import com.zy.asrs.entity.result.OpenOrderCompeteResult;
import com.zy.asrs.entity.result.LocDetlAll;
import com.zy.asrs.entity.result.StockVo;
import com.zy.asrs.mapper.ReportQueryMapper;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.utils.MatUtils;
import com.zy.asrs.utils.Utils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.NodeUtils;
import com.zy.common.utils.Synchro;
import com.zy.erp.kingdee.enums.KingDeeUtilType;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@@ -60,6 +59,12 @@
    private NodeService nodeService;
    @Autowired
    private ManLocDetlService manLocDetlService;
    @Autowired
    private ManPakOutService manPakOutService;
    @Autowired
    private LocOwnerService locOwnerService;
    @Autowired
    private ReportQueryMapper reportQueryMapper;
    @Override
    @Transactional
@@ -67,6 +72,19 @@
        Order order = orderService.selectByNo(param.getOrderNo());
        if (!Cools.isEmpty(order)) {
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
        }
        for (DetlDto detlDto : param.getOrderDetails()){
            if (Cools.isEmpty(detlDto) || Cools.isEmpty(detlDto.getOwnerName(),detlDto.getPayment())){
                throw new CoolException(param.getOrderNo() + "缺少货主或货物形态");
            }else {
                LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
                if (Cools.isEmpty(locOwner)){
                    LocOwner locOwner1 = new LocOwner();
                    locOwner1.setOwner(detlDto.getOwnerName());
                    locOwnerService.insert(locOwner1);
                }
            }
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
        Date now = new Date();
@@ -114,13 +132,27 @@
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getOwnerName(),detail.getPayment());
            dto.setBeBatch(detail.getBeBatch());
            KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
            if (kingDeeUtilType.entryId==1){
                if (DetlDto.has2(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),detail.getOwnerName(),detail.getBeBatch());
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    list.add(dto);
                }
                dto.setWeight(detail.getWeight());
            }else {
                if (DetlDto.has1(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),detail.getOwnerName());
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    list.add(dto);
                }
                dto.setWeight(detail.getWeight());
            }
        }
        for (DetlDto detlDto : list) {
@@ -145,64 +177,41 @@
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
            if (Cools.isEmpty(locOwner)){
                throw new CoolException("生成单据明细失败,请联系管理员");
            }else {
                orderDetl.setOwner(locOwner.getId());
            }
            orderDetl.setPayment(detlDto.getPayment());
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setBeBatch(detlDto.getBeBatch());
            orderDetl.setWeight(detlDto.getWeight());
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
    }
//    @Override
//    @Transactional
//    public List<OpenOrderCompeteResult> pakinOrderComplete(OpenOrderCompleteParam param) {
//        List<OpenOrderCompeteResult> results = new ArrayList<>();
//        if (!Cools.isEmpty(param) && !Cools.isEmpty(param.getOrderNo())) {
//            // 指定订单
//            Order order = orderService.selectByNo(param.getOrderNo());
//            if (null != order) {
//                OpenOrderCompeteResult result = new OpenOrderCompeteResult();
//                results.add(result);
//                result.setOrderNo(order.getOrderNo());
//                result.setOrderTime(order.getOrderTime());
//                result.setOrderType(order.getDocType$());
//                List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
//                for (OrderDetl orderDetl : orderDetls) {
//                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
//                }
//                if (order.getSettle() == 4L) {
//                    // 修改订单状态 4.完成 ===>> 6.已上报
//                    if (!orderService.updateSettle(order.getId(), 6L, null)) {
//                        throw new CoolException("服务器内部错误,请联系管理员");
//                    }
//                }
//            }
//        } else {
//            // 所有订单
//            List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L));
//            for (Order order : orders) {
//                OpenOrderCompeteResult result = new OpenOrderCompeteResult();
//                results.add(result);
//                result.setOrderNo(order.getOrderNo());
//                result.setOrderTime(order.getOrderTime());
//                result.setOrderType(order.getDocType$());
//                List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
//                for (OrderDetl orderDetl : orderDetls) {
//                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
//                }
//                // 修改订单状态 4.完成 ===>> 6.已上报
//                if (!orderService.updateSettle(order.getId(), 6L, null)) {
//                    throw new CoolException("服务器内部错误,请联系管理员");
//                }
//            }
//        }
//        return results;
//    }
    @Override
    @Transactional
    public void pakoutOrderCreate(OpenOrderPakoutParam param) {
        Order order = orderService.selectByNo(param.getOrderNo());
        for (DetlDto detlDto : param.getOrderDetails()){
            if (Cools.isEmpty(detlDto) || Cools.isEmpty(detlDto.getOwnerName(),detlDto.getPayment())){
                throw new CoolException(param.getOrderNo() + "缺少货主或货物形态");
            }else {
                LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
                if (Cools.isEmpty(locOwner)){
                    LocOwner locOwner1 = new LocOwner();
                    locOwner1.setOwner(detlDto.getOwnerName());
                    locOwnerService.insert(locOwner1);
                }
            }
        }
        // 如果单据不存在则添加;如果单据存在,作业中无法修改,反之则修改单据
        if (!Cools.isEmpty(order)) {
            if (order.getSettle() > 1L) {
@@ -256,13 +265,27 @@
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getOwnerName(),detail.getPayment());
            dto.setBeBatch(detail.getBeBatch());
            KingDeeUtilType kingDeeUtilType = KingDeeUtilType.get(docType.getDocName());
            if (kingDeeUtilType.entryId==1){
                if (DetlDto.has2(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),detail.getOwnerName(),detail.getBeBatch());
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    list.add(dto);
                }
                dto.setWeight(detail.getWeight());
            }else {
                if (DetlDto.has1(list, dto)) {
                    DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),detail.getOwnerName());
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    list.add(dto);
                }
                dto.setWeight(detail.getWeight());
            }
        }
        for (DetlDto detlDto : list) {
@@ -282,61 +305,145 @@
            orderDetl.setUpdateTime(now);
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setOwner(detlDto.getOwner());
            orderDetl.setBeBatch(detlDto.getBeBatch());
            orderDetl.setWeight(detlDto.getWeight());
            LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
            if (Cools.isEmpty(locOwner)){
                throw new CoolException("生成单据明细失败,请联系管理员");
            }else {
                orderDetl.setOwner(locOwner.getId());
            }
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
    }
//    @Override
//    public List<OpenOrderCompeteResult> pakoutOrderComplete(OpenOrderCompleteParam param) {
//        List<OpenOrderCompeteResult> results = new ArrayList<>();
//        if (!Cools.isEmpty(param) && !Cools.isEmpty(param.getOrderNo())) {
//            // 指定订单
//            Order order = orderService.selectByNo(param.getOrderNo());
//            if (null != order) {
//                OpenOrderCompeteResult result = new OpenOrderCompeteResult();
//                results.add(result);
//                result.setOrderNo(order.getOrderNo());
//                result.setOrderTime(order.getOrderTime());
//                result.setOrderType(order.getDocType$());
//                List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
//                for (OrderDetl orderDetl : orderDetls) {
//                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
//                }
//                if (order.getSettle() == 4L) {
//                    // 修改订单状态 4.完成 ===>> 6.已上报
//                    if (!orderService.updateSettle(order.getId(), 6L, null)) {
//                        throw new CoolException("服务器内部错误,请联系管理员");
//                    }
//                }
//            }
//        } else {
//            // 所有订单
//            List<Order> orders = orderService.selectList(new EntityWrapper<Order>().eq("settle", 4L));
//            for (Order order : orders) {
//                OpenOrderCompeteResult result = new OpenOrderCompeteResult();
//                results.add(result);
//                result.setOrderNo(order.getOrderNo());
//                result.setOrderTime(order.getOrderTime());
//                result.setOrderType(order.getDocType$());
//                List<OrderDetl> orderDetls = orderDetlService.selectByOrderId(order.getId());
//                for (OrderDetl orderDetl : orderDetls) {
//                    result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
//                }
//                // 修改订单状态 4.完成 ===>> 6.已上报
//                if (!orderService.updateSettle(order.getId(), 6L, null)) {
//                    throw new CoolException("服务器内部错误,请联系管理员");
//                }
//            }
//        }
//        return results;
//    }
    @Override
    @Transactional
    public void pakmoveOrderCreate(OpenOrderPakmoveParam param) {
        Order order = orderService.selectByNo(param.getOrderNo());
        if (!Cools.isEmpty(order)) {
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
        }
        for (DetlDto detlDto : param.getOrderDetails()){
            if (Cools.isEmpty(detlDto) || Cools.isEmpty(detlDto.getOwnerName(),detlDto.getPayment())){
                throw new CoolException(param.getOrderNo() + "缺少货主或货物形态");
            }else {
                LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
                if (Cools.isEmpty(locOwner)){
                    LocOwner locOwner1 = new LocOwner();
                    locOwner1.setOwner(detlDto.getOwnerName());
                    locOwnerService.insert(locOwner1);
                }
            }
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
                null,    // 项目编号
                null,    //
                null,    // 调拨项目编号
                null,    // 初始票据号
                null,    // 票据号
                null,    // 客户编号
                null,    // 客户
                null,    // 联系方式
                null,    // 操作人员
                null,    // 合计金额
                null,    // 优惠率
                null,    // 优惠金额
                null,    // 销售或采购费用合计
                null,    // 实付金额
                null,    // 付款类型
                null,    // 业务员
                null,    // 结算天数
                null,    // 邮费支付类型
                null,    // 邮费
                null,    // 付款时间
                null,    // 发货时间
                null,    // 物流名称
                null,    // 物流单号
                1L,    // 订单状态
                1,    // 状态
                9527L,    // 添加人员
                now,    // 添加时间
                9527L,    // 修改人员
                now,    // 修改时间
                null    // 备注
        );
        if (!orderService.insert(order)) {
            throw new CoolException("生成单据主档失败,请联系管理员");
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme(),detail.getOwnerName(),detail.getPayment());
            dto.setBeBatch(detail.getBeBatch());
            dto.setSourceLocName(detail.getSourceLocName());
            dto.setTargetLocName(detail.getTargetLocName());
            if (DetlDto.has3(list, dto)) {
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(),dto.getOwnerName(),dto.getSourceLocName(),dto.getTargetLocName());
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
                list.add(dto);
            }
            dto.setWeight(detail.getWeight());
        }
        for (DetlDto detlDto : list) {
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            if (Cools.isEmpty(mat)) {
                throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            //批号为空会出现问题,设置一个默认值
            if (detlDto.getBatch() == null) {
                orderDetl.setBatch("");
            } else {
                orderDetl.setBatch(detlDto.getBatch());
            }
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
            orderDetl.setUpdateTime(now);
            LocOwner locOwner = locOwnerService.selectOne(new EntityWrapper<LocOwner>().eq("owner", detlDto.getOwnerName()));
            if (Cools.isEmpty(locOwner)){
                throw new CoolException("生成单据明细失败,请联系管理员");
            }else {
                orderDetl.setOwner(locOwner.getId());
            }
            orderDetl.setPayment(detlDto.getPayment());
            orderDetl.setStatus(1);
            orderDetl.setQty(0.0D);
            orderDetl.setBeBatch(detlDto.getBeBatch());
            orderDetl.setWeight(detlDto.getWeight());
            orderDetl.setSourceLocName(detlDto.getSourceLocName());
            orderDetl.setTargetLocName(detlDto.getTargetLocName());
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
    }
    @Override
    @Transactional
    public List<StockVo> queryStock() {
        return locDetlService.queryStockTotal();
    public List<StockVo> queryStock(StockVo stockVo) {
        return locDetlService.queryStockTotal(stockVo);
    }
    @Override
@@ -474,7 +581,7 @@
                Long tagId;
                // 一级分类
                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
                    Tag priTag = tagService.selectByName(matParam.getGroupCode(), 2);
                    Tag priTag = tagService.selectByName(matParam.getGroupCode(), 1);
                    if (priTag == null) {
                        Tag top = tagService.getTop();
                        NodeUtils nodeUtils = new NodeUtils();
@@ -505,7 +612,7 @@
                        }
                    }
                    // 二级分类
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 2);
                    if (secTag == null) {
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(priTag.getId());
@@ -548,6 +655,9 @@
                mat.setStatus(1);
                mat.setCreateTime(now);
                mat.setUpdateTime(now);
                if (Cools.isEmpty(matParam.getLength()) || matParam.getLength() == 0) {
                    mat.setLength(null);
                }
                if (!matService.insert(mat)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                } else {
@@ -569,118 +679,46 @@
        return R.ok().add(top100);
    }
    @Transactional
    /*
    * 速腾数字孪生调用接口
    * */
    @Override
    public R manDetlIn(JSONObject json) {
        Date date = new Date();
        String jsonLocNo = (String) json.get("locNo");
        Node node = nodeService.selectOne(new EntityWrapper<Node>()
                .eq("name", jsonLocNo));
        String jsonOrderNo = (String) json.get("orderNo");
        Order order = orderService.selectOne(new EntityWrapper<Order>()
                .eq("order_no", jsonOrderNo));
        if (Cools.isEmpty(node, order)) {
            return R.error("参数为空");
    public DigitalTwin inventoryQuantity() {
        DigitalTwin digitalTwin = new DigitalTwin();
        LocChartPie locUseRate = reportQueryMapper.getLocUseRate();
        LocChartPie locUseRateL = reportQueryMapper.getLocUseRateL();
        LocChartPie locUseRateP = reportQueryMapper.getLocUseRateP();
        if(locUseRate!=null) {
            digitalTwin.setCount(locUseRate.getOqty()+locUseRate.getFqty()+locUseRate.getUqty()+locUseRate.getXqty());
            digitalTwin.setOqty(locUseRate.getOqty());
            digitalTwin.setFqty(locUseRate.getFqty());
            digitalTwin.setUqty(locUseRate.getUqty());
            digitalTwin.setXqty(locUseRate.getXqty());
        }
        JSONArray combMats = json.getJSONArray("combMats");
        for (int i = 0; i < combMats.size(); i++) {
            OrderDetl jsonOrderDetl = combMats.getObject(i, OrderDetl.class);
            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>()
                    .eq("order_no", jsonOrderNo));
            if (Cools.isEmpty(orderDetl)) {
                return R.error("单据明细有误,请检查");
            }
            if (orderDetl.getAnfme() - (jsonOrderDetl.getAnfme() + orderDetl.getQty()) < 0) {
                return R.error("入库数量大于可入数量");
            }
            ManLocDetl checkManLocDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>()
                    .eq("loc_no", jsonLocNo)
                    .eq("matnr", orderDetl.getMatnr()));
            if (checkManLocDetl == null) {
                ManLocDetl manLocDetl = new ManLocDetl();
                Synchro.Copy(orderDetl, manLocDetl);
                manLocDetl.setLocNo(node.getName());
                manLocDetl.setNodeId(node.getId());
                manLocDetl.setMatnr(orderDetl.getMatnr());
                manLocDetl.setMaktx(orderDetl.getMaktx());
                manLocDetl.setAnfme(orderDetl.getAnfme());
                manLocDetl.setModiTime(date);
                manLocDetl.setCreateTime(date);
                manLocDetlService.insert(manLocDetl);
            } else {
                checkManLocDetl.setAnfme(checkManLocDetl.getAnfme() + orderDetl.getAnfme());
                checkManLocDetl.setModiTime(date);
                manLocDetlService.update(checkManLocDetl, new EntityWrapper<ManLocDetl>()
                        .eq("loc_no", jsonLocNo)
                        .eq("matnr", orderDetl.getMatnr()));
            }
            orderDetl.setQty(orderDetl.getQty() + jsonOrderDetl.getAnfme());
            orderDetl.setUpdateTime(date);
            orderDetlService.updateById(orderDetl);
        if(locUseRateL!=null) {
            digitalTwin.setCountL(locUseRateL.getOqty()+locUseRateL.getFqty()+locUseRateL.getUqty()+locUseRateL.getXqty());
            digitalTwin.setOqtyL(locUseRateL.getOqty());
            digitalTwin.setFqtyL(locUseRateL.getFqty());
            digitalTwin.setUqtyL(locUseRateL.getUqty());
            digitalTwin.setXqtyL(locUseRateL.getXqty());
        }
        orderService.checkComplete(order.getOrderNo());
        return R.ok("上架完成");
        if (locUseRateP!=null){
            digitalTwin.setCountP(locUseRateP.getOqty()+locUseRateP.getFqty()+locUseRateP.getUqty()+locUseRateP.getXqty());
            digitalTwin.setOqtyP(locUseRateP.getOqty());
            digitalTwin.setFqtyP(locUseRateP.getFqty());
            digitalTwin.setUqtyP(locUseRateP.getUqty());
            digitalTwin.setXqtyP(locUseRateP.getXqty());
        }
        return digitalTwin;
    }
    @Transactional
    /*
     * 速腾数字孪生调用接口
     * */
    @Override
    public R manDetlOut(JSONObject json) {
        Date date = new Date();
        String jsonLocNo = (String) json.get("locNo");
        Node node = nodeService.selectOne(new EntityWrapper<Node>()
                .eq("name", jsonLocNo));
        String jsonOrderNo = (String) json.get("orderNo");
        Order order = orderService.selectOne(new EntityWrapper<Order>()
                .eq("order_no", jsonOrderNo));
        if (Cools.isEmpty(node, order)) {
            return R.error("参数为空");
        }
        JSONArray combMats = json.getJSONArray("combMats");
        for (int i = 0; i < combMats.size(); i++) {
            OrderDetl jsonOrderDetl = combMats.getObject(i, OrderDetl.class);
            OrderDetl orderDetl = orderDetlService.selectOne(new EntityWrapper<OrderDetl>()
                    .eq("order_no", jsonOrderNo));
            if (Cools.isEmpty(orderDetl)) {
                return R.error("单据明细有误,请检查");
            }
            if (jsonOrderDetl.getAnfme() > (orderDetl.getAnfme() - orderDetl.getQty())) {
                return R.error("出库数量大于单据可出数量");
            }
            ManLocDetl manLocDetl = manLocDetlService.selectOne(new EntityWrapper<ManLocDetl>()
                    .eq("loc_no", jsonLocNo)
                    .eq("matnr", orderDetl.getMatnr()));
            if (manLocDetl == null) {
                return R.error("该库位没有出库的物料信息");
            }
            if (jsonOrderDetl.getAnfme() > manLocDetl.getAnfme()) {
                return R.error("出库数量大于可出数量");
            }
            Double finalQty = manLocDetl.getAnfme() - jsonOrderDetl.getAnfme();
            if (finalQty <= 0){
                manLocDetlService.delete(new EntityWrapper<ManLocDetl>()
                        .eq("loc_no", jsonLocNo)
                        .eq("matnr", orderDetl.getMatnr()));
            }else {
                manLocDetl.setAnfme(finalQty);
                manLocDetl.setModiTime(date);
                manLocDetlService.update(manLocDetl,new EntityWrapper<ManLocDetl>()
                        .eq("loc_no", jsonLocNo)
                        .eq("matnr", orderDetl.getMatnr()));
            }
            orderDetl.setQty(orderDetl.getQty() + jsonOrderDetl.getAnfme());
            orderDetl.setUpdateTime(date);
            orderDetlService.updateById(orderDetl);
            orderService.checkComplete(order.getOrderNo());
        }
        return R.ok("下架完成");
    public synchronized R ownerAllNumber() {
        List<LocDetlAll> locDetlAlls = locDetlService.selectOwnerAllAnfme();
        return R.ok(locDetlAlls);
    }
}