自动化立体仓库 - WMS系统
zhangc
2025-01-07 f48878cdae5652be9e8f1145eda84d2ca9ca0544
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -13,18 +13,21 @@
import com.zy.asrs.mapper.ReportQueryMapper;
import com.zy.asrs.mapper.TagMapper;
import com.zy.asrs.service.*;
import com.zy.asrs.task.core.ReturnT;
import com.zy.asrs.task.handler.WorkLogHandler;
import com.zy.asrs.utils.MatUtils;
import com.zy.common.model.DetlDto;
import com.zy.common.utils.ListUtils;
import com.zy.common.utils.NodeUtils;
import lombok.Synchronized;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.StringUtils;
import java.util.*;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.stream.Collectors;
/**
 * Created by vincent on 2022/4/9
@@ -59,6 +62,10 @@
    private WrkDetlService wrkDetlService;
    @Autowired
    private ReportQueryMapper reportQueryMapper;
    @Autowired
    private AgvLocMastService agvLocMastService;
    @Autowired
    private AgvLocDetlService agvLocDetlService;
    @Override
    @Transactional
@@ -70,8 +77,7 @@
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
        order = new Order(String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
@@ -115,7 +121,7 @@
        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());
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(), dto.getCsocode(), dto.getIsoseq(), null);
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
@@ -129,10 +135,14 @@
            }
            OrderDetl orderDetl = new OrderDetl();
            orderDetl.sync(mat);
            if (!Cools.isEmpty(detlDto.getCFree1())) {
                orderDetl.setSpecs(detlDto.getCFree1());
            }
            orderDetl.setBatch(detlDto.getBatch());
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setSource(docType.getDocId().intValue());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
@@ -143,6 +153,83 @@
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
// 生成调拨单
        if (docType.getDocId().intValue() == 32) {
            order = new Order(String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                    "DB" + param.getOrderNo(),    // 订单编号
                    DateUtils.convert(now),    // 单据日期
                    33L,    // 单据类型
                    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> dbList = new ArrayList<>();
            List<DetlDto> dbOrderDetails = param.getOrderDetails();
            // 单据明细档
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                if (DetlDto.has(dbList, dto)) {
                    DetlDto detlDto = DetlDto.find(dbList, dto.getMatnr(), dto.getBatch(), dto.getCsocode(), dto.getIsoseq(), null);
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    dbList.add(dto);
                }
            }
            for (DetlDto detlDto : dbList) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
                }
                OrderDetl orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(detlDto.getBatch());
                orderDetl.setAnfme(detlDto.getAnfme());
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSource(docType.getDocId().intValue());
                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成半成品调拨单明细档失败,请联系管理员");
                }
            }
        }
    }
    @Override
@@ -160,7 +247,7 @@
                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()));
                    //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
                }
                if (order.getSettle() == 4L) {
                    // 修改订单状态 4.完成 ===>> 6.已上报
@@ -180,7 +267,7 @@
                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()));
                    //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
                }
                // 修改订单状态 4.完成 ===>> 6.已上报
                if (!orderService.updateSettle(order.getId(), 6L, null)) {
@@ -205,8 +292,7 @@
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        Date now = new Date();
        // 单据主档
        order = new Order(
                String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
        order = new Order(String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                param.getOrderNo(),    // 订单编号
                DateUtils.convert(now),    // 单据日期
                docType.getDocId(),    // 单据类型
@@ -250,7 +336,7 @@
        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());
                DetlDto detlDto = DetlDto.find(list, dto.getMatnr(), dto.getBatch(), dto.getCsocode(), dto.getIsoseq(), null);
                assert detlDto != null;
                detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
            } else {
@@ -268,6 +354,7 @@
            orderDetl.setAnfme(detlDto.getAnfme());
            orderDetl.setOrderId(order.getId());
            orderDetl.setOrderNo(order.getOrderNo());
            orderDetl.setSource(docType.getDocId().intValue());
            orderDetl.setCreateBy(9527L);
            orderDetl.setCreateTime(now);
            orderDetl.setUpdateBy(9527L);
@@ -276,6 +363,81 @@
            orderDetl.setQty(0.0D);
            if (!orderDetlService.insert(orderDetl)) {
                throw new CoolException("生成单据明细失败,请联系管理员");
            }
        }
        if (docType.getDocId().intValue() == 32) {
            order = new Order(String.valueOf(snowflakeIdWorker.nextId()),    // 编号[非空]
                    "DB" + param.getOrderNo(),    // 订单编号
                    DateUtils.convert(now),    // 单据日期
                    33L,    // 单据类型
                    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> dbList = new ArrayList<>();
            List<DetlDto> dbOrderDetails = param.getOrderDetails();
            // 单据明细档
            for (DetlDto detail : orderDetails) {
                DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
                if (DetlDto.has(dbList, dto)) {
                    DetlDto detlDto = DetlDto.find(dbList, dto.getMatnr(), dto.getBatch(), dto.getCsocode(), dto.getIsoseq(), null);
                    assert detlDto != null;
                    detlDto.setAnfme(detlDto.getAnfme() + detail.getAnfme());
                } else {
                    dbList.add(dto);
                }
            }
            for (DetlDto detlDto : dbList) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    throw new CoolException(detlDto.getMatnr() + "编号商品检索失败,请先添加商品");
                }
                OrderDetl orderDetl = new OrderDetl();
                orderDetl.sync(mat);
                orderDetl.setBatch(detlDto.getBatch());
                orderDetl.setAnfme(detlDto.getAnfme());
                orderDetl.setOrderId(order.getId());
                orderDetl.setOrderNo(order.getOrderNo());
                orderDetl.setSource(docType.getDocId().intValue());
                orderDetl.setCreateBy(9527L);
                orderDetl.setCreateTime(now);
                orderDetl.setUpdateBy(9527L);
                orderDetl.setUpdateTime(now);
                orderDetl.setStatus(1);
                orderDetl.setQty(0.0D);
                if (!orderDetlService.insert(orderDetl)) {
                    throw new CoolException("生成半成品调拨单明细档失败,请联系管理员");
                }
            }
        }
    }
@@ -294,7 +456,7 @@
                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()));
                    //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
                }
                if (order.getSettle() == 4L) {
                    // 修改订单状态 4.完成 ===>> 6.已上报
@@ -314,7 +476,7 @@
                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()));
                    //result.getOrderDetails().add(new DetlDto(orderDetl.getOrderNo(), orderDetl.getMatnr(), orderDetl.getBatch(), orderDetl.getQty()));
                }
                // 修改订单状态 4.完成 ===>> 6.已上报
                if (!orderService.updateSettle(order.getId(), 6L, null)) {
@@ -343,8 +505,7 @@
            throw new CoolException(param.getBarcode() + "重复提交");
        }
        Date now = new Date();
        pack = new Pack(
                param.getBarcode(),    // 条码[非空]
        pack = new Pack(param.getBarcode(),    // 条码[非空]
                analyse.getMatnr(),    // 物料号
                analyse.getBarcode(),    // 序列码
                1L,    // 订单状态
@@ -371,8 +532,7 @@
                    Tag top = tagService.getTop();
                    NodeUtils nodeUtils = new NodeUtils();
                    nodeUtils.executePath(top.getId());
                    priTag = new Tag(
                            null,    // 编号
                    priTag = new Tag(null,    // 编号
                            param.getGroupCode(),    // 名称
                            top.getId(),    // 父级
                            top.getName(),    // 父级名称
@@ -401,8 +561,7 @@
                if (secTag == null) {
                    NodeUtils nodeUtils = new NodeUtils();
                    nodeUtils.executePath(priTag.getId());
                    secTag = new Tag(
                            null,    // 编号
                    secTag = new Tag(null,    // 编号
                            param.getGroupName(),    // 名称
                            priTag.getId(),    // 父级
                            priTag.getName(),    // 父级名称
@@ -445,94 +604,101 @@
            }
        }
    }
    @Override
    @Transactional
    public MatSyncParam syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getMats()) || param.getMats().size() <=0 ) {
    public Mat syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getCInvCode())) {
            throw new CoolException("商品数据为空");
        }
        MatSyncParam matSyncParam = new MatSyncParam();
        ArrayList<MatSyncParam.Mats> matParams = new ArrayList<>();
        Tag tag = tagService.selectByName("全部", 1);
        for (MatSyncParam.Mats matParam : param.getMats()){
            Date date = new Date();
            Mat mat = matService.selectByMatnr(matParam.getMatnr());
            if (Cools.isEmpty(mat)) {
                Mat matNew = new Mat();
                matNew.setTagId(tag.getId());
                matNew.setMatnr(matParam.getMatnr());//物料编码
                matNew.setMaktx(matParam.getMaktx());//物料名称
                matNew.setSpecs(matParam.getSpecs());//规格
                matNew.setModel(matParam.getModel());//型号
                matNew.setColor(matParam.getColor());//颜色
                matNew.setUnit(matParam.getUnit());//单位
                matNew.setMemo(matParam.getMemo());//备注
                matNew.setCreateBy(9999L);//9999表示erp下发
                matNew.setCreateTime(date);
                matNew.setUpdateBy(9999L);//9999表示erp下发
                matNew.setUpdateTime(date);
                if (matService.insert(matNew)) {
                    callApiLogSave(matParam, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
                    matParam.setType(true);
                } else {
                    callApiLogSave(matParam, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
                    matParam.setType(false);
                    matParam.setMemo("添加ERP下发商品信息失败!");
                }
        Mat mat = matService.selectByMatnr(param.getCInvCode());
        if (Cools.isEmpty(mat)) {
            mat = new Mat();
            mat.setTagId(tag.getId());
            syncMat(mat, param);
            if (matService.insert(mat)) {
                callApiLogSave(mat, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
            } else {
                callApiLogSave(matParam, "/open/asrs/mat/v1", "接收ERP下发商品信息失败!!!商品已存在!!!", false);
                matParam.setType(false);
                matParam.setMemo("商品已存在!");
                callApiLogSave(mat, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
                mat.setMemo("添加ERP下发商品信息失败!");
            }
            matParams.add(matParam);
        } else {
            mat.setTagId(tag.getId());
            syncMat(mat, param);
            System.out.println(mat.getMaktx().length());
            if (matService.updateById(mat)) {
                callApiLogSave(mat, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
            } else {
                callApiLogSave(mat, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
                mat.setMemo("添加ERP下发商品信息失败!");
            }
        }
        matSyncParam.setMats(matParams);
        return matSyncParam;
        return mat;
    }
    public void callApiLogSave(MatSyncParam.Mats matParam, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1",
                "物料编码:" + matParam.getMatnr() + "、物料名称:" + matParam.getMaktx() + "、规格:" + matParam.getSpecs() + "、备注:" + matParam.getMemo(),
                response, bool);
    private void syncMat(Mat mat, MatSyncParam param) {
        Date date = new Date();
        mat.setMatnr(param.getCInvCode());//物料编码
        mat.setMaktx(param.getCInvName());//物料名称
        mat.setSpecs(param.getCInvStd());//规格
        mat.setUnit(param.getCComUnitName());
        mat.setBeBatch(Cools.eq("true", param.getBInvBatch()) ? 1 : 0);
        mat.setStatus(param.getStates());
        mat.setModel(param.getIGroupType());//0:无换算 1:固定换算 2:浮动换算      不是0的都得传  默认为0
        mat.setCreateBy(9999L);//9999表示erp下发
        mat.setCreateTime(date);
        mat.setUpdateBy(9999L);//9999表示erp下发
        mat.setUpdateTime(date);
    }
    public void callApiLogSave(Mat mat, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1", "物料编码:" + mat.getMatnr() + "、物料名称:" + mat.getMaktx() + "、规格:" + mat.getSpecs() + "、备注:" + mat.getMemo(), response, bool);
    }
    @Override
    @Transactional
    public void combMes(CombParam param) {
        Long userId=9999l;
        Long userId = 9999l;
        if (Cools.isEmpty(param.getBarcode(), param.getCombMats())) {
            callApiLogSaveMES(null, null, BaseRes.PARAM, false);
            throw new CoolException(BaseRes.PARAM);
        }
        if(param.getBarcode().length()!=8){
        if (param.getBarcode().length() != 8) {
            callApiLogSaveMES(param, null, param.getBarcode() + ":条码长度不是8位", false);
            throw new CoolException("条码长度不是8位===>>" + param.getBarcode());
        }
        // 判断是否有相同条码的数据
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().
                eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
        if (waitPakinService.selectCount(new EntityWrapper<WaitPakin>().eq("zpallet", param.getBarcode()).eq("io_status", "N")) > 0) {
            callApiLogSaveMES(param, null, param.getBarcode() + "数据正在进行入库", false);
            throw new CoolException(param.getBarcode() + "数据正在进行入库");
        }
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet",param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet",param.getBarcode()));
        int countLoc = locDetlService.selectCount(new EntityWrapper<LocDetl>().eq("zpallet", param.getBarcode()));
        int countWrk = wrkDetlService.selectCount(new EntityWrapper<WrkDetl>().eq("zpallet", param.getBarcode()));
        if (countLoc > 0) {
            callApiLogSaveMES(param, null, param.getBarcode() + ":库存条码数据已存在", false);
            throw new CoolException("库存条码数据已存在===>>" + param.getBarcode());
        }else if (countWrk > 0){
        } else if (countWrk > 0) {
            callApiLogSaveMES(param, null, param.getBarcode() + ":工作明细档已存在此数据", false);
            throw new CoolException("工作明细档已存在此数据===>>" + param.getBarcode());
        }
        Date now = new Date();
        try{
        try {
            // 生成入库通知档
            List<DetlDto> detlDtos = new ArrayList<>();
            param.getCombMats().forEach(elem -> {
                DetlDto detlDto = new DetlDto(elem.getMatnr(), elem.getBatch(), elem.getAnfme());
                detlDto.setContainerCode(elem.getContainerCode());
                if (DetlDto.has(detlDtos, detlDto)) {
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch());
                    DetlDto one = DetlDto.find(detlDtos, detlDto.getMatnr(), detlDto.getBatch(), detlDto.getCsocode(), detlDto.getIsoseq(), detlDto.getContainerCode());
                    assert one != null;
                    one.setAnfme(one.getAnfme() + detlDto.getAnfme());
                } else {
@@ -543,7 +709,7 @@
            for (DetlDto detlDto : detlDtos) {
                Mat mat = matService.selectByMatnr(detlDto.getMatnr());
                if (Cools.isEmpty(mat)) {
                    callApiLogSaveMES(param, null,mat.getMatnr()+"商品档案不存在", false);
                    callApiLogSaveMES(param, null, mat.getMatnr() + "商品档案不存在", false);
                    throw new CoolException(detlDto.getMatnr() + "商品档案不存在");
                }
                WaitPakin waitPakin = new WaitPakin();
@@ -558,28 +724,23 @@
                waitPakin.setModiUser(userId);
                waitPakin.setModiTime(now);
                if (!waitPakinService.insert(waitPakin)) {
                    callApiLogSaveMES(param, null,mat.getMatnr()+"保存入库通知档失败", false);
                    callApiLogSaveMES(param, null, mat.getMatnr() + "保存入库通知档失败", false);
                    throw new CoolException("保存入库通知档失败");
                }
            }
        }catch (Exception e){
            callApiLogSaveMES(null, null,""+e, false);
        } catch (Exception e) {
            callApiLogSaveMES(null, null, "" + e, false);
        }
        callApiLogSaveMES(param, param.getCombMats().get(0),"组托成功", true);
        callApiLogSaveMES(param, param.getCombMats().get(0), "组托成功", true);
    }
    public void callApiLogSaveMES(CombParam combParam,CombParam.CombMat combMat, String response, Boolean bool) {
        if (Cools.isEmpty(combParam)){
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1",
                    "",
                    response, bool);
        }else if (Cools.isEmpty(combMat)){
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1",
                    "托盘码:" + combParam.getBarcode(),
                    response, bool);
        }else {
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1",
                    "托盘码:" + combParam.getBarcode() + "、物料编号:" + combMat.getMatnr() + "、数量:" + combMat.getAnfme(),
                    response, bool);
    public void callApiLogSaveMES(CombParam combParam, CombParam.CombMat combMat, String response, Boolean bool) {
        if (Cools.isEmpty(combParam)) {
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", "", response, bool);
        } else if (Cools.isEmpty(combMat)) {
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", "托盘码:" + combParam.getBarcode(), response, bool);
        } else {
            apiLogService.save("MES下发入库通知单", "/open/asrs/comb/v1", "null", "10.10.10.1", "托盘码:" + combParam.getBarcode() + "、物料编号:" + combMat.getMatnr() + "、数量:" + combMat.getAnfme(), response, bool);
        }
    }
@@ -591,7 +752,7 @@
    public List<ViewWorkInBean> inlogERP() {
        List<ViewWorkInBean> viewWorkInERP = reportQueryMapper.getViewWorkInERP();
        ArrayList<ViewWorkInBean> viewWorkInBeans = new ArrayList<>();
        for (ViewWorkInBean viewWorkInBean:viewWorkInERP){
        for (ViewWorkInBean viewWorkInBean : viewWorkInERP) {
            viewWorkInBean.sype();
            viewWorkInBeans.add(viewWorkInBean);
        }
@@ -603,8 +764,315 @@
     */
    @Override
    @Transactional
    public void outlogERP() {
    public List<ViewWorkInBean> outlogERP() {
        List<ViewWorkInBean> viewWorkInERP = reportQueryMapper.getViewWorkOutERP();
        ArrayList<ViewWorkInBean> viewWorkInBeans = new ArrayList<>();
        for (ViewWorkInBean viewWorkInBean : viewWorkInERP) {
            viewWorkInBean.sype();
            viewWorkInBeans.add(viewWorkInBean);
        }
        return viewWorkInBeans;
    }
    @Transactional
    public boolean syncMat(MatInfoParam param) {
        Date now = new Date();
        Mat mat = matService.selectByMatnr(param.getCinvcode());
        boolean update = true;
        if (Cools.isEmpty(matService.selectByMatnr(param.getCinvcode()))) {
            //物料号
            mat = new Mat();
            mat.setMatnr(param.getCinvcode());
            mat.setCreateTime(now);
            mat.setCreateBy(9999L);
            update = false;
//            callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息失败!!!商品已存在!!!", false);
//            param.setType(false);
//            param.setMemo("商品已存在!");
//            return false;
        }
        //Mat mat = new Mat();
        //物料号
        //mat.setMatnr(param.getCinvcode());
        //物料名称
        mat.setMaktx(param.getCinvname());
        //规格型号
        mat.setSpecs(param.getCInvStd());
        //存货分类编码
        mat.setBrand(param.getCinvccode());
        //存货分类名称
        mat.setColor(param.getCInvCName());
        //计量单位
        mat.setUnit(param.getCComUnitName());
        //进项税
        mat.setPrice(param.getIImpTaxRate());
        //销项税
        mat.setUnits(param.getITaxRate());
        //启用日期
        mat.setDsDate(param.getDSDate());
        //建档人
        mat.setSupp(param.getCCreatePerson());
        //建档日期
        mat.setDInvCreateDatetime(param.getDInvCreateDatetime());
        //通用型号
        mat.setModel(param.getCinvdefine4());
        //9999表示erp下发
        mat.setUpdateBy(9999L);
        mat.setTagId(1L);
        mat.setUpdateTime(now);
        if (update) {
            if (matService.updateById(mat)) {
                callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
                param.setUpdate(true);
            } else {
                callApiLogSave(param, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
                param.setError(true);
                param.setMemo("添加ERP下发商品信息失败!");
            }
        } else {
            if (matService.insert(mat)) {
                callApiLogSave(param, "/open/asrs/mat/v1", "接收ERP下发商品信息成功!添加商品信息成功!", true);
                param.setInsert(true);
            } else {
                callApiLogSave(param, "/open/asrs/mat/v1", "添加ERP下发商品信息失败!!!状态异常!!!", false);
                param.setError(true);
                param.setMemo("添加ERP下发商品信息失败!");
            }
        }
        return true;
    }
    @Transactional
    public boolean syncOrder(OrderSyncParam param, boolean pakin, String docName) {
        if (Cools.isEmpty(param) || Cools.isEmpty(param.getChildren())) {
            callApiLogSave(param, "/order/pakout/default/v1", "接受单据失败,单据参数为空或者单据详情为空,无法生成单据信息", false);
            throw new CoolException("单据参数为空或者单据详情为空,无法生成单据信息");
        }
        Order orderOld = null;
        if (!Cools.isEmpty(orderService.selectByNo(param.getCPOID()))) {
            orderOld = orderService.selectByNo(param.getCPOID());
            if (orderOld.getSettle() > 1) {
                throw new CoolException("该单据已在作业中,无法更改单据信息");
            }
//            String orderNo = param.getCPOID();
//            if (orderNo.contains("-")){
//                int index = Integer.parseInt(orderNo.split("-")[1]) + 1;
//                orderNo = orderNo.split("-")[0] + "-" + index;
//                param.setcPOID(orderNo);
//            }else {
//                orderNo = orderNo + "-1";
//                param.setcPOID(orderNo);
//            }
//
//            syncOrder(param,pakin,docName);
            //callApiLogSave(param, "/order/pakout/default/v1", "接受单据失败,该单据已存在,无法生成单据信息", false);
            //throw new CoolException("该单据已存在,无法生成单据信息");
        }
        List<OrderSyncParam.OrderDetl> collect = param.getChildren().stream().distinct().collect(Collectors.toList());
        if (collect.size() != param.getChildren().size()) {
            callApiLogSave(param, "/order/pakout/default/v1", "接受单据失败,单据明细重复,无法生成单据信息", false);
            throw new CoolException("接受单据失败,单据明细重复,无法生成单据信息");
        }
        Date now = new Date();
        Order order = orderMapping(param, now, pakin, docName);
        StringBuffer tel = new StringBuffer();
        for (OrderSyncParam.OrderDetl child : param.getChildren()) {
            tel.append(child.getCDefine22()).append(";");
        }
        order.setTel(tel.toString());
        orderService.insert(order);
        param.getChildren().forEach(od -> {
            OrderDetl orderDetl = orderDetlMapping(order, od, now);
            orderDetlService.insert(orderDetl);
        });
        if (!Cools.isEmpty(orderOld)) {
            //删除原有单据信息
            orderService.delete(new EntityWrapper<Order>().eq("id", orderOld.getId()));
            orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", orderOld.getId()));
        }
        callApiLogSave(param, "/order/pakout/default/v1", "接受单据成功", true);
        return true;
    }
    @Transactional
    public boolean orderDelete(String orderNo) {
        Order order = orderService.selectByNo(orderNo);
        if (Cools.isEmpty(order)) {
            throw new CoolException("单据不存在,无法删除单据");
        }
        if (order.getSettle() != 1) {
            return false;
        }
        orderService.deleteById(order);
        orderDetlService.delete(new EntityWrapper<OrderDetl>().eq("order_id", order.getId()));
        return true;
    }
    @Override
    @Transactional
    @Synchronized
    public boolean checkAndAdjustLocDetl(CheckParam params) {
        //判断库位是否存在
        AgvLocMast agvLocMast = agvLocMastService.selectById(params.getLocNo());
        if (Cools.isEmpty(agvLocMast)) {
            throw new CoolException("库位号不存在");
        }
        if (!Cools.eq("O", agvLocMast.getLocSts()) && !Cools.eq("F", agvLocMast.getLocSts())) {
            throw new CoolException("当前库位正在作业中,无法盘点调整");
        }
        if (Cools.isEmpty(params.getLocDetls())) {
            agvLocMast.setLocSts("O");
        } else {
            agvLocMast.setLocSts("F");
        }
        agvLocMastService.updateById(agvLocMast);
        //删除旧库存
        agvLocDetlService.delete(new EntityWrapper<AgvLocDetl>().eq("loc_no", params.getLocNo()));
        //新增盘点库存
        for (DetlDto detlDto : params.getLocDetls()) {
            AgvLocDetl agvLocDetl = new AgvLocDetl();
            Mat mat = matService.selectByMatnr(detlDto.getMatnr());
            BeanUtils.copyProperties(mat, agvLocDetl);
            agvLocDetl.setLocNo(params.getLocNo());
            agvLocDetl.setSuppCode(params.getContainerCode());
            agvLocDetl.setAnfme(detlDto.getAnfme());
            agvLocDetl.setBatch(detlDto.getBatch());
            agvLocDetl.setThreeCode(detlDto.getCsocode());
            agvLocDetl.setDeadTime(detlDto.getIsoseq());
            agvLocDetlService.insert(agvLocDetl);
        }
        return true;
    }
    private Order orderMapping(OrderSyncParam param, Date now, boolean pakin, String docName) {
        Order order = new Order();
        //uuid
        order.setUuid(String.valueOf(snowflakeIdWorker.nextId()));
        //单据唯一表示
        order.setOrderNo(param.getCPOID());
        //单据类型
        DocType docType = docTypeService.selectOrAdd(docName, pakin);
        order.setDocType(docType.getDocId());
        //单据日期
        order.setOrderTime(param.getDdate());
        //供应商编码
        order.setSalesman(param.getCVenCode());
        order.setMemo(param.getCMemo());
        //制单人
        order.setShipCode(param.getCPersonCode());
        order.setDefNumber(param.get操作系统号());
        order.setCreateBy(9999L);
        order.setCreateTime(now);
        order.setUpdateBy(9999L);
        order.setUpdateTime(now);
        order.setUpstreamcode(param.getUpstreamcode());
        //订单状态
        order.setSettle(1L);
        //状态
        order.setStatus(1);
        return order;
    }
    private OrderDetl orderDetlMapping(Order order, OrderSyncParam.OrderDetl odParam, Date now) {
        Mat mat = matService.selectByMatnr(odParam.getCInvCode());
        if (Cools.isEmpty(mat)) {
            throw new CoolException("存货编码:" + odParam.getCInvCode() + "不存在,请先同步存货档案");
        }
        OrderDetl od = new OrderDetl();
        od.setOrderId(order.getId());
        od.setOrderNo(order.getOrderNo());
        //采购订单行号
        od.setItemNum(odParam.getIvouchrowno());
        //存货编码
        od.setMatnr(mat.getMatnr());
        //存货名称
        od.setMaktx(mat.getMaktx());
        //规格型号
        //od.setSpecs(odParam.get("cInvStd").toString());
        od.setSpecs(mat.getSpecs());
        //计量单位
        //od.setUnit(odParam.get("cComUnitName").toString());
        od.setUnit(mat.getUnit());
        //数量
        od.setAnfme(odParam.getIQuantity());
        //销售订单号
        od.setThreeCode(odParam.getCDefine22());
        //自由项
        if (!Cools.isEmpty(odParam.getBatch()) || !Cools.isEmpty(odParam.getBFree1())) {
            od.setBatch((Cools.isEmpty(odParam.getBatch()) ? "" : odParam.getBatch()) + "__" + (Cools.isEmpty(odParam.getBFree1()) ? "" : odParam.getBFree1()));
        }
        od.setWeight(odParam.getINum());
        od.setVolume(odParam.getIinvexchrate());
        //IDs
        od.setSku(odParam.getId());
        od.setLength(odParam.getINum());
        od.setSource(order.getDocType().intValue());
        od.setStatus(1);
        od.setQty(0.0D);
        od.setReportQty(0.0D);
        od.setCreateBy(9999L);
        od.setCreateTime(now);
        od.setUpdateBy(9999L);
        od.setUpdateTime(now);
        return od;
    }
    private String toString(Object o) {
        if (StringUtils.isEmpty(o)) {
            return null;
        } else {
            return o.toString();
        }
    }
    public void callApiLogSave(MatInfoParam matParam, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP下发商品信息", tableName, "null", "10.10.10.1", "物料编码:" + matParam.getCinvcode() + "、物料名称:" + matParam.getCinvname() + "、规格:" + matParam.getCInvStd() + "、备注:" + matParam.getMemo(), response, bool);
    }
    public void callApiLogSave(OrderSyncParam param, String tableName, String response, Boolean bool) {
        apiLogService.save("ERP订单同步", tableName, "null", "10.10.10.1", param.toString(), response, bool);
    }
    public static void main(String[] args) {
        Object s = null;
        if (StringUtils.isEmpty(s)) {
            System.out.println("null");
        } else {
            System.out.println(s.toString());
        }
    }
}