zss
2023-09-21 2dbc49184bd74845c8da694c20d6fd03d7ac87e0
standard-server/src/main/java/com/yuanchu/mom/service/impl/MaterialServiceImpl.java
@@ -1,16 +1,23 @@
package com.yuanchu.mom.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.yuanchu.mom.pojo.Material;
import com.yuanchu.mom.service.MaterialService;
import com.yuanchu.mom.mapper.MaterialMapper;
import com.yuanchu.mom.mapper.*;
import com.yuanchu.mom.pojo.*;
import com.yuanchu.mom.pojo.dto.MaterialDto;
import com.yuanchu.mom.service.*;
import com.yuanchu.mom.utils.MyUtil;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import javax.annotation.Resource;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
/**
 * @author Administrator
@@ -18,42 +25,246 @@
 * @createDate 2023-07-26 15:52:50
 */
@Service
public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material>
        implements MaterialService {
public class MaterialServiceImpl extends ServiceImpl<MaterialMapper, Material> implements MaterialService {
    @Resource
    MaterialMapper materialMapper;
    @Resource
    StandardMapper standardMapper;
    @Resource
    SpecificationsMapper specificationsMapper;
    @Resource
    TechnologyService technologyService;
    @Resource
    TechnologyTemplateMapper technologyTemplateMapper;
    @Resource
    ProductService productService;
    @Resource
    TechnicalModelMapper technicalModelMapper;
    @Resource
    MbomService mbomService;
    @Resource
    MbomModelMapper mbomModelMapper;
    @Resource
    TechnologyMapper technologyMapper;
    @Resource
    ProductMapper productMapper;
    @Resource
    MbomMapper mbomMapper;
    //新增-->选择产品大类
    @Override
    public List<String> chooseFather() {
        return technologyTemplateMapper.chooseType();
    }
    //标准MOM-->左侧五级树展示
    @Override
    public List<Map<String,Object>> selectTreeByMaterial() {
    public List<Map<String, Object>> selectTreeByMaterial() {
        return materialMapper.selectTreeByMaterial();
    }
    //(1,2级)新增-->物料,标准,型号
    @Override
    public List<Map<String, Object>> selectMaterialIdAndNameAndCode() {
        LambdaQueryWrapper<Material> wrapper = new LambdaQueryWrapper<>();
        wrapper.select(Material::getId, Material::getName, Material::getCode);
        return materialMapper.selectMaps(wrapper);
    @Transactional(rollbackFor = Exception.class)
    public String addMaterial(MaterialDto materialDto, Integer spId, Integer ver) {
        //校验添加物料是否重复
        List<Material> materialList = materialMapper.selectList(Wrappers.<Material>query()
                .eq("type", materialDto.getType())
                .eq("father", materialDto.getFather()));
        for (Material material : materialList) {
            if (material.getName().equals(materialDto.getName())) {
                return "该类型产品大类下有该产品名称";
            }
        }
        /*新增物料表*/
        Material material = new Material();
        material.setCode(MyUtil.getTimeSixNumberCode("ML", "ML"));
        material.setName(materialDto.getName());
        material.setType(materialDto.getType());
        material.setFather(materialDto.getFather());
        materialMapper.insert(material);
        /*新增标准表*/
        Standard standard = new Standard();
        standard.setName(materialDto.getStandard());
        standard.setMaterial_id(material.getId());
        standardMapper.insert(standard);
        /*新增型号表*/
        Specifications specifications = new Specifications();
        specifications.setName(materialDto.getSpecifications());
        specifications.setStandardId(standard.getId());
        specificationsMapper.insert(specifications);
        /**
         * 根据选择的情况,判断是拉取基础数据的数据,还是某一个产品下某一个型号的数据
         */
        //如果spId传的参数是0,则拉取基础数据的数据
        if (spId == 0) {
            /*新增标准BOM-->工艺路线(批量添加)*/
            List<TechnologyTemplate> technologyTemplateList = technologyTemplateMapper.selectList(Wrappers.<TechnologyTemplate>query().eq("type", material.getFather()));
            if (ObjectUtils.isEmpty(technologyTemplateList)) {
                return "添加物料【" + materialDto.getName() + "】成功";
            }
            List<Technology> technologyList = technologyTemplateList.stream().map(technologyTemplate -> {
                Technology technology = new Technology();
                technology.setSpecificationsId(specifications.getId());
                technology.setFather(technologyTemplate.getFather());
                technology.setName(technologyTemplate.getName());
                technology.setDeviceGroup(technologyTemplate.getDeviceGroup());
                return technology;
            }).collect(Collectors.toList());
            technologyService.saveBatch(technologyList);
            /*新增标准BOM-->技术指标(批量添加)*/
            //新增的工艺路线id集合
            List<Integer> technologyIds = technologyList.stream().map(Technology::getId).collect(Collectors.toList());
            //基础数据中工艺路线id集合
            List<Integer> techTemIds = technologyTemplateList.stream().map(TechnologyTemplate::getId).collect(Collectors.toList());
            //两者长度一定一样
            List<Product> productList = new ArrayList<>();
            for (int i = 0; i < technologyIds.size(); i++) {
                List<TechnicalModel> technicalModelList = technicalModelMapper.selectList(Wrappers.<TechnicalModel>query().eq("tech_tem_id", techTemIds.get(i)));
                for (TechnicalModel technicalModel : technicalModelList) {
                    Product product = new Product();
                    product.setFather(technicalModel.getFather());
                    product.setName(technicalModel.getName());
                    product.setUnit(technicalModel.getUnit());
                    product.setTechnologyId(technologyIds.get(i));
                    productList.add(product);
                }
            }
            productService.saveBatch(productList);
            /*新增标准BOM-->物料清单(批量添加)*/
            List<Mbom> mbomList = new ArrayList<>();
            for (int i = 0; i < technologyIds.size(); i++) {
                List<MbomModel> mbomModelList = mbomModelMapper.selectList(Wrappers.<MbomModel>query().eq("tech_tem_id", techTemIds.get(i)));
                for (MbomModel mbomModel : mbomModelList) {
                    Mbom mbom = new Mbom();
                    mbom.setUnit(mbomModel.getUnit());
                    mbom.setName(mbomModel.getName());
                    mbom.setQualityTraceability(mbomModel.getQualityTraceability());
                    mbom.setSpecifications(mbomModel.getSpecifications());
                    mbom.setTechnologyId(technologyIds.get(i));
                    mbomList.add(mbom);
                }
            }
            mbomService.saveBatch(mbomList);
            return "添加物料【" + materialDto.getName() + "】成功";
        }
        //如果spId!=0,等于选择的具体型号,则添加该型号版本的数据
        /*新增标准BOM-->工艺路线(批量添加)*/
        List<Technology> technologyList = technologyMapper.selAllByVerSpId(spId, ver);
        List<Technology> technologys = technologyList.stream().map(technology -> {
            Technology tec = new Technology();
            tec.setSpecificationsId(specifications.getId());
            tec.setName(technology.getName());
            tec.setFather(technology.getFather());
            tec.setDeviceGroup(technology.getDeviceGroup());
            tec.setProductionQuota(technology.getProductionQuota());
            return tec;
        }).collect(Collectors.toList());
        technologyService.saveBatch(technologys);
        //两者长度一定一样
        for (int i = 0; i < technologyList.size(); i++) {
            /*新增标准BOM-->技术指标(批量添加)*/
            List<Product> productList = productMapper.selProByVerSpe(technologyList.get(i).getId());
            List<Product> products = new ArrayList<>();
            for (Product product : productList) {
                Product pro = new Product();
                pro.setTechnologyId(technologys.get(i).getId());
                pro.setName(product.getName());
                pro.setFather(product.getFather());
                pro.setUnit(product.getUnit());
                pro.setRequired(product.getRequired());
                pro.setInternal(product.getInternal());
                products.add(pro);
            }
            productService.saveBatch(products);
            /*新增标准BOM-->物料清单(批量添加)*/
            List<Mbom> mbomList = mbomMapper.seleByTechId(technologyList.get(i).getId());
            List<Mbom> mboms = new ArrayList<>();
            for (Mbom mbom : mbomList) {
                Mbom mbo = new Mbom();
                mbo.setTechnologyId(technologys.get(i).getId());
                mbo.setName(mbom.getName());
                mbo.setUnit(mbom.getUnit());
                mbo.setUnit(mbom.getUnit());
                mbo.setNum(mbom.getNum());
                mbo.setQualityTraceability(mbom.getQualityTraceability());
                mbo.setSpecifications(mbom.getSpecifications());
                mboms.add(mbo);
            }
            mbomService.saveBatch(mboms);
        }
        return "添加物料【" + materialDto.getName() + "】成功";
    }
    //查询所有物料信息
    //添加同一个型号工艺路线,技术指标,物料清单的版本
    @Override
    public List<Material> selectMaterial() {
        return materialMapper.selectList(Wrappers.<Material>query());
    @Transactional(rollbackFor = Exception.class)
    public Integer addVersion(Integer specificationsId, Integer version) {
        List<Technology> technologyList = technologyMapper.selectList(Wrappers.<Technology>query()
                .eq("specifications_id", specificationsId)
                .eq("version", version));
        /*上一个版本的工艺路线id集合*/
        List<Integer> techTemIds = technologyList.stream().map(Technology::getId).collect(Collectors.toList());
        for (Technology technology : technologyList) {
            technology.setId(null);
            //最新版本+1
            technology.setVersion(technologyMapper.selectVerByTec(specificationsId).get(0) + 1);
        }
        technologyService.saveBatch(technologyList);
        /*工艺路线的版本新增的同时该工艺路线下下的技术指标,生产工艺,物料清单都要新增*/
        //新增版本的工艺路线id集合
        List<Integer> technologyIds = technologyList.stream().map(Technology::getId).collect(Collectors.toList());
        //两者长度一定一样
        List<Product> productList = new ArrayList<>();
        for (int i = 0; i < technologyIds.size(); i++) {
            List<Product> products = productMapper.selectList(Wrappers.<Product>query().eq("technology_id", techTemIds.get(i)));
            for (Product pro : products) {
                Product product = new Product();
                product.setFather(pro.getFather());
                product.setName(pro.getName());
                product.setUnit(pro.getUnit());
                product.setRequired(pro.getRequired());
                product.setInternal(pro.getInternal());
                product.setVersion(pro.getVersion() + 1);
                product.setTechnologyId(technologyIds.get(i));
                productList.add(product);
            }
        }
        productService.saveBatch(productList);
        /*新增标准BOM-->物料清单(批量添加)*/
        List<Mbom> mbomList = new ArrayList<>();
        for (int i = 0; i < technologyIds.size(); i++) {
            List<Mbom> mboms = mbomMapper.selectList(Wrappers.<Mbom>query().eq("technology_id", techTemIds.get(i)));
            for (Mbom mb : mboms) {
                Mbom mbom = new Mbom();
                mbom.setUnit(mb.getUnit());
                mbom.setName(mb.getName());
                mbom.setQualityTraceability(mb.getQualityTraceability());
                mbom.setSpecifications(mb.getSpecifications());
                mbom.setVersion(mb.getVersion() + 1);
                mbom.setNum(mb.getNum());
                mbom.setTechnologyId(technologyIds.get(i));
                mbomList.add(mbom);
            }
        }
        mbomService.saveBatch(mbomList);
        return technologyList.get(0).getVersion();
    }
    //根据物料名称查询物料id和物料编码
    @Override
    public List<Material> selectMcodeId(String name) {
        return materialMapper.selectMcodeId(name);
    }
    //根据物料名称和物料编码查询物料id,规格信息和型号信息
    @Override
    public List<Map> selectIdByCoNa(String name, String code) {
        return materialMapper.selectIdByCoNa(name,code);
    }
}