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<FixtureMapper, Fixture> 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<Long> ids) {
|
if (ids.isEmpty()) {
|
return false;
|
}
|
long countRelatedFixture = this.relatedFixtureService.count(Wrappers.<ProductionCraftProcessRelatedFixture>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.<TrayFixture>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<ToolAppendixVO> toolAppendixVOList = fixtureVO.getToolAppendixVOList();
|
if (Func.isNotEmpty(toolAppendixVOList)) {
|
toolAppendixVOList.forEach(toolAppendixVO -> {
|
toolAppendixVO.setParentId(fixture.getId());
|
});
|
List<ToolAppendix> toolAppendices = ToolAppendixConvert.INSTANCE.convertVo(toolAppendixVOList);
|
this.toolAppendixService.saveBatch(toolAppendices);
|
List<ToolAppendixVO> 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.<Fixture>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<Long> ids) {
|
removeByIds(ids);
|
this.trayFixtureService.remove(Wrappers.<TrayFixture>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<FixtureGroupFixtureVO> fixtureGroupAndFixtureList() {
|
List<FixtureGroupFixtureVO> fixtureGroupFixtureVOList = ((FixtureMapper) this.baseMapper).listNotInUse();
|
fixtureGroupFixtureVOList.forEach(f -> {
|
f.setIsTrayGroup(false);
|
f.setIsTray(true);
|
});
|
if (Func.isEmpty(fixtureGroupFixtureVOList)) {
|
return Lists.newArrayList();
|
}
|
List<Long> groupIdList = fixtureGroupFixtureVOList.stream().map((v0) -> {
|
return v0.getParentId();
|
}).collect(Collectors.toList());
|
|
List<CommonGroup> commonGroupList = this.commonGroupService.list(Wrappers.<CommonGroup>lambdaQuery().in(CommonGroup::getId, groupIdList));
|
List<FixtureGroupFixtureVO> 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<FixtureImport> 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<String, List<FixtureImport>> map = (Map) fixtureData.stream().filter(c -> {
|
return Func.isNotEmpty(c.getFixtureCode());
|
}).collect(Collectors.groupingBy((v0) -> {
|
return v0.getFixtureCode();
|
}));
|
HashMap<String, Long> commonGroupNameMap = this.commonGroupService.getCommonGroupNameMap(CommonGroupTypeEnum.FIXTURE.getName(), CommonGroupConstant.DEFAULT_CATEGORY);
|
Set<String> fixtureCodeSet = (Set) list().stream().map((v0) -> {
|
return v0.getCode();
|
}).collect(Collectors.toSet());
|
checkFixtureImport(fixtureData, commonGroupNameMap, map, fixtureCodeSet);
|
List<FixtureImport> 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<Fixture> fixtures = list();
|
Map<String, Fixture> 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.<Fixture>lambdaUpdate().eq(Fixture::getCode, fixtureCode).set(Fixture::getName, Func.isBlank(name) ? fixtureCode : name));
|
this.commonGroupOfItemService.update(Wrappers.<CommonGroupOfItem>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<GroupTreeVO> allGroupFixture(CommonGroupTypeVO vo) {
|
List<GroupTreeVO> 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.<TrayFixture>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<FixtureImport> fixtureData, Map<String, Long> commonGroupNameMap, Map<String, List<FixtureImport>> map, Set<String> 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<FixtureVO> list(String keyword, Long groupId) {
|
IPage<FixtureVO> page = page(keyword, groupId, new Query().setSize(-1));
|
return page.getRecords();
|
}
|
|
@Override // org.springblade.modules.cps.service.IFixtureService
|
public IPage<FixtureVO> 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<FixtureVO> 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);
|
}
|
}
|