自动化立体仓库 - WMS系统
lty
2025-04-23 ae2fb12ff5a4740417d3ba6d6dfad990a7456307
src/main/java/com/zy/asrs/service/impl/OpenServiceImpl.java
@@ -18,7 +18,7 @@
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import com.zy.asrs.entity.CheckDetl;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
@@ -48,6 +48,8 @@
    private TagService tagService;
    @Autowired
    private TagMapper tagMapper;
    @Autowired
    private CheckDetlService checkDetlService;
    @Override
    @Transactional
@@ -56,7 +58,7 @@
        if (!Cools.isEmpty(order)) {
            throw new CoolException(param.getOrderNo() + "单据已存在,请勿重复提交");
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.TRUE);
        DocType docType = docTypeService.selectOrAdd(param.getBillType(), Boolean.TRUE);
        Date now = new Date();
        // 单据主档
        order = new Order(
@@ -100,7 +102,7 @@
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        List<DetlDto> orderDetails = param.getMatList();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
@@ -191,7 +193,7 @@
            }
            orderService.remove(order.getId());
        }
        DocType docType = docTypeService.selectOrAdd(param.getOrderType(), Boolean.FALSE);
        DocType docType = docTypeService.selectOrAdd(param.getBillType(), Boolean.FALSE);
        Date now = new Date();
        // 单据主档
        order = new Order(
@@ -235,7 +237,7 @@
        }
        // 单据明细档
        List<DetlDto> list = new ArrayList<>();
        List<DetlDto> orderDetails = param.getOrderDetails();
        List<DetlDto> orderDetails = param.getMatList();
        for (DetlDto detail : orderDetails) {
            DetlDto dto = new DetlDto(detail.getMatnr(), detail.getBatch(), detail.getAnfme());
            if (DetlDto.has(list, dto)) {
@@ -435,113 +437,215 @@
        }
    }
//    @Override
//    @Transactional
//    public void syncMat(List<MatSyncParam> param) {
//        if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <=0 ) {
//            throw new CoolException("商品数据为空");
//        }
//
//        for(MatSyncParam.MatParam matParam : param.getMatDetails()){
//            if(Cools.isEmpty(matParam.getMatnr())){
//                throw new CoolException("商品编码不能为空");
//            }
//
//            Date now = new Date();
//            Mat mat = matService.selectByMatnr(matParam.getMatnr());
//            if (mat == null) {
//                mat = new Mat();
//                // 分类
//                Long tagId;
//                // 一级分类
//                if (!Cools.isEmpty(matParam.getTagId()) && !Cools.isEmpty(matParam.getTagIdName())) {
//                    Tag priTag = tagService.selectByName(matParam.getTagIdName(), 2);
//                    if (priTag == null) {
//                        Tag top = tagService.getTop();
//                        NodeUtils nodeUtils = new NodeUtils();
//                        nodeUtils.executePath(top.getId());
//                        priTag = new Tag(
//                                null,    // 编号
//                                matParam.getTagIdName(),    // 名称
//                                top.getId(),    // 父级
//                                top.getName(),    // 父级名称
//                                nodeUtils.path.toString(),    // 关联路径
//                                nodeUtils.pathName.toString(),    // 关联路径名
//                                0,    // 类型
//                                null,    // 负责人
//                                null,    // 图片
//                                null,    // 简要描述
//                                null,    // 数量
//                                2,    // 等级
//                                null,    // 排序
//                                1,    // 状态
//                                now,    // 添加时间
//                                null,    // 添加人员
//                                now,    // 修改时间
//                                null,    // 修改人员
//                                null    // 备注
//                        );
//                        if (tagMapper.insert(priTag) == 0) {
//                            throw new CoolException("服务器内部错误,请联系管理员");
//                        }
//                    }
//                } else {
//                    tagId = tagService.getTop().getId();
//                }
//                mat.sync(param);
////            mat.setMatnr(param.getMatnr());
////            mat.setMaktx(param.getMaktx());
////            mat.setSpecs(param.getSpecs());
////            mat.setModel(param.getModel());
//
//                mat.setTagId(1L);
//                mat.setStatus(1);
//                mat.setCreateTime(now);
//                mat.setUpdateTime(now);
//                if (!matService.insert(mat)) {
//                    throw new CoolException("服务器内部错误,请联系管理员");
//                } else {
//                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
//                }
//            } else {
//                mat.sync(param);
//                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) {
//                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
//                }
//            }
//        }
//
//    }
        @Override
        @Transactional
        public void syncMat(List<MatSyncParam> paramList) {
            if (Cools.isEmpty(paramList)) {
                throw new CoolException("同步数据为空");
            }
            for (MatSyncParam param : paramList) {
                if (Cools.isEmpty(param.getData()) || param.getData().isEmpty()) {
                    throw new CoolException("商品数据为空");
                }
                for (MatSyncParam.MatParam matParam : param.getData()) {
                    if (Cools.isEmpty(matParam.getMatnr())) {
                        throw new CoolException("商品编码不能为空");
                    }
                    Date now = new Date();
                    Mat mat = matService.selectByMatnr(matParam.getMatnr());
                    if (mat == null) {
                        mat = new Mat();
                        // 分类
                        Long tagId;
                        if (!Cools.isEmpty(matParam.getTagId()) && !Cools.isEmpty(matParam.getTagIdName())) {
                            // 如果提供了 tagId 和 tagIdName,查询是否已有相同的分类
                            Tag priTag = tagService.selectByName(matParam.getTagIdName(), 2);
                            if (priTag == null) {
                                // 如果分类不存在,创建新的分类
                                Tag top = tagService.getTop();
                                NodeUtils nodeUtils = new NodeUtils();
                                nodeUtils.executePath(top.getId());
                                priTag = new Tag(
                                        matParam.getTagId(),
                                        matParam.getTagIdName(),
                                        top.getId(),
                                        top.getName(),
                                        nodeUtils.path.toString(),
                                        nodeUtils.pathName.toString(),
                                        0,
                                        null,
                                        null,
                                        null,
                                        null,
                                        2,
                                        null,
                                        1,
                                        now,
                                        null,
                                        now,
                                        null,
                                        null
                                );
                                if (tagMapper.insert(priTag) == 0) {
                                    throw new CoolException("服务器内部错误,请联系管理员");
                                }
                                tagId = priTag.getId();
                            } else {
                                // 如果分类已存在,使用现有的 tagId
                                tagId = priTag.getId();
                            }
                        } else {
                            // 如果没有提供 tagId 和 tagIdName,则使用默认的分类
                            tagId = tagService.getTop().getId();
                        }
                        mat.sync(matParam);  //
                        mat.setTagId(tagId);
                        mat.setStatus(1);
                        mat.setCreateTime(now);
                        mat.setUpdateTime(now);
                        if (!matService.insert(mat)) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        } else {
                            log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                        }
                    } else {
                        Tag priTag = tagService.selectByName(matParam.getTagIdName(), 2);
                        matParam.setTagId(priTag.getId());
                        mat.sync(matParam);  // ⚠️ 同上
                        if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr", matParam.getMatnr()))) {
                            throw new CoolException("更新已存在商品信息失败,请联系管理员");
                        }
                    }
                }
            }
        }
    @Override
    @Transactional
    public void syncMat(MatSyncParam param) {
        if (Cools.isEmpty(param.getMatDetails()) || param.getMatDetails().size() <=0 ) {
            throw new CoolException("商品数据为空");
    public void check(List<MatSyncParam> paramList){
        if (Cools.isEmpty(paramList)) {
            throw new CoolException("上报数据为空");
        }
        for(MatSyncParam.MatParam matParam : param.getMatDetails()){
            if(Cools.isEmpty(matParam.getMatnr())){
                throw new CoolException("商品编码不能为空");
        for (MatSyncParam param : paramList) {
            if (Cools.isEmpty(param.getData()) || param.getData().isEmpty()) {
                throw new CoolException("物料数据为空");
            }
            Date now = new Date();
            Mat mat = matService.selectByMatnr(matParam.getMatnr());
            if (mat == null) {
                mat = new Mat();
                // 分类
                Long tagId;
                // 一级分类
                if (!Cools.isEmpty(matParam.getGroupCode()) && !Cools.isEmpty(matParam.getGroupName())) {
                    Tag priTag = tagService.selectByName(matParam.getGroupCode(), 2);
                    if (priTag == null) {
                        Tag top = tagService.getTop();
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(top.getId());
                        priTag = new Tag(
                                null,    // 编号
                                matParam.getGroupCode(),    // 名称
                                top.getId(),    // 父级
                                top.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                2,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(priTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    // 二级分类
                    Tag secTag = tagService.selectByName(matParam.getGroupName(), 3);
                    if (secTag == null) {
                        NodeUtils nodeUtils = new NodeUtils();
                        nodeUtils.executePath(priTag.getId());
                        secTag = new Tag(
                                null,    // 编号
                                matParam.getGroupName(),    // 名称
                                priTag.getId(),    // 父级
                                priTag.getName(),    // 父级名称
                                nodeUtils.path.toString(),    // 关联路径
                                nodeUtils.pathName.toString(),    // 关联路径名
                                0,    // 类型
                                null,    // 负责人
                                null,    // 图片
                                null,    // 简要描述
                                null,    // 数量
                                3,    // 等级
                                null,    // 排序
                                1,    // 状态
                                now,    // 添加时间
                                null,    // 添加人员
                                now,    // 修改时间
                                null,    // 修改人员
                                null    // 备注
                        );
                        if (tagMapper.insert(secTag) == 0) {
                            throw new CoolException("服务器内部错误,请联系管理员");
                        }
                    }
                    tagId = secTag.getId();
                } else {
                    tagId = tagService.getTop().getId();
            for (MatSyncParam.MatParam matParam : param.getData()) {
                if (Cools.isEmpty(matParam.getMatnr())) {
                    throw new CoolException("商品编码为空");
                }
                mat.sync(param);
//            mat.setMatnr(param.getMatnr());
//            mat.setMaktx(param.getMaktx());
//            mat.setSpecs(param.getSpecs());
//            mat.setModel(param.getModel());
                mat.setTagId(tagId);
                mat.setStatus(1);
                mat.setCreateTime(now);
                mat.setUpdateTime(now);
                if (!matService.insert(mat)) {
                    throw new CoolException("服务器内部错误,请联系管理员");
                } else {
                    log.info("同步新物料[商品编号:{}]", mat.getMatnr());
                Double LKAnfme = locDetlService.getAnfmeByMatnr(matParam.getMatnr(),matParam.getBatch(),matParam.getSpecs());
                if (LKAnfme == null) {
                    LKAnfme = 0.0;
                }
            } else {
                mat.sync(param);
                if (!matService.update(mat, new EntityWrapper<Mat>().eq("matnr",matParam.getMatnr()))) {
                    throw new CoolException("更新已存在商品信息失败,请联系管理员");
                // 计算差值
                double diff = matParam.getAnfme() - LKAnfme;
                if (diff != 0) {
                    CheckDetl checkDetl = new CheckDetl();
                    checkDetl.setAnfme(diff);  //这里记录差值
                    checkDetl.setMatnr(matParam.getMatnr());
                    checkDetl.setMaktx(matParam.getMaktx());
                    checkDetl.setSpecs(matParam.getSpecs());
                    checkDetl.setCreateTime(new Date());
                    checkDetlService.insert(checkDetl);  // 插入差异记录
                }
            }
        }
    }
}