From 7ec3683c8e41460f4bb0bd3a6677198742313e2b Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期二, 02 六月 2026 14:34:57 +0800
Subject: [PATCH] 新增智能电表、空调管理
---
server/visits/admin_timer/src/main/resources/application.yml | 2
h5/utils/config.js | 4
server/visits/admin_timer/src/main/resources/bootstrap.yml | 2
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java | 20 ++
server/visits/dmvisit_admin/src/main/resources/bootstrap.yml | 2
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java | 3
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java | 135 +++++++++++++++
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/YwCustomerWebController.java | 50 +++++
h5/package-lock.json | 167 ++++++++++++++++++
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java | 7
server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java | 11 +
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java | 2
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwCustomerH5AuthService.java | 15 +
admin/src/views/operation/category.vue | 18 +-
server/db/business.yw_customer.openid.sql | 22 ++
h5/package.json | 23 ++
server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java | 2
h5/manifest.json | 11
server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java | 3
19 files changed, 473 insertions(+), 26 deletions(-)
diff --git a/admin/src/views/operation/category.vue b/admin/src/views/operation/category.vue
index af61f66..76ad0de 100644
--- a/admin/src/views/operation/category.vue
+++ b/admin/src/views/operation/category.vue
@@ -8,7 +8,7 @@
@click="exportExcel">瀵煎嚭</el-button></li>
</ul>
<el-table row-key="id" :tree-props="{ children: 'childCategoryList' }" v-loading="isWorking.search"
- :data="dataList" stripe @selection-change="handleSelectionChange">
+ :data="tableData.list" stripe @selection-change="handleSelectionChange">
<el-table-column prop="name" label="璁惧鍒嗙被" min-width="100px"></el-table-column>
<!-- <el-table-column prop="parentName" label="鎵�灞炲垎绫�" min-width="100px"></el-table-column> -->
<el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
@@ -22,7 +22,7 @@
</template>
</el-table-column>
</el-table>
- <pagination @size-change="handleSizeChange" @current-change="getList" :pagination="tableData.pagination">
+ <pagination @size-change="handleSizeChange" @current-change="handlePageChange" :pagination="tableData.pagination">
</pagination>
</template>
<!-- 鏂板缓/淇敼 -->
@@ -43,9 +43,10 @@
data() {
return {
// 鎼滅储
- filters: {
+ /* filters: {
parentId: ''
- },
+ },*/
+ searchForm:{ type: 5 ,parentId: ''},
isShowEdit: false,
loading: false,
pagination: {
@@ -63,7 +64,7 @@
'field.id': 'id',
'field.main': 'id'
})
- this.getList()
+ this.search()
},
methods: {
handleEdit(row) {
@@ -84,16 +85,15 @@
type: 'warning'
}).then(() => {
deleteById(row.id).then(res => {
- this.getList()
+ this.search()
})
})
-
},
getList() {
- const { pagination, filters } = this
+ const { pagination } = this
this.loading = true
fetchList({
- model: { ...filters, type: 5 },
+ model: this.searchForm,
capacity: pagination.pageSize,
page: pagination.page,
}).then(res => {
diff --git a/h5/manifest.json b/h5/manifest.json
index 0a6161d..056e3b0 100644
--- a/h5/manifest.json
+++ b/h5/manifest.json
@@ -141,13 +141,10 @@
"https" : false
},
"sdkConfigs" : {
- "maps" : {
- "amap" : {
- "key" : "d9a554b1808ce10a12a932ed9b0db1d0",
- "securityJsCode" : "",
- "serviceHost" : ""
- }
- }
+ "maps" : {}
+ },
+ "unipush" : {
+ "enable" : false
}
}
}
diff --git a/h5/package-lock.json b/h5/package-lock.json
new file mode 100644
index 0000000..47b01a6
--- /dev/null
+++ b/h5/package-lock.json
@@ -0,0 +1,167 @@
+{
+ "name": "鍥剧墖瑁佸壀 鍥涜鎷栧姩 鍥剧墖缂╂斁绉诲姩",
+ "version": "1.0.0",
+ "lockfileVersion": 2,
+ "requires": true,
+ "packages": {
+ "": {
+ "name": "鍥剧墖瑁佸壀 鍥涜鎷栧姩 鍥剧墖缂╂斁绉诲姩",
+ "version": "1.0.0",
+ "dependencies": {
+ "dayjs": "^1.11.13",
+ "dingtalk-jsapi": "^3.2.0",
+ "html5-qrcode": "^2.3.8",
+ "uniapp-qrcode": "^1.0.2",
+ "uview-ui": "^2.0.37",
+ "vconsole": "^3.15.1"
+ }
+ },
+ "node_modules/@babel/runtime": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==",
+ "engines": {
+ "node": ">=6.9.0"
+ }
+ },
+ "node_modules/copy-text-to-clipboard": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz",
+ "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==",
+ "engines": {
+ "node": ">=12"
+ },
+ "funding": {
+ "url": "https://github.com/sponsors/sindresorhus"
+ }
+ },
+ "node_modules/core-js": {
+ "version": "3.49.0",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.49.0.tgz",
+ "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==",
+ "hasInstallScript": true,
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/core-js"
+ }
+ },
+ "node_modules/dayjs": {
+ "version": "1.11.21",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz",
+ "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="
+ },
+ "node_modules/dingtalk-jsapi": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmmirror.com/dingtalk-jsapi/-/dingtalk-jsapi-3.2.9.tgz",
+ "integrity": "sha512-VLt8co92z29bdguxUvJLnhpQn7WFjb5rJTODDczieS7I0yyWj5+KwF04sWfMvyIKX0MQPVL++Fyo6z2JucFpgQ==",
+ "dependencies": {
+ "promise-polyfill": "^7.1.0"
+ }
+ },
+ "node_modules/html5-qrcode": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmmirror.com/html5-qrcode/-/html5-qrcode-2.3.8.tgz",
+ "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="
+ },
+ "node_modules/mutation-observer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
+ "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
+ },
+ "node_modules/promise-polyfill": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+ "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+ },
+ "node_modules/uniapp-qrcode": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/uniapp-qrcode/-/uniapp-qrcode-1.0.2.tgz",
+ "integrity": "sha512-jcWwWz4yXsO7if/+78MMXj5VUdZTLu2D6L/IKb4mJkIw87oF11pO3WS/jS27SUcPCrX/BKcir5a2R1uvkaoR9g=="
+ },
+ "node_modules/uview-ui": {
+ "version": "2.0.38",
+ "resolved": "https://registry.npmmirror.com/uview-ui/-/uview-ui-2.0.38.tgz",
+ "integrity": "sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ==",
+ "engines": {
+ "HBuilderX": "^3.1.0"
+ }
+ },
+ "node_modules/vconsole": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
+ "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
+ "dependencies": {
+ "@babel/runtime": "^7.17.2",
+ "copy-text-to-clipboard": "^3.0.1",
+ "core-js": "^3.11.0",
+ "mutation-observer": "^1.0.3"
+ }
+ }
+ },
+ "dependencies": {
+ "@babel/runtime": {
+ "version": "7.29.7",
+ "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.29.7.tgz",
+ "integrity": "sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw=="
+ },
+ "copy-text-to-clipboard": {
+ "version": "3.2.2",
+ "resolved": "https://registry.npmmirror.com/copy-text-to-clipboard/-/copy-text-to-clipboard-3.2.2.tgz",
+ "integrity": "sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A=="
+ },
+ "core-js": {
+ "version": "3.49.0",
+ "resolved": "https://registry.npmmirror.com/core-js/-/core-js-3.49.0.tgz",
+ "integrity": "sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg=="
+ },
+ "dayjs": {
+ "version": "1.11.21",
+ "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.11.21.tgz",
+ "integrity": "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="
+ },
+ "dingtalk-jsapi": {
+ "version": "3.2.9",
+ "resolved": "https://registry.npmmirror.com/dingtalk-jsapi/-/dingtalk-jsapi-3.2.9.tgz",
+ "integrity": "sha512-VLt8co92z29bdguxUvJLnhpQn7WFjb5rJTODDczieS7I0yyWj5+KwF04sWfMvyIKX0MQPVL++Fyo6z2JucFpgQ==",
+ "requires": {
+ "promise-polyfill": "^7.1.0"
+ }
+ },
+ "html5-qrcode": {
+ "version": "2.3.8",
+ "resolved": "https://registry.npmmirror.com/html5-qrcode/-/html5-qrcode-2.3.8.tgz",
+ "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ=="
+ },
+ "mutation-observer": {
+ "version": "1.0.3",
+ "resolved": "https://registry.npmmirror.com/mutation-observer/-/mutation-observer-1.0.3.tgz",
+ "integrity": "sha512-M/O/4rF2h776hV7qGMZUH3utZLO/jK7p8rnNgGkjKUw8zCGjRQPxB8z6+5l8+VjRUQ3dNYu4vjqXYLr+U8ZVNA=="
+ },
+ "promise-polyfill": {
+ "version": "7.1.2",
+ "resolved": "https://registry.npmmirror.com/promise-polyfill/-/promise-polyfill-7.1.2.tgz",
+ "integrity": "sha512-FuEc12/eKqqoRYIGBrUptCBRhobL19PS2U31vMNTfyck1FxPyMfgsXyW4Mav85y/ZN1hop3hOwRlUDok23oYfQ=="
+ },
+ "uniapp-qrcode": {
+ "version": "1.0.2",
+ "resolved": "https://registry.npmmirror.com/uniapp-qrcode/-/uniapp-qrcode-1.0.2.tgz",
+ "integrity": "sha512-jcWwWz4yXsO7if/+78MMXj5VUdZTLu2D6L/IKb4mJkIw87oF11pO3WS/jS27SUcPCrX/BKcir5a2R1uvkaoR9g=="
+ },
+ "uview-ui": {
+ "version": "2.0.38",
+ "resolved": "https://registry.npmmirror.com/uview-ui/-/uview-ui-2.0.38.tgz",
+ "integrity": "sha512-6egHDf9lXHKpG3hEjRE0vMx4+VWwKk/ReTf5x18KrIKqdvdPRqO3+B8Unh7vYYwrIxzAWIlmhZ9RJpKI/4UqPQ=="
+ },
+ "vconsole": {
+ "version": "3.15.1",
+ "resolved": "https://registry.npmmirror.com/vconsole/-/vconsole-3.15.1.tgz",
+ "integrity": "sha512-KH8XLdrq9T5YHJO/ixrjivHfmF2PC2CdVoK6RWZB4yftMykYIaXY1mxZYAic70vADM54kpMQF+dYmvl5NRNy1g==",
+ "requires": {
+ "@babel/runtime": "^7.17.2",
+ "copy-text-to-clipboard": "^3.0.1",
+ "core-js": "^3.11.0",
+ "mutation-observer": "^1.0.3"
+ }
+ }
+ }
+}
diff --git a/h5/package.json b/h5/package.json
new file mode 100644
index 0000000..f516141
--- /dev/null
+++ b/h5/package.json
@@ -0,0 +1,23 @@
+{
+ "id": "tly-picture-cut",
+ "name": "鍥剧墖瑁佸壀 鍥涜鎷栧姩 鍥剧墖缂╂斁绉诲姩",
+ "version": "1.0.0",
+ "description": "鍥剧墖瑁佸壀缁勪欢 鏀寔鎷栧姩鍥涜 宸蹭娇鐢ㄥ井淇″皬绋嬪簭銆丠5 骞冲彴",
+ "keywords": [
+ "鍥剧墖瑁佸壀"
+ ],
+ "dcloudext": {
+ "category": [
+ "鍓嶇缁勪欢",
+ "閫氱敤缁勪欢"
+ ]
+ },
+ "dependencies": {
+ "dayjs": "^1.11.13",
+ "dingtalk-jsapi": "^3.2.0",
+ "html5-qrcode": "^2.3.8",
+ "uniapp-qrcode": "^1.0.2",
+ "uview-ui": "^2.0.37",
+ "vconsole": "^3.15.1"
+ }
+}
diff --git a/h5/utils/config.js b/h5/utils/config.js
index df81430..705924a 100644
--- a/h5/utils/config.js
+++ b/h5/utils/config.js
@@ -1,7 +1,7 @@
// export const baseUrl = 'gateway_interface/'
-// export const baseUrl = 'http://192.168.0.173/gateway_interface/'
+export const baseUrl = 'http://localhost:10010/gateway_interface/'
// export const baseUrl = 'https://zhcg.fnwtzx.com/gateway_interface/'
-export const baseUrl = 'https://dmtest.ahapp.net/gateway_interface/'
+//export const baseUrl = 'https://dmtest.ahapp.net/gateway_interface/'
export const uploadAvatar = `${baseUrl}visitsAdmin/cloudService/web/public/uploadFtp.do`
export const uploadUrl = `${baseUrl}visitsAdmin/cloudService/public/uploadBatch`
diff --git a/server/db/business.yw_customer.openid.sql b/server/db/business.yw_customer.openid.sql
new file mode 100644
index 0000000..ddd20f7
--- /dev/null
+++ b/server/db/business.yw_customer.openid.sql
@@ -0,0 +1,22 @@
+-- 鍟嗘埛 H5 寰俊 openid
+SET @db := DATABASE();
+
+SET @sql := IF(
+ (SELECT COUNT(*) FROM information_schema.COLUMNS
+ WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'yw_customer' AND COLUMN_NAME = 'openid') = 0,
+ 'ALTER TABLE `yw_customer` ADD COLUMN `openid` varchar(64) DEFAULT NULL COMMENT ''寰俊openid'' AFTER `phone`',
+ 'SELECT 1'
+);
+PREPARE stmt FROM @sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
+
+SET @sql := IF(
+ (SELECT COUNT(*) FROM information_schema.STATISTICS
+ WHERE TABLE_SCHEMA = @db AND TABLE_NAME = 'yw_customer' AND INDEX_NAME = 'idx_openid') = 0,
+ 'ALTER TABLE `yw_customer` ADD INDEX `idx_openid` (`openid`)',
+ 'SELECT 1'
+);
+PREPARE stmt FROM @sql;
+EXECUTE stmt;
+DEALLOCATE PREPARE stmt;
diff --git a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
index cf8c0df..fc97fe1 100644
--- a/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
+++ b/server/system_service/src/main/java/com/doumee/core/model/LoginUserInfo.java
@@ -12,6 +12,7 @@
import java.io.Serializable;
import java.util.ArrayList;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
@@ -52,6 +53,16 @@
private List<Integer> companyIdList;
private Company company;
+ @ApiModelProperty("H5鐢ㄦ埛绫诲瀷 0杩愮淮浜哄憳 1鍟嗘埛")
+ private Integer h5UserType;
+
+ @ApiModelProperty("鍟嗘埛ID锛坔5UserType=1鏃舵湁鍊硷級")
+ private Integer customerId;
+
+ public static final int H5_USER_OPS = 0;
+ public static final int H5_USER_CUSTOMER = 1;
+ public static final int SOURCE_H5_CUSTOMER = 10;
+
//jwt鐧诲綍璁剧疆
public static LoginUserInfo from(SystemUser user, List<SystemRole> roles, List<SystemPermission> permissions,Company company,String sessionId) {
if (user == null) {
diff --git a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
index b6d38f5..8f4a087 100644
--- a/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
+++ b/server/system_service/src/main/java/com/doumee/dao/system/dto/LoginPhoneDTO.java
@@ -27,4 +27,7 @@
@NotBlank(message = "楠岃瘉鐮佷笉鑳戒负绌�")
@ApiModelProperty(value = "楠岃瘉鐮�")
private String code;
+
+ @ApiModelProperty(value = "0杩愮淮浜哄憳 1鍟嗘埛")
+ private Integer userType;
}
diff --git a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
index e2b5955..78d53b7 100644
--- a/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
+++ b/server/system_service/src/main/java/com/doumee/service/system/impl/SystemLoginServiceImpl.java
@@ -273,6 +273,7 @@
user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
+ userInfo.setH5UserType(LoginUserInfo.H5_USER_OPS);
return userInfo;
}
@@ -353,6 +354,7 @@
user.setCompanyIdList(systemDataPermissionService.selectHighRole(new SystemDataPermission(),rt,user));
LoginUserInfo userInfo = LoginUserInfo.from(user, roles, permissions,company,null);
+ userInfo.setH5UserType(LoginUserInfo.H5_USER_OPS);
String token = jwtTokenUtil.generateToken(userInfo);
return token;
diff --git a/server/visits/admin_timer/src/main/resources/application.yml b/server/visits/admin_timer/src/main/resources/application.yml
index 1dcdaf9..2149d8b 100644
--- a/server/visits/admin_timer/src/main/resources/application.yml
+++ b/server/visits/admin_timer/src/main/resources/application.yml
@@ -64,7 +64,7 @@
compression:
enabled: true
mime-types: application/json
- port: 10037
+ port: 10010
tomcat:
max-swallow-size: -1
servlet:
diff --git a/server/visits/admin_timer/src/main/resources/bootstrap.yml b/server/visits/admin_timer/src/main/resources/bootstrap.yml
index b5b65b7..efae338 100644
--- a/server/visits/admin_timer/src/main/resources/bootstrap.yml
+++ b/server/visits/admin_timer/src/main/resources/bootstrap.yml
@@ -1,6 +1,6 @@
spring:
profiles:
- active: pro
+ active: dev
application:
name: visitsTimer
# 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
index dbf0657..0d9dc60 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/VisitorWebController.java
@@ -75,10 +75,11 @@
@GetMapping("/ywWxAuthorize")
@ApiImplicitParams({
@ApiImplicitParam(paramType = "query", dataType = "String", name = "code", value = "鎺堟潈鐮�", required = true),
- @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "source", value = "鏉ユ簮:0=鍙告満锛�1=璁垮锛�2=鍐呴儴鍛樺伐", required = true)
+ @ApiImplicitParam(paramType = "query", dataType = "Integer", name = "userType", value = "鐢ㄦ埛绫诲瀷:0=杩愮淮浜哄憳锛�1=鍟嗘埛", required = false)
})
- public ApiResponse<WxAuthorizeVO> ywWxAuthorize(@RequestParam String code) {
- WxAuthorizeVO wxAuthorizeVO = memberService.ywWxAuthorize(code);
+ public ApiResponse<WxAuthorizeVO> ywWxAuthorize(@RequestParam String code,
+ @RequestParam(required = false, defaultValue = "0") Integer userType) {
+ WxAuthorizeVO wxAuthorizeVO = memberService.ywWxAuthorize(code, userType);
return ApiResponse.success("鏌ヨ鎴愬姛",wxAuthorizeVO);
}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/YwCustomerWebController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/YwCustomerWebController.java
new file mode 100644
index 0000000..2e38ea4
--- /dev/null
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/web/YwCustomerWebController.java
@@ -0,0 +1,50 @@
+package com.doumee.cloud.web;
+
+import com.doumee.api.BaseController;
+import com.doumee.config.annotation.LoginNoRequired;
+import com.doumee.core.annotation.pr.PreventRepeat;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
+import com.doumee.service.business.YwCustomerH5AuthService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+@Api(tags = "銆愬叕浼楀彿銆戝晢鎴风櫥褰�")
+@RestController
+@LoginNoRequired
+@RequestMapping(Constants.CLOUD_SERVICE_URL_INDEX + "/web/customer")
+public class YwCustomerWebController extends BaseController {
+
+ @Autowired
+ private YwCustomerH5AuthService ywCustomerH5AuthService;
+
+ @PreventRepeat
+ @ApiOperation("鍟嗘埛鐭俊楠岃瘉鐮佺櫥褰�")
+ @PostMapping("/loginByPhone")
+ public ApiResponse<String> loginByPhone(@Validated @RequestBody LoginPhoneDTO dto) {
+ try {
+ return ApiResponse.success(ywCustomerH5AuthService.loginByPhone(dto));
+ } catch (BusinessException e) {
+ return ApiResponse.failed(e.getCode(), e.getMessage());
+ } catch (Exception e) {
+ return ApiResponse.failed(ResponseStatus.SERVER_ERROR);
+ }
+ }
+
+ @ApiOperation("鑾峰彇褰撳墠鍟嗘埛鐧诲綍淇℃伅")
+ @GetMapping("/getUserInfo")
+ public ApiResponse<LoginUserInfo> getUserInfo(@RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ LoginUserInfo user = this.getLoginUser(token);
+ if (user == null || !Constants.equalsInteger(user.getH5UserType(), LoginUserInfo.H5_USER_CUSTOMER)) {
+ return ApiResponse.failed("鐧诲綍宸插け鏁�");
+ }
+ return ApiResponse.success(ywCustomerH5AuthService.buildLoginUserInfo(user.getCustomerId()));
+ }
+}
diff --git a/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml b/server/visits/dmvisit_admin/src/main/resources/bootstrap.yml
index 2df12af..9dc10e9 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: pro
+ active: dev
application:
name: visitsAdmin
# 瀹夊叏閰嶇疆
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java
index 1ac6d72..1fb1190 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/YwCustomer.java
@@ -69,6 +69,9 @@
@ExcelColumn(name="鎵嬫満鍙�")
private String phone;
+ @ApiModelProperty(value = "寰俊openid")
+ private String openid;
+
@ApiModelProperty(value = "韬唤璇佸彿锛堝姞瀵嗭級")
@ExcelColumn(name="韬唤璇佸彿锛堝姞瀵嗭級")
private String idcardNo;
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
index fc83e99..dad2cef 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/MemberService.java
@@ -178,6 +178,8 @@
WxAuthorizeVO ywWxAuthorize(String code);
+ WxAuthorizeVO ywWxAuthorize(String code, Integer userType);
+
List<MemberVO> getVisitedMember(CheckVisitedDTO checkVisitedDTO);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwCustomerH5AuthService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwCustomerH5AuthService.java
new file mode 100644
index 0000000..6800ebb
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/YwCustomerH5AuthService.java
@@ -0,0 +1,15 @@
+package com.doumee.service.business;
+
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
+
+public interface YwCustomerH5AuthService {
+
+ String loginByPhone(LoginPhoneDTO dto);
+
+ String loginByCustomerId(Integer customerId);
+
+ String loginByOpenId(String openId);
+
+ LoginUserInfo buildLoginUserInfo(Integer customerId);
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
index 135c516..d733728 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/MemberServiceImpl.java
@@ -45,6 +45,7 @@
import com.doumee.dao.web.response.WxAuthorizeVO;
import com.doumee.service.business.MemberService;
import com.doumee.service.business.SmsEmailService;
+import com.doumee.service.business.YwCustomerH5AuthService;
import com.doumee.service.business.impl.hksync.HkSyncEmpowerServiceImpl;
import com.doumee.service.business.impl.hksync.ferp.HkSyncOrgUserToHKServiceImpl;
import com.doumee.service.system.SystemLoginService;
@@ -126,7 +127,10 @@
private SmsEmailService smsEmailService;
@Autowired
- private SystemLoginService systemLoginService;
+ private SystemLoginService systemLoginService;
+
+ @Autowired
+ private YwCustomerH5AuthService ywCustomerH5AuthService;
@Value("${debug_model}")
private Boolean isDebug;
@@ -1773,6 +1777,11 @@
*/
@Override
public WxAuthorizeVO ywWxAuthorize(String code){
+ return ywWxAuthorize(code, LoginUserInfo.H5_USER_OPS);
+ }
+
+ @Override
+ public WxAuthorizeVO ywWxAuthorize(String code, Integer userType){
if(StringUtils.isBlank(code)){
throw new BusinessException(ResponseStatus.BAD_REQUEST);
}
@@ -1793,7 +1802,14 @@
}
}
wxAuthorizeVO.setOpenid(openId);
- //鏍规嵁openId 鏌ヨ鐢ㄦ埛淇℃伅
+ if(Constants.equalsInteger(userType, LoginUserInfo.H5_USER_CUSTOMER)){
+ String token = ywCustomerH5AuthService.loginByOpenId(openId);
+ if(StringUtils.isNotBlank(token)){
+ wxAuthorizeVO.setToken(token);
+ }
+ return wxAuthorizeVO;
+ }
+ //鏍规嵁openId 鏌ヨ杩愮淮鐢ㄦ埛淇℃伅
SystemUser user = systemUserMapper.selectOne(new QueryWrapper<SystemUser>().lambda()
.eq(SystemUser::getOpenid,openId)
.eq(SystemUser::getDeleted,Boolean.FALSE)
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java
new file mode 100644
index 0000000..37fcf42
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/YwCustomerH5AuthServiceImpl.java
@@ -0,0 +1,135 @@
+package com.doumee.service.business.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
+import com.doumee.config.jwt.JwtTokenUtil;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.model.LoginUserInfo;
+import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.YwCustomerMapper;
+import com.doumee.dao.business.model.YwCustomer;
+import com.doumee.dao.system.dto.LoginPhoneDTO;
+import com.doumee.service.business.YwCustomerH5AuthService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.Collections;
+import java.util.Date;
+
+@Service
+public class YwCustomerH5AuthServiceImpl implements YwCustomerH5AuthService {
+
+ @Autowired
+ private YwCustomerMapper ywCustomerMapper;
+ @Autowired
+ private JwtTokenUtil jwtTokenUtil;
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String loginByPhone(LoginPhoneDTO dto) {
+ YwCustomer customer = findActiveByPhone(dto.getPhone());
+ bindOpenId(customer, dto.getOpenid());
+ touchLogin(customer);
+ return jwtTokenUtil.generateToken(toLoginUserInfo(customer));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String loginByCustomerId(Integer customerId) {
+ YwCustomer customer = requireActiveCustomer(customerId);
+ touchLogin(customer);
+ return jwtTokenUtil.generateToken(toLoginUserInfo(customer));
+ }
+
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public String loginByOpenId(String openId) {
+ if (StringUtils.isBlank(openId)) {
+ return null;
+ }
+ YwCustomer customer = ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
+ .eq(YwCustomer::getIsdeleted, Constants.ZERO)
+ .eq(YwCustomer::getOpenid, openId.trim())
+ .last(" limit 1 "));
+ if (customer == null) {
+ return null;
+ }
+ assertCustomerEnabled(customer);
+ touchLogin(customer);
+ return jwtTokenUtil.generateToken(toLoginUserInfo(customer));
+ }
+
+ @Override
+ public LoginUserInfo buildLoginUserInfo(Integer customerId) {
+ return toLoginUserInfo(requireActiveCustomer(customerId));
+ }
+
+ private YwCustomer findActiveByPhone(String phone) {
+ if (StringUtils.isBlank(phone)) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "鎵嬫満鍙蜂笉鑳戒负绌�");
+ }
+ YwCustomer customer = ywCustomerMapper.selectOne(new QueryWrapper<YwCustomer>().lambda()
+ .eq(YwCustomer::getIsdeleted, Constants.ZERO)
+ .eq(YwCustomer::getPhone, phone.trim())
+ .last(" limit 1 "));
+ if (customer == null) {
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "鍟嗘埛涓嶅瓨鍦ㄦ垨鏈敞鍐�");
+ }
+ assertCustomerEnabled(customer);
+ return customer;
+ }
+
+ private YwCustomer requireActiveCustomer(Integer customerId) {
+ if (customerId == null) {
+ throw new BusinessException(ResponseStatus.DATA_EMPTY);
+ }
+ YwCustomer customer = ywCustomerMapper.selectById(customerId);
+ if (customer == null || Constants.equalsInteger(customer.getIsdeleted(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "鍟嗘埛涓嶅瓨鍦ㄦ垨鏈敞鍐�");
+ }
+ assertCustomerEnabled(customer);
+ return customer;
+ }
+
+ private void assertCustomerEnabled(YwCustomer customer) {
+ if (customer.getStatus() != null && Constants.equalsInteger(customer.getStatus(), Constants.ONE)) {
+ throw new BusinessException(ResponseStatus.NO_ALLOW_LOGIN.getCode(), "鍟嗘埛璐﹀彿宸茬鐢�");
+ }
+ }
+
+ private void bindOpenId(YwCustomer customer, String openid) {
+ if (StringUtils.isBlank(openid)) {
+ return;
+ }
+ ywCustomerMapper.update(null, new UpdateWrapper<YwCustomer>().lambda()
+ .set(YwCustomer::getOpenid, null)
+ .eq(YwCustomer::getOpenid, openid.trim())
+ .ne(YwCustomer::getId, customer.getId()));
+ customer.setOpenid(openid.trim());
+ }
+
+ private void touchLogin(YwCustomer customer) {
+ Date now = new Date();
+ customer.setLastLoginDate(now);
+ customer.setEditDate(now);
+ customer.setLoginNum((customer.getLoginNum() == null ? 0 : customer.getLoginNum()) + 1);
+ ywCustomerMapper.updateById(customer);
+ }
+
+ private LoginUserInfo toLoginUserInfo(YwCustomer customer) {
+ LoginUserInfo loginUserInfo = new LoginUserInfo();
+ loginUserInfo.setCustomerId(customer.getId());
+ loginUserInfo.setId(customer.getId());
+ loginUserInfo.setH5UserType(LoginUserInfo.H5_USER_CUSTOMER);
+ loginUserInfo.setRealname(customer.getName());
+ loginUserInfo.setMobile(customer.getPhone());
+ loginUserInfo.setUsername("customer_" + customer.getId());
+ loginUserInfo.setSource(LoginUserInfo.SOURCE_H5_CUSTOMER);
+ loginUserInfo.setRoles(Collections.singletonList("h5_customer"));
+ loginUserInfo.setPermissions(Collections.emptyList());
+ return loginUserInfo;
+ }
+}
--
Gitblit v1.9.3