From 548de3053898bc6571c90d014a40050c39a7d195 Mon Sep 17 00:00:00 2001 From: lyh <925863403@qq.com> Date: 星期六, 02 八月 2025 15:33:07 +0800 Subject: [PATCH] 二保添加流转节点 --- lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java | 491 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 491 insertions(+), 0 deletions(-) diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java new file mode 100644 index 0000000..a0a1d4e --- /dev/null +++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/EamEquipmentController.java @@ -0,0 +1,491 @@ +package org.jeecg.modules.eam.controller; + +import com.alibaba.fastjson.JSONObject; +import com.alibaba.fastjson.parser.Feature; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.extern.slf4j.Slf4j; +import org.apache.commons.lang3.StringUtils; +import org.apache.shiro.SecurityUtils; +import org.jeecg.common.api.vo.Result; +import org.jeecg.common.constant.CommonConstant; +import org.jeecg.common.system.base.controller.JeecgController; +import org.jeecg.common.system.vo.LoginUser; +import org.jeecg.common.util.TranslateDictTextUtils; +import org.jeecg.common.util.oConvertUtils; +import org.jeecg.modules.eam.dto.EamEquipmentDto; +import org.jeecg.modules.eam.entity.EamEquipment; +import org.jeecg.modules.eam.entity.EamEquipmentExtend; +import org.jeecg.modules.eam.request.EamEquipmentQuery; +import org.jeecg.modules.eam.service.IEamEquipmentExtendService; +import org.jeecg.modules.eam.service.IEamEquipmentService; +import org.jeecg.modules.eam.vo.EamEquipmentTree; +import org.jeecg.modules.eam.vo.EquipmentSearchResult; +import org.jeecg.modules.system.entity.BaseFactory; +import org.jeecg.modules.system.entity.EamBaseRepairDepart; +import org.jeecg.modules.system.service.IBaseFactoryService; +import org.jeecg.modules.system.service.IEamBaseRepairDepartService; +import org.jeecgframework.poi.excel.ExcelImportUtil; +import org.jeecgframework.poi.excel.def.NormalExcelConstants; +import org.jeecgframework.poi.excel.entity.ExportParams; +import org.jeecgframework.poi.excel.entity.ImportParams; +import org.jeecgframework.poi.excel.view.JeecgEntityExcelView; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; +import org.springframework.web.multipart.MultipartHttpServletRequest; +import org.springframework.web.servlet.ModelAndView; +import org.apache.commons.lang3.time.DateUtils; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.text.ParseException; +import java.util.*; +import java.util.function.Consumer; +import java.util.stream.Collectors; +import java.time.LocalDate; +import java.time.ZoneId; + +/** + * @Description: 璁惧鍙拌处 + * @Author: jeecg-boot + * @Date: 2025-03-19 + * @Version: V1.0 + */ +@Slf4j +@Api(tags = "璁惧鍙拌处") +@RestController +@RequestMapping("/eam/equipment") +public class EamEquipmentController extends JeecgController<EamEquipment, IEamEquipmentService> { + @Autowired + private IEamEquipmentService eamEquipmentService; + + @Autowired + private IEamEquipmentExtendService eamEquipmentExtendService; + +// @Autowired +// private IMdcEquipmentService mdcEquipmentService; + + @Autowired + private ObjectMapper objectMapper; + @Autowired + private TranslateDictTextUtils translateDictTextUtils; + @Autowired + private IBaseFactoryService baseFactoryService; + @Autowired + private IEamBaseRepairDepartService eamBaseRepairDepartService; + /** + * 鍒嗛〉鍒楄〃鏌ヨ + * + * @param eamEquipment + * @param pageNo + * @param pageSize + * @return + */ +// @AutoLog(value = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ") + @ApiOperation(value = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ", notes = "璁惧鍙拌处-鍒嗛〉鍒楄〃鏌ヨ") + @GetMapping(value = "/list") + public Result<?> queryPageList(EamEquipmentQuery eamEquipment, + @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, + @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { +// QueryWrapper<EamEquipment> queryWrapper = QueryGenerator.initQueryWrapper(eamEquipment, req.getParameterMap()); + IPage<EamEquipment> page = new Page<>(pageNo, pageSize); + IPage<EamEquipment> pageList = eamEquipmentService.queryPageList(page, eamEquipment); + return Result.OK(pageList); + } + + /** + * 娣诲姞 + * + * @param eamEquipment + * @return + */ +// @AutoLog(value = "璁惧鍙拌处-娣诲姞") + @ApiOperation(value = "璁惧鍙拌处-娣诲姞", notes = "璁惧鍙拌处-娣诲姞") + @PostMapping(value = "/add") + public Result<?> add(@RequestBody EamEquipment eamEquipment) { + EamEquipment entity = eamEquipmentService.saveEquipment(eamEquipment); + if (entity == null) { + return Result.OK("娣诲姞澶辫触锛�"); + } + //璋冪敤mdcEquipment鎻掑叆MDC璁惧 +// if (CommonConstant.DEFAULT_1.equals(eamEquipment.getMdcFlag())) { + //鎻掑叆MDC璁惧 +// MdcEquipment mdcEquipment = new MdcEquipment(); +// mdcEquipment.setEquipmentId(entity.getEquipmentCode()); +// mdcEquipment.setEquipmentType(entity.getDeviceType()); +// mdcEquipment.setEquipmentName(entity.getEquipmentName()); +// mdcEquipmentService.addNewEquipmentFromEam(mdcEquipment, eamEquipment.getOrgId()); +// } + return Result.OK("娣诲姞鎴愬姛锛�"); + } + + /** + * 缂栬緫 + * + * @param eamEquipment + * @return + */ + @ApiOperation(value = "璁惧鍙拌处-缂栬緫", notes = "璁惧鍙拌处-缂栬緫") + @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST}) + public Result<?> edit(@RequestBody EamEquipment eamEquipment) { + eamEquipmentService.updateEquipment(eamEquipment); + return Result.OK("缂栬緫鎴愬姛!"); + } + + /** + * 閫氳繃id鍒犻櫎 + * + * @param id + * @return + */ + @ApiOperation(value = "璁惧鍙拌处-閫氳繃id鍒犻櫎", notes = "璁惧鍙拌处-閫氳繃id鍒犻櫎") + @DeleteMapping(value = "/delete") + public Result<?> delete(@RequestParam(name = "id", required = true) String id) { + EamEquipment entity = eamEquipmentService.getById(id); + if (entity != null) { + entity.setDelFlag(CommonConstant.DEL_FLAG_1); + eamEquipmentService.updateById(entity); + } + return Result.OK("鍒犻櫎鎴愬姛!"); + } + + /** + * 鎵归噺鍒犻櫎 + * + * @param ids + * @return + */ + @ApiOperation(value = "璁惧鍙拌处-鎵归噺鍒犻櫎", notes = "璁惧鍙拌处-鎵归噺鍒犻櫎") + @DeleteMapping(value = "/deleteBatch") + public Result<?> deleteBatch(@RequestParam(name = "ids", required = true) String ids) { + List<String> list = Arrays.asList(ids.split(",")); + list.forEach(id -> { + EamEquipment entity = eamEquipmentService.getById(id); + if (entity != null) { + entity.setDelFlag(CommonConstant.DEL_FLAG_1); + eamEquipmentService.updateById(entity); + } + }); + return Result.OK("鎵归噺鍒犻櫎鎴愬姛锛�"); + } + + /** + * 閫氳繃id鏌ヨ + * + * @param id + * @return + */ + @ApiOperation(value = "璁惧鍙拌处-閫氳繃id鏌ヨ", notes = "璁惧鍙拌处-閫氳繃id鏌ヨ") + @GetMapping(value = "/queryById") + public Result<?> queryById(@RequestParam(name = "id", required = true) String id) { + EamEquipment eamEquipment = eamEquipmentService.getById(id); + if (eamEquipment == null) { + return Result.error("鏈壘鍒板搴旀暟鎹�"); + } + EamEquipmentExtend extend = eamEquipmentExtendService.getById(id); + if(extend != null){ + eamEquipment.setRepairStatus(extend.getRepairStatus()); + eamEquipment.setMaintenanceStatus(extend.getMaintenanceStatus()); + } + try { + String json = objectMapper.writeValueAsString(eamEquipment); + JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); + translateDictTextUtils.translateField("createBy", eamEquipment.getCreateBy(), item, "sys_user,realname,username"); + translateDictTextUtils.translateField("updateBy", eamEquipment.getUpdateBy(), item, "sys_user,realname,username"); +// translateDictTextUtils.translateField("technologyStatus", eamEquipment.getTechnologyStatus(), item, "technology_status"); +// translateDictTextUtils.translateField("orgId", eamEquipment.getOrgId(), item, "mdc_production,production_name,id"); +// translateDictTextUtils.translateField("equipmentManager", eamEquipment.getEquipmentManager(), item, "sys_user,realname,username"); + translateDictTextUtils.translateField("equipmentCategory", eamEquipment.getEquipmentCategory(), item, "equipment_category"); + translateDictTextUtils.translateField("assetStatus", eamEquipment.getAssetStatus(), item, "asset_status"); + translateDictTextUtils.translateField("repairStatus", eamEquipment.getRepairStatus(), item, "equipment_repair_status"); + translateDictTextUtils.translateField("maintenanceStatus", eamEquipment.getMaintenanceStatus(), item, "equipment_maintenance_status"); + return Result.OK(item); + } catch (JsonProcessingException e) { + return Result.error("鏁版嵁杞瘧澶辫触锛�"); + } + } + + /** + * 瀵煎嚭excel + * @param eamEquipment + */ + @RequestMapping(value = "/exportXls") + public ModelAndView exportXls(HttpServletRequest request,EamEquipmentQuery eamEquipment) { + LoginUser sysUser = (LoginUser) SecurityUtils.getSubject().getPrincipal(); + List<EamEquipment> equipmentList=eamEquipmentService.exportList(eamEquipment); + List<EamEquipmentDto> eamEquipmentDtos=new ArrayList<>(); + String selections = request.getParameter("selections"); + if (oConvertUtils.isNotEmpty(selections)) { + List<String> selectionList = Arrays.asList(selections.split(",")); + equipmentList = equipmentList.stream().filter(item -> selectionList.contains(item.getId())).collect(Collectors.toList()); + } + equipmentList.forEach(item -> { + EamEquipmentDto eamEquipmentDto = new EamEquipmentDto(); + BeanUtils.copyProperties(item,eamEquipmentDto); + if (eamEquipmentDto.getFactoryOrgCode().length()==12){ + eamEquipmentDto.setFactoryOrgCode( + baseFactoryService.factoryDataNameByOrgCode(eamEquipmentDto.getZxfactoryOrgCode()) + +"/"+baseFactoryService.factoryDataNameByOrgCode(eamEquipmentDto.getGqfactoryOrgCode())+"/"+ + baseFactoryService.factoryDataNameByOrgCode(eamEquipmentDto.getFactoryOrgCode())); + }else { + eamEquipmentDto.setFactoryOrgCode( + baseFactoryService.factoryDataNameByOrgCode(eamEquipmentDto.getZxfactoryOrgCode()) + +"/"+ baseFactoryService.factoryDataNameByOrgCode(eamEquipmentDto.getFactoryOrgCode())); + } + if (eamEquipmentDto.getEquipmentWeight()!=null){ + eamEquipmentDto.setEquipmentWeightStr(eamEquipmentDto.getEquipmentWeight().toEngineeringString()); + } + eamEquipmentDtos.add(eamEquipmentDto); + }); + // Step.3 AutoPoi 瀵煎嚭Excel + ModelAndView mv = new ModelAndView(new JeecgEntityExcelView()); + mv.addObject(NormalExcelConstants.FILE_NAME, "璁惧鍙拌处"); //姝ゅ璁剧疆鐨刦ilename鏃犳晥 ,鍓嶇浼氶噸鏇存柊璁剧疆涓�涓� + mv.addObject(NormalExcelConstants.CLASS, EamEquipmentDto.class); + mv.addObject(NormalExcelConstants.PARAMS, new ExportParams("璁惧鍙拌处" + "鎶ヨ〃", "瀵煎嚭浜�:" + sysUser.getRealname(), "璁惧鍙拌处")); + mv.addObject(NormalExcelConstants.DATA_LIST, eamEquipmentDtos); + return mv; + + } + + /** + * 閫氳繃excel瀵煎叆鏁版嵁 + * + * @param request + * @param response + * @return + */ + @RequestMapping(value = "/importExcel", method = RequestMethod.POST) + public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) { + MultipartHttpServletRequest multipartRequest = (MultipartHttpServletRequest) request; + Map<String, MultipartFile> fileMap = multipartRequest.getFileMap(); + for (Map.Entry<String, MultipartFile> entity : fileMap.entrySet()) { + // 鑾峰彇涓婁紶鏂囦欢瀵硅薄 + MultipartFile file = entity.getValue(); + ImportParams params = new ImportParams(); + params.setTitleRows(2); + params.setHeadRows(1); + params.setNeedSave(true); + params.setStartSheetIndex(0); + params.setSheetNum(1); + try { + List<EamEquipment> list = ExcelImportUtil.importExcel(file.getInputStream(), EamEquipment.class, params); + //update-begin-author:taoyan date:20190528 for:鎵归噺鎻掑叆鏁版嵁 + long start = System.currentTimeMillis(); +// service.saveBatch(list); + StringBuilder sb = new StringBuilder(); + for (EamEquipment eamEquipment : list) { + //蹇呭~瀛楁鏍¢獙 + if (StringUtils.isBlank(eamEquipment.getEquipmentCode()) || StringUtils.isBlank(eamEquipment.getEquipmentName())) { + sb.append(String.format("璁惧缂栫爜[%s]鎴栬澶囧悕绉癧%s]涓虹┖锛屾棤娉曞鍏n\n", eamEquipment.getEquipmentCode(), eamEquipment.getEquipmentName())); + continue; + } + if (StringUtils.isBlank(eamEquipment.getEquipmentCategory())) { + sb.append(String.format("璁惧缂栫爜[%s]璁惧鍒嗙被涓虹┖锛屾棤娉曞鍏n\n", eamEquipment.getEquipmentCode())); + continue; + } + EamEquipment one = eamEquipmentService.getOne(new LambdaQueryWrapper<EamEquipment>().eq(EamEquipment::getEquipmentCode, eamEquipment.getEquipmentCode()).eq(EamEquipment::getDelFlag, CommonConstant.DEL_FLAG_0)); + if (one != null) { + sb.append(String.format("璁惧缂栫爜[%s]宸插瓨鍦紝鏃犳硶閲嶅瀵煎叆\n\r", eamEquipment.getEquipmentCode())); + continue; + } + BaseFactory baseFactory=baseFactoryService.searchCenterByKeyWord(eamEquipment.getFactoryOrgCode()); + if(baseFactory==null){ + sb.append(String.format("EAM涓績淇℃伅[%s]涓嶅瓨鍦紝鏃犳硶瀵煎叆\n\r", eamEquipment.getFactoryOrgCode())); + continue; + }else { + eamEquipment.setFactoryOrgCode(baseFactory.getOrgCode()); + } + EamBaseRepairDepart eamBaseRepairDepart=eamBaseRepairDepartService.searchCenterByKeyWord(eamEquipment.getRepairDepartOrgCode()); + if(eamBaseRepairDepart==null){ + sb.append(String.format("缁翠慨鐝粍淇℃伅[%s]涓嶅瓨鍦紝鏃犳硶瀵煎叆\n\r", eamEquipment.getRepairDepartOrgCode())); + continue; + }else { + eamEquipment.setRepairDepartOrgCode(eamBaseRepairDepart.getOrgCode()); + } + // 瀛楁鏍¢獙涓庡~鍏� + if (StringUtils.isNotBlank(eamEquipment.getLeaveFactory())) { + String leaveFactoryStr = eamEquipment.getLeaveFactory(); + try { + // 瀹氫箟鏀寔瑙f瀽鐨勬棩鏈熸牸寮� + String[] parsePatterns = { + "yyyy/MM/dd", "yyyy-MM-dd", "yyyyMMdd" + }; + // 鏍煎紡1: 鍖呭惈鍒嗛殧绗︾殑鏃ユ湡鏍煎紡 (濡�2025/07/30, 2025-07-30绛�) + if (leaveFactoryStr.contains("/") || leaveFactoryStr.contains("-") || + (leaveFactoryStr.length() == 8 && leaveFactoryStr.matches("\\d{8}"))) { + + // 浣跨敤鎸囧畾鐨勬牸寮忔暟缁勮В鏋愭棩鏈� + Date leaveFactoryDate = DateUtils.parseDate(leaveFactoryStr, parsePatterns); + eamEquipment.setLeaveFactoryDate(leaveFactoryDate); + } else { + log.warn("绂诲紑宸ュ巶鏃ユ湡鏍煎紡鏃犳晥: {}", leaveFactoryStr); + } + } catch (ParseException e) { + log.error("鏃ユ湡瑙f瀽澶辫触: {}", leaveFactoryStr, e); + } + } + // 璁$畻涓変繚鏃ユ湡 + if (eamEquipment.getNextThirdMaintenance() != null && + eamEquipment.getThirdMaintenancePeriod() != null) { + + calculateMaintenanceDates( + eamEquipment.getNextThirdMaintenance(), + eamEquipment.getThirdMaintenancePeriod(), + newDate -> eamEquipment.setNextThirdMaintenance(newDate), + latestDate -> eamEquipment.setLatestThirdMaintenance(latestDate) + ); + } + + // 璁$畻鎶�鏈姸鎬侀壌瀹氭棩鏈� + if (eamEquipment.getNextTechnologyCheck() != null && + eamEquipment.getTechnologyCheckPeriod() != null) { + + calculateMaintenanceDates( + eamEquipment.getNextTechnologyCheck(), + eamEquipment.getTechnologyCheckPeriod(), + newDate -> eamEquipment.setNextTechnologyCheck(newDate), + latestDate -> eamEquipment.setLatestTechnologyCheck(latestDate) + ); + } + EamEquipment equipment = eamEquipmentService.saveEquipment(eamEquipment); + if (equipment == null) { + //淇濆瓨澶辫触锛岃烦杩囨湰娆″惊鐜� + sb.append(String.format("璁惧缂栫爜[%s]淇濆瓨澶辫触锛屾棤娉曞鍏n\r", eamEquipment.getEquipmentCode())); + continue; + } + EamEquipmentExtend eamEquipmentExtend=new EamEquipmentExtend(); + BeanUtils.copyProperties(eamEquipmentExtend,equipment); + eamEquipmentExtendService.save(eamEquipmentExtend); + } + log.info("娑堣�楁椂闂�" + (System.currentTimeMillis() - start) + "姣"); + //update-end-author:taoyan date:20190528 for:鎵归噺鎻掑叆鏁版嵁 + if (sb.length() > 0) { + return Result.ok(sb.toString()); + } + return Result.ok("鏂囦欢瀵煎叆鎴愬姛锛佹暟鎹鏁帮細" + list.size()); + } catch (Exception e) { + //update-begin-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず + String msg = e.getMessage(); + log.error(msg, e); + if (msg != null && msg.indexOf("Duplicate entry") >= 0) { + return Result.error("鏂囦欢瀵煎叆澶辫触:鏈夐噸澶嶆暟鎹紒"); + } else { + return Result.error("鏂囦欢瀵煎叆澶辫触:" + e.getMessage()); + } + //update-end-author:taoyan date:20211124 for: 瀵煎叆鏁版嵁閲嶅澧炲姞鎻愮ず + } finally { + try { + file.getInputStream().close(); + } catch (IOException e) { + e.printStackTrace(); + } + } + } + return Result.error("鏂囦欢瀵煎叆澶辫触锛�"); + } + + @ApiOperation(value = "璁惧琛�-閫氳繃杞﹂棿ids鑾峰彇璁惧鏍�", notes = "璁惧琛�-閫氳繃杞﹂棿ids鑾峰彇璁惧鏍�") + @GetMapping(value = "/loadTreeListByProductionIds") + public Result<List<EamEquipmentTree>> loadTreeListByProductionIds(@RequestParam(name = "ids", required = true) String ids) { + Result<List<EamEquipmentTree>> result = new Result<>(); + try { + List<EamEquipmentTree> mdcEquipmentTreeList = eamEquipmentService.loadTreeListByProductionIds(ids); + result.setSuccess(true); + result.setResult(mdcEquipmentTreeList); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + @ApiOperation(value = "璁惧琛�-閫氳繃EAM涓績ids鑾峰彇璁惧鏍�", notes = "璁惧琛�-閫氳繃EAM涓績ids鑾峰彇璁惧鏍�") + @GetMapping(value = "/loadTreeListByEamCenterIds") + public Result<List<EamEquipmentTree>> loadTreeListByEamCenterIds(@RequestParam(name = "ids", required = true) String ids) { + Result<List<EamEquipmentTree>> result = new Result<>(); + try { + List<EamEquipmentTree> mdcEquipmentTreeList = eamEquipmentService.loadTreeListByEamCenterIds(ids); + result.setSuccess(true); + result.setResult(mdcEquipmentTreeList); + } catch (Exception e) { + log.error(e.getMessage(), e); + } + return result; + } + + /** + * 妫�绱㈣澶� + * @param keyword 鏌ヨ鍏抽敭璇� 璁惧缂栧彿锛岃澶囧悕绉版ā绯婂尮閰� + * @param pageSize 涓�娆¤繑鍥炲灏戣褰� + * @param id 璁惧涓婚敭 + * @return + */ + @ApiOperation(value = "璁惧琛�-寮傛鍔犺浇璁惧鍒楄〃", notes = "璁惧琛�-寮傛鍔犺浇璁惧鍒楄〃") + @GetMapping(value = "/asyncLoadEquipment") + public Result<?> asyncLoadEquipment(@RequestParam(name="keyword",required = false) String keyword, + @RequestParam(value = "pageSize", required = false, defaultValue = "20") Integer pageSize, + @RequestParam(name="id",required = false) String id, + @RequestParam(name="factoryOrgCode",required = false) String factoryOrgCode) { + List<EquipmentSearchResult> resultList = eamEquipmentService.asyncLoadEquipment(keyword, pageSize, id, factoryOrgCode); + List<JSONObject> items = new ArrayList<>(); + try { + for(EquipmentSearchResult vo : resultList) { + String json = objectMapper.writeValueAsString(vo); + JSONObject item = JSONObject.parseObject(json, Feature.OrderedField); + translateDictTextUtils.translateField("factoryOrgCode", vo.getFactoryOrgCode(), item, "eam_base_factory,factory_name,org_code"); + items.add(item); + } + return Result.OK(items); + }catch (Exception e) { + return Result.error("鏁版嵁杞瘧澶辫触锛�"); + } + } + + // 鏃ユ湡璁$畻宸ュ叿鏂规硶 + private void calculateMaintenanceDates(Date nextDate, Integer periodYears, + Consumer<Date> setNextMaintenance, + Consumer<Date> setLatestMaintenance) { + if (nextDate == null || periodYears == null || periodYears <= 0) { + return; + } + + // 杞崲涓篔ava 8鏃ユ湡绫诲瀷 + LocalDate nextLocal = nextDate.toInstant().atZone(ZoneId.systemDefault()).toLocalDate(); + LocalDate today = LocalDate.now(); + + // 纭繚鏈夋晥鐨勮绠楀懆鏈� + int period = Math.max(1, periodYears); // 闃叉浼犲叆0鎴栬礋鍊� + + if (nextLocal.isAfter(today)) { + // 鏈繃鏈燂細璁$畻鏈�杩戠淮鎶ゆ棩鏈� + setLatestMaintenance.accept( + Date.from(nextLocal.minusYears(period).atStartOfDay() + .atZone(ZoneId.systemDefault()).toInstant()) + ); + } else { + // 宸茶繃鏈燂細璁$畻鏂扮殑涓嬫缁存姢鏃ユ湡 + while (!nextLocal.isAfter(today)) { + nextLocal = nextLocal.plusYears(period); + } + + // 璁剧疆鏂版棩鏈� + setNextMaintenance.accept( + Date.from(nextLocal.atStartOfDay() + .atZone(ZoneId.systemDefault()).toInstant()) + ); + + // 璁$畻鏈�杩戠淮鎶ゆ棩鏈� + setLatestMaintenance.accept( + Date.from(nextLocal.minusYears(period).atStartOfDay() + .atZone(ZoneId.systemDefault()).toInstant()) + ); + } + } + +} -- Gitblit v1.9.3