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<Map<String, Object>> selectAllOrder(Page<Object> 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<Technology> queryWrapper = new LambdaQueryWrapper<>();
|
queryWrapper.eq(Technology::getSpecificationsId,specificationId);
|
queryWrapper.eq(Technology::getVersion,version);
|
queryWrapper.orderByAsc(Technology::getFather);
|
List<Technology> technologyList = technologyMapper.selectList(queryWrapper);
|
List<ManualTechnology> 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<Product> productList = productMapper.selProByVerSpe(manualTechnology.getTechnologyId());
|
List<ManualProduct> 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<Mbom> mbomList = mbomMapper.selectList(Wrappers.<Mbom>query().eq("technology_id",manualTechnology.getTechnologyId()));
|
List<ManualMbom> 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.<Material>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.<Standard>query()
|
.eq("name", stName)
|
.eq("material_id", material.getId()));
|
//获取型号id
|
Specifications specifications = specificationsService.getOne(Wrappers.<Specifications>query()
|
.eq("name", spName)
|
.eq("standard_id", standard.getId()));
|
return specifications.getId();
|
}
|
|
}
|