Przeglądaj źródła

Merge remote-tracking branch 'origin/master'

limeng 5 miesięcy temu
rodzic
commit
b7eb7d8d4c

+ 0 - 13
zhjq-admin/pom.xml

@@ -67,19 +67,6 @@
             <artifactId>zhjq-business</artifactId>
         </dependency>
 
-
-        <!-- zxing生成二维码 -->
-        <dependency>
-            <groupId>com.google.zxing</groupId>
-            <artifactId>core</artifactId>
-            <version>3.3.3</version>
-        </dependency>
-
-        <dependency>
-            <groupId>com.google.zxing</groupId>
-            <artifactId>javase</artifactId>
-            <version>3.3.3</version>
-        </dependency>
     </dependencies>
 
     <build>

+ 1 - 1
zhjq-admin/src/main/resources/application.yml

@@ -126,4 +126,4 @@ xss:
   # 排除链接(多个用逗号分隔)
   excludes: /system/notice
   # 匹配链接
-  urlPatterns: /system/*,/monitor/*,/tool/*
+  urlPatterns: /system/*,/monitor/*,/tool/*,/app*

+ 13 - 0
zhjq-business/pom.xml

@@ -60,6 +60,19 @@
             <artifactId>zhjq-generator</artifactId>
         </dependency>
 
+
+        <!-- zxing生成二维码 -->
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>core</artifactId>
+            <version>3.3.3</version>
+        </dependency>
+
+        <dependency>
+            <groupId>com.google.zxing</groupId>
+            <artifactId>javase</artifactId>
+            <version>3.3.3</version>
+        </dependency>
     </dependencies>
 
 </project>

+ 8 - 9
zhjq-admin/src/main/java/com/zhjq/web/controller/system/QrCodeController.java

@@ -1,6 +1,7 @@
-package com.zhjq.web.controller.system;
+package com.zhjq.controller;
 
 
+import cn.hutool.core.img.ImgUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.extra.qrcode.QrCodeUtil;
 import cn.hutool.extra.qrcode.QrConfig;
@@ -11,11 +12,11 @@ import com.zhjq.common.core.domain.AjaxResult;
 import com.zhjq.common.exception.ServiceException;
 import com.zhjq.common.utils.file.FileUploadUtils;
 import com.zhjq.common.utils.file.MimeTypeUtils;
-import com.zhjq.system.domain.QrCodeGenerateDTO;
-import com.zhjq.system.domain.ZhjqVoice;
-import com.zhjq.system.service.IZhjqVoiceService;
-import com.zhjq.web.controller.tool.InMemoryMultipartFile;
-import com.zhjq.web.controller.tool.QRCodeUtils;
+import com.zhjq.domain.QrCodeGenerateDTO;
+import com.zhjq.domain.ZhjqVoice;
+import com.zhjq.service.IZhjqVoiceService;
+import com.zhjq.utils.InMemoryMultipartFile;
+import com.zhjq.utils.QRCodeUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.PostMapping;
 import org.springframework.web.bind.annotation.RequestBody;
@@ -28,8 +29,6 @@ import java.awt.image.BufferedImage;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
 
-import static cn.hutool.core.img.ImgUtil.IMAGE_TYPE_JPG;
-
 
 @RestController
 @RequestMapping("/infra/QrCode")
@@ -45,7 +44,7 @@ public class QrCodeController {
         if (StrUtil.isBlank(content)) {
             throw new ServiceException();
         }
-        String base64 = QrCodeUtil.generateAsBase64(content, QrConfig.create(), IMAGE_TYPE_JPG);
+        String base64 = QrCodeUtil.generateAsBase64(content, QrConfig.create(), ImgUtil.IMAGE_TYPE_JPG);
         return AjaxResult.success(base64);
     }
 

+ 4 - 6
zhjq-admin/src/main/java/com/zhjq/web/controller/system/ZhjqVoiceController.java

@@ -1,4 +1,4 @@
-package com.zhjq.web.controller.system;
+package com.zhjq.controller;
 
 import cn.hutool.core.io.FileUtil;
 import com.zhjq.common.annotation.Log;
@@ -7,11 +7,9 @@ import com.zhjq.common.core.domain.AjaxResult;
 import com.zhjq.common.core.page.TableDataInfo;
 import com.zhjq.common.enums.BusinessType;
 import com.zhjq.common.utils.DateUtils;
-import com.zhjq.common.utils.poi.ExcelUtil;
-import com.zhjq.system.domain.ZhjqVoice;
-import com.zhjq.system.service.IZhjqVoiceService;
+import com.zhjq.domain.ZhjqVoice;
+import com.zhjq.service.IZhjqVoiceService;
 import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -30,7 +28,7 @@ import java.util.Map;
  * @date 2024-12-13
  */
 @RestController
-@RequestMapping("/system/voice")
+@RequestMapping("/app/voice")
 public class ZhjqVoiceController extends BaseController {
     @Autowired
     private IZhjqVoiceService zhjqVoiceService;

+ 1 - 1
zhjq-system/src/main/java/com/zhjq/system/domain/QrCodeGenerateDTO.java

@@ -1,4 +1,4 @@
-package com.zhjq.system.domain;
+package com.zhjq.domain;
 
 
 import lombok.Data;

+ 60 - 1
zhjq-system/src/main/java/com/zhjq/system/domain/ZhjqVoice.java

@@ -1,9 +1,12 @@
-package com.zhjq.system.domain;
+package com.zhjq.domain;
 
 import com.zhjq.common.annotation.Excel;
 import com.zhjq.common.core.domain.BaseEntity;
 import org.apache.commons.lang3.builder.ToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.util.Date;
 
 /**
  * 语音播报对象 zhjq_voice
@@ -36,6 +39,27 @@ public class ZhjqVoice extends BaseEntity {
     @Excel(name = "二维码")
     private String qrCodeUrl;
 
+    /**
+     * 内容
+     */
+    private String content;
+
+    /**
+     * 作者
+     */
+    private String author;
+
+    /**
+     * 排序
+     */
+    private int sort;
+
+    /**
+     * 发布时间
+     */
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    private Date releaseTime;
+
     public void setId(Long id) {
         this.id = id;
     }
@@ -68,6 +92,37 @@ public class ZhjqVoice extends BaseEntity {
         return qrCodeUrl;
     }
 
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public String getAuthor() {
+        return author;
+    }
+
+    public void setAuthor(String author) {
+        this.author = author;
+    }
+
+    public Date getReleaseTime() {
+        return releaseTime;
+    }
+
+    public void setReleaseTime(Date releaseTime) {
+        this.releaseTime = releaseTime;
+    }
+
+    public int getSort() {
+        return sort;
+    }
+
+    public void setSort(int sort) {
+        this.sort = sort;
+    }
     @Override
     public String toString() {
         return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
@@ -75,6 +130,10 @@ public class ZhjqVoice extends BaseEntity {
                 .append("voiceName", getVoiceName())
                 .append("voiceUrl", getVoiceUrl())
                 .append("qrCodeUrl", getQrCodeUrl())
+                .append("content", getContent())
+                .append("author", getAuthor())
+                .append("sort", getSort())
+                .append("releaseTime", getReleaseTime())
                 .append("createBy", getCreateBy())
                 .append("createTime", getCreateTime())
                 .append("updateBy", getUpdateBy())

+ 3 - 2
zhjq-system/src/main/java/com/zhjq/system/mapper/ZhjqVoiceMapper.java

@@ -1,6 +1,7 @@
-package com.zhjq.system.mapper;
+package com.zhjq.mapper;
 
-import com.zhjq.system.domain.ZhjqVoice;
+
+import com.zhjq.domain.ZhjqVoice;
 
 import java.util.List;
 

+ 3 - 2
zhjq-system/src/main/java/com/zhjq/system/service/IZhjqVoiceService.java

@@ -1,6 +1,7 @@
-package com.zhjq.system.service;
+package com.zhjq.service;
 
-import com.zhjq.system.domain.ZhjqVoice;
+
+import com.zhjq.domain.ZhjqVoice;
 
 import javax.servlet.http.HttpServletResponse;
 import java.util.List;

+ 4 - 5
zhjq-system/src/main/java/com/zhjq/system/service/impl/ZhjqVoiceServiceImpl.java

@@ -1,11 +1,10 @@
-package com.zhjq.system.service.impl;
+package com.zhjq.service.imp;
 
-import com.zhjq.common.config.RuoYiConfig;
 import com.zhjq.common.utils.DateUtils;
 import com.zhjq.common.utils.file.ImageUtils;
-import com.zhjq.system.domain.ZhjqVoice;
-import com.zhjq.system.mapper.ZhjqVoiceMapper;
-import com.zhjq.system.service.IZhjqVoiceService;
+import com.zhjq.domain.ZhjqVoice;
+import com.zhjq.mapper.ZhjqVoiceMapper;
+import com.zhjq.service.IZhjqVoiceService;
 import org.apache.poi.ss.usermodel.*;
 import org.apache.poi.xssf.usermodel.XSSFWorkbook;
 import org.springframework.beans.factory.annotation.Autowired;

+ 1 - 1
zhjq-admin/src/main/java/com/zhjq/web/controller/tool/InMemoryMultipartFile.java

@@ -1,4 +1,4 @@
-package com.zhjq.web.controller.tool;
+package com.zhjq.utils;
 
 import org.springframework.web.multipart.MultipartFile;
 

+ 5 - 7
zhjq-admin/src/main/java/com/zhjq/web/controller/tool/QRCodeUtils.java

@@ -1,18 +1,16 @@
-package com.zhjq.web.controller.tool;
-
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
+package com.zhjq.utils;
 
 import com.google.zxing.BarcodeFormat;
 import com.google.zxing.EncodeHintType;
 import com.google.zxing.MultiFormatWriter;
 import com.google.zxing.WriterException;
-import com.google.zxing.client.j2se.MatrixToImageWriter;
 import com.google.zxing.common.BitMatrix;
 import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
 
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
 public class QRCodeUtils {
 
     /**

+ 37 - 1
zhjq-system/src/main/resources/mapper/system/ZhjqVoiceMapper.xml

@@ -2,13 +2,17 @@
 <!DOCTYPE mapper
         PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
-<mapper namespace="com.zhjq.system.mapper.ZhjqVoiceMapper">
+<mapper namespace="com.zhjq.mapper.ZhjqVoiceMapper">
 
     <resultMap type="ZhjqVoice" id="ZhjqVoiceResult">
         <result property="id" column="id"/>
         <result property="voiceName" column="voice_name"/>
         <result property="voiceUrl" column="voice_url"/>
         <result property="qrCodeUrl" column="qr_code_url"/>
+        <result property="content" column="content"/>
+        <result property="author" column="author"/>
+        <result property="sort" column="sort"/>
+        <result property="releaseTime" column="release_time"/>
         <result property="createBy" column="create_by"/>
         <result property="createTime" column="create_time"/>
         <result property="updateBy" column="update_by"/>
@@ -21,6 +25,10 @@
                voice_name,
                voice_url,
                qr_code_url,
+               content,
+               author,
+               sort,
+               release_time,
                create_by,
                create_time,
                update_by,
@@ -57,6 +65,14 @@
             </if>
             <if test="qrCodeUrl != null">qr_code_url,
             </if>
+            <if test="content != null">content,
+            </if>
+            <if test="author != null">author,
+            </if>
+            <if test="sort != null">sort,
+            </if>
+            <if test="releaseTime != null">release_time,
+            </if>
             <if test="createBy != null">create_by,
             </if>
             <if test="createTime != null">create_time,
@@ -75,6 +91,14 @@
             </if>
             <if test="qrCodeUrl != null">#{qrCodeUrl},
             </if>
+            <if test="content != null">#{content},
+            </if>
+            <if test="author != null">#{author},
+            </if>
+            <if test="sort != null">#{sort},
+            </if>
+            <if test="releaseTime != null">#{releaseTime},
+            </if>
             <if test="createBy != null">#{createBy},
             </if>
             <if test="createTime != null">#{createTime},
@@ -100,6 +124,18 @@
             <if test="qrCodeUrl != null">qr_code_url =
                 #{qrCodeUrl},
             </if>
+            <if test="content != null">content =
+                #{content},
+            </if>
+            <if test="author != null">author =
+                #{author},
+            </if>
+            <if test="sort != null">sort =
+                #{sort},
+            </if>
+            <if test="releaseTime != null">release_time =
+                #{releaseTime},
+            </if>
             <if test="createBy != null">create_by =
                 #{createBy},
             </if>

+ 5 - 5
zhjq-ui/src/api/system/voice.js

@@ -3,7 +3,7 @@ import request from '@/utils/request'
 // 查询语音播报列表
 export function listVoice(query) {
     return request({
-        url: '/system/voice/list',
+        url: '/app/voice/list',
         method: 'get',
         params: query
     })
@@ -12,7 +12,7 @@ export function listVoice(query) {
 // 查询语音播报详细
 export function getVoice(id) {
     return request({
-        url: '/system/voice/' + id,
+        url: '/app/voice/' + id,
         method: 'get'
     })
 }
@@ -20,7 +20,7 @@ export function getVoice(id) {
 // 新增语音播报
 export function addVoice(data) {
     return request({
-        url: '/system/voice',
+        url: '/app/voice',
         method: 'post',
         data: data
     })
@@ -29,7 +29,7 @@ export function addVoice(data) {
 // 修改语音播报
 export function updateVoice(data) {
     return request({
-        url: '/system/voice',
+        url: '/app/voice',
         method: 'put',
         data: data
     })
@@ -38,7 +38,7 @@ export function updateVoice(data) {
 // 删除语音播报
 export function delVoice(id) {
     return request({
-        url: '/system/voice/' + id,
+        url: '/app/voice/' + id,
         method: 'delete'
     })
 }

+ 38 - 39
zhjq-ui/src/views/system/voice/index.vue

@@ -65,8 +65,6 @@
       <el-table-column label="序号" align="center" type="index"/>
       <el-table-column label="景点名称" align="center" prop="voiceName"/>
       <el-table-column label="二维码" align="center" prop="qrCodeUrl">
-        <!--        <div ref="qrcode" class="qrcode" style="margin-left: 163px" @mouseover="hover = true" @mouseleave="hover = false"></div>-->
-        <!--        <div ref="qrcode" style="margin-left: 163px"></div>-->
         <template slot-scope="scope">
           <el-popover placement="right" trigger="hover">
             <img :src="getFullUrl(scope.row.qrCodeUrl)" style="width:200px;height:200px;"/>
@@ -74,7 +72,12 @@
           </el-popover>
         </template>
       </el-table-column>
-      <el-table-column label="备注" align="center" prop="remark"/>
+      <el-table-column label="作者" align="center" prop="author"/>
+      <el-table-column align="center" label="发布时间" prop="releaseTime" width="180">
+        <template slot-scope="scope">
+          <span>{{ parseTime(scope.row.releaseTime, '{y}-{m}-{d}') }}</span>
+        </template>
+      </el-table-column>
       <el-table-column label="操作" align="center" class-name="small-padding fixed-width">
         <template slot-scope="scope">
           <el-button
@@ -110,8 +113,8 @@
       @pagination="getList"
     />
 
-    <!-- 添加或修改语音播报对话框 -->
-    <el-dialog :title="title" :visible.sync="open" width="500px" append-to-body>
+    <!-- 添加或修改景点播报对话框 -->
+    <el-dialog :title="title" :visible.sync="open" width="1000px" append-to-body>
       <el-form ref="form" :model="form" :rules="rules" label-width="80px">
         <el-form-item label="景点名称" prop="voiceName">
           <el-input v-model="form.voiceName" placeholder="请输入景点名称"/>
@@ -119,8 +122,21 @@
         <el-form-item label="语音文件" prop="voiceUrl">
           <file-upload v-model="form.voiceUrl"/>
         </el-form-item>
-        <el-form-item label="备注" prop="remark">
-          <el-input v-model="form.remark" type="textarea" placeholder="请输入内容"/>
+        <el-form-item label="内容" prop="content">
+          <editor style="height: 300px" label="富文本控件" v-model="form.content"/>
+        </el-form-item>
+        <el-form-item label="作者" prop="author">
+          <el-input v-model="form.author" placeholder="请输入作者"/>
+        </el-form-item>
+        <el-form-item label="排序" prop="sort">
+          <el-input-number :min="1" v-model="form.sort" placeholder="请输入排序"/>
+        </el-form-item>
+        <el-form-item label="发布时间" prop="releaseTime">
+          <el-date-picker
+            v-model="form.releaseTime"
+            type="date"
+            placeholder="请选择发布时间">
+          </el-date-picker>
         </el-form-item>
       </el-form>
       <div slot="footer" class="dialog-footer">
@@ -132,8 +148,7 @@
 </template>
 
 <script>
-import {getVoice, listVoice, addVoice, delVoice, updateVoice, createQrCode} from "@/api/system/voice";
-import QRCode from "qrcodejs2";
+import {addVoice, createQrCode, delVoice, getVoice, listVoice, updateVoice} from "@/api/system/voice";
 
 export default {
   name: "Voice",
@@ -151,7 +166,7 @@ export default {
       showSearch: true,
       // 总条数
       total: 0,
-      // 语音播报表格数据
+      // 景点播报表格数据
       voiceList: [],
       // 弹出层标题
       title: "",
@@ -173,45 +188,29 @@ export default {
         voiceUrl: [
           {required: true, message: "语音文件不能为空", trigger: "blur"}
         ],
+        content: [
+          {required: true, message: "内容不能为空", trigger: "blur"}
+        ],
+        author: [
+          {required: true, message: "作者不能为空", trigger: "blur"}
+        ],
+        releaseTime: [
+          {required: true, message: "发布时间不能为空", trigger: "change"}
+        ],
       },
-      // showImg: false,// 是否显示企业签名二维码的弹框,默认false
-      // qrcode: '',// 二维码数据
       localIp: '',
       localPort: '',
     };
   },
   created() {
     this.getList();
-    // this.$nextTick(() => {
-    //   this.handleQrCode();
-    // });
   },
   mounted() {
     this.localIp = this.getLocalIp();
-    console.log("localIp", this.localIp)
     this.localPort = this.getPort()
-    console.log("localPort", this.localPort)
   },
   methods: {
-    // 生成二维码
-    // handleQrCode(row) {
-    //   // 清除上一次的二维码
-    //   if (this.$refs.qrcode) {
-    //     this.$refs.qrcode.innerHTML = ''; // 清除二维码方法
-    //   }
-    //   // 生成二维码(这里有个坑,一定要在 new关键字前面用 等于号,赋给一个变量,否则vue运行会报错)
-    //   this.qrcode = new QRCode(this.$refs.qrcode, {
-    //     width: 50,  // 二维码宽度 (不支持100%)
-    //     height: 50, // 二维码高度(不支持100%)
-    //     text: row.voiceUrl, // 后端返回的二维码地址
-    //     render: 'canvas', // 设置渲染方式(有两种方式 table和canvas,默认是canvas)
-    //   });
-    //   const canvas = document.querySelector('canvas');
-    //   const imageUrl = canvas.toDataURL('image/png');
-    //   console.log("imageUrl",imageUrl)
-    // },
     getLocalIp() {
-      console.log("window.location", window.location)
       const {hostname} = window.location;
       return hostname === 'localhost' || hostname === '127.0.0.1'
         ? 'http://localhost'
@@ -239,7 +238,7 @@ export default {
       });
       this.getList()
     },
-    /** 查询语音播报列表 */
+    /** 查询景点播报列表 */
     getList() {
       this.loading = true;
       listVoice(this.queryParams).then(response => {
@@ -287,7 +286,7 @@ export default {
     handleAdd() {
       this.reset();
       this.open = true;
-      this.title = "添加语音播报";
+      this.title = "添加景点播报";
     },
     /** 修改按钮操作 */
     handleUpdate(row) {
@@ -296,7 +295,7 @@ export default {
       getVoice(id).then(response => {
         this.form = response.data;
         this.open = true;
-        this.title = "修改语音播报";
+        this.title = "修改景点播报";
       });
     },
     /** 提交按钮 */
@@ -331,7 +330,7 @@ export default {
     },
     /** 导出按钮操作 */
     handleExport() {
-      this.download('system/voice/export', {
+      this.download('app/voice/export', {
         ...this.queryParams
       }, `user_${new Date().getTime()}.xlsx`)
     },