Quellcode durchsuchen

Merge remote-tracking branch 'origin/master'

shilin vor 4 Jahren
Ursprung
Commit
a911912090

+ 3 - 0
README.md

@@ -192,3 +192,6 @@ UEditor|百度富文本||
 
 
 ### 启动类
 ### 启动类
 - SpringbootStart 启动类
 - SpringbootStart 启动类
+
+### 语音合成
+- 将resource/speech目录下的jacob-1.18-x64.dll文件方入jdk/bin目录

+ 194 - 0
README.md.bak

@@ -0,0 +1,194 @@
+
+
+### 组织架构
+
+```
+Springboot
+├─doc  项目SQL语句以及文档
+│
+├─common 公共模块
+│  ├─base Base继承通用类
+│  ├─conf springBoot所有配置
+│  ├─domain 前台返回包
+│  ├─druid druid连接池
+│  ├─exception 异常处理包
+│  ├─file 文件上传
+│  ├─interceptor 拦截器
+│  ├─log 日志记录AOP
+│  ├─domain 前台返回包
+│  ├─quartz Spring定时器
+│  └─support 工具包
+│
+├─controller 请求访问模块
+│  ├─admin 模版后台请求包
+│  ├─websocket websoket消息请求
+│  └─HomeController.java 首页访问类
+│
+├─Mapper Dao模块
+│  ├─auto mybatis-generator.xml自动生成Dao
+│  └─custom 自定义Dao
+│
+├─Model 实体类模块
+│  ├─auto mybatis-generator.xml自动生成实体包
+│  └─custom 自定义实体
+│
+├─Service 服务层模块[没写抽象模块,因为我觉得没什么用,可能我能力不足]
+│
+├─shiro 权限模块
+│  ├─config shiro配置
+│  ├─service shiro服务层
+│  └─util shiro通用方法
+│
+├─util 工具模块
+│
+├─SpringbootSwagger2Application 启动类
+│ 
+├─SpringbootWebInitializer tomcat启动类
+│
+├─test 测试类
+│
+├─resources 配置文件夹
+│  ├─ehcache shiro权限缓存配置
+│  ├─generator 自动生成模板以及配置目录
+│  │   ├─MyBatisGenerator mybates半自动生成工具
+│  │   │   ├─1.bat 执行批处理
+│  │   │   ├─generator.xml generator配置文件
+│  │   │   ├─mybatis-generator-core-1.3.2.jar generator1.3.2版本
+│  │   │   ├─mybatis-generator-core-1.3.7.jar generator1.3.7版本【默认】
+│  │   │   └─mysqldriver.jar mysql驱动【该驱动为8.0一下的版本不支持8.0自行替换】
+│  │   │
+│  │   ├─template 模板文件假
+│  │   │   ├─controller anction模板
+│  │   │   ├─html html页面模板
+│  │   │   ├─mapper dao模板
+│  │   │   ├─mapperxml daoxml模板
+│  │   │   ├─model 实体模板
+│  │   │   ├─service service模板
+│  │   │   └─sql sql模板
+│  │   │
+│  │   └─generator.properties 自动生成配置文件
+│  │
+│  ├─mybatis mybatis Mapper.xml生成文件夹
+│  │   ├─auto自动生成的Mapper.xml文件夹
+│  │   └─custom 手写Mapper.xml文件夹
+│  │
+│  ├─static 静态文件存放文件夹[后台模版就放在此文件夹下面。所有的模版页面都在下面]
+│  │   ├─admin 后台目录存放
+│  │   │  ├─assets js、css存放路径
+│  │   │  ├─assets js、css存放路径
+│  │   │  └─bootstarp 后台模板存放路径
+│  │   ├─js js存放
+│  │   └─login 登录页面js、css、image
+│  │
+│  ├─templates 前台HTML存放文件夹
+│  │   ├─admin 动态后台html模板
+│  │   ├─error 错误页面html模板
+│  │   └─login.html 登录html页面
+│  │
+│  ├─application-dev.yml 开发环境配置
+│  ├─application-prod.yml 生产环境配置
+│  ├─application.yml springboot配置
+│  ├─banner1.txt springboot 启动动画
+│  ├─logback.xml log4j配置文件
+│  └─mybatis-generator.xml mybates自动生成 xml、dao、model
+│  
+└─pom.xml   maven.xml
+
+
+```
+
+###技术选项
+
+技术|名称|官网|备注
+---|---|---|---
+springboot|springboot框架 ||
+Apache Shiro|权限框架||
+MyBatis Generator|代码生成||
+PageHelper|MyBatis物理分页插件||
+hikari|数据库连接池||
+Thymeleaf|模板引擎||
+Log4J|日志组件||
+Swagger2|接口测试框架||
+Maven|项目构建管理||
+Websocket|websocket消息通知||
+velocity|模板引擎||
+kaptcha|google验证码||
+devtools|热部署||
+GSON|谷歌json||
+druid|阿里连接池||
+quartz|定时框架||
+
+
+
+
+### 前端技术
+技术|名称|官网|备注
+---|---|---|---
+jQuery|函式库 || 
+bootstrap|前端页面框架||
+Font-awesome|字体图标||
+jquery.validate|jquery验证插件||
+vue|渐进式框架||
+ladda.min.js|按钮加载js||
+bootstrap-table|表格组件||
+layer.js|弹窗组件||
+jquery.blockUI.js|遮蔽层组件||
+bootstrap-table-export.js|前台导出组件||
+bootstrap-treeview|树结构组件||
+bootstrap-colorpicker|颜色组件||
+dropzone|文件上传||
+bootstrap-wysihtml5|富文本||
+bootstrap-switch|开关按钮||
+UEditor|百度富文本||
+
+### jar版本
+
+| 名称       | 版本          | 备注 |
+|------------|---------------|------|
+| springBoot | 2.0.0.RELEASE |      |
+| mybatis-spring 1.3.2 | 1.3.2         |      |
+| swagger2   | 2.7.0         |      |
+| swagger-ui | 2.7.0         |      |
+| gson       | 2.8.2         |      |
+| pagehelper | 4.1.4         |      |
+| mysql|5.1.40 OR   8.0.11      |      |
+| shiro|1.4.0         |      |
+| thymeleaf-extras-shiro|2.0.0         |      |
+| thymeleaf|2.0.0.RELEASE         |      |
+| commons-lang3|  3.7       |      |
+| commons-lang|2.4         |      |
+| commons-io|2.5         |      |
+| commons-fileupload|1.3.3         |      |
+| spring-boot-devtools|2.0.0.RELEASE         |      |
+| hutool| 4.1.10        |      |
+| druid| 1.1.10        |      |
+| kaptcha| 2.3.2        |      |
+| velocity| 1.7        |      |
+
+### 开发环境
+- JDK8.0
+- mysql5.7以上
+- eclipse
+
+### 资源下载
+- JDK8 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
+- Maven http://maven.apache.org/download.cgi
+
+
+### 部署流程
+1. 导入doc文件夹里面的gyee_frame.sql到数据库
+2. 确认自己的mysql版本 进行修改jar  在pom.xml 73-84行
+3. 修改application-dev.yml 里面自己数据库版本对应的jdbc链接
+4. 正常启动run SpringbootSwagger2Application.java
+
+
+### 打包发布编译流程
+- maven编译安装pom.xml文件即可打包成war
+
+### 登陆地址
+
+- 本地 http://localhost:8080   默认帐号密码: admin/admin
+- swagger  http://localhost:8080/swagger-ui.html
+
+### 启动类
+- SpringbootStart 启动类

+ 2 - 2
src/main/java/com/gyee/SqlSeverTicket.java

@@ -36,14 +36,14 @@ public class SqlSeverTicket {
 //            for(int i = 0; i < list.size(); i++){
 //            for(int i = 0; i < list.size(); i++){
 //                setImage(conn, "D:/document/两票相关材料/人员电子签名/电子签名thumb2/" + list.get(i).toLowerCase() +".png", list.get(i).toLowerCase());
 //                setImage(conn, "D:/document/两票相关材料/人员电子签名/电子签名thumb2/" + list.get(i).toLowerCase() +".png", list.get(i).toLowerCase());
 //            }
 //            }
-            setImage(conn, "D:/document/两票相关材料/zhongmy.png", "zhongmy");
+//            setImage(conn, "D:/document/两票相关材料/姚永.png", "yaoy");
 
 
             //        String fileName = "wangbing.png";
             //        String fileName = "wangbing.png";
 //
 //
 //        String filePath1 = "D:/document/两票相关材料/人员电子签名/";
 //        String filePath1 = "D:/document/两票相关材料/人员电子签名/";
 //        String filePath2 = "D:/document/两票相关材料/";
 //        String filePath2 = "D:/document/两票相关材料/";
 //        batchThumb(filePath1, filePath2);
 //        batchThumb(filePath1, filePath2);
-//        singleThumb(filePath1, filePath2, "zhongmy.png");
+//        singleThumb(filePath1, filePath2, "何磊.png");
         } catch (Exception e) {
         } catch (Exception e) {
             e.printStackTrace();
             e.printStackTrace();
         } finally {
         } finally {

+ 1 - 1
src/main/java/com/gyee/frame/controller/ticket/Elec1SafeMeasureController.java

@@ -163,7 +163,7 @@ public class Elec1SafeMeasureController {
                 return AjaxResult.success("数据删除失败");
                 return AjaxResult.success("数据删除失败");
         }
         }
         if (listP != null && listP.size() > 0) {
         if (listP != null && listP.size() > 0) {
-            int code = wosafetybaffleService.deleteSafeMeasure(listJ);
+            int code = wosafetybaffleService.deleteSafeMeasure(listP);
             if (code <= 0)
             if (code <= 0)
                 return AjaxResult.success("数据删除失败");
                 return AjaxResult.success("数据删除失败");
         }
         }

+ 35 - 0
src/main/java/com/gyee/frame/controller/ticket/SpeechController.java

@@ -0,0 +1,35 @@
+package com.gyee.frame.controller.ticket;
+
+import com.gyee.frame.common.domain.AjaxResult;
+import com.gyee.frame.model.ticket.TokenUser;
+import com.gyee.frame.service.ticket.ShiroService;
+import com.gyee.frame.service.ticket.SpeechService;
+import com.gyee.frame.util.ticket.TicketUtil;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+
+@RestController
+@RequestMapping("/speech")
+public class SpeechController {
+
+    @Autowired
+    SpeechService speechService;
+    @Autowired
+    ShiroService shiroService;
+
+//    @PostMapping(value = "tts")
+//    public void tts(@RequestParam("text") String text){
+//        speechService.textToVoice(text);
+//    }
+
+    @PostMapping(value = "tts")
+    public AjaxResult tts(@RequestHeader("token") String header, @RequestParam("text") String text){
+        TokenUser user = shiroService.findToken(header);
+        String path = TicketUtil.absolutePath() + "\\src\\main\\resources\\speech\\" + user.getLaborNum() + ".wav";
+        path = path.replace("\\", "/");
+        boolean result = speechService.textToVoice(text,  path);
+        if (result)
+            return AjaxResult.success();
+        return AjaxResult.error(4004, "语音合成失败");
+    }
+}

+ 1 - 1
src/main/java/com/gyee/frame/service/impl/ticket/WobugeqServiceImpl.java

@@ -40,7 +40,7 @@ public class WobugeqServiceImpl extends ServiceImpl<WobugeqMapper, Wobugeq> impl
             wrapper.in("SITENUM", TicketUtil.allDept());
             wrapper.in("SITENUM", TicketUtil.allDept());
         }
         }
 
 
-        Page<Wobugeq> page = new Page<>(pageNum, 15);
+        Page<Wobugeq> page = new Page<>(pageNum, 20);
         IPage<Wobugeq> iPage = baseMapper.selectPage(page, wrapper);
         IPage<Wobugeq> iPage = baseMapper.selectPage(page, wrapper);
 
 
         return iPage;
         return iPage;

+ 1 - 1
src/main/java/com/gyee/frame/service/impl/ticket/WorkticketServiceImpl.java

@@ -43,7 +43,7 @@ public class WorkticketServiceImpl extends ServiceImpl<WorkticketMapper, Worktic
             wrapper.in("WORKDEPT", TicketUtil.allDept());
             wrapper.in("WORKDEPT", TicketUtil.allDept());
         }
         }
 
 
-        Page<Workticket> page = new Page<>(pageNum, 15);
+        Page<Workticket> page = new Page<>(pageNum, 20);
         IPage<Workticket> iPage = baseMapper.selectPage(page, wrapper);
         IPage<Workticket> iPage = baseMapper.selectPage(page, wrapper);
 
 
         return iPage;
         return iPage;

+ 125 - 0
src/main/java/com/gyee/frame/service/ticket/SpeechService.java

@@ -0,0 +1,125 @@
+package com.gyee.frame.service.ticket;
+
+import com.jacob.activeX.ActiveXComponent;
+import com.jacob.com.Dispatch;
+import com.jacob.com.Variant;
+import org.springframework.stereotype.Service;
+
+import javax.sound.sampled.*;
+import java.io.File;
+import java.io.IOException;
+
+@Service
+public class SpeechService {
+
+    private ActiveXComponent component;
+    private Dispatch voice;
+
+    private Dispatch file;// 音频文件对象
+    private Dispatch audio;// 音频格式对象
+
+    private int type = 39;// 音频的输出格式
+    private int volume = 100;// 音量大小:1到100
+    private int rate = 0;// 播放速度:-10到10
+
+    /**
+     * 文字 --> 声音
+     * @param str
+     */
+    public void textToVoice(String str) {
+        try {
+            component = new ActiveXComponent("Sapi.SpVoice");
+            voice = component.getObject();
+            component.setProperty("Volume", new Variant(this.volume));
+            component.setProperty("Rate", new Variant(this.rate));
+            Dispatch.call(voice, "Speak", new Variant(str));
+        } catch (Exception e) {
+            e.printStackTrace();
+        } finally {
+            // 关闭流对,释放资源
+            component.safeRelease();
+            voice.safeRelease();
+        }
+    }
+
+    /**
+     * 文字 --> 音频文件
+     * @param str
+     * @param path
+     */
+    public boolean textToVoice(String str, String path){
+        try {
+            component = new ActiveXComponent("Sapi.SpVoice");
+            voice = component.getObject();
+            // 1 创建 文件输出对象
+            component = new ActiveXComponent("Sapi.SpFileStream");
+            file = component.getObject();
+            // 2 创建音频流格式对象
+            component = new ActiveXComponent("Sapi.SpAudioFormat");
+            audio = component.getObject();
+            // 3 设置 音频格式
+            Dispatch.put(audio,"Type",new Variant(this.type));
+            // 4 设置 输出音频
+            Dispatch.putRef(file,"Format",audio);
+            // 5 设置 音频文件输出路径
+            Dispatch.call(file,"Open",new Variant(path),new Variant(3),new Variant(true));
+            // 6 音频-->输出音频流
+            Dispatch.putRef(voice,"AudioOutputStream",file);
+            // 8 调整音量和语速
+            Dispatch.put(voice,"Volume",new Variant(this.volume));// 设置音量
+            Dispatch.put(voice,"Rate",new Variant(this.rate));// 设置速率
+            // 9 语音合成(文字-->音频)
+            Dispatch.call(voice,"Speak",new Variant(str));
+            // 10 关闭流对,释放资源
+            Dispatch.call(file,"Close");
+            audio.safeRelease();
+            voice.safeRelease();
+            file.safeRelease();
+
+            return true;
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+
+        return false;
+    }
+
+    /**
+     * Java Music 播放 WAV音频文件
+     * @Title: play_wav
+     * @Description: 播放 WAV音频文件
+     * @param path WAV文件路径
+     * @throws IOException
+     * @throws UnsupportedAudioFileException
+     *
+     */
+    private void play_wav(String path) throws UnsupportedAudioFileException, IOException {
+        File file=new File(path);
+        if(!file.exists() || !path.toLowerCase().endsWith(".wav")) {
+            throw new RuntimeException("文件不存在");
+        }
+        AudioInputStream stream= AudioSystem.getAudioInputStream(file);
+        AudioFormat target = stream.getFormat();
+        DataLine.Info dinfo = new DataLine.Info(SourceDataLine.class, target);
+        SourceDataLine line = null;
+        int len = -1;
+        try {
+            line = (SourceDataLine) AudioSystem.getLine(dinfo);
+            line.open(target);
+            line.start();
+            byte[] buffer = new byte[1024];
+            while ((len = stream.read(buffer)) > 0) {
+                line.write(buffer, 0, len);
+            }
+            // Block等待临时数据被输出为空
+            line.drain();
+            // 关闭读取流
+            stream.close();
+            // 停止播放
+            line.stop();
+            line.close();
+        }catch (Exception e) {
+            throw new RuntimeException(e.getMessage());
+        }
+    }
+}

+ 9 - 1
src/main/java/com/gyee/frame/util/ticket/TicketUtil.java

@@ -289,7 +289,7 @@ public class TicketUtil {
         String groupName = null;
         String groupName = null;
         switch (role) {
         switch (role) {
             case "工作票签发人":
             case "工作票签发人":
-                groupName = "WTSIGNATOR";
+                groupName = "WTSIGNATORY";
                 break;
                 break;
             case "值班负责人":
             case "值班负责人":
                 groupName = "SHIFTENGINEER";
                 groupName = "SHIFTENGINEER";
@@ -348,4 +348,12 @@ public class TicketUtil {
 
 
         return app;
         return app;
     }
     }
+
+    /**
+     * 获取项目的路径
+     * @return
+     */
+    public static String absolutePath(){
+        return System.getProperty("user.dir");
+    }
 }
 }

BIN
src/main/resources/lib/jacob-1.18.jar


BIN
src/main/resources/speech/jacob-1.18-x64.dll