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.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 * @description 针对表【material】的数据库操作Service实现 * @createDate 2023-07-26 15:52:50 */ @Service public class MaterialServiceImpl extends ServiceImpl 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 chooseFather() { return technologyTemplateMapper.chooseType(); } //标准MOM-->左侧五级树展示 @Override public List> selectTreeByMaterial() { return materialMapper.selectTreeByMaterial(); } //(1,2级)新增-->物料,标准,型号 @Override @Transactional(rollbackFor = Exception.class) public String addMaterial(MaterialDto materialDto, Integer spId, Integer ver) { //校验添加物料是否重复 List materialList = materialMapper.selectList(Wrappers.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 technologyTemplateList = technologyTemplateMapper.selectList(Wrappers.query().eq("type", material.getFather())); if (ObjectUtils.isEmpty(technologyTemplateList)) { return "添加物料【" + materialDto.getName() + "】成功"; } List 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 technologyIds = technologyList.stream().map(Technology::getId).collect(Collectors.toList()); //基础数据中工艺路线id集合 List techTemIds = technologyTemplateList.stream().map(TechnologyTemplate::getId).collect(Collectors.toList()); //两者长度一定一样 List productList = new ArrayList<>(); for (int i = 0; i < technologyIds.size(); i++) { List technicalModelList = technicalModelMapper.selectList(Wrappers.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 mbomList = new ArrayList<>(); for (int i = 0; i < technologyIds.size(); i++) { List mbomModelList = mbomModelMapper.selectList(Wrappers.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 technologyList = technologyMapper.selAllByVerSpId(spId, ver); List 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 productList = productMapper.selProByVerSpe(technologyList.get(i).getId()); List 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 mbomList = mbomMapper.seleByTechId(technologyList.get(i).getId()); List 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 @Transactional(rollbackFor = Exception.class) public Integer addVersion(Integer specificationsId, Integer version) { List technologyList = technologyMapper.selectList(Wrappers.query() .eq("specifications_id", specificationsId) .eq("version", version)); /*上一个版本的工艺路线id集合*/ List 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 technologyIds = technologyList.stream().map(Technology::getId).collect(Collectors.toList()); //两者长度一定一样 List productList = new ArrayList<>(); for (int i = 0; i < technologyIds.size(); i++) { List products = productMapper.selectList(Wrappers.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 mbomList = new ArrayList<>(); for (int i = 0; i < technologyIds.size(); i++) { List mboms = mbomMapper.selectList(Wrappers.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(); } }