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.OrdersService; import com.yuanchu.mom.service.SpecificationsService; import com.yuanchu.mom.service.StandardService; import com.yuanchu.mom.utils.MyUtil; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.List; import java.util.Map; import java.util.Objects; /** * 订单(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 ManualTechnologyMapper manualTechnologyMapper; @Resource TechnologyMapper technologyMapper; //查询所有订单列表 @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); for (Technology technology : technologyList) { ManualTechnology manualTechnology = ManualTechnology.builder() .techname(technology.getName()) .techfather(technology.getFather()) .deviceGroup(technology.getDeviceGroup()) .manufactureOrderId(manufactureOrder.getId()) .productionQuota(technology.getProductionQuota()) .technologyId(technology.getId()) .build(); //新增编制工序表 manualTechnologyMapper.insert(manualTechnology); } } /*根据样品名称,样品编号,型号规格获取型号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]; //获取规格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(); } }