diff --git a/APIService/src/main/java/com/storeroom/controller/TestApiServiceController.java b/APIService/src/main/java/com/storeroom/controller/TestApiServiceController.java index a8baae3..7a89a25 100644 --- a/APIService/src/main/java/com/storeroom/controller/TestApiServiceController.java +++ b/APIService/src/main/java/com/storeroom/controller/TestApiServiceController.java @@ -4,6 +4,7 @@ package com.storeroom.controller; import com.storeroom.annotaion.rest.AnonymousGetMapping; import com.storeroom.service.ApiService; import com.storeroom.utils.ApiResponse; +import com.storeroom.utils.MacUtil; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -29,4 +30,10 @@ public class TestApiServiceController { public ApiResponse getAllDevice() { return ApiResponse.success(apiService.getDeviceAll()); } + + @AnonymousGetMapping("ip") + @ApiOperation("获取内网ip") + public ApiResponse getIp() { + return ApiResponse.success(MacUtil.getIpAddress()); + } } diff --git a/APIService/src/main/java/com/storeroom/service/impl/ApiServiceImpl.java b/APIService/src/main/java/com/storeroom/service/impl/ApiServiceImpl.java index 7b36eb7..8594390 100644 --- a/APIService/src/main/java/com/storeroom/service/impl/ApiServiceImpl.java +++ b/APIService/src/main/java/com/storeroom/service/impl/ApiServiceImpl.java @@ -14,10 +14,10 @@ import org.springframework.stereotype.Service; import org.springframework.util.ObjectUtils; import java.util.*; -import java.util.stream.Collectors; -@Service + +@Service("ApiServiceImpl") public class ApiServiceImpl implements ApiService { String access_token = ""; @@ -39,6 +39,7 @@ public class ApiServiceImpl implements ApiService { access_token = Data.get("access_token").toString(); } }); + System.out.println(access_token); return access_token; } else { //throw new BaseException("访问失败" + response.getStatusLine().getStatusCode() + ""); diff --git a/common/src/main/java/com/storeroom/utils/MacUtil.java b/common/src/main/java/com/storeroom/utils/MacUtil.java index b85f09c..313decf 100644 --- a/common/src/main/java/com/storeroom/utils/MacUtil.java +++ b/common/src/main/java/com/storeroom/utils/MacUtil.java @@ -1,13 +1,18 @@ package com.storeroom.utils; -import java.net.InetAddress; -import java.net.NetworkInterface; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; +import java.io.LineNumberReader; +import java.net.*; +import java.util.Enumeration; +import java.util.regex.Matcher; +import java.util.regex.Pattern; public final class MacUtil { - /** * 根据不同操作系统执行不同命令 * 获取本机 mac 地址集合 @@ -26,4 +31,104 @@ public final class MacUtil { return sb.toString(); } + + // 从windows机器上获取mac地址 + public static String getMacInWindows(final String ip) { + String macAddr = ""; + try { + Process p = Runtime.getRuntime().exec("nbtstat -A " + ip); + InputStreamReader ir = new InputStreamReader(p.getInputStream(),"GBK"); + LineNumberReader input = new LineNumberReader(ir); + for (int i = 1; i < 100; i++) { + String str = input.readLine(); +// System.out.println(str); + //获取第14行的客户端mac地址 + if (i==14) { + macAddr = str.split("=")[1].trim(); + } + } + } catch (IOException e) { + e.printStackTrace(System.out); + } + return macAddr; + + } + + // 获取mac地址 + public static String filterMacAddress(final String ip, final String sourceString, final String macSeparator) { + String result = ""; + String regExp = "((([0-9,A-F,a-f]{1,2}" + macSeparator + "){1,5})[0-9,A-F,a-f]{1,2})"; + Pattern pattern = Pattern.compile(regExp); + Matcher matcher = pattern.matcher(sourceString); + while (matcher.find()) { + result = matcher.group(1); + // 因计算机多网卡问题,截取紧靠IP后的第一个mac地址 + int num = sourceString.indexOf(ip) - sourceString.indexOf(": " + result + " "); + if (num > 0 && num < 300) { + break; + } + } + return result; + } + + // 命令执行 + public static String callCmd(String[] cmd, String[] another) { + String result = ""; + String line = ""; + try { + Runtime rt = Runtime.getRuntime(); + // 执行第一个命令 + Process proc = rt.exec(cmd); + proc.waitFor(); + // 执行第二个命令 + proc = rt.exec(another); + InputStreamReader is = new InputStreamReader(proc.getInputStream()); + BufferedReader br = new BufferedReader(is); + while ((line = br.readLine()) != null) { + result += line; + } + } catch (Exception e) { + e.printStackTrace(); + } + return result; + } + + public static String getIpAddress() { + // 本地IP,如果没有配置外网IP则返回它 + String localip = null; + // 外网IP + String netip = null; + try { + Enumeration netInterfaces = NetworkInterface.getNetworkInterfaces(); + InetAddress ip = null; + // 是否找到外网IP + boolean finded = false; + while (netInterfaces.hasMoreElements() && !finded) { + NetworkInterface ni = (NetworkInterface) netInterfaces.nextElement(); + Enumeration address = ni.getInetAddresses(); + while (address.hasMoreElements()) { + ip = (InetAddress) address.nextElement(); + if (!ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { + // 外网IP + netip = ip.getHostAddress(); + finded = true; + break; + } else if (ip.isSiteLocalAddress() && !ip.isLoopbackAddress() && ip.getHostAddress().indexOf(":") == -1) { + // 内网IP + localip = ip.getHostAddress(); + } + } + } + } catch (SocketException e) { + e.printStackTrace(); + } + + if (netip != null && !"".equals(netip)) { + return netip; + } else { + return localip; + } + } + + } diff --git a/common/src/test/java/IPTest.java b/common/src/test/java/IPTest.java new file mode 100644 index 0000000..7d8de25 --- /dev/null +++ b/common/src/test/java/IPTest.java @@ -0,0 +1,11 @@ +import com.storeroom.utils.MacUtil; +import org.junit.jupiter.api.Test; + +public class IPTest { + + @Test + public void iptest() { + String ip = MacUtil.getIpAddress(); + System.out.println(ip); + } +} diff --git a/storeroom/src/main/java/com/storeroom/modules/device/controller/BindDeviceController.java b/storeroom/src/main/java/com/storeroom/modules/device/controller/BindDeviceController.java index ba98371..1059626 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/controller/BindDeviceController.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/controller/BindDeviceController.java @@ -1,6 +1,7 @@ package com.storeroom.modules.device.controller; +import com.google.common.base.Strings; import com.storeroom.annotaion.rest.AnonymousGetMapping; import com.storeroom.annotaion.rest.AnonymousPostMapping; import com.storeroom.exception.BaseException; @@ -18,6 +19,8 @@ import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; +import javax.servlet.http.HttpServletRequest; + @RestController @RequiredArgsConstructor @Api(tags = "设备Mac地址") @@ -28,15 +31,50 @@ public class BindDeviceController { @ApiOperation("获取mac地址") @AnonymousGetMapping("get") - public ApiResponse getMacAddress() throws Exception{ - return ApiResponse.success(MacUtil.getMac()); + public ApiResponse getMacAddress(HttpServletRequest request) { + String Xip = request.getHeader("X-Real-IP"); + String XFor = request.getHeader("X-Forwarded-For"); + + if (!Strings.isNullOrEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { + //多次反向代理后会有多个ip值,第一个ip才是真实ip + int index = XFor.indexOf(","); + if (index != -1) { + return ApiResponse.success(XFor.substring(0, index)); + } else { + return ApiResponse.success(XFor); + } + } + XFor = Xip; + if (!Strings.isNullOrEmpty(XFor) && !"unKnown".equalsIgnoreCase(XFor)) { + //String mac = MacUtil.getMacInWindows(XFor); + return ApiResponse.success(XFor); + } + if (Strings.nullToEmpty(XFor).trim().isEmpty() || "unknown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("Proxy-Client-IP"); + } + if (Strings.nullToEmpty(XFor).trim().isEmpty() || "unknown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("WL-Proxy-Client-IP"); + } + if (Strings.nullToEmpty(XFor).trim().isEmpty() || "unknown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("HTTP_CLIENT_IP"); + } + if (Strings.nullToEmpty(XFor).trim().isEmpty() || "unknown".equalsIgnoreCase(XFor)) { + XFor = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (Strings.nullToEmpty(XFor).trim().isEmpty() || "unknown".equalsIgnoreCase(XFor)) { + XFor = request.getRemoteAddr(); + } + //String mac = MacUtil.getMacInWindows(XFor); + return ApiResponse.success(XFor); } + //return ApiResponse.success(MacUtil.getMac()); + @ApiOperation("绑定Mac地址") @AnonymousPostMapping("bind") - public ApiResponse bind(@RequestBody DeviceMacDto deviceMacDto){ - if (StringUtils.isEmpty(deviceMacDto.getDeviceId()) || StringUtils.isEmpty(deviceMacDto.getMacAddress())){ + public ApiResponse bind(@RequestBody DeviceMacDto deviceMacDto) { + if (StringUtils.isEmpty(deviceMacDto.getDeviceId()) || StringUtils.isEmpty(deviceMacDto.getMacAddress())) { throw new BaseException("设备id或Mac地址不能为空"); } deviceSpecParamService.bindMac(deviceMacDto); @@ -44,5 +82,4 @@ public class BindDeviceController { } - } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceArchivesTag.java b/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceArchivesTag.java index b99cbb8..7a78839 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceArchivesTag.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/domain/DeviceArchivesTag.java @@ -2,6 +2,7 @@ package com.storeroom.modules.device.domain; import com.storeroom.base.BaseEntity; import io.swagger.annotations.ApiModelProperty; +import io.swagger.annotations.ApiOperation; import lombok.Getter; import lombok.Setter; @@ -71,17 +72,21 @@ public class DeviceArchivesTag extends BaseEntity implements Serializable { @ApiModelProperty(value = "柜号") private Integer cupboardNo; + @Column(name = "direction") + @ApiModelProperty(value = "方向") + private String direction; + @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; DeviceArchivesTag that = (DeviceArchivesTag) o; - return Objects.equals(id, that.id) && Objects.equals(tid, that.tid) && Objects.equals(deviceInfoId, that.deviceInfoId) && Objects.equals(position, that.position); + return Objects.equals(id, that.id) && Objects.equals(tid, that.tid) && Objects.equals(deviceInfoId, that.deviceInfoId) && Objects.equals(position, that.position) && Objects.equals(position_name, that.position_name); } @Override public int hashCode() { - return Objects.hash(id, tid, deviceInfoId, position); + return Objects.hash(id, tid, deviceInfoId, position, position_name); } } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceArchivesTagRepository.java b/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceArchivesTagRepository.java index 239ade1..dbca514 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceArchivesTagRepository.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/repository/DeviceArchivesTagRepository.java @@ -41,7 +41,7 @@ public interface DeviceArchivesTagRepository extends JpaRepository findByDeviceInfoId(String deviceInfoId,Pageable pageable); + Page findByDeviceInfoId(String deviceInfoId,Pageable pageable); /** diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceArchivesTagService.java b/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceArchivesTagService.java index 2c4f627..2a67737 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceArchivesTagService.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/DeviceArchivesTagService.java @@ -18,7 +18,7 @@ public interface DeviceArchivesTagService { * @param deviceInfoId 设备类型 * @return / */ - List queryTagList(String deviceInfoId,Pageable pageable); + Object queryTagList(String deviceInfoId,Pageable pageable); } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceArchivesTagImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceArchivesTagImpl.java index a9786ef..a5e4bb6 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceArchivesTagImpl.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceArchivesTagImpl.java @@ -8,6 +8,7 @@ import com.storeroom.modules.device.service.DeviceArchivesTagService; import com.storeroom.utils.PageUtil; import com.storeroom.utils.StringUtils; import lombok.RequiredArgsConstructor; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @@ -44,7 +45,8 @@ public class DeviceArchivesTagImpl implements DeviceArchivesTagService { } @Override - public List queryTagList(String deviceInfoId, Pageable pageable) { - return deviceArchivesTagRepository.findByDeviceInfoId(deviceInfoId, pageable); + public Object queryTagList(String deviceInfoId, Pageable pageable) { + Page page=deviceArchivesTagRepository.findByDeviceInfoId(deviceInfoId, pageable); + return PageUtil.toPage(page); } } diff --git a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java index d2748cd..33caf1b 100644 --- a/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java +++ b/storeroom/src/main/java/com/storeroom/modules/device/service/impl/DeviceImpl.java @@ -140,6 +140,7 @@ public class DeviceImpl implements DeviceService { deviceArchivesTag.setPosition(position); deviceArchivesTag.setDeviceInfoId(deviceInfoDto.getId()); deviceArchivesTag.setPosition_name(positionName); + deviceArchivesTag.setDirection(leftOrRight); deviceArchivesTagRepository.save(deviceArchivesTag); } } diff --git a/system/src/main/java/com/storeroom/modules/quartz/controller/QuartzJobController.java b/system/src/main/java/com/storeroom/modules/quartz/controller/QuartzJobController.java new file mode 100644 index 0000000..fc4a763 --- /dev/null +++ b/system/src/main/java/com/storeroom/modules/quartz/controller/QuartzJobController.java @@ -0,0 +1,111 @@ +package com.storeroom.modules.quartz.controller; + + +import com.storeroom.annotaion.rest.AnonymousGetMapping; +import com.storeroom.exception.BaseException; +import com.storeroom.modules.quartz.domain.QuartzJob; +import com.storeroom.modules.quartz.service.QuartzJobService; +import com.storeroom.modules.quartz.service.dto.JobQueryCriteria; +import com.storeroom.utils.ApiResponse; +import com.storeroom.utils.enums.ResponseStatus; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.data.domain.Pageable; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.Set; + +@Slf4j +@RestController +@RequiredArgsConstructor +@RequestMapping("/api/jobs") +@Api(tags = "系统:定时任务管理") +public class QuartzJobController { + + private static final String ENTITY_NAME = "quartzJob"; + private final QuartzJobService quartzJobService; + + @ApiOperation("查询定时任务") + @AnonymousGetMapping + // @PreAuthorize("@el.check('timing:list')") + public ApiResponse queryQuartzJob(JobQueryCriteria criteria, Pageable pageable) { + return ApiResponse.success(quartzJobService.queryAll(criteria, pageable)); + } + + @ApiOperation("导出任务数据") + @GetMapping(value = "/download") + //@PreAuthorize("@el.check('timing:list')") + public void exportQuartzJob(HttpServletResponse response, JobQueryCriteria criteria) throws IOException { + quartzJobService.download(quartzJobService.queryAll(criteria), response); + } + + @ApiOperation("导出日志数据") + @GetMapping(value = "/logs/download") + //@PreAuthorize("@el.check('timing:list')") + public void exportQuartzJobLog(HttpServletResponse response, JobQueryCriteria criteria) throws IOException { + quartzJobService.downloadLog(quartzJobService.queryAllLog(criteria), response); + } + + @ApiOperation("查询任务执行日志") + @GetMapping(value = "/logs") + //@PreAuthorize("@el.check('timing:list')") + public ApiResponse queryQuartzJobLog(JobQueryCriteria criteria, Pageable pageable) { + return ApiResponse.success(quartzJobService.queryAllLog(criteria, pageable)); + } + + // @Log("新增定时任务") + @ApiOperation("新增定时任务") + @PostMapping + // @PreAuthorize("@el.check('timing:add')") + public ApiResponse createQuartzJob(@Validated @RequestBody QuartzJob resources) { + if (resources.getId() != null) { + throw new BaseException("A new " + ENTITY_NAME + " cannot already have an ID"); + } + quartzJobService.create(resources); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + // @Log("修改定时任务") + @ApiOperation("修改定时任务") + @PutMapping + // @PreAuthorize("@el.check('timing:edit')") + public ApiResponse updateQuartzJob(@Validated(QuartzJob.Update.class) @RequestBody QuartzJob resources) { + quartzJobService.update(resources); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + // @Log("更改定时任务状态") + @ApiOperation("更改定时任务状态") + @PutMapping(value = "/{id}") + // @PreAuthorize("@el.check('timing:edit')") + public ApiResponse updateQuartzJobStatus(@PathVariable Long id) { + quartzJobService.updateIsPause(quartzJobService.findById(id)); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + // @Log("执行定时任务") + @ApiOperation("执行定时任务") + @PutMapping(value = "/exec/{id}") + // @PreAuthorize("@el.check('timing:edit')") + public ApiResponse executionQuartzJob(@PathVariable Long id) { + quartzJobService.execution(quartzJobService.findById(id)); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + + //@Log("删除定时任务") + @ApiOperation("删除定时任务") + @DeleteMapping + // @PreAuthorize("@el.check('timing:del')") + public ApiResponse deleteQuartzJob(@RequestBody Set ids) { + quartzJobService.delete(ids); + return ApiResponse.success(ResponseStatus.SUCCESS); + } + +} diff --git a/system/src/main/java/com/storeroom/modules/quartz/service/QuartzJobService.java b/system/src/main/java/com/storeroom/modules/quartz/service/QuartzJobService.java index 5670339..b00f038 100644 --- a/system/src/main/java/com/storeroom/modules/quartz/service/QuartzJobService.java +++ b/system/src/main/java/com/storeroom/modules/quartz/service/QuartzJobService.java @@ -2,7 +2,8 @@ package com.storeroom.modules.quartz.service; import com.storeroom.modules.quartz.domain.QuartzJob; import com.storeroom.modules.quartz.domain.QuartzLog; -import com.storeroom.modules.system.service.dto.JobQueryCriteria; + +import com.storeroom.modules.quartz.service.dto.JobQueryCriteria; import org.springframework.data.domain.Pageable; import javax.servlet.http.HttpServletResponse; diff --git a/system/src/main/java/com/storeroom/modules/quartz/service/impl/QuartzJobServiceImpl.java b/system/src/main/java/com/storeroom/modules/quartz/service/impl/QuartzJobServiceImpl.java index e8e654d..3506629 100644 --- a/system/src/main/java/com/storeroom/modules/quartz/service/impl/QuartzJobServiceImpl.java +++ b/system/src/main/java/com/storeroom/modules/quartz/service/impl/QuartzJobServiceImpl.java @@ -1,6 +1,6 @@ package com.storeroom.modules.quartz.service.impl; -import cn.hutool.core.util.IdUtil; + import cn.hutool.core.util.StrUtil; import com.storeroom.exception.BaseException; import com.storeroom.modules.quartz.domain.QuartzJob; @@ -8,8 +8,8 @@ import com.storeroom.modules.quartz.domain.QuartzLog; import com.storeroom.modules.quartz.repository.QuartzJobRepository; import com.storeroom.modules.quartz.repository.QuartzLogRepository; import com.storeroom.modules.quartz.service.QuartzJobService; +import com.storeroom.modules.quartz.service.dto.JobQueryCriteria; import com.storeroom.modules.quartz.utils.QuartzManage; -import com.storeroom.modules.system.service.dto.JobQueryCriteria; import com.storeroom.utils.*; import lombok.RequiredArgsConstructor; import org.quartz.CronExpression; diff --git a/system/src/main/java/com/storeroom/modules/quartz/utils/FirstJob.java b/system/src/main/java/com/storeroom/modules/quartz/utils/FirstJob.java new file mode 100644 index 0000000..cdf0e7d --- /dev/null +++ b/system/src/main/java/com/storeroom/modules/quartz/utils/FirstJob.java @@ -0,0 +1,24 @@ +package com.storeroom.modules.quartz.utils; + +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.Date; + +public class FirstJob implements Job { + + private static Logger _log = LoggerFactory.getLogger(FirstJob.class); + + public FirstJob() { + + } + + public void execute(JobExecutionContext context) + throws JobExecutionException { + _log.error("Hello Job执行时间: " + new Date()); + + } +}