package com.qianwen.smartman.modules.cps.service.impl;
|
|
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.metadata.IPage;
|
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
|
import com.baomidou.mybatisplus.core.toolkit.support.SFunction;
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
import java.lang.invoke.SerializedLambda;
|
import java.util.ArrayList;
|
import java.util.Arrays;
|
import java.util.List;
|
import java.util.Optional;
|
import java.util.Set;
|
import java.util.stream.Collectors;
|
import javax.servlet.http.HttpServletResponse;
|
import com.qianwen.smartman.common.cache.RegionCache;
|
import com.qianwen.smartman.common.constant.CommonConstant;
|
import com.qianwen.smartman.common.constant.ExcelConstant;
|
import com.qianwen.smartman.common.enums.StatusType;
|
import com.qianwen.smartman.common.utils.MessageUtils;
|
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.service.impl.BladeServiceImpl;
|
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.secure.utils.AuthUtil;
|
import com.qianwen.core.tool.utils.CollectionUtil;
|
import com.qianwen.core.tool.utils.DateUtil;
|
import com.qianwen.core.tool.utils.Func;
|
import com.qianwen.smartman.modules.cps.convert.MaintainItemConvert;
|
import com.qianwen.smartman.modules.cps.dto.MaintainItemExportDTO;
|
import com.qianwen.smartman.modules.cps.dto.MaintainItemUpdateVO;
|
import com.qianwen.smartman.modules.cps.entity.MaintainItem;
|
import com.qianwen.smartman.modules.cps.entity.MaintainProjectItem;
|
import com.qianwen.smartman.modules.cps.excel.MaintainItemExcel;
|
import com.qianwen.smartman.modules.cps.excel.MaintainItemImport;
|
import com.qianwen.smartman.modules.cps.mapper.MaintainItemMapper;
|
import com.qianwen.smartman.modules.cps.service.IMaintainItemService;
|
import com.qianwen.smartman.modules.cps.service.IMaintainProjectItemService;
|
import com.qianwen.smartman.modules.cps.vo.MaintainItemAddVO;
|
import com.qianwen.smartman.modules.cps.vo.MaintainItemVO;
|
import com.qianwen.smartman.modules.resource.builder.oss.OssBuilder;
|
import com.qianwen.smartman.modules.tpm.service.IMaintainPlanItemService;
|
import com.qianwen.smartman.modules.tpm.service.IMaintainPlanService;
|
import org.springframework.stereotype.Service;
|
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.web.multipart.MultipartFile;
|
|
/**
|
* 保养项的服务
|
*/
|
@Service
|
public class MaintainItemServiceImpl extends BladeServiceImpl<MaintainItemMapper, MaintainItem> implements IMaintainItemService {
|
private final IMaintainProjectItemService maintainProjectItemService;
|
private final IMaintainPlanService maintainPlanService;
|
private final IMaintainPlanItemService maintainPlanItemService;
|
private final OssBuilder ossBuilder;
|
|
|
public MaintainItemServiceImpl(final IMaintainProjectItemService maintainProjectItemService, final IMaintainPlanService maintainPlanService, final IMaintainPlanItemService maintainPlanItemService, final OssBuilder ossBuilder) {
|
this.maintainProjectItemService = maintainProjectItemService;
|
this.maintainPlanService = maintainPlanService;
|
this.maintainPlanItemService = maintainPlanItemService;
|
this.ossBuilder = ossBuilder;
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public MaintainItem createMaintainItem(MaintainItemAddVO maintainItemAddVO) {
|
if (checkCodeIsExist(maintainItemAddVO.getCode(), null)) {
|
throw new ServiceException(MessageUtils.message("cps.common.duplicate.code.can.not.add", new Object[0]));
|
}
|
boolean result = checkCodeStopIsExist(maintainItemAddVO.getCode());
|
if (result) {
|
throw new ServiceException(MessageUtils.message("cps.tpm.item.already.stop.status", new Object[0]));
|
}
|
MaintainItem maintainItem = MaintainItemConvert.INSTANCE.convert(maintainItemAddVO);
|
save(maintainItem);
|
return maintainItem;
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public MaintainItem editMaintainItem(MaintainItemUpdateVO maintainItemUpdateVO) {
|
MaintainItem maintainItem = (MaintainItem) getById(maintainItemUpdateVO.getId());
|
if (Func.isNull(maintainItem)) {
|
throw new ServiceException(MessageUtils.message("cps.common.the.current.object.does.not.exist", new Object[0]));
|
}
|
if (checkCodeIsExist(maintainItemUpdateVO.getCode(), maintainItemUpdateVO.getId())) {
|
throw new ServiceException(MessageUtils.message("cps.common.duplicate.code.can.not.edit", new Object[0]));
|
}
|
checkCodeNameIsSame(maintainItem, maintainItemUpdateVO);
|
MaintainItem maintainItem2 = MaintainItemConvert.INSTANCE.convert(maintainItemUpdateVO);
|
updateById(maintainItem2);
|
return maintainItem2;
|
}
|
|
private void checkCodeNameIsSame(MaintainItem maintainItem, MaintainItemUpdateVO maintainItemUpdateDTO) {
|
if (!maintainItemUpdateDTO.getCode().equals(maintainItem.getCode()) || !maintainItemUpdateDTO.getName().equals(maintainItem.getName())) {
|
throw new ServiceException(MessageUtils.message("cps.tpm.code.or.name.not.match.id", new Object[0]));
|
}
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public MaintainItemVO queryMaintainItem(Long id) {
|
return MaintainItemConvert.INSTANCE.convert((MaintainItem) getById(id));
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public List<MaintainItemVO> queryMaintainItemList(String keyWord) {
|
//MaintainItem::getName MaintainItem::getCode
|
List<MaintainItem> list = list(Wrappers.<MaintainItem>query().lambda().eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainItem::getTenantId, AuthUtil.getTenantId())
|
.eq(MaintainItem::getStatus, CommonConstant.ENABLE)
|
.and(Func.isNotEmpty(keyWord), i -> {
|
LambdaQueryWrapper<MaintainItem> lambdaQueryWrapper = i.likeRight(MaintainItem::getName, keyWord).or().likeRight(MaintainItem::getCode, keyWord);
|
}).orderByAsc(MaintainItem::getCode));
|
return MaintainItemConvert.INSTANCE.convert(list);
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService MaintainItem::getCreateTime
|
public IPage<MaintainItemVO> queryMaintainItemListPage(String keyWord, Query query, Integer status) {
|
IPage<MaintainItem> pages = page(Condition.getPage(query), Wrappers.<MaintainItem>query().lambda()
|
.eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainItem::getTenantId, AuthUtil.getTenantId())
|
.eq(MaintainItem::getStatus, status == null ? CommonConstant.ENABLE : status)
|
.and(Func.isNotEmpty(keyWord), i -> {
|
LambdaQueryWrapper<MaintainItem> lambdaQueryWrapper = i.likeRight(MaintainItem::getName, keyWord).or().likeRight(MaintainItem::getCode, keyWord);
|
}).orderByDesc(Arrays.asList(MaintainItem::getCreateTime,MaintainItem::getId)));
|
|
return Optional.ofNullable(pages).map(p -> {
|
Page<MaintainItemVO> page = new Page<>(p.getCurrent(), p.getSize(), p.getTotal());
|
page.setRecords(MaintainItemConvert.INSTANCE.convert(p.getRecords()));
|
return page;
|
}).orElse(new Page<>());
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
@Transactional(rollbackFor = {Exception.class})
|
public Boolean deleteMaintainItem(List<String> ids, Integer type) {
|
if (StatusType.REMOVE.getType().equals(type)) {
|
removeByIds(Func.toLongList(ids));
|
this.maintainProjectItemService.remove(Wrappers.<MaintainProjectItem>query().lambda().in(MaintainProjectItem::getItemId, ids));
|
}
|
return Boolean.valueOf(changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE));
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public List<MaintainItemVO> queryMaintainItemListCanRelate() {
|
return this.baseMapper.queryMaintainItemListCanRelate(AuthUtil.getTenantId());
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public BladeFile exportMaintainItem(MaintainItemExportDTO maintainItemExportDTO, HttpServletResponse response) {
|
List<MaintainItemExcel> list = this.baseMapper.export(maintainItemExportDTO, AuthUtil.getTenantId());
|
String fileName = String.format("%s-%s.xlsx", "保养项数据", DateUtil.time());
|
MultipartFile multipartFile = ExcelUtil.exportToMultipartFile(fileName, "保养项数据表", list, MaintainItemExcel.class);
|
BladeFile bladeFile = this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
|
return bladeFile;
|
}
|
|
@Override // org.springblade.modules.cps.service.IMaintainItemService
|
public BladeFile importMaintainItem(List<MaintainItemImport> data) {
|
if (Func.isEmpty(data)) {
|
throw new ServiceException(MessageUtils.message("excel.import.data.can.not.be.null", new Object[0]));
|
}
|
if (data.size() > 200) {
|
throw new ServiceException(MessageUtils.message("excel.import.size.failed", new Object[0]));
|
}
|
List<MaintainItem> maintainItemList = list(Wrappers.<MaintainItem>lambdaQuery().eq(MaintainItem::getStatus, CommonConstant.ENABLE));
|
Set<String> codeSet = maintainItemList.stream().map((v0) -> {
|
return v0.getCode();
|
}).collect(Collectors.toSet());
|
Boolean flag = Boolean.TRUE;
|
for (MaintainItemImport datum : data) {
|
if (Func.isBlank(datum.getCode())) {
|
datum.setFailReason(MessageUtils.message("cps.tpm.maintain.code.can.not.empty", new Object[0]));
|
flag = Boolean.FALSE;
|
} else {
|
boolean result = checkCodeStopIsExist(datum.getCode());
|
if (result) {
|
datum.setFailReason(MessageUtils.message("cps.tpm.item.already.stop.status", new Object[0]));
|
flag = Boolean.FALSE;
|
} else {
|
if (Func.isNotBlank(datum.getCode())) {
|
if (codeSet.contains(datum.getCode())) {
|
datum.setFailReason(MessageUtils.message("cps.tpm.maintain.code.existing", new Object[0]));
|
flag = Boolean.FALSE;
|
} else {
|
codeSet.add(datum.getCode());
|
}
|
}
|
if (Func.isBlank(datum.getName())) {
|
datum.setFailReason(MessageUtils.message("cps.tpm.maintain.name.can.not.empty", new Object[0]));
|
flag = Boolean.FALSE;
|
} else if (ValidatorUtils.stringFilter(datum.getCode())) {
|
datum.setFailReason(MessageUtils.message("cps.maintain.item.code.exist.special.symbols.error", new Object[0]));
|
flag = Boolean.FALSE;
|
} else if (ValidatorUtils.stringFilter(datum.getName())) {
|
datum.setFailReason(MessageUtils.message("cps.maintain.item.name.exist.special.symbols.error", new Object[0]));
|
flag = Boolean.FALSE;
|
}
|
}
|
}
|
}
|
if (!flag.booleanValue()) {
|
MultipartFile multipartFile = ExcelUtil.exportFillTemplateToMultipartFile(ExcelConstant.DIRECTORY + "保养项导入失败模板" + ExcelConstant.SUFFIX, MessageUtils.message("excel.import.failed.report.name", new Object[0]) + ExcelConstant.SUFFIX, "保养项表", data.stream().filter(x -> {
|
return Func.isNotEmpty(x.getFailReason());
|
}).collect(Collectors.toList()), null, (AbstractMergeStrategy) null);
|
BladeFile bladeFile = this.ossBuilder.tempTemplate().putFile(multipartFile.getOriginalFilename(), multipartFile);
|
return bladeFile;
|
}
|
List<MaintainItem> list = new ArrayList<>();
|
data.forEach(x2 -> {
|
MaintainItem maintainItem = MaintainItemConvert.INSTANCE.convert(x2);
|
list.add(maintainItem);
|
});
|
if (CollectionUtil.isNotEmpty(list)) {
|
saveBatch(list);
|
return null;
|
}
|
return null;
|
}
|
|
private boolean checkCodeStopIsExist(String code) {
|
MaintainItem maintainItem = getOne(Wrappers.<MaintainItem>lambdaQuery().eq(MaintainItem::getCode, code).eq(MaintainItem::getStatus, CommonConstant.DEACTIVATE));
|
if (maintainItem != null) {
|
return Boolean.TRUE.booleanValue();
|
}
|
return Boolean.FALSE.booleanValue();
|
}
|
|
private boolean checkCodeIsExist(String code, Long id) {
|
List<MaintainItem> maintainItemList = this.baseMapper.selectList(Wrappers.<MaintainItem>query().lambda()
|
.eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainItem::getTenantId, AuthUtil.getTenantId())
|
.eq(MaintainItem::getStatus, CommonConstant.ENABLE)
|
.eq(MaintainItem::getCode, code)
|
.notIn(Func.isNotEmpty(id), MaintainItem::getId, id));
|
return maintainItemList != null && maintainItemList.size() > 0;
|
}
|
}
|