|
@@ -0,0 +1,386 @@
|
|
|
+package com.rongwei.bscommon.sys.service.impl;
|
|
|
+
|
|
|
+import com.rongwei.bscommon.sys.service.*;
|
|
|
+import com.rongwei.bscommon.sys.utils.CommonUtils;
|
|
|
+import com.rongwei.bsentity.domain.*;
|
|
|
+import com.rongwei.bsentity.dto.BatchCreateDTO;
|
|
|
+import com.rongwei.bsentity.dto.PlanYearCopyDTO;
|
|
|
+import com.rongwei.bsentity.dto.TaskCreatorDTO;
|
|
|
+import com.rongwei.bsentity.enums.EquipmentTypeEnum;
|
|
|
+import com.rongwei.rwadmincommon.system.vo.SysUserVo;
|
|
|
+import com.rongwei.rwcommon.base.R;
|
|
|
+import com.rongwei.rwcommon.utils.SecurityUtil;
|
|
|
+import org.springframework.beans.BeanUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
+import org.springframework.stereotype.Service;
|
|
|
+import org.springframework.transaction.annotation.Transactional;
|
|
|
+
|
|
|
+import java.util.*;
|
|
|
+import java.util.stream.Collectors;
|
|
|
+import java.util.stream.Stream;
|
|
|
+
|
|
|
+/**
|
|
|
+ * @author shangmi
|
|
|
+ * @title MaintenanceServiceImpl
|
|
|
+ * @date 2023/11/27 14:41
|
|
|
+ * @description 保养检修ServiceImpl
|
|
|
+ */
|
|
|
+@Service
|
|
|
+public class MaintenanceServiceImpl implements MaintenanceService {
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquMaintenanceTaskService maintenanceTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquMaintenanceScheduleService maintenanceScheduleService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquMaintenancePartService maintenancePartService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquPartsSetoutStandardService partsSetoutStandardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquPartsSetoutTaskService partsSetoutTaskService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private EquMaintenanceStandardService maintenanceStandardService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private AspCheckItemsService aspCheckItemsService;
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 发布任务
|
|
|
+ *
|
|
|
+ * @param taskCreator 入参
|
|
|
+ * @return {@link R}
|
|
|
+ * @date 2023/11/27 16:25
|
|
|
+ * @author shangmi
|
|
|
+ */
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R saveTask(TaskCreatorDTO taskCreator) {
|
|
|
+ // 查询主表信息
|
|
|
+ EquMaintenanceScheduleDo maintenanceSchedule = maintenanceScheduleService.getMaintenanceSiteByList(taskCreator);
|
|
|
+ // 查询子表信息
|
|
|
+ Integer month = taskCreator.getMonth();
|
|
|
+ List<EquMaintenancePartDo> maintenancePartList = maintenancePartService.getMasterIdAndMonthByList(maintenanceSchedule.getId(), month);
|
|
|
+ // 查询是否有生成过任务
|
|
|
+ List<EquMaintenanceTaskDo> maintenanceSiteList = maintenanceTaskService.getMaintenanceSite(taskCreator);
|
|
|
+ // 判断所有部位是否都有生成过任务
|
|
|
+ if (maintenanceSiteList.size() == maintenancePartList.size()) {
|
|
|
+ return R.error(maintenanceSchedule.getEquipmentname() + "在" + taskCreator.getYear() + "年" + month + "月的所有部位已发布任务!");
|
|
|
+ }
|
|
|
+ // 任务表没有数据则全部添加
|
|
|
+ if (maintenanceSiteList.size() != 0) {
|
|
|
+ // 去重
|
|
|
+ maintenancePartList = removeDuplicates(maintenancePartList, maintenanceSiteList);
|
|
|
+ }
|
|
|
+ // 通过主表ID查询备品备件信息
|
|
|
+ List<EquPartsSetoutStandardDo> partsSetoutStandardList = partsSetoutStandardService.getMasterIdByList(maintenancePartList.stream().map(EquMaintenancePartDo::getMaintenancestandid).collect(Collectors.toList()));
|
|
|
+ // 转移数据
|
|
|
+ List<EquMaintenanceTaskDo> equMaintenanceTaskDos = dataTransfer(maintenancePartList, maintenanceSchedule,month);
|
|
|
+ List<EquPartsSetoutTaskDo> partsSetoutTaskDoList = sparePartsConversion(partsSetoutStandardList, equMaintenanceTaskDos);
|
|
|
+ // 插入
|
|
|
+ int number = maintenanceTaskService.insertBatch(equMaintenanceTaskDos);
|
|
|
+ partsSetoutTaskService.batchSave(partsSetoutTaskDoList);
|
|
|
+ // 判断是否全部插入成功
|
|
|
+ if (number == equMaintenanceTaskDos.size()){
|
|
|
+ return R.ok();
|
|
|
+ }else {
|
|
|
+ return R.ok("数据添加不完整,请核对数据!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 批量生成保养计划
|
|
|
+ *
|
|
|
+ * @param batchCreate 入参
|
|
|
+ * @return {@link R}
|
|
|
+ * @date 2023/11/29 14:01
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R batchSavePlans(BatchCreateDTO batchCreate) {
|
|
|
+ //该设备分类下的所以部位保养标准
|
|
|
+ List<EquMaintenanceStandardDo> partsSetoutStandardList = maintenanceStandardService.getPlanTypeByList(batchCreate.getPlanType());
|
|
|
+ //明细表数组
|
|
|
+ List<EquMaintenancePartDo> equMaintenancePartList = new ArrayList<>();
|
|
|
+
|
|
|
+ //获取设备ID并拆分
|
|
|
+ List<String> equipmentId = Arrays.asList(batchCreate.getEquipmentId().split(","));
|
|
|
+ //设备计划数组
|
|
|
+ List<EquMaintenanceScheduleDo> maintenancePartList = maintenanceScheduleService.getYearAndEquipmentByList(equipmentId,batchCreate);
|
|
|
+ if (maintenancePartList.size()==equipmentId.size()){
|
|
|
+ return R.error(batchCreate.getYear()+"年"+ EquipmentTypeEnum.typeOf(Integer.parseInt(batchCreate.getPlanType()))+"以生成所有计划!");
|
|
|
+ }
|
|
|
+ if (maintenancePartList.size()!=0){
|
|
|
+ equipmentId = equipmentId.stream()
|
|
|
+ .filter(info -> !(maintenancePartList.stream()
|
|
|
+ .map(EquMaintenanceScheduleDo::getEquipmentid)
|
|
|
+ .collect(Collectors.toList()).contains(info))
|
|
|
+ ).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ List<AspCheckItems> aspCheckItems = new ArrayList<>(aspCheckItemsService.listByIds(equipmentId));
|
|
|
+ List<EquMaintenanceScheduleDo> maintenanceScheduleList = aspCheckItems.stream().map(info -> {
|
|
|
+ //数据转换(设备——计划)
|
|
|
+ EquMaintenanceScheduleDo maintenanceScheduleDo = dataShiftFacilityToPlan(info, batchCreate.getYear());
|
|
|
+ equMaintenancePartList.addAll(dataShiftSpareStandToPlan(partsSetoutStandardList,maintenanceScheduleDo.getId()));
|
|
|
+ return maintenanceScheduleDo;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ int number = maintenanceScheduleService.saveBatchList(maintenanceScheduleList);
|
|
|
+ maintenancePartService.saveBatchList(equMaintenancePartList);
|
|
|
+ if (number==maintenanceScheduleList.size()){
|
|
|
+ return R.ok();
|
|
|
+ }else {
|
|
|
+ return R.error("数据添加不完整,请核对数据!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 复制年度计划
|
|
|
+ *
|
|
|
+ * @param planYearCopy 入参
|
|
|
+ * @return {@link R}
|
|
|
+ * @date 2023/11/30 17:36
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ @Override
|
|
|
+ @Transactional
|
|
|
+ public R saveYearByTask(PlanYearCopyDTO planYearCopy) {
|
|
|
+
|
|
|
+ Date newDate = new Date();
|
|
|
+ SysUserVo currentUser = CommonUtils.getCurrentUser();
|
|
|
+ //获得指定年——工厂下所以计划及其备件信息
|
|
|
+ List<EquMaintenanceScheduleDo> maintenanceScheduleOldList = maintenanceScheduleService.getYearByList(planYearCopy.getOldYear(),planYearCopy.getTenantId());
|
|
|
+ List<EquMaintenanceScheduleDo> maintenanceScheduleNewList = maintenanceScheduleService.getYearByList(planYearCopy.getNewYear(), planYearCopy.getTenantId());
|
|
|
+ List<EquMaintenanceScheduleDo> maintenanceScheduleList = maintenanceScheduleOldList;
|
|
|
+ if (maintenanceScheduleNewList.size()!=0){
|
|
|
+ //获取不重复数据(去重)
|
|
|
+ maintenanceScheduleList = Stream.concat(maintenanceScheduleOldList.stream(),maintenanceScheduleNewList.stream())
|
|
|
+ .collect(Collectors.groupingBy(info->info.getEquipmentid()+info.getPlantype(),Collectors.counting()))
|
|
|
+ .entrySet().stream()
|
|
|
+ .filter(info -> info.getValue()==1)
|
|
|
+ .map(Map.Entry::getKey)
|
|
|
+ .map(info -> Stream.concat(maintenanceScheduleOldList.stream(),maintenanceScheduleNewList.stream())
|
|
|
+ .filter(item -> (item.getEquipmentid()+item.getPlantype()).equals(info))
|
|
|
+ .findFirst().orElse(null))
|
|
|
+ .filter(Objects::nonNull)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ }
|
|
|
+ if (maintenanceScheduleList.size()==0){
|
|
|
+ return R.error(planYearCopy.getOldYear()+"年计划已存在与"+ planYearCopy.getNewYear()+"中,请检查后再重新添加!");
|
|
|
+ }
|
|
|
+
|
|
|
+ List<EquMaintenancePartDo> masterIdByList = maintenancePartService.getMasterIdByList(maintenanceScheduleList.stream().map(EquMaintenanceScheduleDo::getId).collect(Collectors.toList()));
|
|
|
+ //计划备件信息
|
|
|
+ List<EquMaintenancePartDo> maintenancePartList = new ArrayList<>();
|
|
|
+ //赋值
|
|
|
+ maintenanceScheduleList.forEach(info ->{
|
|
|
+ List<EquMaintenancePartDo> collect = masterIdByList.stream().filter(item -> item.getMasterid().equals(info.getId())).collect(Collectors.toList());
|
|
|
+
|
|
|
+ info.setId(SecurityUtil.getUUID())
|
|
|
+ .setPlanyear(planYearCopy.getNewYear())
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifydate(newDate);
|
|
|
+
|
|
|
+ collect.forEach(item ->{
|
|
|
+ item.setId(SecurityUtil.getUUID())
|
|
|
+ .setMasterid(info.getId())
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifydate(newDate);
|
|
|
+ });
|
|
|
+ maintenancePartList.addAll(collect);
|
|
|
+
|
|
|
+ });
|
|
|
+ boolean b = maintenanceScheduleService.saveBatch(maintenanceScheduleList,100);
|
|
|
+ maintenancePartService.saveBatch(maintenancePartList,100);
|
|
|
+ if (b){
|
|
|
+ return R.ok();
|
|
|
+ }else {
|
|
|
+ return R.error("数据添加不完整,请核对数据!");
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 详细库转移(标准——计划明细)
|
|
|
+ *
|
|
|
+ * @param partsSetoutStandardList 标准库备品备件
|
|
|
+ * @param id 主表ID
|
|
|
+ * @return {@link Collection<? extends EquMaintenancePartDo>}
|
|
|
+ * @date 2023/11/29 16:21
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ private Collection<? extends EquMaintenancePartDo> dataShiftSpareStandToPlan(List<EquMaintenanceStandardDo> partsSetoutStandardList, String id) {
|
|
|
+ Date newDate = new Date();
|
|
|
+ SysUserVo currentUser = CommonUtils.getCurrentUser();
|
|
|
+ return partsSetoutStandardList.stream().map(info ->{
|
|
|
+ EquMaintenancePartDo maintenancePart = new EquMaintenancePartDo();
|
|
|
+ BeanUtils.copyProperties(info,maintenancePart);
|
|
|
+ maintenancePart.setId(SecurityUtil.getUUID())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifydate(newDate)
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setStandardrequest(info.getEquipmentsupport())
|
|
|
+ .setMaintenancestand(info.getStandardid())
|
|
|
+ .setMaintenancestandid(info.getId())
|
|
|
+ .setMasterid(id);
|
|
|
+ return maintenancePart;
|
|
|
+ }).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 处理数据转移 (任务——计划)
|
|
|
+ *
|
|
|
+ * @param maintenancePartList 保养部位
|
|
|
+ * @param maintenanceSchedule 设备
|
|
|
+ * @param month 月份
|
|
|
+ * @return {@link List<EquMaintenanceTaskDo>}
|
|
|
+ * @date 2023/11/27 17:55 创建时间
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ public List<EquMaintenanceTaskDo> dataTransfer(
|
|
|
+ List<EquMaintenancePartDo> maintenancePartList,
|
|
|
+ EquMaintenanceScheduleDo maintenanceSchedule,
|
|
|
+ Integer month) {
|
|
|
+ Date newDate = new Date();
|
|
|
+ SysUserVo currentUser = CommonUtils.getCurrentUser();
|
|
|
+ List<EquMaintenanceTaskDo> maintenanceTaskList = new ArrayList<>();
|
|
|
+ for (EquMaintenancePartDo maintenancePart : maintenancePartList) {
|
|
|
+ EquMaintenanceTaskDo equMaintenanceTask = new EquMaintenanceTaskDo();
|
|
|
+ BeanUtils.copyProperties( maintenanceSchedule,equMaintenanceTask);
|
|
|
+ BeanUtils.copyProperties( maintenancePart,equMaintenanceTask);
|
|
|
+ equMaintenanceTask.setId(SecurityUtil.getUUID())
|
|
|
+ .setMonth(month)
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setModifydate(newDate)
|
|
|
+ .setTenantid(currentUser.getTenantid());
|
|
|
+ maintenanceTaskList.add(equMaintenanceTask);
|
|
|
+ }
|
|
|
+
|
|
|
+ return maintenanceTaskList;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ /**
|
|
|
+ *转移子表数据
|
|
|
+ *
|
|
|
+ * @param partsSetoutStandardList 标准库备品备件
|
|
|
+ * @param equMaintenanceTaskDos 任务信息
|
|
|
+ * @return {@link List<EquPartsSetoutTaskDo>}
|
|
|
+ * @date 2023/11/28 19:16
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ public List<EquPartsSetoutTaskDo> sparePartsConversion(
|
|
|
+ List<EquPartsSetoutStandardDo> partsSetoutStandardList,
|
|
|
+ List<EquMaintenanceTaskDo> equMaintenanceTaskDos){
|
|
|
+ Date newDate = new Date();
|
|
|
+ SysUserVo currentUser = CommonUtils.getCurrentUser();
|
|
|
+ //遍历赛选出标准库备品备件主表ID和任务表标准库ID对应的字段并塞入任务表备品备件库中
|
|
|
+ return equMaintenanceTaskDos.stream().map(info -> partsSetoutStandardList.stream()
|
|
|
+ .filter(item -> item.getMasterid().equals(info.getMaintenancestandid()))
|
|
|
+ .map(item -> {
|
|
|
+ EquPartsSetoutTaskDo equPartsSetoutTaskDo = new EquPartsSetoutTaskDo();
|
|
|
+ BeanUtils.copyProperties(item, equPartsSetoutTaskDo);
|
|
|
+ //更换主表ID
|
|
|
+ equPartsSetoutTaskDo.setMasterid(info.getId())
|
|
|
+ .setId(SecurityUtil.getUUID())
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setModifydate(newDate);
|
|
|
+ // .setTenantid(currentUser.getTenantid());
|
|
|
+ return equPartsSetoutTaskDo;
|
|
|
+ }).collect(Collectors.toList())).flatMap(Collection::stream).distinct().collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ *
|
|
|
+ * 去重复
|
|
|
+ * @param maintenancePartList 任务表
|
|
|
+ * @param maintenanceSiteList 计划表
|
|
|
+ * @return {@link List<EquMaintenancePartDo>}
|
|
|
+ * @date 2023/11/27 18:14
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+ public List<EquMaintenancePartDo> removeDuplicates(
|
|
|
+ List<EquMaintenancePartDo> maintenancePartList,
|
|
|
+ List<EquMaintenanceTaskDo> maintenanceSiteList){
|
|
|
+ List<String> maintenanceSite = maintenanceSiteList.stream()
|
|
|
+ .map(EquMaintenanceTaskDo::getMaintenancesite)
|
|
|
+ .collect(Collectors.toList());
|
|
|
+ return maintenancePartList.stream().filter(info ->
|
|
|
+ !maintenanceSite.contains(info.getMaintenancesite())
|
|
|
+ ).collect(Collectors.toList());
|
|
|
+ }
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 数据转换(设备——计划)
|
|
|
+ *
|
|
|
+ * @param aspCheckItem 设备信息
|
|
|
+ * @return {@link EquMaintenanceStandardDo}
|
|
|
+ * @date 2023/11/29 15:24
|
|
|
+ * @author shangmi
|
|
|
+ *
|
|
|
+ */
|
|
|
+
|
|
|
+ public EquMaintenanceScheduleDo dataShiftFacilityToPlan(AspCheckItems aspCheckItem,Integer year){
|
|
|
+ EquMaintenanceScheduleDo maintenanceSchedule = new EquMaintenanceScheduleDo();
|
|
|
+ Date newDate = new Date();
|
|
|
+ SysUserVo currentUser = CommonUtils.getCurrentUser();
|
|
|
+ maintenanceSchedule.setEquipmenttype(aspCheckItem.getDevicesort())
|
|
|
+ .setPlanyear(year)
|
|
|
+ .setEquipmentname(aspCheckItem.getCheckitemname())
|
|
|
+ .setEquipmentid(aspCheckItem.getId())
|
|
|
+ .setEquipmentnumber(aspCheckItem.getCheckitemcode())
|
|
|
+ .setPlantype("BY")
|
|
|
+ .setSpecialequipment(aspCheckItem.getSource())
|
|
|
+ .setObjecttype("1")
|
|
|
+ .setSpecification(aspCheckItem.getDeleted())
|
|
|
+ .setWorkshop(aspCheckItem.getUsedeptname())
|
|
|
+ .setWorkshopid(aspCheckItem.getUsedeptid())
|
|
|
+ .setPlannedstatus("unlocked")
|
|
|
+ .setId(SecurityUtil.getUUID())
|
|
|
+ .setCreatedate(newDate)
|
|
|
+ .setCreateuserid(currentUser.getId())
|
|
|
+ .setCreateusername(currentUser.getName())
|
|
|
+ .setModifydate(newDate)
|
|
|
+ .setModifyuserid(currentUser.getId())
|
|
|
+ .setModifyusername(currentUser.getName())
|
|
|
+ .setTenantid(aspCheckItem.getTenantid());
|
|
|
+ return maintenanceSchedule;
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+}
|