package com.yuanchu.mom.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.ObjectUtils; 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.pojo.vo.FinishedInspectVo1; import com.yuanchu.mom.service.*; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.stream.Collectors; /** *

* 服务实现类 *

* * @author 江苏鵷雏网络科技有限公司 * @since 2023-08-01 */ @Service public class FinishedInspectServiceImpl extends ServiceImpl implements FinishedInspectService { @Resource private FinishedInspectMapper finishedInspectMapper; @Resource MaterialMapper materialMapper; @Resource StandardService standardService; @Resource SpecificationsService specificationsService; @Resource InspectionItemService inspectionItemService; @Autowired private ProductService productService; @Resource UserMapper userMapper; @Resource InspectUnacceptedMapper inspectUnacceptedMapper; @Resource RepertoryMapper repertoryMapper; @Resource ImportRepertoryMapper importRepertoryMapper; @Resource TechnologyMapper technologyMapper; @Resource TechniqueMapper techniqueMapper; @Override public Integer addProcessInspectionSheet(FinishedInspect finishedInspect) { finishedInspect.setType(0); int insert = finishedInspectMapper.insert(finishedInspect); if (insert == 1) { /*List> maps = productService.selectProductList(finishedInspect.getSpecificationsId()); inspectionItemService.insertList(finishedInspect.getId(), maps);*/ return insert; } return 0; } @Override @Transactional(rollbackFor = Exception.class) public Integer inspectionConclusion(String username, Integer finishedInspectId, Integer result) { //更新检验单里面的检验结论 LambdaUpdateWrapper updateWrapper = new LambdaUpdateWrapper<>(); updateWrapper.eq(FinishedInspect::getId, finishedInspectId); updateWrapper.set(FinishedInspect::getResult, result); finishedInspectMapper.update(new FinishedInspect(), updateWrapper); FinishedInspect finishedInspect = finishedInspectMapper.selectById(finishedInspectId); /*检验结论为不合格*/ if (result == 0) { //如果是成品的结论为不合格,需要新增成品不合格检验单 if (finishedInspect.getType() == 0) { /*新增成品不合格检验单*/ InspectUnaccepted inspectUnaccepted = InspectUnaccepted.builder() .reason(finishedInspect.getProjectName() + "不合格") //暂且定义为工程名称不合格 .rawInspectId(finishedInspectId) .build(); inspectUnacceptedMapper.insert(inspectUnaccepted); } //如果是过程检验的结论为不合格,需要新增半成品库存且检验结果为不合格 if (finishedInspect.getType() == 1) { /*新增半成品(1)库存*/ //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Repertory::getOrderCode, finishedInspect.getOrderNumber()) .eq(Repertory::getQualityTraceability, finishedInspect.getQualityTraceability()) .eq(Repertory::getName, finishedInspect.getMaterial()) .eq(Repertory::getSpecifications, finishedInspect.getSpecificationsModel()) .eq(Repertory::getUnit, finishedInspect.getUnit()) .eq(Repertory::getType, 1) .eq(Repertory::getCheckResult, 0); Repertory rep = repertoryMapper.selectOne(queryWrapper); if (rep != null) { rep.setNumber(rep.getNumber() + finishedInspect.getQuantity()); rep.setUserName(username); repertoryMapper.updateById(rep); } else { //如果除了库存别的信息有任何一个不一样,则新增一条半成品库存 Repertory repertory = Repertory.builder() .orderCode(finishedInspect.getOrderNumber()) .qualityTraceability(finishedInspect.getQualityTraceability()) .name(finishedInspect.getMaterial()) .specifications(finishedInspect.getSpecificationsModel()) .unit(finishedInspect.getUnit()) .number(finishedInspect.getQuantity()) .userName(username) .type(1) .checkResult(0)//检验结果为不合格 .build(); repertoryMapper.insert(repertory); } } } /*检验结论为合格*/ if (result == 1) { //如果是成品检验合格,,需要新增成品(0)库存和入库记录 if (finishedInspect.getType() == 0) { /*新增成品入库记录*/ ImportRepertory importRepertory = ImportRepertory.builder() .orderCode(finishedInspect.getOrderNumber()) .qualityTraceability(finishedInspect.getQualityTraceability()) .name(finishedInspect.getMaterial()) .specifications(finishedInspect.getSpecificationsModel()) .unit(finishedInspect.getUnit()) .number(finishedInspect.getQuantity()) .userName(username) .build(); importRepertoryMapper.insert(importRepertory); /*新增成品(0)库存*/ //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Repertory::getOrderCode, finishedInspect.getOrderNumber()) .eq(Repertory::getQualityTraceability, finishedInspect.getQualityTraceability()) .eq(Repertory::getName, finishedInspect.getMaterial()) .eq(Repertory::getSpecifications, finishedInspect.getSpecificationsModel()) .eq(Repertory::getUnit, finishedInspect.getUnit()) .eq(Repertory::getType, 0) .eq(Repertory::getCheckResult, 1); Repertory rep = repertoryMapper.selectOne(queryWrapper); if (rep != null) { rep.setNumber(rep.getNumber() + finishedInspect.getQuantity()); rep.setUserName(username); repertoryMapper.updateById(rep); } else { //如果除了库存别的信息有任何一个不一样,则新增一条成品库存 Repertory repertory = Repertory.builder() .orderCode(finishedInspect.getOrderNumber()) .qualityTraceability(finishedInspect.getQualityTraceability()) .name(finishedInspect.getMaterial()) .specifications(finishedInspect.getSpecificationsModel()) .unit(finishedInspect.getUnit()) .number(finishedInspect.getQuantity()) .userName(username) .type(0) .checkResult(1) //库存检验结果为合格 .build(); repertoryMapper.insert(repertory); } } //如果是过程检验合格,需要新增半成品(1)库存,检验结果为合格1 if (finishedInspect.getType() == 1) { /*新增半成品(1)库存*/ //如果入库的信息一样只有库存不一样,则在原来的库存数量上加上相应的数量 LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); queryWrapper.eq(Repertory::getOrderCode, finishedInspect.getOrderNumber()) .eq(Repertory::getQualityTraceability, finishedInspect.getQualityTraceability()) .eq(Repertory::getName, finishedInspect.getMaterial()) .eq(Repertory::getSpecifications, finishedInspect.getSpecificationsModel()) .eq(Repertory::getUnit, finishedInspect.getUnit()) .eq(Repertory::getType, 1) .eq(Repertory::getCheckResult, 1); Repertory rep = repertoryMapper.selectOne(queryWrapper); if (rep != null) { rep.setNumber(rep.getNumber() + finishedInspect.getQuantity()); rep.setUserName(username); repertoryMapper.updateById(rep); } else { //如果除了库存别的信息有任何一个不一样,则新增一条半成品库存 Repertory repertory = Repertory.builder() .orderCode(finishedInspect.getOrderNumber()) .qualityTraceability(finishedInspect.getQualityTraceability()) .name(finishedInspect.getMaterial()) .specifications(finishedInspect.getSpecificationsModel()) .unit(finishedInspect.getUnit()) .number(finishedInspect.getQuantity()) .userName(username) .type(1) .checkResult(1)//检验结果为合格 .build(); repertoryMapper.insert(repertory); } } } return 1; } @Override public IPage> selectFinishedInspectPage(Page page, Integer inspectResult, String inspectDate, String inspectUsername) { return finishedInspectMapper.selectFinishedInspectPage(page, inspectResult, inspectDate, inspectUsername); } //新增过程检验单-->根据订单号选择产品信息 @Override public List> chooseMater(String orderNumber) { return finishedInspectMapper.chooseMater(orderNumber); } //新增过程检验单 @Override @Transactional(rollbackFor = Exception.class) public String addProcess(String userId, FinishedInspectVo1 finishedInspectVo1) { /*新增过程检验单*/ FinishedInspect finishedInspect = new FinishedInspect(); finishedInspect.setType(1); finishedInspect.setUserId(Integer.parseInt(userId)); BeanUtils.copyProperties(finishedInspectVo1, finishedInspect); finishedInspectMapper.insert(finishedInspect); /*批量新增过程检验项目表*/ //获取型号id Integer specificationId = getSpecificationId(finishedInspectVo1.getMaterial(), finishedInspectVo1.getMaterialCode(), finishedInspectVo1.getSpecificationsModel()); //查询标准BOM技术指标中该型号工艺下最新版本的检验项目 Integer ver = productService.selectVerByPro(specificationId).get(0);//该型号下技术指标最新版本 List productList = productService.selProByVerSpe(finishedInspectVo1.getTechnologyId(), ver); List inspectionItemList = productList.stream().map(product -> { InspectionItem inspectionItem = new InspectionItem(); BeanUtils.copyProperties(product, inspectionItem); inspectionItem.setFinishInspectId(finishedInspect.getId()); //如果新增时还填写了检验值则要进行判断检验结果 if (ObjectUtils.isNotEmpty(finishedInspectVo1.getInspectionValue())) { inspectionItem.setInspectionValue(finishedInspectVo1.getInspectionValue()); //判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格0 String required = product.getRequired();//标准值 String internal = product.getInternal();//内控值 String testValue = finishedInspectVo1.getInspectionValue();//检测值 List list = Arrays.stream(testValue.split(",")).map(s -> { int values = checkValues(required, internal, s); return values; }).collect(Collectors.toList()); if (list.contains(0)) { //如果其中一个检验值不合格则该项目检验不合格 inspectionItem.setResult(0); } else { inspectionItem.setResult(1); } inspectionItem.setUsername(userMapper.selectById(userId).getName()); } return inspectionItem; }).collect(Collectors.toList()); inspectionItemService.saveBatch(inspectionItemList); return "新增过程检验单"+finishedInspect.getId()+"成功!"; } //新增过程检验单-->选择设备 @Override public List> chooseDev(Integer technologyId, String father, String name) { //该工艺id下生产工艺最新版本 Integer ver = techniqueMapper.selectVerByTeId(technologyId).get(0); return techniqueMapper.selDevByVerTecIdFaNam(technologyId,father,name,ver); } /*根据样品名称,样品编号,型号规格获取型号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(); } /*判断检测值是否满足标准值和内控值的要求,如果不满足则检验结论为不合格*/ private int checkValues(String standardValueStr, String controlValueStr, String detectionValueStr) { boolean isStandardValueSatisfied = isValueSatisfied(standardValueStr, detectionValueStr); boolean isControlValueSatisfied = isValueSatisfied(controlValueStr, detectionValueStr); if (isStandardValueSatisfied && isControlValueSatisfied) { return 1; } else { return 0; } } private boolean isValueSatisfied(String valueStr, String detectionValueStr) { String substring = valueStr.substring(1, 2); if (substring.equals("=")) { String operator = valueStr.substring(0, 2); Double standardValue = Double.parseDouble(valueStr.substring(2)); Double detectionValue = Double.parseDouble(detectionValueStr); switch (operator) { case ">=": return detectionValue >= standardValue; case "<=": return detectionValue <= standardValue; default: return false; } } else { String operator = valueStr.substring(0, 1); Double standardValue = Double.parseDouble(valueStr.substring(1)); Double detectionValue = Double.parseDouble(detectionValueStr); switch (operator) { case ">": return detectionValue > standardValue; case "≥": return detectionValue >= standardValue; case "≤": return detectionValue <= standardValue; case "<": return detectionValue < standardValue; case "=": return detectionValue.equals(standardValue); default: return false; } } } }