From 66b84de58e3efae14c1e258ee716e02ad9557497 Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期四, 09 十月 2025 08:48:50 +0800
Subject: [PATCH] 最新版本541200007
---
admin/src/views/business/jkCustomer.vue | 140 +--
server/system_service/src/main/java/com/doumee/core/utils/Constants.java | 4
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java | 53 +
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java | 36
admin/src/components/business/OperaJkCustomerImportWindow.vue | 81 ++
server/visits/admin_timer/src/main/resources/bootstrap.yml | 2
admin/src/api/business/jkCustomer.js | 4
admin/public/template/jkCustomerTemplate.xlsx | 0
admin/src/views/vehicle/components/OperaCategoryWindow.vue | 2
admin/package-lock.json | 376 ++++++++--
admin/src/components/business/OperaJkCustomerWindow.vue | 88 +-
server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java | 47 +
server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java | 43
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkLineMapper.java | 3
admin/src/api/business/jkLine.js | 8
admin/src/views/vehicle/cars.vue | 2
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java | 1
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java | 34 +
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java | 314 ++++++++
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkCustomerMapper.java | 3
admin/src/views/business/jkLine.vue | 102 +-
admin/public/template/jkLineTemplate.xlsx | 0
admin/src/main.js | 1
admin/src/components/business/OperaJkLineWindow.vue | 105 ++-
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java | 2
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCustomerService.java | 11
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java | 4
admin/src/components/business/OperaJkLineImportWindow.vue | 81 ++
server/visits/admin_timer/src/main/resources/bootstrap-dev.yml | 2
server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java | 3
server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java | 32
admin/package.json | 1
/dev/null | 0
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java | 368 +++++++++
server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkLineService.java | 10
server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java | 67 +
admin/src/components/business/OperaCarsWindow.vue | 2
37 files changed, 1,582 insertions(+), 450 deletions(-)
diff --git a/admin/package-lock.json b/admin/package-lock.json
index 665a035..f24166f 100644
--- a/admin/package-lock.json
+++ b/admin/package-lock.json
@@ -262,6 +262,11 @@
"@babel/types": "^7.12.13"
}
},
+ "@babel/helper-string-parser": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz",
+ "integrity": "sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA=="
+ },
"@babel/helper-validator-identifier": {
"version": "7.14.0",
"resolved": "https://registry.nlark.com/@babel/helper-validator-identifier/download/@babel/helper-validator-identifier-7.14.0.tgz?cache=0&sync_timestamp=1619727556616&other_urls=https%3A%2F%2Fregistry.nlark.com%2F%40babel%2Fhelper-validator-identifier%2Fdownload%2F%40babel%2Fhelper-validator-identifier-7.14.0.tgz",
@@ -1152,6 +1157,11 @@
"postcss": "^7.0.0"
}
},
+ "@jridgewell/sourcemap-codec": {
+ "version": "1.5.5",
+ "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz",
+ "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og=="
+ },
"@juggle/resize-observer": {
"version": "3.4.0",
"resolved": "https://registry.npmjs.org/@juggle/resize-observer/-/resize-observer-3.4.0.tgz",
@@ -1876,6 +1886,63 @@
"integrity": "sha1-/q7SVZc9LndVW4PbwIhRpsY1IPo=",
"dev": true
},
+ "ansi-styles": {
+ "version": "4.3.0",
+ "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
+ "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-convert": "^2.0.1"
+ }
+ },
+ "chalk": {
+ "version": "4.1.2",
+ "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
+ "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "ansi-styles": "^4.1.0",
+ "supports-color": "^7.1.0"
+ }
+ },
+ "color-convert": {
+ "version": "2.0.1",
+ "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
+ "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "color-name": "~1.1.4"
+ }
+ },
+ "color-name": {
+ "version": "1.1.4",
+ "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
+ "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
+ "dev": true,
+ "optional": true
+ },
+ "has-flag": {
+ "version": "4.0.0",
+ "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
+ "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
+ "dev": true,
+ "optional": true
+ },
+ "loader-utils": {
+ "version": "2.0.4",
+ "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
+ "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "big.js": "^5.2.2",
+ "emojis-list": "^3.0.0",
+ "json5": "^2.1.2"
+ }
+ },
"ssri": {
"version": "8.0.1",
"resolved": "https://registry.npm.taobao.org/ssri/download/ssri-8.0.1.tgz?cache=0&sync_timestamp=1617826515595&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fssri%2Fdownload%2Fssri-8.0.1.tgz",
@@ -1883,6 +1950,28 @@
"dev": true,
"requires": {
"minipass": "^3.1.1"
+ }
+ },
+ "supports-color": {
+ "version": "7.2.0",
+ "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
+ "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "has-flag": "^4.0.0"
+ }
+ },
+ "vue-loader-v16": {
+ "version": "npm:vue-loader@16.8.3",
+ "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
+ "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
+ "dev": true,
+ "optional": true,
+ "requires": {
+ "chalk": "^4.1.0",
+ "hash-sum": "^2.0.0",
+ "loader-utils": "^2.0.0"
}
}
}
@@ -1905,6 +1994,120 @@
"request": "^2.88.2",
"semver": "^6.1.0",
"strip-ansi": "^6.0.0"
+ }
+ },
+ "@vue/compiler-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-core/-/compiler-core-3.5.22.tgz",
+ "integrity": "sha512-jQ0pFPmZwTEiRNSb+i9Ow/I/cHv2tXYqsnHKKyCQ08irI2kdF5qmYedmF8si8mA7zepUFmJ2hqzS8CQmNOWOkQ==",
+ "requires": {
+ "@babel/parser": "^7.28.4",
+ "@vue/shared": "3.5.22",
+ "entities": "^4.5.0",
+ "estree-walker": "^2.0.2",
+ "source-map-js": "^1.2.1"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
+ },
+ "@babel/parser": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz",
+ "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
+ "requires": {
+ "@babel/types": "^7.28.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz",
+ "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ }
+ },
+ "entities": {
+ "version": "4.5.0",
+ "resolved": "https://registry.npmmirror.com/entities/-/entities-4.5.0.tgz",
+ "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="
+ }
+ }
+ },
+ "@vue/compiler-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-dom/-/compiler-dom-3.5.22.tgz",
+ "integrity": "sha512-W8RknzUM1BLkypvdz10OVsGxnMAuSIZs9Wdx1vzA3mL5fNMN15rhrSCLiTm6blWeACwUwizzPVqGJgOGBEN/hA==",
+ "requires": {
+ "@vue/compiler-core": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "@vue/compiler-sfc": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-sfc/-/compiler-sfc-3.5.22.tgz",
+ "integrity": "sha512-tbTR1zKGce4Lj+JLzFXDq36K4vcSZbJ1RBu8FxcDv1IGRz//Dh2EBqksyGVypz3kXpshIfWKGOCcqpSbyGWRJQ==",
+ "requires": {
+ "@babel/parser": "^7.28.4",
+ "@vue/compiler-core": "3.5.22",
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "estree-walker": "^2.0.2",
+ "magic-string": "^0.30.19",
+ "postcss": "^8.5.6",
+ "source-map-js": "^1.2.1"
+ },
+ "dependencies": {
+ "@babel/helper-validator-identifier": {
+ "version": "7.27.1",
+ "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz",
+ "integrity": "sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow=="
+ },
+ "@babel/parser": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.28.4.tgz",
+ "integrity": "sha512-yZbBqeM6TkpP9du/I2pUZnJsRMGGvOuIrhjzC1AwHwW+6he4mni6Bp/m8ijn0iOuZuPI2BfkCoSRunpyjnrQKg==",
+ "requires": {
+ "@babel/types": "^7.28.4"
+ }
+ },
+ "@babel/types": {
+ "version": "7.28.4",
+ "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.28.4.tgz",
+ "integrity": "sha512-bkFqkLhh3pMBUQQkpVgWDWq/lqzc2678eUyDlTBhRqhCHFguYYGM0Efga7tYk4TogG/3x0EEl66/OQ+WGbWB/Q==",
+ "requires": {
+ "@babel/helper-string-parser": "^7.27.1",
+ "@babel/helper-validator-identifier": "^7.27.1"
+ }
+ },
+ "nanoid": {
+ "version": "3.3.11",
+ "resolved": "https://registry.npmmirror.com/nanoid/-/nanoid-3.3.11.tgz",
+ "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w=="
+ },
+ "postcss": {
+ "version": "8.5.6",
+ "resolved": "https://registry.npmmirror.com/postcss/-/postcss-8.5.6.tgz",
+ "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==",
+ "requires": {
+ "nanoid": "^3.3.11",
+ "picocolors": "^1.1.1",
+ "source-map-js": "^1.2.1"
+ }
+ }
+ }
+ },
+ "@vue/compiler-ssr": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/compiler-ssr/-/compiler-ssr-3.5.22.tgz",
+ "integrity": "sha512-GdgyLvg4R+7T8Nk2Mlighx7XGxq/fJf9jaVofc3IL0EPesTE86cP/8DD1lT3h1JeZr2ySBvyqKQJgbS54IX1Ww==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/shared": "3.5.22"
}
},
"@vue/component-compiler-utils": {
@@ -1970,6 +2173,48 @@
"resolved": "https://registry.npm.taobao.org/@vue/preload-webpack-plugin/download/@vue/preload-webpack-plugin-1.1.2.tgz?cache=0&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2F%40vue%2Fpreload-webpack-plugin%2Fdownload%2F%40vue%2Fpreload-webpack-plugin-1.1.2.tgz",
"integrity": "sha1-zrkktOyzucQ4ccekKaAvhCPmIas=",
"dev": true
+ },
+ "@vue/reactivity": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/reactivity/-/reactivity-3.5.22.tgz",
+ "integrity": "sha512-f2Wux4v/Z2pqc9+4SmgZC1p73Z53fyD90NFWXiX9AKVnVBEvLFOWCEgJD3GdGnlxPZt01PSlfmLqbLYzY/Fw4A==",
+ "requires": {
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "@vue/runtime-core": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-core/-/runtime-core-3.5.22.tgz",
+ "integrity": "sha512-EHo4W/eiYeAzRTN5PCextDUZ0dMs9I8mQ2Fy+OkzvRPUYQEyK9yAjbasrMCXbLNhF7P0OUyivLjIy0yc6VrLJQ==",
+ "requires": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "@vue/runtime-dom": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/runtime-dom/-/runtime-dom-3.5.22.tgz",
+ "integrity": "sha512-Av60jsryAkI023PlN7LsqrfPvwfxOd2yAwtReCjeuugTJTkgrksYJJstg1e12qle0NarkfhfFu1ox2D+cQotww==",
+ "requires": {
+ "@vue/reactivity": "3.5.22",
+ "@vue/runtime-core": "3.5.22",
+ "@vue/shared": "3.5.22",
+ "csstype": "^3.1.3"
+ }
+ },
+ "@vue/server-renderer": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/server-renderer/-/server-renderer-3.5.22.tgz",
+ "integrity": "sha512-gXjo+ao0oHYTSswF+a3KRHZ1WszxIqO7u6XwNHqcqb9JfyIL/pbWrrh/xLv7jeDqla9u+LK7yfZKHih1e1RKAQ==",
+ "requires": {
+ "@vue/compiler-ssr": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ },
+ "@vue/shared": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/@vue/shared/-/shared-3.5.22.tgz",
+ "integrity": "sha512-F4yc6palwq3TT0u+FYf0Ns4Tfl9GRFURDN2gWG7L1ecIaS/4fCIuFOjMTnCyjsu/OK6vaDKLCrGAa+KvvH+h4w=="
},
"@vue/web-component-wrapper": {
"version": "1.3.0",
@@ -4487,6 +4732,11 @@
}
}
},
+ "csstype": {
+ "version": "3.1.3",
+ "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.1.3.tgz",
+ "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+ },
"currently-unhandled": {
"version": "0.4.1",
"resolved": "https://registry.npm.taobao.org/currently-unhandled/download/currently-unhandled-0.4.1.tgz",
@@ -5880,6 +6130,11 @@
"resolved": "https://registry.npm.taobao.org/estraverse/download/estraverse-4.3.0.tgz?cache=0&sync_timestamp=1596642998635&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Festraverse%2Fdownload%2Festraverse-4.3.0.tgz",
"integrity": "sha1-OYrT88WiSUi+dyXoPRGn3ijNvR0=",
"dev": true
+ },
+ "estree-walker": {
+ "version": "2.0.2",
+ "resolved": "https://registry.npmmirror.com/estree-walker/-/estree-walker-2.0.2.tgz",
+ "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w=="
},
"esutils": {
"version": "2.0.3",
@@ -8861,6 +9116,14 @@
"yallist": "^3.0.2"
}
},
+ "magic-string": {
+ "version": "0.30.19",
+ "resolved": "https://registry.npmmirror.com/magic-string/-/magic-string-0.30.19.tgz",
+ "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==",
+ "requires": {
+ "@jridgewell/sourcemap-codec": "^1.5.5"
+ }
+ },
"make-dir": {
"version": "3.1.0",
"resolved": "https://registry.npm.taobao.org/make-dir/download/make-dir-3.1.0.tgz?cache=0&sync_timestamp=1587567572251&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fmake-dir%2Fdownload%2Fmake-dir-3.1.0.tgz",
@@ -10227,6 +10490,11 @@
"resolved": "https://registry.npm.taobao.org/performance-now/download/performance-now-2.1.0.tgz",
"integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=",
"dev": true
+ },
+ "picocolors": {
+ "version": "1.1.1",
+ "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.1.1.tgz",
+ "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA=="
},
"picomatch": {
"version": "2.2.3",
@@ -12525,6 +12793,11 @@
"integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=",
"dev": true
},
+ "source-map-js": {
+ "version": "1.2.1",
+ "resolved": "https://registry.npmmirror.com/source-map-js/-/source-map-js-1.2.1.tgz",
+ "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA=="
+ },
"source-map-resolve": {
"version": "0.5.3",
"resolved": "https://registry.npm.taobao.org/source-map-resolve/download/source-map-resolve-0.5.3.tgz?cache=0&sync_timestamp=1584829515586&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fsource-map-resolve%2Fdownload%2Fsource-map-resolve-0.5.3.tgz",
@@ -13772,6 +14045,28 @@
"integrity": "sha1-sj5DWK+oogL+ehAK8fX4g/AgB+4=",
"dev": true
},
+ "v-clipboard": {
+ "version": "3.0.0-next.1",
+ "resolved": "https://registry.npmmirror.com/v-clipboard/-/v-clipboard-3.0.0-next.1.tgz",
+ "integrity": "sha512-UvCnzetQMlVfk9yoiyew8ldGiCzeER5aYdmXXtZp8LC6rt2QXQS0AayEDn1K7rlXpd3M8d+JeYNUV+ZNgtaS4A==",
+ "requires": {
+ "vue": "^3.2.45"
+ },
+ "dependencies": {
+ "vue": {
+ "version": "3.5.22",
+ "resolved": "https://registry.npmmirror.com/vue/-/vue-3.5.22.tgz",
+ "integrity": "sha512-toaZjQ3a/G/mYaLSbV+QsQhIdMo9x5rrqIpYRObsJ6T/J+RyCSFwN2LHNVH9v8uIcljDNa3QzPVdv3Y6b9hAJQ==",
+ "requires": {
+ "@vue/compiler-dom": "3.5.22",
+ "@vue/compiler-sfc": "3.5.22",
+ "@vue/runtime-dom": "3.5.22",
+ "@vue/server-renderer": "3.5.22",
+ "@vue/shared": "3.5.22"
+ }
+ }
+ }
+ },
"v8-compile-cache": {
"version": "2.3.0",
"resolved": "https://registry.npm.taobao.org/v8-compile-cache/download/v8-compile-cache-2.3.0.tgz?cache=0&sync_timestamp=1614993639567&other_urls=https%3A%2F%2Fregistry.npm.taobao.org%2Fv8-compile-cache%2Fdownload%2Fv8-compile-cache-2.3.0.tgz",
@@ -13909,87 +14204,6 @@
"resolved": "https://registry.npm.taobao.org/hash-sum/download/hash-sum-1.0.2.tgz",
"integrity": "sha1-M7QHd3VMZDJXPBIMw4CLvRDUfwQ=",
"dev": true
- }
- }
- },
- "vue-loader-v16": {
- "version": "npm:vue-loader@16.8.3",
- "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-16.8.3.tgz",
- "integrity": "sha512-7vKN45IxsKxe5GcVCbc2qFU5aWzyiLrYJyUuMz4BQLKctCj/fmCa0w6fGiiQ2cLFetNcek1ppGJQDCup0c1hpA==",
- "dev": true,
- "optional": true,
- "requires": {
- "chalk": "^4.1.0",
- "hash-sum": "^2.0.0",
- "loader-utils": "^2.0.0"
- },
- "dependencies": {
- "ansi-styles": {
- "version": "4.3.0",
- "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz",
- "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-convert": "^2.0.1"
- }
- },
- "chalk": {
- "version": "4.1.2",
- "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz",
- "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==",
- "dev": true,
- "optional": true,
- "requires": {
- "ansi-styles": "^4.1.0",
- "supports-color": "^7.1.0"
- }
- },
- "color-convert": {
- "version": "2.0.1",
- "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz",
- "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
- "dev": true,
- "optional": true,
- "requires": {
- "color-name": "~1.1.4"
- }
- },
- "color-name": {
- "version": "1.1.4",
- "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz",
- "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==",
- "dev": true,
- "optional": true
- },
- "has-flag": {
- "version": "4.0.0",
- "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz",
- "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
- "dev": true,
- "optional": true
- },
- "loader-utils": {
- "version": "2.0.4",
- "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.4.tgz",
- "integrity": "sha512-xXqpXoINfFhgua9xiqD8fPFHgkoq1mmmpE92WlDbm9rNRd/EbRb+Gqf908T2DMfuHjjJlksiK2RbHVOdD/MqSw==",
- "dev": true,
- "optional": true,
- "requires": {
- "big.js": "^5.2.2",
- "emojis-list": "^3.0.0",
- "json5": "^2.1.2"
- }
- },
- "supports-color": {
- "version": "7.2.0",
- "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz",
- "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
- "dev": true,
- "optional": true,
- "requires": {
- "has-flag": "^4.0.0"
- }
}
}
},
diff --git a/admin/package.json b/admin/package.json
index 2a8afaa..b1d3572 100644
--- a/admin/package.json
+++ b/admin/package.json
@@ -28,6 +28,7 @@
"js-file-download": "^0.4.12",
"path": "^0.12.7",
"qrcodejs2": "0.0.2",
+ "v-clipboard": "^3.0.0-next.1",
"vue": "^2.6.11",
"vue-clipboard2": "^0.3.1",
"vue-cropper": "^0.6.5",
diff --git a/admin/public/template/jkCustomerTemplate.xlsx b/admin/public/template/jkCustomerTemplate.xlsx
new file mode 100644
index 0000000..9ae7836
--- /dev/null
+++ b/admin/public/template/jkCustomerTemplate.xlsx
Binary files differ
diff --git a/admin/public/template/jkCustomerTmeplate.xlsx b/admin/public/template/jkCustomerTmeplate.xlsx
deleted file mode 100644
index cceb025..0000000
--- a/admin/public/template/jkCustomerTmeplate.xlsx
+++ /dev/null
Binary files differ
diff --git a/admin/public/template/jkLineTemplate.xlsx b/admin/public/template/jkLineTemplate.xlsx
index 131a0ee..5435a96 100644
--- a/admin/public/template/jkLineTemplate.xlsx
+++ b/admin/public/template/jkLineTemplate.xlsx
Binary files differ
diff --git a/admin/src/api/business/jkCustomer.js b/admin/src/api/business/jkCustomer.js
index 6ea8495..16dff52 100644
--- a/admin/src/api/business/jkCustomer.js
+++ b/admin/src/api/business/jkCustomer.js
@@ -19,7 +19,9 @@
export function create (data) {
return request.post('/visitsAdmin/cloudService/business/jkCustomer/create', data)
}
-
+export function importExcel (data) {
+ return request.post('/visitsAdmin/cloudService/business/jkCustomer/importExcel', data)
+}
// 淇敼
export function updateById (data) {
return request.post('/visitsAdmin/cloudService/business/jkCustomer/updateById', data)
diff --git a/admin/src/api/business/jkLine.js b/admin/src/api/business/jkLine.js
index 95aac40..33ba880 100644
--- a/admin/src/api/business/jkLine.js
+++ b/admin/src/api/business/jkLine.js
@@ -6,6 +6,11 @@
trim: true
})
}
+export function allList (data) {
+ return request.post('/visitsAdmin/cloudService/business/jkLine/list', data, {
+ trim: true
+ })
+}
// 瀵煎嚭Excel
export function exportExcel (data) {
@@ -20,6 +25,9 @@
return request.post('/visitsAdmin/cloudService/business/jkLine/create', data)
}
+export function importExcel (data) {
+ return request.post('/visitsAdmin/cloudService/business/jkLine/importExcel', data)
+}
// 淇敼
export function updateById (data) {
return request.post('/visitsAdmin/cloudService/business/jkLine/updateById', data)
diff --git a/admin/src/components/business/OperaCarsWindow.vue b/admin/src/components/business/OperaCarsWindow.vue
index 376a3da..d61c16e 100644
--- a/admin/src/components/business/OperaCarsWindow.vue
+++ b/admin/src/components/business/OperaCarsWindow.vue
@@ -187,7 +187,7 @@
},
getCate () {
fetchList({
- model: {},
+ model: {type:1},
capacity: 1000,
page: 1
}).then(res => {
diff --git a/admin/src/components/business/OperaJkCustomerImportWindow.vue b/admin/src/components/business/OperaJkCustomerImportWindow.vue
new file mode 100644
index 0000000..1da3322
--- /dev/null
+++ b/admin/src/components/business/OperaJkCustomerImportWindow.vue
@@ -0,0 +1,81 @@
+<template>
+ <el-dialog
+ class="center-title"
+ :title="title"
+ width="500px"
+ top="30vh"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+ 1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+ </p>
+ <el-form class="demo-form-inline" >
+ <el-form-item label="瀹㈡埛淇℃伅" required>
+ <div style="width: 100%;display: flex;align-items: center;">
+ <el-button type="primary" @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+ <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+ </div>
+ <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+ </el-form-item>
+ </el-form>
+ <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+ <template v-slot:footer>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { importExcel } from '@/api/business/jkCustomer'
+export default {
+ extends: BaseOpera,
+ // eslint-disable-next-line vue/no-unused-components
+ components: { GlobalWindow },
+ data () {
+ return {
+ importing:false,
+ fileName: ''
+ }
+ },
+ methods: {
+ open (title) {
+ this.title = title
+ this.fileName = ''
+ this.visible = true
+ },
+ // 瀵煎嚭妯℃澘
+ exportTemplate () {
+ // 鎶曚繚鐢宠
+ window.open('/template/jkCustomerTemplate.xlsx')
+ },
+ clickRef () {
+ this.$refs.fileExcel.click()
+ },
+ result (e) {
+ const data = new FormData()
+ data.append('file', e.target.files[0])
+ importExcel(data)
+ .then(res => {
+ this.$message.success('瀵煎叆鎴愬姛')
+ this.$emit('success')
+ this.visible = false
+ })
+ .catch(err => {
+ // this.$message.error(err)
+ this.fileName = ''
+ })
+ .finally(() => {
+ this.$refs.fileExcel.value = null
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/components/business/OperaJkCustomerWindow.vue b/admin/src/components/business/OperaJkCustomerWindow.vue
index b75f350..3f2f5ef 100644
--- a/admin/src/components/business/OperaJkCustomerWindow.vue
+++ b/admin/src/components/business/OperaJkCustomerWindow.vue
@@ -3,55 +3,35 @@
:title="title"
:visible.sync="visible"
:confirm-working="isWorking"
+ width="50%"
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules">
- <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
- <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+ <el-form-item label="" prop="name">
+ <span style="width: 100px;text-align: right;margin-right: 30px;">瀹㈡埛绠�鐮侊細</span>
+ <span>{{form.code}}</span>
</el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
- <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
+ <el-form-item label="" prop="name">
+ <span style="width: 100px;text-align: right;margin-right: 30px;">瀹㈡埛鍚嶇О锛�</span>
+ <span>{{form.name}}</span>
</el-form-item>
- <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
- <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
+ <el-form-item label="" prop="lineName">
+ <span style="width: 100px;text-align: right;margin-right: 30px;">閫佽揣绾胯矾锛�</span>
+ <span>{{form.lineName}}</span>
</el-form-item>
- <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
- <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
+ <el-form-item label="" prop="categoryName">
+ <span style="width: 100px;text-align: right;margin-right: 30px;">鎵�灞炰富绾胯矾</span>
+ <span>{{form.categoryName}}</span>
</el-form-item>
- <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
- <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
+ <el-form-item label="" prop="location">
+ <span style="width: 100px;text-align: right;margin-right: 30px;">鍦板潃锛� </span>
+ <span>{{form.location}}</span>
</el-form-item>
- <el-form-item label="澶囨敞" prop="info">
- <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
+ <el-button style="color: blue;margin-bottom: 10px;" v-clipboard:copy="form.location" v-clipboard:success="onCopy" v-clipboard:error="onError">鐐瑰嚮澶嶅埗瀹㈡埛鍦板潃锛屽墠寰�缁忕含搴﹀湪绾挎彁鍙栧櫒</el-button>
+ <el-form-item label="缁忕含搴�:" prop="locationInfo">
+ <el-input v-model="form.locationInfo" placeholder="璇疯緭鍏ョ粡绾害" v-trim/>
</el-form-item>
- <el-form-item label="鍚嶇О" prop="name">
- <el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
- </el-form-item>
- <el-form-item label="缂栫爜" prop="code">
- <el-input v-model="form.code" placeholder="璇疯緭鍏ョ紪鐮�" v-trim/>
- </el-form-item>
- <el-form-item label="鎵�鍦ㄤ綅缃�" prop="lacation">
- <el-input v-model="form.lacation" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" v-trim/>
- </el-form-item>
- <el-form-item label="缁忓害" prop="longitude">
- <el-input v-model="form.longitude" placeholder="璇疯緭鍏ョ粡搴�" v-trim/>
- </el-form-item>
- <el-form-item label="缁村害" prop="latitude">
- <el-input v-model="form.latitude" placeholder="璇疯緭鍏ョ淮搴�" v-trim/>
- </el-form-item>
- <el-form-item label="閰嶉�佸懆鏈�" prop="weeks">
- <el-input v-model="form.weeks" placeholder="璇疯緭鍏ラ厤閫佸懆鏈�" v-trim/>
- </el-form-item>
- <el-form-item label="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)" prop="lineId">
- <el-input v-model="form.lineId" placeholder="璇疯緭鍏ラ�佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)" v-trim/>
- </el-form-item>
- <el-form-item label="鐘舵�� 0姝e父 绂佺敤" prop="status">
- <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0姝e父 绂佺敤" v-trim/>
- </el-form-item>
- <el-form-item label="鎺掑簭鐮�" prop="sortnum">
- <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
- </el-form-item>
- </el-form>
+ </el-form>
</GlobalWindow>
</template>
@@ -67,24 +47,16 @@
// 琛ㄥ崟鏁版嵁
form: {
id: null,
- creator: '',
- createDate: '',
- editor: '',
- editDate: '',
- isdeleted: '',
- info: '',
+ locationInfo: '',
name: '',
code: '',
- lacation: '',
- longitude: '',
- latitude: '',
- weeks: '',
- lineId: '',
- status: '',
- sortnum: ''
+ location: '',
+ lineName: '',
+ categoryName: ''
},
// 楠岃瘉瑙勫垯
rules: {
+ locationInfo: [{ required: true, message: '璇疯緭鍏ョ粡绾害淇℃伅' }]
}
}
},
@@ -93,6 +65,16 @@
api: '/business/jkCustomer',
'field.id': 'id'
})
+ },
+ methods: {
+ onCopy () {
+ console.log('Text copied!');
+ window.open('https://lbs.amap.com/tools/picker')
+ },
+ onError () {
+ console.error('Failed to copy text');
+ window.open('https://lbs.amap.com/tools/picker')
+ }
}
}
</script>
diff --git a/admin/src/components/business/OperaJkLineImportWindow.vue b/admin/src/components/business/OperaJkLineImportWindow.vue
new file mode 100644
index 0000000..da0f52d
--- /dev/null
+++ b/admin/src/components/business/OperaJkLineImportWindow.vue
@@ -0,0 +1,81 @@
+<template>
+ <el-dialog
+ class="center-title"
+ :title="title"
+ width="500px"
+ top="30vh"
+ :visible.sync="visible"
+ :confirm-working="isWorking"
+ @confirm="confirm"
+ >
+ <p class="tip-warn"><i class="el-icon-warning"></i>瀵煎叆璇存槑锛�<br>
+ 1.璇峰厛涓嬭浇鏂囦欢妯℃澘锛屽苟鎸夌収妯℃澘瑕佸幓濉啓琛ㄦ牸鍐呭;<br>
+ </p>
+ <el-form class="demo-form-inline" >
+ <el-form-item label="鏂拌矾淇℃伅" required>
+ <div style="width: 100%;display: flex;align-items: center;">
+ <el-button type="primary" @click="clickRef">鐐瑰嚮涓婁紶</el-button>
+ <el-button type="text" @click="exportTemplate">鐐瑰嚮涓嬭浇妯$増.EXCEL</el-button>
+ </div>
+ <div style="font-size: 14px; color: black;" v-if="fileName">{{fileName}}</div>
+ </el-form-item>
+ </el-form>
+ <input type="file" style="position: fixed; left: 0; top: -50px;" accept=".xlsx" ref="fileExcel" @change="result" />
+ <template v-slot:footer>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ </el-dialog>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+import { importExcel } from '@/api/business/jkLine'
+export default {
+ extends: BaseOpera,
+ // eslint-disable-next-line vue/no-unused-components
+ components: { GlobalWindow },
+ data () {
+ return {
+ importing:false,
+ fileName: ''
+ }
+ },
+ methods: {
+ open (title) {
+ this.title = title
+ this.fileName = ''
+ this.visible = true
+ },
+ // 瀵煎嚭妯℃澘
+ exportTemplate () {
+ // 鎶曚繚鐢宠
+ window.open('/template/jkLineTemplate.xlsx')
+ },
+ clickRef () {
+ this.$refs.fileExcel.click()
+ },
+ result (e) {
+ const data = new FormData()
+ data.append('file', e.target.files[0])
+ importExcel(data)
+ .then(res => {
+ this.$message.success('瀵煎叆鎴愬姛')
+ this.$emit('success')
+ this.visible = false
+ })
+ .catch(err => {
+ // this.$message.error(err)
+ this.fileName = ''
+ })
+ .finally(() => {
+ this.$refs.fileExcel.value = null
+ })
+ }
+ }
+}
+</script>
+
+<style lang="scss" scoped>
+
+</style>
diff --git a/admin/src/components/business/OperaJkLineWindow.vue b/admin/src/components/business/OperaJkLineWindow.vue
index e77d48a..ef15ac7 100644
--- a/admin/src/components/business/OperaJkLineWindow.vue
+++ b/admin/src/components/business/OperaJkLineWindow.vue
@@ -1,49 +1,41 @@
<template>
<GlobalWindow
:title="title"
+ width="50%"
:visible.sync="visible"
:confirm-working="isWorking"
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules">
- <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
- <el-input v-model="form.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" v-trim/>
+ <el-form-item label="鎵�灞炰富绾胯矾" prop="categoryId">
+ <el-select v-model="form.categoryId" filterable placeholder="璇烽�夋嫨鎵�灞炰富绾胯矾" >
+ <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
- <el-date-picker v-model="form.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�"></el-date-picker>
- </el-form-item>
- <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
- <el-input v-model="form.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" v-trim/>
- </el-form-item>
- <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
- <el-date-picker v-model="form.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�"></el-date-picker>
- </el-form-item>
- <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
- <el-input v-model="form.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" v-trim/>
- </el-form-item>
- <el-form-item label="澶囨敞" prop="info">
- <el-input v-model="form.info" placeholder="璇疯緭鍏ュ娉�" v-trim/>
- </el-form-item>
- <el-form-item label="鍚嶇О" prop="name">
+ <el-form-item label="绾胯矾鍚嶇О" prop="name">
<el-input v-model="form.name" placeholder="璇疯緭鍏ュ悕绉�" v-trim/>
</el-form-item>
- <el-form-item label="鐝粍缂栫爜锛堝叧鑱攃ategory锛�" prop="categoryId">
- <el-input v-model="form.categoryId" placeholder="璇疯緭鍏ョ彮缁勭紪鐮侊紙鍏宠仈category锛�" v-trim/>
+ <el-form-item label="閫佽揣杞﹁締" prop="carId">
+ <el-select v-model="form.carId" filterable placeholder="璇烽�夋嫨閫佽揣杞﹁締" >
+ <el-option v-for="item in carsList" :key="item.id" :label="item.code" :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鎵�灞炶溅杈�(鍏宠仈cars)" prop="carId">
- <el-input v-model="form.carId" placeholder="璇疯緭鍏ユ墍灞炶溅杈�(鍏宠仈cars)" v-trim/>
+ <el-form-item label="瀹㈡埛閲�" prop="maxCustomer">
+ <el-input type="number" v-model="form.maxCustomer" placeholder="璇疯緭鍏ユ渶澶у鎴烽噺" v-trim/>
</el-form-item>
- <el-form-item label="鏈�澶у鎴烽噺" prop="maxCustomer">
- <el-input v-model="form.maxCustomer" placeholder="璇疯緭鍏ユ渶澶у鎴烽噺" v-trim/>
+ <el-form-item label="璁㈠崟閲�" prop="maxOrder">
+ <el-input type="number" v-model="form.maxOrder" placeholder="璇疯緭鍏ユ渶澶ц鍗曢噺" v-trim/>
</el-form-item>
- <el-form-item label="鏈�澶ц鍗曢噺" prop="maxOrder">
- <el-input v-model="form.maxOrder" placeholder="璇疯緭鍏ユ渶澶ц鍗曢噺" v-trim/>
+ <el-form-item label="鍛ㄦ湡" prop="weeks">
+ <el-select v-model="form.weeks" filterable placeholder="璇烽�夋嫨閫佽揣杞﹁締" >
+ <el-option v-for="item in weeksList" :key="item" :label="item" :value="item">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
- <el-input v-model="form.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" v-trim/>
- </el-form-item>
- <el-form-item label="鎺掑簭鐮�" prop="sortnum">
- <el-input v-model="form.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" v-trim/>
+ <el-form-item label="搴忓彿" prop="code">
+ <el-input v-model="form.code" placeholder="璇疯緭鍏ュ簭鍙�" v-trim/>
</el-form-item>
</el-form>
</GlobalWindow>
@@ -52,6 +44,8 @@
<script>
import BaseOpera from '@/components/base/BaseOpera'
import GlobalWindow from '@/components/common/GlobalWindow'
+import { fetchCateList } from '@/api/business/category'
+import { allList } from '@/api/business/cars'
export default {
name: 'OperaJkLineWindow',
extends: BaseOpera,
@@ -61,13 +55,9 @@
// 琛ㄥ崟鏁版嵁
form: {
id: null,
- creator: '',
- createDate: '',
- editor: '',
- editDate: '',
- isdeleted: '',
- info: '',
+ weeks:null,
name: '',
+ code: '',
categoryId: '',
carId: '',
maxCustomer: '',
@@ -75,8 +65,13 @@
status: '',
sortnum: ''
},
+ categoryList: [],
+ carsList: [],
+ weeksList: ['鍛ㄤ竴','鍛ㄤ簩','鍛ㄤ笁','鍛ㄥ洓','鍛ㄤ簲','鍛ㄥ叚','鍛ㄦ棩'],
// 楠岃瘉瑙勫垯
rules: {
+ name: [{ required: true, message: '璇疯緭鍏ョ嚎璺悕绉�' }],
+ categoryId: [{ required: true, message: '璇烽�夋嫨鎵�灞炰富绾胯矾' }]
}
}
},
@@ -85,6 +80,42 @@
api: '/business/jkLine',
'field.id': 'id'
})
+ },
+ methods: {
+ open (title, target) {
+ this.title = title
+ this.loadCategory()
+ this.loadCars()
+ this.visible = true
+ // 鏂板缓
+ if (target == null) {
+ this.$nextTick(() => {
+ this.$refs.form.resetFields()
+ this.form[this.configData['field.id']] = null
+ })
+ return
+ }
+ // 缂栬緫
+ this.$nextTick(() => {
+ for (const key in this.form) {
+ this.form[key] = target[key]
+ }
+ })
+ },
+ loadCategory () {
+ fetchCateList({
+ type: 4
+ }).then(res => {
+ this.categoryList = res
+ })
+ },
+ loadCars () {
+ allList({
+ type: 1//鏌ヨ鍏ㄩ儴杞﹁締
+ }).then(res => {
+ this.carsList = res
+ })
+ }
}
}
</script>
diff --git a/admin/src/main.js b/admin/src/main.js
index a98f12b..a0eb2fd 100644
--- a/admin/src/main.js
+++ b/admin/src/main.js
@@ -15,6 +15,7 @@
import preventReClick from '@/directives/directive'
import Treeselect from '@riophae/vue-treeselect'
import '@riophae/vue-treeselect/dist/vue-treeselect.css'
+
Vue.component('treeselect', Treeselect)
Vue.use(preventReClick)
diff --git a/admin/src/views/business/jkCustomer.vue b/admin/src/views/business/jkCustomer.vue
index 3fcc724..8c003f3 100644
--- a/admin/src/views/business/jkCustomer.vue
+++ b/admin/src/views/business/jkCustomer.vue
@@ -2,53 +2,32 @@
<TableLayout :permissions="['business:jkcustomer:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
- <el-form-item label="涓婚敭" prop="id">
- <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
+ <el-form-item label="瀹㈡埛绠�鐮�" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ鎴风畝鐮�" clearable @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
- <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
+ <el-form-item label="瀹㈡埛鍚嶇О" prop="name">
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ鎴峰悕绉�" clearable @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
- <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
+ <el-form-item label="鍦板潃" prop="location">
+ <el-input v-model="searchForm.location" placeholder="璇疯緭鍏ュ湴鍧�" clearable @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
- <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
+ <el-form-item label="閰嶉�佸懆鏈�" prop="lineWeeks">
+ <el-select v-model="searchForm.lineWeeks" clearable filterable placeholder="璇烽�夋嫨閰嶉�佸懆鏈�" @change="search">
+ <el-option v-for="item in weeksList" :key="item" :label="item" :value="item">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
- <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
+ <el-form-item label="鎵�灞炰富绾胯矾" prop="categoryId">
+ <el-select v-model="searchForm.categoryId" clearable filterable placeholder="璇烽�夋嫨鎵�灞炰富绾胯矾" @change="loadLines();search()">
+ <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
- <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="澶囨敞" prop="info">
- <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鍚嶇О" prop="name">
- <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="缂栫爜" prop="code">
- <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ョ紪鐮�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鎵�鍦ㄤ綅缃�" prop="lacation">
- <el-input v-model="searchForm.lacation" placeholder="璇疯緭鍏ユ墍鍦ㄤ綅缃�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="缁忓害" prop="longitude">
- <el-input v-model="searchForm.longitude" placeholder="璇疯緭鍏ョ粡搴�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="缁村害" prop="latitude">
- <el-input v-model="searchForm.latitude" placeholder="璇疯緭鍏ョ淮搴�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="閰嶉�佸懆鏈�" prop="weeks">
- <el-input v-model="searchForm.weeks" placeholder="璇疯緭鍏ラ厤閫佸懆鏈�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)" prop="lineId">
- <el-input v-model="searchForm.lineId" placeholder="璇疯緭鍏ラ�佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鐘舵�� 0姝e父 绂佺敤" prop="status">
- <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0姝e父 绂佺敤" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鎺掑簭鐮�" prop="sortnum">
- <el-input v-model="searchForm.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" @keypress.enter.native="search"></el-input>
+ <el-form-item label="閫佽揣绾胯矾" prop="lineId">
+ <el-select v-model="searchForm.lineId" clearable filterable placeholder="璇烽�夋嫨閫佽揣绾胯矾" @change="search">
+ <el-option v-for="item in lineList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
<section>
<el-button type="primary" @click="search">鎼滅储</el-button>
@@ -59,8 +38,11 @@
<!-- 琛ㄦ牸鍜屽垎椤� -->
<template v-slot:table-wrap>
<ul class="toolbar" v-permissions="['business:jkcustomer:create', 'business:jkcustomer:delete']">
+<!--
<li><el-button type="primary" @click="$refs.operaJkCustomerWindow.open('鏂板缓浜ゆ帶-瀹㈡埛淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:jkcustomer:create']">鏂板缓</el-button></li>
- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkcustomer:delete']">鍒犻櫎</el-button></li>
+-->
+ <li><el-button icon="el-icon-upload" type="primary" @click="$refs.OperaJkCustomerImportWindowRef.open('瀹㈡埛瀵煎叆')" v-permissions="['business:jkcustomer:create']">瀹㈡埛瀵煎叆</el-button></li>
+ <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkcustomer:delete']">鍒犻櫎</el-button></li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -69,22 +51,15 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
- <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
- <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
- <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
- <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
- <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
- <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
- <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
- <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
- <el-table-column prop="code" label="缂栫爜" min-width="100px"></el-table-column>
- <el-table-column prop="lacation" label="鎵�鍦ㄤ綅缃�" min-width="100px"></el-table-column>
- <el-table-column prop="longitude" label="缁忓害" min-width="100px"></el-table-column>
- <el-table-column prop="latitude" label="缁村害" min-width="100px"></el-table-column>
- <el-table-column prop="weeks" label="閰嶉�佸懆鏈�" min-width="100px"></el-table-column>
- <el-table-column prop="lineId" label="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)" min-width="100px"></el-table-column>
- <el-table-column prop="status" label="鐘舵�� 0姝e父 绂佺敤" min-width="100px"></el-table-column>
- <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="code" label="瀹㈡埛绠�鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="瀹㈡埛鍚嶇О" min-width="100px"></el-table-column>
+ <el-table-column prop="location" label="鍦板潃" min-width="200px" show-tooltip-when-overflow></el-table-column>
+ <el-table-column prop="locationInfo" label="缁忕含搴�" min-width="150px"> </el-table-column>
+ <el-table-column prop="lineWeeks" label="閰嶉�佸懆鏈�" min-width="100px"></el-table-column>
+ <el-table-column prop="lineName" label="閫佽揣绾胯矾" min-width="200px" show-tooltip-when-overflow></el-table-column>
+ <el-table-column prop="categoryName" label="鎵�灞炰富绾胯矾" min-width="100px"></el-table-column>
+ <el-table-column prop="sortno" label="搴忓彿" min-width="100px"></el-table-column>
+ <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="140px"></el-table-column>
<el-table-column
v-if="containPermissions(['business:jkcustomer:update', 'business:jkcustomer:delete'])"
label="鎿嶄綔"
@@ -92,8 +67,8 @@
fixed="right"
>
<template slot-scope="{row}">
- <el-button type="text" @click="$refs.operaJkCustomerWindow.open('缂栬緫浜ゆ帶-瀹㈡埛淇℃伅琛�', row)" icon="el-icon-edit" v-permissions="['business:jkcustomer:update']">缂栬緫</el-button>
- <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:jkcustomer:delete']">鍒犻櫎</el-button>
+ <el-button type="text" @click="$refs.operaJkCustomerWindow.open('缂栬緫瀹㈡埛淇℃伅', row)" icon="el-icon-edit" v-permissions="['business:jkcustomer:update']">缂栬緫</el-button>
+ <el-button type="text" style="color: red" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:jkcustomer:delete']">鍒犻櫎</el-button>
</template>
</el-table-column>
</el-table>
@@ -106,6 +81,7 @@
</template>
<!-- 鏂板缓/淇敼 -->
<OperaJkCustomerWindow ref="operaJkCustomerWindow" @success="handlePageChange"/>
+ <OperaJkCustomerImportWindow ref="OperaJkCustomerImportWindowRef" @success="handlePageChange" />
</TableLayout>
</template>
@@ -114,31 +90,30 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaJkCustomerWindow from '@/components/business/OperaJkCustomerWindow'
+import OperaJkCustomerImportWindow from '@/components/business/OperaJkCustomerImportWindow'
+import { fetchCateList } from '@/api/business/category'
+import { allList } from '@/api/business/jkLine'
export default {
name: 'JkCustomer',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaJkCustomerWindow },
+ components: { TableLayout, Pagination, OperaJkCustomerWindow, OperaJkCustomerImportWindow },
data () {
return {
// 鎼滅储
searchForm: {
id: '',
- creator: '',
- createDate: '',
- editor: '',
- editDate: '',
- isdeleted: '',
- info: '',
+ categoryId: '',
name: '',
code: '',
- lacation: '',
- longitude: '',
- latitude: '',
- weeks: '',
+ location: '',
+ lineWeeks: '',
lineId: '',
status: '',
sortnum: ''
- }
+ },
+ categoryList: [],
+ lineList: [],
+ weeksList: ['鍛ㄤ竴', '鍛ㄤ簩', '鍛ㄤ笁', '鍛ㄥ洓', '鍛ㄤ簲', '鍛ㄥ叚', '鍛ㄦ棩']
}
},
created () {
@@ -149,6 +124,25 @@
'field.main': 'id'
})
this.search()
+ this.loadCategory()
+ this.loadLines()
+ },
+ methods: {
+ loadCategory () {
+ fetchCateList({
+ type: 4
+ }).then(res => {
+ this.categoryList = res
+ })
+ },
+ loadLines () {
+ this.searchForm.lineId =''
+ allList({
+ categoryId: this.searchForm.categoryId
+ }).then(res => {
+ this.lineList = res
+ })
+ }
}
}
</script>
diff --git a/admin/src/views/business/jkLine.vue b/admin/src/views/business/jkLine.vue
index 0eb2e07..255cc63 100644
--- a/admin/src/views/business/jkLine.vue
+++ b/admin/src/views/business/jkLine.vue
@@ -2,47 +2,20 @@
<TableLayout :permissions="['business:jkline:query']">
<!-- 鎼滅储琛ㄥ崟 -->
<el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
- <el-form-item label="涓婚敭" prop="id">
- <el-input v-model="searchForm.id" placeholder="璇疯緭鍏ヤ富閿�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鍒涘缓浜虹紪鐮�" prop="creator">
- <el-input v-model="searchForm.creator" placeholder="璇疯緭鍏ュ垱寤轰汉缂栫爜" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鍒涘缓鏃堕棿" prop="createDate">
- <el-date-picker v-model="searchForm.createDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ュ垱寤烘椂闂�" @change="search"/>
- </el-form-item>
- <el-form-item label="鏇存柊浜虹紪鐮�" prop="editor">
- <el-input v-model="searchForm.editor" placeholder="璇疯緭鍏ユ洿鏂颁汉缂栫爜" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鏇存柊鏃堕棿" prop="editDate">
- <el-date-picker v-model="searchForm.editDate" value-format="yyyy-MM-dd" placeholder="璇疯緭鍏ユ洿鏂版椂闂�" @change="search"/>
- </el-form-item>
- <el-form-item label="鏄惁鍒犻櫎0鍚� 1鏄�" prop="isdeleted">
- <el-input v-model="searchForm.isdeleted" placeholder="璇疯緭鍏ユ槸鍚﹀垹闄�0鍚� 1鏄�" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="澶囨敞" prop="info">
- <el-input v-model="searchForm.info" placeholder="璇疯緭鍏ュ娉�" @keypress.enter.native="search"></el-input>
- </el-form-item>
<el-form-item label="鍚嶇О" prop="name">
- <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" @keypress.enter.native="search"></el-input>
+ <el-input v-model="searchForm.name" placeholder="璇疯緭鍏ュ悕绉�" clearable @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鐝粍缂栫爜锛堝叧鑱攃ategory锛�" prop="categoryId">
- <el-input v-model="searchForm.categoryId" placeholder="璇疯緭鍏ョ彮缁勭紪鐮侊紙鍏宠仈category锛�" @keypress.enter.native="search"></el-input>
+ <el-form-item label="鎵�灞炰富绾胯矾" prop="categoryId">
+ <el-select v-model="searchForm.categoryId" clearable filterable placeholder="璇烽�夋嫨鎵�灞炰富绾胯矾" @change="search">
+ <el-option v-for="item in categoryList" :key="item.id" :label="item.name" :value="item.id">
+ </el-option>
+ </el-select>
</el-form-item>
- <el-form-item label="鎵�灞炶溅杈�(鍏宠仈cars)" prop="carId">
- <el-input v-model="searchForm.carId" placeholder="璇疯緭鍏ユ墍灞炶溅杈�(鍏宠仈cars)" @keypress.enter.native="search"></el-input>
+ <el-form-item label="杩愰�佽溅杈�" prop="carId">
+ <el-input v-model="searchForm.carCode" placeholder="璇疯緭鍏ヨ繍閫佽溅杈�" clearable @keypress.enter.native="search"></el-input>
</el-form-item>
- <el-form-item label="鏈�澶у鎴烽噺" prop="maxCustomer">
- <el-input v-model="searchForm.maxCustomer" placeholder="璇疯緭鍏ユ渶澶у鎴烽噺" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鏈�澶ц鍗曢噺" prop="maxOrder">
- <el-input v-model="searchForm.maxOrder" placeholder="璇疯緭鍏ユ渶澶ц鍗曢噺" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" prop="status">
- <el-input v-model="searchForm.status" placeholder="璇疯緭鍏ョ姸鎬� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" @keypress.enter.native="search"></el-input>
- </el-form-item>
- <el-form-item label="鎺掑簭鐮�" prop="sortnum">
- <el-input v-model="searchForm.sortnum" placeholder="璇疯緭鍏ユ帓搴忕爜" @keypress.enter.native="search"></el-input>
+ <el-form-item label="搴忓彿" prop="code">
+ <el-input v-model="searchForm.code" placeholder="璇疯緭鍏ュ簭鍙�" @keypress.enter.native="search"></el-input>
</el-form-item>
<section>
<el-button type="primary" @click="search">鎼滅储</el-button>
@@ -54,7 +27,8 @@
<template v-slot:table-wrap>
<ul class="toolbar" v-permissions="['business:jkline:create', 'business:jkline:delete']">
<li><el-button type="primary" @click="$refs.operaJkLineWindow.open('鏂板缓浜ゆ帶-绾胯矾淇℃伅琛�')" icon="el-icon-plus" v-permissions="['business:jkline:create']">鏂板缓</el-button></li>
- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkline:delete']">鍒犻櫎</el-button></li>
+ <li><el-button icon="el-icon-upload" type="primary" @click="$refs.OperaJkLineImportWindowRef.open('绾胯矾瀵煎叆')" v-permissions="['business:jkline:create']">绾胯矾瀵煎叆</el-button></li>
+ <li><el-button type="danger" @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:jkline:delete']">鍒犻櫎</el-button></li>
</ul>
<el-table
v-loading="isWorking.search"
@@ -63,20 +37,14 @@
@selection-change="handleSelectionChange"
>
<el-table-column type="selection" width="55"></el-table-column>
- <el-table-column prop="id" label="涓婚敭" min-width="100px"></el-table-column>
- <el-table-column prop="creator" label="鍒涘缓浜虹紪鐮�" min-width="100px"></el-table-column>
- <el-table-column prop="createDate" label="鍒涘缓鏃堕棿" min-width="100px"></el-table-column>
- <el-table-column prop="editor" label="鏇存柊浜虹紪鐮�" min-width="100px"></el-table-column>
- <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="100px"></el-table-column>
- <el-table-column prop="isdeleted" label="鏄惁鍒犻櫎0鍚� 1鏄�" min-width="100px"></el-table-column>
- <el-table-column prop="info" label="澶囨敞" min-width="100px"></el-table-column>
- <el-table-column prop="name" label="鍚嶇О" min-width="100px"></el-table-column>
- <el-table-column prop="categoryId" label="鐝粍缂栫爜锛堝叧鑱攃ategory锛�" min-width="100px"></el-table-column>
- <el-table-column prop="carId" label="鎵�灞炶溅杈�(鍏宠仈cars)" min-width="100px"></el-table-column>
- <el-table-column prop="maxCustomer" label="鏈�澶у鎴烽噺" min-width="100px"></el-table-column>
- <el-table-column prop="maxOrder" label="鏈�澶ц鍗曢噺" min-width="100px"></el-table-column>
- <el-table-column prop="status" label="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭" min-width="100px"></el-table-column>
- <el-table-column prop="sortnum" label="鎺掑簭鐮�" min-width="100px"></el-table-column>
+ <el-table-column prop="name" label="鍚嶇О" min-width="200px" show-tooltip-when-overflow></el-table-column>
+ <el-table-column prop="categoryName" label="鎵�灞炰富绾胯矾" min-width="140px"></el-table-column>
+ <el-table-column prop="carCode" label="鎵�灞炶溅杈�" min-width="100px"></el-table-column>
+ <el-table-column prop="maxCustomer" label="瀹㈡埛閲�" min-width="100px"></el-table-column>
+ <el-table-column prop="maxOrder" label="璁㈠崟閲�" min-width="100px"></el-table-column>
+ <el-table-column prop="weeks" label="閰嶉�佸懆鏈�" min-width="140px"></el-table-column>
+ <el-table-column prop="code" label="搴忓彿" min-width="100px"></el-table-column>
+ <el-table-column prop="editDate" label="鏇存柊鏃堕棿" min-width="150px"></el-table-column>
<el-table-column
v-if="containPermissions(['business:jkline:update', 'business:jkline:delete'])"
label="鎿嶄綔"
@@ -98,6 +66,7 @@
</template>
<!-- 鏂板缓/淇敼 -->
<OperaJkLineWindow ref="operaJkLineWindow" @success="handlePageChange"/>
+ <OperaJkLineImportWindow ref="OperaJkLineImportWindowRef" @success="handlePageChange" />
</TableLayout>
</template>
@@ -106,29 +75,22 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaJkLineWindow from '@/components/business/OperaJkLineWindow'
+import OperaJkLineImportWindow from '@/components/business/OperaJkLineImportWindow'
+import { fetchCateList } from '@/api/business/category'
export default {
name: 'JkLine',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaJkLineWindow },
+ components: { TableLayout, Pagination, OperaJkLineWindow,OperaJkLineImportWindow },
data () {
return {
// 鎼滅储
searchForm: {
- id: '',
- creator: '',
- createDate: '',
- editor: '',
- editDate: '',
- isdeleted: '',
- info: '',
name: '',
categoryId: '',
- carId: '',
- maxCustomer: '',
- maxOrder: '',
- status: '',
- sortnum: ''
- }
+ carCode: '',
+ code: ''
+ },
+ categoryList: []
}
},
created () {
@@ -139,6 +101,14 @@
'field.main': 'id'
})
this.search()
+ this.loadCategory()
+ },
+ methods: {
+ loadCategory () {
+ fetchCateList({ type: 4 }).then(res => {
+ this.categoryList = res || []
+ })
+ }
}
}
</script>
diff --git a/admin/src/views/vehicle/cars.vue b/admin/src/views/vehicle/cars.vue
index a4fcc63..9c026c5 100644
--- a/admin/src/views/vehicle/cars.vue
+++ b/admin/src/views/vehicle/cars.vue
@@ -198,7 +198,7 @@
},
getCate() {
fetchList({
- model: {},
+ model: {type:1},
capacity: 1000,
page: 1,
}).then(res => {
diff --git a/admin/src/views/vehicle/components/OperaCategoryWindow.vue b/admin/src/views/vehicle/components/OperaCategoryWindow.vue
index cfc7acc..6fa801d 100644
--- a/admin/src/views/vehicle/components/OperaCategoryWindow.vue
+++ b/admin/src/views/vehicle/components/OperaCategoryWindow.vue
@@ -76,7 +76,7 @@
},
methods: {
getList () {
- fetchCateList({}).then(res => {
+ fetchCateList({type:1}).then(res => {
this.dataList = res || []
})
},
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 25e1f63..403a564 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
@@ -161,6 +161,7 @@
public static final String LIQUID_LEVEL_UNIT ="LIQUID_LEVEL_UNIT" ;
public static final String OUT_HY_LOT_TOTAL ="OUT_HY_LOT_TOTAL" ;
public static final String BANNER_IMG ="BANNER_IMG" ;
+ public static final String GAODE_LOCATION_GEOAPI_URL = "GAODE_LOCATION_GEOAPI_URL";
public static boolean DEALING_HK_SYNCPRIVILEGE= false;
public static boolean DEALING_HK_SYNCDEVICE = false;
@@ -518,6 +519,9 @@
public interface RedisKeys {
public static final String IMPORTING_CARS ="IMPORTING_CARS";
+ public static final String CHECKING_JKCUSTOMER_LOCATION ="CHECKING_JKCUSTOMER_LOCATION";
+ public static final String IMPORTING_JKCUSTOMER ="IMPORTING_JKCUSTOMER";
+ public static final String IMPORTING_JKLINE ="IMPORTING_JKLINE";
public static final String IMPORTING_MEMBER ="IMPORTING_MEMBER";
public static final String BIGSCREEN_UUID ="BIGSCREEN_UUID";
public static final String IMPORTING_GAS ="IMPORTING_GAS";
diff --git a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
index 7db16b1..6835b17 100644
--- a/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
+++ b/server/system_timer/src/main/java/com/doumee/jobs/fegin/VisitServiceFegin.java
@@ -17,6 +17,9 @@
@ApiOperation("銆愯瀹㈢郴缁熴�戝畾鏃舵煡璇汉鍛樿澶囨巿鏉冪粨鏋�")
@PostMapping("/timer/empower/syncEmpowerDetailData")
ApiResponse syncEmpowerDetailData();
+ @ApiOperation("銆愯瀹㈢郴缁熴�戞洿鏂颁氦鎺т腑蹇冨鎴风粡绾害淇℃伅")
+ @PostMapping("/timer/jkCustomer/getCustomerLocationInfo")
+ ApiResponse getCustomerLocationInfo();
@ApiOperation("銆愯瀹㈢郴缁熴�戝畾鏃舵煡璇汉鍛樿澶囨巿鏉冧笅杞借繘搴�")
@PostMapping("/timer/empower/syncEmpowerResultData")
ApiResponse syncEmpowerResultData();
diff --git a/server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java b/server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java
new file mode 100644
index 0000000..ce6e734
--- /dev/null
+++ b/server/visits/admin_timer/src/main/java/com/doumee/api/JkCustomerTimerController.java
@@ -0,0 +1,47 @@
+package com.doumee.api;
+
+import com.alibaba.fastjson.JSONObject;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.core.wx.WXConstant;
+import com.doumee.dao.system.model.SystemDictData;
+import com.doumee.service.business.JkCustomerService;
+import com.doumee.service.business.third.model.ApiResponse;
+import com.doumee.service.system.SystemDictDataService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.mgt.DefaultSecurityManager;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import java.util.Date;
+import java.util.Objects;
+
+/**
+ * @author 姹熻箘韫�
+ * @date 2023/11/30 15:33
+ */
+@Api(tags = "浜ゆ帶涓績瀹㈡埛瀹氭椂鍣�")
+@RestController
+@RequestMapping("/timer/jkCustomer")
+public class JkCustomerTimerController extends BaseController {
+ @Autowired
+ private JkCustomerService jkCustomerService;
+
+ @ApiOperation("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�")
+ @PostMapping("/getCustomerLocationInfo")
+ public ApiResponse getCustomerLocationInfo() {
+ DefaultSecurityManager securityManager = new DefaultSecurityManager();
+ SecurityUtils.setSecurityManager(securityManager);
+ jkCustomerService.checkNullLocation();
+ return ApiResponse.success("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�");
+ }
+
+
+
+}
diff --git a/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml b/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
index e6d644d..02b55bb 100644
--- a/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
+++ b/server/visits/admin_timer/src/main/resources/bootstrap-dev.yml
@@ -23,7 +23,7 @@
# data-id: com.doumee.meeting.admin
discovery:
server-addr: http://192.168.0.212:8848 #閰嶇疆Nacos鍦板潃
- namespace: dmvisit
+ namespace: wuhu_visit_dev
username: nacos
password: nacos
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/admin/JkCustomerCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
index 8b31ffb..51ddef3 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkCustomerCloudController.java
@@ -6,16 +6,18 @@
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.utils.Constants;
import com.doumee.dao.business.model.JkCustomer;
+import com.doumee.dao.business.model.JkLine;
import com.doumee.service.business.JkCustomerService;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -35,35 +37,36 @@
@ApiOperation("鏂板缓")
@PostMapping("/create")
@CloudRequiredPermission("business:jkcustomer:create")
- public ApiResponse create(@RequestBody JkCustomer jkCustomer) {
+ public ApiResponse create(@RequestBody JkCustomer jkCustomer, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
return ApiResponse.success(jkCustomerService.create(jkCustomer));
}
@ApiOperation("鏍规嵁ID鍒犻櫎")
@GetMapping("/delete/{id}")
@CloudRequiredPermission("business:jkcustomer:delete")
- public ApiResponse deleteById(@PathVariable Integer id) {
- jkCustomerService.deleteById(id);
+ public ApiResponse deleteById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ jkCustomerService.deleteById(id,this.getLoginUser(token));
return ApiResponse.success(null);
}
@ApiOperation("鎵归噺鍒犻櫎")
@GetMapping("/delete/batch")
@CloudRequiredPermission("business:jkcustomer:delete")
- public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
String [] idArray = ids.split(",");
List<Integer> idList = new ArrayList<>();
for (String id : idArray) {
idList.add(Integer.valueOf(id));
}
- jkCustomerService.deleteByIdInBatch(idList);
+ jkCustomerService.deleteByIdInBatch(idList,this.getLoginUser(token));
return ApiResponse.success(null);
}
@ApiOperation("鏍规嵁ID淇敼")
@PostMapping("/updateById")
@CloudRequiredPermission("business:jkcustomer:update")
- public ApiResponse updateById(@RequestBody JkCustomer jkCustomer) {
+ public ApiResponse updateById(@RequestBody JkCustomer jkCustomer, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ jkCustomer.setLoginUserInfo(this.getLoginUser(token));
jkCustomerService.updateById(jkCustomer);
return ApiResponse.success(null);
}
@@ -71,21 +74,32 @@
@ApiOperation("鍒嗛〉鏌ヨ")
@PostMapping("/page")
@CloudRequiredPermission("business:jkcustomer:query")
- public ApiResponse<PageData<JkCustomer>> findPage (@RequestBody PageWrap<JkCustomer> pageWrap) {
+ public ApiResponse<PageData<JkCustomer>> findPage (@RequestBody PageWrap<JkCustomer> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
return ApiResponse.success(jkCustomerService.findPage(pageWrap));
}
@ApiOperation("瀵煎嚭Excel")
@PostMapping("/exportExcel")
@CloudRequiredPermission("business:jkcustomer:exportExcel")
- public void exportExcel (@RequestBody PageWrap<JkCustomer> pageWrap, HttpServletResponse response) {
+ public void exportExcel (@RequestBody PageWrap<JkCustomer> pageWrap, HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
ExcelExporter.build(JkCustomer.class).export(jkCustomerService.findPage(pageWrap).getRecords(), "浜ゆ帶-瀹㈡埛淇℃伅琛�", response);
}
@ApiOperation("鏍规嵁ID鏌ヨ")
@GetMapping("/{id}")
@CloudRequiredPermission("business:jkcustomer:query")
- public ApiResponse findById(@PathVariable Integer id) {
+ public ApiResponse findById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
return ApiResponse.success(jkCustomerService.findById(id));
}
+
+ @ApiOperation(value = "瀹㈡埛淇℃伅瀵煎叆" ,notes = "瀹㈡埛淇℃伅瀵煎叆")
+ @PostMapping("/importExcel")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+ })
+ @CloudRequiredPermission("business:cars:create")
+ public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ List<JkCustomer> list = jkCustomerService.importBatch(file,this.getLoginUser(token));
+ return ApiResponse.success("瀵煎叆鎴愬姛");
+ }
}
diff --git a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
index e404a4b..fede752 100644
--- a/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
+++ b/server/visits/dmvisit_admin/src/main/java/com/doumee/cloud/admin/JkLineCloudController.java
@@ -5,17 +5,19 @@
import com.doumee.core.annotation.excel.ExcelExporter;
import com.doumee.core.annotation.pr.PreventRepeat;
import com.doumee.core.utils.Constants;
+import com.doumee.dao.business.model.Cars;
import com.doumee.dao.business.model.JkLine;
import com.doumee.service.business.JkLineService;
import com.doumee.service.business.third.model.ApiResponse;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
-import io.swagger.annotations.Api;
-import io.swagger.annotations.ApiOperation;
+import io.swagger.annotations.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
import javax.servlet.http.HttpServletResponse;
+import java.io.File;
import java.util.ArrayList;
import java.util.List;
@@ -35,35 +37,37 @@
@ApiOperation("鏂板缓")
@PostMapping("/create")
@CloudRequiredPermission("business:jkline:create")
- public ApiResponse create(@RequestBody JkLine jkLine) {
+ public ApiResponse create(@RequestBody JkLine jkLine, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ jkLine.setLoginUserInfo(this.getLoginUser(token));
return ApiResponse.success(jkLineService.create(jkLine));
}
@ApiOperation("鏍规嵁ID鍒犻櫎")
@GetMapping("/delete/{id}")
@CloudRequiredPermission("business:jkline:delete")
- public ApiResponse deleteById(@PathVariable Integer id) {
- jkLineService.deleteById(id);
+ public ApiResponse deleteById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ jkLineService.deleteById(id,this.getLoginUser(token));
return ApiResponse.success(null);
}
@ApiOperation("鎵归噺鍒犻櫎")
@GetMapping("/delete/batch")
@CloudRequiredPermission("business:jkline:delete")
- public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+ public ApiResponse deleteByIdInBatch(@RequestParam String ids, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
String [] idArray = ids.split(",");
List<Integer> idList = new ArrayList<>();
for (String id : idArray) {
idList.add(Integer.valueOf(id));
}
- jkLineService.deleteByIdInBatch(idList);
+ jkLineService.deleteByIdInBatch(idList,this.getLoginUser(token));
return ApiResponse.success(null);
}
@ApiOperation("鏍规嵁ID淇敼")
@PostMapping("/updateById")
@CloudRequiredPermission("business:jkline:update")
- public ApiResponse updateById(@RequestBody JkLine jkLine) {
+ public ApiResponse updateById(@RequestBody JkLine jkLine, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ jkLine.setLoginUserInfo(this.getLoginUser(token));
jkLineService.updateById(jkLine);
return ApiResponse.success(null);
}
@@ -71,21 +75,38 @@
@ApiOperation("鍒嗛〉鏌ヨ")
@PostMapping("/page")
@CloudRequiredPermission("business:jkline:query")
- public ApiResponse<PageData<JkLine>> findPage (@RequestBody PageWrap<JkLine> pageWrap) {
+ public ApiResponse<PageData<JkLine>> findPage (@RequestBody PageWrap<JkLine> pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
return ApiResponse.success(jkLineService.findPage(pageWrap));
+ }
+ @ApiOperation("鏌ヨ鍏ㄩ儴")
+ @PostMapping("/list")
+ @CloudRequiredPermission("business:jkline:query")
+ public ApiResponse<List<JkLine>> list (@RequestBody JkLine pageWrap, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ return ApiResponse.success(jkLineService.findList(pageWrap));
}
@ApiOperation("瀵煎嚭Excel")
@PostMapping("/exportExcel")
@CloudRequiredPermission("business:jkline:exportExcel")
- public void exportExcel (@RequestBody PageWrap<JkLine> pageWrap, HttpServletResponse response) {
+ public void exportExcel (@RequestBody PageWrap<JkLine> pageWrap, HttpServletResponse response, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
ExcelExporter.build(JkLine.class).export(jkLineService.findPage(pageWrap).getRecords(), "浜ゆ帶-绾胯矾淇℃伅琛�", response);
}
@ApiOperation("鏍规嵁ID鏌ヨ")
@GetMapping("/{id}")
@CloudRequiredPermission("business:jkline:query")
- public ApiResponse findById(@PathVariable Integer id) {
+ public ApiResponse findById(@PathVariable Integer id, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
return ApiResponse.success(jkLineService.findById(id));
}
+
+ @ApiOperation(value = "绾胯矾淇℃伅瀵煎叆" ,notes = "绾胯矾淇℃伅瀵煎叆")
+ @PostMapping("/importExcel")
+ @ApiImplicitParams({
+ @ApiImplicitParam(name = "file", value = "file", required = true, paramType = "query", dataType = "file", dataTypeClass = File.class),
+ })
+ @CloudRequiredPermission("business:cars:create")
+ public ApiResponse<String> importExcel (@ApiParam(value = "file") MultipartFile file, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) {
+ List<JkLine> list = jkLineService.importBatch(file,this.getLoginUser(token));
+ return ApiResponse.success("瀵煎叆鎴愬姛");
+ }
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java
new file mode 100644
index 0000000..e0aa5a6
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkCustomerImport.java
@@ -0,0 +1,32 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鍛樺伐淇℃伅瀵煎叆琛�
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Data
+@ApiModel("绾胯矾瀹㈡埛淇℃伅瀵煎叆")
+public class JkCustomerImport {
+
+
+ @ExcelColumn(name="瀹㈡埛绠�鐮�",value = "code",index = 0)
+ private String code;
+ @ExcelColumn(name="瀹㈡埛鍚嶇О",value = "name",index = 1)
+ private String name;
+ @ExcelColumn(name="绾胯矾",value = "lineName",index = 2)
+ private String lineName;
+ @ExcelColumn(name="搴忓彿",value = "sortno",index = 3)
+ private String sortno;
+ @ExcelColumn(name="鍦板潃",value = "location",index = 4)
+ private String location;
+
+ @ExcelColumn(name="缁忕含搴�" , value = "locationInfo",index = 5)
+ private String locationInfo;
+
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java
new file mode 100644
index 0000000..c511472
--- /dev/null
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/admin/request/JkLineImport.java
@@ -0,0 +1,34 @@
+package com.doumee.dao.admin.request;
+
+import com.doumee.core.annotation.excel.ExcelColumn;
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+
+/**
+ * 鍛樺伐淇℃伅瀵煎叆琛�
+ * @author 姹熻箘韫�
+ * @date 2024/01/16 10:03
+ */
+@Data
+@ApiModel("绾胯矾淇℃伅瀵煎叆")
+public class JkLineImport {
+
+
+ @ExcelColumn(name="绾胯矾鍚嶇О",value = "name",index = 0)
+ private String name;
+ @ExcelColumn(name="鎵�灞炰富绾胯矾",value = "categoryName",index = 1)
+ private String categoryName;
+ @ExcelColumn(name="搴忓彿",value = "code",index = 2)
+ private String code;
+ @ExcelColumn(name="閫佽揣杞﹁締",value = "carCode",index = 3)
+ private String carCode;
+
+ @ExcelColumn(name="瀹㈡埛閲�" , value = "maxCustomer" ,index = 4)
+ private String maxCustomer;
+
+ @ExcelColumn(name="璁㈠崟閲�" , value = "maxOrder",index = 5)
+ private String maxOrder;
+ @ExcelColumn(name="鍛ㄦ湡" , value = "weeks",index = 6)
+ private String weeks;
+
+}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkCustomerMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkCustomerMapper.java
index 19b331b..cb08b73 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkCustomerMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkCustomerMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.JkCustomer;
+import com.github.yulichang.base.MPJBaseMapper;
/**
* @author 姹熻箘韫�
* @date 2025/09/28 09:01
*/
-public interface JkCustomerMapper extends BaseMapper<JkCustomer> {
+public interface JkCustomerMapper extends MPJBaseMapper<JkCustomer> {
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkLineMapper.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkLineMapper.java
index 7504edd..3a79e19 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkLineMapper.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/JkLineMapper.java
@@ -2,11 +2,12 @@
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.doumee.dao.business.model.JkLine;
+import com.github.yulichang.base.MPJBaseMapper;
/**
* @author 姹熻箘韫�
* @date 2025/09/28 09:01
*/
-public interface JkLineMapper extends BaseMapper<JkLine> {
+public interface JkLineMapper extends MPJBaseMapper<JkLine> {
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
index 7e187cb..1f7584b 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCabinet.java
@@ -111,7 +111,7 @@
@ApiModelProperty(value = "鎵�鍦ㄤ綅缃�")
@ExcelColumn(name="鎵�鍦ㄤ綅缃�")
- private String lacation;
+ private String location;
@ApiModelProperty(value = "缁忓害", example = "1")
@ExcelColumn(name="缁忓害")
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
index 59b7ae3..8403864 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkCustomer.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -23,69 +24,89 @@
public class JkCustomer extends LoginUserModel {
@ApiModelProperty(value = "涓婚敭", example = "1")
- @ExcelColumn(name="涓婚敭")
+ //@ExcelColumn(name="涓婚敭")
private Integer id;
@ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ //@ExcelColumn(name="鍒涘缓浜虹紪鐮�")
private Integer creator;
@ApiModelProperty(value = "鍒涘缓鏃堕棿")
- @ExcelColumn(name="鍒涘缓鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ //@ExcelColumn(name="鍒涘缓鏃堕棿")IMPORTING_JKCUSTOMER
private Date createDate;
@ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ //@ExcelColumn(name="鏇存柊浜虹紪鐮�")
private Integer editor;
@ApiModelProperty(value = "鏇存柊鏃堕棿")
- @ExcelColumn(name="鏇存柊鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ //@ExcelColumn(name="鏇存柊鏃堕棿")IMPORTING_JKCUSTOMER
private Date editDate;
@ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
- @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ //@ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
private Integer isdeleted;
@ApiModelProperty(value = "澶囨敞")
- @ExcelColumn(name="澶囨敞")
+ //@ExcelColumn(name="澶囨敞")
private String info;
@ApiModelProperty(value = "鍚嶇О", example = "1")
- @ExcelColumn(name="鍚嶇О")
- private Integer name;
+ @ExcelColumn(name="瀹㈡埛鍚嶇О",index = 2,width = 10)
+ private String name;
@ApiModelProperty(value = "缂栫爜", example = "1")
- @ExcelColumn(name="缂栫爜")
- private Integer code;
+ @ExcelColumn(name="瀹㈡埛绠�鐮�",index = 1,width = 10)
+ private String code;
@ApiModelProperty(value = "鎵�鍦ㄤ綅缃�")
- @ExcelColumn(name="鎵�鍦ㄤ綅缃�")
- private String lacation;
+ @ExcelColumn(name="鍦板潃",index = 3,width = 10)
+ private String location;
@ApiModelProperty(value = "缁忓害", example = "1")
- @ExcelColumn(name="缁忓害")
+ //@ExcelColumn(name="缁忓害")
private BigDecimal longitude;
@ApiModelProperty(value = "缁村害", example = "1")
- @ExcelColumn(name="缁村害")
+ //@ExcelColumn(name="缁村害")
private BigDecimal latitude;
- @ApiModelProperty(value = "閰嶉�佸懆鏈�")
- @ExcelColumn(name="閰嶉�佸懆鏈�")
- private String weeks;
+ @ApiModelProperty(value = "瀹㈡埛搴忓彿")
+ @ExcelColumn(name="搴忓彿",index = 8,width = 10)
+ private String sortno;
+ @ApiModelProperty(value = "缁忕含搴�", example = "1")
+ @ExcelColumn(name="缁忕含搴�",index = 3,width = 10)
+ @TableField(exist = false)
+ private String locationInfo;
@ApiModelProperty(value = "閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)", example = "1")
- @ExcelColumn(name="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)")
+ //@ExcelColumn(name="閫佽揣璺嚎缂栫爜锛堝叧鑱攋k_line)")
private Integer lineId;
@ApiModelProperty(value = "鐘舵�� 0姝e父 绂佺敤", example = "1")
- @ExcelColumn(name="鐘舵�� 0姝e父 绂佺敤")
+ //@ExcelColumn(name="鐘舵�� 0姝e父 绂佺敤")
private Integer status;
@ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
- @ExcelColumn(name="鎺掑簭鐮�")
+ //@ExcelColumn(name="鎺掑簭鐮�")
private Integer sortnum;
+ @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+ @ExcelColumn(name="鎵�灞炰富绾胯矾",index = 7,width = 10)
+ @TableField(exist = false)
+ private String categoryName;
+ @ApiModelProperty(value = "鎵�灞炰富绾胯矾缂栫爜", example = "1")
+ @TableField(exist = false)
+ private Integer categoryId;
+ @ApiModelProperty(value = "绾胯矾", example = "1")
+ @ExcelColumn(name="閫佽揣绾胯矾",index = 6,width = 10)
+ @TableField(exist = false)
+ private String lineName;
+ @ApiModelProperty(value = "閰嶉�佸懆鏈�", example = "1")
+ @ExcelColumn(name="閰嶉�佸懆鏈�",index = 5,width = 10)
+ @TableField(exist = false)
+ private String lineWeeks;
+ @ApiModelProperty(value = "鏄惁鏂板锛� 0鍚� 1鏄�", example = "1")
+ @TableField(exist = false)
+ private int isnew;
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
index ba54cbb..3b90977 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/dao/business/model/JkLine.java
@@ -1,5 +1,6 @@
package com.doumee.dao.business.model;
+import com.baomidou.mybatisplus.annotation.TableField;
import com.doumee.core.annotation.excel.ExcelColumn;
import com.doumee.service.business.third.model.LoginUserModel;
import io.swagger.annotations.ApiModel;
@@ -22,61 +23,79 @@
public class JkLine extends LoginUserModel {
@ApiModelProperty(value = "涓婚敭", example = "1")
- @ExcelColumn(name="涓婚敭")
+ //@ExcelColumn(name="涓婚敭")
private Integer id;
@ApiModelProperty(value = "鍒涘缓浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鍒涘缓浜虹紪鐮�")
+ //@ExcelColumn(name="鍒涘缓浜虹紪鐮�")
private Integer creator;
@ApiModelProperty(value = "鍒涘缓鏃堕棿")
- @ExcelColumn(name="鍒涘缓鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ //@ExcelColumn(name="鍒涘缓鏃堕棿")
private Date createDate;
@ApiModelProperty(value = "鏇存柊浜虹紪鐮�", example = "1")
- @ExcelColumn(name="鏇存柊浜虹紪鐮�")
+ //@ExcelColumn(name="鏇存柊浜虹紪鐮�")
private Integer editor;
@ApiModelProperty(value = "鏇存柊鏃堕棿")
- @ExcelColumn(name="鏇存柊鏃堕棿")
- @JsonFormat(pattern = "yyyy-MM-dd")
+ //@ExcelColumn(name="鏇存柊鏃堕棿")
private Date editDate;
@ApiModelProperty(value = "鏄惁鍒犻櫎0鍚� 1鏄�", example = "1")
- @ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
+ //@ExcelColumn(name="鏄惁鍒犻櫎0鍚� 1鏄�")
private Integer isdeleted;
@ApiModelProperty(value = "澶囨敞")
- @ExcelColumn(name="澶囨敞")
+ //@ExcelColumn(name="澶囨敞")
private String info;
+ @ApiModelProperty(value = "搴忓彿")
+ @ExcelColumn(name="搴忓彿",index = 7,width = 10)
+ private String code;
@ApiModelProperty(value = "鍚嶇О", example = "1")
- @ExcelColumn(name="鍚嶇О")
- private Integer name;
+ @ExcelColumn(name="鍚嶇О",index = 1,width = 10)
+ private String name;
@ApiModelProperty(value = "鐝粍缂栫爜锛堝叧鑱攃ategory锛�", example = "1")
- @ExcelColumn(name="鐝粍缂栫爜锛堝叧鑱攃ategory锛�")
+ //@ExcelColumn(name="鐝粍缂栫爜锛堝叧鑱攃ategory锛�")
private Integer categoryId;
@ApiModelProperty(value = "鎵�灞炶溅杈�(鍏宠仈cars)", example = "1")
- @ExcelColumn(name="鎵�灞炶溅杈�(鍏宠仈cars)")
+ //@ExcelColumn(name="鎵�灞炶溅杈�(鍏宠仈cars)")
private Integer carId;
@ApiModelProperty(value = "鏈�澶у鎴烽噺", example = "1")
- @ExcelColumn(name="鏈�澶у鎴烽噺")
+ @ExcelColumn(name="鏈�澶у鎴烽噺",index = 5,width = 10)
private Integer maxCustomer;
@ApiModelProperty(value = "鏈�澶ц鍗曢噺", example = "1")
- @ExcelColumn(name="鏈�澶ц鍗曢噺")
+ @ExcelColumn(name="鏈�澶ц鍗曢噺",index = 6,width = 10)
private Integer maxOrder;
@ApiModelProperty(value = "鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭", example = "1")
- @ExcelColumn(name="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭")
+ //@ExcelColumn(name="鐘舵�� 0鏈粦瀹� 1鍦ㄤ綅 2鍊熷嚭")
private Integer status;
@ApiModelProperty(value = "鎺掑簭鐮�", example = "1")
- @ExcelColumn(name="鎺掑簭鐮�")
+// @ExcelColumn(name="鎺掑簭鐮�")
private Integer sortnum;
+ @ApiModelProperty(value = "閰嶉�佸懆鏈�")
+ @ExcelColumn(name="閰嶉�佸懆鏈�",index = 3,width = 10)
+ private String weeks;
+
+ @ApiModelProperty(value = "鏄惁鏂板锛� 0鍚� 1鏄�", example = "1")
+ @TableField(exist = false)
+ private int isnew;
+ @ApiModelProperty(value = "閫佽揣杞﹁締", example = "1")
+ @ExcelColumn(name="閫佽揣杞﹁締",index = 4,width = 10)
+ @TableField(exist = false)
+ private String carCode;
+ @ApiModelProperty(value = "鎵�灞炰富绾胯矾", example = "1")
+ @ExcelColumn(name="鎵�灞炰富绾胯矾",index = 2,width = 10)
+ @TableField(exist = false)
+ private String categoryName;
+
+
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCustomerService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCustomerService.java
index 9ff9578..c09153d 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCustomerService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkCustomerService.java
@@ -1,8 +1,11 @@
package com.doumee.service.business;
+import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.JkCustomer;
+import org.springframework.web.multipart.MultipartFile;
+
import java.util.List;
/**
@@ -25,7 +28,7 @@
*
* @param id 涓婚敭
*/
- void deleteById(Integer id);
+ void deleteById(Integer id,LoginUserInfo user);
/**
* 鍒犻櫎
@@ -39,7 +42,7 @@
*
* @param ids 涓婚敭闆�
*/
- void deleteByIdInBatch(List<Integer> ids);
+ void deleteByIdInBatch(List<Integer> ids,LoginUserInfo user);
/**
* 涓婚敭鏇存柊
@@ -94,4 +97,8 @@
* @return long
*/
long count(JkCustomer jkCustomer);
+
+ List<JkCustomer> importBatch(MultipartFile file, LoginUserInfo loginUser);
+
+ void checkNullLocation();
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkLineService.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkLineService.java
index 4405246..2a68e63 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkLineService.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/JkLineService.java
@@ -1,8 +1,12 @@
package com.doumee.service.business;
+import com.doumee.dao.business.model.Cars;
+import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.dao.business.model.JkLine;
+import org.springframework.web.multipart.MultipartFile;
+
import java.util.List;
/**
@@ -25,7 +29,7 @@
*
* @param id 涓婚敭
*/
- void deleteById(Integer id);
+ void deleteById(Integer id, LoginUserInfo user);
/**
* 鍒犻櫎
@@ -39,7 +43,7 @@
*
* @param ids 涓婚敭闆�
*/
- void deleteByIdInBatch(List<Integer> ids);
+ void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user);
/**
* 涓婚敭鏇存柊
@@ -94,4 +98,6 @@
* @return long
*/
long count(JkLine jkLine);
+
+ List<JkLine> importBatch(MultipartFile file, LoginUserInfo loginUser);
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
index 50ff9f0..5e3ac7c 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/CarsServiceImpl.java
@@ -359,6 +359,7 @@
&& Constants.equalsInteger(Constants.ZERO,cars.getType())){
return this.getGwCar();
}
+ cars.setType(null);
QueryWrapper<Cars> wrapper = new QueryWrapper<>(cars);
wrapper.lambda().eq(Cars::getIsdeleted,Constants.ZERO);
return carsMapper.selectList(wrapper);
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
index ace6b04..be0bceb 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCabinetServiceImpl.java
@@ -155,8 +155,8 @@
queryWrapper.lambda().ge(JkCabinet::getHaertTime, Utils.Date.getStart(pageWrap.getModel().getHaertTime()));
queryWrapper.lambda().le(JkCabinet::getHaertTime, Utils.Date.getEnd(pageWrap.getModel().getHaertTime()));
}
- if (pageWrap.getModel().getLacation() != null) {
- queryWrapper.lambda().eq(JkCabinet::getLacation, pageWrap.getModel().getLacation());
+ if (pageWrap.getModel().getLocation() != null) {
+ queryWrapper.lambda().eq(JkCabinet::getLocation, pageWrap.getModel().getLocation());
}
if (pageWrap.getModel().getLongitude() != null) {
queryWrapper.lambda().eq(JkCabinet::getLongitude, pageWrap.getModel().getLongitude());
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
index 82e889a..2e04143 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkCustomerServiceImpl.java
@@ -1,19 +1,42 @@
package com.doumee.service.business.impl;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.doumee.biz.system.SystemDictDataBiz;
+import com.doumee.core.annotation.excel.ExcelImporter;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.HttpsUtil;
+import com.doumee.dao.admin.request.JkCustomerImport;
+import com.doumee.dao.admin.request.JkLineImport;
+import com.doumee.dao.business.JkLineMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.dao.system.model.SystemUser;
+import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.JkCustomerMapper;
-import com.doumee.dao.business.model.JkCustomer;
import com.doumee.service.business.JkCustomerService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
+import java.math.RoundingMode;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
/**
@@ -22,11 +45,18 @@
* @date 2025/09/28 09:01
*/
@Service
+@Slf4j
public class JkCustomerServiceImpl implements JkCustomerService {
@Autowired
private JkCustomerMapper jkCustomerMapper;
+ @Autowired
+ private JkLineMapper jkLineMapper;
+ @Autowired
+ private SystemDictDataBiz systemDictDataBiz;
+ @Autowired
+ private RedisTemplate<String, Object> redisTemplate;
@Override
public Integer create(JkCustomer jkCustomer) {
jkCustomerMapper.insert(jkCustomer);
@@ -34,8 +64,13 @@
}
@Override
- public void deleteById(Integer id) {
- jkCustomerMapper.deleteById(id);
+ public void deleteById(Integer id,LoginUserInfo user) {
+ jkCustomerMapper.update(null,new UpdateWrapper<JkCustomer>().lambda()
+ .set(JkCustomer::getIsdeleted,Constants.ONE)
+ .set(JkCustomer::getEditor,user.getId())
+ .set(JkCustomer::getEditDate,new Date())
+ .eq(JkCustomer::getId,id)
+ );
}
@Override
@@ -45,16 +80,39 @@
}
@Override
- public void deleteByIdInBatch(List<Integer> ids) {
+ public void deleteByIdInBatch(List<Integer> ids,LoginUserInfo user) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
- jkCustomerMapper.deleteBatchIds(ids);
+ jkCustomerMapper.update(null,new UpdateWrapper<JkCustomer>().lambda()
+ .set(JkCustomer::getIsdeleted,Constants.ONE)
+ .set(JkCustomer::getEditor,user.getId())
+ .set(JkCustomer::getEditDate,new Date())
+ .in(JkCustomer::getId,ids)
+ );
}
@Override
public void updateById(JkCustomer jkCustomer) {
- jkCustomerMapper.updateById(jkCustomer);
+ if(jkCustomer.getId() == null
+ ||jkCustomer.getLocationInfo() ==null ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+ String[] strs = jkCustomer.getLocationInfo().split(",");
+ jkCustomer.setLongitude(getDecimalByVal(strs[0]));//缁忓害
+ jkCustomer.setLatitude(strs.length>1?getDecimalByVal(strs[1]):null);//绾害
+ if(jkCustomer.getLatitude() == null || jkCustomer.getLongitude() ==null){
+ //闈炴垚瀵瑰嚭鐜帮紝鏃犳晥缁忕含搴︿笉缁存姢
+ throw new BusinessException(ResponseStatus.BAD_REQUEST);
+ }
+
+ jkCustomerMapper.update(null,new UpdateWrapper<JkCustomer>().lambda()
+ .set(JkCustomer::getLatitude,jkCustomer.getLatitude())
+ .set(JkCustomer::getLongitude,jkCustomer.getLongitude())
+ .set(JkCustomer::getEditor,jkCustomer.getLoginUserInfo().getId())
+ .set(JkCustomer::getEditDate,new Date())
+ .eq(JkCustomer::getId,jkCustomer.getId())
+ );
}
@Override
@@ -87,71 +145,315 @@
@Override
public PageData<JkCustomer> findPage(PageWrap<JkCustomer> pageWrap) {
IPage<JkCustomer> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- QueryWrapper<JkCustomer> queryWrapper = new QueryWrapper<>();
+ MPJLambdaWrapper<JkCustomer> queryWrapper = new MPJLambdaWrapper<>();
Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setIsdeleted(Constants.ZERO);
+ queryWrapper.selectAll(JkCustomer.class )
+ .selectAs(JkLine::getName,JkCustomer::getLineName)
+ .selectAs(JkLine::getWeeks,JkCustomer::getLineWeeks)
+ .selectAs(Category::getId,JkCustomer::getCategoryId)
+ .selectAs(Category::getName,JkCustomer::getCategoryName)
+ .leftJoin(JkLine.class,JkLine::getId,JkCustomer::getLineId )
+ .leftJoin(Category.class,Category::getId,JkLine::getCategoryId );
+ queryWrapper.eq( pageWrap.getModel().getCategoryId()!=null,JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
+ queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getLineWeeks()),JkLine::getWeeks, pageWrap.getModel().getLineWeeks());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCategoryName()),Category::getName, pageWrap.getModel().getCategoryName());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getLineName()),JkLine::getName, pageWrap.getModel().getLineName());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCategoryName()),Category::getName, pageWrap.getModel().getCategoryName());
if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().eq(JkCustomer::getId, pageWrap.getModel().getId());
+ queryWrapper.eq(JkCustomer::getId, pageWrap.getModel().getId());
}
if (pageWrap.getModel().getCreator() != null) {
- queryWrapper.lambda().eq(JkCustomer::getCreator, pageWrap.getModel().getCreator());
+ queryWrapper.eq(JkCustomer::getCreator, pageWrap.getModel().getCreator());
}
if (pageWrap.getModel().getCreateDate() != null) {
- queryWrapper.lambda().ge(JkCustomer::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
- queryWrapper.lambda().le(JkCustomer::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ queryWrapper.ge(JkCustomer::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.le(JkCustomer::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
}
if (pageWrap.getModel().getEditor() != null) {
- queryWrapper.lambda().eq(JkCustomer::getEditor, pageWrap.getModel().getEditor());
+ queryWrapper.eq(JkCustomer::getEditor, pageWrap.getModel().getEditor());
}
if (pageWrap.getModel().getEditDate() != null) {
- queryWrapper.lambda().ge(JkCustomer::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
- queryWrapper.lambda().le(JkCustomer::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ queryWrapper.ge(JkCustomer::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.le(JkCustomer::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
}
if (pageWrap.getModel().getIsdeleted() != null) {
- queryWrapper.lambda().eq(JkCustomer::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ queryWrapper.eq(JkCustomer::getIsdeleted, pageWrap.getModel().getIsdeleted());
}
if (pageWrap.getModel().getInfo() != null) {
- queryWrapper.lambda().eq(JkCustomer::getInfo, pageWrap.getModel().getInfo());
+ queryWrapper.eq(JkCustomer::getInfo, pageWrap.getModel().getInfo());
}
if (pageWrap.getModel().getName() != null) {
- queryWrapper.lambda().eq(JkCustomer::getName, pageWrap.getModel().getName());
+ queryWrapper.like(JkCustomer::getName, pageWrap.getModel().getName());
}
if (pageWrap.getModel().getCode() != null) {
- queryWrapper.lambda().eq(JkCustomer::getCode, pageWrap.getModel().getCode());
+ queryWrapper.like(JkCustomer::getCode, pageWrap.getModel().getCode());
}
- if (pageWrap.getModel().getLacation() != null) {
- queryWrapper.lambda().eq(JkCustomer::getLacation, pageWrap.getModel().getLacation());
+ if (pageWrap.getModel().getLocation() != null) {
+ queryWrapper.like(JkCustomer::getLocation, pageWrap.getModel().getLocation());
}
if (pageWrap.getModel().getLongitude() != null) {
- queryWrapper.lambda().eq(JkCustomer::getLongitude, pageWrap.getModel().getLongitude());
+ queryWrapper.eq(JkCustomer::getLongitude, pageWrap.getModel().getLongitude());
}
if (pageWrap.getModel().getLatitude() != null) {
- queryWrapper.lambda().eq(JkCustomer::getLatitude, pageWrap.getModel().getLatitude());
+ queryWrapper.eq(JkCustomer::getLatitude, pageWrap.getModel().getLatitude());
}
- if (pageWrap.getModel().getWeeks() != null) {
- queryWrapper.lambda().eq(JkCustomer::getWeeks, pageWrap.getModel().getWeeks());
+ if (pageWrap.getModel().getSortno() != null) {
+ queryWrapper.eq(JkCustomer::getSortno, pageWrap.getModel().getSortno());
}
if (pageWrap.getModel().getLineId() != null) {
- queryWrapper.lambda().eq(JkCustomer::getLineId, pageWrap.getModel().getLineId());
+ queryWrapper.eq(JkCustomer::getLineId, pageWrap.getModel().getLineId());
}
if (pageWrap.getModel().getStatus() != null) {
- queryWrapper.lambda().eq(JkCustomer::getStatus, pageWrap.getModel().getStatus());
+ queryWrapper.eq(JkCustomer::getStatus, pageWrap.getModel().getStatus());
}
if (pageWrap.getModel().getSortnum() != null) {
- queryWrapper.lambda().eq(JkCustomer::getSortnum, pageWrap.getModel().getSortnum());
+ queryWrapper.eq(JkCustomer::getSortnum, pageWrap.getModel().getSortnum());
}
- for(PageWrap.SortData sortData: pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
+
+ queryWrapper.orderByAsc(JkCustomer::getCode);
+ IPage<JkCustomer> result = jkCustomerMapper.selectJoinPage(page, JkCustomer.class,queryWrapper);
+ if(result.getRecords()!=null && result.getRecords().size()>0){
+ for(JkCustomer model :result.getRecords()){
+ if(model.getLongitude()!=null && model.getLatitude()!=null){
+ model.setLocationInfo(model.getLongitude().setScale(6, RoundingMode.HALF_UP).doubleValue()
+ +","+model.getLatitude().setScale(6, RoundingMode.HALF_UP).doubleValue());
+ }
}
}
- return PageData.from(jkCustomerMapper.selectPage(page, queryWrapper));
+ return PageData.from(result);
}
+ @Override
+ public void checkNullLocation() {
+
+ log.error("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�===============寮�濮�");
+ Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.CHECKING_JKCUSTOMER_LOCATION);
+ if(importing!=null && importing){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝涓婃浠诲姟姝e湪鎵ц涓紝璇风◢鍚庡啀璇曪紒");
+ }
+ redisTemplate.opsForValue().set(Constants.RedisKeys.CHECKING_JKCUSTOMER_LOCATION,true);
+ try {
+ LambdaQueryWrapper<JkCustomer> queryWrapper = new LambdaQueryWrapper<>();
+ queryWrapper.isNotNull(JkCustomer::getLocation);
+ queryWrapper.and(wrapper ->{
+ wrapper.isNull(JkCustomer::getLatitude)
+ .or().isNull(JkCustomer::getLongitude); });
+ //鏌ヨ鍏ㄩ儴鏈夊湴鍧�锛屼絾鏄病鏈夌粡绾害鐨勫鎴蜂俊鎭�
+ List<JkCustomer> list = jkCustomerMapper.selectList(queryWrapper);
+ if(list ==null || list.size()==0){
+ return;
+ }
+ String url = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.GAODE_LOCATION_GEOAPI_URL).getCode();
+ for(JkCustomer c : list){
+ try {
+ String result = HttpsUtil.get(url.replace("${param}",c.getLocation()),true);
+ JSONObject json = JSONObject.parseObject(result);
+ if(json!=null
+ && json.getInteger("status")!=null
+ && json.getInteger("status") ==1
+ && json.getJSONArray("geocodes")!=null
+ && json.getJSONArray("geocodes").size()>0
+ && json.getJSONArray("geocodes").getJSONObject(0)!=null
+ && json.getJSONArray("geocodes").getJSONObject(0).getString("location")!=null){
+ //璇锋眰鎴愬姛
+ String[] strs =json.getJSONArray("geocodes").getJSONObject(0).getString("location").split(",");
+ c.setLongitude(getDecimalByVal(strs[0]));//缁忓害
+ c.setLatitude(strs.length>1?getDecimalByVal(strs[1]):null);//绾害
+ if(c.getLatitude() != null && c.getLongitude() !=null){
+ //闈炴垚瀵瑰嚭鐜帮紝鏃犳晥缁忕含搴︿笉缁存姢
+ jkCustomerMapper.update(null,new UpdateWrapper<JkCustomer>().lambda()
+ .set(JkCustomer::getLatitude,c.getLatitude())
+ .set(JkCustomer::getLongitude,c.getLongitude())
+ .set(JkCustomer::getEditDate,new Date())
+ .eq(JkCustomer::getId,c.getId())
+ );
+ }
+ }else{
+ log.error("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�=====鑾峰彇澶辫触=========="+c.getName()+"-"+c.getLocation());
+ }
+ }catch (Exception e){
+ log.error("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�=====澶辫触=========="+c.getName()+"-"+c.getLocation());
+ }
+
+ }
+ }catch (Exception e){
+ log.error("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�===============",e.getMessage());
+ }finally {
+ redisTemplate.delete(Constants.RedisKeys.CHECKING_JKCUSTOMER_LOCATION);
+ }
+ log.error("鏇存柊浜ゆ帶涓績瀹㈡埛缁忕含搴︿俊鎭�===============缁撴潫");
+
+ }
@Override
public long count(JkCustomer jkCustomer) {
QueryWrapper<JkCustomer> wrapper = new QueryWrapper<>(jkCustomer);
return jkCustomerMapper.selectCount(wrapper);
}
+
+
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public List<JkCustomer> importBatch(MultipartFile file, LoginUserInfo loginUserInfo){
+ Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_JKCUSTOMER);
+ if(importing!=null && importing){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
+ }
+ redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKCUSTOMER,true);
+ try {
+ ExcelImporter ie = null;
+ List<JkCustomerImport> dataList =null;
+ try {
+ ie = new ExcelImporter(file,1,0);
+ dataList = ie.getDataList(JkCustomerImport.class,null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(dataList == null || dataList.size() ==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+ }
+ //褰撳墠鎵�鏈夌嚎璺�
+ List<JkLine> lineList = jkLineMapper.selectJoinList(JkLine.class,new MPJLambdaWrapper<JkLine>()
+ .selectAll(JkLine.class)
+ .eq(JkLine::getIsdeleted,Constants.ZERO)
+ );
+ List<JkCustomer> allList = jkCustomerMapper.selectJoinList(JkCustomer.class,new MPJLambdaWrapper<JkCustomer>()
+ .selectAll(JkCustomer.class)
+ .eq(JkCustomer::getIsdeleted,Constants.ZERO)
+ );
+
+ List<JkCustomer> newList = new ArrayList<>();
+ List<JkCustomer> updateList = new ArrayList<>();
+ for(int i=0;i<dataList.size();i++){
+ JkCustomerImport model = dataList.get(i);
+ if(StringUtils.isBlank(model.getName())
+ &&StringUtils.isBlank(model.getCode())
+ &&StringUtils.isBlank(model.getLocation())
+ &&StringUtils.isBlank(model.getSortno())
+ &&StringUtils.isBlank(model.getLocationInfo())
+ &&StringUtils.isBlank(model.getLineName()) ){
+ continue;
+ }
+ checkModelParam(model,newList,updateList,i,loginUserInfo,allList,lineList );
+ }
+ if((newList == null || newList.size() ==0) && updateList.size() == 0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏈夋晥鏁版嵁涓虹┖锛�");
+ }
+ if(newList.size()>0){
+ jkCustomerMapper.insert(newList);
+ }
+ if(updateList.size()>0){
+ for (JkCustomer c : updateList){
+ jkCustomerMapper.updateById(c);
+ }
+ }
+ newList.addAll(updateList);
+ return newList;
+ }catch (BusinessException e){
+ throw e;
+ }catch (Exception e){
+ e.printStackTrace();
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+ }finally {
+ redisTemplate.delete(Constants.RedisKeys.IMPORTING_JKCUSTOMER);
+ }
+
+ }
+
+
+ private JkCustomer checkModelParam(JkCustomerImport model, List<JkCustomer> newList
+ , List<JkCustomer> updateList
+ ,int index
+ ,LoginUserInfo loginUserInfo
+ ,List<JkCustomer> allList
+ ,List<JkLine> lineList ) {
+ if(StringUtils.isBlank(model.getName())
+ ||StringUtils.isBlank(model.getCode())
+ ||StringUtils.isBlank(model.getLocation()) ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+(index+3)+"琛屽鎴蜂俊鎭笉瀹屾暣锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ for(JkCustomer param: newList){
+ if(StringUtils.isNotBlank(model.getCode())&&StringUtils.isNotBlank(param.getCode())) {
+ if (StringUtils.equals(model.getCode(), param.getCode())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛屽鎴风畝鐮併��" + model.getName() + "銆戦噸澶嶅嚭鐜帮紝璇锋鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ }
+ }
+ JkLine line = findLineFromListByName(model.getLineName(),lineList);
+ if(line == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛岀嚎璺��" + model.getLineName() + "銆戜笉瀛樺湪锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+
+ JkCustomer tModel = findModelFromList(model.getCode(),allList);
+ if(tModel == null){
+ tModel = new JkCustomer();
+ tModel.setCreator(loginUserInfo.getId());
+ tModel.setCreateDate(new Date());
+ tModel.setIsnew(Constants.ONE);
+ newList.add(tModel);
+ }else{
+ tModel.setIsnew(Constants.ZERO);
+ updateList.add(tModel);
+ }
+ tModel.setName(model.getName());
+ tModel.setCode(model.getCode());
+ tModel.setLocation(model.getLocation());
+ tModel.setSortno(model.getSortno());
+ tModel.setLineId(line.getId());
+ if(StringUtils.isNotBlank(model.getLocationInfo())){
+ String[] strs = model.getLocationInfo().split(",");
+ tModel.setLongitude(getDecimalByVal(strs[0]));//缁忓害
+ tModel.setLatitude(strs.length>1?getDecimalByVal(strs[1]):null);//绾害
+ }
+ if(tModel.getLatitude() == null || tModel.getLongitude() ==null){
+ //闈炴垚瀵瑰嚭鐜帮紝鏃犳晥缁忕含搴︿笉缁存姢
+ tModel.setLongitude(null);
+ tModel.setLatitude(null);
+ }
+ tModel.setEditDate(new Date());
+ tModel.setEditor(loginUserInfo.getId());
+ tModel.setIsdeleted(Constants.ZERO);
+ return tModel;
+ }
+
+ private BigDecimal getDecimalByVal(String val) {
+ try {
+ return new BigDecimal(val);
+ }catch (Exception e){
+
+ }
+ return null;
+ }
+
+ private Company findCompanyFromList(String companyName, List<Company> companyList) {
+ if(companyList !=null){
+ for(Company company : companyList){
+ if(StringUtils.equals(companyName,company.getCompanyNamePath())){
+ return company;
+ }
+ }
+ }
+ return null;
+ }
+ private JkCustomer findModelFromList(String code, List<JkCustomer> list) {
+ if(list !=null){
+ for(JkCustomer model : list){
+ if(StringUtils.equals(code,model.getCode())){
+ return model;
+ }
+ }
+ }
+ return null;
+ }
+ private JkLine findLineFromListByName(String name, List<JkLine> list) {
+ if(list !=null){
+ for(JkLine model : list){
+ if(StringUtils.equals(name,model.getName())){
+ return model;
+ }
+ }
+ }
+ return null;
+ }
+
}
diff --git a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
index ff6161e..c5b5fa2 100644
--- a/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
+++ b/server/visits/dmvisit_service/src/main/java/com/doumee/service/business/impl/JkLineServiceImpl.java
@@ -1,19 +1,38 @@
package com.doumee.service.business.impl;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.doumee.core.annotation.excel.ExcelImporter;
+import com.doumee.core.constants.ResponseStatus;
+import com.doumee.core.exception.BusinessException;
+import com.doumee.core.utils.Constants;
+import com.doumee.core.utils.ScientificNotationTUtil;
+import com.doumee.dao.admin.request.CarsImport;
+import com.doumee.dao.admin.request.JkLineImport;
+import com.doumee.dao.business.CarsMapper;
+import com.doumee.dao.business.CategoryMapper;
+import com.doumee.dao.business.model.*;
+import com.doumee.service.business.third.model.LoginUserInfo;
import com.doumee.service.business.third.model.PageData;
import com.doumee.service.business.third.model.PageWrap;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.JkLineMapper;
-import com.doumee.dao.business.model.JkLine;
import com.doumee.service.business.JkLineService;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.yulichang.wrapper.MPJLambdaWrapper;
+import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
+import org.springframework.web.multipart.MultipartFile;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
/**
@@ -25,17 +44,45 @@
public class JkLineServiceImpl implements JkLineService {
@Autowired
+ private RedisTemplate<String, Object> redisTemplate;
+ @Autowired
private JkLineMapper jkLineMapper;
+ @Autowired
+ private CategoryMapper categoryMapper;
+ @Autowired
+ private CarsMapper carsMapper;
@Override
public Integer create(JkLine jkLine) {
+ if(jkLineMapper.selectCount(new QueryWrapper<JkLine>().lambda()
+ .eq(JkLine::getIsdeleted,Constants.ZERO)
+ .eq(JkLine::getName,jkLine.getName()) )>0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绾胯矾鍚嶇О宸插瓨鍦紝璇疯繑鍥炲埛鏂伴〉闈㈡煡鐪嬶紒");
+ }
+ if(categoryMapper.selectOne(new QueryWrapper<Category>().lambda()
+ .eq(Category::getId,jkLine.getCategoryId())
+ .eq(Category::getType,Constants.FOUR)
+ .eq(Category::getIsdeleted,Constants.ZERO)) ==null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鎵�灞炰富绾胯矾涓嶅瓨鍦紝璇疯繑鍥炲埛鏂伴〉闈㈡煡鐪嬶紒");
+ }
+ jkLine.setStatus(Constants.formatIntegerNum(jkLine.getStatus()));
+ jkLine.setIsdeleted(Constants.ZERO);
+ jkLine.setCreator(jkLine.getLoginUserInfo().getId());
+ jkLine.setCreateDate(new Date());
+ jkLine.setEditDate(jkLine.getCreateDate());
+ jkLine.setEditor(jkLine.getCreator());
jkLineMapper.insert(jkLine);
return jkLine.getId();
}
@Override
- public void deleteById(Integer id) {
- jkLineMapper.deleteById(id);
+ public void deleteById(Integer id, LoginUserInfo user) {
+ jkLineMapper.update(null,new UpdateWrapper<JkLine>().lambda()
+ .set(JkLine::getIsdeleted,Constants.ONE)
+ .set(JkLine::getEditor,user.getId())
+ .set(JkLine::getEditDate,new Date())
+ .eq(JkLine::getId,id)
+ );
}
@Override
@@ -45,15 +92,34 @@
}
@Override
- public void deleteByIdInBatch(List<Integer> ids) {
+ public void deleteByIdInBatch(List<Integer> ids, LoginUserInfo user) {
if (CollectionUtils.isEmpty(ids)) {
return;
}
- jkLineMapper.deleteBatchIds(ids);
+ jkLineMapper.update(null,new UpdateWrapper<JkLine>().lambda()
+ .set(JkLine::getIsdeleted,Constants.ONE)
+ .set(JkLine::getEditor,user.getId())
+ .set(JkLine::getEditDate,new Date())
+ .in(JkLine::getId,ids)
+ );
}
@Override
public void updateById(JkLine jkLine) {
+ if(jkLineMapper.selectCount(new QueryWrapper<JkLine>().lambda()
+ .ne(JkLine::getId,jkLine.getId())
+ .eq(JkLine::getIsdeleted,Constants.ZERO)
+ .eq(JkLine::getName,jkLine.getName()) )>0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绾胯矾鍚嶇О宸插瓨鍦紝璇疯繑鍥炲埛鏂伴〉闈㈡煡鐪嬶紒");
+ }
+ if(categoryMapper.selectOne(new QueryWrapper<Category>().lambda()
+ .eq(Category::getId,jkLine.getCategoryId())
+ .eq(Category::getType,Constants.FOUR)
+ .eq(Category::getIsdeleted,Constants.ZERO)) ==null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝鎵�灞炰富绾胯矾涓嶅瓨鍦紝璇疯繑鍥炲埛鏂伴〉闈㈡煡鐪嬶紒");
+ }
+ jkLine.setEditor(jkLine.getLoginUserInfo().getId());
+ jkLine.setEditDate(new Date());
jkLineMapper.updateById(jkLine);
}
@@ -80,67 +146,75 @@
@Override
public List<JkLine> findList(JkLine jkLine) {
+ jkLine.setIsdeleted(Constants.ZERO);
QueryWrapper<JkLine> wrapper = new QueryWrapper<>(jkLine);
+ wrapper.lambda().orderByAsc(JkLine::getCode);
return jkLineMapper.selectList(wrapper);
}
@Override
public PageData<JkLine> findPage(PageWrap<JkLine> pageWrap) {
IPage<JkLine> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
- QueryWrapper<JkLine> queryWrapper = new QueryWrapper<>();
+ MPJLambdaWrapper<JkLine> queryWrapper = new MPJLambdaWrapper<>();
Utils.MP.blankToNull(pageWrap.getModel());
+ pageWrap.getModel().setIsdeleted(Constants.ZERO);
+ queryWrapper.selectAll(JkLine.class )
+ .selectAs(Cars::getCode,JkLine::getCarCode)
+ .selectAs(Category::getName,JkLine::getCategoryName)
+ .leftJoin(Category.class,Category::getId,JkLine::getCategoryId )
+ .leftJoin(Cars.class,Cars::getId,JkLine::getCarId );
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCarCode()),Cars::getCode, pageWrap.getModel().getCarCode());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCategoryName()),Category::getName, pageWrap.getModel().getCategoryName());
+ queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()),JkLine::getCode, pageWrap.getModel().getCode());
+ queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getWeeks()),JkLine::getWeeks, pageWrap.getModel().getWeeks());
+
if (pageWrap.getModel().getId() != null) {
- queryWrapper.lambda().eq(JkLine::getId, pageWrap.getModel().getId());
+ queryWrapper.eq(JkLine::getId, pageWrap.getModel().getId());
}
if (pageWrap.getModel().getCreator() != null) {
- queryWrapper.lambda().eq(JkLine::getCreator, pageWrap.getModel().getCreator());
+ queryWrapper.eq(JkLine::getCreator, pageWrap.getModel().getCreator());
}
if (pageWrap.getModel().getCreateDate() != null) {
- queryWrapper.lambda().ge(JkLine::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
- queryWrapper.lambda().le(JkLine::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+ queryWrapper.ge(JkLine::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+ queryWrapper.le(JkLine::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
}
if (pageWrap.getModel().getEditor() != null) {
- queryWrapper.lambda().eq(JkLine::getEditor, pageWrap.getModel().getEditor());
+ queryWrapper.eq(JkLine::getEditor, pageWrap.getModel().getEditor());
}
if (pageWrap.getModel().getEditDate() != null) {
- queryWrapper.lambda().ge(JkLine::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
- queryWrapper.lambda().le(JkLine::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+ queryWrapper.ge(JkLine::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+ queryWrapper.le(JkLine::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
}
if (pageWrap.getModel().getIsdeleted() != null) {
- queryWrapper.lambda().eq(JkLine::getIsdeleted, pageWrap.getModel().getIsdeleted());
+ queryWrapper.eq(JkLine::getIsdeleted, pageWrap.getModel().getIsdeleted());
}
if (pageWrap.getModel().getInfo() != null) {
- queryWrapper.lambda().eq(JkLine::getInfo, pageWrap.getModel().getInfo());
+ queryWrapper.eq(JkLine::getInfo, pageWrap.getModel().getInfo());
}
if (pageWrap.getModel().getName() != null) {
- queryWrapper.lambda().eq(JkLine::getName, pageWrap.getModel().getName());
+ queryWrapper.like(JkLine::getName, pageWrap.getModel().getName());
}
if (pageWrap.getModel().getCategoryId() != null) {
- queryWrapper.lambda().eq(JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
+ queryWrapper.eq(JkLine::getCategoryId, pageWrap.getModel().getCategoryId());
}
if (pageWrap.getModel().getCarId() != null) {
- queryWrapper.lambda().eq(JkLine::getCarId, pageWrap.getModel().getCarId());
+ queryWrapper.eq(JkLine::getCarId, pageWrap.getModel().getCarId());
}
if (pageWrap.getModel().getMaxCustomer() != null) {
- queryWrapper.lambda().eq(JkLine::getMaxCustomer, pageWrap.getModel().getMaxCustomer());
+ queryWrapper.eq(JkLine::getMaxCustomer, pageWrap.getModel().getMaxCustomer());
}
if (pageWrap.getModel().getMaxOrder() != null) {
- queryWrapper.lambda().eq(JkLine::getMaxOrder, pageWrap.getModel().getMaxOrder());
+ queryWrapper.eq(JkLine::getMaxOrder, pageWrap.getModel().getMaxOrder());
}
if (pageWrap.getModel().getStatus() != null) {
- queryWrapper.lambda().eq(JkLine::getStatus, pageWrap.getModel().getStatus());
+ queryWrapper.eq(JkLine::getStatus, pageWrap.getModel().getStatus());
}
if (pageWrap.getModel().getSortnum() != null) {
- queryWrapper.lambda().eq(JkLine::getSortnum, pageWrap.getModel().getSortnum());
+ queryWrapper.eq(JkLine::getSortnum, pageWrap.getModel().getSortnum());
}
- for(PageWrap.SortData sortData: pageWrap.getSorts()) {
- if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
- queryWrapper.orderByDesc(sortData.getProperty());
- } else {
- queryWrapper.orderByAsc(sortData.getProperty());
- }
- }
- return PageData.from(jkLineMapper.selectPage(page, queryWrapper));
+ queryWrapper.orderByAsc(JkLine::getCode);
+ IPage<JkLine> result = jkLineMapper.selectJoinPage(page, JkLine.class,queryWrapper);
+ return PageData.from(result);
}
@Override
@@ -148,4 +222,184 @@
QueryWrapper<JkLine> wrapper = new QueryWrapper<>(jkLine);
return jkLineMapper.selectCount(wrapper);
}
+
+ @Override
+ @Transactional(rollbackFor = {BusinessException.class,Exception.class})
+ public List<JkLine> importBatch(MultipartFile file, LoginUserInfo loginUserInfo){
+ Boolean importing = (Boolean) redisTemplate.opsForValue().get(Constants.RedisKeys.IMPORTING_JKLINE);
+ if(importing!=null && importing){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝宸插瓨鍦ㄥ鍏ヤ换鍔℃鍦ㄦ墽琛屼腑锛岃绋嶅悗鍐嶈瘯锛�");
+ }
+ redisTemplate.opsForValue().set(Constants.RedisKeys.IMPORTING_JKLINE,true);
+ try {
+ ExcelImporter ie = null;
+ List<JkLineImport> dataList =null;
+ try {
+ ie = new ExcelImporter(file,1,0);
+ dataList = ie.getDataList(JkLineImport.class,null);
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ if(dataList == null || dataList.size() ==0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏁版嵁涓虹┖锛�");
+ }
+ //褰撳墠鎵�鏈夌嚎璺�
+ List<JkLine> allList = jkLineMapper.selectJoinList(JkLine.class,new MPJLambdaWrapper<JkLine>()
+ .selectAll(JkLine.class)
+ .eq(JkLine::getIsdeleted,Constants.ZERO)
+ );
+ //鎵�鏈変富绾胯矾
+ List<Category> categoryList = categoryMapper.selectJoinList(Category.class,new MPJLambdaWrapper<Category>()
+ .selectAll(Category.class)
+ .eq(Category::getIsdeleted,Constants.ZERO)
+ .eq(Category::getType,Constants.FOUR)
+ );
+ //鎵�鏈夌墿娴佽溅杞﹁締
+ List<Cars> cars = carsMapper.selectJoinList(Cars.class,new MPJLambdaWrapper<Cars>()
+ .selectAll(Cars.class)
+ .eq(Cars::getIsdeleted,Constants.ZERO)
+// .eq(Cars::getType,Constants.ONE)
+ );
+
+
+ List<JkLine> newList = new ArrayList<>();
+ List<JkLine> updateList = new ArrayList<>();
+ for(int i=0;i<dataList.size();i++){
+ JkLineImport model = dataList.get(i);
+ if(StringUtils.isBlank(model.getName())
+ &&StringUtils.isBlank(model.getCategoryName())
+ &&StringUtils.isBlank(model.getCarCode())
+ &&StringUtils.isBlank(model.getWeeks())
+ &&StringUtils.isBlank(model.getCode())
+ &&StringUtils.isBlank(model.getMaxCustomer())
+ &&StringUtils.isBlank(model.getMaxOrder()) ){
+ continue;
+ }
+ checkModelParam(model,newList,updateList,i,loginUserInfo,allList,categoryList,cars);
+ }
+ if((newList == null || newList.size() ==0) && updateList.size() == 0){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝褰曞叆鏈夋晥鏁版嵁涓虹┖锛�");
+ }
+ if(newList.size()>0){
+ jkLineMapper.insert(newList);
+ }
+ if(updateList.size()>0){
+ for (JkLine c : updateList){
+ jkLineMapper.updateById(c);
+ }
+ }
+ newList.addAll(updateList);
+ return newList;
+ }catch (BusinessException e){
+ throw e;
+ }catch (Exception e){
+ e.printStackTrace();
+ throw new BusinessException(ResponseStatus.SERVER_ERROR.getCode(),"淇℃伅瀵煎叆澶辫触锛岃绋嶅悗閲嶈瘯");
+ }finally {
+ redisTemplate.delete(Constants.RedisKeys.IMPORTING_JKLINE);
+ }
+
+ }
+
+
+ private JkLine checkModelParam(JkLineImport model, List<JkLine> newList
+ , List<JkLine> updateList
+ ,int index
+ ,LoginUserInfo loginUserInfo
+ ,List<JkLine> allList
+ ,List<Category> categoryList
+ , List<Cars> carsList) {
+ if(StringUtils.isBlank(model.getName())
+ ||StringUtils.isBlank(model.getCategoryName()) ){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"瀵逛笉璧凤紝绗�"+(index+3)+"琛岀嚎璺俊鎭笉瀹屾暣锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ for(JkLine param: newList){
+ if(StringUtils.isNotBlank(model.getName())&&StringUtils.isNotBlank(param.getName())) {
+ if (StringUtils.equals(model.getName(), param.getName())) {
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛岀嚎璺悕绉般��" + model.getName() + "銆戦噸澶嶅嚭鐜帮紝璇锋鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ }
+ }
+ Category cate = findCategoryFromListByName(model.getCategoryName(),categoryList);
+ if(cate == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛屾墍灞炰富绾胯矾銆�" + model.getCategoryName() + "銆戜笉瀛樺湪锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ Cars car = findCarFromListByName(model.getCarCode(),carsList);
+ if(car == null){
+ throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝绗�" + (index + 3) + "琛岄�佽溅杞﹁締銆�" + model.getCarCode() + "銆戜笉瀛樺湪锛岃妫�鏌ヨ〃鏍煎唴瀹癸紒");
+ }
+ JkLine line = findModelFromList(model.getName(),allList);
+ if(line == null){
+ line = new JkLine();
+ line.setCreator(loginUserInfo.getId());
+ line.setCreateDate(new Date());
+ line.setIsnew(Constants.ONE);
+ newList.add(line);
+ }else{
+ line.setIsnew(Constants.ZERO);
+ updateList.add(line);
+ }
+ line.setName(model.getName());
+ line.setCode(model.getCode());
+ line.setCategoryId(cate.getId());
+ line.setCarId(car.getId());
+ line.setWeeks(model.getWeeks());
+ line.setMaxCustomer(getIntegerByVal(model.getMaxCustomer()));
+ line.setMaxOrder(getIntegerByVal(model.getMaxOrder()));
+
+ line.setEditDate(new Date());
+ line.setEditor(loginUserInfo.getId());
+ line.setIsdeleted(Constants.ZERO);
+ return line;
+ }
+
+ private Integer getIntegerByVal(String maxCustomer) {
+ try {
+ return Integer.parseInt(maxCustomer);
+ }catch (Exception e){
+
+ }
+ return null;
+ }
+
+ private Company findCompanyFromList(String companyName, List<Company> companyList) {
+ if(companyList !=null){
+ for(Company company : companyList){
+ if(StringUtils.equals(companyName,company.getCompanyNamePath())){
+ return company;
+ }
+ }
+ }
+ return null;
+ }
+ private JkLine findModelFromList(String name, List<JkLine> list) {
+ if(list !=null){
+ for(JkLine model : list){
+ if(StringUtils.equals(name,model.getName())){
+ return model;
+ }
+ }
+ }
+ return null;
+ }
+ private Category findCategoryFromListByName(String name, List<Category> list) {
+ if(list !=null){
+ for(Category model : list){
+ if(StringUtils.equals(name,model.getName())){
+ return model;
+ }
+ }
+ }
+ return null;
+ }
+ private Cars findCarFromListByName(String name, List<Cars> list) {
+ if(list !=null){
+ for(Cars model : list){
+ if(StringUtils.equals(name,model.getCode())){
+ return model;
+ }
+ }
+ }
+ return null;
+ }
}
--
Gitblit v1.9.3