Merge remote-tracking branch 'origin/master'
| | |
| | | export function dealJobFinish (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/dealJobFinish', data) |
| | | } |
| | | // æ´æ¢æå°ç» |
| | | export function changPlatformGroup (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/changPlatformGroup', data) |
| | | } |
| | | // æ¢å¤ä½ä¸ |
| | | export function restoreWork (data) { |
| | | return request.post('/visitsAdmin/cloudService/business/platformJob/restoreWork', data) |
| | |
| | | }, |
| | | getCate () { |
| | | fetchList({ |
| | | model: {}, |
| | | model: { type: 1 }, |
| | | capacity: 1000, |
| | | page: 1 |
| | | }).then(res => { |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="æå°ç±»å" prop="type" > |
| | | <el-radio-group v-model="form.type" > |
| | | <el-radio :label="0">æ´æç</el-radio> |
| | | <el-radio :label="1">æ£ä»¶</el-radio> |
| | | </el-radio-group> |
| | | </el-form-item> |
| | | <el-form-item label="广æè®¾å¤ï¼" prop="broadcastIds"> |
| | | <el-select v-model="form.broadcastIds" multiple> |
| | | <el-option v-for="item in broadcastList" :key="item.id" :label="item.name" :value="item.id"> |
| | |
| | | <el-form-item label="LEDç©ºé²ææ¡ï¼" prop="ledContent"> |
| | | <el-input type="text" v-model="form.ledContent" placeholder="请è¾å
¥LEDç©ºé²ææ¡" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¶ä½ä¸æ°éï¼" prop="workingNum"> |
| | | <el-input type="number" v-model="form.workingNum" placeholder="请è¾å
¥åæ¶ä½ä¸æ°é" v-trim /> |
| | | <el-form-item label="åæ¶å«å·æ°éï¼" prop="workingNum"> |
| | | <el-input type="number" v-model="form.workingNum" placeholder="请è¾å
¥åæ¶å«å·æ°é" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¶å夿°éï¼" prop="callReadyNum"> |
| | | <el-input type="number" v-model="form.callReadyNum" placeholder="请è¾å
¥åæ¶å夿°é" v-trim /> |
| | | </el-form-item> |
| | | <el-form-item label="æå°ä½ä¸æç(䏿¯/å°æ¶)ï¼" prop="workRate"> |
| | | <el-input type="number" v-model="form.workRate" placeholder="请è¾å
¥æå°ä½ä¸æç(䏿¯/å°æ¶)" v-trim /> |
| | |
| | | form: { |
| | | id: null, |
| | | ledIds: null, |
| | | type:0, |
| | | broadcastIds: null, |
| | | name: '', |
| | | code: '', |
| | |
| | | startTime: '', |
| | | endTime: '', |
| | | workingNum: 1, |
| | | åæ¶ä½ä¸æ°é: 0, |
| | | ledContent: '', |
| | | workRate: '', |
| | | stayTimeoutAlarmTime: '', |
| | |
| | | }, |
| | | // éªè¯è§å |
| | | rules: { |
| | | workingNum: [{ required: true, validator: numRuleGtZero, message: '请è¾å
¥åæ¶ä½ä¸æ°é,å¿
须大äº0! ', trigger: 'blur' }], |
| | | workingNum: [{ required: true, validator: numRuleGtZero, message: '请è¾å
¥åæ¶å«å·æ°é,å¿
须大äº0! ', trigger: 'blur' }], |
| | | type: [{ required: true, message: 'æå°ç±»åä¸è½ä¸ºç©ºï¼', trigger: 'blur' }], |
| | | sortnum: [{ required: true, message: 'æåºç ä¸è½ä¸ºç©ºï¼', trigger: 'blur' }] |
| | | } |
| | | } |
| | |
| | | |
| | | this.yearList = res.yearList |
| | | |
| | | this.departmentList = res.departmentList.slice(0, 10) |
| | | this.departmentList = res.departmentSortList.slice(0, 10) |
| | | |
| | | this.typeList = res.cateList || [] |
| | | this.deptList = res.departmentList || [] |
| | |
| | | <el-table-column prop="totalNum" label="æ»ä½ä¸éï¼ä¸æ¯ï¼" min-width="130" show-overflow-tooltip /> |
| | | <el-table-column prop="carCodeFront" label="车çåç
§å·" min-width="100" show-overflow-tooltip /> |
| | | <!-- <el-table-column prop="carCodeBack" label="车çåç
§å·" min-width="100" show-overflow-tooltip /> --> |
| | | <el-table-column prop="taskOrigin" label="任塿¥æº" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="origin" label="任塿¥æº" min-width="100" show-overflow-tooltip > |
| | | <template v-slot="scope"> |
| | | <span v-if="scope.row.origin == 1">WMSè·å</span> |
| | | <span v-else>èªå»ºä»»å¡</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="carrierName" label="è¿è¾å
¬å¸" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="driverName" label="叿º" min-width="100" show-overflow-tooltip /> |
| | | <el-table-column prop="drivierPhone" label="叿ºçµè¯" min-width="100" show-overflow-tooltip /> |
| | | <!-- <el-table-column prop="wmsContractNum" label="WMSååå·" min-width="100" show-overflow-tooltip > |
| | | <!-- <el-table-column prop="wmsContractNum" label="WMSååå·" min-width="100" show-overflow-tooltip > |
| | | <template v-slot="scope"> |
| | | <span v-if="scope.row.platformWmsJob">{{ scope.row.platformWmsJob.contractNum }}</span> |
| | | </template> |
| | |
| | | <span v-if="scope.row.type == '2'">å¤å车å¸è´§</span> |
| | | <span v-if="scope.row.type == '3'">å¤å车è£
è´§</span> |
| | | <span v-if="scope.row.type == '4'">å¸å
¬å¸å¤å车å¸è´§</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="platformGroupName" label="ä½ä¸æå°ç»" min-width="150" show-overflow-tooltip > |
| | | <template v-slot="scope"> |
| | | <div style="display: flex;align-items: center;align-content: center;width: 100%"> |
| | | <div style="max-width: 100px;display: inline-block; |
| | | overflow: hidden; |
| | | text-overflow: ellipsis; |
| | | word-wrap: break-word;">{{scope.row.platformGroupName||'-'}}</div> |
| | | <el-button type="text" style="font-size: 10px;color: red;margin-top: 5px;margin-left: 10px " @click="changeGroup(scope.row)" v-if="[0,1,2].includes(scope.row.status)">æ´æ¢</el-button> |
| | | </div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="ioCreatedate" label="å建æ¶é´" min-width="150" show-overflow-tooltip /> |
| | |
| | | <!-- --> |
| | | <!-- --> |
| | | <WaybillDetailRef v-if="isShowDetail" ref="WaybillDetailRef" /> |
| | | <el-dialog append-to-body title="æ´æ¢æå°ç»" style="text-align: center" class="dialogCl" :visible.sync="showChangeGroup" width="480px" top="10%"> |
| | | <div class="head" v-if="showChangeGroup && curRow"> |
| | | <div class="plate" v-if="curRow.carCodeFront"> |
| | | <span>{{ curRow.carCodeFront.slice(0, 1) }}</span> |
| | | <span>{{ curRow.carCodeFront.slice(1, 2) }}</span> |
| | | <span>·</span> |
| | | <span>{{ curRow.carCodeFront.slice(2) }}</span> |
| | | </div> |
| | | <div class="list"> |
| | | <div class="item"> |
| | | <span>è¿è¾åå·ï¼</span> |
| | | <span>{{ curRow.billCode }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span>æ»è¿è¾éï¼</span> |
| | | <span>{{ curRow.totalNum }}䏿¯</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span>驾驶åï¼</span> |
| | | <span>{{ curRow.driverName }} {{ curRow.drivierPhone }}</span> |
| | | </div> |
| | | <div class="item"> |
| | | <span>å½åæå°ç»ï¼</span> |
| | | <span>{{ curRow.platformGroupName }}</span> |
| | | </div> |
| | | </div> |
| | | </div> |
| | | <el-form :model="groupForm" ref="form" > |
| | | <el-form-item label="éæ©æå°ç»" prop="platformGroupId" required> |
| | | <el-select v-model="groupForm.platformGroupId" placeholder="è¯·éæ©æå°åç» "> |
| | | <el-option v-for="item in rowGroupList" :key="item.id" :label="item.name" :value="item.id"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | </el-form> |
| | | <span slot="footer" class="dialog-footer"> |
| | | <el-button @click="showChangeGroup = false">åæ¶</el-button> |
| | | <el-button type="primary" :loading="dealing" @click="changeGroupDo">ç¡®å®</el-button> |
| | | </span> |
| | | </el-dialog> |
| | | </div> |
| | | </template> |
| | | |
| | | <script> |
| | | import Pagination from '@/components/common/Pagination' |
| | | import QueryForm from '@/components/common/QueryForm' |
| | | import { platformJobPage, platformJobExport, platformJobDel, dealJobFinish ,updateTotalNum} from '@/api' |
| | | import { |
| | | platformJobPage, |
| | | platformJobExport, |
| | | platformJobDel, |
| | | dealJobFinish, |
| | | updateTotalNum, |
| | | changPlatformGroup |
| | | } from '@/api' |
| | | import { statusMap } from '../config' |
| | | import WaybillDetailRef from "../components/WaybillDetail.vue" |
| | | import WaybillDetailRef from '../components/WaybillDetail.vue' |
| | | import GlobalWindow from '@/components/common/GlobalWindow' |
| | | import UploadFaceImg from '@/components/common/UploadFaceImg' |
| | | import { Message } from 'element-ui' |
| | | import dayjs from 'dayjs' |
| | | import BaseComputHeight from "@/components/base/BaseComputHeight"; |
| | | import BaseComputHeight from '@/components/base/BaseComputHeight' |
| | | import { allList } from '@/api/platform/platformGroup' |
| | | export default { |
| | | extends: BaseComputHeight, |
| | | components: { |
| | |
| | | GlobalWindow, |
| | | UploadFaceImg |
| | | }, |
| | | data() { |
| | | data () { |
| | | return { |
| | | groupList: [], |
| | | rowGroupList: [], |
| | | dealing:false, |
| | | statusMap, |
| | | curRow:null, |
| | | isShowDetail: false, |
| | | showChangeGroup: false, |
| | | exLoading: false, |
| | | updateLoading: false, |
| | | loading: false, |
| | |
| | | createDateEnd: '' |
| | | }, |
| | | list: [], |
| | | groupForm:{ |
| | | id:null, |
| | | platformGroupId:null, |
| | | platformGroupName:null |
| | | }, |
| | | queryFormConfig: { |
| | | formItems: [ |
| | | { |
| | |
| | | { value: 9, label: 'å·²ææç¦»å' }, |
| | | // { value: 10, label: '已离å' }, |
| | | { value: 11, label: 'å·²è¿å·' }, |
| | | { value: 12, label: '已忶' }, |
| | | { value: 12, label: '已忶' } |
| | | ] |
| | | }, |
| | | { |
| | |
| | | ids: [] |
| | | } |
| | | }, |
| | | created() { |
| | | created () { |
| | | this.changeRadio('0') |
| | | this.$nextTick(() => { |
| | | this.$refs.QueryForm.zkBtn() |
| | | }) |
| | | this.loadGroupList() |
| | | }, |
| | | methods: { |
| | | handleSelectionChange(ids) { |
| | | loadGroupList () { |
| | | allList({}) |
| | | .then(res => { |
| | | this.groupList = res || [] |
| | | }) |
| | | }, |
| | | handleSelectionChange (ids) { |
| | | this.ids = ids.map(item => item.id) |
| | | }, |
| | | complete(ids) { |
| | | var that = this; |
| | | complete (ids) { |
| | | var that = this |
| | | if (ids.length === 0) { |
| | | return this.$message.warning('è³å°éæ©ä¸é¡¹å
容') |
| | | } |
| | |
| | | }) |
| | | }).catch(() => { |
| | | |
| | | }); |
| | | }) |
| | | }, |
| | | changeRadio(day) { |
| | | changeGroupDo () { |
| | | var that = this |
| | | if (!this.groupForm.id || !this.groupForm.platformGroupId) { |
| | | return this.$message.warning('è¯·éæ©æå°ç»') |
| | | } |
| | | changPlatformGroup(this.groupForm) |
| | | .then(res => { |
| | | that.showChangeGroup=false |
| | | that.getList() |
| | | }) |
| | | }, |
| | | changeGroup (row) { |
| | | this.groupForm.id = null |
| | | this.groupForm.platformGroupName = null |
| | | this.groupForm.platformGroupId = null |
| | | this.rowGroupList = [] |
| | | this.curRow=null |
| | | var type = 0 |
| | | if (row.type === 0 || row.type === 2) { |
| | | // 宿³°ç©æµå¸è´§ |
| | | type = 0 |
| | | } else if (row.type === 1 || row.type === 3) { |
| | | // 宿³°ç©æµè£
è´§ |
| | | type = 1 |
| | | } else if (row.type === 4) { |
| | | // å¸å
¬å¸å¤å车å¸è´§ |
| | | type = 2 |
| | | } else { |
| | | return this.$message.warning('ä½ä¸ä»»å¡ç±»åæè¯¯ï¼ä¸æ¯ææå°ç»åæ¢ï¼') |
| | | } |
| | | this.curRow =row |
| | | this.groupForm.id = row.id |
| | | this.groupForm.platformGroupName = row.platformGroupName |
| | | this.groupForm.platformGroupId = row.platformGroupId |
| | | this.groupList.forEach(item => { |
| | | if (item.type === type) { |
| | | this.rowGroupList.push(item) |
| | | } |
| | | }) |
| | | this.showChangeGroup = true |
| | | }, |
| | | changeRadio (day) { |
| | | const arr = [dayjs().subtract(day, 'day').format('YYYY-MM-DD') + ' 00:00:00', dayjs().format('YYYY-MM-DD') + ' 23:59:59'] |
| | | this.filters.createDateStart = arr[0] |
| | | this.filters.createDateEnd = arr[1] |
| | | this.getList(1) |
| | | }, |
| | | changeForm(str) { |
| | | if(this.filters.createDateStart > this.filters.createDateEnd){ |
| | | changeForm (str) { |
| | | if (this.filters.createDateStart > this.filters.createDateEnd) { |
| | | this.filters.createDateStart = this.filters.createDateEnd |
| | | return this.$message.error('å¼å§æ¶é´ä¸è½å¤§äºç»ææ¶é´') |
| | | } |
| | | this.getList() |
| | | }, |
| | | getList(page) { |
| | | getList (page) { |
| | | const { pagination, filters } = this |
| | | this.loading = true |
| | | platformJobPage({ |
| | | model: { |
| | | ...filters, |
| | | jobType: '0' |
| | | }, |
| | | }, |
| | | capacity: pagination.pageSize, |
| | | page: page || pagination.page, |
| | | page: page || pagination.page |
| | | }).then(res => { |
| | | this.loading = false |
| | | this.list = res.records || [] |
| | |
| | | this.loading = false |
| | | }) |
| | | }, |
| | | handleDel(row) { |
| | | handleDel (row) { |
| | | this.$dialog.deleteConfirm('确认å é¤åï¼').then(() => { |
| | | platformJobDel(row.id).then(res => { |
| | | Message.success('å 餿å') |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | handleEx() { |
| | | handleEx () { |
| | | this.$dialog.exportConfirm('确认导åºåï¼') |
| | | .then(() => { |
| | | this.exLoading = true |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | updateTotalNum() { |
| | | this.$dialog.actionConfirm('确认è¿è¡è¯¥æä½åï¼','æä½æç¤º') |
| | | updateTotalNum () { |
| | | this.$dialog.actionConfirm('确认è¿è¡è¯¥æä½åï¼', 'æä½æç¤º') |
| | | .then(() => { |
| | | this.updateLoading = true |
| | | updateTotalNum('') |
| | |
| | | }) |
| | | }) |
| | | }, |
| | | clear() { |
| | | clear () { |
| | | this.pagination.page = 1 |
| | | this.filters = {} |
| | | this.getList(0) |
| | | // this.changeRadio('0') |
| | | }, |
| | | handleDetail(row) { |
| | | handleDetail (row) { |
| | | this.isShowDetail = true |
| | | this.$nextTick(() => { |
| | | this.$refs.WaybillDetailRef.isShowModal = true |
| | |
| | | this.$refs.WaybillDetailRef.getDetail() |
| | | }) |
| | | }, |
| | | handleSizeChange(capacity) { |
| | | handleSizeChange (capacity) { |
| | | this.pagination.pageSize = capacity |
| | | this.getList() |
| | | } |
| | |
| | | color: #000000; |
| | | margin-bottom: 15px; |
| | | } |
| | | .head { |
| | | font-size: 12px; |
| | | color: #282828; |
| | | background: rgba(39, 155, 170, 0.05); |
| | | border-radius: 4px; |
| | | border: 1px solid #dfe2e8; |
| | | padding: 16px; |
| | | margin-bottom: 30px; |
| | | .plate { |
| | | display: flex; |
| | | font-weight: 600; |
| | | height: 30px; |
| | | line-height: 30px; |
| | | font-size: 15px; |
| | | color: #111111; |
| | | background-color: #fff; |
| | | border-radius: 4px; |
| | | border: 1px solid #2080f7; |
| | | padding-right: 4px; |
| | | width:120px; |
| | | span { |
| | | &:nth-of-type(1) { |
| | | background: #2080f7; |
| | | padding: 0 8px; |
| | | color: #fff; |
| | | } |
| | | |
| | | &:nth-of-type(2) { |
| | | padding-left: 4px; |
| | | } |
| | | } |
| | | } |
| | | |
| | | .list { |
| | | display: flex; |
| | | flex-wrap: wrap; |
| | | margin-top: 16px; |
| | | |
| | | .item { |
| | | text-align: justify; |
| | | width: 50%; |
| | | margin-bottom: 8px; |
| | | span { |
| | | &:nth-child(1) { |
| | | color: #666666; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | </style> |
| | |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <el-form-item label="" prop="type"> |
| | | <el-select v-model="searchForm.type" placeholder="è¯·éæ©æå°ç±»å" @change="search" clearable> |
| | | <el-option label="æ´æç" :value="0"></el-option> |
| | | <el-option label="æ£ä»¶" :value="1"></el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <!-- <section> --> |
| | | <el-button type="primary" @click="search">æç´¢</el-button> |
| | | <el-button @click="reset">éç½®</el-button> |
| | |
| | | <el-table-column type="selection" width="55"></el-table-column> |
| | | <el-table-column prop="name" label="æå°åç§°" fixed min-width="100px"></el-table-column> |
| | | <el-table-column prop="code" label="æå°ç¼ç " fixed min-width="100px"></el-table-column> |
| | | <el-table-column prop="type" label="æå°ç±»å" min-width="100px"> |
| | | <template scope="{row}"> |
| | | <span v-if="row.type == 0" class="green">æ´æç</span> |
| | | <span v-else-if="row.type == 1" class="red">æ£ä»¶</span> |
| | | <span v-else class="grey">-</span> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="groupName" label="æå±æå°ç»" fixed min-width="150px"></el-table-column> |
| | | <el-table-column prop="sortnum" label="æåºç " min-width="90px"></el-table-column> |
| | | <el-table-column prop="workingNum" label="åæ¶å«å·è½¦è¾æ°" min-width="120px"></el-table-column> |
| | | <el-table-column prop="workingNum" label="åæ¶å«å·æ°é" min-width="120px"></el-table-column> |
| | | <el-table-column prop="callReadyNum" label="åæ¶å夿°é" min-width="120px"></el-table-column> |
| | | <el-table-column prop="stayTimeoutAlarmTime" label="åçè¶
æ¶æ¥è¦æ¶é´(åéï¼" min-width="180px"> |
| | | <template scope="{row}">{{ row.stayTimeoutAlarmTime ? (row.stayTimeoutAlarmTime) : '-' }}</template> |
| | | </el-table-column> |
| | |
| | | working1: false, |
| | | searchForm: { |
| | | name: '', |
| | | type:null, |
| | | groupId: null |
| | | } |
| | | } |
| | |
| | | </el-table-column> |
| | | <el-table-column |
| | | prop="workingNum" |
| | | label="åæ¶ä½ä¸è½¦è¾æ°" |
| | | label="åæ¶å«å·æ°é" |
| | | min-width="100" |
| | | show-overflow-tooltip |
| | | /> |
| | | <el-table-column |
| | | prop="callReadyNum" |
| | | label="åæ¶å夿°é" |
| | | min-width="100" |
| | | show-overflow-tooltip |
| | | /> |
| | |
| | | format="HH:mm" |
| | | /> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¶ä½ä¸è½¦è¾æ°"> |
| | | <el-form-item label="åæ¶å«å·æ°é"> |
| | | <el-input v-model="param.workingNum" class="w300"></el-input> |
| | | <span class="ml10">个</span> |
| | | </el-form-item> |
| | | <el-form-item label="åæ¶å夿°é"> |
| | | <el-input v-model="param.callReadyNum" class="w300"></el-input> |
| | | <span class="ml10">个</span> |
| | | </el-form-item> |
| | | <el-form-item label="åçè¶
æ¶æ¥è¦æ¶é´"> |
| | | <el-input |
| | | v-model="param.alermTime" |
| | |
| | | }, |
| | | getCate() { |
| | | fetchList({ |
| | | model: {}, |
| | | model: { type: 1 }, |
| | | capacity: 1000, |
| | | page: 1, |
| | | }).then(res => { |
| | |
| | | title: '请è¾å
¥æ
åµè¯´æ',
|
| | | icon: 'none'
|
| | | })
|
| | | if (param.content.length < 10) return uni.showToast({
|
| | | title: 'æ
åµè¯´æä¸å¾å°äº10个å',
|
| | | icon: 'none'
|
| | | })
|
| | | // if (param.content.length < 10) return uni.showToast({
|
| | | // title: 'æ
åµè¯´æä¸å¾å°äº10个å',
|
| | | // icon: 'none'
|
| | | // })
|
| | |
|
| | | DangerCreate({
|
| | | ...param,
|
| | |
| | | <scroll-view scroll-y="true" class="scroll_Y" @scrolltolower="scrolltolower">
|
| | | <view class="main_list">
|
| | | <view class="item" v-for="item,index in list" :key="index">
|
| | | <view class="head">
|
| | | <view class="head"
|
| | | :style="{ backgroundColor: item.orderStatus === 9 ? 'linear-gradient(270deg, #FEFEFF 0%, #FEE1E1 100%)' : 'linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%)' }">
|
| | | <view class="code">{{item.contractNumber}}</view>
|
| | | <view class="status">{{item.orderStatusDesc }}</view>
|
| | | <view :class="item.orderStatus === 9 ? 'error' : 'status'">{{item.orderStatusDesc }}</view>
|
| | | </view>
|
| | | <view class="content">
|
| | | <view class="line">
|
| | |
| | | width: 690rpx;
|
| | | height: 84rpx;
|
| | | margin: 0 -30rpx;
|
| | | background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
|
| | | // background: linear-gradient(270deg, #FEFEFF 0%, #E1F7FE 100%);
|
| | |
|
| | | .code {
|
| | | font-weight: 500;
|
| | |
| | | .status {
|
| | | color: $uni-color-primary;
|
| | | }
|
| | | |
| | | .error {
|
| | | color: #EE3821;
|
| | | }
|
| | | }
|
| | |
|
| | | .content {
|
| | |
| | | </view>
|
| | | <view v-else class="icon_wrap"></view>
|
| | | <view class="text" :class="{placeholder3: k==0 && i== 0}">
|
| | | {{item.orderStatusDes}}
|
| | | <text :style="{ color: item.orderStatus === 9 ? 'red' : '#666666'}">{{item.orderStatusDes}}</text>
|
| | | <text v-if="item.tel">ï¼åè´§ä»åºçµè¯ï¼</text>
|
| | | <template v-if="item.tel">
|
| | | <text v-for="phone,p in item.tel.split(',')" @click="callPhone(phone)" class="primaryColor">{{phone}}<text v-if="p < item.tel.split(',').length - 1">,</text></text>
|
| | |
| | | grid: { |
| | | top: '0%', |
| | | left: '0%', |
| | | right: '%', |
| | | right: '0%', |
| | | bottom: '0%', |
| | | containLabel: true |
| | | }, |
| | |
| | | let minNum = item.min |
| | | let conNum = maxNum |
| | | let acNum = item.obj.value.replaceAll('M', '') |
| | | var data = (((acNum - minNum) / conNum) * 100).toFixed(0) |
| | | var data = 0 |
| | | if (acNum > conNum) { |
| | | data = 100 |
| | | } else{ |
| | | data = ((acNum / conNum) * 100).toFixed(0) |
| | | } |
| | | console.log('data', data) |
| | | |
| | | const option = { |
| | |
| | | setInterval(() => { |
| | | changeData8(1) |
| | | changeData9(1) |
| | | }, 1000 * 5) |
| | | }, 1000 * 10) |
| | | setTimeout(() => { |
| | | loopFn1() |
| | | loopFn2() |
| | |
| | | <div class="safe_left_dian" :style="{ backgroundColor: item.color }"></div> |
| | | <div class="safe_left_name">{{item.name}}</div> |
| | | </div> |
| | | <div class="safe_num" :style="{ color: item.color }">{{item.total}}</div> |
| | | <div class="safe_num" :style="{ color: item.color }">{{item.value}}</div> |
| | | </div> |
| | | <!-- <div class="safe_chat_info_row">--> |
| | | <!-- <div class="safe_left">--> |
| | |
| | | <div class="com_header"> |
| | | <div class="title"> |
| | | <img src="@/assets/images/ic_title@2x.png" class="icon" alt="" /> |
| | | <div>鿣鿿</div> |
| | | <div>æ¬æéæ£éææ</div> |
| | | </div> |
| | | <img src="@/assets/images/task/title@2x.png" class="bg" alt="" /> |
| | | </div> |
| | |
| | | CarList.value = [] |
| | | getEnergyCenterData().then(res => { |
| | | if (res.code == 200) { |
| | | totalCar.value = 0 |
| | | const result = res.data |
| | | data.value = result |
| | | res.data.inParkCarList.forEach(item => { |
| | |
| | | } else if (item.name === 'è´§è¿è½¦è¾') { |
| | | CarList.value.push({ name: 'è´§è¿è½¦è¾', value: item.total, color: '#01ABFE' }) |
| | | } else if (item.name === 'æªç¥è½¦è¾') { |
| | | CarList.value.push({ name: 'æªç¥è½¦è¾', value: item.total, color: '#0028ff' }) |
| | | CarList.value.push({ name: 'æªç¥è½¦è¾', value: item.total, color: '#cccccc' }) |
| | | } |
| | | }) |
| | | nextTick(() => { |
| | |
| | | ADD COLUMN `AUTO_CALL_END_TIME` varchar(100) NULL COMMENT 'èªå¨å«å·æªæ¢æ¶é´ï¼HH:mmï¼' AFTER `AUTO_CALL_START_TIME`; |
| | | |
| | | ALTER TABLE `antaiwuliu`.`platform` |
| | | ADD COLUMN `TYPE` int NULL COMMENT 'ç±»å 0æ´æç 1æ£ä»¶' AFTER `LED_CONTENT`; |
| | | ADD COLUMN `TYPE` int NULL COMMENT 'ç±»å 0æ´æç 1æ£ä»¶' AFTER `LED_CONTENT`, |
| | | ADD COLUMN `CALL_READY_NUM` varchar(100) NULL COMMENT 'åæ¶åå¤ä½ä¸æ°é' AFTER `TYPE`; |
| | | |
| | | |
| | | ALTER TABLE `antaiwuliu`.`platform_job` |
| | | ADD COLUMN `TAG_VIRTUAL` int NULL COMMENT 'æ¯å¦æ è®°èææå°ç» 0å¦ 1æ¯' AFTER `ORIGIN`, |
| | | ADD COLUMN `TAG_VIRTUAL_TIME` datetime NULL COMMENT 'æ è®°èææå°ç»æ¶é´' AFTER `TAG_VIRTUAL`, |
| | | ADD COLUMN `TAG_VIRTUAL_USER` int NULL COMMENT 'æ è®°èææå°ç»äººåç¼ç ' AFTER `TAG_VIRTUAL_TIME`, |
| | | ADD COLUMN `TAG_VIRTUAL` int NULL COMMENT 'æ¯å¦æ´æ¢æå°ç» 0å¦ 1æ¯' AFTER `ORIGIN`, |
| | | ADD COLUMN `TAG_VIRTUAL_TIME` datetime NULL COMMENT 'æ´æ¢æå°ç»æ¶é´' AFTER `TAG_VIRTUAL`, |
| | | ADD COLUMN `TAG_VIRTUAL_USER` int NULL COMMENT 'æ´æ¢æå°ç»äººåç¼ç ' AFTER `TAG_VIRTUAL_TIME`, |
| | | ADD COLUMN `CALL_WAY` int NULL COMMENT 'å«å·æ¹å¼ 0æå¨å«å· 1èªå¨å«å·' AFTER `TAG_VIRTUAL_USER`, |
| | | ADD COLUMN `URGE_TIME` datetime(0) NULL DEFAULT NULL COMMENT 'å æ¥æ¶é´' AFTER `CALL_WAY`, |
| | | ADD COLUMN `URGE_USER` int NULL DEFAULT NULL COMMENT 'å æ¥äººåç¼ç ' AFTER `URGE_TIME`; |
| | |
| | | <type>pom</type> |
| | | <scope>import</scope> |
| | | </dependency>--> |
| | | <dependency> |
| | | <groupId>com.google.ortools</groupId> |
| | | <artifactId>ortools-java</artifactId> |
| | | <version>9.14.6206</version> |
| | | </dependency> |
| | | |
| | | </dependencies> |
| | | </project> |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.utils; |
| | | |
| | | import java.util.HashMap; |
| | | import java.util.LinkedList; |
| | | import java.util.Queue; |
| | | |
| | | public class DijkstraUtil { |
| | | private Queue visited; |
| | | int[] distance; |
| | | |
| | | public DijkstraUtil(int len) { |
| | | // TODO Auto-generated constructor stub |
| | | visited = new LinkedList(); |
| | | distance = new int[len]; |
| | | |
| | | } |
| | | |
| | | private int getIndex(Queue q, int[] dis) { |
| | | int k = -1; |
| | | int min_num = Integer.MAX_VALUE; |
| | | for (int i = 0; i < dis.length; i++) { |
| | | if (!q.contains(i)) { |
| | | if (dis[i] < min_num) { |
| | | min_num = dis[i]; |
| | | k = i; |
| | | } |
| | | } |
| | | } |
| | | return k; |
| | | } |
| | | |
| | | public void dijkstra(int[][] weight, Object[] str, int v) { |
| | | HashMap path; |
| | | path = new HashMap(); |
| | | for (int i = 0; i < str.length; i++) |
| | | path.put(i, ""); |
| | | |
| | | //åå§åè·¯å¾é¿åº¦æ°ç»distance |
| | | for (int i = 0; i < str.length; i++) { |
| | | path.put(i, path.get(i) + "" + str[v]); |
| | | if (i == v) |
| | | distance[i] = 0; |
| | | else if (weight[v][i] != -1) { |
| | | distance[i] = weight[v][i]; |
| | | path.put(i, path.get(i) + "-->" + str[i]); |
| | | } else |
| | | distance[i] = Integer.MAX_VALUE; |
| | | } |
| | | visited.add(v); |
| | | while (visited.size() < str.length) { |
| | | int k = getIndex(visited, distance);//è·åæªè®¿é®ç¹ä¸è·ç¦»æºç¹æè¿çç¹ |
| | | visited.add(k); |
| | | if (k != -1) { |
| | | |
| | | for (int j = 0; j < str.length; j++) { |
| | | //夿kç¹è½å¤ç´æ¥å°è¾¾çç¹ |
| | | if (weight[k][j] != -1) { |
| | | //éè¿éååç¹ï¼æ¯è¾æ¯å¦ææ¯å½åæ´ççè·¯å¾ï¼æçè¯ï¼åæ´æ°distanceï¼å¹¶æ´æ°pathã |
| | | if (distance[j] > distance[k] + weight[k][j]) { |
| | | distance[j] = distance[k] + weight[k][j]; |
| | | path.put(j, path.get(k) + "-->" + str[j]); |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | } |
| | | for (int h = 0; h < str.length; h++) { |
| | | System.out.printf(str[v] + "-->" + str[h] + ":" + distance[h] + " "); |
| | | if (distance[h] == Integer.MAX_VALUE) |
| | | System.out.print(str[v] + "-->" + str[h] + "ä¹é´æ²¡æå¯éè¡è·¯å¾"); |
| | | else |
| | | System.out.print(str[v] + "-" + str[h] + "ä¹é´ææçè·¯å¾ï¼å
·ä½è·¯å¾ä¸ºï¼" + path.get(h).toString()); |
| | | System.out.println(); |
| | | } |
| | | visited.clear(); |
| | | |
| | | } |
| | | |
| | | public static void main(String[] args) { |
| | | // TODO Auto-generated method stub |
| | | /* int[][] weight = { |
| | | {0, 10, 12, -1, -1, -1}, |
| | | {-1, 0, -1, 16, 25, -1}, |
| | | {4, 3, 0, 12, -1, 8}, |
| | | {-1, -1, -1, 0, 7, -1}, |
| | | {-1, -1, -1, -1, 0, -1}, |
| | | {-1, -1, -1, 2, -1, 0}}; |
| | | String[] str = {"V1", "V2", "V3", "V4", "V5", "V6"}; |
| | | int len = str.length; |
| | | DijkstraUtil dijkstra = new DijkstraUtil(len); |
| | | //便¬¡è®©åç¹å½æºç¹ï¼å¹¶è°ç¨dijkstra彿° |
| | | for (int i = 0; i < str.length; i++) { |
| | | dijkstra.dijkstra(weight, str, i); |
| | | }*/ |
| | | |
| | | int[][] weight = { |
| | | {0, 10, 5, 7, -1}, |
| | | {-1, 0, 4, 5, 10}, |
| | | {-1, 4, 0, 6, 5}, |
| | | {-1, 5, 6, 0, 7}, |
| | | {-1, -1, -1, -1, 0}}; |
| | | String[] str = {"A", "B", "C", "D", "E"}; |
| | | DijkstraUtil dijkstra = new DijkstraUtil(str.length); |
| | | dijkstra.dijkstra(weight, str, 0); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.utils; |
| | | |
| | | import java.util.*; |
| | | |
| | | /** |
| | | * æçè·¯å¾âDijkstraç®æ³åFloydç®æ³ |
| | | * Dijkstra(è¿ªæ°æ¯ç¹æ)ç®æ³æ¯å
¸åçåæºæçè·¯å¾ç®æ³ï¼ç¨äºè®¡ç®ä¸ä¸ªèç¹å°å
¶ä»ææèç¹çæçè·¯å¾ã主è¦ç¹ç¹æ¯ä»¥èµ·å§ç¹ä¸ºä¸å¿åå¤å±å±æ©å±ï¼ç´å°æ©å±å°ç»ç¹ä¸ºæ¢ãDijkstraç®æ³æ¯å¾æä»£è¡¨æ§çæçè·¯å¾ç®æ³ï¼å¨å¾å¤ä¸ä¸è¯¾ç¨ä¸é½ä½ä¸ºåºæ¬å
容æè¯¦ç»çä»ç»ï¼å¦æ°æ®ç»æï¼å¾è®ºï¼è¿ç¹å¦ççãæ³¨æè¯¥ç®æ³è¦æ±å¾ä¸ä¸åå¨è´æè¾¹ã |
| | | * |
| | | * é®é¢æè¿°ï¼å¨æ åå¾ G=(V,E) ä¸ï¼åè®¾æ¯æ¡è¾¹ E[i] çé¿åº¦ä¸º w[i]ï¼æ¾å°ç±é¡¶ç¹ V0 å°å
¶ä½åç¹çæçè·¯å¾ãï¼åæºæçè·¯å¾ï¼ |
| | | */ |
| | | |
| | | public class GraphByMatrix { |
| | | public static final boolean UNDIRECTED_GRAPH = false;//æ å徿 å¿ |
| | | public static final boolean DIRECTED_GRAPH = true;//æå徿 å¿ |
| | | |
| | | public static final boolean ADJACENCY_MATRIX = true;//黿¥ç©éµå®ç° |
| | | public static final boolean ADJACENCY_LIST = false;//黿¥è¡¨å®ç° |
| | | |
| | | public static final int MAX_VALUE = Integer.MAX_VALUE; |
| | | private boolean graphType; |
| | | private boolean method; |
| | | private int vertexSize; |
| | | private int matrixMaxVertex; |
| | | |
| | | //å卿æé¡¶ç¹ä¿¡æ¯çä¸ç»´æ°ç» |
| | | private Object[] vertexesArray; |
| | | //åå¨å¾ä¸é¡¶ç¹ä¹é´å
³èå
³ç³»çäºç»´æ°ç»,åè¾¹çå
³ç³» |
| | | private int[][] edgesMatrix; |
| | | |
| | | // è®°å½ç¬¬i个èç¹æ¯å¦è¢«è®¿é®è¿ |
| | | private boolean[] visited; |
| | | |
| | | /** |
| | | * @param graphType å¾çç±»åï¼æåå¾/æ åå¾ |
| | | * @param method å¾çå®ç°æ¹å¼ï¼é»æ¥ç©éµ/黿¥è¡¨ |
| | | */ |
| | | public GraphByMatrix(boolean graphType, boolean method, int size) { |
| | | this.graphType = graphType; |
| | | this.method = method; |
| | | this.vertexSize = 0; |
| | | this.matrixMaxVertex = size; |
| | | |
| | | if (this.method) { |
| | | visited = new boolean[matrixMaxVertex]; |
| | | vertexesArray = new Object[matrixMaxVertex]; |
| | | edgesMatrix = new int[matrixMaxVertex][matrixMaxVertex]; |
| | | |
| | | //对æ°ç»è¿è¡åå§åï¼é¡¶ç¹é´æ²¡æè¾¹å
³èçå¼ä¸ºIntegerç±»åçæå¤§å¼ |
| | | for (int row = 0; row < edgesMatrix.length; row++) { |
| | | for (int column = 0; column < edgesMatrix.length; column++) { |
| | | edgesMatrix[row][column] = MAX_VALUE; |
| | | } |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | /********************æçè·¯å¾****************************/ |
| | | //计ç®ä¸ä¸ªé¡¶ç¹å°å
¶å®ä¸ä¸ªé¡¶ç¹çæçè·ç¦» |
| | | public void Dijkstra(Object obj) throws Exception { |
| | | Dijkstra(getVertexIndex(obj)); |
| | | } |
| | | public void Dijkstra(int v0) { |
| | | int[] dist = new int[matrixMaxVertex]; |
| | | int[] prev = new int[matrixMaxVertex]; |
| | | |
| | | //åå§åvisitedãdiståpath |
| | | for (int i = 0; i < vertexSize; i++) { |
| | | //ä¸å¼å§åå®åç´è¾¾è·¯å¾æç |
| | | dist[i] = edgesMatrix[v0][i]; |
| | | visited[i] = false; |
| | | |
| | | //ç´è¾¾æ
åµä¸çæåç»ç±ç¹å°±æ¯åºåç¹ |
| | | if (i != v0 && dist[i] < MAX_VALUE) |
| | | prev[i] = v0; |
| | | else |
| | | prev[i] = -1; //æ ç´è¾¾è·¯å¾ |
| | | } |
| | | |
| | | //åå§æ¶æºç¹v0âvisitedéï¼è¡¨ç¤ºv0 å°v0çæçè·¯å¾å·²ç»æ¾å° |
| | | visited[v0] = true; |
| | | |
| | | // 䏿¥å设ç»ç±ä¸ä¸ªç¹ä¸è½¬å°è¾¾å
¶ä½åç¹,ä¼è¿äº,éªè¯ä¹ |
| | | // åå设ç»ç±ä¸¤ä¸ªç¹ä¸è½¬,伿´è¿äº,éªè¯ä¹,..... |
| | | // ç´å°ç©·ä¸¾å®ææå¯è½çä¸è½¬ç¹ |
| | | int minDist; |
| | | int v = 0; |
| | | for (int i = 1; i < vertexSize; i++) { |
| | | //æä¸ä¸ªè·ç¦»æè¿ç»ç±ç¹,䏿 è£
å
¥ v |
| | | minDist = MAX_VALUE; |
| | | |
| | | for (int j = 0; j < vertexSize; j++) { |
| | | if ((!visited[j]) && dist[j] < minDist) { |
| | | v = j; // ç»ç±é¡¶ç¹jä¸è½¬åè·ç¦»æ´ç |
| | | minDist = dist[j]; |
| | | } |
| | | } |
| | | visited[v] = true; |
| | | |
| | | /*é¡¶ç¹vå¹¶å
¥Sï¼ç±v0å°è¾¾vé¡¶ç¹çæçè·¯å¾ä¸ºmin. |
| | | åå®ç±v0å°vï¼åç±vç´è¾¾å
¶ä½åç¹ï¼æ´æ°å½åæåä¸ä¸ªç»ç±ç¹åè·ç¦»*/ |
| | | for (int j = 0; j < vertexSize; j++) { |
| | | if ((!visited[j]) && edgesMatrix[v][j] < MAX_VALUE) { |
| | | |
| | | if (minDist + edgesMatrix[v][j] <= dist[j]) { |
| | | //妿å¤ç»ç±ä¸ä¸ªvç¹å°è¾¾jç¹ç æçè·¯å¾åèè¦ç,å°±æ´æ° |
| | | dist[j] = minDist + edgesMatrix[v][j]; |
| | | |
| | | prev[j] = v; //ç»ç±ç¹çåºå· |
| | | } |
| | | |
| | | } |
| | | } |
| | | |
| | | } |
| | | |
| | | for (int i = 1; i < matrixMaxVertex; i++) { |
| | | System.out.println("**" + vertexesArray[v0] + "-->" +vertexesArray[i] + " çæçè·¯å¾æ¯ï¼" + dist[i]); |
| | | } |
| | | } |
| | | |
| | | //è·åé¡¶ç¹å¼å¨æ°ç»é对åºçç´¢å¼ |
| | | private int getVertexIndex(Object obj) throws Exception { |
| | | int index = -1; |
| | | for (int i = 0; i < vertexSize; i++) { |
| | | if (vertexesArray[i].equals(obj)) { |
| | | index = i; |
| | | break; |
| | | } |
| | | } |
| | | if (index == -1) { |
| | | throw new Exception("没æè¿ä¸ªå¼ï¼"); |
| | | } |
| | | |
| | | return index; |
| | | } |
| | | |
| | | /** |
| | | * åæºæçè·¯å¾ç®æ³ï¼ç¨äºè®¡ç®ä¸ä¸ªèç¹å°å
¶ä»!!ææèç¹!!çæçè·¯å¾ |
| | | */ |
| | | public void Dijkstra2(int v0) { |
| | | // LinkedListå®ç°äºQueueæ¥å£ FIFO |
| | | Queue<Integer> queue = new LinkedList<>(); |
| | | for (int i = 0; i < vertexSize; i++) { |
| | | visited[i] = false; |
| | | } |
| | | List<Map<String,Object>> result = new ArrayList<>(); |
| | | //è¿ä¸ªå¾ªç¯æ¯ä¸ºäºç¡®ä¿æ¯ä¸ªé¡¶ç¹é½è¢«éåå° |
| | | int lastRow =0; |
| | | for (int i = 0; i < vertexSize; i++) { |
| | | if (!visited[i]) { |
| | | queue.add(i); |
| | | visited[i] = true; |
| | | while (!queue.isEmpty()) { |
| | | int row = queue.remove(); |
| | | Map<String,Object> map = new HashMap<>(); |
| | | map.put("name", vertexesArray[row]); |
| | | map.put("row", row); |
| | | int tempDis =0; |
| | | if(row>0){ |
| | | tempDis = edgesMatrix[lastRow][row]; |
| | | lastRow =row; |
| | | } |
| | | map.put("dis", tempDis); |
| | | result.add(map); |
| | | System.out.print(vertexesArray[row] + "-->"); |
| | | for (int k = getMin(row); k >= 0; k = getMin(row)) { |
| | | if (!visited[k]) { |
| | | queue.add(k); |
| | | visited[k] = true; |
| | | } |
| | | } |
| | | } |
| | | } |
| | | } |
| | | System.out.println(""); |
| | | int totalDis =0; |
| | | for(Map<String,Object> c :result){ |
| | | totalDis += (Integer) c.get("dis"); |
| | | System.out.print( c.get("name") + "--"+c.get("dis")+"-->"); |
| | | } |
| | | System.out.println(""); |
| | | System.out.println("æçè·ç¦»"+totalDis); |
| | | } |
| | | |
| | | private int getMin( int row) { |
| | | int minDist = MAX_VALUE; |
| | | int index = 0; |
| | | for (int j = 0; j < vertexSize; j++) { |
| | | if ((!visited[j]) && edgesMatrix[row][j] < minDist) { |
| | | minDist = edgesMatrix[row][j]; |
| | | index = j; |
| | | } |
| | | } |
| | | if (index == 0) { |
| | | return -1; |
| | | } |
| | | return index; |
| | | } |
| | | |
| | | public boolean addVertex(Object val) { |
| | | assert (val != null); |
| | | vertexesArray[vertexSize] = val; |
| | | vertexSize++; |
| | | return true; |
| | | } |
| | | |
| | | public boolean addEdge(int vnum1, int vnum2, int weight) { |
| | | assert (vnum1 >= 0 && vnum2 >= 0 && vnum1 != vnum2 && weight >= 0); |
| | | |
| | | //æåå¾ |
| | | if (graphType) { |
| | | edgesMatrix[vnum1][vnum2] = weight; |
| | | |
| | | } else { |
| | | edgesMatrix[vnum1][vnum2] = weight; |
| | | edgesMatrix[vnum2][vnum1] = weight; |
| | | } |
| | | |
| | | return true; |
| | | } |
| | | |
| | | public static void main(String[] args) throws Exception { |
| | | GraphByMatrix graph = new GraphByMatrix(GraphByMatrix.DIRECTED_GRAPH, GraphByMatrix.ADJACENCY_MATRIX, 9); |
| | | |
| | | graph.addVertex("A");//0 |
| | | graph.addVertex("B");//1 |
| | | graph.addVertex("C");//2 |
| | | graph.addVertex("D");//3 |
| | | graph.addVertex("E");//4 |
| | | |
| | | //A->BãCãD |
| | | graph.addEdge(0, 1,10); |
| | | graph.addEdge(0, 2,5); |
| | | graph.addEdge(0, 3,7); |
| | | //B->CãDãE |
| | | graph.addEdge(1, 2,4); |
| | | graph.addEdge(1, 3,5); |
| | | graph.addEdge(1, 4,10); |
| | | //C->BãDãE |
| | | graph.addEdge(2, 1,4); |
| | | graph.addEdge(2, 3,6); |
| | | graph.addEdge(2, 4,5); |
| | | //D->BãCãE |
| | | graph.addEdge(3, 1,5); |
| | | graph.addEdge(3, 2,6); |
| | | graph.addEdge(3, 4,7); |
| | | |
| | | |
| | | graph.Dijkstra(0); |
| | | System.out.println(); |
| | | graph.Dijkstra("C"); |
| | | System.out.println(); |
| | | graph.Dijkstra2(0); |
| | | System.out.println(); |
| | | } |
| | | |
| | | } |
¶Ô±ÈÐÂÎļþ |
| | |
| | | package com.doumee.core.utils; |
| | | |
| | | import com.google.ortools.Loader; |
| | | import com.google.ortools.constraintsolver.*; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | |
| | | @Slf4j |
| | | public class TspSolver { |
| | | public static void main(String[] args) throws Exception { |
| | | // åå§åæ°æ®æ¨¡å |
| | | Loader.loadNativeLibraries(); |
| | | DataModel data = new DataModel(); |
| | | data.initDataList();//æé æ°æ® |
| | | |
| | | long start =System.currentTimeMillis(); |
| | | System.out.println("=============start=========="+start); |
| | | //å建æ±è§£å¨manager对象ï¼åå§åæ±è§£å¨æ°æ® |
| | | RoutingIndexManager manager = new RoutingIndexManager(data.distanceMatrix.length, data.vehicleNumber, data.depot); |
| | | |
| | | // åå§åæ±è§£å¨ |
| | | RoutingModel routing = new RoutingModel(manager); |
| | | |
| | | // // 注ååè°å½æ° |
| | | final int transitCallbackIndex = |
| | | routing.registerTransitCallback((long fromIndex, long toIndex) -> { |
| | | int fromNode = manager.indexToNode(fromIndex); |
| | | int toNode = manager.indexToNode(toIndex); |
| | | return data.distanceMatrix[fromNode][toNode]; |
| | | }); |
| | | |
| | | // å®ä¹åè°å½æ°è³æ¯æ¡è·¯çº¿ |
| | | routing.setArcCostEvaluatorOfAllVehicles(transitCallbackIndex); |
| | | // å¢å è·ç¦»ç»´åº¦çº¦æ |
| | | routing.addDimension(transitCallbackIndex, 0, 30000, |
| | | true, |
| | | "Distance"); |
| | | RoutingDimension distanceDimension = routing.getMutableDimension("Distance"); |
| | | distanceDimension.setGlobalSpanCostCoefficient(100); |
| | | // // æ·»å 容ééå¶ |
| | | final int demandCallbackIndex = routing.registerUnaryTransitCallback((long fromIndex) -> { |
| | | int fromNode = manager.indexToNode(fromIndex); |
| | | return data.demands[fromNode]; |
| | | }); |
| | | routing.addDimensionWithVehicleCapacity(demandCallbackIndex, 0, data.vehicleCapacities, true, "Capacity"); |
| | | |
| | | Solver solver = routing.solver(); |
| | | |
| | | |
| | | //设置æç´¢æ¹æ³ |
| | | RoutingSearchParameters searchParameters = |
| | | main.defaultRoutingSearchParameters() |
| | | .toBuilder() |
| | | .setFirstSolutionStrategy(FirstSolutionStrategy.Value.PATH_CHEAPEST_ARC) |
| | | .build(); |
| | | |
| | | // æ§è¡ç®æ³ |
| | | Assignment solution = routing.solveWithParameters(searchParameters); |
| | | |
| | | // æå°è·¯çº¿ |
| | | printSolution(data, routing, manager, solution); |
| | | long end =System.currentTimeMillis(); |
| | | System.out.println("=============end=========="+end); |
| | | |
| | | System.out.println("=============èæ¶=========="+(end -start)+"ï¼msï¼"+(end -start)/1000 +"s"+(end -start)/60/1000 +"m"); |
| | | } |
| | | |
| | | static void printSolution( |
| | | DataModel data, RoutingModel routing, RoutingIndexManager manager, Assignment solution) { |
| | | long maxRouteDistance = 0; |
| | | for (int i = 0; i < data.vehicleNumber; ++i) { |
| | | long index = routing.start(i); |
| | | log.info("Route for Vehicle " + i + ":"); |
| | | long routeDistance = 0; |
| | | int routeDemand = 0; |
| | | String route = ""; |
| | | while (!routing.isEnd(index)) { |
| | | route += manager.indexToNode(index) + " -> "; |
| | | routeDemand += data.demands[manager.indexToNode(index)]; |
| | | long previousIndex = index; |
| | | index = solution.value(routing.nextVar(index)); |
| | | routeDistance += routing.getArcCostForVehicle(previousIndex, index, i); |
| | | } |
| | | log.info(route + manager.indexToNode(index)); |
| | | log.info("Distance of the route: " + routeDistance + "m"+" Capacity of the route:"+routeDemand+"/"+data.vehicleCapacities[i]); |
| | | maxRouteDistance = Math.max(routeDistance, maxRouteDistance); |
| | | } |
| | | log.info("Maximum of the route distances: " + maxRouteDistance + "m"); |
| | | } |
| | | |
| | | static class DataModel { |
| | | //è·ç¦»ç©éµ |
| | | public int lenght; |
| | | //æå¤§è½¦è¾éå¶ |
| | | public int vehicleNumber; |
| | | //èµ·ç¹ |
| | | public static final int depot = 0; |
| | | |
| | | //æ¯ä¸ä¸ªç¹çååçæ°é |
| | | public long[] demands; |
| | | //è½¦è¾æå¤§å®¹è½½ |
| | | public long[] vehicleCapacities ; |
| | | public long[][] distanceMatrix ; |
| | | public void initDataList(){ |
| | | lenght = 500; |
| | | vehicleNumber = 8; |
| | | demands = new long[lenght]; |
| | | vehicleCapacities =new long[vehicleNumber]; |
| | | distanceMatrix = new long[lenght][lenght]; |
| | | int total0 =0; |
| | | for (int i = 0; i <vehicleNumber ; i++) { |
| | | long tem = (long) (Math.random() * 1000 + 20000); |
| | | vehicleCapacities[i] = tem; |
| | | total0+=tem; |
| | | System.out.print(tem+" ,"); |
| | | } |
| | | System.out.println( "\ntotal Capacity:"+total0+"====================="); |
| | | long total = 0; |
| | | for (int i = 0; i <lenght ; i++) { |
| | | long tem = (int)(Math.random()*100+100); |
| | | demands[i] =tem; |
| | | total+=tem; |
| | | System.out.print(tem+" ,"); |
| | | for (int j = 0; j <lenght ; j++) { |
| | | if(i == j){ |
| | | distanceMatrix[i][j] =0; |
| | | } |
| | | if(i<j){ |
| | | distanceMatrix[i][j] =(int)(Math.random()*1000+1); |
| | | distanceMatrix[j][i] = distanceMatrix[i][j]; |
| | | } |
| | | } |
| | | } |
| | | |
| | | System.out.println( "\ntotal Demands:"+total+"====================="); |
| | | } |
| | | /* public final long[][] distanceMatrix = { |
| | | {0, 548, 776, 696, 582, 274, 502, 194, 308, 194, 536, 502, 388, 354, 468, 776, 662}, |
| | | {548, 0, 684, 308, 194, 502, 730, 354, 696, 742, 1084, 594, 480, 674, 1016, 868, 1210}, |
| | | {776, 684, 0, 992, 878, 502, 274, 810, 468, 742, 400, 1278, 1164, 1130, 788, 1552, 754}, |
| | | {696, 308, 992, 0, 114, 650, 878, 502, 844, 890, 1232, 514, 628, 822, 1164, 560, 1358}, |
| | | {582, 194, 878, 114, 0, 536, 764, 388, 730, 776, 1118, 400, 514, 708, 1050, 674, 1244}, |
| | | {274, 502, 502, 650, 536, 0, 228, 308, 194, 240, 582, 776, 662, 628, 514, 1050, 708}, |
| | | {502, 730, 274, 878, 764, 228, 0, 536, 194, 468, 354, 1004, 890, 856, 514, 1278, 480}, |
| | | {194, 354, 810, 502, 388, 308, 536, 0, 342, 388, 730, 468, 354, 320, 662, 742, 856}, |
| | | {308, 696, 468, 844, 730, 194, 194, 342, 0, 274, 388, 810, 696, 662, 320, 1084, 514}, |
| | | {194, 742, 742, 890, 776, 240, 468, 388, 274, 0, 342, 536, 422, 388, 274, 810, 468}, |
| | | {536, 1084, 400, 1232, 1118, 582, 354, 730, 388, 342, 0, 878, 764, 730, 388, 1152, 354}, |
| | | {502, 594, 1278, 514, 400, 776, 1004, 468, 810, 536, 878, 0, 114, 308, 650, 274, 844}, |
| | | {388, 480, 1164, 628, 514, 662, 890, 354, 696, 422, 764, 114, 0, 194, 536, 388, 730}, |
| | | {354, 674, 1130, 822, 708, 628, 856, 320, 662, 388, 730, 308, 194, 0, 342, 422, 536}, |
| | | {468, 1016, 788, 1164, 1050, 514, 514, 662, 320, 274, 388, 650, 536, 342, 0, 764, 194}, |
| | | {776, 868, 1552, 560, 674, 1050, 1278, 742, 1084, 810, 1152, 274, 388, 422, 764, 0, 798}, |
| | | {662, 1210, 754, 1358, 1244, 708, 480, 856, 514, 468, 354, 844, 730, 536, 194, 798, 0}, |
| | | };*/ |
| | | |
| | | } |
| | | |
| | | } |
| | |
| | | @ExcelColumn(name="å·¥ä½ç»ææ¶é´") |
| | | private String endTime; |
| | | |
| | | @ApiModelProperty(value = "åæ¶ä½ä¸æ°é", example = "1") |
| | | @ExcelColumn(name="åæ¶ä½ä¸æ°é") |
| | | @ApiModelProperty(value = "åæ¶å«å·æ°é", example = "1") |
| | | @ExcelColumn(name="åæ¶å«å·æ°é") |
| | | private Integer workingNum; |
| | | @ApiModelProperty(value = "åæ¶åå¤ä½ä¸æ°é", example = "1") |
| | | @ExcelColumn(name="åæ¶åå¤ä½ä¸æ°é") |
| | | @ApiModelProperty(value = "åæ¶åå¤å«å·æ°é", example = "1") |
| | | @ExcelColumn(name="åæ¶åå¤å«å·æ°é") |
| | | private Integer callReadyNum; |
| | | |
| | | @ApiModelProperty(value = "ä½ä¸è¶
æ¶æ¥è¦æ¶é´(ç§ï¼", example = "1") |
| | |
| | | private Integer creator; |
| | | |
| | | @ApiModelProperty(value = "å建æ¶é´") |
| | | @ExcelColumn(name="å建æ¶é´",index = 12, dateFormat = "yyyy-MM-dd hh:mm:ss",width = 10) |
| | | // @ExcelColumn(name="å建æ¶é´",index = 13, dateFormat = "yyyy-MM-dd hh:mm:ss",width = 10) |
| | | private Date createDate; |
| | | |
| | | @ApiModelProperty(value = "æ´æ°äººç¼ç ", example = "1") |
| | |
| | | @ApiModelProperty(value = "æ¯å¦å é¤0å¦ 1æ¯", example = "1") |
| | | private Integer isdeleted; |
| | | @ApiModelProperty(value = "ä½ä¸æ¥æºï¼0èªå»º 1wmsæ¨é", example = "1") |
| | | @ExcelColumn(name="ç¶æ",index =3,width = 6, valueMapping = "0=èªå»ºä½ä¸;1=WMSè·å;") |
| | | private Integer origin; |
| | | |
| | | @ApiModelProperty(value = "åç§°") |
| | |
| | | private String remark; |
| | | |
| | | @ApiModelProperty(value = "ç¶æ 0å¾
确认 1å¾
ç¾å° 2çå¾
å«å· 3å
¥åçå¾
4å·²å«å· 5ä½ä¸ä¸ 6ä½ä¸å®æ 7è½¬ç§»ä¸ 8å¼å¸¸æèµ· 9å·²ææç¦»å 10已离å 11 å·²è¿å· 12åæ¶ï¼WMSï¼" , example = "1") |
| | | @ExcelColumn(name="ç¶æ",index =13,width = 6, valueMapping = "0=å¾
确认;1=å¾
ç¾å°;2=çå¾
å«å·;3=å
¥åçå¾
;4=å·²å«å·;5=ä½ä¸ä¸;6=ä½ä¸å®æ;7=转移ä¸;8=å¼å¸¸æèµ·;9=å·²ææç¦»å;10=已离å;11=å·²è¿å·;12=åæ¶ï¼WMSï¼;") |
| | | @ExcelColumn(name="ç¶æ",index =10,width = 6, valueMapping = "0=å¾
确认;1=å¾
ç¾å°;2=çå¾
å«å·;3=å
¥åçå¾
;4=å·²å«å·;5=ä½ä¸ä¸;6=ä½ä¸å®æ;7=转移ä¸;8=å¼å¸¸æèµ·;9=å·²ææç¦»å;10=已离å;11=å·²è¿å·;12=åæ¶ï¼WMSï¼;") |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "车è¾è¿å
¥ç¶æ 0ä¸å¨ 1è¿å
¥ " , example = "1") |
| | |
| | | private Integer driverId; |
| | | |
| | | @ApiModelProperty(value = "叿ºå§å") |
| | | @ExcelColumn(name="叿ºå§å",index = 4,width = 6) |
| | | @ExcelColumn(name="叿ºå§å",index = 5,width = 6) |
| | | private String driverName; |
| | | |
| | | @ApiModelProperty(value = "车çå·") |
| | | private String plateNum; |
| | | |
| | | @ApiModelProperty(value = "叿ºææºå·") |
| | | @ExcelColumn(name="叿ºçµè¯",index = 5,width = 8) |
| | | @ExcelColumn(name="叿ºçµè¯",index = 6,width = 8) |
| | | private String drivierPhone; |
| | | |
| | | @ApiModelProperty(value = "ç¾å°æ¶é´") |
| | | @ExcelColumn(name="ç¾å°æ¶é´",index =7,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | // @ExcelColumn(name="ç¾å°æ¶é´",index =7,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | private Date signDate; |
| | | |
| | | @ApiModelProperty(value = "ç¾å°æ¹å¼ 0appç¾å° 1æ«ç ç¾å° 2åå°ç¾å°", example = "1") |
| | |
| | | private BigDecimal signDistance; |
| | | |
| | | @ApiModelProperty(value = "ä½ä¸æå°åç§°éåï¼å¤ä¸ªä½¿ç¨è±æéå·éå¼") |
| | | @ExcelColumn(name="ä½ä¸æå°åç§°",index =17 ,width = 8) |
| | | // @ExcelColumn(name="ä½ä¸æå°åç§°",index =17 ,width = 8) |
| | | private String platformNames; |
| | | |
| | | @ApiModelProperty(value = "ä½ä¸æå°ç¼ç éåï¼å¤ä¸ªä½¿ç¨è±æéå·éå¼") |
| | |
| | | private Integer inwaitUserId; |
| | | |
| | | @ApiModelProperty(value = "å«å·æ¶é´") |
| | | @ExcelColumn(name="å«å·æ¶é´",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | // @ExcelColumn(name="å«å·æ¶é´",index =8 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | private Date callDate; |
| | | |
| | | @ApiModelProperty(value = "å«å·äººç¼ç ", example = "1") |
| | |
| | | private String callInfo; |
| | | |
| | | @ApiModelProperty(value = "å¼å§ä½ä¸æ¶é´") |
| | | @ExcelColumn(name="å¼å§ä½ä¸æ¶é´",index =9 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | // @ExcelColumn(name="å¼å§ä½ä¸æ¶é´",index =9 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | private Date startDate; |
| | | |
| | | @ApiModelProperty(value = "ä½ä¸å®ææ¶é´ï¼æç»æ¶é´ï¼") |
| | | @ExcelColumn(name="ä½ä¸å®ææ¶é´",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | // @ExcelColumn(name="ä½ä¸å®ææ¶é´",index =10 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | private Date doneDate; |
| | | |
| | | @ApiModelProperty(value = "å¼å¸¸æèµ·æ¶é´") |
| | |
| | | private Date inHkdate; |
| | | |
| | | @ApiModelProperty(value = "ä½ä¸ç±»å 0èªæè½¦å¸è´§ 1èªæè½¦è£
è´§ 2å¤å车å¸è´§ 3å¤å车è£
è´§ 4å¸å
¬å¸å¤å车å¸è´§", example = "1") |
| | | @ExcelColumn(name="ä½ä¸ç±»å",index = 15,width = 6,valueMapping = "0=èªæè½¦å¸è´§;1=èªæè½¦è£
è´§;2=å¤å车å¸è´§;3=å¤å车è£
è´§;4=å¸å
¬å¸å¤å车å¸è´§") |
| | | @ExcelColumn(name="ä½ä¸ç±»å",index = 7,width = 6,valueMapping = "0=èªæè½¦å¸è´§;1=èªæè½¦è£
è´§;2=å¤å车å¸è´§;3=å¤å车è£
è´§;4=å¸å
¬å¸å¤å车å¸è´§") |
| | | private Integer type; |
| | | |
| | | @ApiModelProperty(value = "å车çå·") |
| | |
| | | private String carCodeFront; |
| | | |
| | | @ApiModelProperty(value = "å车çå·") |
| | | @ExcelColumn(name="å车çå·",index =3 ,width = 5) |
| | | // @ExcelColumn(name="å车çå·",index =3 ,width = 5) |
| | | private String carCodeBack; |
| | | |
| | | @ApiModelProperty(value = "叿ºæå±é¨é¨ç¼ç ", example = "1") |
| | |
| | | private BigDecimal totalNum; |
| | | |
| | | @ApiModelProperty(value = "ç¡®è®¤ä»»å¡æ¶é´") |
| | | @ExcelColumn(name="确认æ¶é´",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | // @ExcelColumn(name="确认æ¶é´",index =6 ,dateFormat = "yyyy-MM-dd HH:mm:ss",width = 10) |
| | | private Date confirmTaskDate; |
| | | |
| | | @ApiModelProperty(value = "ç¾å°åºå·", example = "1") |
| | | private Integer signNum; |
| | | |
| | | @ApiModelProperty(value = "æ¯å¦æ è®°èææå°ç» 0å¦ 1æ¯", example = "1") |
| | | @ApiModelProperty(value = "æ¯å¦æ´æ¢è¿æå°ç» 0å¦ 1æ¯", example = "1") |
| | | private Integer tagVirtual; |
| | | @ApiModelProperty(value = "æ è®°èææå°ç»æ¶é´", example = "1") |
| | | @ApiModelProperty(value = "æ´æ¢è¿æå°ç»æ¶é´", example = "1") |
| | | private Date tagVirtualTime; |
| | | @ApiModelProperty(value = "æ è®°èææå°ç»äººåç¼ç ", example = "1") |
| | | @ApiModelProperty(value = "æ´æ¢è¿æå°ç»äººåç¼ç ", example = "1") |
| | | private Integer tagVirtualUser; |
| | | @ApiModelProperty(value = "å«å·æ¹å¼ 0æå¨å«å· 1èªå¨å«å·", example = "1") |
| | | private Integer callWay; |
| | |
| | | |
| | | @ApiModelProperty(value = "WMS任塿¶é´") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="WMSå建æ¶é´",index =18,width = 10) |
| | | @ExcelColumn(name="WMSå建æ¶é´",index =9,width = 10) |
| | | private String ioCreatedate; |
| | | @ApiModelProperty(value = "离åºä¸åæä½äººåç§°", example = "1") |
| | | @TableField(exist = false) |
| | | private String outUserName; |
| | | |
| | | @ApiModelProperty(value = "æåæä½äººåç§°", example = "1") |
| | | @ExcelColumn(name="æåæä½äººåç§°",index = 15,width = 12) |
| | | @ExcelColumn(name="æåæä½äººåç§°",index = 11,width = 12) |
| | | @TableField(exist = false) |
| | | private String editUserName; |
| | | |
| | |
| | | private Integer groupType ; |
| | | |
| | | @ApiModelProperty(value = "æ¿è¿å") |
| | | @ExcelColumn(name="è¿è¾å
¬å¸",index = 16,width = 10) |
| | | @ExcelColumn(name="è¿è¾å
¬å¸",index = 4,width = 10) |
| | | @TableField(exist = false) |
| | | private String carrierName ; |
| | | |
| | |
| | | private Long workTime; |
| | | @ApiModelProperty(value = "ä½ä¸æ¶é¿") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="ä½ä¸æ¶é¿",index =11 ,width = 6) |
| | | // @ExcelColumn(name="ä½ä¸æ¶é¿",index =11 ,width = 6) |
| | | private String workTimeStr; |
| | | |
| | | @ApiModelProperty(value = "WMSä»»å¡ä¿¡æ¯") |
| | |
| | | |
| | | @ApiModelProperty(value = "æå°ç»åç§°") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="ä½ä¸æå°ç»",index =22,width = 10) |
| | | @ExcelColumn(name="ä½ä¸æå°ç»",index = 8,width = 10) |
| | | private String platformGroupName ; |
| | | |
| | | @ApiModelProperty(value = "æå°å·¥ä½æ¶é¿" ,hidden = true) |
| | |
| | | private String queryStatusForPower; |
| | | |
| | | @ApiModelProperty(value = "任塿¥æº") |
| | | @ExcelColumn(name="任塿¥æº",index =14,valueMapping = "0=WMSè·å;1=èªä¸»é¢çº¦;") |
| | | // @ExcelColumn(name="任塿¥æº",index =14,valueMapping = "0=WMSè·å;1=èªä¸»é¢çº¦;") |
| | | @TableField(exist = false) |
| | | private Integer jobForm; |
| | | |
| | |
| | | BeanUtils.copyProperties(model,platformJob); |
| | | platformJob.setPlatformGroupId(param.getPlatformGroupId()); |
| | | platformJob.setEditDate(new Date()); |
| | | platformJob.setTagVirtual(Constants.ONE); |
| | | platformJob.setTagVirtualUser(platformJob.getEditor()); |
| | | platformJob.setTagVirtualTime(platformJob.getEditDate()); |
| | | platformJob.setEditor(loginUser.getId()); |
| | | int flag = platformJobMapper.update(null,new UpdateWrapper<PlatformJob>().lambda() |
| | | .set(PlatformJob::getEditDate,platformJob.getEditDate()) |
| | | .set(PlatformJob::getTagVirtualTime,platformJob.getTagVirtualTime()) |
| | | .set(PlatformJob::getEditor,platformJob.getEditor()) |
| | | .set(PlatformJob::getPlatformGroupId,param.getPlatformGroupId()) |
| | | .set(PlatformJob::getTagVirtualUser,platformJob.getEditor()) |
| | | .set(PlatformJob::getPlatformId,null)//置空åé
çæå°ä¿¡æ¯ |
| | | .in(PlatformJob::getStatus,Constants.PlatformJobStatus.WAIT_CONFIRM.getKey(), |
| | | Constants.PlatformJobStatus.WART_SIGN_IN.getKey(), |