Merge branch 'dev' of http://139.186.142.91:10010/r/productDev/parkBike into dev
| | |
| | | |
| | | #焦松本地 |
| | | # http://192.168.0.36:10012/doc.html#/home |
| | | VUE_APP_API_BASE_URL='http://192.168.0.188:10026' |
| | | VUE_APP_API_BASE_URL='http://192.168.0.190:10026' |
| | | |
| | | # # 测试服务 |
| | | # VUE_APP_API_PREFIX='/bike_admin_api' |
| | | |
| | | # # 后端接口地址:https://dmtest.ahapp.net/bike_admin_api/doc.html |
| | | # VUE_APP_API_BASE_URL='https://dmtest.ahapp.net/bike_admin_api' |
| | | VUE_APP_API_BASE_URL='https://dmtest.ahapp.net/bike_admin_api' |
| | |
| | | |
| | | // 修改 |
| | | export function getFileList (id) { |
| | | return request.post(`/business/bikeRepair/getFileList/${id}`) |
| | | return request.get(`/business/bikeRepair/getFileList/${id}`) |
| | | } |
| | |
| | | <el-form-item label="车型名称" prop="bikeTypeName"> |
| | | {{ form.bikeTypeName }} |
| | | </el-form-item> |
| | | <el-form-item label="工作日计费"> |
| | | <el-form-item label="工作日计费" prop="base"> |
| | | <el-select v-model="form.baseType" @change="selectBaseType"> |
| | | <el-option |
| | | v-for="item in priceType" |
| | |
| | | </div> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="节假日计费"> |
| | | <el-form-item label="节假日计费" prop="holiday"> |
| | | <el-select v-model="form.holidayBaseType" @change="selectHolidayBaseType"> |
| | | <el-option |
| | | v-for="item in priceType" |
| | |
| | | import GlobalAlertWindow from '@/components/common/GlobalAlertWindow' |
| | | import { updatePricingDetailById } from '@/api/business/pricingParam' |
| | | // import { findList } from '@/api/business/roomTime' |
| | | import { numRule } from '@/utils/form' |
| | | export default { |
| | | name: 'OperaPriceConfigWindow', |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow }, |
| | | data () { |
| | | const baseRule = (rule, value, callback) => { |
| | | if (this.form.baseType==1) { |
| | | if (!this.form.basePrice || this.form.basePrice<0) { |
| | | callback(new Error()) |
| | | } else { |
| | | callback() |
| | | } |
| | | } else { |
| | | if (!this.form.basePrice || this.form.basePrice<0 || !this.form.baseTime || this.form.baseTime <0 |
| | | || !this.form.unitPrice || this.form.unitPrice<0 || !this.form.unitTime || this.form.unitTime <0 |
| | | ) { |
| | | callback(new Error()) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | const holidayRule = (rule, value, callback) => { |
| | | if (this.form.holidayBaseType==1) { |
| | | if (!this.form.holidayBasePrice || this.form.holidayBasePrice<0) { |
| | | callback(new Error()) |
| | | } else { |
| | | callback() |
| | | } |
| | | } else { |
| | | if (!this.form.holidayBasePrice || this.form.holidayBasePrice<0 || !this.form.holidayBaseTime || this.form.holidayBaseTime <0 |
| | | || !this.form.holidayBasePrice || this.form.holidayBasePrice<0 || !this.form.holidayUnitTime || this.form.holidayUnitTime <0 |
| | | ) { |
| | | callback(new Error()) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | } |
| | | return { |
| | | // 表单数据 |
| | | form: { |
| | |
| | | backInfoRequired: false, |
| | | // 验证规则 |
| | | rules: { |
| | | duration: [ |
| | | { required: true, validator: numRule, message: '请输入计费时长', tigger: 'blur' } |
| | | base: [ |
| | | { required: true, validator: baseRule, message: '请完善工作日计价信息', tigger: 'blur' } |
| | | ], |
| | | backReason: [ |
| | | { required: true, message: '请选择调整原因', tigger: 'change'}, |
| | | holiday: [ |
| | | { required: true, validator: holidayRule, message: '请完善节假日计价信息', tigger: 'blur'}, |
| | | ] |
| | | }, |
| | | |
| | |
| | | <el-form-item label="站点名称" prop="name"> |
| | | <el-input v-model="form.name" placeholder="请输入站点名称" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="站点ip" prop="ip"> |
| | | <!-- <el-form-item label="站点ip" prop="ip"> |
| | | <el-input v-model="form.ip" placeholder="请输入站点ip地址" v-trim/> |
| | | </el-form-item> |
| | | <el-form-item label="站点端口号" prop="port"> |
| | | <el-input v-model="form.port" placeholder="请输入站点端口号" v-trim/> |
| | | </el-form-item> |
| | | </el-form-item> --> |
| | | |
| | | <!-- <el-form-item label="备注" prop="info"> |
| | | <el-input v-model="form.info" placeholder="请输入备注" v-trim/> |
| | |
| | | </el-form-item> |
| | | <el-form-item label="图片/视频" prop="dealInfo"> |
| | | <el-image v-for="(url, index) in form.imgList" :key="index" |
| | | style="width: 100px; height: 100px; margin-right: 5px;" :src="url" fit="contain" |
| | | :prediv-src-list="form.imgList"></el-image> |
| | | style="width: 100px; height: 100px; margin-right: 5px;" :src="url" :initial-index="index" fit="contain" |
| | | :preview-src-list="form.imgList"></el-image> |
| | | </el-form-item> |
| | | </el-form> |
| | | <div slot="footer"> |
| | |
| | | <el-form :model="form" ref="form" :rules="rules" label-suffix=":"> |
| | | <el-form-item label="退款金额" prop="money"> |
| | | <div style="display: flex;"> |
| | | <el-input style="flex: 1;" v-model="form.money" placeholder="请输入退款金额" v-trim/> |
| | | <el-input style="flex: 1;" v-model="form.money" type="number" placeholder="请输入退款金额" v-trim/> |
| | | </div> |
| | | </el-form-item> |
| | | <el-form-item label="退款原因" prop="reason"> |
| | |
| | | type="textarea" |
| | | :autosize="{ minRows: 2, maxRows: 4}" |
| | | v-model="form.reason" |
| | | placeholder="请输入调整备注" |
| | | placeholder="请输入调整备注1" |
| | | v-trim |
| | | /> |
| | | </el-form-item> |
| | |
| | | extends: BaseOpera, |
| | | components: { GlobalAlertWindow }, |
| | | data () { |
| | | const moneyRule = (rule, value, callback) => { |
| | | if (value <=0 ) { |
| | | callback(new Error('退款金额必须大于0')) |
| | | } else { |
| | | callback() |
| | | } |
| | | } |
| | | return { |
| | | // 表单数据 |
| | | form: { |
| | |
| | | }, |
| | | // 验证规则 |
| | | rules: { |
| | | duration: [ |
| | | { required: true, validator: numRule, message: '请输入退款金额', tigger: 'blur' } |
| | | money: [ |
| | | { required: true, validator: moneyRule, tigger: 'blur' } |
| | | ] |
| | | }, |
| | | |
| | |
| | | stripe |
| | | border |
| | | > |
| | | <el-table-column prop="memberOpenid" label="用户" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="preOrderid" label="订单编号" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="openid" label="用户" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="code" label="订单编号" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="payDate" label="支付时间" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="money" label="支付金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="refundDate" label="退款时间" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="refundMoney" label="退款金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="closeDate" label="结算金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="money" label="支付金额" width="80px" align="center"></el-table-column> |
| | | <el-table-column prop="refundDate" label="退款时间" width="150px" align="center"></el-table-column> |
| | | <el-table-column prop="refundMoney" label="退款金额" width="80px" align="center"></el-table-column> |
| | | <el-table-column prop="closeMoney" label="结算金额" width="80px" align="center"></el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | |
| | | :title="title" |
| | | :visible.sync="visible" |
| | | :confirm-working="isWorking" |
| | | width="600px" |
| | | @confirm="confirm" |
| | | > |
| | | <el-form :model="form" ref="form" :rules="rules"> |
| | | <el-form :model="form" ref="form" :rules="rules" label-width="100px" label-suffix=":"> |
| | | <!-- <el-form-item label="用户名" prop="username" required> |
| | | <el-input v-model="form.username" placeholder="请输入用户名" v-trim maxlength="50"/> |
| | | </el-form-item> --> |
| | |
| | | <el-form-item label="工号" prop="empNo"> |
| | | <el-input v-model="form.empNo" placeholder="请输入工号" v-trim maxlength="50"/> |
| | | </el-form-item> |
| | | <el-form-item label="所属部门" prop="departmentId"> |
| | | <!-- <el-form-item label="所属部门" prop="departmentId"> |
| | | <DepartmentSelect v-model="form.departmentId" placeholder="请选择用户所属部门" :inline="false" clearable/> |
| | | </el-form-item> |
| | | <div v-if="!form.id" style="color: red">新建用户的默认密码为手机号后六位</div> |
| | | </el-form-item> --> |
| | | <div v-if="!form.id" style="color: red">新建用户的账号为手机号、默认密码为手机号后六位</div> |
| | | <!-- <el-form-item label="岗位" prop="positionId"> |
| | | <PositionSelect v-model="form.positionIds" placeholder="请选择用户所在岗位" :inline="false" :multiple="true" clearable/> |
| | | </el-form-item> |
| | |
| | | <div class="long-title-style">{{ row.openid }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="id" label="系统单号" min-width="140px" align="center" show-overflow-tooltip> |
| | | <el-table-column prop="objId" label="系统单号" min-width="140px" align="center" show-overflow-tooltip> |
| | | <template slot-scope="{row}"> |
| | | <div class="long-title-style">{{ row.id }}</div> |
| | | <div class="long-title-style">{{ row.objId }}</div> |
| | | </template> |
| | | </el-table-column> |
| | | <!-- payOnlineOrderid 支付押金交易单号 --> |
| | |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="canBalance" label="当前可退回押金(元)" min-width="140px" align="center"> |
| | | <template slot-scope="{row}"> |
| | | {{ (row.canBalance / 100).toFixed(2) }} |
| | | </template> |
| | | |
| | | </el-table-column> |
| | | <el-table-column prop="money" label="退回押金(元)" min-width="140px" align="center"> |
| | | <template slot-scope="{row}"> |
| | | {{ (row.money / 100).toFixed(2) }} |
| | | </template> |
| | | </el-table-column> |
| | | <el-table-column prop="createDate" label="操作时间" min-width="140px" align="center"></el-table-column> |
| | | <el-table-column prop="creatorName" label="操作人" min-width="100px" align="center"></el-table-column> |
| | |
| | | <TableLayout :permissions="['business:sites:query']"> |
| | | <!-- 搜索表单 --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="站点编号" prop="code"> |
| | | <el-input v-model="searchForm.code" placeholder="请输入站点编号" @keypress.enter.native="search"></el-input> |
| | | <el-form-item label="站点编号" prop="siteId"> |
| | | <el-input v-model="searchForm.siteId" placeholder="请输入站点编号" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="站点名称" prop="name"> |
| | | <el-input v-model="searchForm.name" placeholder="请输入站点名称" @keypress.enter.native="search"></el-input> |
| | | <el-form-item label="站点名称" prop="siteName"> |
| | | <el-input v-model="searchForm.siteName" placeholder="请输入站点名称" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="锁止器号" prop="lockId"> |
| | | <el-input v-model="searchForm.lockId" placeholder="请输入站点名称" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="是否有车" prop="hasBike"> |
| | | <el-select v-model="searchForm.hasBike" placeholder="请选择"> |
| | | <el-option |
| | | label="全部" |
| | | :value="0"> |
| | | </el-option> |
| | | <el-option |
| | | label="无车" |
| | | :value="1"> |
| | | </el-option> |
| | | <el-option |
| | | label="有车" |
| | | :value="2"> |
| | | </el-option> |
| | | </el-select> |
| | | </el-form-item> |
| | | <section> |
| | | <el-button type="primary" @click="search">搜索</el-button> |
| | |
| | | return { |
| | | // 搜索 |
| | | searchForm: { |
| | | name: '', |
| | | code: '', |
| | | siteName: '', |
| | | siteId: '', |
| | | lockId: '', |
| | | hasBike: 0, |
| | | } |
| | | } |
| | | }, |
| | |
| | | <TableLayout :permissions="['business:bikerepair:query']"> |
| | | <!-- 搜索表单 --> |
| | | <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline> |
| | | <el-form-item label="用户" prop="creator"> |
| | | <el-input v-model="searchForm.creator" placeholder="请输入" @keypress.enter.native="search"></el-input> |
| | | <el-form-item label="用户" prop="openid"> |
| | | <el-input v-model="searchForm.openid" placeholder="请输入" @keypress.enter.native="search"></el-input> |
| | | </el-form-item> |
| | | <el-form-item label="车辆编码" prop="bikeCode"> |
| | | <el-input v-model="searchForm.bikeCode" placeholder="请输入车辆编号" @keypress.enter.native="search"></el-input> |
| | |
| | | searchForm: { |
| | | id: '', |
| | | createDate: '', |
| | | creator: '', |
| | | openid: '', |
| | | editDate: '', |
| | | editor: '', |
| | | isdeleted: '', |
| | |
| | | searchForm: { |
| | | id: '', |
| | | createDate: '', |
| | | creator: '', |
| | | hasBack: '', |
| | | editDate: '', |
| | | editor: '', |
| | | isdeleted: '', |
| | |
| | | 'field.main': 'id' |
| | | }) |
| | | this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' |
| | | this.searchForm.endDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 23:59:59' |
| | | this.search() |
| | | }, |
| | | methods: { |
| | |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="showDetail(row)">订单详情</el-button> |
| | | <el-button type="text" @click="statement(row)" v-if="row.status != 4" style="color: red">结算</el-button> |
| | | <el-button type="text" @click="refenMoney(row)" v-else>退款</el-button> |
| | | <el-button type="text" @click="statement(row)" v-if="row.status != 4 && (row.memberRidesStatus>1 || !row.memberRidesStatus)" style="color: red">结算</el-button> |
| | | <el-button type="text" @click="refenMoney(row)" v-if="row.status == 4">退款</el-button> |
| | | </template> |
| | | </el-table-column> |
| | | </el-table> |
| | |
| | | |
| | | }, |
| | | statement({id}) { |
| | | this.$dialog.messageWaring('当前订单可能有未完成的骑行,确定强制结算?', '强制结算') |
| | | this.$dialog.messageWaring('确定强制结算码?结算后订单自动完成', '强制结算') |
| | | .then(() => { |
| | | closerGoodsorder(id) |
| | | .then(() => { |
| | |
| | | <el-select v-model="searchForm.closeStatus" placeholder="请选择"> |
| | | <el-option |
| | | label="未结算" |
| | | :value="1"> |
| | | :value="0"> |
| | | </el-option> |
| | | <el-option |
| | | label="已结算" |
| | |
| | | 'field.main': 'id' |
| | | }) |
| | | this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' |
| | | this.searchForm.endDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 23:59:59' |
| | | this.search() |
| | | }, |
| | | methods: { |
| | |
| | | <!-- 表格和分页 --> |
| | | <template v-slot:table-wrap> |
| | | <ul class="toolbar" v-permissions="['business:sites:create']"> |
| | | <li><el-button type="primary" @click="$refs.operaSitesWindow.open('新建站点信息表')" icon="el-icon-plus" v-permissions="['business:sites:create']">新建</el-button></li> |
| | | <li><el-button type="primary" @click="$refs.operaSitesWindow.open('新建站点')" icon="el-icon-plus" v-permissions="['business:sites:create']">新建</el-button></li> |
| | | </ul> |
| | | <el-table |
| | | v-loading="isWorking.search" |
| | |
| | | > |
| | | <el-table-column prop="code" label="站点编号" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="name" label="站点名称" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="ip" label="站点ip" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="port" label="端口号" min-width="100px" align="center"></el-table-column> |
| | | <!-- <el-table-column prop="ip" label="站点ip" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="port" label="端口号" min-width="100px" align="center"></el-table-column> --> |
| | | <el-table-column prop="editDate" label="最后通讯时间" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="status" label="状态" min-width="100px" align="center"> |
| | | <template slot-scope="{row}"> |
| | |
| | | fixed="right" |
| | | > |
| | | <template slot-scope="{row}"> |
| | | <el-button type="text" @click="$refs.operaSitesWindow.open('编辑站点信息表', row)" icon="el-icon-edit" v-permissions="['business:sites:update']">编辑</el-button> |
| | | <el-button type="text" @click="$refs.operaSitesWindow.open('编辑站点', row)" icon="el-icon-edit" v-permissions="['business:sites:update']">编辑</el-button> |
| | | <el-button type="text" @click="deleteById(row)" icon="el-icon-delete" v-permissions="['business:sites:delete']">删除</el-button> |
| | | </template> |
| | | </el-table-column> |
| | |
| | | > |
| | | <el-table-column prop="code" label="站点编号" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="name" label="站点名称" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="lockNum" label="锁头数量" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="ip" label="在架车数量" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="ip" label="满架率" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="allLockNum" label="锁头数量" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="bikeCount" label="在架车数量" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="rate" label="满架率" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="editDate" label="最后通讯时间" min-width="100px" align="center"></el-table-column> |
| | | </el-table> |
| | | <pagination |
| | |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | :picker-options="pickerOptions" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" |
| | | @change="selectDate" |
| | | ></el-date-picker> |
| | |
| | | :data="tableData.list" |
| | | stripe |
| | | border |
| | | show-summary |
| | | > |
| | | <el-table-column prop="createDate" label="日期" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="id" label="日期" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumBill" label="收款笔数" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumTotalFee" label="收款金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumCmmsAmt" label="收款手续费" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumTotalFee" label="收款金额(元)" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumCmmsAmt" label="收款手续费(元)" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumRefundBill" label="退款笔数" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumRefundFee" label="退款金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumRefundCmmsAmt" label="退款手续费" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumRefundFee" label="退款金额(元)" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumRefundCmmsAmt" label="退款手续费(元)" min-width="100px" align="center"></el-table-column> |
| | | |
| | | <!-- <el-table-column prop="sumSuccessFee" label="应结订单总金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumCouponRefundFee" label="充值券退款总金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="sumApplyRefundFee" label="申请退款总金额" min-width="100px" align="center"></el-table-column> --> |
| | | <el-table-column prop="total" label="结算金额" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="bikeFee" label="自行车收入" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="total" label="结算金额(元)" min-width="100px" align="center"></el-table-column> |
| | | <el-table-column prop="bikeFee" label="自行车收入(元)" min-width="100px" align="center"></el-table-column> |
| | | </el-table> |
| | | <pagination |
| | | @size-change="handleSizeChange" |
| | |
| | | components: { TableLayout, Pagination }, |
| | | data () { |
| | | return { |
| | | value1: [new Date(), new Date()], |
| | | value1: [], |
| | | // 搜索 |
| | | searchForm: { |
| | | endDate: '', |
| | |
| | | }, |
| | | sumData: { |
| | | |
| | | } |
| | | }, |
| | | pickerOptions: {} |
| | | } |
| | | }, |
| | | created () { |
| | |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' |
| | | this.pickerOptions.disabledDate = (time) => { |
| | | // 一天 |
| | | let tempTime = 3600 * 1000 * 24 |
| | | return time.getTime() > new Date() - tempTime |
| | | } |
| | | // let tempTime = new Date().getTime() - 3600 * 1000 * 24 |
| | | // this.searchForm.startDate = formatDateTime(new Date(tempTime), 'yyyy-MM-dd') + ' 00:00:00' |
| | | // this.searchForm.endDate = formatDateTime(new Date(tempTime), 'yyyy-MM-dd') + ' 23:59:59' |
| | | // this.value1 = [this.searchForm.startDate, this.searchForm.endDate] |
| | | this.search() |
| | | }, |
| | | methods: { |
| | |
| | | range-separator="至" |
| | | start-placeholder="开始日期" |
| | | end-placeholder="结束日期" |
| | | :picker-options="pickerOptions" |
| | | format="yyyy-MM-dd" value-format="yyyy-MM-dd HH:mm:ss" |
| | | @change="selectDate" |
| | | ></el-date-picker> |
| | |
| | | components: { TableLayout, BillDetailWindow }, |
| | | data () { |
| | | return { |
| | | value1: [new Date(), new Date()], |
| | | value1: [], |
| | | // 搜索 |
| | | searchForm: { |
| | | endDate: '', |
| | | startDate: '', |
| | | }, |
| | | pickerOptions: {} |
| | | } |
| | | }, |
| | | created () { |
| | |
| | | 'field.id': 'id', |
| | | 'field.main': 'id' |
| | | }) |
| | | this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' |
| | | this.pickerOptions.disabledDate = (time) => { |
| | | // 一天 |
| | | let tempTime = 3600 * 1000 * 24 |
| | | return time.getTime() > new Date() - tempTime |
| | | } |
| | | // let tempTime = new Date().getTime() - 3600 * 1000 * 24 |
| | | // this.searchForm.startDate = formatDateTime(new Date(tempTime), 'yyyy-MM-dd') + ' 00:00:00' |
| | | // this.searchForm.endDate = formatDateTime(new Date(tempTime), 'yyyy-MM-dd') + ' 23:59:59' |
| | | // this.value1 = [this.searchForm.startDate, this.searchForm.endDate] |
| | | |
| | | this.search() |
| | | }, |
| | | methods: { |
| | |
| | | </el-form> |
| | | <!-- 表格和分页 --> |
| | | <template v-slot:table-wrap> |
| | | <div style="display: flex;"> |
| | | <div style="width: 15%; border-right: 1px solid #ececec;"> |
| | | <Tree |
| | | :list="data" |
| | | :defaultProps="defaultProps" |
| | | @callback="callback" |
| | | ></Tree> |
| | | </div> |
| | | <div style="width: 84%; margin-left: 1%;"> |
| | | |
| | | |
| | | <div> |
| | | <div class="zdy_box"> |
| | | <div style="display: flex; align-items: center;"> |
| | | <span>{{name ? name : '全部'}} ({{tableData.pagination.total}})</span> |
| | |
| | | /> |
| | | </li> |
| | | <li v-permissions="['system:user:create']"><el-button type="primary" @click="$refs.operaUserWindow.open('新建用户')">添加用户</el-button></li> |
| | | <li v-permissions="['system:user:create']"><el-button type="primary" @click="changeZZ">更换组织</el-button></li> |
| | | <!-- <li v-permissions="['system:user:create']"><el-button type="primary" @click="changeZZ">更换组织</el-button></li> --> |
| | | <li v-permissions="['system:user:delete']"><el-button @click="deleteByIdInBatch">删除</el-button></li> |
| | | </ul> |
| | | </div> |
| | |
| | | :pagination="tableData.pagination" |
| | | ></pagination> |
| | | </div> |
| | | </div> |
| | | </template> |
| | | <!-- 新建/修改 --> |
| | | <OperaUserWindow ref="operaUserWindow" @success="handlePageChange(tableData.pagination.pageIndex)"/> |
| | |
| | | id: item.id, |
| | | status: item.status |
| | | }).then(res => { |
| | | this.search() |
| | | |
| | | }).catch(e => { |
| | | this.$tip.apiFailed(e) |
| | | }).finally(() => { |
| | | this.handlePageChange() |
| | | }) |
| | | }, |
| | | resPwd() { |
| | |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"对不起,账号或密码不正确!"); |
| | | } |
| | | if(Objects.equals(user.getStatus(),Constants.ONE)){ |
| | | throw new AuthenticationException("用户已被禁用,请联系管理员"); |
| | | throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"登录账号已禁用,请联系管理员!"); |
| | | } |
| | | // 获取登录用户信息 |
| | | List<SystemRole> roles = systemRoleService.findByUserId(user.getId()); |
| | |
| | | import com.doumee.dao.business.model.Goodsorder; |
| | | import com.doumee.service.business.GoodsorderService; |
| | | import com.doumee.service.business.MemberRidesService; |
| | | import com.doumee.service.business.SitesService; |
| | | import com.doumee.service.business.WxBillService; |
| | | import lombok.extern.slf4j.Slf4j; |
| | | import org.springframework.beans.factory.annotation.Autowired; |
| | |
| | | @Autowired |
| | | private GoodsorderService goodsorderService; |
| | | |
| | | |
| | | @Autowired |
| | | private MemberRidesService memberRidesService; |
| | | |
| | | @Autowired |
| | | private SitesService sitesService; |
| | | |
| | | /** |
| | | * @throws Exception |
| | | */ |
| | |
| | | log.info("=====================开始每天自动结算======================="); |
| | | memberRidesService.autoRefreshLockStatus(); |
| | | log.info("=====================结束每天自动结算======================="); |
| | | |
| | | } |
| | | |
| | | |
| | | /** |
| | | * 站点车辆满架率预警 |
| | | * @throws Exception |
| | | */ |
| | | @Scheduled(fixedDelay = 1000L * 60L * 3L) |
| | | public void siteReserves() throws Exception { |
| | | log.info("=====================开始 站点车辆满架率预警======================="); |
| | | sitesService.siteReservesNotice();; |
| | | log.info("=====================结束 站点车辆满架率预警======================="); |
| | | } |
| | | |
| | | } |
| | |
| | | private Integer isdeleted; |
| | | |
| | | @ApiModelProperty(value = "备注") |
| | | @ExcelColumn(name="备注") |
| | | private String info; |
| | | |
| | | @ApiModelProperty(value = "订单编码") |
| | |
| | | private Integer payWay; |
| | | |
| | | @ApiModelProperty(value = "支付时间") |
| | | @ExcelColumn(name="交押金时间",index = 5,width = 10,align = HorizontalAlignment.CENTER) |
| | | @ExcelColumn(name="交押金时间",index = 5,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss" ) |
| | | private Date payDate; |
| | | |
| | | @ApiModelProperty(value = "交易类型 0租车押金") |
| | |
| | | private String closeId; |
| | | |
| | | @ApiModelProperty(value = "结算时间") |
| | | @ExcelColumn(name="结算时间",index = 8,width = 10,align = HorizontalAlignment.CENTER) |
| | | @ExcelColumn(name="结算时间",index = 8,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date closeDate; |
| | | @ApiModelProperty(value = "结算备注") |
| | | private String closeInfo; |
| | |
| | | |
| | | @ApiModelProperty(value = "最后退款时间") |
| | | @TableField(exist = false) |
| | | @ExcelColumn(name="退款结算时间",index = 9,width = 10,align = HorizontalAlignment.CENTER) |
| | | @ExcelColumn(name="退款结算时间",index = 9,width = 10,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date refundDate; |
| | | |
| | | @ApiModelProperty(value = "最近骑行状态") |
| | |
| | | private BigDecimal closeMoney; |
| | | |
| | | @ApiModelProperty(value = "结算时间") |
| | | @ExcelColumn(name="结算时间",width = 10,index = 6,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | // @ExcelColumn(name="结算时间",width = 10,index = 6,align = HorizontalAlignment.CENTER,dateFormat = "yyyy-MM-dd HH:mm:ss") |
| | | private Date closeDate; |
| | | |
| | | @ApiModelProperty(value = "退款金额(分)") |
| | |
| | | private String rentLockId; |
| | | |
| | | @ApiModelProperty(value = "骑行时长") |
| | | @ExcelColumn(name="借出时长",index = 8,width = 10,align = HorizontalAlignment.CENTER) |
| | | @ExcelColumn(name="借出时长(分)",index = 8,width = 10,align = HorizontalAlignment.CENTER) |
| | | private Integer rideTime; |
| | | @ApiModelProperty(value = "计费时长") |
| | | // @ExcelColumn(name="计费时长",index = 8,width = 10,align = HorizontalAlignment.CENTER) |
| | |
| | | private Date backDate; |
| | | |
| | | @ApiModelProperty(value = "状态 0请求开锁中 1骑行中 2已还车 3开锁失败") |
| | | @ExcelColumn(name="状态 ", valueMapping = "0=请求开锁中;1=骑行中;2=已还车;3=开锁失败;" ,width = 10,align = HorizontalAlignment.CENTER) |
| | | // @ExcelColumn(name="状态 ", valueMapping = "0=请求开锁中;1=骑行中;2=已还车;3=开锁失败;" ,width = 10,align = HorizontalAlignment.CENTER) |
| | | private Integer status; |
| | | |
| | | @ApiModelProperty(value = "结算状态") |
| | | @ExcelColumn(name="结算状态 ", valueMapping = "0=未结算;1=已结算;" ,width = 10,align = HorizontalAlignment.CENTER) |
| | | // @ExcelColumn(name="结算状态 ", valueMapping = "0=未结算;1=已结算;" ,width = 10,align = HorizontalAlignment.CENTER) |
| | | private Integer closeStatus; |
| | | } |
| | |
| | | |
| | | /** |
| | | * 站点预警 |
| | | * @param siteId |
| | | * @throws Exception |
| | | */ |
| | | void siteReservesNotice(String siteId) throws Exception; |
| | | void siteReservesNotice() throws Exception; |
| | | |
| | | |
| | | /** |
| | |
| | | |
| | | MPJLambdaWrapper<MemberRides> wrapper = new MPJLambdaWrapper<>(); |
| | | wrapper.eq(MemberRides::getOrdreId,id); |
| | | wrapper.ne(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.LOCKING_DEFEAT.getKey()); |
| | | wrapper.selectAll(MemberRides.class).selectAs(BaseParam::getName, MemberRides::getParamName); |
| | | wrapper.leftJoin(BaseParam.class, BaseParam::getId, MemberRides::getParamId); |
| | | wrapper.orderByDesc(BaseParam::getSortnum); |
| | |
| | | } |
| | | } |
| | | QueryWrapper<Refund> queryWrapper2 = new QueryWrapper<>(); |
| | | queryWrapper2.lambda().ge(param.getStartDate() !=null,Refund::getDoneDate,Utils.Date.getStart(param.getStartDate())); |
| | | queryWrapper2.lambda().le(param.getEndDate() !=null,Refund::getDoneDate,Utils.Date.getEnd(param.getEndDate())); |
| | | if(Objects.nonNull(param.getStartDate())) { |
| | | queryWrapper2.lambda().ge(Refund::getDoneDate, Utils.Date.getStart(param.getStartDate())); |
| | | } |
| | | if(Objects.nonNull(param.getEndDate())) { |
| | | queryWrapper2.lambda().le(Refund::getDoneDate, Utils.Date.getEnd(param.getEndDate())); |
| | | } |
| | | queryWrapper2.lambda().eq(Refund::getIsdeleted, Constants.ZERO); |
| | | queryWrapper2.select( "count(id) as count_num" |
| | | ,"sum(money) as money" ); |
| | |
| | | public PageData<BikeLogDTO> findBikeLog(PageWrap<MemberRidesQuery> pageWrap) { |
| | | IPage<MemberRides> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); |
| | | MPJLambdaWrapper<MemberRides> queryWrapper = initQueryParamByModel(pageWrap.getModel()); |
| | | MemberRidesQuery model = pageWrap.getModel(); |
| | | //已还车 |
| | | if (Objects.nonNull(model.getHasBack()) && model.getHasBack()){ |
| | | queryWrapper.eq(MemberRides::getStatus,Constants.TWO); |
| | | } |
| | | //未归还的 |
| | | if (Objects.nonNull(model.getHasBack()) && !model.getHasBack()){ |
| | | queryWrapper.eq(MemberRides::getStatus,Constants.ONE); |
| | | } |
| | | IPage<BikeLogDTO> bikeLogDTOIPage = memberRidesJoinMapper.selectJoinPage(page, BikeLogDTO.class, queryWrapper); |
| | | initBikeLogObj(bikeLogDTOIPage.getRecords()); |
| | | return PageData.from(bikeLogDTOIPage); |
| | |
| | | queryWrapper.ge(MemberRides::getRentDate, Utils.Date.getStart(model.getStartDate())); |
| | | } |
| | | if (Objects.nonNull(model.getEndDate())) { |
| | | queryWrapper.le(MemberRides::getRentDate, Utils.Date.getStart(model.getEndDate())); |
| | | queryWrapper.le(MemberRides::getRentDate, Utils.Date.getEnd(model.getEndDate())); |
| | | } |
| | | queryWrapper.eq(model.getCloseStatus()!=null,MemberRides::getCloseStatus, model.getCloseStatus()); |
| | | queryWrapper.eq(model.getStatus()!=null,MemberRides::getStatus, model.getStatus()); |
| | |
| | | queryWrapper.eq(StringUtils.isNotBlank(pageWrap.getModel().getCreatorName()) |
| | | ,SystemUser::getRealname |
| | | ,pageWrap.getModel().getCreatorName()); |
| | | |
| | | return PageData.from(refundJoinMapper.selectJoinPage(page, Refund.class,queryWrapper)); |
| | | IPage<Refund> refundIPage = refundJoinMapper.selectJoinPage(page, Refund.class, queryWrapper); |
| | | if (!CollectionUtils.isEmpty(refundIPage.getRecords())){ |
| | | refundIPage.getRecords().forEach(s->{ |
| | | s.setMoney(Constants.translateMoney(s.getMoney())); |
| | | }); |
| | | } |
| | | return PageData.from(refundIPage); |
| | | } |
| | | @Override |
| | | public List<RefundPlatExportVO> findPlatExportPage( Refund pageWrap) { |
| | |
| | | import org.springframework.util.CollectionUtils; |
| | | |
| | | import java.math.BigDecimal; |
| | | import java.util.ArrayList; |
| | | import java.util.Date; |
| | | import java.util.List; |
| | | import java.util.Objects; |
| | |
| | | } |
| | | |
| | | @Override |
| | | public void siteReservesNotice(String siteId) throws Exception { |
| | | public void siteReservesNotice() throws Exception{ |
| | | QueryWrapper<Sites> queryWrapper = new QueryWrapper<>(); |
| | | queryWrapper.select(" *, " + |
| | | " (select count(r.id) from locks r where r.site_id = sites.id) as all_lock_num ," + |
| | | "(select count(l.bike_code) from locks l where l.site_id = sites.id and l.bike_code IS NOT NULL and l.bike_code !='' ) as bikeCount"); |
| | | queryWrapper.lambda().eq(Sites::getStatus,Constants.ZERO); |
| | | queryWrapper.lambda().eq(Sites::getIsdeleted,Constants.ZERO); |
| | | queryWrapper.lambda().orderByAsc(Sites::getCode); |
| | | List<Sites> sitesList = sitesMapper.selectList(queryWrapper); |
| | | if (!CollectionUtils.isEmpty(sitesList)){ |
| | | for (Sites s:sitesList) { |
| | | if(Constants.formatIntegerNum(s.getAllLockNum())<=Constants.ZERO){ |
| | | continue; |
| | | } |
| | | BigDecimal warnMin = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MIN).getCode()); |
| | | BigDecimal warnMax = new BigDecimal(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.WARN_MAX).getCode()); |
| | | BigDecimal rata = new BigDecimal(s.getBikeCount()).divide(new BigDecimal(s.getAllLockNum()),2,BigDecimal.ROUND_HALF_UP).multiply(new BigDecimal(100L)); |
| | | if(rata.compareTo(warnMax)>Constants.ZERO){ |
| | | //发送钉钉通知 |
| | | DingDingNotice.reservesNotice(StringUtils.isBlank(s.getName())?s.getId() + " - 未知" :s.getId() + " - " + s.getName(), |
| | | systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(), |
| | | systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),Constants.ZERO,warnMax); |
| | | }else if(rata.compareTo(warnMin)<Constants.ZERO){ |
| | | //发送钉钉通知 |
| | | DingDingNotice.reservesNotice(StringUtils.isBlank(s.getName())?s.getId() + " - 未知" :s.getId() + " - " + s.getName(), |
| | | systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_URL).getCode(), |
| | | systemDictDataBiz.queryByCode(Constants.DINGDING,Constants.DINGDING_SECRET).getCode(),Constants.ONE,warnMin); |
| | | } |
| | | } |
| | | } |
| | | |
| | | |
| | | } |
| | | } |
| | |
| | | loginLog.setReason(e.getMessage().length() > 200 ? (e.getMessage().substring(0, 190) + "...") : e.getMessage()); |
| | | loginLog.setSuccess(Constants.ONE); |
| | | systemLoginLogService.create(loginLog); |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(),e.getCause().getMessage()); |
| | | if (e.getCause() instanceof BusinessException) { |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), e.getCause().getMessage()); |
| | | } |
| | | throw new BusinessException(ResponseStatus.ACCOUNT_INCORRECT.getCode(), "提示对不起,账号或密码错误!"); |
| | | } |
| | | } |
| | | |