From c845254d8e0d83bb9458d0236a1da201bfbeae42 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期五, 06 六月 2025 19:18:23 +0800
Subject: [PATCH] 开发更新

---
 server/system_service/src/main/java/com/doumee/core/utils/Constants.java                                   |   16 ++
 server/visits/dmvisit_service/src/main/resources/application-dev.yml                                       |    6 
 admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue                                         |    9 -
 server/visits/dmvisit_admin/src/main/resources/bootstrap.yml                                               |    2 
 admin/src/api/Inspection/ywPatrolPoint.js                                                                  |   10 ++
 server/system_service/src/main/java/com/doumee/service/system/impl/SystemRolePermissionServiceImpl.java    |    8 +
 server/system_gateway/src/main/resources/bootstrap.yml                                                     |    2 
 admin/package-lock.json                                                                                    |    2 
 admin/src/views/Inspection/dot.vue                                                                         |   44 ++++++--
 server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java                      |    5 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java |  156 +++++++++++++++++++++++++++++-
 server/system_service/src/main/java/com/doumee/service/system/SystemRolePermissionService.java             |    2 
 server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java          |    3 
 server/system_gateway/src/main/resources/application-dev.yml                                               |    6 
 admin/src/components/base/BaseTable.vue                                                                    |    2 
 server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java         |    9 +
 16 files changed, 244 insertions(+), 38 deletions(-)

diff --git a/admin/package-lock.json b/admin/package-lock.json
index 2a619e8..240cbab 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -6,7 +6,7 @@
   "dependencies": {
     "@amap/amap-jsapi-loader": {
       "version": "1.0.1",
-      "resolved": "https://registry.npmjs.org/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
+      "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz",
       "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw=="
     },
     "@babel/code-frame": {
diff --git a/admin/src/api/Inspection/ywPatrolPoint.js b/admin/src/api/Inspection/ywPatrolPoint.js
index 13709e9..00d3dea 100644
--- a/admin/src/api/Inspection/ywPatrolPoint.js
+++ b/admin/src/api/Inspection/ywPatrolPoint.js
@@ -12,6 +12,16 @@
     trim: true
   })
 }
+
+
+// 浜岀淮鐮佸垪琛�
+export function exportQrcodes (data) {
+    return request.post('/visitsAdmin/cloudService/business/ywPatrolPoint/exportQrcodes',data, {
+      trim: true,
+      download: true
+    })
+
+}
 // 瀵煎嚭Excel
 export function exportExcel (data) {
   return request.post('/visitsAdmin/cloudService/business/ywPatrolPoint/exportExcel', data, {
diff --git a/admin/src/components/base/BaseTable.vue b/admin/src/components/base/BaseTable.vue
index 7aea229..06c3ed3 100644
--- a/admin/src/components/base/BaseTable.vue
+++ b/admin/src/components/base/BaseTable.vue
@@ -182,7 +182,7 @@
             containChildrenRows.push(row[this.configData['field.main']])
           }
         }
-        if (containChildrenRows.length > 0) {
+        if (containChildrenRows.length > 0) {鎴�
           message = '鏈灏嗗垹闄よ鏁版嵁鍙婂叾瀛愭暟鎹紝纭鍒犻櫎鍚楋紵'
         }
       }
diff --git a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
index d17b360..2f22cd9 100644
--- a/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
+++ b/admin/src/views/Inspection/components/OperaYwPatrolPointWindow.vue
@@ -1,8 +1,8 @@
 <template>
   <GlobalWindow :title="title" :visible.sync="visible" width="620px" :confirm-working="isWorking" @confirm="confirm">
     <el-form :model="form" ref="form" :rules="rules">
-      <el-form-item label="宸℃鐐圭紪鐮�" prop="code">
-        <el-input v-model="form.code" placeholder="璇疯緭鍏ュ悕绉�" v-trim />
+      <el-form-item label="宸℃鐐圭紪鐮�"  required >
+        <el-input v-model="form.code" disabled readonly placeholder="绯荤粺鑷姩鐢熸垚" v-trim />
       </el-form-item>
       <el-form-item label="宸℃鐐瑰悕绉�" prop="name">
         <el-input v-model="form.name" placeholder="璇疯緭鍏ュ贰妫�鐐瑰悕绉�" v-trim />
@@ -67,7 +67,6 @@
       // 楠岃瘉瑙勫垯
       rules: {
         name: [{ required: true, message: '璇疯緭鍏�' }],
-        code: [{ required: true, message: '璇疯緭鍏�' }],
       },
       isUploading: false,
     }
@@ -87,7 +86,7 @@
         this.$nextTick(() => {
           this.form = {
             name: '',
-            code: '',
+            // code: '',
             content: '',
             imgurl: '',
             areaId: 0,
@@ -182,4 +181,4 @@
   margin-bottom: 20px;
   float: left;
 }
-</style>
\ No newline at end of file
+</style>
diff --git a/admin/src/views/Inspection/dot.vue b/admin/src/views/Inspection/dot.vue
index 943bb51..d23746f 100644
--- a/admin/src/views/Inspection/dot.vue
+++ b/admin/src/views/Inspection/dot.vue
@@ -20,9 +20,11 @@
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
     <template v-slot:table-wrap>
-      <ul class="toolbar" v-permissions="['business:ywpatrolpoint:create', 'business:ywpatrolpoint:delete']">
+      <ul class="toolbar" v-permissions="['business:ywpatrolpoint:create', 'business:ywpatrolpoint:qrcode', 'business:ywpatrolpoint:delete']">
         <li><el-button type="primary" @click="editClick()" icon="el-icon-plus"
             v-permissions="['business:ywpatrolpoint:create']">鏂板缓</el-button></li>
+        <li><el-button type="primary" @click="exportQrcodes()" icon="el-icon-download"
+            v-permissions="['business:ywpatrolpoint:qrcode']">瀵煎嚭鍏ㄩ噺浜岀淮鐮�</el-button></li>
         <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete"
             v-permissions="['business:ywpatrolpoint:delete']">鍒犻櫎</el-button></li> -->
       </ul>
@@ -32,9 +34,11 @@
         <el-table-column prop="name" label="宸℃鐐瑰悕绉�" min-width="100px"></el-table-column>
         <el-table-column prop="deviceName" label="鍏宠仈璁惧" min-width="100px"></el-table-column>
         <el-table-column prop="areaName" label="宸℃鍖哄煙" min-width="100px"></el-table-column>
-        <el-table-column v-if="containPermissions(['business:ywpatrolpoint:update', 'business:ywpatrolpoint:delete'])"
-          label="鎿嶄綔" min-width="120" fixed="right">
+        <el-table-column v-if="containPermissions(['business:ywpatrolpoint:update','business:ywpatrolpoint:qrcode', 'business:ywpatrolpoint:delete'])"
+          label="鎿嶄綔" min-width="160" fixed="right">
           <template slot-scope="{row}">
+            <el-button type="text" @click="exportQrcodes(row.id)" icon="el-icon-download"
+              v-permissions="['business:ywpatrolpoint:qrcode']">涓嬭浇浜岀淮鐮�</el-button>
             <el-button type="text" @click="editClick(row)" icon="el-icon-edit"
               v-permissions="['business:ywpatrolpoint:update']">缂栬緫</el-button>
             <el-button type="text" @click="deleteById(row)" icon="el-icon-delete"
@@ -56,11 +60,12 @@
 import Pagination from '@/components/common/Pagination'
 import OperaYwPatrolPointWindow from './components/OperaYwPatrolPointWindow'
 import { fetchList } from '@/api/business/category'
+import { exportQrcodes } from '@/api/Inspection/ywPatrolPoint'
 export default {
   name: 'YwPatrolPoint',
   extends: BaseTable,
   components: { TableLayout, Pagination, OperaYwPatrolPointWindow },
-  data() {
+  data () {
     return {
       // 鎼滅储
       searchForm: {
@@ -71,7 +76,7 @@
       areaList: []
     }
   },
-  created() {
+  created () {
     this.config({
       module: '杩愮淮宸℃鐐逛俊鎭〃',
       api: '/Inspection/ywPatrolPoint',
@@ -82,7 +87,24 @@
     this.getProject()
   },
   methods: {
-    reset() {
+
+    exportQrcodes (id) {
+      this.$dialog.actionConfirm( '鎮ㄧ‘璁よ繘琛岃鎿嶄綔鍚楋紵','涓嬭浇鎿嶄綔鎻愮ず')
+        .then(() => {
+          exportQrcodes({id:id})
+            .then(response => {
+              this.download(response)
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.isWorking.export = false
+            })
+        })
+        .catch(() => {})
+    },
+    reset () {
       this.searchForm = {
         name: '',
         areaId: '',
@@ -90,16 +112,16 @@
       }
       this.search()
     },
-    getProject() {
+    getProject () {
       fetchList({
         model: { type: 4 },
         capacity: 1000,
-        page: 1,
+        page: 1
       }).then(res => {
         this.areaList = res.records || []
       })
     },
-    editClick(row) {
+    editClick (row) {
       if (row && row.id) {
         this.$refs.operaYwPatrolPointWindow.open('缂栬緫宸℃鐐�', row)
       } else {
@@ -107,7 +129,7 @@
       }
       // this.$refs.operaYwPatrolPointWindow.initData()
     },
-    changeSel(e) {
+    changeSel (e) {
       if (e && e.length == 1) {
       } else if (e && e.length == 2) {
         this.$set(this.searchForm, 'areaId', e[1])
@@ -115,7 +137,7 @@
 
       }
       this.search()
-    },
+    }
   }
 }
 </script>
diff --git a/server/system_gateway/src/main/resources/application-dev.yml b/server/system_gateway/src/main/resources/application-dev.yml
index f119388..ce8c115 100644
--- a/server/system_gateway/src/main/resources/application-dev.yml
+++ b/server/system_gateway/src/main/resources/application-dev.yml
@@ -1,9 +1,9 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/funingyunwei?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: doumee
-    password: rtjgfEr@&0c0m
+    url: jdbc:mysql://112.26.66.25:3306/funingyunwei?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
+    username: root
+    password: Doumee@168&QWERT
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
 
diff --git a/server/system_gateway/src/main/resources/bootstrap.yml b/server/system_gateway/src/main/resources/bootstrap.yml
index bbb8fb4..1375e72 100644
--- a/server/system_gateway/src/main/resources/bootstrap.yml
+++ b/server/system_gateway/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: pro
+    active: dev
   application:
     name: system_gateway
   # 瀹夊叏閰嶇疆
diff --git a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
index 33b987b..934227f 100644
--- a/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
+++ b/server/system_service/src/main/java/com/doumee/biz/system/impl/SystemRoleBizImpl.java
@@ -22,6 +22,7 @@
 import org.springframework.transaction.annotation.Transactional;
 import org.springframework.util.CollectionUtils;
 
+import java.util.ArrayList;
 import java.util.List;
 
 @Service
@@ -94,14 +95,16 @@
         SystemRolePermission deleteDto = new SystemRolePermission();
         deleteDto.setRoleId(dto.getRoleId());
         systemRolePermissionService.delete(deleteDto);
+        List<SystemRolePermission> newList = new ArrayList<>();
         // 鏂板鏂扮殑鏉冮檺
         for (Integer permissionId : dto.getPermissionIds()) {
             SystemRolePermission newRolePermission = new SystemRolePermission();
             newRolePermission.setRoleId(dto.getRoleId());
             newRolePermission.setPermissionId(permissionId);
             newRolePermission.setCreateUser(dto.getCreateUser());
-            systemRolePermissionService.create(newRolePermission);
+            newList.add(newRolePermission);
         }
+        systemRolePermissionService.createList(newList);
     }
 
     @Override
diff --git a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
index 29ead0a..500de9d 100644
--- a/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
+++ b/server/system_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -159,6 +159,11 @@
     public static final String EVENT_FILES_PRIVATE_DOMAIN ="EVENT_FILES_PRIVATE_DOMAIN" ;
     public static final String EVENT_FILES_PUBLIC_DOMAIN ="EVENT_FILES_PUBLIC_DOMAIN" ;
     public static final String YW_CONTRACT_FILE = "YW_CONTRACT_FILE";
+    public static final String XUNJIAN ="XUNJIAN" ;
+    public static final String XJ_POINT_PREFIX ="XJ_POINT_PREFIX" ;
+    public static final String XJ_POINT_CODE_LENGTH ="XJ_POINT_CODE_LENGTH" ;
+    public static final String XJ_POINT_QRCODE_URL ="XJ_POINT_QRCODE_URL" ;
+    public static final String XJ_RERIRECT_URI ="XJ_RERIRECT_URI" ;
     public static  boolean DEALING_HK_SYNCPRIVILEGE= false;
     public static  boolean DEALING_HK_SYNCDEVICE = false;
     public static  boolean DEALING_HK_SYNCPLATFORM = false;
@@ -250,6 +255,12 @@
 
         return sb.toString();
     }
+
+    public static String formartNumString(int length, long l) {
+
+        return  String.format("%0"+length+"d",l );
+    }
+
     public interface VisitIccmStatus{
         //璁垮鐘舵��(0:鏈鍒�,1:宸茬鍒�,2:宸茬閫�,3:婊炵暀,4:鏈闂�,5:鑷姩绛剧,6:鏈閫�)
         int waitSign = 0;
@@ -508,6 +519,7 @@
 
     public static final String WX_PLATFORM = "WX_PLATFORM";
     public static final String WX_PLATFORM_ACCESS_TOKEN = "WX_PLATFORM_ACCESS_TOKEN";
+    public static final String WX_AUTH_URL = "WX_AUTH_URL";
     public static final String WX_PLATFORM_APPID = "WX_PLATFORM_APPID";
     public static final String WX_PLATFORM_SECRET = "WX_PLATFORM_SECRET";
     public static final String WX_PLATFORM_AUDIT_VISIT = "WX_PLATFORM_AUDIT_VISIT";
@@ -809,8 +821,8 @@
     }
 
     public static void main(String[] args) {
-        System.out.println(Constants.checkCarNo("鐨朅10991"));
-        System.out.println(Constants.checkCarNo("鐨朅A10991"));
+        System.out.println(Constants.formartNumString(8,1023492384023480l));
+//        System.out.println(Constants.checkCarNo("鐨朅A10991"));
 //        System.out.println(Constants.getVehiclePlateNo("婀楤140D17").getDescription());
 //        System.out.println(Constants.getVehiclePlateNo("瀹緼P0637").getDescription());
 
diff --git a/server/system_service/src/main/java/com/doumee/service/system/SystemRolePermissionService.java b/server/system_service/src/main/java/com/doumee/service/system/SystemRolePermissionService.java
index b3fcb94..3eea8fc 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/SystemRolePermissionService.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/SystemRolePermissionService.java
@@ -88,4 +88,6 @@
      * @date 2023/03/21 14:49
      */
     long count(SystemRolePermission systemRolePermission);
+
+    Integer createList(List<SystemRolePermission> newList);
 }
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemRolePermissionServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemRolePermissionServiceImpl.java
index da0131d..8f6bee6 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemRolePermissionServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemRolePermissionServiceImpl.java
@@ -34,6 +34,14 @@
         systemRolePermissionMapper.insert(systemRolePermission);
         return systemRolePermission.getId();
     }
+    @Override
+    public Integer createList(List<SystemRolePermission> list) {
+        if(list ==null || list.size() == 0){
+            return null;
+        }
+        systemRolePermissionMapper.insert(list);
+        return list.size();
+    }
 
     @Override
     public void deleteById(Integer id) {
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
index af02236..94e9c2c 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/YwPatrolPointCloudController.java
@@ -12,6 +12,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import com.doumee.config.annotation.CloudRequiredPermission;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.*;
 
@@ -70,6 +71,14 @@
         return ApiResponse.success(null);
     }
 
+    @ApiOperation("鎵归噺瀵煎嚭浜岀淮鐮�")
+    @PostMapping("/exportQrcodes")
+    @CloudRequiredPermission("business:ywpatrolpoint:qrcode")
+    public void exportQrcodes(@RequestBody YwPatrolPoint ywPatrolPoint,HttpServletResponse response,@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+        ywPatrolPointService.exportQrcodes(ywPatrolPoint.getId(),response);
+    }
+
+
     @ApiOperation("鍒嗛〉鏌ヨ")
     @PostMapping("/page")
     @CloudRequiredPermission("business:ywpatrolpoint:query")
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 86e11a3..2df12af 100644
--- a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
+++ b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
 spring:
   profiles:
-    active: test
+    active: pro
   application:
     name: visitsAdmin
     # 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
index 8be507c..261536e 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwPatrolPointService.java
@@ -4,6 +4,8 @@
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
 import com.doumee.dao.business.model.YwPatrolPoint;
+
+import javax.servlet.http.HttpServletResponse;
 import java.util.List;
 
 /**
@@ -48,6 +50,7 @@
      * @param ywPatrolPoint 瀹炰綋瀵硅薄
      */
     void updateById(YwPatrolPoint ywPatrolPoint);
+    void exportQrcodes(Integer id, HttpServletResponse ywPatrolPoint);
 
     /**
      * 鎵归噺涓婚敭鏇存柊
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
index 548644c..12799da 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwPatrolPointServiceImpl.java
@@ -22,14 +22,32 @@
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import com.google.zxing.BarcodeFormat;
+import com.google.zxing.EncodeHintType;
+import com.google.zxing.MultiFormatWriter;
+import com.google.zxing.client.j2se.MatrixToImageWriter;
+import com.google.zxing.common.BitMatrix;
+import com.google.zxing.qrcode.decoder.ErrorCorrectionLevel;
+import com.google.zxing.qrcode.encoder.ByteMatrix;
+import com.google.zxing.qrcode.encoder.Encoder;
+import com.google.zxing.qrcode.encoder.QRCode;
+import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
+import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
 import org.apache.commons.lang3.StringUtils;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
 import org.springframework.util.CollectionUtils;
 
-import java.util.Date;
-import java.util.List;
-import java.util.Objects;
+import javax.servlet.ServletOutputStream;
+import javax.servlet.http.HttpServletResponse;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.IOException;
+import java.net.URLEncoder;
+import java.nio.charset.Charset;
+import java.nio.file.FileSystems;
+import java.nio.file.Path;
+import java.util.*;
 
 /**
  * 杩愮淮宸℃鐐逛俊鎭〃Service瀹炵幇
@@ -49,15 +67,21 @@
     @Override
     public Integer create(YwPatrolPoint ywPatrolPoint) {
         if(Objects.isNull(ywPatrolPoint)
-                || Objects.isNull(ywPatrolPoint.getCode())
+//                || Objects.isNull(ywPatrolPoint.getCode())
                 || Objects.isNull(ywPatrolPoint.getName())
         ){
             throw new BusinessException(ResponseStatus.BAD_REQUEST);
         }
-        if(ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>().lambda().eq(YwPatrolPoint::getIsdeleted,Constants.ZERO)
-                .eq(YwPatrolPoint::getCode,ywPatrolPoint.getCode()))>Constants.ZERO){
-            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"宸℃鐐圭紪鐮侀噸澶�!");
+
+        String pre =  systemDictDataBiz.queryByCode(Constants.XUNJIAN,Constants.XJ_POINT_PREFIX).getCode();
+        int length = 8;
+        try {
+            length =  Integer.parseInt(systemDictDataBiz.queryByCode(Constants.XUNJIAN,Constants.XJ_POINT_CODE_LENGTH).getCode());
+        }catch (Exception e){
         }
+        long num = ywPatrolPointMapper.selectCount(new QueryWrapper<YwPatrolPoint>());
+
+        ywPatrolPoint.setCode(pre+Constants.formartNumString (length,(num+1)));
         LoginUserInfo loginUserInfo = ywPatrolPoint.getLoginUserInfo();
         ywPatrolPoint.setCreateDate(new Date());
         ywPatrolPoint.setCreator(loginUserInfo.getId());
@@ -82,10 +106,11 @@
 
     @Override
     public void deleteById(Integer id, LoginUserInfo user) {
-        ywPatrolPointMapper.update(new UpdateWrapper<YwPatrolPoint>().lambda().set(YwPatrolPoint::getIsdeleted,Constants.ONE)
+        ywPatrolPointMapper.update(new UpdateWrapper<YwPatrolPoint>().lambda()
+                .set(YwPatrolPoint::getIsdeleted,Constants.ONE)
                 .set(YwPatrolPoint::getEditDate, DateUtil.getCurrDateTime())
                 .set(YwPatrolPoint::getEditor,user.getId())
-                .eq(YwPatrolPoint::getId,user.getId())
+                .eq(YwPatrolPoint::getId,id)
         );
     }
 
@@ -94,7 +119,120 @@
         UpdateWrapper<YwPatrolPoint> deleteWrapper = new UpdateWrapper<>(ywPatrolPoint);
         ywPatrolPointMapper.delete(deleteWrapper);
     }
+    @Override
+    public void exportQrcodes(Integer id, HttpServletResponse response){
+        try {
+            List<File>  fileList = new ArrayList<>();
+            List<YwPatrolPoint> bikesList = ywPatrolPointMapper.selectList(new QueryWrapper<YwPatrolPoint>().lambda()
+                    .eq(YwPatrolPoint::getIsdeleted,Constants.ZERO)
+                    .eq(id!=null,YwPatrolPoint::getId,id)
+            );
+            if(bikesList== null || bikesList.size() == 0){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY);
+            }
+            // 鍒涘缓涓存椂鏂囦欢鐨勫墠缂�鍜屽悗缂�
+            String path =  systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_AUTH_URL).getCode();
+            String uri =  systemDictDataBiz.queryByCode(Constants.XUNJIAN,Constants.XJ_RERIRECT_URI).getCode();
+            String appId = systemDictDataBiz.queryByCode(Constants.WX_PLATFORM,Constants.WX_PLATFORM_APPID).getCode() ;
+            // 鍒涘缓涓存椂鏂囦欢
+            for(YwPatrolPoint l : bikesList){
+                if(StringUtils.isNotBlank(l.getCode())){
+                    String redirectUri = uri.replace("${ywid}",l.getCode());
+                    String url = path.replace("${url}",URLEncoder.encode(redirectUri)).replace("${appid}",appId);
+                    File file =  generateQRCodeImage(url,100,100,l.getCode()+".png");
+                    if(file!=null && file.isFile()){
+                        fileList.add(file);
+                    }
+                }
+            }
+            if(fileList == null || fileList.size() == 0){
+                throw  new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"瀵逛笉璧凤紝涓嬭浇鍐呭涓虹┖锛屾搷浣滃け璐ワ紒");
+            }
+            String fileName =  "宸℃鐐逛簩缁寸爜瀵煎嚭_"+System.currentTimeMillis()+".zip" ;
+            String encodeFileName =URLEncoder.encode(fileName, Charset.forName("UTF-8").toString())+".zip";
+            response.setHeader("Content-Disposition","attachment;filename=" + encodeFileName);
+            response.setContentType("application/octet-stream");
+            response.setHeader("eva-opera-type", "download");
+            response.setHeader("eva-download-filename", encodeFileName);
+            packFilesToZip(fileList,response.getOutputStream());
+        } catch (IOException e) {
+            throw new BusinessException(ResponseStatus.EXPORT_EXCEL_ERROR, e);
+        }
+    }
+    public static File generateQRCodeImage(String text, int width, int height, String fileName)  {
+        try {
+            // 鍒涘缓浜岀淮鐮佹暟鎹煩闃�
+            Map<EncodeHintType, Object> hints = new HashMap<>();
+            hints.put(EncodeHintType.CHARACTER_SET, "UTF-8"); // 璁剧疆瀛楃缂栫爜涓篣TF-8
+            hints.put(EncodeHintType.ERROR_CORRECTION, ErrorCorrectionLevel.H); // 璁剧疆绾犻敊绛夌骇涓篐
+            hints.put(EncodeHintType.MARGIN, 0); // 璁剧疆鐧借竟涓�0
+            BitMatrix bitMatrix = new MultiFormatWriter().encode(text, BarcodeFormat.QR_CODE , width, height, hints);
+            // 淇濆瓨浜岀淮鐮佸浘鐗囧埌鏂囦欢绯荤粺
+            File f = new File("temp/");
+            if(!f.exists()){
+                f.mkdirs();
+            }
+//            bitMatrix =  renderResult(bitMatrix,width,height);
+            Path path = FileSystems.getDefault().getPath("temp/"+fileName);
+            MatrixToImageWriter.writeToPath(bitMatrix, "PNG", path); // 淇濆瓨涓篜NG鏍煎紡鐨勫浘鐗�
+            return path.toFile();
+        }catch (Exception e){
+            e.printStackTrace();
+        }
 
+        return  null;
+    }
+
+    public static void main(String[] args) {
+        File f =generateQRCodeImage("dj灏戞椂璇佃瘲涔﹀皯鏃惰璇椾功鏄拻鏄拻鏄拻",100,100,UUID.randomUUID().toString()+".png");
+        System.out.println(f.getAbsolutePath());
+    }
+
+    private static BitMatrix renderResult(BitMatrix input, int width, int height) {
+        if (input == null) {
+           return null;
+        }
+        int inputWidth = input.getWidth();
+        int inputHeight = input.getHeight();
+        // 渚濇嵁鐢ㄦ埛鐨勮緭鍏ュ楂橈紝璁$畻鏈�鍚庣殑杈撳嚭瀹介珮
+        int outputWidth = Math.max(width, inputWidth);
+        int outputHeight = Math.max(height, inputHeight);
+
+        //璁$畻缂╂斁姣斾緥
+        int multiple = Math.min(outputWidth / inputWidth, outputHeight / inputHeight);
+
+        BitMatrix output = new BitMatrix(outputWidth, outputHeight);
+        int inputY = 0;
+        // 宓屽寰幆锛屽皢ByteMatrix鐨勫唴瀹硅绠梡adding鍚庤浆鎹㈡垚BitMatrix
+        for (int outputY = 0; inputY < inputHeight; outputY += multiple) {
+            int inputX = 0;
+            for (int outputX = 0; inputX < inputWidth; outputX += multiple) {
+                if (input.get(inputX, inputY)) {
+                    output.setRegion(outputX, outputY, multiple, multiple);
+                }
+                inputX++;
+            }
+            inputY++;
+        }
+
+        return output;
+    }
+    public static void packFilesToZip(List<File> files,    ServletOutputStream os) throws IOException {
+        try (ZipArchiveOutputStream zipOutputStream = new ZipArchiveOutputStream(os)) {
+            for (File file : files) {
+                ZipArchiveEntry entry = new ZipArchiveEntry(file.getName());
+                zipOutputStream.putArchiveEntry(entry);
+                try (FileInputStream fileInputStream = new FileInputStream(file)) {
+                    byte[] buffer = new byte[1024];
+                    int length;
+                    while ((length = fileInputStream.read(buffer)) > 0) {
+                        zipOutputStream.write(buffer, 0, length);
+                    }
+                }
+                zipOutputStream.closeArchiveEntry();
+            }
+        }
+    }
     @Override
     public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) {
         if (CollectionUtils.isEmpty(ids)) {
diff --git a/server/visits/dmvisit_service/src/main/resources/application-dev.yml b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
index b3984c7..7e535db 100644
--- a/server/visits/dmvisit_service/src/main/resources/application-dev.yml
+++ b/server/visits/dmvisit_service/src/main/resources/application-dev.yml
@@ -1,9 +1,9 @@
 spring:
   # 鏁版嵁婧愰厤缃�
   datasource:
-    url: jdbc:mysql://sh-cdb-aiskr3vy.sql.tencentcdb.com:62443/funingyunwei?useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Shanghai
-    username: doumee
-    password: rtjgfEr@&0c0m
+    url: jdbc:mysql://112.26.66.25:3306/funingyunwei?useUnicode=true&characterEncoding=utf-8&useSSL=true&serverTimezone=GMT%2B8
+    username: root
+    password: Doumee@168&QWERT
     driver-class-name: com.mysql.cj.jdbc.Driver
     type: com.alibaba.druid.pool.DruidDataSource
   redis:

--
Gitblit v1.9.3