diff --git a/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/UploadController.java b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/UploadController.java new file mode 100644 index 0000000..22783a2 --- /dev/null +++ b/xymanager_admin/src/main/java/com/shxy/xymanager_admin/controller/UploadController.java @@ -0,0 +1,78 @@ +package com.shxy.xymanager_admin.controller; + +import com.shxy.xymanager_common.annotation.Log; +import com.shxy.xymanager_common.base.BaseController; +import com.shxy.xymanager_common.base.ResponseReult; +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.bean.ServiceStatus; +import com.shxy.xymanager_common.model.TerminalApkInfoListModel; +import com.shxy.xymanager_common.vo.PageVo; +import com.shxy.xymanager_common.vo.TerminalApkVo; +import com.shxy.xymanager_common.vo.TerminalUploadVo; +import com.shxy.xymanager_service.service.UploadService; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiResponse; +import io.swagger.annotations.ApiResponses; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.multipart.MultipartFile; + + +@Api(value = "上传接口", tags = "上传接口相关") +@RestController +@Slf4j +public class UploadController extends BaseController { + + @Autowired + UploadService uploadService; + + + + + + @ApiOperation(value = "上传APK", notes = "上传APK接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/uploadApk") + @Log(title = "上传APK", type = "新增") + public ResponseReult issueApk(@RequestBody TerminalUploadVo vo) { + ServiceBody serviceBody = uploadService.upload(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + + @ApiOperation(value = "查询APK列表", notes = "查询APK列表接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/listApk") + @Log(title = "查询APK列表", type = "查询") + public ResponseReult listApk(@RequestBody PageVo vo) { + ServiceBody serviceBody = uploadService.listApk(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + + @ApiOperation(value = "下发APK", notes = "下发APK接口", httpMethod = "POST") + @ApiResponses({@ApiResponse(code = 200, message = "请求成功"), @ApiResponse(code = 400, message = "请求参数没填好"), @ApiResponse(code = 404, message = "请求路径没有或页面跳转路径不对")}) + @RequestMapping("/issueApk") + @Log(title = "下发APK", type = "查询") + public ResponseReult issueApk(@RequestBody TerminalApkVo vo) { + ServiceBody serviceBody = uploadService.issueApk(vo); + if (serviceBody.getCode() == ServiceStatus.SUCCESS) { + return ResponseReult.success(serviceBody.getData()); + } else { + return ResponseReult.error(serviceBody.getCode(), serviceBody.getMsg()); + } + } + +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/Constants.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/Constants.java index 3d20384..0199086 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/Constants.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/constant/Constants.java @@ -153,4 +153,9 @@ public class Constants */ public static final String[] JOB_ERROR_STR = { "java.net.URL", "javax.naming.InitialContext", "org.yaml.snakeyaml", "org.springframework.jndi" }; + + /** + * 心跳时间全局设置 + */ + public static final String GLOBAL_TIME = "global.heart.beat.time"; } \ No newline at end of file diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalApkInfoDto.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalApkInfoDto.java new file mode 100644 index 0000000..b3ab8ce --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/dto/TerminalApkInfoDto.java @@ -0,0 +1,17 @@ +package com.shxy.xymanager_common.dto; + +import lombok.Data; + +import java.io.Serializable; + +@Data +public class TerminalApkInfoDto implements Serializable { + private Integer id; + + private String name; + + private String path; + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalUpload.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalUpload.java new file mode 100644 index 0000000..e563f55 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/entity/TerminalUpload.java @@ -0,0 +1,27 @@ +package com.shxy.xymanager_common.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.math.BigInteger; +import java.util.Date; + +@Data +public class TerminalUpload implements Serializable { + private String path ; + + private String name; + + private String version; + + public TerminalUpload(String path,String name,String version){ + this.path = path; + this.name = name; + this.version = version; + } + + + + private static final long serialVersionUID = 1L; + +} \ No newline at end of file diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalApkInfoListModel.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalApkInfoListModel.java new file mode 100644 index 0000000..5102731 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/model/TerminalApkInfoListModel.java @@ -0,0 +1,47 @@ +package com.shxy.xymanager_common.model; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + +/** + * 通道列表 + */ +@Data +@ApiModel(value = "APK信息列表", description = "APK信息列表") +public class TerminalApkInfoListModel implements Serializable { + + @ApiModelProperty(value = "APK信息列表", example = "[]") + private List list; + + @ApiModelProperty(value = "总记录数", example = "120") + private long total; + @ApiModelProperty(value = "总页数", example = "120") + private int totalpage; + @ApiModelProperty(value = "当前页", example = "1") + private int currentpage; + @ApiModelProperty(value = "每页记录数", example = "1") + private int pagesize; + + @Data + public static class ApkBean { + + @ApiModelProperty(value = "APKid", example = "123456") + private Integer id; + + @ApiModelProperty(value = "上传路径", example = "123456") + private String path; + + @ApiModelProperty(value = "APK名称", example = "123456") + private String name; + + @ApiModelProperty(value = "版本号", example = "123456") + private String version; + + + + } +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/page/PageUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/page/PageUtils.java index 8572579..72e193f 100644 --- a/xymanager_common/src/main/java/com/shxy/xymanager_common/page/PageUtils.java +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/page/PageUtils.java @@ -6,9 +6,11 @@ import com.github.pagehelper.PageInfo; import com.shxy.xymanager_common.util.StringUtils; import com.shxy.xymanager_common.util.http.HttpStatus; import com.shxy.xymanager_common.util.sql.SqlUtils; +import org.springframework.stereotype.Component; import java.util.List; +@Component public class PageUtils { /** * 设置请求分页数据 @@ -62,4 +64,5 @@ public class PageUtils { rspData.setTotal(new PageInfo(list).getTotal()); return rspData; } + } diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/util/UploadUtils.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/UploadUtils.java new file mode 100644 index 0000000..ced9412 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/util/UploadUtils.java @@ -0,0 +1,38 @@ +package com.shxy.xymanager_common.util; + +import com.shxy.xymanager_common.util.spring.SpringUtils; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.MessageSource; +import org.springframework.context.i18n.LocaleContextHolder; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.util.UUID; + +/** + * + * 上传文件 + * @author cy + */ +public class UploadUtils +{ + /** + * 上传文件 + * + */ + public static String upload(MultipartFile file,String path) throws IOException { + String fileName = file.getOriginalFilename(); + String newName = UUID.randomUUID().toString()+fileName.substring(fileName.indexOf(".")); + + File saveFile = new File(path+newName); + if(!saveFile.getParentFile().exists()){ + saveFile.getParentFile().mkdirs(); + } + file.transferTo(saveFile); + return saveFile.getPath(); + } + + + +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalApkVo.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalApkVo.java new file mode 100644 index 0000000..82a3b15 --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalApkVo.java @@ -0,0 +1,23 @@ +package com.shxy.xymanager_common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@ApiModel(value = "APK请求参数", description = "APK请求参数") +public class TerminalApkVo { + + @NotNull(message = "装置通道编号") + @ApiModelProperty(value = "装置通道编号", example = "123455") + private List cmdid; + + @NotNull(message = "文件路径") + @ApiModelProperty(value = "文件路径", example = "123455") + private String path; + + +} diff --git a/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalUploadVo.java b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalUploadVo.java new file mode 100644 index 0000000..137659c --- /dev/null +++ b/xymanager_common/src/main/java/com/shxy/xymanager_common/vo/TerminalUploadVo.java @@ -0,0 +1,24 @@ +package com.shxy.xymanager_common.vo; + +import io.swagger.annotations.ApiModel; +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; +import org.springframework.web.multipart.MultipartFile; + +import javax.validation.constraints.NotNull; +import java.util.List; + +@Data +@ApiModel(value = "上传参数", description = "上传参数") +public class TerminalUploadVo { + + @NotNull(message = "装置通道编号") + @ApiModelProperty(value = "装置通道编号", example = "123455") + private MultipartFile file; + + @NotNull(message = "apk版本") + @ApiModelProperty(value = "apk版本", example = "123455") + private String version; + + +} diff --git a/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalUploadDao.java b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalUploadDao.java new file mode 100644 index 0000000..aa5f986 --- /dev/null +++ b/xymanager_dao/src/main/java/com/shxy/xymanager_dao/dao/TerminalUploadDao.java @@ -0,0 +1,14 @@ +package com.shxy.xymanager_dao.dao; + +import com.shxy.xymanager_common.dto.TerminalApkInfoDto; +import com.shxy.xymanager_common.entity.TerminalUpload; + +import java.util.List; + +public interface TerminalUploadDao { + + int insert(TerminalUpload upload); + + List selectAll(); + +} \ No newline at end of file diff --git a/xymanager_dao/src/main/resources/mappers/TerminalUploadDao.xml b/xymanager_dao/src/main/resources/mappers/TerminalUploadDao.xml new file mode 100644 index 0000000..b874b02 --- /dev/null +++ b/xymanager_dao/src/main/resources/mappers/TerminalUploadDao.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + insert into terminal_upload (path, name,version) + values (#{path,jdbcType=VARCHAR}, #{name,jdbcType=VARCHAR}, #{version,jdbcType=VARCHAR}) + + + + + \ No newline at end of file diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java index 4aef046..e43e60a 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPhotoServiceImpl.java @@ -10,6 +10,7 @@ import com.shxy.xymanager_common.model.TerminalPhotoListModel; import com.shxy.xymanager_common.model.TerminalPhotosModel; import com.shxy.xymanager_common.page.PageUtils; import com.shxy.xymanager_common.util.MyDateUtils; +import com.shxy.xymanager_common.util.StringUtils; import com.shxy.xymanager_common.vo.PageVo; import com.shxy.xymanager_common.vo.TerminalAndChannelIdAndTimeVo; import com.shxy.xymanager_common.vo.TerminalPhotoVo; @@ -21,6 +22,9 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.math.BigInteger; import java.util.ArrayList; import java.util.Date; @@ -92,8 +96,34 @@ public class TerminalPhotoServiceImpl implements TerminalPhotoService { @Override public ServiceBody getLatestPhoto(TerminalPhotoVo vo) { - Cma cma = new Cma(server, port); - Boolean hasNew = cma.requestCapture(vo.getCmdid(), vo.getChannel(), vo.getPreset(), vo.getCaptureType()); + /* Cma cma = new Cma(server, port);*/ + String[] cmd = {"sh","/usr/local/bin/xympadmn",server,String.valueOf(port)}; + ProcessBuilder builder = new ProcessBuilder("/bin/chmod", "755","/usr/local/bin/xympadmn"); + String line = ""; + StringBuffer sb = new StringBuffer(); + String result = ""; + Boolean hasNew = false; + try { + Process process = builder.start(); + process.waitFor(); + Process ps = Runtime.getRuntime().exec(cmd); + ps.waitFor(); + BufferedReader reader = new BufferedReader(new InputStreamReader(ps.getInputStream())); + while ((line = reader.readLine()) != null) { + sb.append(line).append("\n"); + } + result = sb.toString(); + if(StringUtils.isNotBlank(result)){ + hasNew =true; + } + + } catch (IOException e) { + log.error("IOException",e); + } catch (InterruptedException e) { + log.error("InterruptedException",e); + } + + /* Boolean hasNew = cma.requestCapture(vo.getCmdid(), vo.getChannel(), vo.getPreset(), vo.getCaptureType());*/ return Asserts.success(hasNew); } diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPresetServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPresetServiceImpl.java index a4b801d..4efce83 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPresetServiceImpl.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/TerminalPresetServiceImpl.java @@ -16,7 +16,6 @@ import org.springframework.stereotype.Service; public class TerminalPresetServiceImpl implements TerminalPresetsService { - @Override public ServiceBody getTerminalList() { return null; diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UploadServiceImpl.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UploadServiceImpl.java new file mode 100644 index 0000000..d0920ec --- /dev/null +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/impl/UploadServiceImpl.java @@ -0,0 +1,109 @@ +package com.shxy.xymanager_service.impl; + +import com.github.pagehelper.PageInfo; +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.dto.TerminalApkInfoDto; +import com.shxy.xymanager_common.entity.TerminalUpload; +import com.shxy.xymanager_common.enums.CommonStatus; +import com.shxy.xymanager_common.exception.Asserts; +import com.shxy.xymanager_common.model.TerminalApkInfoListModel; +import com.shxy.xymanager_common.model.TerminalListModel; +import com.shxy.xymanager_common.page.PageUtils; +import com.shxy.xymanager_common.util.UploadUtils; +import com.shxy.xymanager_common.vo.PageVo; +import com.shxy.xymanager_common.vo.TerminalApkVo; +import com.shxy.xymanager_common.vo.TerminalUploadVo; +import com.shxy.xymanager_dao.dao.TerminalUploadDao; +import com.shxy.xymanager_service.interaction.Cma; +import com.shxy.xymanager_service.service.UploadService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import javax.swing.text.html.parser.Entity; +import java.io.IOException; +import java.util.Date; +import java.util.List; + + +/** + * 设备服务实现层 + * + * @author 晶晶 + */ +@Slf4j +@Service +public class UploadServiceImpl implements UploadService { + + @Value("${upload.path}") + private String path; + + @Autowired + TerminalUploadDao uploadDao; + + + @Value("${cma.server}") + private String server; + + @Value("${cma.port}") + private int port; + + + /** + * 上传文件 + * + * @param vo + * @return + */ + @Override + public ServiceBody upload(TerminalUploadVo vo) { + String fileName = vo.getFile().getOriginalFilename(); + try { + path = UploadUtils.upload(vo.getFile(), path); + TerminalUpload upload = new TerminalUpload(path, fileName,vo.getVersion()); + uploadDao.insert(upload); + } catch (IOException e) { + log.info("upload.exception", e); + } + + return Asserts.success(path); + + } + + @Override + public ServiceBody listApk(PageVo vo) { + TerminalApkInfoListModel model = new TerminalApkInfoListModel(); + int pageindex = vo.getPageindex(); + int pagesize = vo.getPagesize(); + PageUtils.SetPage(pageindex, pagesize); + List apkInfoDtoList = uploadDao.selectAll(); + PageInfo pageData = PageUtils.getPageData(apkInfoDtoList); + int currentpage = pageData.getPageNum(); + model.setCurrentpage(currentpage); + long total = pageData.getTotal(); + model.setTotal(total); + + int pageSize = pageData.getPageSize(); + model.setPagesize(pageSize); + int pages = pageData.getPages(); + model.setTotalpage(pages); + return Asserts.success(model); + } + + @Override + public ServiceBody issueApk(TerminalApkVo vo) { + Cma cma = new Cma(server, port); + + vo.getCmdid().stream().forEach(var -> { + cma.upgrade(var, vo.getPath()); + }); + + return Asserts.success(true); + } + + + +} + diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/Cma.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/Cma.java index ae9a86c..9fffeb8 100644 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/Cma.java +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/Cma.java @@ -1,16 +1,22 @@ package com.shxy.xymanager_service.interaction; +import lombok.extern.slf4j.Slf4j; + +@Slf4j public class Cma { static { String osName = System.getProperties().getProperty("os.name"); if(osName.equals("Linux")) { - System.load(System.getProperty("user.dir")+"\\libs\\xympj.so"); + log.info("linux加载路径:{}",System.getProperty("user.dir")+"/libs/xympj.so"); + System.load(System.getProperty("user.dir")+"/libs/xympj.so"); } else { - System.load(System.getProperty("user.dir")+"\\libs\\xympj.dll"); + log.info("windows加载路径:{}",System.getProperty("user.dir")+"\\libs\\xympj.dll"); + System.load(System.getProperty("user.dir")+"\\libs\\xympj.dll"); + } initCmaEnv(); diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/CmaDLL.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/CmaDLL.java deleted file mode 100644 index 3c22940..0000000 --- a/xymanager_service/src/main/java/com/shxy/xymanager_service/interaction/CmaDLL.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.shxy.xymanager_service.interaction; - -import com.sun.jna.Library; -import com.sun.jna.Native; - -public class CmaDLL implements Library { - CmaDLL INSTANCE = (CmaDLL) Native.loadLibrary("xympj.dll",CmaDLL.class); -} diff --git a/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UploadService.java b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UploadService.java new file mode 100644 index 0000000..1330e3a --- /dev/null +++ b/xymanager_service/src/main/java/com/shxy/xymanager_service/service/UploadService.java @@ -0,0 +1,35 @@ +package com.shxy.xymanager_service.service; + +import com.shxy.xymanager_common.bean.ServiceBody; +import com.shxy.xymanager_common.model.TerminalApkInfoListModel; +import com.shxy.xymanager_common.vo.PageVo; +import com.shxy.xymanager_common.vo.TerminalApkVo; +import com.shxy.xymanager_common.vo.TerminalUploadVo; + +/** + * + * + * @author CY + */ +public interface UploadService { + + /** + * 获取所有通道树状列表 + * + * @return + */ + ServiceBody upload(TerminalUploadVo vo); + + /** + * 查询APK列表 + * + */ + ServiceBody listApk(PageVo vo); + + /** + * 下发APK + * + */ + ServiceBody issueApk(TerminalApkVo vo); + +}