From 69283b5a4559509187516355602e32e4bdac9d5d Mon Sep 17 00:00:00 2001 From: jiangping <jp@doumee.com> Date: 星期五, 28 二月 2025 11:54:12 +0800 Subject: [PATCH] Merge remote-tracking branch 'origin/2.0.1' into 2.0.1 --- admin/src/views/business/onlinePayStatistics.vue | 5 admin/src/views/combo/record.vue | 404 ++++++---------- server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java | 2 admin/src/views/combo/components/SaleDetail.vue | 139 +++++ admin/src/views/business/goodsorder.vue | 5 admin/src/views/combo/order.vue | 64 + server/services/src/main/java/com/doumee/service/business/GoodsorderService.java | 4 admin/package-lock.json | 5 server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java | 2 server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java | 60 + server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java | 2 admin/src/views/business/memberRides.vue | 4 admin/src/views/business/bikeRetakeRecord.vue | 6 server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java | 2 admin/src/components/base/BasePageTemp.vue | 8 server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java | 42 + server/services/src/main/java/com/doumee/core/constants/Constants.java | 5 server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java | 8 admin/src/views/combo/index.vue | 20 server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java | 70 + server/services/src/main/java/com/doumee/dao/business/model/Discount.java | 15 server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java | 4 server/services/src/main/java/com/doumee/dao/business/vo/DiscountGoodsorderExportVO.java | 4 server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java | 47 + server/services/src/main/java/com/doumee/service/business/impl/TransactionsServiceImpl.java | 4 server/web/src/main/java/com/doumee/api/web/BusinessApi.java | 13 admin/src/views/business/bikeRepair.vue | 5 admin/src/views/combo/components/OrderDetail.vue | 140 ++++- server/services/src/main/java/com/doumee/core/wx/SendWxMessage.java | 4 server/platform/src/main/java/com/doumee/api/business/DiscountController.java | 11 server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java | 4 server/services/src/main/resources/application-dev.yml | 13 admin/src/components/common/Paginations.vue | 40 + admin/package.json | 1 server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDetailResponse.java | 1 admin/src/api/business/combo.js | 43 + admin/src/views/combo/components/ComboDetail.vue | 24 admin/src/views/combo/components/Refund.vue | 3 server/services/src/main/java/com/doumee/core/utils/DateUtil.java | 21 server/platform/src/main/java/com/doumee/task/ScheduleTool.java | 12 server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java | 74 -- admin/src/views/combo/components/Edit.vue | 8 server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/TestHex.java | 32 server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java | 3 server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 103 ++- 45 files changed, 956 insertions(+), 530 deletions(-) diff --git a/admin/package-lock.json b/admin/package-lock.json index dcbeba0..92bcd97 100644 --- a/admin/package-lock.json +++ b/admin/package-lock.json @@ -5266,6 +5266,11 @@ "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", "dev": true }, + "dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==" + }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", diff --git a/admin/package.json b/admin/package.json index 228ca86..56f3575 100644 --- a/admin/package.json +++ b/admin/package.json @@ -21,6 +21,7 @@ "@wangeditor/editor-for-vue": "^1.0.2", "axios": "^0.21.1", "core-js": "^3.6.5", + "dayjs": "^1.11.13", "echarts": "^5.4.2", "ele-calendar": "^2.0.0", "element-ui": "^2.15.13", diff --git a/admin/src/api/business/combo.js b/admin/src/api/business/combo.js index 6a6d329..d63366d 100644 --- a/admin/src/api/business/combo.js +++ b/admin/src/api/business/combo.js @@ -10,6 +10,15 @@ trim: true }) } +export function comboUpdatePost(data) { + return request.post('/business/discount/updStatus', data, { + trim: true + }) +} + +export function comboDelPost(id) { + return request.get(`/business/discount/delete/${id}`) +} export function comboListPost(data) { return request.post('/business/discount/page', data, { trim: true @@ -34,7 +43,7 @@ } export function comboReDetailPost(params) { - return request.get('/business/goodsorder/getGoodsorderCanBanlanceDTO', {params}) + return request.get('/business/goodsorder/getGoodsorderCanBanlanceDTO', { params }) } export function comboOrderRefundPost(data) { return request.post('/business/goodsorder/backGoodsorder', data, { @@ -42,7 +51,7 @@ }) } export function comboOrderDetailPost(params) { - return request.get('/business/goodsorder/discountOrderDetail', {params}) + return request.get('/business/goodsorder/discountOrderDetail', { params }) } export function comboListOrderEx(data) { @@ -50,4 +59,34 @@ trim: true, download: true }) +} + +export function comboSalePage(data) { + return request.post('/business/discountMember/page', data, { + trim: true + }) +} +export function comboSaleEx(data) { + return request.post('/business/discountMember/exportExcel', data, { + trim: true, + download: true + }) +} +export function comboSaleAdjust(data) { + return request.post('/business/discountMember/adjust', data, { + trim: true + }) +} +export function comboSaleCancel(data) { + return request.post('/business/discountMember/cancel', data, { + trim: true + }) +} +export function comboSalerDetailPost(id) { + return request.get('/business/discountMember/' + id) +} +export function discountLogLog(data) { + return request.post('/business/discountLog/page', data, { + trim: true + }) } \ No newline at end of file diff --git a/admin/src/components/base/BasePageTemp.vue b/admin/src/components/base/BasePageTemp.vue index af01469..85784ce 100644 --- a/admin/src/components/base/BasePageTemp.vue +++ b/admin/src/components/base/BasePageTemp.vue @@ -1,5 +1,5 @@ <script> -import Pagination from '@/components/common/Pagination' +import Pagination from '@/components/common/Paginations' import QueryForm from '@/components/common/QueryForm' export default { name: 'BasePageTemp', @@ -7,7 +7,7 @@ Pagination, QueryForm, }, - data () { + data() { return { loading: false, pagination: { @@ -21,11 +21,13 @@ } }, methods: { - getList(){}, + getList() { }, clear() { this.filters = {} this.pagination.pageSize = 10 this.pagination.page = 1 + console.log('-----'); + this.getList() }, handleSizeChange(capacity) { diff --git a/admin/src/components/common/Paginations.vue b/admin/src/components/common/Paginations.vue new file mode 100644 index 0000000..384d728 --- /dev/null +++ b/admin/src/components/common/Paginations.vue @@ -0,0 +1,40 @@ +<template> + <div class="table-pagination"> + <el-pagination + :current-page="pagination.page" + :page-sizes="pagination.pageSizes||[10, 20, 30, 40]" + :page-size="pagination.pageSize" + layout="total, sizes, prev, pager, next, jumper" + :total="pagination.total" + @size-change="sizeChange" + @current-change="currentChange" + background> + </el-pagination> + </div> +</template> + +<script> +export default { + name: 'Pagination', + props: { + pagination: { + type: Object, + default: function () { + return {} + } + } + }, + data () { + return { + } + }, + methods: { + sizeChange (value) { + this.$emit('size-change', value) + }, + currentChange (value) { + this.$emit('current-change', value) + } + } +} +</script> diff --git a/admin/src/views/business/bikeRepair.vue b/admin/src/views/business/bikeRepair.vue index 251ce4a..35fc3dd 100644 --- a/admin/src/views/business/bikeRepair.vue +++ b/admin/src/views/business/bikeRepair.vue @@ -107,7 +107,7 @@ import Pagination from '@/components/common/Pagination' import OperaRepairDealWindow from '@/components/business/OperaRepairDealWindow' import RepairDetailWindow from '@/components/business/RepairDetailWindow' -import { formatDateTime } from '@/utils/util' +import dayjs from 'dayjs' import { getFileList } from '@/api/business/bikeRepair' export default { name: 'BikeRepair', @@ -150,7 +150,8 @@ 'field.id': 'id', 'field.main': 'id' }) - // this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' + this.searchForm.startDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00' + this.searchForm.endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59' this.search() }, methods: { diff --git a/admin/src/views/business/bikeRetakeRecord.vue b/admin/src/views/business/bikeRetakeRecord.vue index babeb93..471f844 100644 --- a/admin/src/views/business/bikeRetakeRecord.vue +++ b/admin/src/views/business/bikeRetakeRecord.vue @@ -106,7 +106,7 @@ import BaseTable from '@/components/base/BaseTable' import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' -import { formatDateTime } from '@/utils/util' +import dayjs from 'dayjs' export default { name: 'MemberRides', extends: BaseTable, @@ -165,8 +165,8 @@ 'field.id': 'id', '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.searchForm.startDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00' + this.searchForm.endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59' this.search() }, methods: { diff --git a/admin/src/views/business/goodsorder.vue b/admin/src/views/business/goodsorder.vue index 275e639..41d831a 100644 --- a/admin/src/views/business/goodsorder.vue +++ b/admin/src/views/business/goodsorder.vue @@ -116,7 +116,7 @@ import GoodsOrderDetail from '@/components/business/goodsOrderDetail' import BackGoodsorderWindow from '@/components/business/backGoodsorderWindow' import { getDetail, getGoodsorderCanBanlanceDTO, closerGoodsorder } from '@/api/business/goodsorder' -import { formatDateTime } from '@/utils/util' +import dayjs from 'dayjs' export default { name: 'Goodsorder', extends: BaseTable, @@ -159,7 +159,8 @@ 'field.id': 'id', 'field.main': 'id' }) - // this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' + this.searchForm.startDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00' + this.searchForm.endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59' this.search() }, methods: { diff --git a/admin/src/views/business/memberRides.vue b/admin/src/views/business/memberRides.vue index e9d0139..09a12c2 100644 --- a/admin/src/views/business/memberRides.vue +++ b/admin/src/views/business/memberRides.vue @@ -108,7 +108,7 @@ import BaseTable from '@/components/base/BaseTable' import TableLayout from '@/layouts/TableLayout' import Pagination from '@/components/common/Pagination' -import { formatDateTime } from '@/utils/util' +import dayjs from 'dayjs' export default { name: 'MemberRides', extends: BaseTable, @@ -167,6 +167,8 @@ 'field.id': 'id', 'field.main': 'id' }) + this.searchForm.startDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00' + this.searchForm.endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59' // 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() diff --git a/admin/src/views/business/onlinePayStatistics.vue b/admin/src/views/business/onlinePayStatistics.vue index 55f7ca8..5178a32 100644 --- a/admin/src/views/business/onlinePayStatistics.vue +++ b/admin/src/views/business/onlinePayStatistics.vue @@ -55,7 +55,7 @@ import BaseTable from '@/components/base/BaseTable' import TableLayout from '@/layouts/TableLayout' import { fetchList } from '@/api/business/onlinePayStatistics' -import { formatDateTime } from '@/utils/util' +import dayjs from 'dayjs' export default { name: 'PricingParam', extends: BaseTable, @@ -71,7 +71,8 @@ } }, created () { - // this.searchForm.startDate = formatDateTime(new Date(), 'yyyy-MM-dd') + ' 00:00:00' + this.searchForm.startDate = dayjs().format('YYYY-MM-DD') + ' 00:00:00' + this.searchForm.endDate = dayjs().format('YYYY-MM-DD') + ' 23:59:59' this.search() }, methods: { diff --git a/admin/src/views/combo/components/ComboDetail.vue b/admin/src/views/combo/components/ComboDetail.vue index 6ab44db..ea24c96 100644 --- a/admin/src/views/combo/components/ComboDetail.vue +++ b/admin/src/views/combo/components/ComboDetail.vue @@ -10,13 +10,13 @@ <span class="title">{{ detail.name }}</span> <span class="status">{{ detail.status == '0' ? '宸插惎鐢�' : '绂佺敤' }}</span> </div> - <div class="placeholder9 mt10">姣忔棩閿�鍞檺閲忥細{{ detail.saleDayLimit }}</div> + <div class="placeholder9 mt10">姣忔棩閿�鍞檺閲忥細{{ detail.saleDayLimit || '涓嶉檺棰�' }}</div> </div> </div> <div class="right"> <div class="item"> <div class="key">鎬诲彂鏀炬暟閲�</div> - <div class="value">{{ detail.saleLimit || '涓嶉檺棰�' }}</div> + <div class="value">{{ detail.saleLimit || '-' }}</div> </div> <div class="item"> <div class="key">宸查攢鍞暟閲�</div> @@ -25,15 +25,15 @@ <div class="item"> <div class="key">鍓╀綑鏁伴噺</div> <div v-if="detail.saleLimit" class="value">{{ detail.saleLimit - detail.saleNum }}</div> - <div v-else class="value">涓嶉檺棰�</div> + <div v-else class="value">-</div> </div> </div> </div> <div class="createTime_wrap"> <span class="item">鍒涘缓鏃堕棿锛歿{ detail.createDate }}</span> - <span class="item">鍒涘缓浜猴細{{ detail.creator }}</span> + <span class="item">鍒涘缓浜猴細{{ detail.creatorName }}</span> <span class="item">鏈�鍚庢洿鏂版椂闂达細{{ detail.editDate }}</span> - <span class="item">鏇存柊浜猴細{{ detail.editor }}</span> + <span class="item">鏇存柊浜猴細{{ detail.editorName }}</span> </div> </div> <div class="separate" /> @@ -55,7 +55,7 @@ <div class="line"> <div class="key">濂楅绠�浠嬶細</div> <div class="value"> - <div>{{ detail.desc }}</div> + <div>{{ detail.descs }}</div> </div> </div> @@ -66,22 +66,22 @@ </div> <div class="line"> <div class="key">浣跨敤鏃堕棿锛�</div> - <div class="value" v-if="detail.useType == 0">{{ detail.useStartDate }} 鑷� {{ detail.useEndDate }}</div> - <div class="value" v-if="detail.useType == 1">璐拱鍚巤{ detail.useDays }}澶╁唴鏈夋晥</div> - <div class="value" v-if="detail.useType == 2">鑷獅{ detail.useStartDate }} 鍚� {{ detail.useDays }}澶╁唴鏈夋晥</div> + <div class="value" v-if="detail.useType == 0">{{ detail.useStartDate }} 鑷� {{ detail.useEndDate }}鍐呮湁鏁�</div> + <div class="value" v-if="detail.useType == 1">璐拱鍚庣珛鍗崇敓鏁堬紝鏈夋晥鏈焮{ detail.useDays }}澶�</div> + <div class="value" v-if="detail.useType == 2">鑷獅{ detail.useStartDate }}璧穥{ detail.useDays }}澶╁唴鏈夋晥</div> </div> <div class="line"> <div class="key">閫傜敤鑼冨洿锛�</div> - <div class="value">{{ detail.useWorkday == 1 && '宸ヤ綔鏃�' }} {{ detail.useWorkday && detail.useHoliday && '|' }} {{ detail.useHoliday == 1 && '鑺傚亣鏃�' }}</div> + <div class="value">{{ detail.useWorkday == 1 ? '宸ヤ綔鏃�' : ''}} {{ detail.useWorkday && detail.useHoliday ? '|' : '' }} {{ detail.useHoliday == 1 ? '鑺傚亣鏃�' : '' }}</div> </div> <div class="line"> <div class="key">閫傜敤椤圭洰锛�</div> - <div class="value">{{ detail.isbike == 1 && '鑷杞�' }} {{ detail.isbike && detail.iselecbike && '|' }} {{ detail.iselecbike == 1 && '鐢靛姩杞�' }}</div> + <div class="value">{{ detail.isbike == 1 ? '鑷杞�' : '' }} {{ detail.isbike && detail.iselecbike ? '|' : '' }} {{ detail.iselecbike == 1 ? '鐢靛姩杞�' :'' }}</div> </div> <div class="line"> <div class="key">鎬婚檺棰濓細</div> - <div class="value">{{ detail.saleLimit || '涓嶉檺鍒�' }}</div> + <div class="value">{{ detail.saleLimit || '涓嶉檺棰�' }}</div> </div> <div class="line"> <div class="key">姣忔棩闄愰锛�</div> diff --git a/admin/src/views/combo/components/Edit.vue b/admin/src/views/combo/components/Edit.vue index 51b16fd..ee6f0a0 100644 --- a/admin/src/views/combo/components/Edit.vue +++ b/admin/src/views/combo/components/Edit.vue @@ -100,13 +100,13 @@ </div> </el-form-item> <el-form-item label="鎬婚檺棰�"> - <el-input class="w400" v-model="param.saleLimit" oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 12)" + <el-input class="w400" v-model="param.saleLimit" oninput="value=value.replace(/^(-1+)|[^\d]+/g, '').slice(0, 12)" placeholder="璇疯緭鍏ユ�诲彂鍞暟閲�" v-trim /> <div class="placeholder9">璇疯緭鍏ユ�诲彂鍞暟閲忥紝閿�閲忓ぇ浜庤鏁伴噺鍚庯紝涓嶅啀鏀寔閿�鍞紱涓虹┖琛ㄧず涓嶉檺鍒�</div> </el-form-item> <el-form-item label="鏃ラ檺棰�"> <el-input class="w400" v-model="param.saleDayLimit" - oninput="value=value.replace(/^(0+)|[^\d]+/g, '').slice(0, 12)" placeholder="璇疯緭鍏ュ崟鏃ュ彂鍞暟閲�" v-trim /> + oninput="value=value.replace(/^(-1+)|[^\d]+/g, '').slice(0, 12)" placeholder="璇疯緭鍏ュ崟鏃ュ彂鍞暟閲�" v-trim /> <div class="placeholder9">璇疯緭鍏ユ棩鍙戝敭鏁伴噺锛屽綋鏃ラ攢閲忓ぇ浜庤鏁伴噺鍚庯紝涓嶅啀鏀寔閿�鍞紱涓虹┖琛ㄧず涓嶉檺鍒�</div> </el-form-item> @@ -227,10 +227,10 @@ comboDetailPost(id).then(res => { this.param = res this.$set(this.param, 'saleDate', [res.startDate, res.endDate]) - if (res.useStartDate && res.useEndDate) { + if (res.useStartDate && res.useEndDate && res.type != 0) { this.$set(this.param, 'useDate', [res.useStartDate, res.useEndDate]) } - this.$set(this.param, id, type == 'copy' ? null : this.param.id) + this.$set(this.param, 'id', type == 'copy' ? null : this.param.id) }) }, } diff --git a/admin/src/views/combo/components/OrderDetail.vue b/admin/src/views/combo/components/OrderDetail.vue index 8768d44..7aac679 100644 --- a/admin/src/views/combo/components/OrderDetail.vue +++ b/admin/src/views/combo/components/OrderDetail.vue @@ -1,45 +1,95 @@ <template> - <GlobalWindow :title="title" :visible.sync="visible" :confirm-working="isWorking"> - <div class="title">鏀粯鏄庣粏</div> - <el-table :data="list" stripe border> - <el-table-column prop="id" label="璁㈠崟缂栧彿" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="onlineorderId" label="浜ゆ槗鍗曞彿" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="refundType" label="浜ゆ槗绫诲瀷" width="100px" align="center"> + <GlobalWindow :title="title" width="1100px" :visible.sync="visible" :confirm-working="isWorking"> + <div class="title">璁㈠崟淇℃伅</div> + <div class="info_warp"> + <div class="item"> + <div class="la">璁㈠崟缂栧彿锛�</div> + <div class="val">{{ info.id }}</div> + </div> + <div class="item"> + <div class="la">璁㈠崟鐘舵�侊細</div> + <div class="val">{{ info.status == 1 ? '宸叉敮浠�' : '鏈敮浠�' }}</div> + </div> + <div class="item"> + <div class="la">涓嬪崟鏃堕棿锛�</div> + <div class="val">{{ info.createDate }}</div> + </div> + <div class="item"> + <div class="la">鏀粯鏃堕棿锛�</div> + <div class="val">{{ info.payDate }}</div> + </div> + <div class="item"> + <div class="la">璁㈠崟閲戦锛�</div> + <div class="val">{{ info.money }}</div> + </div> + <div class="item"> + <div class="la">鏀粯鏂瑰紡锛�</div> + <div class="val">{{ info.payWay == 0 ? '寰俊' : '鏀粯瀹�' }}</div> + </div> + <div class="item"> + <div class="la">鏀粯鍗曞彿锛�</div> + <div class="val">{{ info.onlineOrderid }}</div> + </div> + <div class="item"> + <div class="la">瀹屾垚鏃堕棿锛�</div> + <div class="val">{{ info.payDate }}</div> + </div> + <div class="item"> + <div class="la">澶囨敞锛�</div> + <div class="val">{{ info.closeInfo }}</div> + </div> + </div> + <div class="title">涔板淇℃伅</div> + <div class="info_warp"> + <div class="item"> + <div class="la">鍛㈢О锛�</div> + <div class="val">{{ form.member.name }}</div> + </div> + <div class="item"> + <div class="la">鎵嬫満鍙凤細</div> + <div class="val">{{ form.member.phone }}</div> + </div> + <div class="item"> + <div class="la">openId锛�</div> + <div class="val">{{ form.member.openid }}</div> + </div> + </div> + <div class="title">鍟嗗搧淇℃伅</div> + <el-table :data="[goods]" stripe border> + <el-table-column prop="name" min-width="100px" label="濂楅鍗�" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="refundType" label="鏈夋晥鏈�" min-width="160px" align="center"> <template slot-scope="{row}"> - {{ typeToStr(row.refundType) }} + {{ row.useStartDate }} 鑷� {{ row.useEndDate }} </template> </el-table-column> - <el-table-column prop="money" label="浜ゆ槗閲戦(鍏�)" width="100px" align="center"></el-table-column> - <el-table-column prop="payWay" label="娓犻亾" width="100px" align="center"> + <el-table-column label="鏁伴噺" width="80px" align="center"> <template slot-scope="{row}"> - {{ row.payWay==0? '寰俊' : '鏀粯瀹�' }} + <span>1</span> </template> </el-table-column> - <el-table-column prop="payDate" label="浜ゆ槗鏃堕棿" width="150px" align="center"></el-table-column> - + <el-table-column prop="price" label="浠锋牸" width="100px" align="center"></el-table-column> + <el-table-column prop="payWay" label="鐘舵��" width="100px" align="center"> + <template slot-scope="{row}"> + {{ info.status == 1 ? '宸叉敮浠�' : '鏈敮浠�' }} + </template> + </el-table-column> </el-table> - <div class="title">楠戣璁板綍</div> - <el-table - :data="memberRidesList" - stripe - border - > - <el-table-column prop="openid" label="鐢ㄦ埛" width="250px" show-overflow-tooltip align="center"></el-table-column> - <el-table-column prop="bikeCode" label="杞﹁締缂栧彿" width="100px" align="center"></el-table-column> - <el-table-column prop="bikeType" label="杞︾被鍨�" width="200px" align="center"></el-table-column> - <el-table-column prop="rideTime" label="鍊熷嚭鏃堕暱(鍒�)" width="200px" align="center"></el-table-column> - <el-table-column prop="duration" label="璁¤垂鏃堕暱(鍒�)" width="200px" align="center"></el-table-column> - <el-table-column prop="bikeType" label="杞︾被鍨�" width="150px" align="center"></el-table-column> - <el-table-column prop="rentDate" label="鍊熷嚭鏃堕棿" width="150px" align="center"></el-table-column> - <el-table-column prop="backDate" label="杩樿溅鏃堕棿" width="150px" align="center"></el-table-column> - <el-table-column prop="closeStatus" fixed="right" label="缁撶畻鐘舵��" width="100px" align="center"> - <template slot-scope="{row}"> - {{ row.closeStatus == 0 ? '鏈粨绠�' : '宸茬粨绠�' }} + <div v-if="form.refundList && form.refundList.length > 0" class="title">閫�娆句俊鎭�</div> + <el-table v-if="form.refundList && form.refundList.length > 0" :data="form.refundList" stripe border> + <el-table-column prop="createDate" label="閫�娆炬椂闂�" min-width="180px" show-overflow-tooltip align="center"></el-table-column> + <el-table-column prop="money" label="閫�娆鹃噾棰�" min-width="100px" align="center"></el-table-column> + <el-table-column label="鐘舵��" min-width="100px" align="center"> + <template v-slot="{row}"> + <span v-if="row.status == 0">棰勯��娆�</span> + <span v-if="row.status == 1">閫�娆惧け璐�</span> + <span v-if="row.status == 2">閫�娆惧畬鎴�</span> </template> </el-table-column> + <el-table-column prop="reason" label="閫�娆惧娉�" min-width="100px" align="center"></el-table-column> + <el-table-column prop="creatorName" label="鎿嶄綔浜�" min-width="100px" align="center"></el-table-column> </el-table> <div slot="footer"> - <el-button @click="visible=false">杩斿洖</el-button> + <el-button @click="visible = false">杩斿洖</el-button> </div> </GlobalWindow> </template> @@ -52,12 +102,14 @@ name: 'OperaSitesWindow', extends: BaseOpera, components: { GlobalWindow }, - data () { + data() { return { // 琛ㄥ崟鏁版嵁 form: { - goodsorderId: '' + member: {} }, + info: {}, + goods: {}, list: [], memberRidesList: [], // 0缁撶畻閫�娆� 1寮哄埗缁撶畻閫�娆� 2缁撶畻鍚庨��娆� [99: 铏氭嫙type 鏀粯鎶奸噾] @@ -78,7 +130,11 @@ this.title = title this.visible = true // 鏂板缓 + console.log('target', target) + this.form = target + this.info = target.goodsOrder + this.goods = target.discountMember this.$nextTick(() => { this.list = target.payOrderDTOList this.memberRidesList = target.memberRidesList @@ -86,7 +142,7 @@ }) }, typeToStr(type) { - let temp = this.type.find(item => item.id == type ) + let temp = this.type.find(item => item.id == type) return temp ? temp.label : '-' } }, @@ -94,7 +150,23 @@ } </script> -<style scoped> +<style scoped lang="scss"> +.info_warp { + display: flex; + flex-wrap: wrap; + font-size: 14px; + + .item { + display: flex; + width: 33.3%; + margin-bottom: 6px; + + .val { + color: #666666; + } + } +} + .title { font-size: 18px; font-weight: 600; diff --git a/admin/src/views/combo/components/Refund.vue b/admin/src/views/combo/components/Refund.vue index 776030f..c619c90 100644 --- a/admin/src/views/combo/components/Refund.vue +++ b/admin/src/views/combo/components/Refund.vue @@ -72,7 +72,8 @@ comboReDetailPost({ orderId: id }).then(res => { if (res) { this.form = res - this.form.backType = 0 + // this.form.backType = 0 + this.$set(this.form, 'backType', 0) this.form.orderId = id } }) diff --git a/admin/src/views/combo/components/SaleDetail.vue b/admin/src/views/combo/components/SaleDetail.vue new file mode 100644 index 0000000..8fb3e0b --- /dev/null +++ b/admin/src/views/combo/components/SaleDetail.vue @@ -0,0 +1,139 @@ +<template> + <GlobalWindow title="濂楅鍗¤鎯�" :visible.sync="isShowModal" width="1000px" @close="close" @confirm="close"> + <div> + <div class="modal_title">濂楅鍚嶇О锛歿{ detail.name }}</div> + <div class="place"> + <span>濂楅鍙凤細{{ detail.code }}</span> + <span v-if="detail.useType == 1">鏈夋晥鏈燂細{{ detail.useStartDate }}鑷硔{ detail.useEndDate }}</span> + <span v-if="detail.useType == 0">鏈夋晥鏈燂細{{ detail.useStartDate }}鑷硔{ detail.useEndDate }}</span> + <span v-if="detail.useType == 2">鏈夋晥鏈燂細{{ detail.useStartDate }}鑷硔{ detail.useEndDate }}</span> + </div> + <div class="df_ac"> + <el-tabs style="flex: 1;" v-model="activeTab" @tab-click="handleClick"> + <el-tab-pane label="濂楅浣跨敤鏄庣粏" name="0" /> + <el-tab-pane label="濂楅鎿嶄綔璁板綍" name="2" /> + </el-tabs> + <div style="border-bottom: 2px solid #e5e7ec; margin-top: 1px;">{{ activeTab == 0 ? '浣跨敤鎯呭喌' : '鎿嶄綔鎯呭喌' }}锛歿{ pagination.total }}娆�</div> + </div> + <el-table v-if="activeTab == 0" v-loading="loading" :data="list" stripe border> + <el-table-column prop="createDate" align="center" label="浣跨敤鏃堕棿" min-width="120" show-overflow-tooltip /> + <el-table-column prop="goodsorderId" align="center" label="鍏宠仈璁㈠崟" min-width="140" show-overflow-tooltip /> + <el-table-column prop="" align="center" label="楠戣溅鏃堕暱" min-width="80" show-overflow-tooltip> + <template v-slot="{ row }"> + {{ row.rideTime }}鍒嗛挓 + </template> + </el-table-column> + <el-table-column prop="ridePrice" align="center" label="鎶垫墸閲戦" min-width="100" show-overflow-tooltip /> + </el-table> + <el-table v-if="activeTab == 2" v-loading="loading" :data="list" stripe border> + <el-table-column prop="createDate" align="center" label="鎿嶄綔鏃堕棿" min-width="120" show-overflow-tooltip /> + <el-table-column prop="info" align="center" label="鎿嶄綔绫诲瀷" min-width="100" show-overflow-tooltip> + <template v-slot="{ row }"> + <span v-if="row.type == 0">鐢ㄦ埛楠戣浣跨敤</span> + <span v-if="row.type == 1">濂楅浣滃簾</span> + <span v-if="row.type == 2">濂楅璋冩暣</span> + </template> + </el-table-column> + <el-table-column prop="editInfo" align="center" label="鎿嶄綔澶囨敞" min-width="200" show-overflow-tooltip /> + <el-table-column prop="creatorName" align="center" label="鎿嶄綔浜�" min-width="80" show-overflow-tooltip /> + </el-table> + <div class="table_btns"> + <Pagination @size-change="handleSizeChange" @current-change="getList" :pagination="pagination" /> + </div> + </div> + </GlobalWindow> +</template> +<script> +import { comboSalerDetailPost, discountLogLog } from '@/api/business/combo.js' +import GlobalWindow from '@/components/common/GlobalWindow' +import BasePageTemp from '@/components/base/BasePageTemp' +export default { + name: 'ComboDetail', + extends: BasePageTemp, + components: { + GlobalWindow + }, + data() { + return { + isShowModal: false, + activeTab: '0', + detail: {}, + pagination: { + page: 1, + rows: 10 + }, + totalCount: 0, + list: [], + loading: false + } + }, + created() { + // this.detail = this.$route.query + // this.comboDetail() + }, + methods: { + getDetail(row) { + comboSalerDetailPost(row.id).then(res => { + this.detail = res + this.activeTab = '0' + this.getList() + }, () => { + + }) + }, + handleClick(val) { + this.getList() + }, + getList(page) { + const { pagination, activeTab, detail } = this + this.loading = true + if (page) { pagination.page = page } + discountLogLog({ + model: { + type: activeTab, + discountMemberId: detail.id + }, + capacity: pagination.pageSize, + page: pagination.page, + }).then(res => { + this.loading = false + this.list = res.records || [] + this.pagination.total = res.total || 0 + }, () => { + this.loading = false + }) + }, + close() { + this.isShowModal = false + this.$emit('close') + }, + currentPageChange(val) { + this.pagination.page = val + this.comboDetail() + }, + pageSizeChange(val) { + this.pagination.rows = val + this.comboDetail() + } + } +} +</script> + +<style lang="scss" scoped> +.modal_title { + font-size: 18px; + font-weight: 500; + margin-bottom: 6px; +} + +.place { + color: #999999; + font-size: 13px; + display: flex; + margin-bottom: 8px; + + span { + margin-right: 60px; + } +} +</style> \ No newline at end of file diff --git a/admin/src/views/combo/index.vue b/admin/src/views/combo/index.vue index d32263e..5951710 100644 --- a/admin/src/views/combo/index.vue +++ b/admin/src/views/combo/index.vue @@ -49,7 +49,7 @@ <div> <span v-if="row.status == 0" @click="handleEdit(row, 'copy')" class="primaryColor pointer">澶嶅埗</span> <span v-if="row.status == 1" @click="handleEdit(row)" class="primaryColor pointer mr10">缂栬緫</span> - <span v-if="row.status == 1" @click="handleDetail(row)" class="red pointer">鍒犻櫎</span> + <span v-if="row.status == 1" @click="handleDel(row)" class="red pointer">鍒犻櫎</span> </div> </template> </el-table-column> @@ -68,7 +68,7 @@ import TableLayout from '@/layouts/TableLayout' import Edit from './components/Edit' import ComboDetail from './components/ComboDetail.vue' -import { comboListPost, comboEditPost } from '@/api/business/combo.js' +import { comboListPost, comboUpdatePost, comboDelPost } from '@/api/business/combo.js' import { Message } from 'element-ui' export default { extends: BasePageTemp, @@ -130,12 +130,26 @@ }) }, changeStatus(row) { - comboEditPost({ ...row }).then(res => { + comboUpdatePost({ ...row }).then(res => { if (res.code == 200) { return Message.success('鏇存柊鎴愬姛') } }) }, + handleDel(row) { + this.$confirm('鎮ㄧ‘璁よ鍒犻櫎褰撳墠濂楅鍚楋紵', '鎻愮ず', { + confirmButtonText: '纭畾', + cancelButtonText: '鍙栨秷', + type: 'warning', + }).then(() => { + comboDelPost(row.id).then(res => { + if (res) { + Message.success('鍒犻櫎鎴愬姛') + this.getList() + } + }) + }) + }, handleEdit(row, type = 'edit') { this.isShowEdit = true this.$nextTick(() => { diff --git a/admin/src/views/combo/order.vue b/admin/src/views/combo/order.vue index 949d402..bee9272 100644 --- a/admin/src/views/combo/order.vue +++ b/admin/src/views/combo/order.vue @@ -6,7 +6,7 @@ <el-button type="primary" @click="handleEx()">瀵煎嚭</el-button> </div> <el-table v-loading="loading" :data="list" stripe border> - <el-table-column prop="code" align="center" label="璁㈠崟缂栧彿" min-width="180" show-overflow-tooltip> + <el-table-column prop="code" align="center" label="璁㈠崟缂栧彿" min-width="200" show-overflow-tooltip> <template scope="{row}"> <span @click="handleDetail(row.id)" class="primaryColor pointer">{{ row.code }}</span> </template> @@ -15,7 +15,7 @@ <el-table-column prop="money" align="center" label="鍚堣(鍏�)" min-width="80" show-overflow-tooltip /> <el-table-column prop="money" align="center" label="瀹炰粯(鍏�)" min-width="80" show-overflow-tooltip /> <el-table-column prop="refundMoney" align="center" label="宸查��閲戦(鍏�)" min-width="100" show-overflow-tooltip /> - <el-table-column prop="memberId" align="center" label="鐢ㄦ埛淇℃伅" min-width="140" show-overflow-tooltip /> + <el-table-column prop="openid" align="center" label="鐢ㄦ埛淇℃伅" min-width="200" show-overflow-tooltip /> <el-table-column prop="payWay" align="center" label="鏀粯鏂瑰紡" min-width="80" show-overflow-tooltip> <template v-slot="{ row }"> <span v-if="row.payWay == 0">寰俊鏀粯</span> @@ -27,12 +27,19 @@ <span>灏忕▼搴忕</span> </template> </el-table-column> + <el-table-column prop="payWay" align="center" label="璁㈠崟鐘舵��" min-width="80" show-overflow-tooltip> + <template v-slot="{ row }"> + <span v-if="row.status == 0">鏈敮浠�</span> + <span v-if="row.status == 1">宸叉敮浠�</span> + </template> + </el-table-column> <el-table-column prop="refundUserName" align="center" label="鎿嶄綔浜�" min-width="80" show-overflow-tooltip /> - <el-table-column prop="createDate" align="center" label="鍒涘缓鏃堕棿" min-width="140" show-overflow-tooltip /> - <el-table-column label="鎿嶄綔" fixed="right" align="center" min-width="80" show-overflow-tooltip> + <el-table-column prop="createDate" align="center" label="鍒涘缓鏃堕棿" min-width="160" show-overflow-tooltip /> + <el-table-column label="鎿嶄綔" fixed="right" align="center" min-width="120" show-overflow-tooltip> <template v-slot="{ row }"> <span @click="handleDetail(row.id)" class="primaryColor pointer">鏌ョ湅璇︽儏</span> - <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)" class="primaryColor pointer ml10">閫�娆�</span> + <span v-if="row.status == 1 && (row.refundMoney < row.money)" @click="handRefund(row.id)" + class="primaryColor pointer ml10">閫�娆�</span> </template> </el-table-column> </el-table> @@ -55,6 +62,7 @@ comboListOrderEx, comboOrderDetailPost } from '@/api/business/combo.js' +import dayjs from 'dayjs' export default { extends: BasePageTemp, components: { @@ -73,19 +81,22 @@ label: '璁㈠崟缂栧彿', }, { - filed: 'name', + filed: 'discountName', type: 'input', label: '濂楅鍗�', placeholder: '璇疯緭鍏ュ崱鍚嶇О', }, { - filed: 'pay', + filed: 'payWay', type: 'select', label: '鏀粯鏂瑰紡', - options: [] + options: [ + { label: '寰俊', value: 0 }, + { label: '鏀粯瀹�', value: 1 }, + ] }, { - filed: 'status', + filed: 'payStatus', type: 'select', label: '璁㈠崟鐘舵��', options: [ @@ -94,12 +105,12 @@ ] }, { - filed: 'time', - type: 'date', + filed: 'selDate', + type: 'daterange', label: '鏀粯鏃堕棿', }, { - filed: 'username', + filed: 'openid', type: 'input', label: '鐢ㄦ埛淇℃伅', }, @@ -109,6 +120,8 @@ } }, created() { + let date = dayjs().format('YYYY-MM-DD') + this.$set(this.filters, 'selDate', [date, date]) this.getList() // this.initData() }, @@ -117,22 +130,36 @@ this.$refs.RefundRef.open(id) }, handleDetail(id) { - comboOrderDetailPost({id}) + comboOrderDetailPost({ id }) .then(res => { - this.$refs.OrderDetailRef.open('璁㈠崟璇︽儏', res) + if (res) { + this.$refs.OrderDetailRef.open('璁㈠崟璇︽儏', res) + } + }) .catch(err => { this.$tip.apiFailed(err) }) }, handleEx() { + const { pagination, filters } = this this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') .then(() => { this.loading = true + if (filters.selDate && filters.selDate.length > 0) { + filters.startDate = filters.selDate[0] + ' 00:00:00' + filters.endDate = filters.selDate[1] + ' 00:00:00' + } else { + filters.startDate = null + filters.endDate = null + } comboListOrderEx({ page: 1, capacity: 1000000, - model: this.filters + model: { + ...filters, + type: 1 + }, }) .then(response => { this.download(response) @@ -154,6 +181,13 @@ getList(page) { const { pagination, filters } = this this.loading = true + if (filters.selDate && filters.selDate.length > 0) { + filters.startDate = filters.selDate[0] + ' 00:00:00' + filters.endDate = filters.selDate[1] + ' 00:00:00' + } else { + filters.startDate = null + filters.endDate = null + } if (page) { pagination.page = page } comboOrderPost({ model: { diff --git a/admin/src/views/combo/record.vue b/admin/src/views/combo/record.vue index a30b1b8..4333ac9 100644 --- a/admin/src/views/combo/record.vue +++ b/admin/src/views/combo/record.vue @@ -1,72 +1,49 @@ <template> <div class="main_app"> <Breadcrumb /> - <QueryForm v-model="querys" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clearQueryForm"> - <template #btns> - <el-button v-if="meta.indexOf('MealsUseDetailExport') > -1" type="primary" - @click="comboRecordExport">瀵煎嚭</el-button> - </template> - <template #indate> - <el-date-picker v-model="querys.indate" type="datetimerange" range-separator="鑷�" start-placeholder="寮�濮嬫棩鏈�" - end-placeholder="缁撴潫鏃ユ湡" format="yyyy-MM-dd HH:mm:ss" value-format="yyyy-MM-dd HH:mm:ss" class="w400" - :picker-options="pickerOptions" /> - </template> + <QueryForm v-model="filters" :query-form-config="queryFormConfig" @handleQuery="getList(1)" @clear="clearQueryForm"> </QueryForm> <div class="table_btns"> - <el-button v-preventReClick plain type="primary" @click="handleEx">瀵煎嚭</el-button> - <el-button v-preventReClick plain type="danger" @click="openModal('zuofei')">浣滃簾</el-button> - <el-button v-preventReClick plain @click="openModal('tiaozheng')">濂楅璋冩暣</el-button> + <el-button plain type="primary" @click="handleEx">瀵煎嚭</el-button> + <el-button plain type="danger" @click="openModal('zuofei')">浣滃簾</el-button> + <el-button plain @click="openModal('tiaozheng')">濂楅璋冩暣</el-button> </div> <el-table v-loading="loading" :data="list" stripe border @selection-change="handleSelectionChange"> <el-table-column fixed="left" align="center" type="selection" :selectable="handleDisable" width="55" /> - <el-table-column align="center" label="濂楅绁ㄥ彿" width="300" show-overflow-tooltip> + <el-table-column align="center" label="濂楅绁ㄥ彿" min-width="160" show-overflow-tooltip> <template v-slot="scope"> <span class="primaryColor pointer" @click="comboDetail(scope.row)">{{ - scope.row.id - }}</span> + scope.row.code + }}</span> </template> </el-table-column> - <el-table-column align="center" label="濂楅绫诲瀷" width="120"> + <el-table-column align="center" label="濂楅绫诲瀷" min-width="80"> <template v-slot="scope"> - <span v-if="scope.row.mealsType === '0'">闂ㄧエ娆″崱</span> - <span v-if="scope.row.mealsType === '1'">闂ㄧエ鏈熼檺鍗�</span> - <span v-if="scope.row.mealsType === '2'">棰勫畾娆″崱</span> - <span v-if="scope.row.mealsType === '3'">璇剧▼棰勭害娆″崱</span> - <span v-if="scope.row.mealsType === '4'">璇剧▼鏈熼檺鍗�</span> + <span v-if="scope.row.type == '0'">鏈熼檺鍗�</span> + <span v-if="scope.row.type == '1'">娆″崱</span> </template> </el-table-column> - <el-table-column align="center" label="濂楅鍚嶇О" show-overflow-tooltip width="160" prop="mealsName" /> - <el-table-column align="center" label="鐢ㄦ埛淇℃伅" min-width="240" prop="memberInfo" show-overflow-tooltip /> - <el-table-column align="center" label="浣跨敤娆℃暟" width="80" prop="useCount"> + <el-table-column align="center" label="濂楅鍚嶇О" show-overflow-tooltip min-width="100" prop="name" /> + <el-table-column align="center" label="鐢ㄦ埛淇℃伅" min-width="100" prop="openid" show-overflow-tooltip /> + <el-table-column align="center" label="浣跨敤娆℃暟" min-width="80" prop="useTimes"> + </el-table-column> + <el-table-column align="center" label="鏈夋晥鏃ユ湡" min-width="200" prop="remainCount"> <template v-slot="scope"> - <span v-if="scope.row.mealsType === '1'">-</span> - <span v-else>{{ scope.row.useCount }}</span> + <span>{{ scope.row.useStartDate }}鑷硔{ scope.row.useEndDate }}</span> </template> </el-table-column> - <el-table-column align="center" label="鏈夋晥鏃ユ湡" width="80" prop="remainCount"> + <el-table-column align="center" label="濂楅鐘舵��" min-width="80"> <template v-slot="scope"> - <span v-if="scope.row.mealsType === '1'">-</span> - <span v-else>{{ scope.row.remainCount }}</span> + <span v-if="scope.row.status == '0'" class="text_success">姝e父</span> + <span v-if="scope.row.status == '1'" class="text_warning">浣滃簾</span> + <span v-if="scope.row.status == '2'" class="text-danger">寰呮敮浠�</span> </template> </el-table-column> - <el-table-column fixed="right" align="center" label="濂楅鐘舵��" width="80"> - <template v-slot="scope"> - <span v-if="scope.row.status === '0'" class="text_success">姝e父</span> - <span v-if="scope.row.status === '1'" class="text_warning">鍐荤粨</span> - <span v-if="scope.row.status === '2'" class="text-danger">浣滃簾</span> - <span v-if="scope.row.status === '3'" class="text-danger">澶辨晥</span> - </template> - </el-table-column> - <el-table-column align="center" label="鏈夋晥鏃ユ湡" width="120" prop="validTime" /> - <el-table-column align="center" label="鎿嶄綔" fixed="right" width="150"> + <el-table-column align="center" label="鎿嶄綔" fixed="right" min-width="150"> <template v-slot="scope"> <template> - <el-button v-if=" - meta.indexOf('MealsMemberPartRefund') > -1 && - (scope.row.status == '0' || scope.row.status == '1') - " type="text" @click="rowClickRefund(scope.row)">閫�娆�</el-button> - <el-button v-if="scope.row.status == '0'" type="text" - @click="getServiceChargePriceBtn('2', scope.row.id)">鍐荤粨</el-button> + <el-button v-if="scope.row.status == '0'" type="text" @click="openCan(scope.row)">浣滃簾</el-button> + <span v-else>-</span> </template> </template> </el-table-column> @@ -78,14 +55,14 @@ <el-dialog title="濂楅璋冩暣" :visible.sync="isShowAdjust" width="500px"> <div class="adjust_modal"> <div style="margin-top: -30px; margin-bottom: 10px;"> - <el-radio v-model="adjustData.aa" label="1">宸查�夊綋鍓�2鏉℃暟鎹�</el-radio> + <el-radio v-model="adjustData.flag" label="0">宸查�墈{ selList.length }}鏉℃暟鎹�</el-radio> </div> <div style="margin-bottom: 16px;"> - <el-radio v-model="adjustData.aa" label="1">宸查�夌幇鏈夌瓫閫夋潯浠朵笅鍏ㄩ儴鐨�11鏉℃暟鎹�</el-radio> + <el-radio v-model="adjustData.flag" label="1">閫夌幇鏈夌瓫閫夋潯浠朵笅鍏ㄩ儴鐨剓{ pagination.total }}鏉℃暟鎹�</el-radio> </div> <div class="df_ac mb5"> <span class="key">鏈夋晥鏈熷鍔狅細</span> - <el-input v-model="adjustData.addTime" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" /> + <el-input v-model="adjustData.addNum" oninput="value=value.replace(/[^\d]/g,'')" class="flex1 mr10" /> <span>澶�</span> </div> <div class="df_ac mb20"> @@ -99,26 +76,43 @@ </div> <span slot="footer" class="dialog-footer"> <el-button @click="isShowAdjust = false">鍙栨秷</el-button> - <el-button v-preventReClick type="primary" :loading="subLoading" @click="handleModelEnter">纭畾</el-button> + <el-button type="primary" :loading="subLoading" @click="handleModelEnter">纭畾</el-button> + </span> + </el-dialog> + <el-dialog title="濂楅浣滃簾" :visible.sync="isShowCan" width="500px"> + <div class="adjust_modal" style="margin-top: -30px;"> + <div class="red" style="font-size: 16px;">纭畾浣滃簾閫変腑濂楅鍚楋紵浣滃簾鍚庯紝濂楅涓嶅彲浣跨敤</div> + <div class="df_ac mt10"> + <el-input type="textarea" v-model="remarkCan" placeholder="璇锋寜瑕佹眰杈撳叆澶囨敞璇存槑锛岄潪蹇呭~" /> + </div> + </div> + <span slot="footer" class="dialog-footer"> + <el-button @click="isShowCan = false">鍙栨秷</el-button> + <el-button type="primary" :loading="subLoading" @click="handleCan">纭畾</el-button> </span> </el-dialog> <Refund v-if="isShowRefund" ref="RefundRef" @close="isShowRefund = false" @success="refundSuccess" /> <Detail v-if="isShowDetail" ref="detailRef" /> - <orderDialog ref="child" @orderSuccess="getList()" /> + <Detail ref="DetailRef" /> </div> </template> <script> -import { pickerOptions } from './components/config' import BasePageTemp from '@/components/base/BasePageTemp' import Breadcrumb from '@/layouts/Breadcrumb' -// import Detail from '../comboDetail' -// import Refund from './refund.vue' +import Detail from './components/SaleDetail.vue' +import { Message } from 'element-ui' +import { + comboSalePage, + comboSaleEx, + comboSaleCancel, + comboSaleAdjust, +} from '@/api/business/combo.js' export default { name: 'SalesRecord', extends: BasePageTemp, - components: { Breadcrumb }, + components: { Breadcrumb, Detail }, data() { return { exportLoading: false, @@ -126,19 +120,19 @@ isShowRefund: false, queryFormConfig: { formItems: [{ - filed: 'id', + filed: 'code', type: 'input', label: '濂楅绁ㄥ彿', placeholder: '璇疯緭鍏ュ椁愬彿', clearable: true }, { - filed: 'mealsName', + filed: 'name', type: 'input', label: '濂楅鍚嶇О', placeholder: '璇疯緭鍏ュ椁愬悕绉�', clearable: true }, { - filed: 'memberSearchValue', + filed: 'openid', type: 'input', label: '鐢ㄦ埛淇℃伅', clearable: true @@ -150,13 +144,12 @@ clearable: true, options: [ { value: '0', label: '姝e父' }, - { value: '1', label: '鍐荤粨' }, - { value: '2', label: '浣滃簾' }, - { value: '3', label: '澶辨晥' }] + { value: '1', label: '浣滃簾' }, + // { value: '2', label: '寰呮敮浠�' } + ] }], online: true }, - pickerOptions, querys: { id: '', mealsName: '', @@ -167,17 +160,21 @@ saleRecordList: [], saleRecordTotal: 0, - selectSalesList: [], + selList: [], saleRecordLoading: false, subLoading: false, - isShowModal: false, + isShowCan: false, ModalTitle: '', ModalText: '', ModelRemark: '', + remarkCan: '', // 猬囷笍adjust璋冩暣鐩稿叧 isShowAdjust: false, + isShowCan: false, + canList: [], adjustData: { + flag: 0, addNum: '', addTime: '' }, @@ -187,7 +184,7 @@ }, created() { // this.meta = this.$route.meta.buttons || [] - // this.getList(1) + this.getList(1) }, methods: { rowClickRefund(row) { @@ -201,106 +198,67 @@ this.isShowRefund = false this.getList() }, - getServiceChargePriceBtn(type, mealsMemberId) { - this.serviceChargeId = mealsMemberId - getServiceChargePrice({ - param: { - type, - mealsMemberId - } - }).then((res) => { - if (res.errorCode === '000000') { - this.serviceChargePrice = res.record.price - this.openModal('dongjie') - } - }) + handleEx() { + const { pagination, filters } = this + this.$dialog.exportConfirm('纭瀵煎嚭鍚楋紵') + .then(() => { + this.loading = true + comboSaleEx({ + page: 1, + capacity: 1000000, + model: filters + }) + .then(response => { + this.download(response) + }) + .catch(e => { + this.$tip.apiFailed(e) + }) + .finally(() => { + this.loading = false + }) + }) .catch(() => { }) }, - handleEx() { - const { querys } = this - this.exportLoading = true - recordExport({ - param: { - ...querys - } - }).then((res) => { - this.exportLoading = false - if (res.errorCode === '000000') { - const a = document.createElement('a') // 鍒涘缓涓�涓猘鏍囩鍏冪礌 - a.style.display = 'none' // 璁剧疆鍏冪礌涓嶅彲瑙� - a.href = res.record.showUrl // 璁剧疆涓嬭浇鍦板潃 - document.body.appendChild(a) // 鍔犲叆 - a.click() // 瑙﹀彂鐐瑰嚮,涓嬭浇 - document.body.removeChild(a) // - this.$message.success('瀵煎嚭鎴愬姛') - } - }) - .catch(() => { - this.exportLoading = false - }) + openCan(row) { + this.isShowCan = true + this.canList = [row] }, - handleDisable(row, index) { - if (row.status === '2') { - return false - } else { - return true - } + handleDisable(row) { + // return row.status == 0 + return true }, // 鏌ヨ琛ㄦ牸鏁版嵁 getList(page) { - const { querys, pagination } = this - if (page) { - pagination.page = page - this.pagination.page = Number(page) - } - if (querys.indate && querys.indate.length > 0) { - querys.startTime = querys.indate[0] - querys.endTime = querys.indate[1] - } else { - querys.startTime = null - querys.endTime = null - } - pagination.firstQueryTime = parseTime(new Date()) - this.saleRecordLoading = true - comboSalesRecordPost({ - pagination, param: { - ...querys, - venueId: sessionStorage.getItem('venueId') - } + const { pagination, filters } = this + this.loading = true + if (page) { pagination.page = page } + comboSalePage({ + model: { + ...filters + }, + capacity: pagination.pageSize, + page: pagination.page, }).then(res => { - this.saleRecordLoading = false - if (res.errorCode === '000000') { - this.saleRecordLoading = false - this.saleRecordTotal = res.totalCount - this.saleRecordList = res.recordList - if (res.totalCount && res.recordList.length === 0 && pagination.page > 1) { - this.getList(Math.ceil(res.totalCount / pagination.rows)) - } - } - }).catch(() => { - this.saleRecordLoading = false + this.loading = false + this.list = res.records || [] + this.pagination.total = res.total || 0 + }, () => { + this.loading = false }) }, clearQueryForm() { // eslint-disable-next-line no-unused-vars - this.querys = {} + this.filters = {} this.getList(1) }, // 鎵撳紑modal 鍐荤粨 瑙e喕 浣滃簾 openModal(type) { - const { selectSalesList } = this + const { selList } = this this.ModelRemark = '' this.adjustData.addNum = '' this.adjustData.addTime = '' switch (type) { - case 'dongjie': - this.ModalTitle = '濂楅鍐荤粨' - this.ModalText = '纭畾鍐荤粨閫変腑濂楅鍚楋紵鍐荤粨鍚庯紝濂楅灏嗘棤娉曚娇鐢�' - break - case 'jiedong': - this.ModalTitle = '濂楅瑙e喕' - this.ModalText = '纭畾瑙e喕閫変腑濂楅鍚楋紵瑙e喕鍚庯紝濂楅鍙珛鍗崇敓鏁堜娇鐢�' - break case 'zuofei': this.ModalTitle = '濂楅浣滃簾' this.ModalText = '纭畾浣滃簾閫変腑濂楅鍚楋紵浣滃簾鍚庯紝濂楅涓嶅彲浣跨敤' @@ -311,28 +269,21 @@ default: break } - if (selectSalesList.length === 0 && type !== 'dongjie') { - return this.$message.warning(`璇峰厛閫夋嫨瑕�${this.ModalTitle.slice(2)}鐨勫椁恅) + if (selList.length === 0 && type == 'zuofei') { + return Message.warning(`璇峰厛閫夋嫨瑕�${this.ModalTitle.slice(2)}鐨勫椁恅) } if (this.ModalTitle === '濂楅璋冩暣') { this.isShowAdjust = true + this.adjustData = { + flag: '0' + } } else { - this.isShowModal = true + this.isShowCan = true } }, // 纭畾 鍐荤粨 瑙e喕 浣滃簾 handleModelEnter() { - // if (!this.ModelRemark) { - // this.$message.warning('鎿嶄綔澶囨敞蹇呭~') - // return - // } switch (this.ModalTitle) { - case '濂楅鍐荤粨': - this.Freeze() - break - case '濂楅瑙e喕': - this.Unfreeze() - break case '濂楅浣滃簾': this.cancellation() break @@ -343,92 +294,27 @@ break } }, - // 鍐荤粨 - Freeze() { - const that = this - const data = { - type: '1', - handleRemake: this.ModelRemark, - isCreateOrder: '1', - id: this.serviceChargeId - } - this.subLoading = true - handleComboSalesPost({ param: { ...data } }).then(res => { - this.subLoading = false - this.isShowModal = false - if (res.errorCode === '000000') { - const obj = res.record - if (obj && obj.price) { - obj.goodsInfos = obj.serviceChargeOrderInfo - obj.allPrice = obj.price - this.$refs.child.continuePay(obj, 'handlingFees') - } else { - this.$message.success('鍐荤粨鎴愬姛') - this.getList() - } - // - } else if (res.errorCode === '200001') { - this.$confirm('瀛樺湪鏈鐞嗚鍗�, 鏄惁璺宠浆?', '鎻愮ず', { - confirmButtonText: '纭畾', - cancelButtonText: '鍙栨秷', - type: 'warning', - callback: () => { }, - beforeClose: (action, ctx, close) => { - if (action !== 'confirm') { - close() - return - } - ctx.confirmButtonLoading = true - that.$router.push({ name: 'HandlingFees' }) - } - }).finally(() => { - this.subLoading = false - this.isShowModal = false - }) - } - }) - }, - // 瑙e喕 - async Unfreeze() { - const data = { - type: '2', - handleRemake: this.ModelRemark, - id: this.selectSalesList.map(i => i.id).join(',') - } - this.subLoading = true - const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { - this.subLoading = false - this.isShowModal = false - }) - this.subLoading = false - this.isShowModal = false - if (res && res.errorCode === '000000') { - this.$message.success('瑙e喕鎴愬姛') - this.getList() - } - }, // 璋冩暣 async handleAdjust() { if (!this.adjustData.addNum && !this.adjustData.addTime) { - return this.$message.warning('璇疯緭鍏ヨ璋冩暣鐨勬湁鏁堟湡澶╂暟鎴栬�呬綑閲忔鏁�') + return Message.warning('璇疯緭鍏ヨ璋冩暣鐨勬湁鏁堟湡澶╂暟鎴栬�呬綑閲忔鏁�') } const data = { - type: '3', - handleRemake: this.ModelRemark, - addNum: this.adjustData.addNum || 0, - addTime: this.adjustData.addTime || 0, - id: this.selectSalesList.map(i => i.id).join(',') + info: this.ModelRemark, + addDays: this.adjustData.addNum || 0, + choseIdList: this.adjustData.flag == 0 ? this.selList.map(i => i.id) : [], + ...this.filters } this.subLoading = true - const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { + const res = await comboSaleAdjust({ ...data }).catch(() => { this.subLoading = false - this.isShowModal = false + this.isShowCan = false }) this.subLoading = false - this.isShowModal = false - if (res && res.errorCode === '000000') { - this.$message.success('濂楅璋冩暣鎴愬姛') + this.isShowCan = false + if (res) { + Message.success('濂楅璋冩暣鎴愬姛') this.getList() this.isShowAdjust = false } @@ -436,36 +322,46 @@ // 浣滃簾 async cancellation() { const data = { - type: '4', - handleRemake: this.ModelRemark, - id: this.selectSalesList.map(i => i.id).join(',') + handleRemake: this.remarkCan, + choseIdList: this.selList.map(i => i.id) } this.subLoading = true - const res = await handleComboSalesPost({ param: { ...data } }).catch(() => { + const res = await comboSaleCancel({ ...data }).catch(() => { this.subLoading = false - this.isShowModal = false + this.isShowCan = false }) this.subLoading = false - this.isShowModal = false - if (res && res.errorCode === '000000') { - this.$message.success('浣滃簾鎴愬姛') + this.isShowCan = false + if (res) { + Message.success('浣滃簾鎴愬姛') + this.getList() + } + }, + async handleCan() { + const data = { + handleRemake: this.remarkCan, + choseIdList: this.canList.map(i => i.id) + } + this.subLoading = true + const res = await comboSaleCancel({ ...data }).catch(() => { + this.subLoading = false + this.isShowCan = false + }) + this.subLoading = false + this.isShowCan = false + if (res) { + Message.success('浣滃簾鎴愬姛') this.getList() } }, handleSelectionChange(val) { - this.selectSalesList = val + this.selList = val }, comboDetail(item) { - this.isShowDetail = true this.$nextTick(() => { - this.$refs.detailRef.isShowModal = true - this.$refs.detailRef.comboDetail(item) + this.$refs.DetailRef.isShowModal = true + this.$refs.DetailRef.getDetail(item) }) - - // this.$router.push({ - // name: 'comboDetail', - // query: item - // }) }, pageSizeChange(val) { this.pagination.rows = val @@ -484,9 +380,9 @@ text-align: right; } } - .el-dialog__body{ - - } + + .el-dialog__body {} + .text_warning { color: #e89e42; } diff --git a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/TestHex.java b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/TestHex.java index 167a3fb..0fb87d4 100644 --- a/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/TestHex.java +++ b/server/jtt808_parent/jtt808-protocol/src/test/java/org/yzh/protocol/TestHex.java @@ -18,23 +18,23 @@ */ public class TestHex { - @Test - public void testHex() throws Exception { - try (BufferedReader reader = reader("target/test-classes/JT808.txt")) { - reader.lines().filter(hex -> !hex.isEmpty()).forEach(hex -> BeanTest.selfCheck(hex)); - } - } +// @Test +// public void testHex() throws Exception { +// try (BufferedReader reader = reader("target/test-classes/JT808.txt")) { +// reader.lines().filter(hex -> !hex.isEmpty()).forEach(hex -> BeanTest.selfCheck(hex)); +// } +// } - @Test - public void testSubpackage() throws Exception { - try (BufferedReader reader = reader("target/test-classes/JT1078.txt")) { - reader.lines().filter(hex -> !hex.isEmpty()).forEach(hex -> { - JTMessage message = BeanTest.coder.decode(Unpooled.wrappedBuffer(ByteBufUtil.decodeHexDump(hex))); - if (message != null) - System.out.println(BeanTest.gson.toJson(message)); - }); - } - } +// @Test +// public void testSubpackage() throws Exception { +// try (BufferedReader reader = reader("target/test-classes/JT1078.txt")) { +// reader.lines().filter(hex -> !hex.isEmpty()).forEach(hex -> { +// JTMessage message = BeanTest.coder.decode(Unpooled.wrappedBuffer(ByteBufUtil.decodeHexDump(hex))); +// if (message != null) +// System.out.println(BeanTest.gson.toJson(message)); +// }); +// } +// } public static BufferedReader reader(String path) throws FileNotFoundException { return new BufferedReader(new InputStreamReader(new FileInputStream(path), StandardCharsets.UTF_8)); diff --git a/server/platform/src/main/java/com/doumee/api/business/DiscountController.java b/server/platform/src/main/java/com/doumee/api/business/DiscountController.java index 5da9753..613739f 100644 --- a/server/platform/src/main/java/com/doumee/api/business/DiscountController.java +++ b/server/platform/src/main/java/com/doumee/api/business/DiscountController.java @@ -67,6 +67,17 @@ return ApiResponse.success(null); } + @ApiOperation("淇敼鐘舵��") + @PostMapping("/updStatus") + @RequiresPermissions("business:discount:update") + public ApiResponse updStatus(@RequestBody Discount discount) { + discountService.updStatus(discount); + return ApiResponse.success(null); + } + + + + @ApiOperation("鍒嗛〉鏌ヨ") @PostMapping("/page") @RequiresPermissions("business:discount:query") diff --git a/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java b/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java index 26f53d2..581578e 100644 --- a/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java +++ b/server/platform/src/main/java/com/doumee/api/business/DiscountMemberController.java @@ -85,7 +85,7 @@ @ApiOperation("鏍规嵁ID鏌ヨ") @GetMapping("/{id}") @RequiresPermissions("business:discountmember:query") - public ApiResponse findById(@PathVariable String id) { + public ApiResponse<DiscountMember> findById(@PathVariable String id) { return ApiResponse.success(discountMemberService.getDetail(id)); } diff --git a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java index 7f564cc..f27e18d 100644 --- a/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java +++ b/server/platform/src/main/java/com/doumee/api/business/GoodsorderController.java @@ -32,6 +32,7 @@ import java.math.BigDecimal; import java.util.ArrayList; import java.util.List; +import java.util.Objects; /** * @author 姹熻箘韫� @@ -92,6 +93,7 @@ public ApiResponse<PageData<Goodsorder>> findPage (@RequestBody PageWrap<Goodsorder> pageWrap) { return ApiResponse.success(goodsorderService.findPage(pageWrap)); } + @ApiOperation("绾夸笂浜ゆ槗姹囨�绘暟鎹帴鍙�") @PostMapping("/getTotalData") @RequiresPermissions("business:goodsorder:query") @@ -118,7 +120,8 @@ for (Goodsorder goodsorder:goodsorders) { DiscountGoodsorderExportVO discountGoodsorderExportVO = new DiscountGoodsorderExportVO(); BeanUtils.copyProperties(goodsorder,discountGoodsorderExportVO); - discountGoodsorderExportVO.setPayMoney(discountGoodsorderExportVO.getPayMoney()); + discountGoodsorderExportVO.setPayMoney(discountGoodsorderExportVO.getMoney()); + discountGoodsorderExportVO.setOrigin(Constants.ZERO); discountGoodsorderExportVOList.add(discountGoodsorderExportVO); } ExcelExporter.build(DiscountGoodsorderExportVO.class).exportWithFirstAndEnd(discountGoodsorderExportVOList, "璁㈠崟鍒楄〃_"+System.currentTimeMillis(),"璁㈠崟鍒楄〃_"+ DateUtil.getPlusTime2(DateUtil.getCurrentDate()),null, response); @@ -170,6 +173,9 @@ @PostMapping("/backGoodsorder") @RequiresPermissions("business:goodsorder:query") public ApiResponse backGoodsorder(@RequestBody GoodsorderBackDTO goodsorderBackDTO){ + if(Objects.nonNull(goodsorderBackDTO) && Objects.isNull(goodsorderBackDTO.getBackType())){ + goodsorderBackDTO.setBackType(Constants.ONE); + } goodsorderService.backGoodsorder(goodsorderBackDTO); return ApiResponse.success(null); } diff --git a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java index 4682063..e755ee9 100644 --- a/server/platform/src/main/java/com/doumee/task/ScheduleTool.java +++ b/server/platform/src/main/java/com/doumee/task/ScheduleTool.java @@ -98,6 +98,18 @@ /** + * 瀹氭椂鍏抽棴 瓒呮椂鏈敮浠樼殑璁㈠崟 + * 30 绉掑埛鏂颁竴娆� + * @throws Exception + */ + @Scheduled(cron = "0/15 * * * * ? ") + public void autCancel() throws Exception { + log.info("=====================寮�濮嬪畾鏃跺埛鏂板叧闂秴鏃舵湭鏀粯鐨勮鍗�======================="); + goodsorderService.autCancel(); + log.info("=====================缁撴潫瀹氭椂鍒锋柊鍏抽棴瓒呮椂鏈敮浠樼殑璁㈠崟======================="); + } + + /** * 绔欑偣杞﹁締婊℃灦鐜囬璀� * @throws Exception */ diff --git a/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java b/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java index 6d9c460..c11eb84 100644 --- a/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java +++ b/server/services/src/main/java/com/doumee/biz/system/impl/SystemDictDataBizImpl.java @@ -38,7 +38,7 @@ public void updateById(SystemDictData systemDictData) { SystemDictData queryDto = new SystemDictData(); queryDto.setDictId(systemDictData.getDictId()); - queryDto.setCode(systemDictData.getCode()); + queryDto.setLabel(systemDictData.getLabel()); queryDto.setDeleted(Constants.ZERO); SystemDictData dictData = systemDictDataService.findOne(queryDto); if (dictData != null && !dictData.getId().equals(systemDictData.getId())) { diff --git a/server/services/src/main/java/com/doumee/core/constants/Constants.java b/server/services/src/main/java/com/doumee/core/constants/Constants.java index fdca607..be8dae9 100644 --- a/server/services/src/main/java/com/doumee/core/constants/Constants.java +++ b/server/services/src/main/java/com/doumee/core/constants/Constants.java @@ -126,7 +126,7 @@ PLATFORM_REFUND(3,"骞冲彴閫�娆�", "骞冲彴閫�娆�"), - DISCOUNT(4,"骞冲彴濂楅", "骞冲彴濂楅") + DISCOUNT(4,"濂楅璐拱", "濂楅璐拱") ; String name; @@ -207,6 +207,9 @@ public static final String LEASE_NOTICE_URL = "LEASE_NOTICE_URL"; //鎶奸噾 public static final String RENT_DEPOSIT = "RENT_DEPOSIT"; + //鐢佃溅涓村仠鑷姩鍏抽攣鏃堕暱锛堝垎閽燂級 + public static final String PAUSE_AUTO_CLOSE_TIME = "PAUSE_AUTO_CLOSE_TIME"; + //娓╅Θ鎻愮ず public static final String TIPS = "TIPS"; //娓╅Θ鎻愮ず diff --git a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java index 575ab4e..ca3082d 100644 --- a/server/services/src/main/java/com/doumee/core/utils/DateUtil.java +++ b/server/services/src/main/java/com/doumee/core/utils/DateUtil.java @@ -68,11 +68,28 @@ return dt1; } + + + public static Date StringToDateFormat(String DATE,String format) { + if(StringUtils.isBlank(DATE)){ + return null; + } + DateFormat df = new SimpleDateFormat(format); + Date dt1 = null; + try { + dt1 = df.parse(DATE); + } catch (Exception exception) { + exception.printStackTrace(); + } + return dt1; + } + + public static String getXDaysAfter(Date date, Integer days){ Timestamp currentTimestamp = new Timestamp(date.getTime()); Calendar calendar = Calendar.getInstance(); calendar.setTime(currentTimestamp); - calendar.add(Calendar.DAY_OF_YEAR, days-1); // 鍦ㄥ綋鍓嶆椂闂村熀纭�涓婃坊鍔犳寚瀹氱殑澶╂暟 + calendar.add(Calendar.DAY_OF_YEAR, days); // 鍦ㄥ綋鍓嶆椂闂村熀纭�涓婃坊鍔犳寚瀹氱殑澶╂暟 SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd"); return formatter.format(calendar.getTime()); } @@ -2771,7 +2788,7 @@ public static void main(String[] args) { try { - System.out.println(DateUtil.getBetweenDays("2025-02-13","2025-02-15")); + System.out.println(DateUtil.getCurrDate()); } catch (Exception ex) { ex.printStackTrace(); } diff --git a/server/services/src/main/java/com/doumee/core/wx/SendWxMessage.java b/server/services/src/main/java/com/doumee/core/wx/SendWxMessage.java index fecd6b6..2a42d95 100644 --- a/server/services/src/main/java/com/doumee/core/wx/SendWxMessage.java +++ b/server/services/src/main/java/com/doumee/core/wx/SendWxMessage.java @@ -44,9 +44,9 @@ Map<String, TemplateData> m = new HashMap<>(4); m.put("character_string1", new TemplateData(bikeCode)); //瑙i攣鏃堕棿 - m.put("date3", new TemplateData(DateUtil.getDate(startTime,"yyyy-MM-dd HH:mm"))); + m.put("date3", new TemplateData(DateUtil.getFomartDate(startTime,"yyyy/MM/dd HH:mm"))); //涓婇攣鏃堕棿 - m.put("date4", new TemplateData(DateUtil.getDate(endTime,"yyyy-MM-dd HH:mm"))); + m.put("date4", new TemplateData(DateUtil.getFomartDate(endTime,"yyyy/MM/dd HH:mm"))); //娓╅Θ鎻愰啋 m.put("thing5", new TemplateData("涓存椂閿佽溅宸茶秴杩囨渶澶ф椂闀匡紝宸茶嚜鍔ㄨ繕杞�")); wxMsgVo.setPage(goodsOrderUrl + goodsOrderId); diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Discount.java b/server/services/src/main/java/com/doumee/dao/business/model/Discount.java index 722c77f..45eb9a3 100644 --- a/server/services/src/main/java/com/doumee/dao/business/model/Discount.java +++ b/server/services/src/main/java/com/doumee/dao/business/model/Discount.java @@ -28,7 +28,7 @@ @ApiModelProperty(value = "鍒涘缓鏃堕棿") @ExcelColumn(name="鍒涘缓鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; @ApiModelProperty(value = "鍒涘缓浜�") @@ -37,7 +37,7 @@ @ApiModelProperty(value = "缂栬緫鏃堕棿") @ExcelColumn(name="缂栬緫鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date editDate; @ApiModelProperty(value = "缂栬緫浜�") @@ -160,7 +160,18 @@ @ApiModelProperty(value = "姣忔棩鍗曚环", example = "1") private BigDecimal dayPrice; + @ApiModelProperty(value = "灏忕▼搴忔煡璇娇鐢�", hidden = true) + @TableField(exist = false) + private Integer minShow; + @ApiModelProperty(value = "鍒涘缓浜哄悕绉�") + @TableField(exist = false) + private String creatorName; + + + @ApiModelProperty(value = "鏈�鍚庣紪杈戜汉") + @TableField(exist = false) + private String editorName; @TableField(exist = false) @ApiModelProperty(value = "鍥剧墖鍏ㄨ矾寰�", example = "1") diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java b/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java index 5de1fdd..c47be07 100644 --- a/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java +++ b/server/services/src/main/java/com/doumee/dao/business/model/DiscountLog.java @@ -28,7 +28,7 @@ @ApiModelProperty(value = "鍒涘缓鏃堕棿") @ExcelColumn(name="鍒涘缓鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; @ApiModelProperty(value = "鍒涘缓浜�") @@ -37,7 +37,7 @@ @ApiModelProperty(value = "缂栬緫鏃堕棿") @ExcelColumn(name="缂栬緫鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date editDate; @ApiModelProperty(value = "缂栬緫浜�") diff --git a/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java index f81fa77..ac0e439 100644 --- a/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java +++ b/server/services/src/main/java/com/doumee/dao/business/model/DiscountMember.java @@ -27,14 +27,14 @@ private String id; @ApiModelProperty(value = "鍒涘缓鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date createDate; @ApiModelProperty(value = "鍒涘缓浜�") private String creator; @ApiModelProperty(value = "缂栬緫鏃堕棿") - @JsonFormat(pattern = "yyyy-MM-dd") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss") private Date editDate; @ApiModelProperty(value = "缂栬緫浜�") diff --git a/server/services/src/main/java/com/doumee/dao/business/vo/DiscountGoodsorderExportVO.java b/server/services/src/main/java/com/doumee/dao/business/vo/DiscountGoodsorderExportVO.java index 72855ff..a78efb6 100644 --- a/server/services/src/main/java/com/doumee/dao/business/vo/DiscountGoodsorderExportVO.java +++ b/server/services/src/main/java/com/doumee/dao/business/vo/DiscountGoodsorderExportVO.java @@ -45,11 +45,11 @@ private String openid; @ApiModelProperty(value = "鏀粯鏂瑰紡 0寰俊 1鏀粯瀹�") - @ExcelColumn(name="鏀粯鏂瑰紡",index = 7 ,width = 10,valueMapping = "0=寰俊锛�1=鏀粯瀹濓紱",align = HorizontalAlignment.CENTER) + @ExcelColumn(name="鏀粯鏂瑰紡",index = 7 ,width = 10,valueMapping = "0=寰俊;1=鏀粯瀹�;",align = HorizontalAlignment.CENTER) private Integer payWay; @ApiModelProperty(value = "璁㈠崟鏉ユ簮") - @ExcelColumn(name="璁㈠崟鏉ユ簮",index = 8 ,width = 10,valueMapping = "0=灏忕▼搴忕锛�",align = HorizontalAlignment.CENTER) + @ExcelColumn(name="璁㈠崟鏉ユ簮",index = 8 ,width = 10,valueMapping = "0=灏忕▼搴忕;",align = HorizontalAlignment.CENTER) private Integer origin; diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java b/server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java index d1a0e73..6c1fa5d 100644 --- a/server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java +++ b/server/services/src/main/java/com/doumee/dao/business/web/response/HomeResponse.java @@ -44,7 +44,7 @@ @ApiModelProperty(value = "璁㈠崟涓婚敭") private String goodsOrderId; - @ApiModelProperty(value = "楠戣鐘舵�侊細-1=鏈獞琛岋紱0=璇锋眰寮�閿佷腑 ;1=楠戣涓�; 2=宸茶繕杞�; 3=寮�閿佸け璐ワ紱") + @ApiModelProperty(value = "楠戣鐘舵�侊細-1=鏈獞琛岋紱0=璇锋眰寮�閿佷腑 ;1=楠戣涓�; 2=宸茶繕杞�; 3=寮�閿佸け璐ワ紱4=涓存椂闅忚溅锛�") private Integer rideStatus; @ApiModelProperty(value = "灏忕▼搴忔槸鍚﹀仠姝㈡湇鍔� 0鍚� 1鏄�") diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDetailResponse.java b/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDetailResponse.java index 78b7566..13f4795 100644 --- a/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDetailResponse.java +++ b/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesDetailResponse.java @@ -14,7 +14,6 @@ @ApiModel("楠戣璁板綍鐘舵�佷俊鎭繑鍥炵被") public class MemberRidesDetailResponse { - @ApiModelProperty(value = "楠戣璁板綍涓婚敭") private String id; diff --git a/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java b/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java index 83f5279..a9fb0b5 100644 --- a/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java +++ b/server/services/src/main/java/com/doumee/dao/business/web/response/MemberRidesResponse.java @@ -72,9 +72,6 @@ @ApiModelProperty(value = "楠戣璁板綍涓婚敭") private String rideId; - @ApiModelProperty(value = "杞﹁締绫诲瀷") - private String bikeTypeName; - @ApiModelProperty(value = "濂楅鍗′俊鎭�") private DiscountMember discountMember; diff --git a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java index 91f0931..9a570bf 100644 --- a/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java +++ b/server/services/src/main/java/com/doumee/service/business/GoodsorderService.java @@ -209,5 +209,7 @@ void autoCancelRefunOrder(); - DiscountMember getUseDiscount(String memberId, Integer driveTime); + DiscountMember getUseDiscount(String memberId, Integer driveTime,Integer type); + + void autCancel(); } diff --git a/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java index e0a6288..d32fd5d 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/BikesServiceImpl.java @@ -235,7 +235,7 @@ low = Double.parseDouble(collect.get(Constants.LOW_BIKE_VOLTAGE).getCode()); }catch (Exception e){ } - if(pageWrap.getModel().getType() == Constants.ONE){ + if(pageWrap.getModel().getLowVoltage() == Constants.ONE){ //浣庣數閲� queryWrapper.lt(Bikes::getVoltage,low); }else{ diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java index bebd94a..fddabd9 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountLogServiceImpl.java @@ -1,20 +1,26 @@ package com.doumee.service.business.impl; +import com.doumee.core.constants.Constants; import com.doumee.core.model.PageData; import com.doumee.core.model.PageWrap; import com.doumee.core.utils.Utils; import com.doumee.dao.business.DiscountLogMapper; import com.doumee.dao.business.model.DiscountLog; +import com.doumee.dao.business.model.DiscountMember; +import com.doumee.dao.system.model.SystemUser; import com.doumee.service.business.DiscountLogService; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.github.yulichang.wrapper.MPJLambdaWrapper; +import org.apache.commons.lang.StringUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.util.CollectionUtils; import java.util.List; +import java.util.Objects; /** * 鐢ㄦ埛濂楅鍗′娇鐢ㄨ皟鏁存棩蹇楄〃Service瀹炵幇 @@ -87,60 +93,26 @@ @Override public PageData<DiscountLog> findPage(PageWrap<DiscountLog> pageWrap) { IPage<DiscountLog> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity()); - QueryWrapper<DiscountLog> queryWrapper = new QueryWrapper<>(); + MPJLambdaWrapper<DiscountLog> queryWrapper = new MPJLambdaWrapper<>(); Utils.MP.blankToNull(pageWrap.getModel()); - if (pageWrap.getModel().getId() != null) { - queryWrapper.lambda().eq(DiscountLog::getId, pageWrap.getModel().getId()); - } - if (pageWrap.getModel().getCreateDate() != null) { - queryWrapper.lambda().ge(DiscountLog::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate())); - queryWrapper.lambda().le(DiscountLog::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate())); - } - if (pageWrap.getModel().getCreator() != null) { - queryWrapper.lambda().eq(DiscountLog::getCreator, pageWrap.getModel().getCreator()); - } - if (pageWrap.getModel().getEditDate() != null) { - queryWrapper.lambda().ge(DiscountLog::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate())); - queryWrapper.lambda().le(DiscountLog::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate())); - } - if (pageWrap.getModel().getEditor() != null) { - queryWrapper.lambda().eq(DiscountLog::getEditor, pageWrap.getModel().getEditor()); - } - if (pageWrap.getModel().getIsdeleted() != null) { - queryWrapper.lambda().eq(DiscountLog::getIsdeleted, pageWrap.getModel().getIsdeleted()); - } - if (pageWrap.getModel().getInfo() != null) { - queryWrapper.lambda().eq(DiscountLog::getInfo, pageWrap.getModel().getInfo()); - } - if (pageWrap.getModel().getDiscountMemberId() != null) { - queryWrapper.lambda().eq(DiscountLog::getDiscountMemberId, pageWrap.getModel().getDiscountMemberId()); - } - if (pageWrap.getModel().getType() != null) { - queryWrapper.lambda().eq(DiscountLog::getType, pageWrap.getModel().getType()); - } - if (pageWrap.getModel().getRideTime() != null) { - queryWrapper.lambda().eq(DiscountLog::getRideTime, pageWrap.getModel().getRideTime()); - } - if (pageWrap.getModel().getRidePrice() != null) { - queryWrapper.lambda().eq(DiscountLog::getRidePrice, pageWrap.getModel().getRidePrice()); - } - if (pageWrap.getModel().getEditInfo() != null) { - queryWrapper.lambda().eq(DiscountLog::getEditInfo, pageWrap.getModel().getEditInfo()); - } - if (pageWrap.getModel().getEditDays() != null) { - queryWrapper.lambda().eq(DiscountLog::getEditDays, pageWrap.getModel().getEditDays()); - } - if (pageWrap.getModel().getGoodsorderId() != null) { - queryWrapper.lambda().eq(DiscountLog::getGoodsorderId, pageWrap.getModel().getGoodsorderId()); - } - for(PageWrap.SortData sortData: pageWrap.getSorts()) { - if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) { - queryWrapper.orderByDesc(sortData.getProperty()); - } else { - queryWrapper.orderByAsc(sortData.getProperty()); + DiscountLog model = pageWrap.getModel(); + queryWrapper.selectAll(DiscountLog.class) + .selectAs(SystemUser::getRealname,DiscountLog::getCreatorName) + .leftJoin(SystemUser.class,SystemUser::getId,DiscountLog::getCreator) + .eq(DiscountLog::getIsdeleted, Constants.ZERO) + .eq(Objects.nonNull(model.getType()),DiscountLog::getType,model.getType()) + .eq(StringUtils.isNotBlank(model.getDiscountMemberId()),DiscountLog::getDiscountMemberId,model.getDiscountMemberId()); + PageData<DiscountLog> pageData = PageData.from(discountLogMapper.selectJoinPage(page, DiscountLog.class,queryWrapper)); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(pageData.getRecords())){ + for (DiscountLog discountLog:pageData.getRecords()) { + if(Constants.equalsInteger(discountLog.getType(),Constants.ZERO)&&Objects.nonNull(discountLog.getRidePrice())){ + discountLog.setRidePrice( + Constants.translateMoney(discountLog.getRidePrice()) + ); + } } } - return PageData.from(discountLogMapper.selectPage(page, queryWrapper)); + return pageData; } @Override diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java index 07658ac..aab545c 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountMemberServiceImpl.java @@ -104,18 +104,20 @@ if(Objects.isNull(discountMember)){ throw new BusinessException(ResponseStatus.DATA_EMPTY); } - List<DiscountLog> discountLogList = discountLogMapper.selectJoinList(DiscountLog.class,new MPJLambdaWrapper<DiscountLog>() - .selectAll(DiscountLog.class) - .selectAs(SystemUser::getRealname,DiscountLog::getCreatorName) - .eq(DiscountLog::getDiscountMemberId,discountMember.getId()) - .eq(DiscountLog::getIsdeleted,Constants.ZERO) - .orderByDesc(DiscountLog::getId) - ); - if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountLogList)){ - discountMember.setDiscountLogList(discountLogList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); - discountMember.setOptLogList(discountLogList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); - discountMember.setUseTimes(discountMember.getDiscountLogList().size()); - } +// List<DiscountLog> discountLogList = discountLogMapper.selectJoinList(DiscountLog.class,new MPJLambdaWrapper<DiscountLog>() +// .selectAll(DiscountLog.class) +// .selectAs(SystemUser::getRealname,DiscountLog::getCreatorName) +// .leftJoin(SystemUser.class,SystemUser::getId,DiscountLog::getCreator) +// .eq(DiscountLog::getDiscountMemberId,discountMember.getId()) +// .eq(DiscountLog::getIsdeleted,Constants.ZERO) +// .orderByDesc(DiscountLog::getId) +// ); +// discountMember.setUseTimes(discountMember.getDiscountLogList().size()); +// if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountLogList)){ +// discountMember.setDiscountLogList(discountLogList.stream().filter(i->Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); +// discountMember.setOptLogList(discountLogList.stream().filter(i->!Constants.equalsInteger(i.getType(),Constants.ZERO)).collect(Collectors.toList())); +// +// } return discountMember; } @@ -138,12 +140,15 @@ Utils.MP.blankToNull(pageWrap.getModel()); DiscountMember model = pageWrap.getModel(); queryWrapper.selectAll(DiscountMember.class) + .selectAs(Member::getOpenid,DiscountMember::getOpenid) + .select(" ( select count(1) from discount_log d where d.discount_member_id = t.id and d.type = 0 ) ",DiscountMember::getUseTimes) .leftJoin(Member.class,Member::getId,DiscountMember::getMemberId) .like(StringUtils.isNotBlank(model.getCode()),DiscountMember::getCode,model.getCode()) .like(StringUtils.isNotBlank(model.getName()),DiscountMember::getName,model.getName()) .like(StringUtils.isNotBlank(model.getOpenid()),Member::getOpenid,model.getOpenid()) .eq(Objects.nonNull(model.getStatus()),DiscountMember::getStatus,model.getStatus()) - .orderByDesc(DiscountMember::getId); + .ne(DiscountMember::getStatus,Constants.TWO) + .orderByDesc(DiscountMember::getCode); return PageData.from(discountMemberJoinMapper.selectJoinPage(page, DiscountMember.class,queryWrapper)); } @@ -164,9 +169,12 @@ .orderByDesc(DiscountMember::getId); List<DiscountMember> list = discountMemberJoinMapper.selectJoinList(DiscountMember.class,queryWrapper); if(CollectionUtils.isEmpty(list)){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈煡璇㈠埌鍙姤搴熺殑濂楅鍗′俊鎭�"); + return; } for (DiscountMember discountMember:list) { + if(!Constants.equalsInteger(discountMember.getStatus(),Constants.ZERO)){ + continue; + } discountMemberMapper.update(null,new UpdateWrapper<DiscountMember>().lambda() .set(DiscountMember::getStatus,Constants.ONE) .eq(DiscountMember::getId,discountMember.getId()) @@ -183,7 +191,6 @@ discountLog.setGoodsorderId(discountMember.getGoodsorderId()); discountLogMapper.insert(discountLog); } - //閫�娆炬搷浣� } @@ -191,7 +198,7 @@ @Override public void adjust(DiscountMemberDTO model){ if(Objects.isNull(model) - || Objects.isNull(model.getAddDays())){ + || Objects.isNull(model.getAddDays())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); } LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); @@ -228,8 +235,9 @@ discountLog.setDiscountMemberId(discountMember.getId()); discountLog.setType(Constants.TWO); discountLog.setGoodsorderId(discountMember.getGoodsorderId()); - discountLog.setEditInfo(model.getInfo()); + discountLog.setInfo(model.getInfo()); discountLog.setEditDays(model.getAddDays()); + discountLog.setEditInfo("灏嗘湁鏁堟湡澧炲姞"+model.getAddDays()+"澶�, 璋冩暣鍚庢湁鏁堟湡鑷�"+useEndDate); discountLogMapper.insert(discountLog); } diff --git a/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java index 6e6895b..a8c5a63 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/DiscountServiceImpl.java @@ -31,6 +31,7 @@ import org.springframework.util.CollectionUtils; import java.math.BigDecimal; +import java.text.ParseException; import java.util.Date; import java.util.List; import java.util.Objects; @@ -60,6 +61,8 @@ discount.setIsdeleted(Constants.ZERO); discount.setCreateDate(new Date()); discount.setCreator(userInfo.getId()); + discount.setEditDate(new Date()); + discount.setEditor(userInfo.getId()); if(Constants.equalsInteger(discount.getUseType(),Constants.ZERO)){ discount.setUseDays((int) (DateUtil.getBetweenDays(DateUtil.dateToString(discount.getUseStartDate(),"yyyy-MM-dd"),DateUtil.dateToString(discount.getUseEndDate(),"yyyy-MM-dd")))); } @@ -68,7 +71,7 @@ } - public void vaildReq(Discount discount) { + public void vaildReq(Discount discount){ if(Objects.isNull(discount) || StringUtils.isBlank(discount.getName()) || Objects.isNull(discount.getType()) @@ -95,13 +98,21 @@ ( discount.getUseStartDate().getTime()>discount.getUseEndDate().getTime()) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浣跨敤鏃舵淇℃伅閿欒"); } - //鎸囧畾鏃ユ湡鐢熸晥 if(Constants.equalsInteger(discount.getUseType(),Constants.TWO) && ( discount.getUseStartDate().getTime()<discount.getStartDate().getTime() || discount.getUseStartDate().getTime() > discount.getEndDate().getTime() ) ){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"浣跨敤鏃舵淇℃伅閿欒"); + } + if(Objects.isNull(discount.getSaleDayLimit())){ + discount.setSaleDayLimit(Constants.ZERO); + } + if(Objects.isNull(discount.getSaleLimit())){ + discount.setSaleLimit(Constants.ZERO); + } + if(Constants.equalsInteger(discount.getUseType(),Constants.TWO)){ + discount.setUseEndDate( DateUtil.StringToDateFormat(DateUtil.getXDaysAfter(discount.getUseStartDate(),discount.getUseDays()),"yyyy-MM-dd")); } } @@ -146,6 +157,24 @@ @Override public void updateById(Discount discount) { + LoginUserInfo userInfo = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); + if(Objects.isNull(discount) + || StringUtils.isBlank(discount.getId())){ + throw new BusinessException(ResponseStatus.BAD_REQUEST); + } + Discount model = discountMapper.selectById(discount.getId()); + if(Objects.isNull(model)){ + throw new BusinessException(ResponseStatus.DATA_EMPTY); + } + if(!Constants.equalsInteger(model.getStatus(),Constants.ONE)){ + throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鏈鐢ㄦ棤娉曡繘琛屼慨鏀�"); + } + this.vaildReq(discount); + discount.setEditDate(new Date()); + discount.setEditor(userInfo.getId()); + if(Constants.equalsInteger(discount.getUseType(),Constants.ZERO)){ + discount.setUseDays((int) (DateUtil.getBetweenDays(DateUtil.dateToString(discount.getUseStartDate(),"yyyy-MM-dd"),DateUtil.dateToString(discount.getUseEndDate(),"yyyy-MM-dd")))); + } discountMapper.updateById(discount); } @@ -162,9 +191,12 @@ @Override public Discount findById(String id) { Discount discount = discountJoinMapper.selectOne(new MPJLambdaWrapper<Discount>() - .selectAll(Discount.class) + .selectAll(Discount.class) + .select(" s1.realname ",Discount::getCreatorName) + .select(" s2.realname ",Discount::getEditorName) .select(" (select count(1) from goodsorder g where g.obj_type = 0 and g.obj_id = t.id and g.pay_status = 1 ) ",Discount::getSaleNum) - .leftJoin(SystemUser.class,SystemUser::getId,Discount::getCreator) + .leftJoin(" system_user s1 on s1.id = t.creator") + .leftJoin(" system_user s2 on s2.id = t.editor") .eq(Discount::getId,id) ); if(Objects.isNull(discount)){ @@ -205,7 +237,9 @@ .eq(Objects.nonNull(modele.getBikeOrElec()) && Constants.equalsInteger(modele.getBikeOrElec(),Constants.ONE),Discount::getIsbike, Constants.ONE) .eq(Objects.nonNull(modele.getBikeOrElec()) && Constants.equalsInteger(modele.getBikeOrElec(),Constants.TWO),Discount::getIselecbike, Constants.ONE) .eq(Discount::getIsdeleted, Constants.ZERO) - .eq( pageWrap.getModel().getStatus() !=null,BikeRepair::getStatus,pageWrap.getModel().getStatus()); + .eq( pageWrap.getModel().getStatus() !=null,BikeRepair::getStatus,pageWrap.getModel().getStatus()) + .apply( Objects.nonNull(modele.getMinShow())," now() BETWEEN t.start_date and ( t.end_date + INTERVAL '1 day' ) ") + ; queryWrapper.orderByDesc(Discount::getCreateDate); PageData<Discount> pageData = PageData.from(discountJoinMapper.selectJoinPage(page, Discount.class,queryWrapper)); for (Discount discount:pageData.getRecords()) { @@ -219,8 +253,7 @@ @Override public void dealPrice(Discount discount){ if(Objects.isNull(discount) - || Objects.isNull(discount.getUseEndDate()) - || Objects.isNull(discount.getUseStartDate()) + || Objects.isNull(discount.getUseDays()) || Objects.isNull(discount.getPrice()) || discount.getPrice().compareTo(BigDecimal.ZERO)==0 ){ diff --git a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java index f46ffd0..fed4866 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java @@ -295,8 +295,10 @@ MPJLambdaWrapper<Goodsorder> queryWrapper = new MPJLambdaWrapper<>(); queryWrapper.selectAll(Goodsorder.class); queryWrapper.selectAs(Member::getOpenid, Goodsorder::getOpenid); + queryWrapper.selectAs(DiscountMember::getName, Goodsorder::getDiscountName); queryWrapper.leftJoin(Member.class, Member::getId ,Goodsorder::getMemberId); - queryWrapper.select("(select r.name from discount_member r where r.isdeleted=0 and r.goodsorder_id=t.id limit 1) as discountName"); + queryWrapper.leftJoin(DiscountMember.class, DiscountMember::getGoodsorderId ,Goodsorder::getId); +// queryWrapper.select("(select r.name from discount_member r where r.isdeleted=0 and r.goodsorder_id=t.id limit 1) as discountName"); queryWrapper.select("(select max(r.done_date) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_date"); queryWrapper.select("(select sum(r.money) from refund r where r.obj_id=t.id and r.status in(0,2)) as refund_money"); //鏃堕棿娈电瓫閫� @@ -310,11 +312,13 @@ queryWrapper.like(model.getCode() !=null,Goodsorder::getCode,model.getCode()); queryWrapper.like(model.getId() !=null,Goodsorder::getId,model.getId()); queryWrapper.eq(model.getStatus() !=null,Goodsorder::getStatus,model.getStatus()); + queryWrapper.eq(model.getPayWay() !=null,Goodsorder::getPayWay,model.getPayWay()); queryWrapper.like(model.getOnlineOrderid() !=null,Goodsorder::getOnlineOrderid,model.getOnlineOrderid()); queryWrapper.like(model.getOpenid() !=null,Member::getOpenid,model.getOpenid()); queryWrapper.eq(Goodsorder::getIsdeleted,Constants.ZERO); //濡傛灉鏄獞琛岃鍗曞彧鏄剧ず鏀粯鎴愬姛鐨� queryWrapper.eq(Constants.equalsInteger(model.getType(),Constants.ZERO),Goodsorder::getPayStatus,Constants.ONE); + queryWrapper.in(Constants.equalsInteger(model.getType(),Constants.ONE),Goodsorder::getStatus,Constants.ONE,Constants.ZERO); return queryWrapper; } @@ -336,7 +340,7 @@ if(Objects.nonNull(pageWrap.getModel().getCloseStatus()) && pageWrap.getModel().getCloseStatus().equals(Constants.ONE)){ queryWrapper.eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CLOSE.getKey()); } - queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDiscountName()),Goodsorder::getDiscountName,pageWrap.getModel().getDiscountName()); + queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getDiscountName()),DiscountMember::getName,pageWrap.getModel().getDiscountName()); IPage<Goodsorder> goodsorderIPage = goodsorderJoinMapper.selectJoinPage(page, Goodsorder.class, queryWrapper); if (!CollectionUtils.isEmpty(goodsorderIPage.getRecords())){ goodsorderIPage.getRecords().forEach(s->{ @@ -382,6 +386,7 @@ discountMapper.selectList(new QueryWrapper<Discount>().lambda() .eq(Discount::getIsdeleted,Constants.ZERO) .eq(Discount::getStatus,Constants.ZERO) + .apply(" now() BETWEEN start_date and ( end_date + INTERVAL '1 day' ) ") .orderByDesc(Discount::getId) .last(" limit 3 ") ) @@ -452,7 +457,7 @@ memberRidesResponse.setVoltageStatus(this.getVoltageStatus(bikes)); } //鏌ヨ褰撳墠鐨勯獞琛屽椁� - memberRidesResponse.setDiscountMember(this.getUseDiscount(memberId,Constants.ZERO)); + memberRidesResponse.setDiscountMember(this.getUseDiscount(memberId,Constants.ZERO,memberRides.getType())); homeResponse.setMemberRidesResponse(memberRidesResponse); } } @@ -534,6 +539,7 @@ if(Constants.equalsInteger(goodsorder.getType(),Constants.ZERO)){ throw new BusinessException(ResponseStatus.NOT_ALLOWED); } + goodsorder.setMoney(Constants.translateMoney(goodsorder.getMoney())); goodsorderDetailVO.setGoodsOrder(goodsorder); Member member = memberMapper.selectById(goodsorder.getMemberId()); if(Objects.nonNull(member)){ @@ -555,6 +561,13 @@ .eq(Refund::getObjId,goodsorder.getId()) .orderByDesc(Refund::getId) ); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(refunds)){ + for (Refund refund:refunds) { + if(Objects.nonNull(refund.getMoney())){ + refund.setMoney(Constants.translateMoney(refund.getMoney())); + } + } + } goodsorderDetailVO.setRefundList(refunds); return goodsorderDetailVO; @@ -614,7 +627,7 @@ freeTime = Integer.parseInt(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); }catch (Exception e){ } - closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId()).getAmount(); + closeMoney = getCloseMoneyByRides(memberRides,freeTime,true,goodsorder.getMoney(),goodsorder.getMemberId(),true).getAmount(); //瀹為檯缁撶畻浠锋牸锛岃褰曞湪鏈�楂樿溅鍨嬭褰曚笂 // memberRides.get(0).setActualPrice(closeMoney); } @@ -779,7 +792,7 @@ transactionsMapper.insert(transactions); } - private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney,String memberId) { + private RidesDetailResponse getCloseMoneyByRides(List<MemberRides> memberRides,int freeTime,boolean isClose,BigDecimal yjMoney,String memberId,Boolean unOver) { RidesDetailResponse ridesDetailResponse = new RidesDetailResponse(); ridesDetailResponse.setHaveDisCount(Constants.ZERO); BigDecimal closeMoney = new BigDecimal(0.00); @@ -816,9 +829,10 @@ topRides.setActualPrice(closeMoney); } //鏌ヨ鏄惁瀛樺湪濂楅淇℃伅 - DiscountMember discountMember = this.getUseDiscount(memberId,durationSum); + DiscountMember discountMember = this.getUseDiscount(memberId,durationSum,Objects.nonNull(topRides)?topRides.getType():null); //璁$畻鎶垫墸閲戦 - if(Objects.nonNull(discountMember) && discountMember.getSurplusTime() > Constants.ZERO && Objects.nonNull(topRides)){ + //unOver 鏄惁鏈粨绠� 鏈粨绠楃殑璁㈠崟鏍规嵁褰撳墠濂楅鏌ヨ 宸茬粨绠楃殑璁㈠崟鏍规嵁宸茬敓鎴愮殑鏁版嵁杩涜鏌ヨ + if(Objects.nonNull(discountMember) && Objects.nonNull(topRides) && unOver){ //瀛樺偍鎶垫墸璁板綍 DiscountLog discountLog = new DiscountLog(); discountLog.setIsdeleted(Constants.ZERO); @@ -830,7 +844,7 @@ discountLog.setEditInfo("楠戣鎶垫墸"); discountLog.setGoodsorderId(topRides.getOrdreId()); //濡傛灉楠戣鏃堕棿灏忎簬绛変簬鍓╀綑鏃堕棿 鍒欑洿鎺ユ坊鍔� 楠戣鍗′娇鐢ㄦ暟鎹� 淇瀹為檯鏀粯閲戦 - if(discountMember.getSurplusTime() >= durationSum){ + if(Constants.equalsInteger(discountMember.getLimitType(),Constants.ZERO) || discountMember.getSurplusTime() >= durationSum){ discountLog.setRideTime(durationSum); discountLog.setRidePrice(closeMoney); topRides.setActualPrice(BigDecimal.ZERO); @@ -838,9 +852,10 @@ }else{ int baseTime =Constants.formatIntegerNum(topRides.getBaseTime()); BigDecimal closeDisCountMoney = Constants.formatDecimalNum(topRides.getBasePrice()); - //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 + //鍑忓幓浼樻儬鏃堕暱鍓╀綑鏃堕暱 Integer durationDisCountSum = durationSum - discountMember.getSurplusTime(); - discountLog.setRideTime(discountMember.getSurplusTime()); + discountLog.setRideTime(durationDisCountSum<=Constants.ZERO?discountMember.getSurplusTime():Constants.ZERO); + //濡傛灉鏄竴鍙d环鏂瑰紡锛屼环鏍肩洿鎺ヤ负涓�鍙d环baseMoney,濡傛灉涓嶆槸璁$畻姝e父浠锋牸 if(baseTime != -1){//涓嶆槸涓�鍙d环 if(durationDisCountSum > baseTime && Constants.formatIntegerNum(topRides.getUnitTime())>0){ //濡傛灉瓒呭嚭浜嗚捣姝ヤ环鏍硷紝璁$畻瓒呭嚭浠锋牸 @@ -848,14 +863,25 @@ //璁$畻閲戦绱瓒呭嚭閮ㄩ棬浠锋牸锛堣秴鍑烘椂闂村崟浣�*瓒呭嚭鍗曚綅鏃堕棿浠锋牸锛� closeDisCountMoney = closeDisCountMoney.add(unit.multiply(Constants.formatDecimalNum(topRides.getUnitPrice()))); } - discountLog.setRidePrice(closeMoney.subtract(closeDisCountMoney)); + discountLog.setRidePrice(durationDisCountSum<=Constants.ZERO?closeMoney.subtract(closeDisCountMoney):BigDecimal.ZERO); }else{ discountLog.setRidePrice(BigDecimal.ZERO); } } - discountLogMapper.insert(discountLog); - ridesDetailResponse.setHaveDisCount(Constants.ONE); + if(isClose&&discountLog.getRideTime()>Constants.ZERO){ + discountLogMapper.insert(discountLog); + } + ridesDetailResponse.setHaveDisCount(discountLog.getRideTime()>Constants.ZERO?Constants.ONE:Constants.ZERO); ridesDetailResponse.setDisCountMoney(discountLog.getRidePrice()); + }else if(Objects.nonNull(discountMember) && Objects.nonNull(topRides) + && !unOver ){ + //宸茶繕杞﹀垯鏌ヨ鏄惁鏈� 濂楅鍗′娇鐢ㄨ褰� + List<DiscountLog> discountLogList = discountLogMapper.selectList(new QueryWrapper<DiscountLog>().lambda().eq(DiscountLog::getGoodsorderId,topRides.getOrdreId()).eq(DiscountLog::getType,Constants.ZERO) + .eq(DiscountLog::getIsdeleted,Constants.ZERO)); + if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(discountLogList)){ + ridesDetailResponse.setHaveDisCount(Constants.ONE); + ridesDetailResponse.setDisCountMoney(discountLogList.stream().map(i->i.getRidePrice()).reduce(BigDecimal.ZERO,BigDecimal::add)); + } } //濡傛灉璁㈠崟浠锋牸灏侀《浜嗭紝鍙栬鍗� 浠锋牸 if(Constants.compareBigdecimal(closeMoney, yjMoney) ==1){ @@ -888,7 +914,6 @@ LoginUserInfo principal = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal(); if(Objects.isNull(goodsorderBackDTO) || StringUtils.isBlank(goodsorderBackDTO.getOrderId()) - || StringUtils.isBlank(goodsorderBackDTO.getReason()) || Objects.isNull(goodsorderBackDTO.getBackType()) || Objects.isNull(goodsorderBackDTO.getMoney())){ throw new BusinessException(ResponseStatus.BAD_REQUEST); @@ -1060,7 +1085,8 @@ .selectAs(BaseParam::getSortnum,MemberRides::getSortnum) .leftJoin(BaseParam.class,BaseParam::getId,MemberRides::getParamId) .eq(MemberRides::getOrdreId,id) - .in(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey(),Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey()) + .in(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey() + ,Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey(),Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()) .orderByDesc(MemberRides::getCreateDate)); if (!CollectionUtils.isEmpty(memberRides)){ //棰勮缁撶畻浠锋牸鍜岃绠楁椂闀� @@ -1096,7 +1122,8 @@ return memberRidesResponse; }).collect(Collectors.toList()); //绱鍜岄绠楃粨绠楅噾棰� - RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney(),goodsorder.getMemberId()); + RidesDetailResponse ridesDetailResponse = getCloseMoneyByRides(memberRides,freeTime,false,goodsorder.getMoney(),goodsorder.getMemberId(), + Constants.equalsInteger(goodsorder.getStatus(),Constants.GOODSORDER_STATUS.CLOSE.getKey())?false:true); if(Constants.formatIntegerNum(goodsorder.getStatus())!= Constants.goodsorderStatus.pay){ //濡傛灉闈炲凡鏀粯浣嗘湭缁撶畻锛屼娇鐢ㄨ鍗曢噾棰� ridesDetailResponse.setAmount(goodsorder.getCloseMoney()); @@ -1174,8 +1201,13 @@ discountMember.setMemberId(memberId); discountMember.setStatus(Constants.TWO); discountMember.setGoodsorderId(goodsorderId); + if(!Constants.equalsInteger(discountMember.getUseType(),Constants.ZERO)){ + if(Constants.equalsInteger(discountMember.getUseType(),Constants.ONE)){ + discountMember.setUseStartDate(DateUtil.StringToDateFormat(DateUtil.getCurrDate(),"yyyy-MM-dd")); + } + discountMember.setUseEndDate( DateUtil.StringToDateFormat(DateUtil.getXDaysAfter(discountMember.getUseStartDate(),discountMember.getUseDays()-1),"yyyy-MM-dd")); + } discountMemberMapper.insert(discountMember); - Goodsorder goodsorder = new Goodsorder(); goodsorder.setId(goodsorderId); goodsorder.setCreateDate(new Date()); @@ -1207,7 +1239,7 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"鏈煡璇㈠埌濂楅淇℃伅"); } if(!(Constants.equalsInteger(discount.getIsdeleted(),Constants.ZERO) - ||Constants.equalsInteger(discount.getStatus(),Constants.ZERO))){ + && Constants.equalsInteger(discount.getStatus(),Constants.ZERO))){ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"濂楅宸蹭笅鏋讹紝鏃犳硶杩涜璐拱锛岃鍒锋柊鏌ョ湅"); } if(!(discount.getStartDate().getTime() < System.currentTimeMillis() @@ -1215,7 +1247,7 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"濂楅寮�鏀炬椂闂存湭鍒�,鏃犳硶杩涜璐拱"); } //楠岃瘉鏄惁瓒呰繃浠婃棩鍙敭鍗栨暟閲� - if(Objects.nonNull(discount.getSaleDayLimit())){ + if(Objects.nonNull(discount.getSaleDayLimit())&&discount.getSaleDayLimit()>Constants.ZERO){ if(goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getType,Constants.ONE) .eq(Goodsorder::getObjId,discount.getId()) @@ -1225,13 +1257,12 @@ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"濂楅浠婃棩鍙戣閲忓凡鍞絼锛岃鏄庢棩鏌ョ湅锛�"); } } - if(Objects.nonNull(discount.getSaleLimit())){ + if(Objects.nonNull(discount.getSaleLimit())&&discount.getSaleLimit()>Constants.ZERO){ if(goodsorderMapper.selectCount(new QueryWrapper<Goodsorder>().lambda() .eq(Goodsorder::getType,Constants.ONE) .eq(Goodsorder::getObjId,discount.getId()) .in(Goodsorder::getStatus,Constants.ZERO,Constants.ONE) - .apply(" EXTRACT(YEAR FROM create_date) = EXTRACT(YEAR FROM CURRENT_DATE) ") - )>=discount.getSaleDayLimit()){ + )>=discount.getSaleLimit()){ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"濂楅鍙戣閲忓凡鍞絼锛�"); } } @@ -1240,8 +1271,8 @@ private Object getWxPayResponse(Goodsorder goodsorder,String openid){ + Object response = null; //璋冭捣鏀粯 - Object response = null; PrepayRequest request = new PrepayRequest(); request.setAttach("createGoodsOrder"); request.setDescription(Constants.equalsInteger(goodsorder.getType(),Constants.ZERO)?"妫灄鍏洯鑷杞﹂獞琛屾娂閲戞敮浠�":"妫灄鍏洯鑷杞﹁喘涔伴獞琛屽椁愭敮浠�"); @@ -1368,6 +1399,7 @@ Goodsorder goodsorder = this.goodsorderMapper.selectOne(new QueryWrapper<Goodsorder>() .eq("member_id",memberId) .eq("status",Constants.goodsorderStatus.pay) + .eq("type",Constants.ZERO) .last(" limit 1 ")); if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"鏃犻獞琛岃鍗曡褰�"); @@ -1514,7 +1546,10 @@ * @param memberId */ @Override - public DiscountMember getUseDiscount(String memberId,Integer driveTime){ + public DiscountMember getUseDiscount(String memberId,Integer driveTime,Integer type){ + if(Objects.isNull(type)){ + return null; + } String today = DateUtil.getToday(); //鍒ゆ柇浠婂ぉ鏄惁涓鸿妭鍋囨棩 Holidays holidays = new Holidays(); @@ -1528,9 +1563,13 @@ "and d.isdeleted = 0 and d.type = 0 and EXTRACT(DAY FROM d.create_date) = EXTRACT(DAY FROM CURRENT_DATE) ) " , DiscountMember::getUseTime)//鏌ヨ浠婃棩宸蹭娇鐢ㄦ椂闂� .eq(DiscountMember::getStatus,Constants.ZERO) .eq(DiscountMember::getMemberId,memberId) - .le(DiscountMember::getUseStartDate, Utils.Date.getStart(DateUtil.stringToDate(today,"yyyy-MM-dd"))) - .ge(DiscountMember::getUseEndDate, Utils.Date.getEnd(DateUtil.stringToDate(today,"yyyy-MM-dd"))) + .apply(" t.use_start_date <= '"+today+"' and t.use_end_date >= '"+today+"' ") + + .eq(Constants.equalsInteger(holiday,Constants.ZERO),DiscountMember::getUseWorkday,Constants.ONE) .eq(Constants.equalsInteger(holiday,Constants.ONE),DiscountMember::getUseHoliday,Constants.ONE) + + .eq(Constants.equalsInteger(type,Constants.ZERO),DiscountMember::getIsbike,Constants.ONE) + .eq(Constants.equalsInteger(type,Constants.ONE),DiscountMember::getIselecbike,Constants.ONE) .orderByDesc(DiscountMember::getLimitType) .orderByDesc(DiscountMember::getLimitTime) ); @@ -1556,22 +1595,23 @@ if(list.size()>Constants.ZERO){ //d1鍦ㄥ墠鍒欏崌搴� 鍙嶄箣闄嶅簭 list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); + return list.get(Constants.ZERO); } - return list.get(Constants.ZERO); }else{ //鏃犳棤鏈熼檺鐨勫椁� 浼樺厛鏌ヨ鍓╀綑鏃堕暱澶т簬楠戣鏃堕暱鐨勪俊鎭�(鍙栨椂闂存渶灏忕殑濂楅) 鍐嶆煡璇㈠皬浜庨獞琛屾椂闀跨殑濂楅 List<DiscountMember> list = discountMemberList.stream().filter(i->i.getSurplusTime()>=driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ //d1鍦ㄥ墠鍒欏崌搴� 鍙嶄箣闄嶅簭 - list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); + list.sort((d1,d2)-> Integer.compare(d1.getSurplusTime(),d2.getSurplusTime())); + return list.get(Constants.ZERO); } - return list.get(Constants.ZERO); + } list = discountMemberList.stream().filter(i->i.getSurplusTime()<driveTime).collect(Collectors.toList()); if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(list)){ if(list.size()>Constants.ZERO){ - list.sort((d1,d2)-> Integer.compare(d1.getSurplusTime(),d2.getSurplusTime())); + list.sort((d1,d2)-> Integer.compare(d2.getSurplusTime(),d1.getSurplusTime())); } return list.get(Constants.ZERO); } @@ -1582,10 +1622,11 @@ + @Override public void autCancel(){ goodsorderMapper.update(null,new UpdateWrapper<Goodsorder>().lambda() .set(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.CANCEL.getKey()) - .set(Goodsorder::getEditDate,DateUtil.getCurrDateTime()) + .set(Goodsorder::getEditDate,DateUtil.getCurrDateTime()) .eq(Goodsorder::getStatus,Constants.GOODSORDER_STATUS.UN_PAY.getKey()) .apply(" NOW() >= create_date + INTERVAL '30 min' ") ); diff --git a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java index 9608680..4437b8a 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/MemberRidesServiceImpl.java @@ -398,7 +398,7 @@ } }else{ //濡傛灉鏄數杞︼紝璇锋眰web绔帴鍙e叧闂溅杈嗕俊鎭� - bike = sendCloseElecBikeRequest(memberRides.getBikeCode(),Constants.ONE); + bike = sendCloseElecBikeRequest(model.getOrdreId(),memberRides.getBikeCode()); } logInfo = bike!=null?bike.getForceBackInfo():null; Integer freeRentTime = Integer.valueOf(collect.get(Constants.FREE_RENT_TIME).getCode()); @@ -438,7 +438,7 @@ /** * 濡傛灉鏄數杞︼紝璇锋眰web绔帴鍙e叧闂溅杈嗕俊鎭� */ - private Bikes sendCloseElecBikeRequest(String bikeCode,int type) { + private Bikes sendCloseElecBikeRequest(String goodOrderId,String bikeCode) { Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda() .eq(Bikes::getType,Constants.ONE) .eq(Bikes::getIsdeleted,Constants.ZERO) @@ -448,30 +448,62 @@ return null; } bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触锛�"); - if(StringUtils.isNotBlank(bike.getDeviceSn())){ + if(StringUtils.isNotBlank(bike.getDeviceSn())) { try { //璇锋眰鍦板潃 - String url = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ELEC_BIKE_CONTRIL_API_URL).getCode(); + String url = systemDictDataBiz.queryByCode(Constants.SYSTEM, Constants.ELEC_BIKE_CONTRIL_API_URL).getCode(); JSONObject param = new JSONObject(); - param.put("clientId",StringTools.leftTrip(bike.getDeviceSn(),'0')); - param.put("type",type);//0寮�閿� 1鍏抽攣 - String res = HttpsUtil.postJsonString(url,param.toJSONString()); + param.put("id", goodOrderId); + String res = HttpsUtil.postJsonString(url, param.toJSONString()); JSONObject json = JSONObject.parseObject(res); - if(json.get("code").equals("200")){ + if (json.get("code").equals("200")) { //鍙戣捣鎸囦护鎴愬姛 bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣鎴愬姛锛�"); - }else{ - bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触锛�"+json.get("msg")); + } else { + bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触锛�" + json.get("msg")); } - }catch (Exception e){ + } catch (Exception e) { e.printStackTrace(); } }else{ bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触,鏈粦瀹氭帶鍒跺櫒sn锛�"); } - bikesMapper.updateById(bike); return bike; } +// private Bikes sendCloseElecBikeRequest(String bikeCode,int type) { +// Bikes bike = bikesMapper.selectOne(new QueryWrapper<Bikes>().lambda() +// .eq(Bikes::getType,Constants.ONE) +// .eq(Bikes::getIsdeleted,Constants.ZERO) +// .eq(Bikes::getCode,bikeCode) +// ); +// if(bike == null){ +// return null; +// } +// bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触锛�"); +// if(StringUtils.isNotBlank(bike.getDeviceSn())){ +// try { +// //璇锋眰鍦板潃 +// String url = systemDictDataBiz.queryByCode(Constants.SYSTEM,Constants.ELEC_BIKE_CONTRIL_API_URL).getCode(); +// JSONObject param = new JSONObject(); +// param.put("clientId",StringTools.leftTrip(bike.getDeviceSn(),'0')); +// param.put("type",type);//0寮�閿� 1鍏抽攣 +// String res = HttpsUtil.postJsonString(url,param.toJSONString()); +// JSONObject json = JSONObject.parseObject(res); +// if(json.get("code").equals("200")){ +// //鍙戣捣鎸囦护鎴愬姛 +// bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣鎴愬姛锛�"); +// }else{ +// bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触锛�"+json.get("msg")); +// } +// }catch (Exception e){ +// e.printStackTrace(); +// } +// }else{ +// bike.setForceBackInfo("寮哄埗杩樿溅鍏抽棴杞﹂攣澶辫触,鏈粦瀹氭帶鍒跺櫒sn锛�"); +// } +// bikesMapper.updateById(bike); +// return bike; +// } public static void main(String[] args) { String url = "http://localhost:10025/jtt808/device/8500"; @@ -771,7 +803,7 @@ throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"褰撳墠杞﹁締绫诲瀷鏃犳硶绉熻祦锛岃鑱旂郴绠$悊鍛橈紒"); } memberRidesResponse.setBikeCode(bike.getCode()); - memberRidesResponse.setBikeTypeName(baseParam.getName()); + memberRidesResponse.setBikeType(baseParam.getName()); MemberRides memberRides = new MemberRides(); this.dealMemberRidesData(baseParam.getId(),memberRides); memberRidesResponse.setBasePrice(memberRides.getBasePrice()); @@ -783,7 +815,7 @@ memberRidesResponse.getUnitPrice() ,memberRidesResponse.getUnitTime())); //鏌ヨ褰撳墠鐨勯獞琛屽椁� - memberRidesResponse.setDiscountMember(goodsorderService.getUseDiscount(memberId,Constants.ZERO)); + memberRidesResponse.setDiscountMember(goodsorderService.getUseDiscount(memberId,Constants.ZERO,bikeType)); return memberRidesResponse; } diff --git a/server/services/src/main/java/com/doumee/service/business/impl/TransactionsServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/TransactionsServiceImpl.java index f09b5a2..a235b29 100644 --- a/server/services/src/main/java/com/doumee/service/business/impl/TransactionsServiceImpl.java +++ b/server/services/src/main/java/com/doumee/service/business/impl/TransactionsServiceImpl.java @@ -192,13 +192,13 @@ //璐拱濂楅 澶勭悊鍐呭 DiscountMember discountMember = discountMemberMapper.selectById(transactions.getObjId()); if(Objects.nonNull(discountMember)){ - transactions.setContent(discountMember.getName() +" 鏈夋晥鏈�" + DateUtil.dateToString(discountMember.getUseStartDate(),"yyyy-MM-dd") +"-"+DateUtil.dateToString(discountMember.getUseEndDate(),"yyyy-MM-dd")); + transactions.setContent(discountMember.getName() +" | 鏈夋晥鏈�" + DateUtil.dateToString(discountMember.getUseStartDate(),"yyyy-MM-dd") +" 鑷� "+DateUtil.dateToString(discountMember.getUseEndDate(),"yyyy-MM-dd")); } }else if(Constants.equalsInteger(transactions.getType(),Constants.TRANSACTIONS_TYPE.PLATFORM_REFUND.getKey())){ DiscountMember discountMember = discountMemberMapper.selectOne( new QueryWrapper<DiscountMember>().lambda().eq(DiscountMember::getGoodsorderId, transactions.getOrderId()).last("limit 1")); if(Objects.nonNull(discountMember)){ - transactions.setContent(discountMember.getName() +" 鏈夋晥鏈�" + DateUtil.dateToString(discountMember.getUseStartDate(),"yyyy-MM-dd") +"-"+DateUtil.dateToString(discountMember.getUseEndDate(),"yyyy-MM-dd")); + transactions.setContent(discountMember.getName() +" | 鏈夋晥鏈�" + DateUtil.dateToString(discountMember.getUseStartDate(),"yyyy-MM-dd") +" 鑷� "+DateUtil.dateToString(discountMember.getUseEndDate(),"yyyy-MM-dd")); } } } diff --git a/server/services/src/main/resources/application-dev.yml b/server/services/src/main/resources/application-dev.yml index c481f6a..b9061a1 100644 --- a/server/services/src/main/resources/application-dev.yml +++ b/server/services/src/main/resources/application-dev.yml @@ -50,12 +50,13 @@ apiV3Key: iF3kC8pL8dZ9iU3hN5fX9zI6eF4xQ6fT serialNumer: 368B835A194384FD583B83B77977B84127D2F655 mchKey: W97N53Q71326D6JZ2E9HY5M4VT4BAC8S - notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify - refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify -# notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify - keyPath: D://apiclient_cert.p12 - privateCertPath: D://apiclient_cert.pem - privateKeyPath: D://apiclient_key.pem +# notifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxPayNotify +# refundNotifyUrl: http://xiaopiqiu3.natapp1.cc/api/wxRefundNotify + notifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxPayNotify + refundNotifyUrl: https://dmtest.ahapp.net/bike_h5_api/api/wxRefundNotify + keyPath: /usr/local/aliConfig/bike/apiclient_cert.p12 + privateCertPath: /usr/local/aliConfig/bike/apiclient_cert.pem + privateKeyPath: /usr/local/aliConfig/bike/apiclient_key.pem #鏈嶅姟鍟�-------------end--- existsSub: 1 appSecret: 1ceb7c9dff3c4330d653adc3ca55ea24 diff --git a/server/web/src/main/java/com/doumee/api/web/BusinessApi.java b/server/web/src/main/java/com/doumee/api/web/BusinessApi.java index 1c5ee93..8414b7f 100644 --- a/server/web/src/main/java/com/doumee/api/web/BusinessApi.java +++ b/server/web/src/main/java/com/doumee/api/web/BusinessApi.java @@ -181,6 +181,7 @@ public ApiResponse<PageData<Discount>> discountPage (@RequestBody PageWrap<Discount> pageWrap) { Discount discount = new Discount(); discount.setStatus(Constants.ZERO); + discount.setMinShow(Constants.ZERO); pageWrap.setModel(discount); return ApiResponse.success(discountService.findPage(pageWrap)); } @@ -326,10 +327,9 @@ @ApiImplicitParams({ @ApiImplicitParam(paramType = "header", dataType = "String", name = "token", value = "鐢ㄦ埛token鍊�", required = true), }) - public ApiResponse openElecBike(@RequestBody OpenElecBikeRequest param) { + public ApiResponse<MemberRidesDetailResponse> openElecBike(@RequestBody OpenElecBikeRequest param) { param.setMemberId(getMemberId()); - jtt808Service.openLock(param); - return ApiResponse.success( null); + return ApiResponse.success(jtt808Service.openLock(param)); } @LoginRequired @@ -344,5 +344,10 @@ return ApiResponse.success( null); } - + @ApiOperation(value = "寮哄埗杩樿溅", notes = "寮哄埗杩樿溅") + @PostMapping("/forceBack") + public ApiResponse forceBack(@RequestBody Goodsorder goodsorder) { + jtt808Service.forceBack(goodsorder.getId()); + return ApiResponse.success( null); + } } diff --git a/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java index ecf63d4..c77a7a0 100644 --- a/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java +++ b/server/web/src/main/java/com/doumee/jtt808/web/service/Jtt808Service.java @@ -80,7 +80,6 @@ @Autowired private MemberRidesJoinMapper memberRidesJoinMapper; - @Autowired private PricingParamMapper pricingParamMapper; @@ -102,6 +101,10 @@ return data; } + /** + * 鎵嬪姩杩樿溅 + * @param param + */ @Transactional(rollbackFor = {BusinessException.class}) public void backElecBike(BackElecBikeRequest param) { Member member = memberMapper.selectById(param.getMemberId()); @@ -113,6 +116,22 @@ gparam.setStatus(Constants.goodsorderStatus.pay); gparam.setType(Constants.ZERO); Goodsorder goodsorder = goodsorderService.findOne(gparam); + this.backBike(goodsorder); + } + + /** + * 鑷姩杩樿溅 + * @param id + */ + @Transactional + public void forceBack(String id){ + Goodsorder goodsorder = goodsorderService.findById(id); + this.backBike(goodsorder); + } + + + @Transactional(rollbackFor = {BusinessException.class}) + public void backBike(Goodsorder goodsorder){ if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"鏃犻獞琛岃鍗曡褰�"); } @@ -127,15 +146,15 @@ if(Constants.equalsInteger(rides.getStatus(),Constants.MEMBER_RIDES_STATUS.RIDES_RUNNING.getKey()) &&Constants.equalsInteger(rides.getType(),Constants.ONE)){ //濡傛灉鏄數杞﹀苟涓旀槸楠戣涓� 杩涜鍏抽攣澶勭悊 -// Bikes bike = getElecBikeByCode(rides.getBikeCode()); -// //鏌ヨ鍋滆溅绔欑偣淇℃伅 -// if(bike.getSiteId() ==null){ -// throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇锋寜瑕佹眰鍓嶅線鍋滆溅鐐瑰仠杞︼紒"); -// } -// lockBikes(bike.getDeviceSn(),Constants.ZERO);//鍙戣捣鍏抽攣鎸囦护璇锋眰 + Bikes bike = getElecBikeByCode(rides.getBikeCode()); + //鏌ヨ鍋滆溅绔欑偣淇℃伅 + if(bike.getSiteId() ==null){ + throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(), "瀵逛笉璧凤紝璇锋寜瑕佹眰鍓嶅線鍋滆溅鐐瑰仠杞︼紒"); + } + lockBikes(bike.getDeviceSn(),Constants.ZERO);//鍙戣捣鍏抽攣鎸囦护璇锋眰 backIds.add(rides.getId()); rides.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey());//宸茶繕杞� -// rides.setBackSiteId(bike.getSiteId());//杩樿溅绔欑偣 + rides.setBackSiteId(bike.getSiteId());//杩樿溅绔欑偣 rides.setBackDate(new Date()); Integer freeRentTime = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); @@ -194,7 +213,7 @@ APIResult<T0201_0500> data = result.block(); if(!data.isSuccess()){ //濡傛灉寮�閿佸け璐ワ紝鍒欒繑鍥炲紓甯� - throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝"+(type ==0?"杞﹁締寮�閿�":"杞﹁締鍏抽攣")+"澶辫触锛岃绋嶅悗閲嶈瘯锛屾垨鑰呰仈绯诲洯鍖虹鐞嗕汉鍛橈紒"); + throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), "瀵逛笉璧凤紝"+(type ==0?"杞﹁締鍏抽攣":"杞﹁締寮�閿�")+"澶辫触锛岃绋嶅悗閲嶈瘯锛屾垨鑰呰仈绯诲洯鍖虹鐞嗕汉鍛橈紒"); } } @@ -243,6 +262,7 @@ Goodsorder gparam = new Goodsorder(); gparam.setMemberId(param.getMemberId()); gparam.setStatus(Constants.goodsorderStatus.pay); + gparam.setType(Constants.ZERO); Goodsorder goodsorder = goodsorderService.findOne(gparam); if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鎮ㄥ綋鍓嶆湁楠戣涓鍗曡褰�"); @@ -256,9 +276,9 @@ if(memberRides ==null || memberRides.getBikeCode() == null){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鎮ㄥ綋鍓嶆湁楠戣涓褰�"); } -// Bikes bike = getElecBikeByCode(memberRides.getBikeCode()); -// //鏌ヨ鍋滆溅浣嶇疆鏄惁绗﹀悎鍋滆溅浣嶇疆瑙勮寖 -// checkPausePostionBiz(bike); + Bikes bike = getElecBikeByCode(memberRides.getBikeCode()); + //鏌ヨ鍋滆溅浣嶇疆鏄惁绗﹀悎鍋滆溅浣嶇疆瑙勮寖 + checkPausePostionBiz(bike); memberRides.setPauseDate(new Date()); memberRides.setEditDate(memberRides.getBackDate()); memberRides.setStatus(Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()); @@ -373,7 +393,7 @@ //濡傛灉杞﹁締绫诲瀷鏄┖ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), " 璇ヨ溅鍨嬫殏鏃朵笉鑳藉�熻溅鎿嶄綔鍝︼紝璇锋洿鎹㈠叾浠栬溅鍨嬮噸璇曪紒"); } - cacheOpenLock.put(bike.getCode(), 1); + cacheOpenLock.put(openElecBikeRequest.getCode(), 1); try { //鍒ゆ柇褰撳墠鏄惁宸叉敮浠樻娂閲� Goodsorder goodsorder = goodsorderService.findOneByWrapper(new QueryWrapper<Goodsorder>() @@ -404,7 +424,7 @@ //鏍规嵁杞﹀瀷鏌ヨ璁′环鏂规 isValidePricingType(bike,memberRides) ; MemberRidesDetailResponse memberRidesDetailResponse = new MemberRidesDetailResponse(); -// this.lockBikes(bike.getDeviceSn(),1); + this.lockBikes(bike.getDeviceSn(),1); //瀛樺偍楠戣璁板綍 memberRides.setId(Constants.getUUID()); memberRides.setIsdeleted(Constants.ZERO); @@ -420,10 +440,12 @@ memberRidesJoinMapper.insert(memberRides); BeanUtils.copyProperties(memberRides, memberRidesDetailResponse); return memberRidesDetailResponse; - }catch (Exception e){ - throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "寮�閿佸け璐ワ紝璇疯仈绯荤鐞嗗憳"); + }catch (BusinessException biz){ + throw biz; + }catch (Exception biz){ + throw new BusinessException(ResponseStatus.SERVER_ERROR); }finally { - cacheOpenLock.remove(bike.getCode()); + cacheOpenLock.remove(openElecBikeRequest.getCode()); } } @@ -437,6 +459,7 @@ Goodsorder gparam = new Goodsorder(); gparam.setMemberId(param.getMemberId()); gparam.setStatus(Constants.goodsorderStatus.pay); + gparam.setType(Constants.ZERO); Goodsorder goodsorder = goodsorderService.findOne(gparam); if(Objects.isNull(goodsorder)){ throw new BusinessException(ResponseStatus.NO_UNCLOSEED_ORDER.getCode(),"瀵逛笉璧凤紝鏈煡璇㈠埌鎮ㄥ綋鍓嶆湁楠戣涓鍗曡褰�"); @@ -536,9 +559,10 @@ .eq(MemberRides::getIsdeleted,Constants.ZERO) .eq(MemberRides::getType,Constants.ONE) .eq(MemberRides::getStatus,Constants.MEMBER_RIDES_STATUS.RIDES_PAUSING.getKey()) - .apply(" NOW() >= t.create_date + INTERVAL '2 hours' ") + .apply(" NOW() >= (t.create_date + INTERVAL '"+systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME,Constants.PAUSE_AUTO_CLOSE_TIME).getCode()+" min') ") ); + ; for (MemberRides timeOutRides:memberRidesList) { Goodsorder goodsorder = goodsorderService.findById(timeOutRides.getOrdreId()); //鏌ヨ楠戣璁板綍 @@ -557,6 +581,10 @@ rides.setStatus(Constants.MEMBER_RIDES_STATUS.BACK_CYCLING.getKey());//宸茶繕杞� rides.setBackSiteId(bike.getSiteId());//杩樿溅绔欑偣 rides.setBackDate(new Date()); + Integer freeRentTime = Integer.valueOf(systemDictDataBiz.queryByCode(Constants.MINI_PROGRAMME, Constants.FREE_RENT_TIME).getCode()); + Integer rideTime = DateUtil.betweenMin(rides.getRentDate(), rides.getBackDate()); + //璁$畻楠戣璁¤垂鏃堕暱 + rides.setDuration( rideTime > freeRentTime ? rideTime : 0 ); rides.setEditDate(rides.getBackDate()); memberRidesJoinMapper.updateById(rides);//鏇存柊楠戣鐘舵�佷负宸茶繕杞� } @@ -570,10 +598,10 @@ //鍙戦�佸皬绋嬪簭閫氱煡 Member member = memberMapper.selectById(goodsorder.getMemberId()); if(Objects.nonNull(member)&&StringUtils.isNotBlank(member.getOpenid())){ - sendWxMessage.bookingsCancel(member.getOpenid(),goodsorder.getId(), WxMiniConfig.wxMaService.getAccessToken(),timeOutRides.getBikeCode(),goodsorder.getPayDate(),goodsorder.getEndDate()); + sendWxMessage.bookingsCancel(member.getOpenid(),goodsorder.getId(), + WxMiniConfig.wxMaService.getAccessToken(), + timeOutRides.getBikeCode(),goodsorder.getPayDate(),goodsorder.getEditDate()); } - - } } -- Gitblit v1.9.3