package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.yuanchu.mom.mapper.*; import com.yuanchu.mom.pojo.*; 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.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** * 订单(Order)表服务实现类 * * @author zss * @since 2023-07-31 11:57:44 */ @Service("orderService") public class OrdersServiceImpl implements OrdersService { @Resource SaleMapper saleMapper; @Resource MaterialMapper materialMapper; @Resource StandardService standardService; @Resource SpecificationsService specificationsService; @Resource SaleMaterialMapper saleMaterialMapper; @Resource ManufactureOrderMapper manufactureOrderMapper; @Resource ManualTechnologyService manualTechnologyService; @Resource TechnologyMapper technologyMapper; @Resource ProductMapper productMapper; @Resource MbomMapper mbomMapper; @Resource ManualProductService manualProductService; @Resource ManualMbomService manualMbomService; //查询所有订单列表 @Override public IPage> selectAllOrder(Page page, String orderCode, String name, Integer type, String time) { return saleMapper.selectAllOrder(page, orderCode, name, type, time); } //编制订单BOM @Override @Transactional(rollbackFor = Exception.class) public void compile(Integer id) { /*更改订单BOM的状态为已编制1*/ SaleMaterial saleMaterial = saleMaterialMapper.selectById(id); saleMaterial.setType(1); saleMaterialMapper.updateById(saleMaterial); /*新增生产订单+编制工序*/ //查询订单信息 Sale sale = saleMapper.selectById(saleMaterial.getSaleId()); ManufactureOrder manufactureOrder = ManufactureOrder.builder() .orderCode(sale.getOrderNumber()) .customerCode(sale.getCode()) .proname(sale.getProname()) .saleman(sale.getSaleman()) .name(saleMaterial.getName()) .specifications(saleMaterial.getSpecifications()) .unit(saleMaterial.getUnit()) .number(saleMaterial.getNumber()) .downtime(sale.getCreateTime()) .deltime(sale.getDelTime()) .qualityTraceability(MyUtil.getTimeSixNumberCode("GPT", "GPT")) .downman(sale.getOrderName()) .build(); //新增生产订单 manufactureOrderMapper.insert(manufactureOrder); //产品编码 String code = materialMapper.selMcode(manufactureOrder.getName()); //型号id Integer specificationId = getSpecificationId(manufactureOrder.getName(), code, manufactureOrder.getSpecifications()); //默认最新版本 Integer version = technologyMapper.selectVerByTec(specificationId).get(0); /*正序查询该型号最新版本下的工艺路线*/ LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Technology::getSpecificationsId,specificationId); queryWrapper.eq(Technology::getVersion,version); queryWrapper.orderByAsc(Technology::getFather); List technologyList = technologyMapper.selectList(queryWrapper); List manualTechnologyList = technologyList.stream().map(technology -> { ManualTechnology manualTechnology = ManualTechnology.builder() .techname(technology.getName()) //工艺 .techfather(technology.getFather()) //工序 .deviceGroup(technology.getDeviceGroup()) //生产设备组 .manufactureOrderId(manufactureOrder.getId()) //生产订单id .productionQuota(technology.getProductionQuota()) //生产效率 .technologyId(technology.getId()) //标准bom中工艺路线id .build(); return manualTechnology; }).collect(Collectors.toList()); /*新增编制工艺表*/ manualTechnologyService.saveBatch(manualTechnologyList); //根据标准bom的工艺路线id查询标准bom中的技术指标 for (ManualTechnology manualTechnology : manualTechnologyList) { List productList = productMapper.selProByVerSpe(manualTechnology.getTechnologyId()); List manualProducts = new ArrayList<>(); for (Product product : productList) { ManualProduct manualProduct = ManualProduct.builder() .manualTechnologyId(manualTechnology.getId()) //关联 生产订单id .name(product.getName()) .father(product.getFather()) .unit(product.getUnit()) .required(product.getRequired()) .internal(product.getInternal()) .build(); manualProducts.add(manualProduct); } /*新增编制技术指标表*/ manualProductService.saveBatch(manualProducts); } //根据标准bom的工艺路线id查询标准bom中的物料清单 for (ManualTechnology manualTechnology : manualTechnologyList) { List mbomList = mbomMapper.selectList(Wrappers.query().eq("technology_id",manualTechnology.getTechnologyId())); List manualMboms = new ArrayList<>(); for (Mbom mbom : mbomList) { ManualMbom manualMbom = ManualMbom.builder() .manualTechnologyId(manualTechnology.getId()) //关联 生产订单id .name(mbom.getName()) .unit(mbom.getUnit()) .num(mbom.getNum()) .qualityTraceability(mbom.getQualityTraceability()) .specifications(mbom.getSpecifications()) .build(); manualMboms.add(manualMbom); } /*新增编制物料清单表*/ manualMbomService.saveBatch(manualMboms); } } /*根据样品名称,样品编号,型号规格获取型号id*/ private Integer getSpecificationId(String name, String mcode, String specification) { //获取物料id Material material = materialMapper.selectOne(Wrappers.query() .eq("name", name) .eq("code", mcode)); if (Objects.isNull(material)) { return null; } //获取规格名称和型号名称 String[] split = specification.split("-"); String stName = split[0]; String spName = split[1]+split[2]; //获取规格id Standard standard = standardService.getOne(Wrappers.query() .eq("name", stName) .eq("material_id", material.getId())); //获取型号id Specifications specifications = specificationsService.getOne(Wrappers.query() .eq("name", spName) .eq("standard_id", standard.getId())); return specifications.getId(); } }