lxzn-boot-base-core/src/main/java/org/jeecg/common/constant/CommonConstant.java
@@ -598,6 +598,11 @@ String DICT_MDC_STAFF_TEAM = "mdc_staff_team"; /** * 驱å¨åæ°åä½åå ¸ç¼å· */ String DICT_EQUIPMENT_RUN_UNIT = "equipment_run_unit"; /** * å çæ°æ® èªå¨è®¡ç®æ è¯ 1(æ¯) 2(å¦) */ Integer AUTO_FLAG_Y = 1; @@ -612,8 +617,11 @@ */ String CLOSE_TYPE_0 = "0"; String CLOSE_TYPE_1 = "1"; String ORG_TYPE = "3"; /** * 产线类å 1ä¸çº§é¨é¨ 2åé¨é¨ 3åé¨é¨ */ String ORG_TYPE_2 = "2"; String ORG_TYPE_3 = "3"; Integer SHIFT_TYPE_1 = 1; Integer SHIFT_TYPE_2 = 2; lxzn-boot-base-core/src/main/java/org/jeecg/config/filter/WebsocketFilter.java
@@ -14,6 +14,7 @@ /** * websocket å端å°tokenæ¾å°ååè®®éä¼ å ¥ ä¸å端建ç«è¿æ¥æ¶éè¦ç¨å°httpåè®®ï¼æ¤å¤ç¨äºæ ¡éªtokençæææ§ * * @Author taoYan * @Date 2022/4/21 17:01 **/ @@ -34,20 +35,22 @@ if (redisUtil == null) { redisUtil = SpringContextUtils.getBean(RedisUtil.class); } HttpServletRequest request = (HttpServletRequest)servletRequest; String token = request.getHeader(TOKEN_KEY); HttpServletRequest request = (HttpServletRequest) servletRequest; if (request.getHeader(TOKEN_KEY) != null) { String token = request.getHeader(TOKEN_KEY); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªï¼Path = {}ï¼token:{}", request.getRequestURI(), token); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªï¼Path = {}ï¼token:{}", request.getRequestURI(), token); try { TokenUtils.verifyToken(token, commonApi, redisUtil); } catch (Exception exception) { //log.error("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); return; try { TokenUtils.verifyToken(token, commonApi, redisUtil); } catch (Exception exception) { //log.error("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); log.debug("Websocketè¿æ¥ Tokenå®å ¨æ ¡éªå¤±è´¥ï¼IP:{}, Token:{}, Path = {}ï¼å¼å¸¸ï¼{}", oConvertUtils.getIpAddrByRequest(request), token, request.getRequestURI(), exception.getMessage()); return; } HttpServletResponse response = (HttpServletResponse) servletResponse; response.setHeader(TOKEN_KEY, token); } HttpServletResponse response = (HttpServletResponse)servletResponse; response.setHeader(TOKEN_KEY, token); filterChain.doFilter(servletRequest, servletResponse); } lxzn-boot-base-core/src/main/java/org/jeecg/config/shiro/ShiroConfig.java
@@ -99,6 +99,7 @@ filterChainDefinitionMap.put("/sys/getQrcodeToken/**", "anon"); //ç嬿«ç filterChainDefinitionMap.put("/sys/checkAuth", "anon"); //æææ¥å£æé¤ filterChainDefinitionMap.put("/msi/**", "anon"); //éææ¥å£ filterChainDefinitionMap.put("/board/dtBoard/**", "anon"); //æ°ååªççæ¿æ¥å£æé¤ filterChainDefinitionMap.put("/", "anon"); filterChainDefinitionMap.put("/doc.html", "anon"); lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/controller/DocRelativeController.java
@@ -5,7 +5,6 @@ import lombok.extern.slf4j.Slf4j; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.modules.dnc.entity.DeviceInfo; import org.jeecg.modules.dnc.entity.DocRelative; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.response.QueryListResponseResult; @@ -30,7 +29,7 @@ @ApiOperation(value = "设å¤å ³èææ¡£è¡¨-å é¤è®¾å¤ä¸çææ¡£æ¥å£", notes = "设å¤å ³èææ¡£è¡¨-å é¤è®¾å¤ä¸çææ¡£æ¥å£") @DeleteMapping("/delete/device/{docId}/{deviceId}") public ResponseResult deleteDocByDeviceId(@PathVariable("docId") String docId, @PathVariable("deviceId") String deviceId) { boolean b = relativeService.deleteDocByAttr(docId, 4, deviceId); boolean b = relativeService.deleteDocByAttr(docId, 7, deviceId); if(b) return new ResponseResult(CommonCode.SUCCESS); return new ResponseResult(CommonCode.FAIL); lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/DirectoryValidator.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,22 @@ package org.jeecg.modules.dnc.listener; import java.io.File; import java.util.List; public class DirectoryValidator { public static void validatePaths(List<String> paths) { //æ ¹æ®é ç½®çç®å½è¿è¡æ ¡éªï¼å¯ä»¥ä¿®æ¹ymlæä»¶å¯¹åºççæ§ç®å½æ¥æ¹åæ ¡éªæ°é if (paths == null || paths.size() < 3) { throw new IllegalArgumentException("å¿ é¡»é ç½®ä¸ä¸ªçæ§ç®å½"); } for (String path : paths) { File dir = new File(path); if (!dir.exists() || !dir.isDirectory()) { throw new IllegalArgumentException("æ æççæ§ç®å½: " + path); } if (!dir.canRead()) { throw new SecurityException("ç®å½ä¸å¯è¯»: " + path); } } } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileListener.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,115 @@ package org.jeecg.modules.dnc.listener; import org.apache.commons.io.monitor.FileAlterationListener; import org.apache.commons.io.monitor.FileAlterationObserver; import org.jeecg.common.util.FileUtil; import org.jeecg.modules.dnc.service.IDocInfoService; import org.jeecg.modules.dnc.utils.file.FileUtilS; import org.jeecg.modules.message.enums.DeployEnum; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Component; import java.io.File; import java.util.Objects; @Component public class FileListener implements FileAlterationListener { private static final Logger log = LoggerFactory.getLogger(FileListener.class); @Value("${deploy.deployType}") private String deployType; //å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为工æ§ç½ 1为æ¶å¯ç½ @Autowired private IDocInfoService docInfoService; // ææ¡£æå¡ @Override public void onStart(FileAlterationObserver observer) { log.info("å¼å§çå¬ç®å½: {}", observer.getDirectory().getAbsolutePath()); } @Override public void onDirectoryCreate(File directory) { log.info("[ç®å½å建]: {}", directory.getAbsolutePath()); } @Override public void onDirectoryChange(File directory) { log.info("[ç®å½ä¿®æ¹]: {}", directory.getAbsolutePath()); } @Override public void onDirectoryDelete(File directory) { log.info("[ç®å½å é¤]: {}", directory.getAbsolutePath()); } @Override public void onFileCreate(File file) { String filePath = file.getAbsolutePath(); log.info("[æ°å»º]: {}", filePath); if (DeployEnum.GW.getCode().equals(deployType)) { //å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ if (filePath.startsWith("D:\\hy_test\\ncFile")) { handleIndustrialDocFile(file); } }else { //æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æï¼ç¨åºåä¼ ï¼ if (filePath.startsWith("D:\\hy_test\\ncFile")) { handleSecretDocFile(file); } } } @Override public void onFileChange(File file) { log.info("[ä¿®æ¹]: {}", file.getAbsolutePath()); } @Override public void onFileDelete(File file) { log.info("[å é¤]: {}", file.getAbsolutePath()); } @Override public void onStop(FileAlterationObserver observer) { log.info("ç»æçå¬ç®å½: {}", observer.getDirectory().getAbsolutePath()); } /** * å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ * @param file */ private void handleIndustrialDocFile(File file) { log.info("å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", file.getAbsolutePath()); try { if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "nc")) { boolean success = docInfoService.addDocInfoAnalysisGwNcService(file.getAbsolutePath(), file); if (success) { FileUtilS.copyFileRec(file.getAbsolutePath()); FileUtilS.fileRecDelete(file.getAbsolutePath()); } }else if (Objects.equals(FileUtil.getFileSuffix(file.getName()), "txt")) { //todo æ¯å¦è§£æå·¥ä½æµæä½ } } catch (Exception e) { log.error("å·¥æ§ç½è§£ææ¶å¯ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", e.getMessage()); } } /** * æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æï¼ç¨åºåä¼ ï¼ * @param file */ private void handleSecretDocFile(File file) { log.info("æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", file.getAbsolutePath()); try { boolean b= docInfoService.addDocInfoAnalysisSmwNcService(file.getAbsolutePath(), file); }catch (Exception e) { log.error("æ¶å¯ç½è§£æå·¥æ§ç½ä¼ è¿æ¥çNCæä»¶ä¸ncæä»¶è¿è¡è§£æ: {}", e.getMessage()); } } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorBootstrap.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,53 @@ package org.jeecg.modules.dnc.listener; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.ApplicationArguments; import org.springframework.boot.ApplicationRunner; import org.springframework.boot.web.servlet.ServletContextInitializer; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @Configuration public class FileMonitorBootstrap implements ApplicationRunner { private MultiPathMonitor monitor; @Autowired private FileMonitorConfig config; @Autowired private FileListener listener; @Bean public MultiPathMonitor fileMonitor() { return new MultiPathMonitor( config.getPaths(), config.getInterval(), listener ); } @Override public void run(ApplicationArguments args) throws Exception { monitor = fileMonitor(); monitor.start(); } // å¨åºç¨å ³éæ¶åæ¢çæ§ @Bean public ServletContextInitializer stopMonitorOnShutdown() { return servletContext -> { servletContext.addListener(new javax.servlet.ServletContextListener() { @Override public void contextDestroyed(javax.servlet.ServletContextEvent sce) { try { if (monitor != null) { monitor.stop(); } } catch (Exception e) { System.err.println("åæ¢çæ§æ¶åºé: " + e.getMessage()); } } }); }; } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/FileMonitorConfig.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,19 @@ package org.jeecg.modules.dnc.listener; import lombok.Getter; import lombok.Setter; import org.springframework.boot.context.properties.ConfigurationProperties; import org.springframework.stereotype.Component; import java.util.ArrayList; import java.util.List; @Setter @Getter @Component @ConfigurationProperties(prefix = "file.monitor") public class FileMonitorConfig { private List<String> paths = new ArrayList<>(); private long interval = 10000L; // é»è®¤10ç§ } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/listener/MultiPathMonitor.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,66 @@ package org.jeecg.modules.dnc.listener; import org.apache.commons.io.monitor.FileAlterationMonitor; import org.apache.commons.io.monitor.FileAlterationObserver; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.io.File; import java.util.List; public class MultiPathMonitor { private static final Logger log = LoggerFactory.getLogger(MultiPathMonitor.class); private final List<String> paths; private final FileListener listener; private final long interval; private final FileAlterationMonitor monitor; public MultiPathMonitor(List<String> paths, long interval, FileListener listener) { // éªè¯ç®å½ DirectoryValidator.validatePaths(paths); this.paths = paths; this.interval = interval; this.listener = listener; this.monitor = new FileAlterationMonitor(interval); } public void start() { // 为æ¯ä¸ªè·¯å¾å建ç¬ç«çè§å¯è paths.forEach(path -> { FileAlterationObserver observer = new FileAlterationObserver(new File(path)); observer.addListener(listener); monitor.addObserver(observer); log.info("å¼å§çæ§ç®å½: {}", path); }); try { monitor.start(); log.info("æä»¶çæ§å¨å·²å¯å¨ï¼çæ§ç®å½æ°é: {}", paths.size()); } catch (Exception e) { log.error("çæ§å¯å¨å¤±è´¥", e); throw new RuntimeException("çæ§å¯å¨å¤±è´¥", e); } } public void stop() throws Exception { if (monitor != null) { monitor.stop(); log.info("æä»¶çæ§å¨å·²åæ¢"); } } // å¨ææ·»å æ°ç®å½ public void addMonitorPath(String newPath) { File dir = new File(newPath); if (!dir.exists() || !dir.isDirectory() || !dir.canRead()) { log.error("æ æ³æ·»å æ æç®å½: {}", newPath); return; } FileAlterationObserver newObserver = new FileAlterationObserver(dir); newObserver.addListener(listener); monitor.addObserver(newObserver); paths.add(newPath); log.info("æ°å¢çæ§ç®å½: {}", newPath); } } lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/mapper/xml/DocInfoMapper.xml
@@ -66,6 +66,7 @@ ,u.doc_status ,u.publish_file_id ,u.publish_version ,u.doc_dispatch_status ,u.description ,u.CREATE_TIME ,u.create_by lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/IDocInfoService.java
@@ -14,6 +14,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileNotFoundException; import java.util.List; public interface IDocInfoService extends IService<DocInfo> { @@ -47,6 +48,28 @@ */ boolean addDocInfoRec(String pathFile,File fileRec); /** * è§£æNCææ¡£éç¨æ¹æ³ï¼å·¥æ§è§£ææ¶å¯ï¼ * @param pathFile,fileRec * @return */ boolean addDocInfoAnalysisGwNcService(String pathFile,File fileRec) throws FileNotFoundException; /** * ç¨åºåä¼ ï¼æ¶å¯è§£æå·¥æ§ï¼ * @param pathFile */ boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec); /** * ææ¡£è§£æ * @param equipmentId * @param fileRec * @param fileNameSuffix * @param fileNameNew * @param filePath * @return */ boolean addDocInfoRecService(String equipmentId,File fileRec,String fileNameSuffix,String fileNameNew,String filePath ); /** * å ¥åºæä½ ææ¡£å¯¹åºæä»¶åç lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/CutterServiceImpl.java
@@ -182,7 +182,18 @@ List<Cutter> cutterList = extractToolAfterM6(docInfo,list); // ä¿ååå · if (!cutterList.isEmpty()) { this.saveBatch(cutterList); List<Cutter> newCutterList = new ArrayList<>(); //éªè¯åå ·æ¯å¦å·²ç»åå¨ cutterList.forEach(item -> { List<Cutter> otherCuttersWithSameNo = checkCutterNo(item); if (otherCuttersWithSameNo == null || otherCuttersWithSameNo.isEmpty()) { newCutterList.add(item); } }); if (newCutterList.isEmpty()) { return Result.error("æªåç°åå ·çåæ°ä¿¡æ¯æ³¨éï¼æ æ³æååå ·ä¿¡æ¯"); } this.saveBatch(newCutterList); //TODOåéåå ·ç®¡çæ°æ® return Result.OK("æååå ·ä¿¡æ¯æå"); }else { lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DeviceGroupServiceImpl.java
@@ -1,27 +1,21 @@ package org.jeecg.modules.dnc.service.impl; import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.shiro.SecurityUtils; import org.jeecg.common.system.vo.LoginUser; import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.dnc.dto.DeviceGroupExt; import org.jeecg.modules.dnc.entity.DeviceGroup; import org.jeecg.modules.dnc.entity.DeviceGroupPermission; import org.jeecg.modules.dnc.entity.DevicePermissionStream; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.mapper.DeviceGroupMapper; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.response.DeviceGroupCode; import org.jeecg.modules.dnc.response.UcenterCode; import org.jeecg.modules.dnc.service.*; import org.jeecg.modules.dnc.ucenter.Department; import org.jeecg.modules.dnc.service.IDeviceGroupPermissionService; import org.jeecg.modules.dnc.service.IDeviceGroupService; import org.jeecg.modules.dnc.service.IDevicePermissionStreamService; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.system.entity.SysUser; import org.jeecg.modules.dnc.utils.file.FileUtilS; import org.apache.commons.lang3.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Lazy; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -36,9 +30,6 @@ private IDeviceGroupPermissionService groupPermissionService; @Autowired private IDevicePermissionStreamService devicePermissionStreamService; @Autowired @Lazy private IDeviceInfoService deviceInfoService; // æ¥è¯¢æä»¥ç¶èç¹ lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocInfoServiceImpl.java
@@ -16,6 +16,8 @@ import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.dnc.entity.*; import org.jeecg.modules.dnc.exception.ExceptionCast; import org.jeecg.modules.dnc.ext.NcTxtFilePathInfo; import org.jeecg.modules.dnc.listener.FileMonitorConfig; import org.jeecg.modules.dnc.mapper.DocInfoMapper; import org.jeecg.modules.dnc.request.DocInfoQueryRequest; import org.jeecg.modules.dnc.request.DocInfoUploadRequest; @@ -27,7 +29,9 @@ import org.jeecg.modules.dncFlow.entity.DispatchFile; import org.jeecg.modules.dncFlow.service.IDispatchFileService; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.system.entity.SysParams; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysParamsService; import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; @@ -39,13 +43,22 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Scanner; import java.util.stream.Collectors; @Service public class DocInfoServiceImpl extends ServiceImpl<DocInfoMapper, DocInfo> implements IDocInfoService { @Autowired private FileMonitorConfig config; @Autowired private IMdcEquipmentService iMdcEquipmentService; @Autowired private IMdcProductionService iMdcProductionService; @Autowired private IDocClassificationService docClassificationService; @Autowired @@ -55,11 +68,6 @@ @Autowired @Lazy private IDocRelativeService docRelativeService; @Autowired @Lazy private IDeviceInfoService deviceInfoService; @Autowired private IDeviceGroupService deviceGroupService; @Autowired private IDispatchFileService dispatchFileService; @Autowired @@ -134,28 +142,28 @@ docInfo.setPublishVersion(docFile.getDocVersion()); docInfo.setPublishFileId(docFile.getFileId()); //COPY DeviceInfo deviceInfo= deviceInfoService.getById(uploadRequest.getAttributionId()); if (deviceInfo != null) { List<String> strings = deviceGroupService.findListParentTreeAll(deviceInfo.getGroupId()); MdcEquipment mdcEquipment= iMdcEquipmentService.getById(uploadRequest.getAttributionId()); if (mdcEquipment != null) { List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); boolean copyFileNc = false; if (strings != null && !strings.isEmpty()) { String path = org.apache.commons.lang3.StringUtils.join(strings.toArray(), "/"); copyFileNc = FileUtilS.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName(), path+ "/" + deviceInfo.getDeviceNo() ,fileNameAll); path+ "/" + mdcEquipment.getEquipmentId() ,fileNameAll); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { FileUtilS.deleteZipFromToSend(path + "/"+ deviceInfo.getDeviceNo(), FileUtilS.deleteZipFromToSend(path + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(),docFile.getFileSuffix()); } } else { copyFileNc =FileUtilS.copyFile(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName(), deviceInfo.getDeviceNo() ,fileNameAll); mdcEquipment.getEquipmentId() ,fileNameAll); if (!copyFileNc) { ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); } else { FileUtilS.deleteZipFromToSend(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName() + "/"+ deviceInfo.getDeviceNo(), FileUtilS.deleteZipFromToSend(fileUploadResult.getFilePath()+"/" + fileUploadResult.getFileEncodeName() + "/"+ mdcEquipment.getEquipmentId(), docFile.getFileName(),docFile.getFileSuffix()); } @@ -212,8 +220,8 @@ if (StringUtils.isEmpty(deviceNo)) { return false; } DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if (deviceInfo == null) { MdcEquipment mdcEquipment = iMdcEquipmentService.findEquipmentNameByEquipmentId(deviceNo); if (mdcEquipment == null) { return false; } String fileName = FileUtilS.getFilenameNonSuffix(file.getOriginalFilename()); @@ -222,7 +230,7 @@ if(fileUploadResult == null) { return false; } DocInfo en = findByAttrAndDocName(fileName, 4, deviceInfo.getDeviceId()); DocInfo en = findByAttrAndDocName(fileName, 7, mdcEquipment.getId()); if(en != null) { return false; } @@ -235,9 +243,9 @@ docInfo.setDocStatus(1); docInfo.setSyncStatus(2); DocRelative docRelative = new DocRelative(); docRelative.setAttributionId(deviceInfo.getDeviceId()); docRelative.setAttributionId(mdcEquipment.getId()); docRelative.setDocId(docInfo.getDocId()); docRelative.setAttributionType(4); docRelative.setAttributionType(7); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); if(!b) { @@ -260,6 +268,84 @@ return saveBool; } /** * è§£æNCææ¡£éç¨æ¹æ³ * @param pathFile,fileRec * @return */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoAnalysisGwNcService(String pathFile,File file) throws FileNotFoundException { String line; int count = 0; String loFilePath = config.getPaths().get(0)+"/" + file.getName(); FileInputStream fis = new FileInputStream(loFilePath); NcTxtFilePathInfo result = new NcTxtFilePathInfo(); Scanner sc = new Scanner(fis, "UTF-8"); while (count < 8 && sc.hasNext()) { line = sc.nextLine(); if (count ==0) { result.setFileTxtName(line.trim()); } else if (count ==1) { result.setFileNcName(line.trim()); }else if (count ==2) { result.setOrigFileName(line.trim()); }else if (count ==3) { result.setOrigFileSuffix(line.trim()); }else if (count ==4) { result.setFilePath(line.trim()); }else if (count ==5) { result.setEquipmentId(line.trim()); }else if (count ==6) { result.setFileAddOrDelete(Integer.valueOf(line.trim())); }else if (count == 7) { result.setFileSize(line.trim()); } count++; } sc.close(); if (result.getFileAddOrDelete() != null ) { if ( result.getFileAddOrDelete()==1) { String path = config.getPaths().get(0) +"/" + result.getFileNcName()+ ".NC"; if (org.apache.commons.lang3.StringUtils.isNotBlank(result.getFileNcName()) && result.getFileNcName().equals("null")) { //æä»¶å¾ å¤ç //å¤ä»½æ°æ® FileUtilS.deleteFileNewRec(loFilePath); } File ncFile = new File(path); //å·²ç»å卿件éè¦å¤ä»½ String size = String.valueOf(ncFile.length()); if (!size.equals(result.getFileSize())) { return false; } boolean bool = this.addDocInfoRecService(result.getEquipmentId(), ncFile,result.getOrigFileSuffix(), FileUtilS.getFilenameNonSuffix(result.getOrigFileName()) ,result.getFilePath()); if (bool) { FileUtilS.deleteFileNewRec(path); FileUtilS.deleteFileNewRec(loFilePath); }else { return false; } } } return true; } /** * ç¨åºåä¼ ï¼æ¶å¯è§£æå·¥æ§ï¼ * @param pathFile */ @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoAnalysisSmwNcService(String pathFile,File fileRec){ //todo ç¨åºåä¼ return true; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean addDocInfoRecService(String equipmentId,File fileRec,String fileNameSuffix,String fileNameNew,String filePath ) { @@ -272,12 +358,11 @@ ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); } //æ ¹æ®è®¾å¤ç¼å·æ¥è¯¢æ°æ® String deviceNo = equipmentId; if (StringUtils.isEmpty(deviceNo)) { if (StringUtils.isEmpty(equipmentId)) { return false; } DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if (deviceInfo == null) { MdcEquipment mdcEquipment = iMdcEquipmentService.findEquipmentNameByEquipmentId(equipmentId); if (mdcEquipment == null) { return false; } String fileName = FileUtilS.getFilenameNonSuffix(file.getOriginalFilename()); @@ -286,7 +371,7 @@ if(fileUploadResult == null) { return false; } DocInfo en = findByAttrAndDocName(fileName, 4, deviceInfo.getDeviceId()); DocInfo en = findByAttrAndDocName(fileName, 7, mdcEquipment.getId()); if(en != null) { return false; } @@ -299,9 +384,9 @@ docInfo.setDocStatus(1); docInfo.setSyncStatus(2); DocRelative docRelative = new DocRelative(); docRelative.setAttributionId(deviceInfo.getDeviceId()); docRelative.setAttributionId(mdcEquipment.getId()); docRelative.setDocId(docInfo.getDocId()); docRelative.setAttributionType(4); docRelative.setAttributionType(7); docRelative.setClassificationId(docClass.getClassificationId()); boolean b = docRelativeService.save(docRelative); if(!b) { @@ -678,7 +763,7 @@ public boolean deleteByDeviceId(String deviceId) { if(!ValidateUtil.validateString(deviceId)) ExceptionCast.cast(CommonCode.INVALID_PARAM); Integer attrType = 4; Integer attrType = 7; /*boolean b = docFileService.deleteByDocAttr(attrType, deviceId); if(!b) ExceptionCast.cast(CommonCode.FAIL); lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/DocRelativeServiceImpl.java
@@ -11,8 +11,6 @@ import org.jeecg.modules.dnc.mapper.DocInfoMapper; import org.jeecg.modules.dnc.mapper.DocRelativeMapper; import org.jeecg.modules.dnc.response.CommonCode; import org.jeecg.modules.dnc.service.IDeviceGroupService; import org.jeecg.modules.dnc.service.IDeviceInfoService; import org.jeecg.modules.dnc.service.IDocRelativeService; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.dnc.utils.date.DateUtil; @@ -31,12 +29,6 @@ @Autowired private DocInfoMapper docInfoMapper; @Autowired private IDeviceInfoService deviceInfoService; @Autowired private IDeviceGroupService deviceGroupService; // @Value("${securedoc.localFilePath}") // private String localFilePath; @Autowired private IMdcEquipmentService iMdcEquipmentService; @Autowired lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/GuideCardBatchServiceImpl.java
@@ -83,7 +83,7 @@ } // æ¼æ¥å®æ´ç¼å· return yearSuffix + code + user.getUsername() + serialSuffix; return yearSuffix+"-"+ code+"-"+ user.getUsername()+"-"+ serialSuffix; } /** lxzn-module-dnc/src/main/java/org/jeecg/modules/dnc/service/impl/ProcessStreamServiceImpl.java
@@ -19,6 +19,8 @@ import org.jeecg.modules.dnc.response.*; import org.jeecg.modules.dnc.service.*; import org.jeecg.modules.dnc.utils.ValidateUtil; import org.jeecg.modules.mdc.entity.MdcEquipment; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.entity.SysUser; import org.springframework.beans.factory.annotation.Autowired; @@ -39,8 +41,7 @@ @Autowired private IProcessSpecVersionService processSpecVersionService; @Autowired @Lazy private IDeviceInfoService deviceInfoService; private IMdcEquipmentService mdcEquipmentService; @Autowired private IPermissionStreamNewService permissionStreamNewService; @Autowired @@ -259,8 +260,8 @@ public List<ProcessStream> validateDeviceProcessInfo(String pnCode, String deviceNo) { if(!ValidateUtil.validateString(pnCode) || !ValidateUtil.validateString(deviceNo)) ExceptionCast.cast(CommonCode.INVALID_PARAM); DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if(deviceInfo == null) MdcEquipment mdcEquipment = mdcEquipmentService.findEquipmentNameByEquipmentId(deviceNo); if(mdcEquipment == null) ExceptionCast.cast(DeviceCode.DEVICE_NOT_EXIST); PermissionStream stream = componentInfoService.validateComponentOrPartsPnCode(pnCode); if(stream == null) lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/controller/AssignFileStreamController.java
@@ -88,16 +88,6 @@ return new DataResponseResult<>(CommonCode.SUCCESS, b); } @AutoLog(value = "DNCææ´¾è®¾å¤æµç¨æä½-æ«ç ä¼ è¾ç¨åº ä¸ç»è¿å®¡æ¹ æä»¶åå¨éç¨è¦ç") @ApiOperation(value = "DNCææ´¾è®¾å¤æµç¨æä½-æ«ç ä¼ è¾ç¨åº ä¸ç»è¿å®¡æ¹ æä»¶åå¨éç¨è¦ç", notes = "DNCææ´¾è®¾å¤æµç¨æä½-æ«ç ä¼ è¾ç¨åº ä¸ç»è¿å®¡æ¹ æä»¶åå¨éç¨è¦ç") @PostMapping("/transfer/doc") public ResponseResult transferDocFile(String pnCode, String deviceNo) { boolean b = assignFileStreamService.transferDocFile(pnCode, deviceNo); if(b) return new ResponseResult(CommonCode.SUCCESS); return new ResponseResult(CommonCode.FAIL); } @GetMapping(value = "/selectVoById") public Result<AssignFileStream> selectVoById(@RequestParam(name="id") String id){ return Result.OK(assignFileStreamService.getAssignFileStreamDetail(id)); lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/IAssignFileStreamService.java
@@ -84,12 +84,4 @@ * @return */ Boolean getFlowableEnable(); /** * æ«ç ä¼ è¾ç¨åº ä¸ç»è¿å®¡æ¹ æä»¶åå¨éç¨è¦ç * @param pnCode * @param deviceNo * @return */ boolean transferDocFile(String pnCode, String deviceNo); } lxzn-module-dnc/src/main/java/org/jeecg/modules/dncFlow/service/impl/AssignFileStreamServiceImpl.java
@@ -25,7 +25,6 @@ import org.jeecg.modules.dnc.utils.date.DateUtil; import org.jeecg.modules.dnc.utils.file.FileUtilS; import org.jeecg.modules.dncFlow.entity.AssignFileStream; import org.jeecg.modules.dncFlow.entity.ToEquipmentTask; import org.jeecg.modules.dncFlow.ext.AssignFileStreamExt; import org.jeecg.modules.dncFlow.mapper.AssignFileStreamMapper; import org.jeecg.modules.dncFlow.request.ApproveBatchRequest; @@ -33,7 +32,6 @@ import org.jeecg.modules.dncFlow.request.AssignFileStreamQueryRequest; import org.jeecg.modules.dncFlow.request.TaskRequest; import org.jeecg.modules.dncFlow.service.IAssignFileStreamService; import org.jeecg.modules.dncFlow.service.IToEquipmentTaskService; import org.jeecg.modules.dncFlow.vo.AssignFlowTaskVo; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; @@ -73,13 +71,7 @@ @Autowired private IDocInfoService docInfoService; @Autowired private IProcessStreamService processStreamService; @Autowired private IDocClassificationService classificationService; @Autowired private IToEquipmentTaskService equipmentTaskService; @Autowired private IDeviceInfoService deviceInfoService; @Autowired private IDocFileService docFileService; @Autowired @@ -107,11 +99,9 @@ @Autowired private IDncPassLogService dncPassLogService; @Value("${deploy.deployType}") //å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为工æ§ç½ 1为æ¶å¯ç½ private String deployType; private String deployType; //å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为工æ§ç½ 1为æ¶å¯ç½ @Value("${deploy.secretFolder}") //æ¶å¯ç½ä¼ è¾ncæä»¶å¤¹ private String secretFolder; private String secretFolder; //æ¶å¯ç½ä¼ è¾ncæä»¶å¤¹ @Override @Transactional(rollbackFor = {Exception.class}) @@ -138,7 +128,6 @@ */ public String getDeviceSpecialChar(String deviceId, String fileId){ //æ¿æ¢ä¸ºmdc设å¤è¡¨ // DeviceInfo deviceInfo = deviceInfoService.getById(deviceId); MdcEquipment mdcEquipment = iMdcEquipmentService.getById(deviceId); if(mdcEquipment == null) ExceptionCast.cast(ActivitiCode.ACT_ASSIGN_DEVICE_NONE); @@ -232,6 +221,9 @@ //æéæ ¡éª validateParams(stream); DocInfo docInfo = getDocInfo(stream); //ä¿®æ¹åæç¶æ docInfo.setDocDispatchStatus(4); docInfoService.updateById(docInfo); MdcEquipment mdcEquipment = getMdcEquipment(stream); DocFile docFile = getDocFile(stream); DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(stream.getDocId(), 7, stream.getDeviceId()); @@ -344,6 +336,9 @@ DocFile docFile = docFileService.getById(en.getFileId()); if(docFile == null) ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); //ä¿®æ¹åæç¶æ docInfo.setDocDispatchStatus(4); docInfoService.updateById(docInfo); DocInfo deviceDoc = docInfoService.getByDocAttrAndDocId(en.getDocId(),7, en.getDeviceId()); if(deviceDoc != null) { // å é¤ å¤ä»½ è¦ç åæç @@ -487,64 +482,6 @@ return false; } @Override @Transactional(rollbackFor = {Exception.class}) public boolean transferDocFile(String pnCode, String deviceNo) { List<ProcessStream> streams = processStreamService.validateDeviceProcessInfo(pnCode, deviceNo); DeviceInfo deviceInfo = deviceInfoService.getByDeviceNo(deviceNo); if(deviceInfo == null) ExceptionCast.cast(DeviceCode.DEVICE_NOT_EXIST); //å é¤åæ¥è®¾å¤ä¸çææææ¡£ docRelativeService.deleteByDocAttr(7, deviceInfo.getDeviceId()); List<DocInfo> docInfoList = docInfoService.getByProcessIds(streams); if(docInfoList == null || docInfoList.isEmpty()) ExceptionCast.cast(DocumentCode.DOC_NOT_EXIST); LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if(!ValidateUtil.validateString(userId)) ExceptionCast.cast(UcenterCode.UCENTER_ACCOUNT_NOT_EXIST); for(DocInfo docInfo : docInfoList) { DocFile docFile = docFileService.getById(docInfo.getPublishFileId()); if(docFile == null) ExceptionCast.cast(ActivitiCode.ACT_FILE_ERROR); //æå ¥ææ¡£å°è®¾å¤åéææ¡£ DocClassification classification = classificationService.getByCode(SEND_CODE); if(classification == null) ExceptionCast.cast(DocumentCode.DOC_CLASS_ERROR); DocRelative docRelative = new DocRelative(); docRelative.setDocId(docInfo.getDocId()); docRelative.setClassificationId(classification.getClassificationId()); docRelative.setAttributionType(7); docRelative.setAttributionId(deviceInfo.getDeviceId()); boolean b = docRelativeService.save(docRelative); if(!b) ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); //æå ¥æä»¶ä¼ è¾ä»»å¡è¡¨ ToEquipmentTask equipmentTask = new ToEquipmentTask(); //ä¸è½ç´æ¥ä»doc䏿¿fileId åversion å¯è½ä¼åå¨ææ´ //equipmentTask.setFileId(docInfo.getPublishFileId()); //equipmentTask.setDocVersion(docInfo.getPublishVersion()); equipmentTask.setDocId(docInfo.getDocId()); equipmentTask.setSyncFlag(1); equipmentTask.setDeviceNo(deviceInfo.getDeviceNo()); equipmentTask.setDeviceId(deviceInfo.getDeviceId()); equipmentTask.setDepartId(deviceInfo.getDepartId()); //æä»¶ç¸å ³ä¿¡æ¯ equipmentTask.setFileId(docFile.getFileId()); equipmentTask.setDocVersion(docFile.getDocVersion()); equipmentTask.setFileName(docInfo.getDocName()); equipmentTask.setFileEncodeName(docFile.getFileEncodeName()); equipmentTask.setFilePath(docFile.getFilePath()); equipmentTask.setFileSuffix(docFile.getFileSuffix()); equipmentTask.setFileSize(docFile.getFileSize()); b = equipmentTaskService.save(equipmentTask); if(!b) { ExceptionCast.cast(ActivitiCode.ACT_APPROVE_ERROR); } } return synchronizedFlagService.updateFlag(1); } //ä¼ åéªè¯ private void validateParams(AssignFileStream stream) { if (stream == null) { @@ -575,7 +512,7 @@ //è·åæä»¶ private void handleExistingDeviceDoc(DocFile docFile, MdcEquipment mdcEquipment, String deviceId) { List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getEquipmentId()); List<String> strings = iMdcProductionService.findListParentTreeAll(mdcEquipment.getId()); if (strings != null && !strings.isEmpty()) { String path = StringUtils.join(strings.toArray(), "/"); boolean copyFileNc = FileUtilS.copyFileNcToBak(path + "/" + mdcEquipment.getEquipmentId(), lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/MaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/SecondMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/ThirdMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/dto/WeekMaintenanceStandardImport.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamInspectionOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamMaintenanceStandardDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamSecondMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamThirdMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/entity/EamWeekMaintenanceOrderDetail.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamRepairOrderMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/EamReportRepairMapper.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamRepairOrderMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/mapper/xml/EamReportRepairMapper.xml
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderQuery.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderRequest.java ÐÞ¸Ä @@ -5,9 +5,7 @@ import lombok.EqualsAndHashCode; import lombok.experimental.Accessors; import org.jeecg.common.api.vo.FileUploadResult; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.flowable.domain.vo.FlowTaskVo; import org.jeecgframework.poi.excel.annotation.Excel; import java.io.Serializable; import java.util.List; lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/request/EamRepairOrderResponse.java ÐÞ¸Ä @@ -8,9 +8,7 @@ import lombok.experimental.Accessors; import org.jeecg.common.aspect.annotation.Dict; import org.jeecg.modules.eam.entity.EamRepairOrder; import org.jeecg.modules.eam.entity.EamReportRepair; import org.jeecgframework.poi.excel.annotation.Excel; import org.springframework.beans.BeanUtils; import org.springframework.format.annotation.DateTimeFormat; import java.io.Serializable; lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/request/EamReportRepairQuery.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamRepairOrderService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/IEamReportRepairService.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java
ÎļþÃû´Ó lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/EamRepairOrderServiceImpl.java ÐÞ¸Ä @@ -33,13 +33,13 @@ import org.jeecg.modules.eam.service.IEamEquipmentService; import org.jeecg.modules.eam.service.IEamRepairOrderService; import org.jeecg.modules.eam.service.IEamReportRepairService; import org.jeecg.modules.eam.util.DateUtils; import org.jeecg.modules.flowable.apithird.business.entity.FlowMyBusiness; import org.jeecg.modules.flowable.apithird.business.service.IFlowMyBusinessService; import org.jeecg.modules.flowable.apithird.service.FlowCallBackServiceI; import org.jeecg.modules.flowable.apithird.service.FlowCommonService; import org.jeecg.modules.flowable.service.IFlowDefinitionService; import org.jeecg.modules.flowable.service.IFlowTaskService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.service.ISysBusinessCodeRuleService; import org.jeecg.modules.system.service.ISysUserService; import org.jeecg.modules.system.vo.UserSelector; lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/service/impl/EamReportRepairServiceImpl.java
lxzn-module-eam-common/src/main/java/org/jeecg/modules/eam/util/DateUtils.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,1089 @@ package org.jeecg.modules.eam.util; import java.math.BigDecimal; import java.math.RoundingMode; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.time.DayOfWeek; import java.time.LocalDate; import java.time.ZoneId; import java.time.temporal.ChronoField; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.regex.Pattern; import java.util.stream.Collectors; import java.util.stream.Stream; public class DateUtils { private final static long DAYTIMESUNSET = 86400; /** * @return å¾å°æå¤© */ public static Date getNextDay(Date d1) { long d2 = d1.getTime() + 86400 * 1000; return new Date(d2); } /** * @return å¾å°æ¨å¤© */ public static Date getPreviousDay(Date d1) { long d2 = d1.getTime() - 86400 * 1000; return new Date(d2); } /** * @return è¿åæ¶é´å·®çè¯è¨æè¿° å¦1天2å°æ¶5å6ç§ */ public static String different(Date d1, Date d2) { if (d1 == null || d2 == null) { return ""; } StringBuilder strB = new StringBuilder(); SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); try { //毫ç§ms long diff = d2.getTime() - d1.getTime(); long diffSeconds = diff / 1000 % 60; long diffMinutes = diff / (60 * 1000) % 60; long diffHours = diff / (60 * 60 * 1000) % 24; long diffDays = diff / (24 * 60 * 60 * 1000); if (diffDays > 0) { strB.append(diffDays + " 天 "); strB.append(diffHours + " å°æ¶ "); strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else if (diffHours > 0) { strB.append(diffHours + " å°æ¶ "); strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else if (diffMinutes > 0) { strB.append(diffMinutes + " åé "); strB.append(diffSeconds + " ç§ "); } else { strB.append(diffSeconds + " ç§ "); } } catch (Exception e) { e.printStackTrace(); } return strB.toString(); } /** * @return è·å两个dateçæ¶é´å·®ï¼ç»æä¸ºç§ é¤ */ public static long differentSecond(Date startDate, Date endDate) { return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("1000"), 0, BigDecimal.ROUND_HALF_UP).longValue(); // return (endDate.getTime() - startDate.getTime()) / 1000; } /** * @return è·å两个dateçæ¶é´å·®ï¼ç»æä¸ºåé */ public static Integer differentMinutes(Date startDate, Date endDate) { return new BigDecimal(endDate.getTime() - startDate.getTime()).divide(new BigDecimal("60000"), 0, RoundingMode.HALF_UP).intValue(); } /** * @return è¿åä¼ å ¥æ¶é´ç0ç¹0å0ç§ */ public static Date getTodayZero(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); return cal.getTime(); } /** * @return è¿åä¼ å ¥æ¶é´ç0ç¹0å0ç§ */ public static Date getTomorrowZero(Date d) { Calendar cal = Calendar.getInstance(); cal.setTime(d); cal.set(Calendar.HOUR_OF_DAY, 0); cal.set(Calendar.MINUTE, 0); cal.set(Calendar.SECOND, 0); cal.add(Calendar.DAY_OF_MONTH, 1); return cal.getTime(); } /** * @return 夿æ¶é´æ¯å¦æ¯å½å¤© */ public static boolean isTaday(Date date) { Date now = new Date(); SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); String nowDay = sf.format(now); String day = sf.format(date); return day.equals(nowDay); } /** * @return å¤æä¸¤ä¸ªæ¶é´æ¯å¦ä¸ºåä¸å¤© */ public static boolean isOneDay(Date d1, Date d2) { SimpleDateFormat sf = new SimpleDateFormat("yyyyMMdd"); String d1Str = sf.format(d1); String d2Str = sf.format(d2); return d1Str.equals(d2Str); } /** * @return å¤æä¸¤ä¸ªæ¶é´æ¯å¦ä¸ºåä¸å¹´ */ public static boolean isOneYear(Date d1, Date d2) { SimpleDateFormat sf = new SimpleDateFormat("yyyy"); String d1Str = sf.format(d1); String d2Str = sf.format(d2); return d1Str.equals(d2Str); } public static String dateProportion(Date start, Date end) { float differentSecond = DateUtils.differentSecond(start, end); float f = differentSecond / DAYTIMESUNSET * 100; return String.format("%.2f", f) + "%"; } public static Date strToDate(String dateStr, String format) { SimpleDateFormat sf = new SimpleDateFormat(format); Date result = null; try { result = sf.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return result; } public static final String STR_DATE = "yyyy-MM-dd"; public static final String STRDATE = "yyyyMMdd"; public static final String STR_YEAR_MONTH = "yyyy-MM"; public static final String STRYEARMONTH = "yyyyMM"; public static final String STR_DATE_TIME = "yyyy-MM-dd HH:mm:ss.SSS"; public static final String STR_DATE_TIME_SMALL = "yyyy-MM-dd HH:mm:ss"; public static final String STR_DATE_TIME_MIN = "yyyy-MM-dd HH:mm"; public static final String STR_DATE_TIME_HOUR = "yyyy-MM-dd HH"; public static final String STR_DATE_TIME_FULL = "yyyyMMddHHmmssSSS"; public static final String STR_HHMMSS = "HH:mm:ss"; public static final String STR_HHMM = "HH:mm"; public static final String STR_MMDD = "MM-dd"; /** * <p> * Description: å®é ææ æä»½ * </p> * * @param startDate * @param endDate * @return obj [0] å®é ææ æä»½ ä¾å¦å®é ææ æä»½ï¼3.86ï¼æä¹æ¯3个æå26天 obj[1] å®é åæ´æä»½ ï¼3ï¼ */ public static Integer getRealMonth(Date startDate, Date endDate) { Integer month = 0; Calendar start = Calendar.getInstance(); start.setTime(startDate); Calendar end = Calendar.getInstance(); end.setTime(endDate); int year = start.get(Calendar.YEAR); int year2 = end.get(Calendar.YEAR); int month2 = start.get(Calendar.MONTH); int month3 = end.get(Calendar.MONTH); try { while (start.before(end)) { start.add(Calendar.MONTH, 1); month++; } } catch (Exception e) { e.printStackTrace(); } int day2 = start.get(Calendar.DAY_OF_MONTH); int day3 = end.get(Calendar.DAY_OF_MONTH); int tmpYear = year2 - year; if (day2 == day3) { return (tmpYear * 12) + (month3 - month2); } return month == 0 ? month : (month - 1); } public static Date getNow() { return new Date(System.currentTimeMillis()); } public static int getDayOfMonth() { Calendar aCalendar = Calendar.getInstance(Locale.CHINA); int day = aCalendar.getActualMaximum(Calendar.DATE); return day; } /** * <p> * Description: ä¿®æ¹æ¶é´ä¸ºæå®æ¶é´å½å¤©ç23:59:59.000 * </p> * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date fillTime(Date date) { Date result = removeTime(date); result.setTime(result.getTime() + 24 * 60 * 60 * 1000 - 1000); // å ä¸å¤© return result; } /** * @param date å½åæ¶é´ * @param i å¾åå 天 * @return */ public static Date fillBeforeTime(Date date, Integer i) { Date result = removeTime(date); Calendar calendar = Calendar.getInstance(); // å¾å°æ¥å calendar.setTime(result);// æå½åæ¶é´èµç»æ¥å calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为åä¸å¤© result.setTime(calendar.getTime().getTime() + 24 * 60 * 60 * 1000 - 1000); // å ä¸å¤© return result; } /** * <p> * Description: ä¿®æ¹æ¶é´ä¸ºæå®æ¶é´åä¸å¤©ç00:00:00 * </p> * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date plusTime(Date date, Integer i) { Date result = removeTime(date); Calendar calendar = Calendar.getInstance(); // å¾å°æ¥å calendar.setTime(result);// æå½åæ¶é´èµç»æ¥å calendar.add(Calendar.DAY_OF_MONTH, i); // 设置为åä¸å¤© return calendar.getTime(); } /** * <p> * Description: å»ææ¥ææ¶é´ä¸çæ¶é´é¨å * </p> * å¦: 2013-11-11 18:56:33 ---> 2013-11-11 00:00:00 * * @param date éè¦ä¿®æ¹çæ¶é´ * @return ä¿®æ¹åçæ¶é´ */ public static Date removeTime(Date date) { Date result = null; try { SimpleDateFormat df = new SimpleDateFormat(STR_DATE); String dateStr = df.format(date); result = df.parse(dateStr); } catch (ParseException e) { e.printStackTrace(); } return result; } /** * <p> * Description: æé»è®¤æ ¼å¼(yyyy-MM-dd HH:mm:ss.SSS)è·åæ¶é´å符串 * </p> * * @param date è¦è½¬æ¢çæ¥æ * @return 转æ¢åçæ¶é´å符串 */ public static String format(Date date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME); return df.format(date); } public static Date parseDate(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); try { date = df.parse(df.format(date)); } catch (ParseException e) { e.printStackTrace(); } return date; } public static Date getDelayedYear() { Calendar curr = Calendar.getInstance(); curr.set(Calendar.YEAR, curr.get(Calendar.YEAR) + 1); Date date = curr.getTime(); return date; } /** * <p> * Description: ææå®æ ¼å¼è·åæ¶é´å符串 * </p> * * @param date è¦è½¬æ¢çæ¥æ * @param format æ ¼å¼,ä¾å¦:yyyy-MM-dd HH:mm:ss.SSS * @return 转æ¢åçæ¶é´å符串 */ public static String format(Date date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); return df.format(date); } /** * <p> * Description: å æå½æ° * </p> * * @param month æä»½æ° * @return */ public static Date addMonth(Integer month, Date time) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.MONTH, month); return c.getTime(); } public static Boolean greater(Date startTime, Date endTime) { return startTime.getTime() > endTime.getTime(); } public static Boolean less(Date startTime, Date endTime) { return startTime.getTime() < endTime.getTime(); } public static Boolean equals(Date startTime, Date endTime) { return startTime.getTime() == endTime.getTime(); } public static Integer getDiffMonth(Calendar c, Calendar c1) { return (c.get(Calendar.YEAR) - c1.get(Calendar.YEAR)) * 12 + (c.get(Calendar.MONTH) - c1.get(Calendar.MONTH)); } /** * æ¯å¦ä¸ºåä¸å¤© */ public static boolean equalsDay(Date a, Date b) { return removeTime(a).getTime() == removeTime(b).getTime(); } public static Integer getDays(Date startTime, Date endTime) { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); long t1 = c.getTimeInMillis(); long t2 = c1.getTimeInMillis(); // 计ç®å¤©æ° Long days = (t2 - t1) / (24 * 60 * 60 * 1000); return days.intValue(); } public static Integer getSeconds(Date startTime, Date endTime) { try { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); long t1 = c.getTimeInMillis(); long t2 = c1.getTimeInMillis(); // 计ç®ç§æ° Long days = (t2 - t1) / (1000); return days.intValue(); } catch (Exception e) { return 0; } } //è·åå°æ¶å·® public static double subHours(Date startTime, Date endTime) { Calendar c = Calendar.getInstance(); c.setTime(startTime); Calendar c1 = Calendar.getInstance(); c1.setTime(endTime); double t1 = c.getTimeInMillis(); double t2 = c1.getTimeInMillis(); // 计ç®å¤©æ° double hours = (t2 - t1) / (1000 * 60 * 60); return Double.valueOf(new DecimalFormat("#.00").format(hours)); } //æ ¹æ®å½åæ¶é´ååºçæ¥æè·åå¹´é¾ public static int getAge(Date birthDay) { Calendar cal = Calendar.getInstance(); // ååºç³»ç»å½åæ¶é´çå¹´ãæãæ¥é¨å int yearNow = cal.get(Calendar.YEAR); int monthNow = cal.get(Calendar.MONTH); int dayOfMonthNow = cal.get(Calendar.DAY_OF_MONTH); cal.setTime(birthDay); // ååºåºçæ¥æçå¹´ãæãæ¥é¨å int yearBirth = cal.get(Calendar.YEAR); int monthBirth = cal.get(Calendar.MONTH); int dayOfMonthBirth = cal.get(Calendar.DAY_OF_MONTH); // å½å年份ä¸åºç年份ç¸åï¼åæ¥è®¡ç®å¹´é¾ int age = yearNow - yearBirth; // å½åæä»½ä¸åºçæ¥æçæä»½ç¸æ¯ï¼å¦ææä»½å°äºåºçæä»½ï¼åå¹´é¾ä¸å1ï¼è¡¨ç¤ºä¸æ»¡å¤å°å¨å² if (monthNow <= monthBirth) { // 妿æä»½ç¸çï¼å¨æ¯è¾æ¥æï¼å¦æå½åæ¥ï¼å°äºåºçæ¥ï¼ä¹å1ï¼è¡¨ç¤ºä¸æ»¡å¤å°å¨å² if (monthNow == monthBirth) { if (dayOfMonthNow < dayOfMonthBirth) { age--; } } else { age--; } } return age; } public static Date subDays(Date startTime, Integer day) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.DATE, day * -1); return c.getTime(); } public static Date addDays(Date startTime, Integer day) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.DATE, day); return c.getTime(); } /*public static Date addHours(Date startTime, Integer hours) { Calendar c = Calendar.getInstance(); c.setTime(startTime); c.add(Calendar.HOUR, hours ); return c.getTime(); }*/ public static Date toDate(String date, String format) { SimpleDateFormat df = new SimpleDateFormat(format); try { return df.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static Date toDateFull(String date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME); try { return df.parse(date); } catch (ParseException e) { e.printStackTrace(); } return null; } public static Date toDateMedium(String date) { SimpleDateFormat df = new SimpleDateFormat(STR_DATE_TIME_SMALL); try { Date dd = df.parse(date); return dd; } catch (ParseException e) { return null; } } public static Integer getDate(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int day = calendar.get(Calendar.DATE); return day; } return null; } public static Integer getYear() { return getYear(new Date()); } public static Integer getYear(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int year = calendar.get(Calendar.YEAR); return year; } return null; } public static Integer getMonth() { return getMonth(new Date()); } public static Integer getMonth(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int month = calendar.get(Calendar.MONTH); return month + 1; } return null; } public static Integer getDay() { return getDay(new Date()); } public static Integer getDay(Date date) { if (date != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); int day = calendar.get(Calendar.DAY_OF_MONTH); return day; } return null; } public static Date[] getMonthStartTimeAndEndTime(Integer month) { Calendar calendar = Calendar.getInstance(); Date[] dates = new Date[2]; Date startTime = null; Date endsTime = null; if (month != null) { calendar.set(Calendar.MONTH, month); //è·å¾å°æ¬æç第ä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); startTime = calendar.getTime(); startTime = DateUtils.removeTime(startTime); //è·å¾å°æ¬æçæåä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); endsTime = calendar.getTime(); endsTime = DateUtils.fillTime(endsTime); } dates[0] = startTime; dates[1] = endsTime; return dates; } public static Date[] getMonthStartTimeAndEndTime(Date date) { Calendar calendar = Calendar.getInstance(); calendar.setTime(date); Integer month = calendar.get(Calendar.MONTH); Date[] dates = new Date[2]; Date startTime = null; Date endsTime = null; if (month != null) { calendar.set(Calendar.MONTH, month); //è·å¾å°æ¬æç第ä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMinimum(Calendar.DAY_OF_MONTH)); startTime = calendar.getTime(); startTime = DateUtils.removeTime(startTime); //è·å¾å°æ¬æçæåä¸å¤© calendar.set(Calendar.DAY_OF_MONTH, calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); endsTime = calendar.getTime(); endsTime = DateUtils.fillTime(endsTime); } dates[0] = startTime; dates[1] = endsTime; return dates; } /** * è·ådayså¤©çæ¶é´åºé´ï¼endTime 为å½å¤©çåä¸å¤©0ç¹ï¼ * startTime 为endTimeådays天 * * @param days * @return */ public static Date[] getDaysStartTimeAndEndTime(Integer days) { Date[] dates = new Date[2]; Date endDate = plusTime(removeTime(getNow()), 1); Date startDate = subDays(endDate, days); dates[0] = startDate; dates[1] = endDate; return dates; } /** * æ ¹æ®æä¸å¹´è·åæåä¸å¤©çæ¶é´ * 2013 ---> 2013-12-31 23:59:59.000 * * @param year * @return */ public static Date getYearEndDay(Integer year) { Calendar calendar = Calendar.getInstance(); calendar.clear(); calendar.set(Calendar.YEAR, year); calendar.roll(Calendar.DAY_OF_YEAR, -1); Date yearLast = calendar.getTime(); Date lastYear = DateUtils.fillTime(yearLast); return lastYear; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringList(Date start, Date end, String strDate) { List<String> list = new ArrayList<>(); int i = getDays(start, end); for (int j = 0; j <= i; j++) { if (j == 0) { list.add(format(start, strDate)); } else { list.add(format(plusTime(start, j), strDate)); } } return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringList(Date start, Date end) { List<String> list = new ArrayList<>(); int i = getDays(start, end); for (int j = 0; j <= i; j++) { if (j == 0) { list.add(format(start, STR_DATE)); } else { list.add(format(plusTime(start, j), STR_DATE)); } } return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyyMMdd * * @param start * @param end * @return */ public static List<String> getDatesStringList2(Date start, Date end) { List<String> list = new ArrayList<>(); int i = getDays(start, end); for (int j = 0; j <= i; j++) { if (j == 0) { list.add(format(start, STRDATE)); } else { list.add(format(plusTime(start, j), STRDATE)); } } return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼MM-dd * * @param start * @param end * @return */ public static List<String> getDatesStringLists(Date start, Date end) { List<String> list = new ArrayList<>(); int i = getDays(start, end); for (int j = 0; j <= i; j++) { if (j == 0) { list.add(format(start, STR_MMDD)); } else { list.add(format(plusTime(start, j), STR_MMDD)); } } return list; } public static List<String> getMonthBetween(Date start, Date end) { List<String> list = new ArrayList<>(); Calendar min = Calendar.getInstance(); Calendar max = Calendar.getInstance(); min.setTime(start); min.set(min.get(Calendar.YEAR), min.get(Calendar.MONTH), 1); max.setTime(end); max.set(max.get(Calendar.YEAR), max.get(Calendar.MONTH), 2); Calendar curr = min; while (curr.before(max)) { list.add(format(curr.getTime(), STR_YEAR_MONTH)); curr.add(Calendar.MONTH, 1); } return list; } /** * è·ådateStrçæ¥ææ ¼å¼yyyy-MM-dd * * @param dateStr * @return */ public static Date getShortDate(String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat(STR_DATE); Date startTime = null; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } return startTime == null ? removeTime(new Date()) : startTime; } /** * è·ådateStrçæ¥ææ ¼å¼yyyyMMdd * * @param dateStr * @return */ public static Date getShortDate2(String dateStr) { SimpleDateFormat sdf = new SimpleDateFormat(STRDATE); Date startTime = null; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } return startTime == null ? removeTime(new Date()) : startTime; } public static Date getFormatDate(String dateStr, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); Date startTime = null; try { startTime = sdf.parse(dateStr); } catch (ParseException e) { } return startTime == null ? removeTime(new Date()) : startTime; } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å ç§ */ public static Date addSecond(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.SECOND, n); return c.getTime(); } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å åé */ public static Date addMinute(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.MINUTE, n); return c.getTime(); } /** * @param time * @param n * @return å¨ä¸ä¸ªæ¶é´ä¸å å°æ¶ */ public static Date addHour(Date time, Integer n) { Calendar c = Calendar.getInstance(); c.setTime(time); c.add(Calendar.HOUR_OF_DAY, n); return c.getTime(); } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy-MM-dd * * @param start * @param end * @return */ public static List<String> getDateMonth(String start, String end) { List<String> list = new ArrayList<>(); SimpleDateFormat yyyyMM = new SimpleDateFormat("yyyy-MM"); Date startyear = null; try { startyear = yyyyMM.parse(start); Date endyear = yyyyMM.parse(end); Calendar dd = Calendar.getInstance();//å®ä¹æ¥æå®ä¾ dd.setTime(startyear);//è®¾ç½®æ¥æèµ·å§æ¶é´ while (dd.getTime().before(endyear)) {//夿æ¯å¦å°ç»ææ¥æ String str = yyyyMM.format(dd.getTime()); dd.add(Calendar.MONTH, 1);//è¿è¡å½åæ¥ææä»½å 1 list.add(str); } list.add(yyyyMM.format(endyear)); } catch (ParseException e) { e.printStackTrace(); } return list; } /** * è·åstart/endçæææ¥æå符串 æ ¼å¼yyyy * * @param start * @param end * @return */ public static List<String> getDateYear(String start, String end) { List<String> list = new ArrayList<>(); SimpleDateFormat yyyy = new SimpleDateFormat("yyyy"); Date startyear = null; try { startyear = yyyy.parse(start); Date endyear = yyyy.parse(end); Calendar dd = Calendar.getInstance();//å®ä¹æ¥æå®ä¾ dd.setTime(startyear);//è®¾ç½®æ¥æèµ·å§æ¶é´ while (dd.getTime().before(endyear)) {//夿æ¯å¦å°ç»ææ¥æ String str = yyyy.format(dd.getTime()); dd.add(Calendar.YEAR, 1);//è¿è¡å½åæ¥ææä»½å 1 list.add(str); } list.add(yyyy.format(endyear)); } catch (ParseException e) { e.printStackTrace(); } return list; } /** * è·åå½åæ¶é´ å®ä½å°å°æ¶ * æ ¼å¼ä¸º yyyy-MM-dd hh:mm * ä¾ï¼2018-02-27 11:00 * * @return */ public static Date getNowHourDate() { Date now = getNow(); Date result; Calendar calendar = Calendar.getInstance(); calendar.setTime(now); int hour = calendar.get(Calendar.HOUR_OF_DAY); String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":00"; result = toDate(dateStr, STR_DATE_TIME_MIN); return result; } /** * è·åæ¯æ¥8:11æ11:11çæ¶é´ç¹ * * @return */ public static Date getNowHourDateTo() { Date now = getNow(); Date result; Calendar calendar = Calendar.getInstance(); calendar.setTime(now); int hour = calendar.get(Calendar.HOUR_OF_DAY); if (hour != 8 && hour != 11) { return null; } int minute = calendar.get(Calendar.MINUTE); if (minute < 11) { return null; } String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + (hour < 10 ? "0" + hour : hour) + ":11"; result = toDate(dateStr, STR_DATE_TIME_MIN); return result; } /** * è·åæ¯æ¥8:00ã13:00ã20:00çæ¶é´ç¹ * * @return */ public static List<Date> getHourDateList(Date time) { List<Date> result = new ArrayList<>(); result.add(addHour(time, 8)); result.add(addHour(time, 13)); result.add(addHour(time, 20)); return result; } /** * è·å䏿çæåä¸å¤© * * @return */ public static Date getPreviousMonthLastDay() { Calendar calendar = Calendar.getInstance(); calendar.set(Calendar.DAY_OF_MONTH, 0); return DateUtils.removeTime(calendar.getTime()); } /** * è·åendæ¶é´æç第ä¸å¤© * * @param end æä»½æåä¸å¤© * @return */ public static Date getTheMonthFirstDay(Date end) { Calendar calendar = Calendar.getInstance(); calendar.setTime(end); calendar.set(Calendar.DAY_OF_MONTH, 1); return calendar.getTime(); } public static String secToTimeHour(int time) { String timeStr = null; int hour = 0; if (time <= 0) { return "0å°æ¶"; } else { BigDecimal bigDecimal = new BigDecimal(time); BigDecimal bigDecimal1 = new BigDecimal(3600); BigDecimal hourBigDecimal = new BigDecimal(0); hourBigDecimal = new BigDecimal(String.valueOf(bigDecimal)). divide(new BigDecimal(String.valueOf(bigDecimal1)), 2, BigDecimal.ROUND_HALF_UP); timeStr = hourBigDecimal + "å°æ¶"; } return timeStr; } public static String secToTime(int time) { String timeStr = null; int hour = 0; int minute = 0; int second = 0; if (time <= 0) return " "; else { minute = time / 60; if (minute < 60) { second = time % 60; timeStr = unitFormat(minute) + "å" + unitFormat(second) + " ç§"; } else { hour = minute / 60; minute = minute % 60; second = time - hour * 3600 - minute * 60; timeStr = unitFormat(hour) + "å°æ¶" + unitFormat(minute) + "å" + unitFormat(second) + "ç§"; } } return timeStr; } public static String unitFormat(int i) { String retStr = null; if (i >= 0 && i < 10) retStr = "0" + Integer.toString(i); else retStr = "" + i; return retStr; } /** * éªè¯æ¶é´ * * @param time æ¶é´å符串 HH:mm * @return éªè¯æåè¿åtrueï¼éªè¯å¤±è´¥è¿åfalse */ public static boolean checkTime(String time) { String regex = "([0-1][0-9]|2[0-3]):([0-5][0-9]):([0-5][0-9])$"; return Pattern.matches(regex, time); } /** * è·åæ¯æ¥07:30:00çæ¶é´ç¹ * æ ¼å¼ä¸º yyyy-MM-dd HH:mm:ss * ä¾ï¼2018-05-28 07:30:00 * * @return */ public static Date getHourDateTo(Date now, String time) { String dateStr = format(now, STR_DATE); dateStr = dateStr + " " + time; Date result = toDate(dateStr, STR_DATE_TIME_SMALL); return result; } public static Date setTimeForDay(Date theDate, String planTime) { Calendar cal = Calendar.getInstance(); cal.setTime(theDate); String[] times = planTime.split(":"); cal.set(Calendar.HOUR_OF_DAY, Integer.parseInt(times[0])); cal.set(Calendar.MINUTE, Integer.parseInt(times[1])); cal.set(Calendar.SECOND, Integer.parseInt(times[2])); return cal.getTime(); } public static long getTimeWithOutDay(Date d) { return d.getTime() / 1000 % 86400; } /** * @param lo æ¯«ç§æ° * @return String yyyy-MM-dd HH:mm:ss * @Description: longç±»åè½¬æ¢ææ¥æ */ public static String longToDate(long lo) { Date date = new Date(lo); SimpleDateFormat sd = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); return sd.format(date); } /** * @param startDate * @param endDate * @return */ public static List<Date> getWeekDays(LocalDate startDate, LocalDate endDate) { List<Date> result = new ArrayList<>(); List<LocalDate> dateList = Stream.iterate(startDate, localDate -> localDate.plusDays(1)) .limit(ChronoUnit.DAYS.between(startDate, endDate) + 1) .filter(localDate -> DayOfWeek.SATURDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK))) || DayOfWeek.SUNDAY.equals(DayOfWeek.of(localDate.get(ChronoField.DAY_OF_WEEK)))) .collect(Collectors.toList()); dateList.forEach(localDate -> result.add(Date.from(localDate.atStartOfDay().atZone(ZoneId.systemDefault()).toInstant()))); return result; } /** * @param smallDate * @param bigDate * @desc è·åä¸¤ä¸ªæ¥æä¹é´çå¤©æ° */ public static Integer getDaysBetween(String smallDate, String bigDate) throws ParseException { // æ¥ææ ¼å¼ SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd"); // è·åä¸¤ä¸ªæ¥æçæ¶é´æ³ Calendar cal = Calendar.getInstance(); cal.setTime(sdf.parse(smallDate)); long smallTime = cal.getTimeInMillis(); cal.setTime(sdf.parse(bigDate)); long bigTime = cal.getTimeInMillis(); // ç¸å·®çæ¥æ long days = (bigTime - smallTime) / (1000 * 3600 * 24); // long转int å卿º¢åºæ åµ æ ¹æ®ä¸å¡æ åµç¼è¾catchä¸è¿åå¼ try { return Integer.parseInt(String.valueOf(days)); } catch (NumberFormatException e) { e.printStackTrace(); return 0; } } /** * æ¥æè½¬æ¢ï¼å°æ¥å£è¿åç20180524转为2018-05-24 * * @param str * @return */ public static String dateConvertion(String str) { Date parse = null; String dateString = ""; try { parse = new SimpleDateFormat("yyyyMMdd").parse(str); dateString = new SimpleDateFormat("yyyy-MM-dd").format(parse); } catch (ParseException e) { dateString = null; } return dateString; } } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/EquipmentMapper.java
@@ -7,6 +7,8 @@ import org.apache.ibatis.annotations.Select; import org.jeecg.modules.mdc.entity.Equipment; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -19,15 +21,19 @@ @Select(" SELECT name FROM SysObjects Where XType='U' AND name = '${saveTableName}' ") String checkTableExists(@Param("saveTableName") String saveTableName); @Select(" SELECT COUNT(CollectTime) num FROM ${saveTableName} WHERE CollectTime < '${day}' ") @Select(" SELECT COUNT(CollectTime) num FROM [${saveTableName}] WHERE CollectTime < '${day}' ") Integer checkTableDataNum(@Param("saveTableName") String saveTableName, @Param("day") String day); @Insert(" INSERT INTO ${tableName} SELECT * FROM ${lastTableName} WHERE CollectTime < '${date}' ") @Insert(" INSERT INTO [${tableName}] SELECT * FROM [${lastTableName}] WHERE CollectTime < '${date}' ") void insertTableData(@Param("tableName") String tableName, @Param("lastTableName") String lastTableName, @Param("date") String date); @Delete(" delete from ${tableName} where CollectTime < '${day}' ") @Delete(" delete from [${tableName}] where CollectTime < '${day}' ") void deleteTableData(@Param("tableName") String saveTableName, @Param("day") String day); @Insert(" SELECT * INTO ${tableName} FROM ${lastTableName} WHERE CollectTime < '${date}' ") @Insert(" SELECT * INTO [${tableName}] FROM [${lastTableName}] WHERE CollectTime < '${date}' ") void insertNoTableData(@Param("tableName") String tableName, @Param("lastTableName") String lastTableName, @Param("date") String date); List<Equipment> listByProds(@Param("proIds") List<String> proIds); Equipment findByEquId(@Param("equipmentId") String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentMapper.java
@@ -140,4 +140,8 @@ List<MdcEquipment> findByProIdsAndTeamCode(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("teamCodeList") List<String> teamCodeList); List<MdcEquipment> findByProIdsAndType(@Param("mdcProductionIds") List<String> mdcProductionIds, @Param("typeList") List<String> typeList); List<String> getEquIdsByProIds(@Param("proIds") List<String> proIds); List<MdcEquipment> getEquipmentList(@Param("allProductionIds") List<String> allProductionIds); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/EquipmentMapper.xml
@@ -2,4 +2,22 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.EquipmentMapper"> <select id="listByProds" resultType="org.jeecg.modules.mdc.entity.Equipment"> SELECT t1.* FROM Equipment t1 LEFT JOIN mdc_equipment t2 ON t1.EquipmentID = t2.equipment_id LEFT JOIN mdc_production_equipment t3 ON t2.id = t3.equipment_id <where> t3.production_id IN <foreach collection="proIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </where> </select> <select id="findByEquId" resultType="org.jeecg.modules.mdc.entity.Equipment"> SELECT TOP 1 * FROM Equipment WHERE EquipmentID = #{equipmentId} </select> </mapper> lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentMapper.xml
@@ -89,6 +89,20 @@ </foreach> </select> <!--æ ¹æ®äº§çº¿idæ¥è¯¢è®¾å¤idéå--> <select id="getEquipmentList" resultType="org.jeecg.modules.mdc.entity.MdcEquipment"> SELECT me.* FROM mdc_equipment me LEFT JOIN mdc_production_equipment mpe ON me.id = mpe.equipment_id WHERE mpe.production_id IN <foreach collection="allProductionIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </select> <!--æ¥è¯¢è®¾å¤çæ§ä¿¡æ¯--> <select id="checkStatusFromEquipmentIds" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentMonitor"> SELECT @@ -340,6 +354,7 @@ #{equipmentType} </foreach> </select> <select id="queryByDepartIdsAndType" resultType="org.jeecg.modules.mdc.entity.MdcEquipment"> SELECT e.*, @@ -358,4 +373,18 @@ </foreach> </select> <select id="getEquIdsByProIds" resultType="java.lang.String"> SELECT t1.equipment_id FROM mdc_equipment t1 LEFT JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id <where> t2.production_id IN <foreach collection="proIds" index="index" item="id" open="(" separator="," close=")"> #{id} </foreach> </where> </select> </mapper> lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IEquipmentService.java
@@ -3,6 +3,8 @@ import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.entity.Equipment; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -48,4 +50,8 @@ * @param day */ void insertNoTableData(String backupTableName, String tableName, String day); List<Equipment> listByProds(List<String> proIds); Equipment findByEquId(String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcAlarmInfoService.java
@@ -11,4 +11,5 @@ */ public interface IMdcAlarmInfoService extends IService<MdcAlarmInfo> { MdcAlarmInfo findAlarmContent(String alarmNo, String equipmentId); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentService.java
@@ -239,4 +239,13 @@ * @return */ List<MdcEquipment> findByProIdsAndType(List<String> allProductionIds, List<String> typeList); List<String> getEquIdsByProIds(List<String> proIds); /** * æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤åè¡¨ä¿¡æ¯ * @return */ List<MdcEquipment> getEquipmentList(); } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/EquipmentServiceImpl.java
@@ -6,6 +6,9 @@ import org.jeecg.modules.mdc.service.IEquipmentService; import org.springframework.stereotype.Service; import java.util.Collections; import java.util.List; /** * @Description: éé设å¤è¡¨ * @Author: liuS @@ -39,4 +42,14 @@ public void insertNoTableData(String backupTableName, String tableName, String day) { this.baseMapper.insertNoTableData(backupTableName, tableName, day); } @Override public List<Equipment> listByProds(List<String> proIds) { return this.baseMapper.listByProds(proIds); } @Override public Equipment findByEquId(String equipmentId) { return this.baseMapper.findByEquId(equipmentId); } } lxzn-module-mdc-common/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import lombok.extern.slf4j.Slf4j; @@ -1042,4 +1043,36 @@ return this.baseMapper.findByProIdsAndType(allProductionIds, typeList); } @Override public List<MdcEquipment> getEquipmentList() { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); if (StringUtils.isNotEmpty(user.getEquipmentIds())) { return this.baseMapper.selectList(new LambdaQueryWrapper<MdcEquipment>().eq(MdcEquipment::getEquipmentId, Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)))); } //è·åææäº§çº¿æ°æ® List<MdcProduction> productionList = mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0.toString()).orderByAsc(MdcProduction::getProductionOrder)); //æ ¹æ®ç¨æ·idè·åæ¥æç产线信æ¯éå List<String> productionIds = mdcUserProductionService.queryProductionIdsByUserId(userId); List<String> allProductionIds = new ArrayList<>(); //æ¾å°ææäº§çº¿idçä¸çº§id if (productionIds != null && !productionIds.isEmpty()) { for (String productionId : productionIds) { this.getAllProductionIds(productionList, productionId, allProductionIds); } } //æ ¹æ®äº§çº¿éåæ¥æ¾ææè®¾å¤id if (allProductionIds.isEmpty()) { return null; } List<MdcEquipment> equipmentIds = this.baseMapper.getEquipmentList(allProductionIds); return equipmentIds; } @Override public List<String> getEquIdsByProIds(List<String> proIds) { return this.baseMapper.getEquIdsByProIds(proIds); } } lxzn-module-mdc/pom.xml
@@ -25,6 +25,11 @@ <artifactId>lxzn-module-mdc-common</artifactId> <version>3.4.3</version> </dependency> <dependency> <groupId>org.jeecgframework.boot</groupId> <artifactId>lxzn-module-eam-common</artifactId> <version>3.4.3</version> </dependency> </dependencies> </project> lxzn-module-mdc/src/main/java/org/jeecg/modules/board/controller/DtBoardController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,95 @@ package org.jeecg.modules.board.controller; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiParam; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.api.vo.Result; import org.jeecg.modules.board.service.IDtBoardService; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.system.entity.MdcProduction; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import javax.annotation.Resource; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: æ°ååªççæ¿æ¥å£ */ @Slf4j @Api(tags = "æ°ååªççæ¿") @RestController @RequestMapping("/board/dtBoard") public class DtBoardController { @Resource private IDtBoardService dtBoardService; @ApiOperation(value = "æ°ååªççæ¿-è·å车é´åç»", notes = "æ°ååªççæ¿-è·å车é´åç»") @GetMapping("/productionList") public Result<?> productionList() { List<MdcProduction> result = dtBoardService.productionList(); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æåº¦å©ç¨ç", notes = "æ°ååªççæ¿-è®¾å¤æåº¦å©ç¨ç") @GetMapping("/equipmentMonthUtilizationRate") public Result<?> equipmentMonthUtilizationRate(@ApiParam(value = "productionId", required = true) String productionId) { List<EquUtilRateMonth> result = dtBoardService.equipmentMonthUtilizationRate(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤å©ç¨ç", notes = "æ°ååªççæ¿-设å¤å©ç¨ç") @GetMapping("/equipmentUtilizationRate") public Result<?> equipmentUtilizationRate(@ApiParam(value = "productionId", required = true) String productionId) { List<EquUtilRate> result = dtBoardService.equipmentUtilizationRate(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-æåº¦OEE", notes = "æ°ååªççæ¿-æåº¦OEE") @GetMapping("/equipmentMonthOee") public Result<?> equipmentMonthOee(@ApiParam(value = "productionId", required = true) String productionId) { List<EquOeeMonth> result = dtBoardService.equipmentMonthOee(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤è¿è¡ç¶æç»è®¡", notes = "æ°ååªççæ¿-设å¤è¿è¡ç¶æ") @GetMapping("/equipmentOperationStatistics") public Result<?> equipmentOperationStatistics(@ApiParam(value = "productionId", required = true) String productionId) { EquOperation result = dtBoardService.equipmentOperationStatistics(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤ä¿¡æ¯", notes = "æ°ååªççæ¿-设å¤ä¿¡æ¯") @GetMapping("/equipmentRunInfo") public Result<?> equipmentRunInfo(@ApiParam(value = "equipmentId", required = true) String equipmentId) { List<EquRunInfo> result = dtBoardService.equipmentRunInfo(equipmentId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-设å¤åæºç»è®¡", notes = "æ°ååªççæ¿-设å¤åæºç»è®¡") @GetMapping("/equDowntimeStatistics") public Result<?> equDowntimeStatistics(@ApiParam(value = "productionId", required = true) String productionId) { List<EquDowntimeInfo> result = dtBoardService.equDowntimeStatistics(productionId); return Result.OK(result); } @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æ¥è¦", notes = "æ°ååªççæ¿-è®¾å¤æ¥è¦") @GetMapping("/equAlarmList") public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) { List<EquAlarm> result = dtBoardService.equAlarmList(productionId); return Result.OK(result); } // @ApiOperation(value = "æ°ååªççæ¿-è®¾å¤æ é", notes = "æ°ååªççæ¿-è®¾å¤æ é") // @GetMapping("/equAlarmList") // public Result<?> equAlarmList(@ApiParam(value = "productionId", required = true) String productionId) { // dtBoardService. // } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/IDtBoardService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,30 @@ package org.jeecg.modules.board.service; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.system.entity.MdcProduction; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ public interface IDtBoardService { List<MdcProduction> productionList(); List<EquUtilRateMonth> equipmentMonthUtilizationRate(String productionId); List<EquUtilRate> equipmentUtilizationRate(String productionId); List<EquOeeMonth> equipmentMonthOee(String productionId); EquOperation equipmentOperationStatistics(String productionId); List<EquRunInfo> equipmentRunInfo(String equipmentId); List<EquDowntimeInfo> equDowntimeStatistics(String productionId); List<EquAlarm> equAlarmList(String productionId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/service/impl/DtBoardServiceImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,340 @@ package org.jeecg.modules.board.service.impl; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import liquibase.pro.packaged.I; import org.apache.commons.lang3.StringUtils; import org.jeecg.common.constant.CommonConstant; import org.jeecg.common.system.vo.DictModel; import org.jeecg.modules.board.service.IDtBoardService; import org.jeecg.modules.board.vo.*; import org.jeecg.modules.mdc.constant.MdcConstant; import org.jeecg.modules.mdc.entity.*; import org.jeecg.modules.mdc.service.*; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.system.entity.MdcProduction; import org.jeecg.modules.system.service.IMdcProductionService; import org.jeecg.modules.system.service.ISysDictService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.math.BigDecimal; import java.math.RoundingMode; import java.time.LocalDate; import java.util.*; import java.util.stream.Collectors; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Service public class DtBoardServiceImpl implements IDtBoardService { @Resource private IMdcProductionService mdcProductionService; @Resource private IMdcEquipmentService mdcEquipmentService; @Resource private IMdcEquipmentStatisticalInfoService mdcEquipmentStatisticalInfoService; @Resource private IMdcOeeInfoService mdcOeeInfoService; @Resource private IEquipmentService equipmentService; @Resource private IEquipmentWorkLineService equipmentWorkLineService; @Resource private IMdcDriveTypeParamConfigService mdcDriveTypeParamConfigService; @Resource private ISysDictService sysDictService; @Resource private IMdcDowntimeService mdcDowntimeService; @Resource private IEquipmentAlarmService equipmentAlarmService; @Resource private IMdcAlarmInfoService mdcAlarmInfoService; /** * 车é´ä¿¡æ¯ */ @Override public List<MdcProduction> productionList() { return mdcProductionService.list(new LambdaQueryWrapper<MdcProduction>().eq(MdcProduction::getOrgType, CommonConstant.ORG_TYPE_2).eq(MdcProduction::getDelFlag, CommonConstant.DEL_FLAG_0).orderByAsc(MdcProduction::getProductionOrder)); } /** * è®¾å¤æåº¦å©ç¨ç */ @Override public List<EquUtilRateMonth> equipmentMonthUtilizationRate(String productionId) { // ç»è£ è¿åæ°æ® LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); List<String> monthBetween = DateUtils.getMonthBetween(start, end); Map<String, EquUtilRateMonth> resultMap = monthBetween.stream().collect(Collectors.toMap( date -> date, date -> new EquUtilRateMonth(date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"), (existing, replacement) -> existing, // å¤çé®å²çªçå并彿°ï¼é常ä¸ä¼å²çªï¼ LinkedHashMap::new // æå®ä½¿ç¨LinkedHashMapä¿ææå ¥é¡ºåº )); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return new ArrayList<>(resultMap.values()); } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return new ArrayList<>(resultMap.values()); } for (String month : monthBetween) { MdcEquipmentStatisticalInfo mdcEquipmentStatisticalInfo = mdcEquipmentStatisticalInfoService.findByEquIdsAndMonth(equipmentIdList, month.replaceAll("-", "")); if (mdcEquipmentStatisticalInfo != null) { if (resultMap.containsKey(month)) { EquUtilRateMonth equUtilRateMonth = resultMap.get(month); if (mdcEquipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { equUtilRateMonth.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); } resultMap.put(month, equUtilRateMonth); } } } return new ArrayList<>(resultMap.values()); } /** * 设å¤å©ç¨ç(æ¨å¤©) */ @Override public List<EquUtilRate> equipmentUtilizationRate(String productionId) { List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } Map<String, EquUtilRate> resultMap = new LinkedHashMap<>(); equipmentIdList.forEach(equipmentId -> { EquUtilRate equUtilRate = new EquUtilRate(equipmentId); resultMap.put(equipmentId, equUtilRate); }); String yesterday = LocalDate.now().plusDays(-1).toString(); List<MdcEquipmentStatisticalInfo> mdcEquipmentStatisticalInfoList = mdcEquipmentStatisticalInfoService.findByEquipmentAndDate(equipmentIdList, yesterday.replaceAll("-", "")); if (mdcEquipmentStatisticalInfoList != null && !mdcEquipmentStatisticalInfoList.isEmpty()) { mdcEquipmentStatisticalInfoList.forEach(mdcEquipmentStatisticalInfo -> { if (resultMap.containsKey(mdcEquipmentStatisticalInfo.getEquipmentId())) { EquUtilRate equUtilRate = resultMap.get(mdcEquipmentStatisticalInfo.getEquipmentId()); if (mdcEquipmentStatisticalInfo.getProcessLong().compareTo(BigDecimal.ZERO) > 0) { equUtilRate.setUtilizationRate(mdcEquipmentStatisticalInfo.getProcessLong().divide(new BigDecimal("864"), 2, RoundingMode.HALF_UP)); } resultMap.put(mdcEquipmentStatisticalInfo.getEquipmentId(), equUtilRate); } }); } return new ArrayList<>(resultMap.values()); } /** * æåº¦è®¾å¤ç»¼åæç */ @Override public List<EquOeeMonth> equipmentMonthOee(String productionId) { LocalDate now = LocalDate.now(); Date start = DateUtils.toDate(now.plusMonths(-12).toString(), DateUtils.STR_DATE); Date end = DateUtils.toDate(now.plusMonths(-1).toString(), DateUtils.STR_DATE); List<String> monthBetween = DateUtils.getMonthBetween(start, end); Map<String, EquOeeMonth> resultMap = monthBetween.stream().collect(Collectors.toMap( date -> date, date -> new EquOeeMonth(date.substring(date.lastIndexOf("-") + 1).replaceFirst("^0*", "") + "æ"), (existing, replacement) -> existing, // å¤çé®å²çªçå并彿°ï¼é常ä¸ä¼å²çªï¼ LinkedHashMap::new // æå®ä½¿ç¨LinkedHashMapä¿ææå ¥é¡ºåº )); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return new ArrayList<>(resultMap.values()); } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return new ArrayList<>(resultMap.values()); } for (String month : monthBetween) { BigDecimal oee = mdcOeeInfoService.findByEquIdAndMonth(equipmentIdList, month); if (oee != null) { EquOeeMonth equOeeMonth = resultMap.get(month); equOeeMonth.setOee(oee.setScale(2, RoundingMode.HALF_UP)); resultMap.put(month, equOeeMonth); } } return new ArrayList<>(resultMap.values()); } /** * 设å¤ç¶æç»è®¡ */ @Override public EquOperation equipmentOperationStatistics(String productionId) { EquOperation equOperation = new EquOperation(); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return equOperation; } List<Equipment> equipmentList = equipmentService.listByProds(proIds); if (equipmentList == null || equipmentList.isEmpty()) { return equOperation; } for (Equipment equipment : equipmentList) { if (equipment.getOporation() != null) { switch (equipment.getOporation()) { case 1: case 2: equOperation.setStandby(equOperation.getStandby() + 1); break; case 3: equOperation.setRun(equOperation.getRun() + 1); break; case 22: equOperation.setAlarm(equOperation.getAlarm() + 1); break; default: equOperation.setShutdown(equOperation.getShutdown() + 1); break; } } else { equOperation.setShutdown(equOperation.getShutdown() + 1); } } return equOperation; } /** * 设å¤è¿è¡ä¿¡æ¯ */ @Override public List<EquRunInfo> equipmentRunInfo(String equipmentId) { List<EquRunInfo> equRunInfoList = new ArrayList<>(); Equipment equipment = equipmentService.findByEquId(equipmentId); if (equipment != null) { //å¡«å 设å¤åºç¡ä¿¡æ¯ equRunInfoList.add(new EquRunInfo("设å¤åç§°", equipment.getEquipmentname(), "")); equRunInfoList.add(new EquRunInfo("设å¤ç¼å·", equipment.getEquipmentid(), "")); if (equipment.getOporation() != null && equipment.getOporation() != 0) { String saveTableName = equipment.getSavetablename(); Map<String, Object> mapData = equipmentWorkLineService.getDataList(saveTableName); if (mapData != null) { //è·å MDC 驱å¨å¯¹åºçå±ç¤ºåæ° å¹¶æ ¹æ®key æ¼è£ ä» workData æ¥è¯¢çæ°æ® List<MdcDriveTypeParamConfig> mdcDriveTypeParamList = mdcDriveTypeParamConfigService.getShowDriveParam(equipment.getDrivetype()); if (mdcDriveTypeParamList != null && !mdcDriveTypeParamList.isEmpty()) { List<DictModel> dictItems = sysDictService.getDictItems(CommonConstant.DICT_EQUIPMENT_RUN_UNIT); Map<String, DictModel> resultMap = new HashMap<>(); dictItems.forEach(dictModel -> { resultMap.put(dictModel.getText(), dictModel); }); for (MdcDriveTypeParamConfig mdcDriveTypeParamConfig : mdcDriveTypeParamList) { EquRunInfo equRunInfo = new EquRunInfo(); String englishName = mdcDriveTypeParamConfig.getEnglishName(); String chineseName = mdcDriveTypeParamConfig.getChineseName(); equRunInfo.setKey(chineseName); if (mapData.containsKey(englishName)) { Object object = mapData.get(englishName); String value = ""; if ("CollectTime".equals(englishName)) { Date date = object == null ? null : (Date) object; value = DateUtils.format(date, DateUtils.STR_DATE_TIME_SMALL); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindlespeed".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´è½¬éåæ®µspindlespeed value = String.valueOf(((new Random().nextInt(35)) + 1) * 100); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindleload".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´è´è·å段spindleload value = String.valueOf(Integer.valueOf(new Random().nextInt(21))); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "spindlebeilv".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤ä¸»è½´åçåæ®µspindlebeilv value = String.valueOf((new Random().nextInt(13)) * 10); } else if ("ZUOLAN".equals(equipment.getDrivetype()) && "feedbeilv".equals(englishName) && equipment.getOporation() == 3) { // ZUOLAN设å¤è¿ç»åçåæ®µfeedbeilv value = String.valueOf((new Random().nextInt(13)) * 10); } else { value = object == null ? "" : object.toString(); } equRunInfo.setValue(value); // 设置åä½ if (resultMap.containsKey(chineseName)) { DictModel dictModel = resultMap.get(chineseName); equRunInfo.setUnit(dictModel.getValue()); } equRunInfoList.add(equRunInfo); } } } } } } return equRunInfoList; } /** * 设å¤åæºç»è®¡ */ @Override public List<EquDowntimeInfo> equDowntimeStatistics(String productionId) { List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } LocalDate end = LocalDate.now(); LocalDate start = end.plusDays(-30); List<EquDowntimeInfo> result = mdcDowntimeService.equDowntimeStatistics(equipmentIdList, start.toString(), end.toString()); result.forEach(equDowntimeInfo -> { equDowntimeInfo.setDuration(equDowntimeInfo.getDuration().setScale(2, RoundingMode.HALF_UP)); }); return result; } /** * è®¾å¤æ¥è¦å表 */ @Override public List<EquAlarm> equAlarmList(String productionId) { List<EquAlarm> result = new ArrayList<>(); List<String> proIds = mdcProductionService.findChildByProId(productionId); if (proIds == null || proIds.isEmpty()) { return null; } List<String> equipmentIdList = mdcEquipmentService.getEquIdsByProIds(proIds); if (equipmentIdList == null || equipmentIdList.isEmpty()) { return null; } List<EquipmentAlarm> equipmentAlarmList = equipmentAlarmService.list(new LambdaQueryWrapper<EquipmentAlarm>().in(EquipmentAlarm::getEquipmentid, equipmentIdList).orderByDesc(EquipmentAlarm::getCollecttime).isNotNull(EquipmentAlarm::getAlarmNo).last("TOP 15")); if (equipmentAlarmList == null || equipmentAlarmList.isEmpty()) { return null; } for (EquipmentAlarm equipmentAlarm : equipmentAlarmList) { MdcAlarmInfo mdcAlarmInfo = mdcAlarmInfoService.findAlarmContent(equipmentAlarm.getAlarmNo(), equipmentAlarm.getEquipmentid()); EquAlarm equAlarm = new EquAlarm(); equAlarm.setEquipmentId(equipmentAlarm.getEquipmentid()); if (mdcAlarmInfo != null) { equAlarm.setAlarmInfo(mdcAlarmInfo.getAlarmContent()); } else { equAlarm.setAlarmInfo(equipmentAlarm.getAlarmContent()); } result.add(equAlarm); } return result; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquAlarm.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,21 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-09 * @Description: è®¾å¤æ¥è¦ä¿¡æ¯ */ @Data public class EquAlarm { /** * 设å¤ç¼å· */ private String equipmentId; /** * æ¥è¦ä¿¡æ¯ */ private String alarmInfo; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquDowntimeInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-06-09 * @Description: 设å¤åæºç»è®¡ */ @Data public class EquDowntimeInfo { /** * åæºåå */ private String shutdownInfo; /** * åæºæ¶é¿ */ private BigDecimal duration; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOeeMonth.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquOeeMonth { private String month; private BigDecimal oee = BigDecimal.ZERO; public EquOeeMonth(String month) { this.month = month; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquOperation.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,16 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-06 * @Description: */ @Data public class EquOperation { private Integer shutdown = 0; private Integer alarm = 0; private Integer standby = 0; private Integer run = 0; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquRunInfo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,24 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-06 * @Description: */ @Data public class EquRunInfo { private String key; private String value; private String unit; public EquRunInfo() { } public EquRunInfo(String key, String value, String unit) { this.key = key; this.value = value; this.unit = unit; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquStatus.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,15 @@ package org.jeecg.modules.board.vo; import lombok.Data; /** * @Author: Lius * @CreateTime: 2025-06-05 * @Description: */ @Data public class EquStatus { private String equipmentId; private Integer state; private String plantName; } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRate.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquUtilRate { private String deviceNum; private BigDecimal utilizationRate = BigDecimal.ZERO; public EquUtilRate(String deviceNum) { this.deviceNum = deviceNum; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/board/vo/EquUtilRateMonth.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,20 @@ package org.jeecg.modules.board.vo; import lombok.Data; import java.math.BigDecimal; /** * @Author: Lius * @CreateTime: 2025-05-30 * @Description: */ @Data public class EquUtilRateMonth { private String month; private BigDecimal utilizationRate = BigDecimal.ZERO; public EquUtilRateMonth(String month) { this.month = month; } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeOperatorController.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,85 @@ package org.jeecg.modules.mdc.controller; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; import org.apache.shiro.SecurityUtils; import org.jeecg.common.api.vo.Result; import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import org.jeecg.modules.mdc.vo.SplitDowntimeVo; import org.springframework.web.bind.annotation.*; import javax.annotation.Resource; /** * @Description: æä½å·¥åæºå¾ æºè¡¨ * @Author: lius * @Date: 2025-03-12 */ @Slf4j @Api(tags = "æä½å·¥åæºå¾ æºè¡¨") @RestController @RequestMapping("/mdc/operator/mdcDowntime") public class MdcDowntimeOperatorController extends JeecgController<MdcDowntime, IMdcDowntimeOperatorService> { @Resource private IMdcDowntimeOperatorService mdcDowntimeService; /** * å页å表æ¥è¯¢ * * @param mdcDowntimeVo * @param pageNo * @param pageSize * @return */ @AutoLog(value = "å¾ æºåæºè¡¨-å页å表æ¥è¯¢") @ApiOperation(value = "å¾ æºåæºè¡¨-å页å表æ¥è¯¢", notes = "å¾ æºåæºè¡¨-å页å表æ¥è¯¢") @GetMapping(value = "/list") public Result<?> queryPageList(MdcDowntimeVo mdcDowntimeVo, @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo, @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); Page<MdcDowntimeDto> page = new Page<MdcDowntimeDto>(pageNo, pageSize); IPage<MdcDowntimeDto> pageList = mdcDowntimeService.pageList(mdcDowntimeVo, page); return Result.OK(pageList); } /** * ç»´æ¤åæº * * @param mdcDowntimeVo * @return */ @AutoLog(value = "å¾ æºåæºè¡¨-ç»´æ¤åæº") @ApiOperation(value = "å¾ æºåæºè¡¨-ç»´æ¤åæº", notes = "å¾ æºåæºè¡¨-ç»´æ¤åæº") @RequestMapping(value = "/updateReason", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<?> updateReason(@RequestBody MdcDowntimeVo mdcDowntimeVo) { mdcDowntimeService.updateReason(mdcDowntimeVo); return Result.OK("ç¼è¾æå!"); } /** * åæºæå * * @param splitDowntimeVo * @return */ @AutoLog(value = "å¾ æºåæºè¡¨-åæºæå") @ApiOperation(value = "å¾ æºåæºè¡¨-åæºæå", notes = "å¾ æºåæºè¡¨-åæºæå") @RequestMapping(value = "/splitDowntime", method = {RequestMethod.PUT, RequestMethod.POST}) public Result<?> splitDowntime(@RequestBody SplitDowntimeVo splitDowntimeVo) { mdcDowntimeService.splitDowntime(splitDowntimeVo); return Result.OK("æåæå!"); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcDowntimeReasonController.java
@@ -3,6 +3,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.beust.jcommander.internal.Lists; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.extern.slf4j.Slf4j; @@ -10,9 +11,9 @@ import org.jeecg.common.aspect.annotation.AutoLog; import org.jeecg.common.system.base.controller.JeecgController; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.mdc.dto.OptionsDto; import org.jeecg.modules.mdc.entity.MdcDowntimeReason; import org.jeecg.modules.mdc.service.IMdcDowntimeReasonService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.*; import org.springframework.web.servlet.ModelAndView; @@ -166,4 +167,24 @@ return Result.OK(result); } /** * åæºåå 䏿鿩 * * @return */ @AutoLog(value = "åæºåå 表-åæºåå 䏿鿩") @ApiOperation(value = "åæºåå 表-åæºåå 䏿鿩", notes = "åæºåå 表-åæºåå 䏿鿩") @GetMapping(value = "/reasonList") public Result<List<OptionsDto>> reasonList() { List<MdcDowntimeReason> result = mdcDowntimeReasonService.list(); List<OptionsDto> list = Lists.newArrayList(); result.forEach(mdcDowntimeReason -> { OptionsDto optionsDto = new OptionsDto(); optionsDto.setValue(mdcDowntimeReason.getId()); optionsDto.setLabel(mdcDowntimeReason.getDowntimeDescription()); list.add(optionsDto); }); return Result.OK(list); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/controller/MdcEquipmentController.java
@@ -111,6 +111,17 @@ } /** * æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤åè¡¨ä¿¡æ¯ */ @AutoLog(value = "设å¤è¡¨-æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤å表信æ¯") @ApiOperation(value = "设å¤è¡¨-æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤å表信æ¯", notes = "设å¤è¡¨-æ ¹æ®ç¨æ·æ¥è¯¢è®¾å¤å表信æ¯") @GetMapping(value = "/getEquipmentList") public Result<List<MdcEquipment>> getEquipmentList() { List<MdcEquipment> list = mdcEquipmentService.getEquipmentList(); return Result.OK(list); } /** * 设å¤çæ§å表 */ @AutoLog(value = "设å¤è¡¨-设å¤çæ§å表") lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/entity/MdcDowntime.java
@@ -81,5 +81,18 @@ @Excel(name = "夿³¨", width = 15) @ApiModelProperty(value = "夿³¨") private String remark; /** * å½å ¥ç±»å */ @Excel(name = "å½å ¥ç±»å", width = 15) @ApiModelProperty(value = "å½å ¥ç±»å") @Dict(dicCode = "enter_type") private Integer enterType; /** * åæºæ¶é¿ */ @Excel(name = "åæºæ¶é¿", width = 15) @ApiModelProperty(value = "åæºæ¶é¿") private Integer shutdownDuration; } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/RunningOverallEquipmentEfficiencyJob.java
ÎļþÒÑɾ³ý lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/ScanDowntimeJob.java
@@ -90,6 +90,7 @@ downtime.setTheDate(finalDate); downtime.setStartDate(mdcEquipmentWaitSectionDto.getStartTime()); downtime.setEndDate(mdcEquipmentWaitSectionDto.getEndTime()); downtime.setShutdownDuration(DateUtils.differentMinutes(downtime.getStartDate(), downtime.getEndDate())); return downtime; }).collect(Collectors.toList()); if (!downtimeList.isEmpty()) { lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/job/WebsocketPushEquStatusJob.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,108 @@ package org.jeecg.modules.mdc.job; import com.alibaba.fastjson.JSONObject; import lombok.extern.slf4j.Slf4j; import org.jeecg.common.constant.WebsocketConst; import org.jeecg.common.util.RedisUtil; import org.jeecg.modules.board.vo.EquStatus; import org.jeecg.modules.mdc.entity.Equipment; import org.jeecg.modules.mdc.service.IEquipmentService; import org.jeecg.modules.mdc.util.ThrowableUtil; import org.jeecg.modules.message.websocket.WebSocket; import org.jeecg.modules.quartz.entity.QuartzJob; import org.jeecg.modules.quartz.entity.SysQuartzLog; import org.jeecg.modules.quartz.service.IQuartzJobService; import org.jeecg.modules.quartz.service.ISysQuartzLogService; import org.jeecg.modules.system.service.IMdcProductionService; import org.quartz.*; import javax.annotation.Resource; import java.util.ArrayList; import java.util.Date; import java.util.List; /** * @Author: Lius * @CreateTime: 2025-06-05 * @Description: websocketæ¨é设å¤ç¶æä»»å¡ */ @DisallowConcurrentExecution @Slf4j public class WebsocketPushEquStatusJob implements Job { @Resource private IQuartzJobService quartzJobService; @Resource private ISysQuartzLogService sysQuartzLogService; @Resource private RedisUtil redisUtil; @Resource private WebSocket webSocket; @Resource private IEquipmentService equipmentService; @Resource private IMdcProductionService mdcProductionService; final private static String redisKey = "board:equipment:status:"; @Override public void execute(JobExecutionContext context) throws JobExecutionException { SysQuartzLog quartzLog = new SysQuartzLog(); quartzLog.setCreateTime(new Date()); List<QuartzJob> byJobClassName = this.quartzJobService.findByJobClassName(this.getClass().getName()); if (byJobClassName != null && !byJobClassName.isEmpty()) { quartzLog.setJobId(byJobClassName.get(0).getId()); } long startTime = System.currentTimeMillis(); try { List<Equipment> equipmentList = equipmentService.list(); if (equipmentList != null && !equipmentList.isEmpty()) { List<EquStatus> equStatusList = new ArrayList<>(); for (Equipment equipment : equipmentList) { if (equipment.getOporation() == null) { equipment.setOporation(0); } String key = redisKey + equipment.getEquipmentid(); if (redisUtil.hasKey(key)) { Integer status = (Integer) redisUtil.get(key); if (!status.equals(equipment.getOporation())) { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // éè¿equipmentIdè·å设å¤è½¦é´åç§° String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } else { EquStatus equStatus = new EquStatus(); equStatus.setEquipmentId(equipment.getEquipmentid()); equStatus.setState(equipment.getOporation()); // éè¿equipmentIdè·å设å¤è½¦é´åç§° String productionName = mdcProductionService.findProName(equipment.getEquipmentid()); equStatus.setPlantName(productionName); equStatusList.add(equStatus); redisUtil.set(key, equipment.getOporation()); } } JSONObject jsonObject = new JSONObject(); jsonObject.put(WebsocketConst.MSG_CMD, "equStatus"); jsonObject.put("data", equStatusList); webSocket.sendMessage(jsonObject.toJSONString()); } quartzLog.setIsSuccess(0); } catch (Exception e) { quartzLog.setIsSuccess(-1); quartzLog.setExceptionDetail(ThrowableUtil.getStackTrace(e)); } long endTime = System.currentTimeMillis(); quartzLog.setExecutionTime(Integer.parseInt(String.valueOf(endTime - startTime))); sysQuartzLogService.save(quartzLog); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcAlarmInfoMapper.java
@@ -1,6 +1,7 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.entity.MdcAlarmInfo; /** @@ -11,4 +12,5 @@ */ public interface MdcAlarmInfoMapper extends BaseMapper<MdcAlarmInfo> { MdcAlarmInfo findAlarmContent(@Param("alarmNo") String alarmNo, @Param("equipmentId") String equipmentId); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeMapper.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; @@ -20,4 +21,6 @@ IPage<MdcDowntimeDto> pageList(Page<MdcDowntimeDto> page, @Param("mdcDowntimeVo") MdcDowntimeVo mdcDowntimeVo); List<MdcDowntime> findPlanTimeDuration(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate, @Param("closeType") String closeType); List<EquDowntimeInfo> equDowntimeStatistics(@Param("equipmentIdList") List<String> equipmentIdList, @Param("start") String start, @Param("end") String end); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcDowntimeOperatorMapper.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package org.jeecg.modules.mdc.mapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import org.apache.ibatis.annotations.Param; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import java.util.List; /** * @Description: æä½å·¥å¾ æºåæºè¡¨ * @Author: lius * @Date: 2025-03-12 */ public interface MdcDowntimeOperatorMapper extends BaseMapper<MdcDowntime> { IPage<MdcDowntimeDto> page(Page<MdcDowntimeDto> page, @Param(Constants.WRAPPER) QueryWrapper<MdcDowntimeDto> queryWrapper); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcEquipmentStatisticalInfoMapper.java
@@ -5,6 +5,8 @@ import org.jeecg.modules.mdc.dto.MdcEquipmentStatisticalDto; import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import java.util.List; /** * @Description: 设å¤åæ¥è¿è¡æ°æ®è¡¨ * @Author: jeecg-boot @@ -28,4 +30,8 @@ Integer selectProcessLong(@Param("equipmentId") String equipmentId, @Param("validDate") String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(@Param("equipmentId") String equipmentId, @Param("date") String date); MdcEquipmentStatisticalInfo findByEquIdsAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(@Param("equipmentIdList") List<String> equipmentIdList, @Param("date") String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/MdcOeeInfoMapper.java
@@ -7,6 +7,9 @@ import org.jeecg.modules.mdc.entity.MdcOeeInfo; import org.jeecg.modules.mdc.vo.MdcOeeInfoVo; import java.math.BigDecimal; import java.util.List; /** * @Description: OEE表 * @Author: lius @@ -22,4 +25,6 @@ * @return */ IPage<MdcOeeInfo> pageList(Page<MdcOeeInfo> page, @Param("mdcOeeInfoVo") MdcOeeInfoVo mdcOeeInfoVo); BigDecimal findByEquIdAndMonth(@Param("equipmentIdList") List<String> equipmentIdList, @Param("month") String month); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcAlarmInfoMapper.xml
@@ -2,4 +2,13 @@ <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.MdcAlarmInfoMapper"> <select id="findAlarmContent" resultType="org.jeecg.modules.mdc.entity.MdcAlarmInfo"> SELECT t1.* FROM mdc_alarm_info t1 LEFT JOIN mdc_equipment t2 ON t1.drive_type = t2.drive_type WHERE t2.equipment_id = #{equipmentId} AND t1.alarm_code = #{alarmNo} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeMapper.xml
@@ -40,4 +40,24 @@ AND t2.downtime_type = #{closeType} AND t1.the_date = #{validDate} </select> <select id="equDowntimeStatistics" resultType="org.jeecg.modules.board.vo.EquDowntimeInfo"> SELECT t2.downtime_description AS shutdown_info, SUM ( DATEDIFF( SECOND, t1.start_date, t1.end_date ) ) / 3600.0 AS duration_hours FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id WHERE t1.reason_id != '' AND t1.the_date BETWEEN #{start} AND #{end} AND t1.equipment_id IN <foreach collection="equipmentIdList" item="equipmentId" index="index" open="(" close=")" separator=","> #{ equipmentId } </foreach> GROUP BY t2.downtime_description ORDER BY duration_hours DESC </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcDowntimeOperatorMapper.xml
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace="org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper"> <select id="page" resultType="org.jeecg.modules.mdc.dto.MdcDowntimeDto"> SELECT t1.* , t2.downtime_type downtimeType, t2.downtime_description downtimeDescription FROM mdc_downtime t1 LEFT JOIN mdc_downtime_reason t2 ON t1.reason_id = t2.id ${ew.customSqlSegment} ORDER BY t1.create_time DESC </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcEquipmentStatisticalInfoMapper.xml
@@ -26,4 +26,34 @@ WHERE equipment_id = #{equipmentId} AND the_date LIKE CONCAT(#{date}, '%') </select> <select id="findByEquIdsAndMonth" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT AVG(open_long) openLong, AVG(close_long) closeLong, AVG(wait_long) waitLong, AVG(process_long) processLong, AVG(error_long) errorLong FROM mdc_equipment_statistical_info WHERE equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> AND the_date LIKE CONCAT(#{month}, '%') </select> <select id="findByEquipmentAndDate" resultType="org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo"> SELECT * FROM mdc_equipment_statistical_info WHERE equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> AND the_date = #{date} </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/mapper/xml/MdcOeeInfoMapper.xml
@@ -27,4 +27,17 @@ </where> ORDER BY the_date DESC, equipment_id ASC </select> <select id="findByEquIdAndMonth" resultType="java.math.BigDecimal"> SELECT AVG(oee) FROM mdc_oee_info WHERE the_date LIKE CONCAT(#{month}, '%') AND equipment_id IN <foreach collection="equipmentIdList" item="id" index="index" open="(" close=")" separator=","> #{ id } </foreach> </select> </mapper> lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeOperatorService.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,23 @@ package org.jeecg.modules.mdc.service; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import org.jeecg.modules.mdc.vo.SplitDowntimeVo; /** * @Description: æä½å·¥å¾ æºåæºè¡¨ * @Author: lius * @Date: 2025-03-12 */ public interface IMdcDowntimeOperatorService extends IService<MdcDowntime> { IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page); void updateReason(MdcDowntimeVo mdcDowntimeVo); void splitDowntime(SplitDowntimeVo splitDowntimeVo); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcDowntimeService.java
@@ -3,11 +3,13 @@ import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.IService; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import javax.servlet.http.HttpServletRequest; import java.util.List; /** * @Description: å¾ æºåæºè¡¨ @@ -35,4 +37,6 @@ * @return */ Integer findPlanTimeDuration(String equipmentId, String validDate, String closeType); List<EquDowntimeInfo> equDowntimeStatistics(List<String> equipmentIdList, String start, String end); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcEquipmentStatisticalInfoService.java
@@ -4,6 +4,8 @@ import org.jeecg.modules.mdc.entity.MdcEquipmentStatisticalInfo; import com.baomidou.mybatisplus.extension.service.IService; import java.util.List; /** * @Description: 设å¤åæ¥è¿è¡æ°æ®è¡¨ * @Author: lius @@ -29,4 +31,8 @@ Integer selectProcessLong(String equipmentId, String validDate); MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date); MdcEquipmentStatisticalInfo findByEquIdsAndMonth(List<String> equipmentIdList, String month); List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(List<String> equipmentIdList, String date); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/IMdcOeeInfoService.java
@@ -9,6 +9,8 @@ import org.springframework.web.servlet.ModelAndView; import javax.servlet.http.HttpServletRequest; import java.math.BigDecimal; import java.util.List; /** * @Description: OEE表 @@ -44,4 +46,5 @@ */ void computeOee(MdcOeeComputeVo mdcOeeComputeVo); BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month); } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcAlarmInfoServiceImpl.java
@@ -15,4 +15,8 @@ @Service public class MdcAlarmInfoServiceImpl extends ServiceImpl<MdcAlarmInfoMapper, MdcAlarmInfo> implements IMdcAlarmInfoService { @Override public MdcAlarmInfo findAlarmContent(String alarmNo, String equipmentId) { return this.baseMapper.findAlarmContent(alarmNo, equipmentId); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceImpl.java
@@ -4,6 +4,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.apache.commons.lang3.StringUtils; import org.jeecg.modules.board.vo.EquDowntimeInfo; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.mapper.MdcDowntimeMapper; @@ -68,6 +69,11 @@ return result; } @Override public List<EquDowntimeInfo> equDowntimeStatistics(List<String> equipmentIdList, String start, String end) { return this.baseMapper.equDowntimeStatistics(equipmentIdList, start, end); } private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) { if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) { return Collections.singletonList(mdcDowntimeVo.getEquipmentId()); lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcDowntimeServiceOperatorImpl.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,171 @@ package org.jeecg.modules.mdc.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.toolkit.CollectionUtils; import com.baomidou.mybatisplus.core.toolkit.IdWorker; import com.baomidou.mybatisplus.core.toolkit.StringPool; 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.beust.jcommander.internal.Lists; import org.apache.commons.lang3.StringUtils; import org.apache.shiro.SecurityUtils; import org.jeecg.common.exception.JeecgBootException; import org.jeecg.common.system.vo.LoginUser; import org.jeecg.modules.mdc.dto.MdcDowntimeDto; import org.jeecg.modules.mdc.entity.MdcDowntime; import org.jeecg.modules.mdc.mapper.MdcDowntimeOperatorMapper; import org.jeecg.modules.mdc.service.IMdcDowntimeOperatorService; import org.jeecg.modules.mdc.service.IMdcEquipmentService; import org.jeecg.modules.mdc.util.DateUtils; import org.jeecg.modules.mdc.vo.MdcDowntimeVo; import org.jeecg.modules.mdc.vo.SplitDowntimeVo; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.*; /** * @Description: æä½å·¥å¾ æºåæºè¡¨ * @Author: lius * @Date: 2025-03-12 */ @Service public class MdcDowntimeServiceOperatorImpl extends ServiceImpl<MdcDowntimeOperatorMapper, MdcDowntime> implements IMdcDowntimeOperatorService { @Resource private IMdcEquipmentService mdcEquipmentService; @Override public IPage<MdcDowntimeDto> pageList(MdcDowntimeVo mdcDowntimeVo, Page<MdcDowntimeDto> page) { LoginUser user = (LoginUser) SecurityUtils.getSubject().getPrincipal(); String userId = user.getId(); // è·å设å¤IDå表 List<String> equipmentIds = Lists.newArrayList(); if (StringUtils.isNotBlank(user.getEquipmentIds())) { equipmentIds = Arrays.asList(user.getEquipmentIds().split(StringPool.COMMA)); }else { equipmentIds = getEquipmentIds(userId, mdcDowntimeVo); } // å¦æè®¾å¤IDå表为空ï¼ç´æ¥è¿å空å页 if (equipmentIds == null || equipmentIds.isEmpty()) { return new Page<>(page.getCurrent(), page.getSize(), 0); } QueryWrapper<MdcDowntimeDto> queryWrapper = Wrappers.query(); if (CollectionUtils.isNotEmpty(equipmentIds)) { queryWrapper.in("t1.equipment_id", equipmentIds); } if (StringUtils.isNotBlank(mdcDowntimeVo.getEquipmentId())) { queryWrapper.eq("t1.equipment_id", mdcDowntimeVo.getEquipmentId()); } if (Objects.nonNull(mdcDowntimeVo.getStartDate())) { queryWrapper.ge("t1.start_date", mdcDowntimeVo.getStartDate()); } if (Objects.nonNull(mdcDowntimeVo.getEndDate())) { queryWrapper.le("t1.end_date", mdcDowntimeVo.getEndDate()); } if (StringUtils.isNotBlank(mdcDowntimeVo.getDowntimeDescription())) { queryWrapper.eq("t2.id", mdcDowntimeVo.getDowntimeDescription()); } return this.baseMapper.page(page, queryWrapper); } @Override @Transactional(rollbackFor = {Exception.class}) public void updateReason(MdcDowntimeVo mdcDowntimeVo) { if (StringUtils.isEmpty(mdcDowntimeVo.getDownTimeIds())) { throw new JeecgBootException("è¯·éæ©éè¦ç»´æ¤åæºçæ°æ®"); } List<MdcDowntime> mdcDowntimeList = this.listByIds(Arrays.asList(mdcDowntimeVo.getDownTimeIds().split(StringPool.COMMA))); mdcDowntimeList.forEach(mdcDowntime -> { mdcDowntime.setReasonId(mdcDowntimeVo.getReasonId()); }); this.updateBatchById(mdcDowntimeList); } @Transactional(rollbackFor = {Exception.class}) @Override public void splitDowntime(SplitDowntimeVo splitDowntimeVo) { if (StringUtils.isBlank(splitDowntimeVo.getId())) { throw new JeecgBootException("è¯·éæ©éè¦æååæºçæ°æ®"); } MdcDowntime mdcDowntime = this.getById(splitDowntimeVo.getId()); if (StringUtils.isNotBlank(mdcDowntime.getReasonId())) { throw new JeecgBootException("å·²è®¾ç½®åæºåå ï¼æ æ³æååæº"); } //æ¯è¾æå䏿®µçæ¥ææ¯å¦ååºé´èå´å ï¼å¼å§æ¶é´ï¼startTime ç»ææ¶é´ï¼å ¥æ äºæ®µæ¶é´ï¼ååendTimeï¼ if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) { //æ ¡éªä¸æ®µæ¥ææ¯å¦å¤§äºstartTimeï¼å¦ï¼æåºå¼å¸¸ if (Objects.isNull(splitDowntimeVo.getSecondMiddleTime())) { if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) { throw new JeecgBootException("æå䏿®µæ¶é´æªå¨å¼å§æ¶é´åç»ææ¶é´ä¹å ï¼è¯·æ£æ¥ï¼"); } }else { if (splitDowntimeVo.getStartDate().compareTo(splitDowntimeVo.getFirstMiddleTime()) != -1 || splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1) { throw new JeecgBootException("æå䏿®µæ¶é´æªå¨å¼å§æ¶é´åæåäºæ®µç»ææ¶é´ä¹å ï¼è¯·æ£æ¥ï¼"); } } }else { throw new JeecgBootException("è¯·ç»´æ¤æå䏿®µç»ææ¶é´"); } if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) { //æ ¡éªäºæ®µæ¥ææ¯å¦åå¨äºä¸æ®µæ¥æåendTimeä¹é´ if (splitDowntimeVo.getFirstMiddleTime().compareTo(splitDowntimeVo.getSecondMiddleTime()) != -1 || splitDowntimeVo.getSecondMiddleTime().compareTo(splitDowntimeVo.getEndDate()) != -1) { throw new JeecgBootException("æåäºæ®µæ¶é´æªå¨æå䏿®µç»ææ¶é´åç»ææ¶é´ä¹å ï¼è¯·æ£æ¥ï¼"); } } List<MdcDowntime> list = Lists.newArrayList(); //设置æå1段 if (Objects.nonNull(splitDowntimeVo.getFirstMiddleTime())) { list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getStartDate(), splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getFirstDowntimeDescription())); } //设置æå2段ï¼äºæ®µä¸åå¨åå°endDateä½ä¸ºæåäºæ®µ if (Objects.nonNull(splitDowntimeVo.getSecondMiddleTime())) { list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getSecondDowntimeDescription())); list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getSecondMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription())); }else { list.add(checkMdcDowntime(mdcDowntime, splitDowntimeVo.getFirstMiddleTime(), splitDowntimeVo.getEndDate(), splitDowntimeVo.getThirdDowntimeDescription())); } //ä¿åæåæ°æ®å¹¶å é¤åææ°æ® if (this.saveBatch(list)) { this.removeById(mdcDowntime); } } private MdcDowntime checkMdcDowntime(MdcDowntime mdcDowntime, Date startDate, Date endDate, String downtimeDescription) { MdcDowntime mdcDowntimeInfo = new MdcDowntime(); BeanUtil.copyProperties(mdcDowntime, mdcDowntimeInfo); mdcDowntimeInfo.setId(IdWorker.getIdStr()); mdcDowntimeInfo.setStartDate(startDate); mdcDowntimeInfo.setEndDate(endDate); mdcDowntimeInfo.setShutdownDuration(DateUtils.differentMinutes(startDate, endDate)); mdcDowntimeInfo.setEnterType(2); mdcDowntimeInfo.setReasonId(StringUtils.isNotBlank(downtimeDescription) ? downtimeDescription : StringPool.EMPTY); return mdcDowntimeInfo; } private List<String> getEquipmentIds(String userId, MdcDowntimeVo mdcDowntimeVo) { if (StringUtils.isNotEmpty(mdcDowntimeVo.getEquipmentId())) { return Collections.singletonList(mdcDowntimeVo.getEquipmentId()); } return mdcEquipmentService.getEquipmentIdsProduction(userId, null); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcEquipmentStatisticalInfoServiceImpl.java
@@ -323,4 +323,14 @@ public MdcEquipmentStatisticalDto findByEquipmentAndMonth(String equipmentId, String date) { return this.baseMapper.findByEquipmentAndMonth(equipmentId, date); } @Override public MdcEquipmentStatisticalInfo findByEquIdsAndMonth(List<String> equipmentIdList, String month) { return this.baseMapper.findByEquIdsAndMonth(equipmentIdList, month); } @Override public List<MdcEquipmentStatisticalInfo> findByEquipmentAndDate(List<String> equipmentIdList, String date) { return this.baseMapper.findByEquipmentAndDate(equipmentIdList, date); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/service/impl/MdcOeeInfoServiceImpl.java
@@ -243,4 +243,9 @@ super.saveBatch(result); } @Override public BigDecimal findByEquIdAndMonth(List<String> equipmentIdList, String month) { return this.baseMapper.findByEquIdAndMonth(equipmentIdList, month); } } lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/MdcDowntimeVo.java
@@ -31,6 +31,16 @@ private String parentId; /** * åæºåå */ private String downtimeDescription; /** * åæºids */ private String downTimeIds; /** * 设å¤ids */ private List<String> equipmentIdList; lxzn-module-mdc/src/main/java/org/jeecg/modules/mdc/vo/SplitDowntimeVo.java
¶Ô±ÈÐÂÎļþ @@ -0,0 +1,70 @@ package org.jeecg.modules.mdc.vo; import com.fasterxml.jackson.annotation.JsonFormat; import io.swagger.annotations.ApiModelProperty; import lombok.Data; import org.springframework.format.annotation.DateTimeFormat; import java.util.Date; /** * åæºæåæä½å ¥å */ @Data public class SplitDowntimeVo { /** * åæºæåid */ private String id; /** * å¼å§æ¶é´ */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "å¼å§æ¶é´") private Date startDate; /** * æå1æ®µç»ææ¶é´ */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "æå1段å¼å§æ¶é´") private Date firstMiddleTime; /** * æå1æ®µåæºåå */ @ApiModelProperty(value = "æå1æ®µåæºåå ") private String firstDowntimeDescription; /** * æå2æ®µç»ææ¶é´ */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "æå2段å¼å§æ¶é´") private Date secondMiddleTime; /** * æå2æ®µåæºåå */ @ApiModelProperty(value = "æå2æ®µåæºåå ") private String secondDowntimeDescription; /** * ç»ææ¶é´ */ @JsonFormat(timezone = "GMT+8", pattern = "yyyy-MM-dd HH:mm:ss") @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") @ApiModelProperty(value = "ç»ææ¶é´") private Date endDate; /** * æå3æ®µåæºåå */ @ApiModelProperty(value = "æå3æ®µåæºåå ") private String thirdDowntimeDescription; } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/cas/controller/CasClientController.java
@@ -74,7 +74,7 @@ log.info("-------token----username---"+principal); //1. æ ¡éªç¨æ·æ¯å¦ææ SysUser sysUser = sysUserService.getUserByName(principal); result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, null); if(!result.isSuccess()) { return result; } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/message/websocket/WebSocket.java
@@ -2,6 +2,9 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; import javax.annotation.Resource; import javax.websocket.*; import javax.websocket.server.PathParam; @@ -23,7 +26,7 @@ @Slf4j @ServerEndpoint("/websocket/{userId}") public class WebSocket { /**线ç¨å®å ¨Map*/ private static ConcurrentHashMap<String, Session> sessionPool = new ConcurrentHashMap<>(); @@ -34,14 +37,23 @@ @Resource private JeecgRedisClient jeecgRedisClient; private ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1); //==========ãwebsocketæ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å ·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== @OnOpen public void onOpen(Session session, @PathParam(value = "userId") String userId) { try { sessionPool.put(userId, session); log.info("ãç³»ç» WebSocketãææ°çè¿æ¥ï¼æ»æ°ä¸º:" + sessionPool.size()); // å¯å¨å¿è·³ä»»å¡ï¼æ¯åéåé䏿¬¡å¿è·³æ¶æ¯ // scheduler.scheduleAtFixedRate(() -> { // pushMessage(userId, "{\"cmd\":\"" + WebsocketConst.CMD_USER + "\",\"txt\":\"" + "å¿è·³ååº" + "\"}"); // }, 0, 1, TimeUnit.MINUTES); } catch (Exception e) { log.error("ãç³»ç» WebSocketãonOpen å¼å¸¸", e); } } @@ -50,6 +62,8 @@ try { sessionPool.remove(userId); log.info("ãç³»ç» WebSocketãè¿æ¥æå¼ï¼æ»æ°ä¸º:" + sessionPool.size()); // åæ¶å¿è·³ä»»å¡ scheduler.shutdown(); } catch (Exception e) { e.printStackTrace(); } @@ -93,12 +107,11 @@ log.error(e.getMessage(), e); } } log.info("ãç³»ç» WebSocketãç¾¤åæ¶æ¯:" + message); log.info("ã3D宿¶æ°æ® WebSocketãæ¶æ¯" ); } catch (Exception e) { log.error(e.getMessage(), e); } } /** * wsæ¥å客æ·ç«¯æ¶æ¯ @@ -110,14 +123,14 @@ }else{ log.debug("ãç³»ç» WebSocketãæ¶å°å®¢æ·ç«¯æ¶æ¯:" + message); } //------------------------------------------------------------------------------ JSONObject obj = new JSONObject(); //ä¸å¡ç±»å obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); //æ¶æ¯å 容 obj.put(WebsocketConst.MSG_TXT, "å¿è·³ååº"); this.pushMessage(userId, obj.toJSONString()); // JSONObject obj = new JSONObject(); // //ä¸å¡ç±»å // obj.put(WebsocketConst.MSG_CMD, WebsocketConst.CMD_CHECK); // //æ¶æ¯å 容 // obj.put(WebsocketConst.MSG_TXT, "å¿è·³ååº"); // this.pushMessage(userId, obj.toJSONString()); //------------------------------------------------------------------------------ } @@ -129,11 +142,11 @@ */ @OnError public void onError(Session session, Throwable t) { log.warn("ãç³»ç» WebSocketãæ¶æ¯åºç°é误"); log.warn("ãç³»ç» WebSocketãæ¶æ¯åºç°é误",t); //t.printStackTrace(); } //==========ãç³»ç» WebSocketæ¥åãæ¨éæ¶æ¯çæ¹æ³ ââ å ·ä½æå¡èç¹æ¨éwsæ¶æ¯ã======================================================================================== //==========ãéç¨redisåå¸è®¢é 模å¼ââæ¨éæ¶æ¯ã======================================================================================== /** @@ -187,5 +200,5 @@ } } //=======ãéç¨redisåå¸è®¢é 模å¼ââæ¨éæ¶æ¯ã========================================================================================== } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/LoginController.java
@@ -121,7 +121,7 @@ } SysUser sysUser = sysUserService.getOne(queryWrapper); //update-end-author:wangshuai date:20200601 for: ç»å½ä»£ç éªè¯ç¨æ·æ¯å¦æ³¨ébugï¼ifæ¡ä»¶æ°¸è¿ä¸ºfalse result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, loginType); if(!result.isSuccess()) { return result; } @@ -397,7 +397,7 @@ }else { //ç»å½æ¨¡å¼ï¼æ ¡éªç¨æ·æææ§ SysUser sysUser = sysUserService.getUserByPhone(mobile); result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, null); if(!result.isSuccess()) { String message = result.getMessage(); String userNotExist="è¯¥ç¨æ·ä¸åå¨ï¼è¯·æ³¨å"; @@ -458,7 +458,7 @@ //æ ¡éªç¨æ·æææ§ SysUser sysUser = sysUserService.getUserByPhone(phone); result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, null); if(!result.isSuccess()) { return result; } @@ -626,7 +626,7 @@ //1. æ ¡éªç¨æ·æ¯å¦ææ SysUser sysUser = sysUserService.getUserByName(username); result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, null); if(!result.isSuccess()) { return result; } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/controller/ThirdLoginController.java
@@ -218,7 +218,7 @@ //1. æ ¡éªç¨æ·æ¯å¦ææ SysUser sysUser = sysUserService.getUserByName(username); result = sysUserService.checkUserIsEffective(sysUser); result = sysUserService.checkUserIsEffective(sysUser, null); if(!result.isSuccess()) { return result; } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/MdcProductionMapper.java
@@ -61,4 +61,8 @@ List<String> findTeamValue(@Param("userId") String userId, @Param("productionList") List<String> productionList); List<String> findProIdsByUId(@Param("userId") String userId, @Param("allProductionIds") List<String> allProductionIds); List<String> findChildByProId(@Param("productionId") String productionId); String findProName(@Param("equipmentId") String equipmentId); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/mapper/xml/MdcProductionMapper.xml
@@ -138,4 +138,67 @@ </foreach> AND user_id = #{userId} </select> <select id="findChildByProId" resultType="java.lang.String"> WITH temp ( id ) AS ( SELECT id FROM mdc_production WHERE id = #{ productionId } AND mdc_flag = '1' UNION ALL SELECT a.id FROM mdc_production a INNER JOIN temp ON a.parent_id = temp.id WHERE a.mdc_flag = '1' ) SELECT * FROM temp </select> <select id="findProName" resultType="java.lang.String"> WITH production_hierarchy AS ( SELECT t3.id, t3.parent_id, t3.production_name, t3.org_type, 0 AS level FROM mdc_equipment t1 JOIN mdc_production_equipment t2 ON t1.id = t2.equipment_id JOIN mdc_production t3 ON t2.production_id = t3.id WHERE t1.equipment_id = #{equipmentId} UNION ALL SELECT t4.id, t4.parent_id, t4.production_name, t4.org_type, ph.level + 1 FROM production_hierarchy ph JOIN mdc_production t4 ON ph.parent_id = t4.id WHERE ph.parent_id IS NOT NULL ) SELECT TOP 1 production_name FROM production_hierarchy WHERE org_type = 2 ORDER BY level ASC </select> </mapper> lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/IMdcProductionService.java
@@ -175,4 +175,14 @@ * @return */ List<String> findProIdsByUId(String userId, List<String> allProductionIds); /** * * @param productionId * @return */ List<String> findChildByProId(String productionId); String findProName(String equipmentId); } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/ISysUserService.java
@@ -221,7 +221,7 @@ * @param sysUser * @return */ Result checkUserIsEffective(SysUser sysUser); Result checkUserIsEffective(SysUser sysUser, String loginType); /** * æ¥è¯¢è¢«é»è¾å é¤çç¨æ· lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/MdcProductionServiceImpl.java
@@ -627,4 +627,14 @@ super.update(updateWrapper); } } @Override public List<String> findChildByProId(String productionId) { return this.baseMapper.findChildByProId(productionId); } @Override public String findProName(String equipmentId) { return this.baseMapper.findProName(equipmentId); } } lxzn-module-system/lxzn-system-biz/src/main/java/org/jeecg/modules/system/service/impl/SysUserServiceImpl.java
@@ -440,7 +440,7 @@ * @return */ @Override public Result<?> checkUserIsEffective(SysUser sysUser) { public Result<?> checkUserIsEffective(SysUser sysUser, String loginType) { Result<?> result = new Result<Object>(); //æ åµ1ï¼æ ¹æ®ç¨æ·ä¿¡æ¯æ¥è¯¢ï¼è¯¥ç¨æ·ä¸åå¨ if (sysUser == null) { @@ -464,7 +464,7 @@ } //æ åµ4ï¼æ ¹æ®ç¨æ·ä¿¡æ¯æ¥è¯¢ï¼è¯¥ç¨æ·å¯ç ç³»é¦æ¬¡ä½¿ç¨ï¼éä¿®æ¹å¯ç List<DictModel> dictList = sysDictService.queryEnableDictItemsByCode(CommonConstant.DICT_USER_FIRST_LOGIN); if (dictList != null && !dictList.isEmpty()) { if (!"terminal".equals(loginType) && dictList != null && !dictList.isEmpty()) { if (CommonConstant.DEL_FLAG_1.equals(Integer.valueOf(dictList.get(0).getValue())) && CommonConstant.DEL_FLAG_1.equals(sysUser.getPasswordFlag())) { baseCommonService.addLog("ç¨æ·ç»å½å¤±è´¥ï¼ç¨æ·å:" + sysUser.getUsername() + "ç³»é¦æ¬¡ç»å½ç³»ç»ï¼è¯·éç½®å¯ç ï¼", CommonConstant.LOG_TYPE_1, null); result.setCode(5001); lxzn-module-system/lxzn-system-start/src/main/resources/application-dev.yml
@@ -311,7 +311,13 @@ deploy: #å·¥æ§ç½/æ¶å¯ç½é¨ç½² 0为æ¶å¯ç½ 1为工æ§ç½ deployType: 0 #æ¶å¯ç½ä¼ è¾ncæä»¶å¤¹ secretFolder: D:\\hy_test\\a #å·¥æ§ç½çæ§ncæä»¶å¤¹ workFolder: D:\\hy_test\\b #æ¶å¯ç½ä¼ è¾å·¥æ§ç½ncæä»¶å¤¹(ææ´¾è®¾å¤ncæä»¶) å·¥æ§ç½ä¼ è¾æ¶å¯ç½ncæä»¶å¤¹(è§£æåä¼ åçncæä»¶) secretFolder: D:\\test\\a file: monitor: # ä¸ä¸ªçæ§ç®å½é ç½® paths: - D:\\hy_test\\ncFile #å·¥æ§è´è´£è§£æéé¢çæä»¶;æ¶å¯ç½è¿è¡è§£æåä¼ çæä½ - D:\\hy_test\\b - D:\\hy_test\\c interval: 10000 # çæ§é´é(ms) lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/BaseToolsController.java
@@ -1,5 +1,8 @@ package org.jeecg.modules.tms.controller; import java.io.File; import java.io.IOException; import java.net.URLEncoder; import java.util.Arrays; import java.util.Map; import javax.servlet.http.HttpServletRequest; @@ -7,6 +10,8 @@ import com.alibaba.fastjson.JSONObject; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.ss.usermodel.WorkbookFactory; import org.jeecg.common.api.vo.Result; import org.jeecg.common.system.query.QueryGenerator; import org.jeecg.modules.tms.entity.*; @@ -575,4 +580,98 @@ IPage<SharpeeningVo> resultPage = baseToolsService.pageWithSharpedAndConfig(page, queryWrapper); return Result.OK(resultPage); } /** * å¯¼å ¥æ¨¡æ¿ä¸è½½ * */ @RequestMapping(value = "/loadTemplate") public void loadTemplate(HttpServletRequest request, HttpServletResponse response) throws IOException { Map<String,String[]> req = request.getParameterMap(); String paraTypeFlag = ""; if(req.get("paraTypeFlag") != null){ paraTypeFlag = req.get("paraTypeFlag")[0]; } if("1".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-éç¨åæ°.xlsx")); //导åºWorkbook //设置ååºå¤´ String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-éç¨åæ°.xlsx"; // 对æä»¶åè¿è¡URLç¼ç ï¼é²æ¢ä¸æä¹±ç String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); // å°Workbookåå ¥ååºè¾åºæµ try { // try-with-resourcesèªå¨å ³éèµæº workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { // å¼å¸¸å¤çï¼å¦è®°å½æ¥å¿ï¼ throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } }else if("2".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-åå å·¥å·¥å ·.xlsx")); String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-åå å·¥å·¥å ·.xlsx"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); try { workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } }else if("3".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-èºçº¹å·¥å ·.xlsx")); String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-èºçº¹å·¥å ·.xlsx"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); try { workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } }else if("4".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-é£åå·¥å ·.xlsx")); String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-é£åå·¥å ·.xlsx"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); try { workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } }else if("5".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-车åå·¥å ·.xlsx")); String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-车åå·¥å ·.xlsx"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); try { workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } }else if("6".equals(paraTypeFlag)){ Workbook workbook = WorkbookFactory.create(new File("D:\\opt\\upFiles\\åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-åç.xlsx")); String fileName = "åå ·ä¿¡æ¯å¯¼å ¥æ¨¡æ¿-åç.xlsx"; String encodedFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setHeader("Content-Disposition", "attachment; filename*=UTF-8''" + encodedFileName); try { workbook.write(response.getOutputStream()); response.flushBuffer(); } catch (IOException e) { throw new IOException("ä¸è½½æ¨¡æ¿å¤±è´¥", e); } } } } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/BaseTools.java
@@ -108,4 +108,9 @@ @DateTimeFormat(pattern="yyyy-MM-dd") @ApiModelProperty(value = "æ´æ°æ¶é´") private Date updateTime; /**å·¥å ·å¾ç*/ @Excel(name = "å·¥å ·å¾ç", width = 15) @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaBladeVo.java
@@ -163,4 +163,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaCommonToolVo.java
@@ -94,4 +94,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaHolesToolsVo.java
@@ -188,4 +188,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaMillToolVo.java
@@ -191,4 +191,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaThreadingToolVo.java
@@ -160,4 +160,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/vo/ParaTurningToolsVo.java
@@ -198,4 +198,7 @@ @ApiModelProperty(value = "夿³¨") private String remark; @ApiModelProperty(value = "å·¥å ·å¾ç") private String toolPicture; } lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/BaseToolsMapper.xml
@@ -13,6 +13,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -81,6 +82,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -113,6 +115,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -171,6 +174,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -238,6 +242,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, @@ -309,6 +314,7 @@ t.standard_code standardCode, t.tool_model toolModel, t.parama_table_name paramaTableName, t.tool_picture toolPicture, t1.application_type applicationType, t1.supplier_id supplierId, t1.province_city provinceCity, lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/InboundOrderServiceImpl.java
@@ -262,6 +262,7 @@ num++; //转æ¢åå符串并ä¿çåå¯¼é¶ String result = String.format("%0" + currentCode.length() + "d", num); //æå°äºç»´ç //ä¿åå ¥åºæµæ°´ InStoreDetail inStoreDetail = new InStoreDetail(); inStoreDetail.setInboundTime(inboundTime);