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 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 queryMaintainItemList(String keyWord) { //MaintainItem::getName MaintainItem::getCode List list = list(Wrappers.query().lambda().eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainItem::getTenantId, AuthUtil.getTenantId()) .eq(MaintainItem::getStatus, CommonConstant.ENABLE) .and(Func.isNotEmpty(keyWord), i -> { LambdaQueryWrapper 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 queryMaintainItemListPage(String keyWord, Query query, Integer status) { IPage pages = page(Condition.getPage(query), Wrappers.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 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 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 ids, Integer type) { if (StatusType.REMOVE.getType().equals(type)) { removeByIds(Func.toLongList(ids)); this.maintainProjectItemService.remove(Wrappers.query().lambda().in(MaintainProjectItem::getItemId, ids)); } return Boolean.valueOf(changeStatus(Func.toLongList(ids), CommonConstant.DEACTIVATE)); } @Override // org.springblade.modules.cps.service.IMaintainItemService public List queryMaintainItemListCanRelate() { return this.baseMapper.queryMaintainItemListCanRelate(AuthUtil.getTenantId()); } @Override // org.springblade.modules.cps.service.IMaintainItemService public BladeFile exportMaintainItem(MaintainItemExportDTO maintainItemExportDTO, HttpServletResponse response) { List 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 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 maintainItemList = list(Wrappers.lambdaQuery().eq(MaintainItem::getStatus, CommonConstant.ENABLE)); Set 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 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.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 maintainItemList = this.baseMapper.selectList(Wrappers.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; } }