package com.qianwen.smartman.modules.cps.service.impl; import java.util.ArrayList; import java.util.List; import java.util.Optional; import java.util.stream.Collectors; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; 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.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.qianwen.core.log.exception.ServiceException; import com.qianwen.core.mp.support.Condition; import com.qianwen.core.mp.support.Query; import com.qianwen.core.secure.utils.AuthUtil; import com.qianwen.core.tool.utils.Func; import com.qianwen.smartman.common.utils.MessageUtils; import com.qianwen.smartman.modules.cps.convert.MaintainProjectConvert; import com.qianwen.smartman.modules.cps.entity.MaintainProject; import com.qianwen.smartman.modules.cps.entity.MaintainProjectItem; import com.qianwen.smartman.modules.cps.mapper.MaintainProjectMapper; import com.qianwen.smartman.modules.cps.service.IMaintainProjectItemService; import com.qianwen.smartman.modules.cps.service.IMaintainProjectService; import com.qianwen.smartman.modules.cps.vo.MaintainPlanIdListVO; import com.qianwen.smartman.modules.cps.vo.MaintainProjectAddVO; import com.qianwen.smartman.modules.cps.vo.MaintainProjectItemVO; import com.qianwen.smartman.modules.cps.vo.MaintainProjectUpdateVO; import com.qianwen.smartman.modules.cps.vo.MaintainProjectVO; import com.qianwen.smartman.modules.tpm.entity.MaintainPlan; import com.qianwen.smartman.modules.tpm.enums.MaintainPlanStatusEnum; import com.qianwen.smartman.modules.tpm.service.IMaintainPlanService; @Service public class MaintainProjectServiceImpl extends ServiceImpl implements IMaintainProjectService { @Autowired private IMaintainProjectItemService maintainProjectItemService; @Autowired @Lazy private IMaintainPlanService maintainPlanService; @Override @Transactional(rollbackFor = {Exception.class}) public MaintainProject createMaintainProject(MaintainProjectAddVO maintainProjectAddVO) { if (checkCodeIsExist(maintainProjectAddVO.getCode(), null)) { throw new ServiceException(MessageUtils.message("cps.common.duplicate.code.can.not.add", new Object[0])); } MaintainProject maintainProject = MaintainProjectConvert.INSTANCE.convert(maintainProjectAddVO); save(maintainProject); return maintainProject; } @Override @Transactional(rollbackFor = {Exception.class}) public MaintainProject editMaintainProject(MaintainProjectUpdateVO maintainProjectUpdateVO) { MaintainProject byId = (MaintainProject) getById(maintainProjectUpdateVO.getId()); if (!byId.getCode().equals(maintainProjectUpdateVO.getCode()) || !byId.getName().equals(maintainProjectUpdateVO.getName())) { throw new ServiceException(MessageUtils.message("cps.tpm.code.or.name.not.match.id", new Object[0])); } if (checkCodeIsExist(maintainProjectUpdateVO.getCode(), maintainProjectUpdateVO.getId())) { throw new ServiceException(MessageUtils.message("cps.common.duplicate.code.can.not.edit", new Object[0])); } MaintainProject maintainProject = MaintainProjectConvert.INSTANCE.convert(maintainProjectUpdateVO); updateById(maintainProject); return maintainProject; } @Override public MaintainProjectVO queryMaintainProject(Long id) { MaintainProject maintainProject = (MaintainProject) getById(id); if (maintainProject == null) { throw new ServiceException(MessageUtils.message("cps.common.the.current.object.does.not.exist", new Object[0])); } MaintainProjectVO maintainProjectVo = MaintainProjectConvert.INSTANCE.convert(maintainProject); List maintainProjectItemVoList = this.maintainProjectItemService.getMaintainProjectItemVoByProjectId(maintainProject.getId(), AuthUtil.getTenantId()); maintainProjectVo.setMaintainProjectItemVoList(maintainProjectItemVoList); return maintainProjectVo; } @Override public List queryMaintainProjectList(Long deviceTypeId) { List list = list(Wrappers.query().lambda() .eq(MaintainProject::getDeviceTypeId, deviceTypeId) .eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainProject::getTenantId, AuthUtil.getTenantId())); /*List list = list(((LambdaQueryWrapper) Wrappers.query().lambda().eq((v0) -> { return v0.getDeviceTypeId(); }, deviceTypeId)).eq(Func.isNotEmpty(AuthUtil.getTenantId()), (v0) -> { return v0.getTenantId(); }, AuthUtil.getTenantId()));*/ return MaintainProjectConvert.INSTANCE.convert(list); } @Override public IPage queryMaintainProjectListPage(Long deviceTypeId, Query query) { //MaintainProject d;d.getDeviceTypeName() IPage pages = page(Condition.getPage(query), Wrappers.query().lambda() .eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainProject::getTenantId, AuthUtil.getTenantId()) .and(Func.isNotEmpty(deviceTypeId), i -> i.like(MaintainProject::getDeviceTypeId, deviceTypeId)) .orderByAsc(MaintainProject::getCode)); return Optional.ofNullable(pages).map(p -> { Page page = new Page<>(p.getCurrent(), p.getSize(), p.getTotal()); page.setRecords(MaintainProjectConvert.INSTANCE.convert(p.getRecords())); return page; }).orElse(new Page<>()); } @Override @Transactional(rollbackFor = {Exception.class}) public Boolean deleteMaintainProject(Long id) { removeById(id); this.maintainProjectItemService.remove(Wrappers.query().lambda().eq(MaintainProjectItem::getProjectId, id)); return true; } private boolean checkCodeIsExist(String code, Long id) { //MaintainProject::getTenantId List maintainProjectList = this.baseMapper.selectList(Wrappers.query().lambda() .eq(Func.isNotEmpty(AuthUtil.getTenantId()), MaintainProject::getTenantId, AuthUtil.getTenantId()) .and(wrapper -> { LambdaQueryWrapper lambdaQueryWrapper = wrapper.eq(MaintainProject::getCode, code); }).notIn(Func.isNotEmpty(id), MaintainProject::getId, id)); return maintainProjectList != null && maintainProjectList.size() > 0; } private void deleteMaintainPlan(Long projectId) { List statusList = new ArrayList<>(); statusList.add(Integer.valueOf(MaintainPlanStatusEnum.T1.getType())); statusList.add(Integer.valueOf(MaintainPlanStatusEnum.T2.getType())); List list = this.maintainPlanService.list(Wrappers.query().lambda() .in(MaintainPlan::getPlanStatus, statusList) .eq(MaintainPlan::getProjectId, projectId)); /* List list = this.maintainPlanService.list((Wrapper) ((LambdaQueryWrapper) Wrappers.query().lambda().in((v0) -> { return v0.getPlanStatus(); }, statusList)).eq((v0) -> { return v0.getProjectId(); }, projectId));*/ List planIdList = list.stream().map(MaintainPlan::getId).collect(Collectors.toList()); if (!planIdList.isEmpty()) { MaintainPlanIdListVO maintainPlanIdListDTO = new MaintainPlanIdListVO(); maintainPlanIdListDTO.setIdList(planIdList); this.maintainPlanService.deleteMaintainPlan(maintainPlanIdListDTO); } } }