| | |
| | | # VUE_APP_API_URL = 'http://10.50.250.253:8088/gateway_interface' |
| | | |
| | | |
| | | #keyï¼045542fc5f436b75e6c911c5c84ff8cd |
| | | #å¯é¥ï¼8bd38497f9aee2b75e7a888a4dfd1e6c |
| | | VUE_APP_AMAP_KEY='045542fc5f436b75e6c911c5c84ff8cd' |
| | |
| | | "lockfileVersion": 1, |
| | | "requires": true, |
| | | "dependencies": { |
| | | "@amap/amap-jsapi-loader": { |
| | | "version": "1.0.1", |
| | | "resolved": "https://registry.npmmirror.com/@amap/amap-jsapi-loader/-/amap-jsapi-loader-1.0.1.tgz", |
| | | "integrity": "sha512-nPyLKt7Ow/ThHLkSvn2etQlUzqxmTVgK7bIgwdBRTg2HK5668oN7xVxkaiRe3YZEzGzfV2XgH5Jmu2T73ljejw==" |
| | | }, |
| | | "@babel/code-frame": { |
| | | "version": "7.12.13", |
| | | "resolved": "https://registry.npm.taobao.org/@babel/code-frame/download/@babel/code-frame-7.12.13.tgz", |
| | |
| | | "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", |
| | |
| | | "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" |
| | | } |
| | | } |
| | | } |
| | |
| | | "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" |
| | | } |
| | | } |
| | | } |
| | | }, |
| | |
| | | "fix": "eslint --ext .js,.vue src --fix" |
| | | }, |
| | | "dependencies": { |
| | | "@amap/amap-jsapi-loader": "^1.0.1", |
| | | "@riophae/vue-treeselect": "^0.4.0", |
| | | "@wangeditor/editor": "^5.1.23", |
| | | "@wangeditor/editor-for-vue": "^1.0.2", |
| | |
| | | trim: true |
| | | }) |
| | | } |
| | | export function allMapList (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/jkSketchCustomer/allMapList', data, { |
| | | trim: true |
| | | }) |
| | | } |
| | | |
| | | // 导åºExcel |
| | | export function exportExcel (data) { |
| | |
| | | <div style="display: flex;margin-top: 20px" class="orange"> |
| | | <div style="flex: 1" >线路åå§æ»è·¯ç¨ï¼ |
| | | <span v-if="(model.originDistance ||0) > 0 || (model.status||0) != 0" class="red" style="font-weight: bold"> {{((model.originDistance ||0)/1000).toFixed(2)}}</span> |
| | | <span v-if="(model.originDistance ||0) == 0 && (model.status||0) == 0" class="blue" style="font-weight: bold;cursor: pointer" @click="initDistance"> ç¹å»è·å </span> å
¬éï¼ |
| | | <span v-if="(model.originDistance ||0) == 0 && (model.status||0) == 0" class="blue" style="font-weight: bold;cursor: pointer" @click="initDistance"> ç¹å»è·å </span> å
¬éï¼ |
| | | <span v-if="model.status ==2">ä¼ååæ»è·¯ç¨:<span class="green" style="font-weight: bold"> {{((model.distance ||0)/1000).toFixed(2)}} </span> å
Ž</span> |
| | | </div> |
| | | </div> |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | label="æä½" |
| | | min-width="120" |
| | | min-width="160" |
| | | align="center" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaJkSketchCustomerWindow.open('çº¿è·¯å®¢æ·æç»ââ', row)" icon="el-icon-view" >æ¥ç客æ·</el-button> |
| | | <el-button type="text" @click="$refs.operaJkSketchLineMapWindow.open('线路客æ·äº¤é路线ââ', row)" icon="el-icon-view" >交é路线</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | <el-button @click="visible=false">è¿å</el-button> |
| | | </template> |
| | | <OperaJkSketchCustomerWindow ref="operaJkSketchCustomerWindow" /> |
| | | <OperaJkSketchLineMapWindow ref="operaJkSketchLineMapWindow" /> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import OperaJkSketchCustomerWindow from '@/components/business/OperaJkSketchCustomerWindow' |
| | | import OperaJkSketchLineMapWindow from '@/components/business/OperaJkSketchLineMapWindow' |
| | | import { initOriginDistance } from '@/api/business/jkSketch' |
| | | export default { |
| | | name: 'OperaJkSketchLineWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow, OperaJkSketchCustomerWindow }, |
| | | components: { GlobalWindow, OperaJkSketchCustomerWindow ,OperaJkSketchLineMapWindow}, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | |
| | | if(res){ |
| | | that.model.originDistance = res.originDistance |
| | | that.model.distance = res.distance |
| | | that.loadList() |
| | | } |
| | | }) |
| | | }, |
¶Ô±ÈÐÂÎļþ |
| | |
| | | <template> |
| | | <GlobalWindow |
| | | :title="title" |
| | | width="100%" |
| | | :visible.sync="visible" |
| | | > |
| | | <div id="container"></div> |
| | | <div id="panel" style='position: absolute; right: 10px;top: 10px;height: 480px;width: 300px;z-index: 100;overflow: auto;'></div> |
| | | <template v-slot:footer> |
| | | <el-button @click="visible=false">è¿å</el-button> |
| | | </template> |
| | | </GlobalWindow> |
| | | </template> |
| | | |
| | | <script> |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import AMapLoader from '@amap/amap-jsapi-loader' |
| | | import blueIcon from '@/assets/icons/location-blue.png' |
| | | import redIcon from '@/assets/icons/location-red.png' |
| | | export default { |
| | | name: 'OperaJkSketchMapWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalWindow }, |
| | | data () { |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | visible: false, |
| | | title: '', |
| | | dataList: [], |
| | | locations: [], |
| | | map: null, |
| | | model: { |
| | | } |
| | | } |
| | | }, |
| | | created () { |
| | | this.config({ |
| | | module: '交æ§-线路ä¼å线路客æ·è®°å½ä¿¡æ¯è¡¨', |
| | | api: '/business/jkSketchCustomer', |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | }, |
| | | methods: { |
| | | open (title, row) { |
| | | this.title = title + (row.lineName) |
| | | this.visible = true |
| | | this.dataList = [] |
| | | this.model = row |
| | | this.locations = [] |
| | | this.initAMap() |
| | | }, |
| | | loadCustomer () { |
| | | var that = this |
| | | this.api.allMapList({ |
| | | sketchLineId: this.model.id |
| | | }).then(res => { |
| | | that.dataList = res || [] |
| | | that.locations = [] |
| | | that.dataList.forEach((item, index) => { |
| | | var allsteps = [] |
| | | allsteps.push([item.startLogitude, item.startLatitude]) |
| | | const steps = (item.steps || '').split(';') |
| | | if (index != that.dataList.length - 1 || true) { |
| | | steps.forEach(item1 => { |
| | | const ll = (item1 || '').split(',') |
| | | allsteps.push(ll) |
| | | }) |
| | | allsteps.push([item.endLogitude, item.endLatitude]) |
| | | } |
| | | try { |
| | | /* console.log(item) |
| | | var driving = new AMap.Driving({ |
| | | map: that.map, |
| | | panel: 'panel' |
| | | }) |
| | | driving.search(new AMap.LngLat(item.startLogitude, item.startLatitude), new AMap.LngLat(item.endLogitude, item.endLatitude), function (status, result) { |
| | | if (status === 'complete') { |
| | | console.log('ç»å¶é©¾è½¦è·¯çº¿å®æ') |
| | | } else { |
| | | console.error('è·åé©¾è½¦æ°æ®å¤±è´¥ï¼' + result) |
| | | } |
| | | }) */ |
| | | } catch (e) { |
| | | |
| | | } |
| | | var color = index === that.dataList.length - 1 ? '#a10e0e' : '#157713' |
| | | var polyline = new AMap.Polyline({ |
| | | path: [allsteps], |
| | | isOutline: true, |
| | | outlineColor: color || '#157713', |
| | | borderWeight: 1, |
| | | strokeColor: color || '#157713', |
| | | strokeOpacity: 1, |
| | | strokeWeight: 2, |
| | | // æçº¿æ ·å¼è¿æ¯æ 'dashed' |
| | | strokeStyle: 'solid', |
| | | // strokeStyleæ¯dashedæ¶ææ |
| | | strokeDasharray: [10, 5], |
| | | lineJoin: 'round', |
| | | lineCap: 'round', |
| | | zIndex: 100 |
| | | }) |
| | | |
| | | that.map.add([polyline]) |
| | | that.map.setFitView() |
| | | |
| | | const icon = new AMap.Icon({ |
| | | size: new AMap.Size(30, 50), // 徿 尺寸 |
| | | image: index === 0 ? redIcon : blueIcon |
| | | }) |
| | | |
| | | var marker = new AMap.Marker({ |
| | | position: new AMap.LngLat(item.startLogitude, item.startLatitude), |
| | | icon: index === 0 ? redIcon : blueIcon, |
| | | anchor: 'bottom-center', |
| | | offset: new AMap.Pixel(0, 0) |
| | | }) |
| | | var title = (index == 0 ? 'ååº' : (index + '.' + item.name + (' ' + item.location || ''))) + 'ï¼' + (index != that.dataList.length - 1 ? 'è·ä¸ä¸ç«ï¼' : 'è¿åååºï¼') + ((item.distance || 0) / 1000) + 'å
Ž' |
| | | marker.setTitle(title) |
| | | var contnet = '<div>' + (index == 0 ? 'ååº' : (index + '.' + item.name)) + '</div>' |
| | | marker.setLabel({ |
| | | direction: 'right', |
| | | offset: new AMap.Pixel(0, 0), |
| | | content: contnet |
| | | }) |
| | | marker.setMap(that.map) |
| | | // that.locations.push(allsteps) |
| | | }) |
| | | }) |
| | | }, |
| | | initAMap () { |
| | | var that = this |
| | | AMapLoader.load({ |
| | | key: process.env.VUE_APP_AMAP_KEY, |
| | | version: '2.0', |
| | | plugins: ['AMap.ToolBar', 'AMap.Driving'], |
| | | AMapUI: { |
| | | version: '1.1', |
| | | plugins: [] |
| | | }, |
| | | Loca: { |
| | | version: '2.0' // æ°æ®å¯è§å |
| | | } |
| | | }).then((AMap) => { |
| | | that.map = new AMap.Map('container', { |
| | | viewMode: '2D', // é»è®¤ä½¿ç¨ 2D æ¨¡å¼ |
| | | zoom: 20, // åå§åå°å¾å±çº§ |
| | | center: [118.39, 31.28] // åå§åå°å¾ä¸å¿ç¹ |
| | | }) |
| | | this.loadCustomer() |
| | | }).catch(e => { |
| | | console.log(e) |
| | | }) |
| | | }, |
| | | getRandomColor (index, total) { |
| | | const r = 21 |
| | | // const g = 80 +(index*50/total); |
| | | const g = 120 |
| | | const b = 19 |
| | | return `rgb(${r}, ${g}, ${b})` |
| | | } |
| | | } |
| | | } |
| | | </script> |
| | | <style> |
| | | #container { |
| | | padding: 0px; |
| | | margin: 0px; |
| | | width: 100%; |
| | | height: 90%; |
| | | position: absolute; |
| | | } |
| | | |
| | | </style> |
| | |
| | | <el-table-column prop="dateInfo" label="éè´§æ¥æ" min-width="130px"></el-table-column> |
| | | <el-table-column prop="lineName" label="é货线路" min-width="130px"> </el-table-column> |
| | | <el-table-column prop="orderNum" label="å®¢æ·æ°(æ·)" min-width="130px"> </el-table-column> |
| | | <el-table-column prop="totalNum" label="éè´§é(æ¡)" min-width="130px"></el-table-column> |
| | | <el-table-column prop="totalNum" label="éè´§é/æå¤§é(æ¡)" min-width="130px"> |
| | | <template slot-scope="{row}"> |
| | | {{row.totalNum ||0}} / {{row.maxOrder || 0}} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="carCode" label="车çå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="memberName" label="éè´§å¸æº" min-width="100px"></el-table-column> |
| | | <el-table-column prop="distance" label="æ»è·¯ç¨(å
Ž)" min-width="100px"> |
| | | <template slot-scope="{row}"> |
| | | {{((row.distance ||0)/1000).toFixed(2)}} |
| | | {{((row.distance ||0)/1000).toFixed(2)}}(è°æ´å) |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column |
| | |
| | | align="left" |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <template slot-scope="{row}" v-if="dataList.length>1"> |
| | | <el-button type="text" @click="updateDo(row)" icon="el-icon-edit" style="color: #0d68ff" v-if="!updating" >å¾®è°</el-button> |
| | | <template v-else-if="updating && currentRow.id ===row.id" > |
| | | <el-button type="text" style="color: #13ce66" >æ¬è½¦</el-button> |
| | | <el-button type="text" @click="cancelDo(row)" icon="el-icon-delete" style="color: red" >åæ¶</el-button> |
| | | <el-button type="text" @click="cancelDo(row)" icon="el-icon-circle-close" style="color: red" >åæ¶</el-button> |
| | | </template> |
| | | <el-button type="text" @click="addDo(row)" icon="el-icon-plus" style="color: red" v-else-if="updating && currentRow.id !==row.id" >å å
¥</el-button> |
| | | </template> |
| | |
| | | <div> |
| | | <p class="tip-warn"><i class="el-icon-warning"></i>æä½è¯´æï¼<br> |
| | | 1.è¯·éæ©è¥å¹²å®¢æ·ä¿¡æ¯ï¼ç¹å»ä¸è¿°å
¶ä»çº¿è·¯åç<span class="red">ãå å
¥ã</span>æé®ï¼å°éä¸ç客æ·ç§»å å°å¯¹åºçº¿è·¯ä¸;<br> |
| | | 2.ç¹å»æ¬è½¦çº¿è·¯åç<span class="red">ãåæ¶ã</span>æé®ï¼å¯æ¤éæ¬è½¦å¾®è°æä½;<br> |
| | | 2.ç¹å»æ¬è½¦çº¿è·¯åç<span class="red">ãåæ¶ã</span>æé®ï¼å¯æ¤éæ¬è½¦å¾®è°æä½;<br> |
| | | 3.ç»è¿è°æ´åççº¿è·¯è·¯ç¨æ°è¯·çå¾
æäº¤åæ¥ç;<br> |
| | | </p> |
| | | <el-table :data="paginatedData" stripe @selection-change="handleSelectionChange">> |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | |
| | | </div> |
| | | <template v-slot:footer> |
| | | <el-button @click="confirmDo" type="primary" v-if="buttonName!==''">{{ buttonName||'确认' }}</el-button> |
| | | <el-button @click="resetData" type="danger" v-if="buttonName!==''">æ¤éææè°æ´</el-button> |
| | | <el-button @click="visible=false">è¿å</el-button> |
| | | </template> |
| | | </GlobalWindow> |
| | |
| | | import BaseOpera from '@/components/base/BaseOpera' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import { allList as customerList } from '@/api/business/jkSketchCustomer' |
| | | import { updateSketchLine } from '@/api/business/jkSketch' |
| | | export default { |
| | | name: 'OperaJkSketchLineWindow', |
| | | extends: BaseOpera, |
| | |
| | | return { |
| | | // è¡¨åæ°æ® |
| | | updating: false, |
| | | edited: false, |
| | | currentRow: null, |
| | | model: { |
| | | }, |
| | | buttonName: '', |
| | | dataList: [], |
| | | originDataList: [], |
| | | currentPage: 1, |
| | | pageSize: 10, |
| | | totalItems: 0, // æ»æ°æ®æ¡ç®æ° |
| | |
| | | } |
| | | }, |
| | | methods: { |
| | | resetData () { |
| | | this.buttonName = '' |
| | | this.cancelDo() |
| | | this.loadList() |
| | | }, |
| | | confirmDo () { |
| | | |
| | | this.isWorking = true |
| | | updateSketchLine({ |
| | | id: this.model.id, |
| | | sketchLineList: this.dataList |
| | | }) |
| | | .then(() => { |
| | | this.visible = false |
| | | this.$tip.apiSuccess('çº¿è·¯è°æ´å·²å®æï¼') |
| | | this.$emit('success') |
| | | }) |
| | | .catch(e => { |
| | | // this.$tip.apiFailed(e) |
| | | }) |
| | | .finally(() => { |
| | | this.isWorking = false |
| | | }) |
| | | }, |
| | | open (title, target) { |
| | | this.title = title + target.categoryName |
| | |
| | | this.selectRows = [] |
| | | this.updating = true |
| | | }, |
| | | cancelDo (row) { |
| | | cancelDo () { |
| | | this.selectRows = [] |
| | | this.currentRow = null |
| | | this.updating = false |
| | |
| | | tarray.push(item) |
| | | } |
| | | }) |
| | | if(tarray.length === 0){ |
| | | if (tarray.length === 0) { |
| | | this.$message.error('对ä¸èµ·ï¼æ¬è½¦çº¿è·¯è³å°çåä¸ä¸ªå®¢æ·ä¿¡æ¯ï¼æ æ³å
¨é¨æ¸
空ï¼') |
| | | return |
| | | } |
| | | var rArray = row.customerList || [] |
| | | rArray = rArray.push(...this.selectRows) |
| | | var rArray = [...row.customerList || []] |
| | | rArray.push(...this.selectRows) |
| | | let ttNum = 0 |
| | | rArray.forEach(item => { |
| | | ttNum += (item.totalNum || 0) |
| | | }) |
| | | if(tarray.length >= (row.maxCustomer||0)){ |
| | | this.$message.error('对ä¸èµ·ï¼å å
¥ç线路æå¤§æ¯æ'+ (row.maxOrderNum||0) + '客æ·ï¼') |
| | | if (tarray.length >= (row.maxCustomer || 0)) { |
| | | this.$message.error('对ä¸èµ·ï¼å å
¥ç线路æå¤§æ¯æ' + (row.maxCustomer || 0) + '客æ·ï¼') |
| | | return |
| | | } |
| | | if(ttNum >= (row.maxOrder||0)){ |
| | | this.$message.error('对ä¸èµ·ï¼å å
¥ç线路æå¤§æ¯æ'+ (row.maxOrder||0) + 'éè´§éï¼') |
| | | if (ttNum >= (row.maxOrder || 0)) { |
| | | this.$message.error('对ä¸èµ·ï¼å å
¥ç线路æå¤§æ¯æ' + (row.maxOrder || 0) + 'éè´§éï¼å½åæ¹æ¡ï¼' + ttNum) |
| | | return |
| | | } |
| | | this.currentRow.customerList = tarray |
| | |
| | | this.currentRow = null |
| | | this.updating = false |
| | | this.buttonName = 'ä¿åè°æ´å¼å§ä¼å' |
| | | |
| | | console.log(this.dataList) |
| | | console.log(this.originDataList) |
| | | }, |
| | | handleSelectionChange (rows) { |
| | | this.selectRows = rows |
| | |
| | | this.api.allList({ |
| | | sketchId: this.model.id |
| | | }).then(res => { |
| | | this.dataList = res |
| | | this.dataList = [...(res || [])] |
| | | this.originDataList = JSON.parse(JSON.stringify(res||[])); |
| | | this.loadCustomerList() |
| | | }) |
| | | }, |
| | |
| | | </el-form-item> |
| | | <el-form-item label="交éè§åç¶æ" prop="distanceStatus"> |
| | | <el-select v-model="searchForm.distanceStatus" clearable filterable placeholder="è¯·éæ©äº¤éè§åç¶æ" @change="search"> |
| | | <el-option :value="0" label="æªå®æ"></el-option> |
| | | <el-option :value="1" label="已宿"></el-option> |
| | | <el-option :value="2" label="æªå®ä½"></el-option> |
| | | <el-option :value="0" label="æªè§å"></el-option> |
| | | <el-option :value="1" label="å·²è§å"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | |
| | | <el-table-column prop="sortno" label="åºå·" min-width="100px"></el-table-column> |
| | | <el-table-column prop="distanceStatus" label="交éè§åç¶æ" min-width="100px" align="center"> |
| | | <template slot-scope="{row}"> |
| | | <span v-if="row.distanceStatus === 1" class="green">已宿</span> |
| | | <span v-else class="blue">æªå®æ</span> |
| | | <span v-if="row.distanceStatus === 2" class="red">æªå®ä½</span> |
| | | <span v-else-if="row.distanceStatus === 1" class="green">å·²è§å</span> |
| | | <span v-else class="blue">æªè§å</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="editDate" label="æ´æ°æ¶é´" min-width="140px"></el-table-column> |
| | |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDä¿®æ¹") |
| | | @PostMapping("/updateSketchLine") |
| | | @CloudRequiredPermission("business:jksketch:update") |
| | | public ApiResponse updateSketchLine(@RequestBody JkSketch jkSketch, @RequestHeader(Constants.HEADER_USER_TOKEN) String token) { |
| | | jkSketch.setLoginUserInfo(this.getLoginUser(token)); |
| | | JkSketch model = jkSketchService.updateSketchLine(jkSketch); |
| | | jkSketchService.startEditSketchLineAsync(model);//弿¥ä¼å |
| | | return ApiResponse.success(null); |
| | | } |
| | | |
| | | @ApiOperation("æ ¹æ®IDéæ°è®¡ç®å½å线路çè·ç¦»") |
| | | @PostMapping("/initOriginDistance") |
| | | @CloudRequiredPermission("business:jksketch:update") |
| | |
| | | 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.JkCustomerNavigation; |
| | | import com.doumee.dao.business.model.JkSketchCustomer; |
| | | import com.doumee.service.business.JkSketchCustomerService; |
| | | import com.doumee.service.business.third.model.ApiResponse; |
| | |
| | | public ApiResponse<List<JkSketchCustomer>> allList (@RequestBody JkSketchCustomer pageWrap) { |
| | | return ApiResponse.success(jkSketchCustomerService.findList(pageWrap)); |
| | | } |
| | | @ApiOperation("å表æ¥è¯¢") |
| | | @PostMapping("/allMapList") |
| | | @CloudRequiredPermission("business:jksketchcustomer:query") |
| | | public ApiResponse<List<JkCustomerNavigation> > allMapList (@RequestBody JkSketchCustomer pageWrap) { |
| | | return ApiResponse.success(jkSketchCustomerService.allMapList(pageWrap)); |
| | | } |
| | | |
| | | @ApiOperation("导åºExcel") |
| | | @PostMapping("/exportExcel") |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.tsp; |
| | | |
| | | import lombok.Data; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | import java.util.List; |
| | | |
| | | @Slf4j |
| | | @Data |
| | | public class DistanceCustomerSimpleModel { |
| | | private long distance; |
| | | private List<String> locations; |
| | | private String polyline; |
| | | private Integer startId; |
| | | private Integer endId; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "ç¶æ 0æ£å¸¸ ç¦ç¨", example = "1") |
| | | //@ExcelColumn(name="ç¶æ 0æ£å¸¸ ç¦ç¨") |
| | | private Integer status; |
| | | @ApiModelProperty(value = "è·ç¦»è®¡ç®ç¶æ 0æªè®¡ç® 1已计ç®", example = "1") |
| | | @ApiModelProperty(value = "è·ç¦»è®¡ç®ç¶æ 0æªè®¡ç® 1å·²è®¡ç® 2æªå®ä½", example = "1") |
| | | //@ExcelColumn(name="ç¶æ 0æ£å¸¸ ç¦ç¨") |
| | | private Integer distanceStatus; |
| | | @ApiModelProperty(value = "客æ·é´è·ç¦»éå", example = "1") |
| | |
| | | package com.doumee.dao.business.model; |
| | | |
| | | import com.baomidou.mybatisplus.annotation.TableField; |
| | | import com.doumee.core.annotation.excel.ExcelColumn; |
| | | import io.swagger.annotations.ApiModel; |
| | | import io.swagger.annotations.ApiModelProperty; |
| | |
| | | @ExcelColumn(name="éå¾ç»çº¬åº¦éåï¼åå·éå¼") |
| | | private String steps; |
| | | |
| | | @ApiModelProperty(value = "维度", example = "1") |
| | | @ApiModelProperty(value = "èµ·ç¹çº¬åº¦", example = "1") |
| | | @ExcelColumn(name="维度") |
| | | private BigDecimal startLatitude; |
| | | |
| | | @ApiModelProperty(value = "客æ·åºå·", example = "1") |
| | | @ApiModelProperty(value = "ç»ç¹çº¬åº¦", example = "1") |
| | | @ExcelColumn(name="客æ·åºå·") |
| | | private BigDecimal endLatitude; |
| | | |
| | | @ApiModelProperty(value = "é货路线ç¼ç ï¼å
³èjk_line)", example = "1") |
| | | @ExcelColumn(name="é货路线ç¼ç ï¼å
³èjk_line)") |
| | | @ApiModelProperty(value = "èµ·ç¹ç»åº¦", example = "1") |
| | | private BigDecimal startLogitude; |
| | | |
| | | @ApiModelProperty(value = "ç¶æ 0æ£å¸¸ ç¦ç¨", example = "1") |
| | | @ExcelColumn(name="ç¶æ 0æ£å¸¸ ç¦ç¨") |
| | | @ApiModelProperty(value = "ç»ç¹ç»åº¦", example = "1") |
| | | private BigDecimal endLogitude; |
| | | |
| | | @ApiModelProperty(value = "èµ·æ¢ç¹IDç»åï¼startId-endId)") |
| | | @ExcelColumn(name="èµ·æ¢ç¹IDç»åï¼startId-endId)") |
| | | private String idIndex; |
| | | @ApiModelProperty(value = "客æ·åç§°") |
| | | @TableField(exist = false) |
| | | private String name; |
| | | @ApiModelProperty(value = "客æ·å°å") |
| | | @TableField(exist = false) |
| | | private String location; |
| | | |
| | | } |
| | |
| | | @ApiModelProperty(value = "线路éå", example = "1") |
| | | @TableField(exist = false) |
| | | List<JkLine> lineList; |
| | | @ApiModelProperty(value = "线路éå(è°æ´åï¼", example = "1") |
| | | @TableField(exist = false) |
| | | List<JkSketchLine> sketchLineList; |
| | | @ApiModelProperty(value = "线路ç¼ç éå", example = "1") |
| | | @TableField(exist = false) |
| | | List<Integer> lineIdList; |
| | |
| | | @ApiModelProperty(value = "åçç»é´å®¢æ·ä½ç½®è·ç¦»æ°ç»ï¼[{a:12,b:100},{a:13,b:200},...],aï¼å®¢æ·ç¼ç ï¼bï¼ä¸å®¢æ·aä¹é´çè·ç¦»") |
| | | @TableField(exist = false) |
| | | private List<DistanceMapParam> distanceMapParamList; |
| | | |
| | | } |
| | |
| | | private Date dateInfo; |
| | | |
| | | |
| | | @ApiModelProperty(value = "交éè§åæç»ï¼jsonæ°ç»éåï¼", example = "1") |
| | | private String steps; |
| | | @ApiModelProperty(value = "车çå·", example = "1") |
| | | @TableField(exist = false) |
| | | private String carCode; |
| | |
| | | package com.doumee.service.business; |
| | | |
| | | import com.doumee.dao.business.model.JkCustomerNavigation; |
| | | import com.doumee.service.business.third.model.PageData; |
| | | import com.doumee.service.business.third.model.PageWrap; |
| | | import com.doumee.dao.business.model.JkSketchCustomer; |
| | |
| | | * @return List<JkSketchCustomer> |
| | | */ |
| | | List<JkSketchCustomer> findList(JkSketchCustomer jkSketchCustomer); |
| | | |
| | | List<JkCustomerNavigation> allMapList(JkSketchCustomer jkSketchCustomer); |
| | | |
| | | /** |
| | | * å页æ¥è¯¢ |
| | | * |
| | |
| | | * @param jkSketch å®ä½å¯¹è±¡ |
| | | */ |
| | | void delete(JkSketch jkSketch); |
| | | |
| | | void initAyncsJob(); |
| | | /** |
| | | * æ¹é主é®å é¤ |
| | | * |
| | |
| | | void distanceCustomer(Category model ); |
| | | |
| | | Category checkDataValid(JkSketch model); |
| | | |
| | | JkSketch updateSketchLine(JkSketch jkSketch); |
| | | |
| | | void startEditSketchLineAsync(JkSketch model); |
| | | } |
| | |
| | | .set(JkCustomer::getLatitude,jkCustomer.getLatitude()) |
| | | .set(JkCustomer::getLongitude,jkCustomer.getLongitude()) |
| | | .set(JkCustomer::getEditor,jkCustomer.getLoginUserInfo().getId()) |
| | | .set(JkCustomer::getStartDistance,null) |
| | | .set(JkCustomer::getEndDistance,null) |
| | | .set(JkCustomer::getStartSteps,null) |
| | | .set(JkCustomer::getEndSteps,null) |
| | | .set(JkCustomer::getDistanceStatus,Constants.ZERO) |
| | | .set(JkCustomer::getDistance,null) |
| | | .set(JkCustomer::getEditDate,new Date()) |
| | | .eq(JkCustomer::getId,jkCustomer.getId()) |
| | | ); |
| | |
| | | try { |
| | | LambdaQueryWrapper<JkCustomer> queryWrapper = new LambdaQueryWrapper<>(); |
| | | queryWrapper.isNotNull(JkCustomer::getLocation); |
| | | queryWrapper.isNotNull(JkCustomer::getLocation); |
| | | queryWrapper.and(wrapper ->{ |
| | | wrapper.isNull(JkCustomer::getLatitude) |
| | | .or().isNull(JkCustomer::getLongitude); }); |
| | | .or().isNull(JkCustomer::getLongitude) |
| | | .or().eq(JkCustomer::getDistanceStatus,Constants.TWO);}); |
| | | //æ¥è¯¢å
¨é¨æå°åï¼ä½æ¯æ²¡æç»çº¬åº¦ç客æ·ä¿¡æ¯ |
| | | List<JkCustomer> list = jkCustomerMapper.selectList(queryWrapper); |
| | | if(list ==null || list.size()==0){ |
| | |
| | | jkCustomerMapper.update(null,new UpdateWrapper<JkCustomer>().lambda() |
| | | .set(JkCustomer::getLatitude,c.getLatitude()) |
| | | .set(JkCustomer::getLongitude,c.getLongitude()) |
| | | .set(JkCustomer::getStartDistance,null) |
| | | .set(JkCustomer::getEndDistance,null) |
| | | .set(JkCustomer::getStartSteps,null) |
| | | .set(JkCustomer::getEndSteps,null) |
| | | .set(JkCustomer::getDistanceStatus,Constants.ZERO) |
| | | .set(JkCustomer::getDistance,null) |
| | | .set(JkCustomer::getEditDate,new Date()) |
| | | .eq(JkCustomer::getId,c.getId()) |
| | | ); |
| | | } |
| | | }else{ |
| | | log.error("æ´æ°äº¤æ§ä¸å¿å®¢æ·ç»çº¬åº¦ä¿¡æ¯=====è·åjson=========="+json); |
| | | log.error("æ´æ°äº¤æ§ä¸å¿å®¢æ·ç»çº¬åº¦ä¿¡æ¯=====è·å失败=========="+urlStr+c.getName()+"-"+c.getLocation()); |
| | | log.error("æ´æ°äº¤æ§ä¸å¿å®¢æ·ç»çº¬åº¦ä¿¡æ¯=====è·åjson=========="+urlStr+"\n"+c.getName()+"\n"+json); |
| | | } |
| | | }catch (Exception e){ |
| | | log.error("æ´æ°äº¤æ§ä¸å¿å®¢æ·ç»çº¬åº¦ä¿¡æ¯=====失败=========="+c.getName()+"-"+c.getLocation()); |
| | |
| | | tModel.setCreator(loginUserInfo.getId()); |
| | | tModel.setCreateDate(new Date()); |
| | | tModel.setIsnew(Constants.ONE); |
| | | tModel.setDistanceStatus(Constants.TWO);//éè¦éæ°å®ä½ |
| | | tModel.setStatus(Constants.ZERO); |
| | | tModel.setDistanceStatus(Constants.ZERO); |
| | | newList.add(tModel); |
| | | }else{ |
| | | if(StringUtils.isBlank(model.getLocation()) || |
| | | StringUtils.equals(tModel.getLocation().replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5]","") |
| | | ,model.getLocation().replaceAll("[^a-zA-Z0-9\\u4e00-\\u9fa5]",""))){ |
| | | //妿ä½ç½®ä¿¡æ¯åçåå |
| | | tModel.setDistanceStatus(Constants.TWO);//éè¦éæ°å®ä½ |
| | | } |
| | | tModel.setIsnew(Constants.ZERO); |
| | | updateList.add(tModel); |
| | | } |
| | |
| | | package com.doumee.service.business.impl; |
| | | |
| | | import com.alibaba.fastjson.JSONObject; |
| | | import com.doumee.biz.system.SystemDictDataBiz; |
| | | import com.doumee.core.utils.Constants; |
| | | import com.doumee.dao.business.JkCustomerNavigationMapper; |
| | | import com.doumee.dao.business.model.*; |
| | | import com.doumee.service.business.third.model.PageData; |
| | | import com.doumee.service.business.third.model.PageWrap; |
| | |
| | | import org.springframework.stereotype.Service; |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.math.RoundingMode; |
| | | import java.util.ArrayList; |
| | | import java.util.List; |
| | | |
| | | /** |
| | |
| | | public class JkSketchCustomerServiceImpl implements JkSketchCustomerService { |
| | | |
| | | @Autowired |
| | | private SystemDictDataBiz systemDictDataBiz; |
| | | @Autowired |
| | | private JkSketchCustomerMapper jkSketchCustomerMapper; |
| | | @Autowired |
| | | private JkCustomerNavigationMapper jkCustomerNavigationMapper; |
| | | |
| | | @Override |
| | | public Integer create(JkSketchCustomer jkSketchCustomer) { |
| | |
| | | return jkSketchCustomerMapper.selectOne(wrapper); |
| | | } |
| | | |
| | | /** |
| | | * æ¥è¯¢å
¨é¨äº¤éè§å路线 |
| | | * @param jkSketchCustomer |
| | | * @return |
| | | */ |
| | | @Override |
| | | public List<JkCustomerNavigation> allMapList(JkSketchCustomer jkSketchCustomer) { |
| | | List<JkCustomerNavigation> list = new ArrayList<>(); |
| | | MPJLambdaWrapper<JkSketchCustomer> queryWrapper = new MPJLambdaWrapper<>(); |
| | | jkSketchCustomer.setIsdeleted(Constants.ZERO); |
| | | queryWrapper.selectAll(JkSketchCustomer.class ) |
| | | .selectAs(JkCustomer::getName,JkSketchCustomer::getName) |
| | | .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode) |
| | | .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance) |
| | | .selectAs(JkCustomer::getEndDistance,JkSketchCustomer::getEndDistance) |
| | | .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude) |
| | | .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude) |
| | | .selectAs(JkCustomer::getStartSteps,JkSketchCustomer::getStartSteps) |
| | | .selectAs(JkCustomer::getEndSteps,JkSketchCustomer::getEndSteps) |
| | | .selectAs(JkCustomer::getLocation,JkSketchCustomer::getLocation) |
| | | .leftJoin(JkCustomer.class,JkCustomer::getId,JkSketchCustomer::getCustomerId ) ; |
| | | queryWrapper.eq( JkSketchCustomer::getSketchLineId,jkSketchCustomer.getSketchLineId()) |
| | | .eq( JkSketchCustomer::getIsdeleted,Constants.ZERO); |
| | | |
| | | BigDecimal cLatitude =new BigDecimal(0); |
| | | BigDecimal cLongitude =new BigDecimal(0); |
| | | |
| | | String comLocation = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.COMPANY_LOCATION).getCode(); |
| | | try { |
| | | String[] ss = comLocation.split(","); |
| | | cLongitude = new BigDecimal(ss[0]); |
| | | cLatitude = new BigDecimal(ss[1]); |
| | | }catch (Exception e){ |
| | | } |
| | | List<JkSketchCustomer> allList = jkSketchCustomerMapper.selectJoinList(JkSketchCustomer.class,queryWrapper); |
| | | if(allList !=null && allList.size()>0){ |
| | | JkCustomerNavigation startmodel = new JkCustomerNavigation(); |
| | | startmodel.setStartId(-1); |
| | | startmodel.setName("ååº"); |
| | | startmodel.setStartLatitude(cLatitude); |
| | | startmodel.setStartLogitude(cLongitude); |
| | | startmodel.setEndLatitude(allList.get(0).getLatitude()); |
| | | startmodel.setEndLogitude(allList.get(0).getLongitude()); |
| | | startmodel.setDistance(allList.get(0).getStartDistance()); |
| | | startmodel.setSteps(allList.get(0).getStartSteps()); |
| | | if(StringUtils.isBlank(startmodel.getSteps())){ |
| | | startmodel.setSteps(comLocation +";"+allList.get(0).getLongitude()+","+allList.get(0).getLatitude()); |
| | | } |
| | | list.add(startmodel); |
| | | |
| | | for (int i = 0; i < allList.size(); i++) { |
| | | if(allList.size() == i+1){ |
| | | JkCustomerNavigation endmodel = new JkCustomerNavigation(); |
| | | endmodel.setStartId(-1); |
| | | endmodel.setLocation(allList.get(i).getLocation()); |
| | | endmodel.setName(allList.get(i).getName()); |
| | | endmodel.setSteps(allList.get(i).getEndSteps()); |
| | | endmodel.setStartLatitude(allList.get(i).getLatitude()); |
| | | endmodel.setStartLogitude(allList.get(i).getLongitude()); |
| | | endmodel.setDistance(allList.get(0).getEndDistance()); |
| | | endmodel.setEndLatitude(cLatitude); |
| | | endmodel.setEndLogitude(cLongitude); |
| | | if(StringUtils.isBlank(startmodel.getSteps())){ |
| | | startmodel.setSteps(allList.get(i).getLongitude()+","+allList.get(i).getLatitude()+";"+comLocation); |
| | | } |
| | | list.add(endmodel); |
| | | break; |
| | | } |
| | | JkSketchCustomer start = allList.get(i); |
| | | JkSketchCustomer end = allList.get(i+1); |
| | | JkCustomerNavigation tt = jkCustomerNavigationMapper.selectOne(new QueryWrapper<JkCustomerNavigation>().lambda() |
| | | .eq(JkCustomerNavigation::getIsdeleted,Constants.ZERO) |
| | | .eq(JkCustomerNavigation::getIdIndex, allList.get(i).getCustomerId()+"-"+ allList.get(i+1).getCustomerId()) |
| | | .orderByDesc(JkCustomerNavigation::getId) |
| | | .last("limit 1") |
| | | ); |
| | | if(tt==null){ |
| | | //åªæèµ·æ¢ç¹ |
| | | tt = new JkCustomerNavigation(); |
| | | tt.setStartLatitude(start.getLatitude()); |
| | | tt.setStartLogitude(start.getLongitude()); |
| | | tt.setEndLatitude(end.getLatitude()); |
| | | tt.setEndLogitude(end.getLongitude()); |
| | | } |
| | | tt.setLocation(allList.get(i).getLocation()); |
| | | tt.setName(allList.get(i).getName()); |
| | | if(StringUtils.isBlank(tt.getSteps())){ |
| | | tt.setSteps(start.getLongitude()+","+end.getLatitude()+";"+end.getLongitude()+","+end.getLatitude()); |
| | | } |
| | | list.add(tt); |
| | | } |
| | | } |
| | | return list; |
| | | } |
| | | @Override |
| | | public List<JkSketchCustomer> findList(JkSketchCustomer jkSketchCustomer) { |
| | | MPJLambdaWrapper<JkSketchCustomer> queryWrapper = new MPJLambdaWrapper<>(); |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | import org.springframework.web.multipart.MultipartFile; |
| | | |
| | | import javax.annotation.PostConstruct; |
| | | import java.math.BigDecimal; |
| | | import java.util.*; |
| | | import java.util.Date; |
| | |
| | | public void delete(JkSketch jkSketch) { |
| | | UpdateWrapper<JkSketch> deleteWrapper = new UpdateWrapper<>(jkSketch); |
| | | jkSketchMapper.delete(deleteWrapper); |
| | | } |
| | | |
| | | |
| | | @Override |
| | | @PostConstruct |
| | | public void initAyncsJob() { |
| | | //é置交éè§åå线路è§åç弿¥ä»»å¡ç¶æ |
| | | jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda() |
| | | .set(JkSketch::getStatus,Constants.THREE) |
| | | .eq(JkSketch::getIsdeleted,Constants.ZERO) |
| | | .eq(JkSketch::getStatus,Constants.ONE)); |
| | | categoryMapper.update(null,new UpdateWrapper<Category>().lambda() |
| | | .set(Category::getStatus,Constants.ZERO) |
| | | .eq(Category::getType,Constants.FOUR) |
| | | .eq(Category::getIsdeleted,Constants.ZERO) |
| | | .eq(Category::getStatus,Constants.TWO)); |
| | | } |
| | | |
| | | @Override |
| | |
| | | jkSketchMapper.updateById(model); |
| | | return model; |
| | | } |
| | | |
| | | @Override |
| | | public JkSketch updateSketchLine(JkSketch jkSketch) { |
| | | JkSketch model = jkSketchMapper.selectById(jkSketch.getId()); |
| | | if(model == null ||Constants.equalsInteger(model.getIsdeleted(),Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.DATA_EMPTY); |
| | | } |
| | | if( jkSketch.getSketchLineList() ==null || jkSketch.getSketchLineList().size()==0 ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"请æè¦æ±è°æ´ä¼åæ¹æ¡ï¼"); |
| | | } |
| | | if(Constants.equalsInteger(model.getStatus(),Constants.ONE)){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½å线路æ£åå¨ä¼åä»»å¡ï¼è¯·èå¿çå¾
ä¼å宿åè¿è¡è¯¥è°æ´æä½ï¼"); |
| | | } |
| | | |
| | | //å½åææçº¿è·¯(ç¬¦åæ¡ä»¶ççº¿è·¯ï¼ |
| | | List<JkSketchLine> lineList = jkSketchLineMapper.selectJoinList(JkSketchLine.class,new MPJLambdaWrapper<JkSketchLine>() |
| | | .selectAll(JkSketchLine.class ) |
| | | .selectAs(JkLine::getName,JkSketchLine::getLineName) |
| | | .selectAs(JkLine::getMaxOrder,JkSketchLine::getMaxOrder) |
| | | .selectAs(JkLine::getMaxCustomer,JkSketchLine::getMaxCustomer) |
| | | .leftJoin(JkLine.class,JkLine::getId,JkOrders::getLineId ) |
| | | .eq(JkSketchLine::getSketchId,jkSketch.getId()) |
| | | .eq(JkSketchLine::getIsdeleted,Constants.ZERO)); |
| | | if(lineList ==null ||lineList.size() ==0){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"å½åçº¿è·¯ä¸æ»¡è¶³ä¼åæ¹æ¡è°æ´æ¡ä»¶ï¼"); |
| | | } |
| | | for(JkSketchLine line :lineList){ |
| | | JkSketchLine lineParam =getLineParamById(line.getId(),jkSketch.getSketchLineList()); |
| | | if(lineParam == null){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"请åºäºç°æçº¿è·¯è¿è¡æ¹æ¡è°æ´ï¼çº¿è·¯ã"+line.getLineName()+"ã线路é
ç½®ä¸æ£ç¡®ï¼"); |
| | | } |
| | | if(lineParam.getCustomerList() == null || lineParam.getCustomerList().size() == 0 ){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"请åºäºç°æçº¿è·¯è¿è¡æ¹æ¡è°æ´ï¼çº¿è·¯ã"+line.getLineName()+"ã客æ·ä¿¡æ¯ä¸è½ä¸ºç©ºï¼"); |
| | | } |
| | | Integer totalCus = 0; |
| | | BigDecimal totalNum =new BigDecimal(0); |
| | | for(JkSketchCustomer customer :lineParam.getCustomerList()){ |
| | | totalCus += 1;//æ»å®¢æ·é |
| | | totalNum = totalNum.add(Constants.formatBigdecimal(customer.getTotalNum()));//æ»éè´§é |
| | | customer.setSketchLineId(line.getId()); |
| | | } |
| | | if( totalCus > Constants.formatIntegerNum(line.getMaxCustomer()) ){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"线路ã"+line.getLineName()+"ã线路订åå®¢æ·æ°éè¶
è¿äºçº¿è·¯æ»å®¢æ·ééå¶ï¼æ æ³è¿è¡è°æ´ï¼"); |
| | | } |
| | | if( totalNum.doubleValue() > Constants.formatIntegerNum(line.getMaxOrder())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(),"线路ã"+line.getLineName()+"ã订åéè´§éè¶
è¿äºçº¿è·¯æ»éè´§ééå¶ï¼æ æ³è¿è¡è°æ´ï¼"); |
| | | } |
| | | lineParam.setTotalNum(totalNum); |
| | | lineParam.setOrderNum(totalCus); |
| | | } |
| | | model.setSketchLineList(jkSketch.getSketchLineList());//çº¿è·¯ä¿¡æ¯ |
| | | model.setStatus(Constants.ONE); |
| | | model.setEditDate(new Date()); |
| | | model.setEditor(jkSketch.getLoginUserInfo().getId()); |
| | | model.setPlanLineDate(model.getEditDate()); |
| | | model.setPlanLineUserId(jkSketch.getLoginUserInfo().getId()); |
| | | model.setJobId(UUID.randomUUID().toString()); |
| | | redisTemplate.opsForValue().set(Constants.RedisKeys.JKLINE_JOB+model.getJobId(),true );//å弿¥å¤ç |
| | | jkSketchMapper.updateById(model); |
| | | return model; |
| | | } |
| | | |
| | | private JkSketchLine getLineParamById(Integer id, List<JkSketchLine> sketchLineList) { |
| | | for(JkSketchLine line: sketchLineList){ |
| | | if(Constants.equalsInteger(line.getId(),id)){ |
| | | return line; |
| | | } |
| | | } |
| | | return null; |
| | | } |
| | | |
| | | @Override |
| | | public JkSketch initOriginDistance(JkSketch jkSketch ) { |
| | | JkSketch model = jkSketchMapper.selectById(jkSketch.getId()); |
| | |
| | | } |
| | | String errorMsg =""; |
| | | for(JkCustomer c1 : customerList){ |
| | | if(c1.getLatitude()==null || c1.getLongitude() ==null){ |
| | | if(c1.getLatitude()==null || c1.getLongitude() ==null || Constants.equalsInteger(c1.getDistanceStatus(),Constants.TWO)){ |
| | | errorMsg += c.getName()+"-"+c.getName()+" | "; |
| | | } |
| | | } |
| | |
| | | long[] vehicleCapacities1=new long[lineList.size()];//æ¯è¾è½¦çæå¤§è®¢åééå¶ |
| | | long[] demands1 = new long[customerList.size()+1]; //å个ç¹ç订åé |
| | | long[][] distanceMatrix1 = new long[customerList.size()+1][customerList.size()+1]; |
| | | distanceMatrix1[0][0] = 0; |
| | | demands1[0] =0;//åç¹ |
| | | for (int i = 0; i < customerList.size(); i++) { |
| | | List<DistanceMapParam> disList = customerList.get(i).getDistanceMapParamList(); |
| | | distanceMatrix1[0][i] = disList.get(0).getDistance(); |
| | | distanceMatrix1[i][0] = disList.get(disList.size() -1).getDistance(); |
| | | distanceMatrix1[0][i+1] = disList.get(0).getDistance(); |
| | | distanceMatrix1[i+1][0] = disList.get(disList.size() -1).getDistance(); |
| | | demands1[i+1] = Constants.formatBigdecimal( customerList.get(i).getTotalNum()).longValue(); //å个ç¹ç订åé |
| | | for (int j = 0; j< disList.size()-2; j++) { |
| | | for (int j = 0; j < customerList.size(); j++) { |
| | | distanceMatrix1[i+1][j+1] =disList.get(j+1).getDistance() ; |
| | | } |
| | | /* for (int j = 0; j< disList.size()-2; j++) { |
| | | if(j+1 >=10){ |
| | | break; |
| | | } |
| | |
| | | }else{ |
| | | distanceMatrix1[i+1][j+1] = 1l; |
| | | } |
| | | } |
| | | }*/ |
| | | } |
| | | for (int i = 0; i < lineList.size(); i++) { |
| | | vehicleCapacities1[i] = lineList.get(i).getMaxOrder();//æ¯è¾è½¦çæå¤§è®¢åééå¶ |
| | |
| | | } |
| | | |
| | | } |
| | | @Override |
| | | @Async |
| | | public void startEditSketchLineAsync(JkSketch model) { |
| | | boolean success = true; |
| | | int totalDistance = 0; |
| | | List<JkSketchLine> lineList = model.getSketchLineList(); |
| | | try { |
| | | MPJLambdaWrapper<JkSketchCustomer> queryWrapper = new MPJLambdaWrapper<>(); |
| | | queryWrapper.selectAll(JkSketchCustomer.class ) |
| | | .selectAs(JkCustomer::getName,JkSketchCustomer::getName) |
| | | .selectAs(JkCustomer::getCode,JkSketchCustomer::getCode) |
| | | .selectAs(JkCustomer::getDistance,JkSketchCustomer::getDistanceJson) |
| | | .selectAs(JkCustomer::getLongitude,JkSketchCustomer::getLongitude) |
| | | .selectAs(JkCustomer::getLatitude,JkSketchCustomer::getLatitude) |
| | | .selectAs(JkCustomer::getStartDistance,JkSketchCustomer::getStartDistance) |
| | | .selectAs(JkCustomer::getEndDistance,JkSketchCustomer::getEndDistance) |
| | | .leftJoin(JkCustomer.class,JkCustomer::getId,JkSketchCustomer::getCustomerId ) |
| | | .eq(JkSketchCustomer::getSketchId, model.getId()) |
| | | .eq(JkSketchCustomer::getIsdeleted,Constants.ZERO) |
| | | .orderByAsc(JkSketchCustomer::getSortnum); |
| | | List<JkSketchCustomer> customerList = jkSketchCustomerMapper.selectJoinList(JkSketchCustomer.class,queryWrapper); |
| | | if(customerList == null ||customerList.size() ==0){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"该线路客æ·ä¿¡æ¯ä¸ºç©ºï¼ä¸æ»¡è¶³ä¼åæ¡ä»¶ï¼"); |
| | | } |
| | | |
| | | int totalNum = 0; |
| | | for(JkSketchLine line : lineList){ |
| | | //å®å线路客æ·ä¼ååæ° |
| | | List<JkSketchCustomer> customerListParam = line.getCustomerList() ; |
| | | if(customerListParam ==null || customerListParam.size()==0){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | initSketchCustomerListParam(line.getCustomerList(),customerList) ; |
| | | totalNum += customerListParam.size(); |
| | | } |
| | | if(totalNum != Constants.formatIntegerNum(model.getOrderNum())){ |
| | | throw new BusinessException(ResponseStatus.BAD_REQUEST); |
| | | } |
| | | for(JkSketchLine line : lineList){ |
| | | //é个路线ä¼å |
| | | List<JkSketchCustomer> customerListParam = line.getCustomerList() ; |
| | | TspSolver.DataModel dataModel = new TspSolver.DataModel(); |
| | | int vehicleNumber1 = 1;//线路æ°é |
| | | long[] vehicleCapacities1=new long[]{line.getMaxOrder()};//æ¯è¾è½¦çæå¤§è®¢åééå¶ |
| | | long[] demands1 = new long[customerListParam.size()+1]; //å个ç¹ç订åé |
| | | long[][] distanceMatrix1 = new long[customerListParam.size()+1][customerListParam.size()+1]; |
| | | distanceMatrix1[0][0] = 0; |
| | | demands1[0] =0;//åç¹ |
| | | for (int i = 0; i < customerListParam.size(); i++) { |
| | | List<DistanceMapParam> disList = customerListParam.get(i).getDistanceMapParamList(); |
| | | distanceMatrix1[0][i+1] = disList.get(0).getDistance(); |
| | | distanceMatrix1[i+1][0] = disList.get(disList.size() -1).getDistance(); |
| | | demands1[i+1] = Constants.formatBigdecimal( customerListParam.get(i).getTotalNum()).longValue(); //å个ç¹ç订åé |
| | | for (int j = 0; j < customerListParam.size(); j++) { |
| | | distanceMatrix1[i+1][j+1] =disList.get(j+1).getDistance() ; |
| | | } |
| | | |
| | | } |
| | | //æé ä¼åæ°æ®æ¨¡å |
| | | dataModel.initDataInfo(vehicleNumber1,demands1,vehicleCapacities1,distanceMatrix1); |
| | | TspSolver.startSearch(dataModel); |
| | | if(dataModel.getSolutions()==null || dataModel.getSolutions().size()==0){ |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"线路ã"+line.getLineName()+"ãè°æ´å¤±è´¥ ï¼æªè·å¾æä¼äº¤éè§åæ¹æ¡ï¼"); |
| | | } |
| | | TspSolverSolutions so = dataModel.getSolutions().get(0); |
| | | List<Integer> routes = so.getRouteIndex(); |
| | | totalDistance += so.getDistance(); |
| | | if(routes.size() <=2) { |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"线路ã"+line.getLineName()+"ãè°æ´å¤±è´¥ ï¼æªè·å¾æä¼äº¤éè§åæ¹æ¡ï¼"); |
| | | } |
| | | //ææè·¯å¾ |
| | | for (Integer cIndex : routes){ |
| | | if(cIndex ==0){ |
| | | continue; //èµ·å§ç¹ä¸å¤ç |
| | | } |
| | | JkSketchCustomer customer = customerListParam.get(cIndex-1); |
| | | customer.setSortnum(cIndex-1); |
| | | } |
| | | line.setDistance(so.getDistance()); |
| | | } |
| | | |
| | | }catch (Exception e){ |
| | | e.printStackTrace(); |
| | | success =false; |
| | | }finally { |
| | | if(success){ |
| | | List<JkSketchCustomer> allList = new ArrayList<>(); |
| | | for(JkSketchLine line : lineList){ |
| | | allList.addAll(line.getCustomerList()); |
| | | } |
| | | jkSketchLineMapper.updateById(lineList); |
| | | jkSketchCustomerMapper.updateById(allList); |
| | | } |
| | | jkSketchMapper.update(null,new UpdateWrapper<JkSketch>().lambda() |
| | | .eq(JkSketch::getId,model.getId() ) |
| | | .eq(JkSketch::getJobId,model.getJobId() ) |
| | | .set(success,JkSketch::getDistance,totalDistance) |
| | | .set(JkSketch::getPlanLineInfo,success?"æè¿ä¸æ¬¡çº¿è·¯è°æ´æå":"æè¿ä¸æ¬¡çº¿è·¯è°æ´å¤±è´¥ï¼") |
| | | .set(JkSketch::getStatus,success?Constants.TWO:Constants.THREE) |
| | | .set(JkSketch::getPlanLineEndDate,new Date())); |
| | | } |
| | | |
| | | } |
| | | |
| | | private List<JkSketchCustomer> initSketchCustomerListParam(List<JkSketchCustomer> customerList, List<JkSketchCustomer> customerList1) { |
| | | for(JkSketchCustomer param : customerList){ |
| | | for(JkSketchCustomer model : customerList1){ |
| | | if(Constants.equalsInteger(model.getId(),param.getId())){ |
| | | param.setLatitude(model.getLatitude()); |
| | | param.setLongitude(model.getLongitude()); |
| | | param.setStartDistance(model.getStartDistance()); |
| | | param.setEndDistance(model.getEndDistance()); |
| | | param.setDistanceJson(model.getDistanceJson()); |
| | | } |
| | | } |
| | | } |
| | | for(JkSketchCustomer c : customerList){ |
| | | List<DistanceMapParam> tmpList = new ArrayList<>(); |
| | | List<DistanceMapParam> distanceMapParamList = getListFromJsonStr(c.getDistanceJson()); |
| | | DistanceMapParam t0 = new DistanceMapParam(); |
| | | t0.setId(-2);//表示è¿åååº |
| | | t0.setDistance(Constants.formatLongNum(c.getStartDistance()) ); |
| | | tmpList.add(t0); |
| | | for(JkSketchCustomer cm : customerList){ |
| | | //客æ·å客æ·ä¹é´çè·ç¦»ä¿¡æ¯ |
| | | DistanceMapParam t = new DistanceMapParam(); |
| | | t.setId(cm.getCustomerId()); |
| | | t.setDistance(0); |
| | | DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),distanceMapParamList); |
| | | if(param!=null){//妿ä¹åå·²ç»è·åè¿ |
| | | t = param; |
| | | } |
| | | tmpList.add(t); |
| | | } |
| | | DistanceMapParam tt = new DistanceMapParam(); |
| | | tt.setId(-2);//表示è¿åååº |
| | | tt.setDistance(Constants.formatLongNum(c.getEndDistance())); |
| | | tmpList.add(tt); |
| | | c.setDistanceMapParamList(tmpList); |
| | | } |
| | | return customerList; |
| | | } |
| | | |
| | | |
| | | private void initCustomerDistance( List<JkSketchLine> lineList,JkSketch model,boolean updateLineDistance) { |
| | | List<JkSketchCustomer> customerList = model.getCustomerList(); |
| | |
| | | for (JkSketchLine line :lineList){ |
| | | long lineDistance = 0; |
| | | List<JkSketchCustomer> customers = getCustomerListByLineId(line.getId(),customerList); |
| | | int index =0; |
| | | for(JkSketchCustomer c : customers){ |
| | | lineDistance+= Constants.formatLongNum(c.getStartDistance()); |
| | | lineDistance+= Constants.formatLongNum(c.getEndDistance()); |
| | | for(JkSketchCustomer cm : customers){ |
| | | if(index ==0){ |
| | | lineDistance+= Constants.formatLongNum(c.getStartDistance()); |
| | | } |
| | | if(index == customers.size()-1){ |
| | | lineDistance+= Constants.formatLongNum(c.getEndDistance()); |
| | | break; |
| | | } |
| | | DistanceMapParam param = getParamByCustomerIds( customers.get(index+1).getCustomerId(),getListFromJsonStr(c.getDistanceJson())); |
| | | lineDistance += param.getDistance(); |
| | | index++; |
| | | /* for(JkSketchCustomer cm : customers){ |
| | | DistanceMapParam param = getParamByCustomerIds( cm.getCustomerId(),getListFromJsonStr(c.getDistanceJson())); |
| | | lineDistance += param.getDistance(); |
| | | } |
| | | }*/ |
| | | } |
| | | if(updateLineDistance && Constants.equalsInteger(model.getStatus(),Constants.ZERO) ){ |
| | | line.setDistance(lineDistance); |
| | |
| | | if(solutions!=null && solutions.size()>0){ |
| | | for(TspSolverSolutions so : solutions){ |
| | | List<Integer> routes = so.getRouteIndex(); |
| | | totalDistance+= so.getDistance(); |
| | | if(routes.size() <=2) { |
| | | continue;//æ 客æ·çéææè·¯çº¿ |
| | | } |
| | | totalDistance+= so.getDistance(); |
| | | // totalDistance+= so.getDistance(); |
| | | JkLine line =model.getLineList().get(so.getLineIndex()); |
| | | JkSketchLine tModel = new JkSketchLine(); |
| | | tModel.setSketchId(model.getId()); |