package com.qianwen.smartman.modules.cps.service.impl; import cn.hutool.core.util.StrUtil; import com.alibaba.excel.write.merge.AbstractMergeStrategy; import com.baomidou.mybatisplus.core.conditions.Wrapper; 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.Wrappers; import com.google.common.collect.Lists; import java.lang.invoke.SerializedLambda; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Objects; import java.util.Set; import java.util.stream.Collectors; import javax.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.qianwen.smartman.common.cache.RegionCache; import com.qianwen.smartman.common.constant.CommonGroupConstant; import com.qianwen.smartman.common.constant.ExcelConstant; import com.qianwen.smartman.common.constant.ToolingConstant; import com.qianwen.smartman.common.enums.CommonGroupTypeEnum; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.common.utils.TreeUtils; import com.qianwen.smartman.common.utils.ValidatorUtils; import com.qianwen.core.excel.util.ExcelUtil; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.base.BaseServiceImpl; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.oss.model.BladeFile; import com.qianwen.core.tool.node.ForestNodeMerger; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.modules.cps.convert.FixtureConvert; import com.qianwen.smartman.modules.cps.convert.ToolAppendixConvert; import com.qianwen.smartman.modules.cps.entity.CommonGroup; import com.qianwen.smartman.modules.cps.entity.CommonGroupOfItem; import com.qianwen.smartman.modules.cps.entity.Fixture; import com.qianwen.smartman.modules.cps.entity.ProductionCraftProcessRelatedFixture; import com.qianwen.smartman.modules.cps.entity.ToolAppendix; import com.qianwen.smartman.modules.cps.entity.TrayFixture; import com.qianwen.smartman.modules.cps.enums.CommonGroupEnum; import com.qianwen.smartman.modules.cps.enums.TrayEnum; import com.qianwen.smartman.modules.cps.excel.FixtureImport; import com.qianwen.smartman.modules.cps.mapper.FixtureMapper; import com.qianwen.smartman.modules.cps.service.ICommonGroupOfItemService; import com.qianwen.smartman.modules.cps.service.ICommonGroupService; import com.qianwen.smartman.modules.cps.service.IFixtureService; import com.qianwen.smartman.modules.cps.service.IProductionCraftProcessRelatedFixtureService; import com.qianwen.smartman.modules.cps.service.IToolAppendixService; import com.qianwen.smartman.modules.cps.service.ITrayFixtureService; import com.qianwen.smartman.modules.cps.utils.ThrowFun; import com.qianwen.smartman.modules.cps.vo.CommonGroupTypeVO; import com.qianwen.smartman.modules.cps.vo.FixtureGroupFixtureVO; import com.qianwen.smartman.modules.cps.vo.FixtureVO; import com.qianwen.smartman.modules.cps.vo.GroupTreeVO; import com.qianwen.smartman.modules.cps.vo.ToolAppendixVO; import com.qianwen.smartman.modules.cps.vo.TrayFaceFixtureAddVO; import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder; import com.qianwen.smartman.modules.system.service.ICodeGeneratorService; import com.qianwen.smartman.modules.tpm.enums.MetaTypeEnum; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; /** * 夹具服务 */ @Service public class FixtureServiceImpl extends BaseServiceImpl implements IFixtureService { private static final Logger log = LoggerFactory.getLogger(FixtureServiceImpl.class); private final ICommonGroupOfItemService commonGroupOfItemService; private final IToolAppendixService toolAppendixService; private final ICommonGroupService commonGroupService; private final ITrayFixtureService trayFixtureService; private final OssBuilder ossBuilder; private final ICodeGeneratorService codeGeneratorService; private final IProductionCraftProcessRelatedFixtureService relatedFixtureService; public FixtureServiceImpl(final ICommonGroupOfItemService commonGroupOfItemService, final IToolAppendixService toolAppendixService, final ICommonGroupService commonGroupService, final ITrayFixtureService trayFixtureService, final OssBuilder ossBuilder, final ICodeGeneratorService codeGeneratorService, final IProductionCraftProcessRelatedFixtureService relatedFixtureService) { this.commonGroupOfItemService = commonGroupOfItemService; this.toolAppendixService = toolAppendixService; this.commonGroupService = commonGroupService; this.trayFixtureService = trayFixtureService; this.ossBuilder = ossBuilder; this.codeGeneratorService = codeGeneratorService; this.relatedFixtureService = relatedFixtureService; } @Override // org.springblade.modules.cps.service.IFixtureService public Boolean removeFixture(List ids) { if (ids.isEmpty()) { return false; } long countRelatedFixture = this.relatedFixtureService.count(Wrappers.lambdaQuery() .in(ProductionCraftProcessRelatedFixture::getFixtureId, ids)); /* long countRelatedFixture = this.relatedFixtureService.count((Wrapper) Wrappers.lambdaQuery().in((v0) -> { return v0.getFixtureId(); }, ids));*/ ThrowFun.isTrue(countRelatedFixture > 0).throwMessage(MessageUtils.message("cps.system.banding.not.remove", new Object[0])); this.trayFixtureService.remove(Wrappers.lambdaQuery().in(TrayFixture::getFixId, ids)); return Boolean.valueOf(removeByIds(ids)); } @Override // org.springblade.modules.cps.service.IFixtureService @Transactional(rollbackFor = {Exception.class}) public FixtureVO insert(@Valid FixtureVO fixtureVO, Long groupId) { Fixture fixture = FixtureConvert.INSTANCE.convert(fixtureVO); if (Func.isBlank(fixture.getCode())) { String code = this.codeGeneratorService.getGeneratorCode(fixture, MetaTypeEnum.FIXTURE.getCode()); log.info("夹具编码规则生成的code:{}", code + " ," + code.length()); fixture.setCode(code); } checkFixture(fixture); save(fixture); CommonGroupOfItem commonGroupOfItem = CommonGroupOfItem.builder().groupId(groupId).itemId(fixture.getId()).groupCategory(CommonGroupConstant.DEFAULT_CATEGORY).groupType(CommonGroupTypeEnum.FIXTURE.getName()).build(); this.commonGroupOfItemService.save(commonGroupOfItem); FixtureVO convert = FixtureConvert.INSTANCE.convert(fixture); List toolAppendixVOList = fixtureVO.getToolAppendixVOList(); if (Func.isNotEmpty(toolAppendixVOList)) { toolAppendixVOList.forEach(toolAppendixVO -> { toolAppendixVO.setParentId(fixture.getId()); }); List toolAppendices = ToolAppendixConvert.INSTANCE.convertVo(toolAppendixVOList); this.toolAppendixService.saveBatch(toolAppendices); List toolAppendixVOS = ToolAppendixConvert.INSTANCE.convert(toolAppendices); convert.setToolAppendixVOList(toolAppendixVOS); } if (Func.isNotEmpty(fixtureVO.getTrayId()) && Func.isNotEmpty(fixtureVO.getSurfaceId())) { TrayFaceFixtureAddVO trayFaceFixtureAddVO = new TrayFaceFixtureAddVO(); trayFaceFixtureAddVO.setTrayId(fixtureVO.getTrayId()); trayFaceFixtureAddVO.setFaceId(fixtureVO.getSurfaceId()); trayFaceFixtureAddVO.setFixIds(Lists.newArrayList(new Long[]{fixture.getId()})); this.trayFixtureService.addFaceFixture(trayFaceFixtureAddVO); } return convert; } @Override // org.springblade.modules.cps.service.IFixtureService public void checkFixture(Fixture fixture) { long count = count(Wrappers.lambdaQuery().eq(Fixture::getCode, fixture.getCode()) .ne(Func.isNotEmpty(fixture.getId()), Fixture::getId, fixture.getId())); /* long count = count(((LambdaQueryWrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getCode(); }, fixture.getCode())).ne(Func.isNotEmpty(fixture.getId()), (v0) -> { return v0.getId(); }, fixture.getId()));*/ if (count > 0) { throw new ServiceException(MessageUtils.message("cps.fixture.code.already.exists", new Object[0])); } } @Override // org.springblade.modules.cps.service.IFixtureService @Transactional(rollbackFor = {Exception.class}) public boolean remove(List ids) { removeByIds(ids); this.trayFixtureService.remove(Wrappers.lambdaQuery().in(TrayFixture::getFixId, ids)); return true; } @Override // org.springblade.modules.cps.service.IFixtureService public ToolAppendixVO insertFile(ToolAppendixVO toolAppendixVO) { ToolAppendix toolAppendix = ToolAppendixConvert.INSTANCE.convert(toolAppendixVO); this.toolAppendixService.save(toolAppendix); return ToolAppendixConvert.INSTANCE.convert(toolAppendix); } @Override // org.springblade.modules.cps.service.IFixtureService public List fixtureGroupAndFixtureList() { List fixtureGroupFixtureVOList = ((FixtureMapper) this.baseMapper).listNotInUse(); fixtureGroupFixtureVOList.forEach(f -> { f.setIsTrayGroup(false); f.setIsTray(true); }); if (Func.isEmpty(fixtureGroupFixtureVOList)) { return Lists.newArrayList(); } List groupIdList = fixtureGroupFixtureVOList.stream().map((v0) -> { return v0.getParentId(); }).collect(Collectors.toList()); List commonGroupList = this.commonGroupService.list(Wrappers.lambdaQuery().in(CommonGroup::getId, groupIdList)); List groupList = commonGroupList.stream().map(c -> { FixtureGroupFixtureVO fixtureGroupFixtureVO = new FixtureGroupFixtureVO(); fixtureGroupFixtureVO.setId(c.getId()); fixtureGroupFixtureVO.setName(c.getName()); fixtureGroupFixtureVO.setCode(c.getCode()); fixtureGroupFixtureVO.setParentId(c.getParentId()); fixtureGroupFixtureVO.setIsTrayGroup(true); fixtureGroupFixtureVO.setIsTray(false); return fixtureGroupFixtureVO; }).collect(Collectors.toList()); fixtureGroupFixtureVOList.addAll(groupList); return ForestNodeMerger.merge(fixtureGroupFixtureVOList); } @Override // org.springblade.modules.cps.service.IFixtureService @Transactional(rollbackFor = {Exception.class}) public BladeFile importFixture(MultipartFile file) { if (Objects.isNull(file)) { throw new ServiceException(MessageUtils.message("excel.import.file.is.null", new Object[0])); } List fixtureData = ExcelUtil.read(file, 0, 2, FixtureImport.class); if (Func.isEmpty(fixtureData)) { throw new ServiceException(MessageUtils.message("excel.import.data.can.not.be.null", new Object[0])); } if (fixtureData.size() > 200) { throw new ServiceException(MessageUtils.message("excel.import.size.failed", new Object[0])); } Map> map = (Map) fixtureData.stream().filter(c -> { return Func.isNotEmpty(c.getFixtureCode()); }).collect(Collectors.groupingBy((v0) -> { return v0.getFixtureCode(); })); HashMap commonGroupNameMap = this.commonGroupService.getCommonGroupNameMap(CommonGroupTypeEnum.FIXTURE.getName(), CommonGroupConstant.DEFAULT_CATEGORY); Set fixtureCodeSet = (Set) list().stream().map((v0) -> { return v0.getCode(); }).collect(Collectors.toSet()); checkFixtureImport(fixtureData, commonGroupNameMap, map, fixtureCodeSet); List fails = (List) fixtureData.stream().filter(w -> { return StrUtil.isNotEmpty(w.getFailReason()); }).collect(Collectors.toList()); if (fails.size() > 0) { MultipartFile template = ExcelUtil.exportFillTemplateToMultipartFile(ExcelConstant.DIRECTORY + "fixtureImportErrorTemplate" + ExcelConstant.SUFFIX, MessageUtils.message("excel.import.failed.report.name", new Object[0]) + ExcelConstant.SUFFIX, "夹具信息表", (List) fixtureData.stream().filter(x -> { return Func.isNotEmpty(x.getFailReason()); }).collect(Collectors.toList()), (Object) null, (AbstractMergeStrategy) null); return this.ossBuilder.tempTemplate().putFile(template.getOriginalFilename(), template); } List fixtures = list(); Map fixtureMap = (Map) fixtures.stream().collect(Collectors.toMap((v0) -> { return v0.getCode(); }, v -> { return v; })); fixtureData.forEach(fix -> { if (fix.getFixtureGroupName().equals(CommonGroupEnum.ALL.getCode())) { fix.setFixtureGroupName(CommonGroupEnum.UNASSORTED.getCode()); } String fixtureCode = fix.getFixtureCode(); if (fixtureCodeSet.contains(fixtureCode)) { String name = fix.getName(); update(Wrappers.lambdaUpdate().eq(Fixture::getCode, fixtureCode).set(Fixture::getName, Func.isBlank(name) ? fixtureCode : name)); this.commonGroupOfItemService.update(Wrappers.update().lambda().eq(CommonGroupOfItem::getItemId, ((Fixture)fixtureMap.get(fixtureCode)).getId()).set(CommonGroupOfItem::getGroupId, commonGroupNameMap.get(fix.getFixtureGroupName()))); /* update((Wrapper) ((LambdaUpdateWrapper) Wrappers.lambdaUpdate().eq((v0) -> { return v0.getCode(); }, fixtureCode)).set((v0) -> { return v0.getName(); }, Func.isBlank(name) ? fixtureCode : name)); this.commonGroupOfItemService.update((Wrapper) ((LambdaUpdateWrapper) Wrappers.update().lambda().eq((v0) -> { return v0.getItemId(); }, ((Fixture) fixtureMap.get(fixtureCode)).getId())).set((v0) -> { return v0.getGroupId(); }, commonGroupNameMap.get(fix.getFixtureGroupName())));*/ return; } FixtureVO fixtureVO = new FixtureVO(); fixtureVO.setCode(fixtureCode); String name2 = fix.getName(); fixtureVO.setName(Func.isBlank(name2) ? fixtureCode : name2); fixtureVO.setFixtureGroupId(String.valueOf(commonGroupNameMap.get(fix.getFixtureGroupName()))); fixtureVO.setFixtureGroupName(String.valueOf(commonGroupNameMap.get(fix.getFixtureGroupName()))); fixtureVO.setToolAppendixVOList(new ArrayList()); fixtureVO.setFixtureStatus(TrayEnum.FixtureEnum.ACTIVATING.getStatus()); insert(fixtureVO, (Long) commonGroupNameMap.get(fix.getFixtureGroupName())); }); return null; } @Override // org.springblade.modules.cps.service.IFixtureService public List allGroupFixture(CommonGroupTypeVO vo) { List groupFixture = ((FixtureMapper) this.baseMapper).groupFixture(); return TreeUtils.allGroupTree(vo, groupFixture); } @Override // org.springblade.modules.cps.service.IFixtureService @Transactional(rollbackFor = {Exception.class}) public FixtureVO updateFixture(FixtureVO vo) { Fixture fixture = FixtureConvert.INSTANCE.convert(vo); checkFixture(fixture); updateById(fixture); this.trayFixtureService.remove(Wrappers.lambdaQuery().eq(TrayFixture::getFixId, vo.getId())); /* this.trayFixtureService.remove((Wrapper) Wrappers.lambdaQuery().eq((v0) -> { return v0.getFixId(); }, vo.getId()));*/ TrayFixture trayFixture = new TrayFixture().setFixId(vo.getId()).setTrayId(vo.getTrayId()).setFaceId(vo.getSurfaceId()); this.trayFixtureService.save(trayFixture); return FixtureConvert.INSTANCE.convert(fixture); } private void checkFixtureImport(List fixtureData, Map commonGroupNameMap, Map> map, Set fixtureCodeSet) { for (FixtureImport fixtureImport : fixtureData) { if (Func.isBlank(fixtureImport.getFixtureGroupName())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.group.name.can.not.empty", new Object[0])); } else if (Func.isBlank(fixtureImport.getFixtureCode())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.code.can.not.empty", new Object[0])); } else if (Func.isNotBlank(fixtureImport.getFixtureGroupName()) && !commonGroupNameMap.containsKey(fixtureImport.getFixtureGroupName())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.group.code.not.existing", new Object[0])); } else { if (Func.isNotBlank(fixtureImport.getFixtureCode())) { if (map.get(fixtureImport.getFixtureCode()).size() > 1) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.code.existing", new Object[0])); } else if (fixtureCodeSet.contains(fixtureImport.getFixtureCode())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.code.existing", new Object[0])); } } if (ValidatorUtils.stringFilter(fixtureImport.getFixtureCode())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.code.exist.special.symbols.error", new Object[0])); } else if (Func.isNotBlank(fixtureImport.getName()) && ValidatorUtils.stringFilter(fixtureImport.getName())) { fixtureImport.setFailReason(MessageUtils.message("cps.fixture.name.exist.special.symbols.error", new Object[0])); } } } } @Override // org.springblade.modules.cps.service.IFixtureService public List list(String keyword, Long groupId) { IPage page = page(keyword, groupId, new Query().setSize(-1)); return page.getRecords(); } @Override // org.springblade.modules.cps.service.IFixtureService public IPage page(String keyword, Long groupId, Query query) { if (Func.isNull(groupId) || ToolingConstant.FIXTURE_ROOT.equals(groupId)) { return ((FixtureMapper) this.baseMapper).page(Condition.getPage(query), keyword, null); } IPage page = Condition.getPage(query); return ((FixtureMapper) this.baseMapper).page(page, keyword, groupId); } @Override // org.springblade.modules.cps.service.IFixtureService public FixtureVO detail(Long id) { return ((FixtureMapper) this.baseMapper).detail(id); } }