From 511ce651667f5b2284247cc60599078b86f7963f Mon Sep 17 00:00:00 2001
From: rk <94314517@qq.com>
Date: 星期五, 23 一月 2026 13:48:07 +0800
Subject: [PATCH] Merge remote-tracking branch 'origin/master'
---
server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsorderController.java | 7 +
admin/src/components/business/OperaOrderRefundWindow.vue | 249 +++++++++++++++++++++++++++++++++++
admin/src/components/business/OperaGoodsOrderDetail.vue | 52 +++++-
admin/src/views/business/goodsorder.vue | 12 +
admin/src/api/business/goodsorder.js | 3
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java | 3
admin/src/components/business/OperaOrderCancelWindow.vue | 2
admin/src/components/business/OperaShipmentsWindow.vue | 2
server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java | 2
server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java | 38 ++++
10 files changed, 345 insertions(+), 25 deletions(-)
diff --git a/admin/src/api/business/goodsorder.js b/admin/src/api/business/goodsorder.js
index fc48acd..b829e37 100644
--- a/admin/src/api/business/goodsorder.js
+++ b/admin/src/api/business/goodsorder.js
@@ -37,6 +37,9 @@
export function orderPlanCancelOrder (data) {
return request.post('/business/goodsorder/orderPlanCancelOrder', data)
}
+export function orderRefund (data) {
+ return request.post('/business/goodsorder/orderRefund', data)
+}
export function orderSendOutGoods (data) {
return request.post('/business/goodsorder/orderSendOutGoods', data)
}
diff --git a/admin/src/components/business/OperaGoodsOrderDetail.vue b/admin/src/components/business/OperaGoodsOrderDetail.vue
index 76c4f46..dc6a2ac 100644
--- a/admin/src/components/business/OperaGoodsOrderDetail.vue
+++ b/admin/src/components/business/OperaGoodsOrderDetail.vue
@@ -14,8 +14,8 @@
<div v-if="info.status ==4" class="header-grey">宸插叧闂�</div>
<div v-if="info.status ==6" class="header-grey">宸查��娆�</div>
<div style="text-align: right;">
- <div class="header-red-btn" v-if="info.status == 0" @click="$refs.OperaOrderCancelWindow.open('鍙栨秷璁㈠崟', info)">鍙栨秷璁㈠崟</div>
- <div class="header-red-btn" v-if="info.status == 3" @click="$refs.OperaOrderCancelWindow.open('璁㈠崟閫�娆�', info)">璁㈠崟閫�娆�</div>
+ <div class="header-red-btn" v-if="info.status == 0 || info.status == 1" @click="$refs.OperaOrderCancelWindow.open('鍙栨秷璁㈠崟', info)">鍙栨秷璁㈠崟</div>
+ <div class="header-red-btn" v-if="info.status == 3" @click="$refs.OperaOrderRefundWindow.open('璁㈠崟閫�娆�', info)">璁㈠崟閫�娆�</div>
<div class="header-blue-btn" @click="showChangeRecord">鍙樻洿璁板綍</div>
</div>
</div>
@@ -94,7 +94,7 @@
</div>
<div class="info-item" >
<div class="info-item-a">鍙栨秷鏃堕棿锛�<span >{{info.cancelDate}}</span></div>
- <div class="info-item-a">鍙栨秷浜哄憳锛�<span>{{info.cancelUserName }}</span></div>
+ <div class="info-item-a">鍙栨秷浜哄憳锛�<span>{{info.cancelUser !=null?info.cancelUserName:'鐢ㄦ埛涓诲姩鍙栨秷'}}</span></div>
<div class="info-item-a">鍙栨秷璇存槑锛�<span>{{info.cancelInfo }}</span></div>
</div>
<div class="info-item"></div>
@@ -121,20 +121,47 @@
<el-table-column prop="name" label="鍟嗗搧鍚嶇О" align="center" min-width="150px"> </el-table-column>
<el-table-column prop="categoryName" label="鍟嗗搧鍒嗙被" align="center" min-width="150px"> </el-table-column>
<el-table-column prop="goodsWeight" label="閲嶉噺(kg)" align="center" min-width="150px"></el-table-column>
- <el-table-column prop="price" label="閿�鍞环(鍏�)" align="center" min-width="100px"></el-table-column>
+ <el-table-column prop="price" label="閿�鍞环(鍏�)" align="center" min-width="100px">
+ <template slot-scope="{row}">
+ <span>锟{(row.price || 0).toFixed(2)}}</span>
+ </template>
+ </el-table-column>
<el-table-column prop="goodsNum" label="鏁伴噺" align="center" min-width="150px"></el-table-column>
- <el-table-column prop="totalPrice" label="灏忚" align="center" min-width="150px"></el-table-column>
+ <el-table-column prop="totalPrice" label="灏忚(鍏�)" align="center" min-width="150px">
+ <template slot-scope="{row}">
+ <span class="orange">锟{(row.totalPrice || 0).toFixed(2)}}</span>
+ </template>
+ </el-table-column>
</el-table>
</div>
<div class="info-item" >
<div class="info-item-a">鍟嗗搧鎬讳环锛�<span> 锟{((info.totalPrice||0)-(info.mailPrice || 0)).toFixed(2)}}</span></div>
<div class="info-item-a">蹇�掕垂锛�<span>锟{(info.mailPrice||0).toFixed(2)}}</span></div>
- <div class="info-item-a">璁㈠崟鎬讳环锛�<span > 锟{(info.totalPrice||0).toFixed(2)}}</span></div>
+ <div class="info-item-a">璁㈠崟鎬讳环锛�<span> 锟{(info.totalPrice||0).toFixed(2)}}</span></div>
</div>
<div class="info-item" >
<div class="info-item-a">浼樻儬鍏卞噺锛�<span> -锟{((info.integral||0) + (info.couponPrice||0)).toFixed(2) }}</span>
- <span style="margin-left: 20px;" >
- <el-button type="text" @click="showCouponPrice">鏌ョ湅</el-button>
+ <span v-if="((info.integral||0) + (info.couponPrice||0)).toFixed(2)>0">
+ <el-popover
+ style="margin-left: 20px;"
+ placement="right-start"
+ width="360px"
+ @show="visible2=true"
+ @hide="visible2=false"
+ trigger="click" >
+ <div style="margin-top: 10px;font-size: 12px;">
+ <div style="margin-bottom: 20px;font-weight: 600;"> 浼樻儬鍏卞噺锛�<span class="red"> -锟{((info.integral||0) + (info.couponPrice||0)).toFixed(2) }}</span></div>
+ <div style="margin-bottom: 10px;display: flex;align-items: baseline;" v-if="(info.integral||0)>0">
+ <span style="border-left: 3px solid red;font-size: 10px;margin-right: 10px;height: 10px;"></span>
+ 绉垎鎶垫墸锛�-锟{(info.integral||0).toFixed(2) +' '}}浣跨敤{{(info.useIntegral||0)}}绉垎鎶垫墸锟{(info.integral||0).toFixed(2) +' '}}鍏�
+ </div>
+ <div style="margin-bottom: 10px;display: flex;align-items: baseline;" v-if="(info.couponPrice||0)>0">
+ <span style="border-left: 3px solid red;font-size: 10px;margin-right: 10px;height: 10px;"></span>
+ {{' 浼� 鎯� 鍒� '}}锛歿{' '}}-锟{(info.couponPrice||0).toFixed(2) +' '}}浣跨敤{{info.couponName}}
+ </div>
+ </div>
+ <el-button slot="reference" type="text">{{visible2?'鏀惰捣':'鏌ョ湅'}}</el-button>
+ </el-popover>
</span>
</div>
</div>
@@ -150,6 +177,7 @@
<OperaChangeIntegralWindow ref="OperaChangeIntegralWindow" @success="successBiz"/>
<OperaOrderMarkWindow ref="operaOrderMarkWindow" @success="successBiz"/>
<OperaOrderCancelWindow ref="OperaOrderCancelWindow" @success="successBiz"/>
+ <OperaOrderRefundWindow ref="OperaOrderRefundWindow" @success="successBiz"/>
</GlobalWindow>
</template>
@@ -161,13 +189,15 @@
import OperaOrderCancelWindow from '@/components/business/OperaOrderCancelWindow'
import OperaOrderMarkWindow from '@/components/business/OperaOrderMarkWindow'
import OperaShipmentsWindow from '@/components/business/OperaShipmentsWindow'
+import OperaOrderRefundWindow from '@/components/business/OperaOrderRefundWindow'
export default {
name: 'OperaShopGoodsWindow',
extends: BaseOpera,
- components: { GlobalWindow, OperaChangeOrderRecordWindow, OperaChangeIntegralWindow,OperaOrderMarkWindow,OperaShipmentsWindow ,OperaOrderCancelWindow},
+ components: { OperaOrderRefundWindow, GlobalWindow, OperaChangeOrderRecordWindow, OperaChangeIntegralWindow, OperaOrderMarkWindow, OperaShipmentsWindow, OperaOrderCancelWindow },
data () {
return {
title: '',
+ visible2: false,
visible: false,
tabelHeight: null,
info: {},
@@ -192,7 +222,7 @@
this.loadInfo()
this.$emit('success')
},
- showCouponPrice(){
+ showCouponPrice () {
},
loadInfo () {
@@ -286,7 +316,7 @@
}
.info-item-a span{
- font-weight: 600;
+ //font-weight: 500;
}
.info-item-a .btn{
font-size: 12px !important;
diff --git a/admin/src/components/business/OperaOrderCancelWindow.vue b/admin/src/components/business/OperaOrderCancelWindow.vue
index db44db8..c4c9b8f 100644
--- a/admin/src/components/business/OperaOrderCancelWindow.vue
+++ b/admin/src/components/business/OperaOrderCancelWindow.vue
@@ -7,7 +7,7 @@
@confirm="confirm"
>
<el-form :model="form" ref="form" label-width="120px" label-suffix="锛�" :rules="rules" inline>
- <p class="tip-warn" style="margin: 30px;">
+ <p class="tip-warn" style="margin: 30px;font-size: 14px;">
<i class="el-icon-warning"></i>
鎿嶄綔璇存槑锛氭偍姝e湪鍙栨秷璁㈠崟<span class="red">{{ form.code }} </span>锛岃璋ㄦ厧鎿嶄綔锛侊紒</p>
<el-form-item label="澶囨敞" prop="cancelInfo">
diff --git a/admin/src/components/business/OperaOrderRefundWindow.vue b/admin/src/components/business/OperaOrderRefundWindow.vue
new file mode 100644
index 0000000..1fb9731
--- /dev/null
+++ b/admin/src/components/business/OperaOrderRefundWindow.vue
@@ -0,0 +1,249 @@
+<template>
+ <GlobalWindow
+ :title="title"
+ width="100%"
+ :visible.sync="visible"
+ >
+ <div class="detail-box" >
+ <p class="tip-warn" style="margin-bottom: 30px;font-size: 14px;">
+ <i class="el-icon-warning"></i>
+ 鎿嶄綔璇存槑锛氭偍姝i拡瀵硅鍗�<span class="red">{{ info.code }} </span>杩涜閫�娆炬搷浣滐紝璇ユ搷浣滀笉鍙�嗚璋ㄦ厧鎿嶄綔锛侊紒</p>
+ <div class="header">
+ <div class="header-b">鍟嗗搧淇℃伅</div>
+ </div>
+ <div class="info-item" >
+ <el-table :data="info.goodsorderDetailList||[]" stripe border >
+ <el-table-column prop="imgurl" label="鍟嗗搧鍥�" min-width="80px" align="center">
+ <template slot-scope="{row}">
+ <el-image style="width: 50px;height: 50px;" v-if="row.imgurl && row.imgurl!=''" :src="row.imgurl" :preview-src-list="[row.imgurl]"></el-image>
+ </template>
+ </el-table-column>
+ <el-table-column prop="name" label="鍟嗗搧鍚嶇О" align="center" min-width="150px"> </el-table-column>
+ <el-table-column prop="categoryName" label="鍟嗗搧鍒嗙被" align="center" min-width="150px"> </el-table-column>
+ <el-table-column prop="goodsWeight" label="閲嶉噺(kg)" align="center" min-width="150px"></el-table-column>
+ <el-table-column prop="price" label="閿�鍞环(鍏�)" align="center" min-width="100px">
+ <template slot-scope="{row}">
+ <span>锟{(row.price || 0).toFixed(2)}}</span>
+ </template>
+ </el-table-column>
+ <el-table-column prop="goodsNum" label="鏁伴噺" align="center" min-width="150px"></el-table-column>
+ <el-table-column prop="totalPrice" label="灏忚(鍏�)" align="center" min-width="150px">
+ <template slot-scope="{row}">
+ <span class="orange">锟{(row.totalPrice || 0).toFixed(2)}}</span>
+ </template>
+ </el-table-column>
+ </el-table>
+ </div>
+ <div class="info-item" >
+ <div class="info-item-a">鍟嗗搧鎬讳环锛�<span> 锟{((info.totalPrice||0)-(info.mailPrice || 0)).toFixed(2)}}</span></div>
+ <div class="info-item-a">蹇�掕垂锛�<span>锟{(info.mailPrice||0).toFixed(2)}}</span></div>
+ <div class="info-item-a">璁㈠崟鎬讳环锛�<span> 锟{(info.totalPrice||0).toFixed(2)}}</span></div>
+ </div>
+ <div class="info-item" >
+ <div class="info-item-a">绉垎鎶垫墸锛�<span v-if="(info.integral||0)>0">-锟{(info.integral||0).toFixed(2) +' '}}浣跨敤{{(info.useIntegral||0)}}绉垎鎶垫墸锟{(info.integral||0).toFixed(2) +' '}}鍏�</span></div>
+ <div class="info-item-a">浼樻儬鍒革細<span v-if="(info.couponPrice||0)>0">-锟{(info.couponPrice||0).toFixed(2) +' '}} 浣跨敤{{info.couponName}}</span></div>
+ <div class="info-item-a">缁忛攢鍟嗙粨绠楋細<span> 锟{(info.totalPrice||0).toFixed(2)}}</span></div>
+ </div>
+ <div class="info-item" >
+ <div class="info-item-a">瀹炰粯閲戦锛�<span class="red"> 锟{(info.price||0).toFixed(2)}}</span></div>
+ <div class="info-item-a">杩旇繕鐢ㄦ埛绉垎锛�<span class="orange"> {{(info.returnMemberIntegral||0)}}</span></div>
+ <div class="info-item-a">杩旇繕缁忛攢鍟嗙Н鍒嗭細<span class="orange">锟{(info.shopSettlement || 0).toFixed(2) }}</span></div>
+ </div>
+ <div class="header">
+ <div class="header-b">閫�娆惧唴瀹�</div>
+ <div class="info-item" >
+ <el-form :model="form" ref="form" label-width="120px" label-suffix="锛�" :rules="rules" inline>
+ <el-form-item label="閫�娆鹃噾棰�" prop="price" style="display: block;">
+ <el-input type="number" v-model="form.price" placeholder="璇疯緭鍏ラ��娆鹃噾棰�" v-trim> <template slot="append"> 鍏�</template> </el-input>
+ <span class="tip-warn" style="margin-bottom: 30px;font-size: 14px;"> <i class="el-icon-warning"></i>
+ 鎻愮ず锛氬綋鍓嶈鍗曟渶澶氬彲閫�閲戦涓�<span class="red">{{(info.price||0).toFixed(2)}}</span></span>
+ </el-form-item>
+ <div style="display:flex;">
+ <el-form-item label="閫�杩�" prop="refundInfo" style="display: inline;">
+ <el-checkbox style="border: none;" v-model="checked1" label="閫�杩樺鎴蜂紭鎯犲埜" border></el-checkbox>
+ </el-form-item>
+ <el-form-item label="" prop="refundInfo" style="display: inline;">
+ <el-checkbox style="border: none" v-model="checked1" label="閫�杩樺鎴风Н鍒�" border></el-checkbox>
+ </el-form-item>
+ </div>
+ <div style="display:flex;">
+ <el-form-item label="鎵i櫎" prop="refundInfo" style="display: inline;">
+ <el-checkbox style="border: none" v-model="checked1" label="鎵i櫎缁忛攢鍟嗗凡缁撶畻閲戦" border></el-checkbox>
+ </el-form-item>
+ <el-form-item label="" prop="refundInfo" style="display: inline;">
+ <el-checkbox style="border: none" v-model="checked1" label="鎵i櫎宸茶繑瀹㈡埛绉垎" border></el-checkbox>
+ </el-form-item>
+ <el-form-item label="" prop="refundInfo" style="display: inline;">
+ <el-checkbox style="border: none" v-model="checked1" label="鎵i櫎宸茶繑缁忛攢鍟嗙Н鍒�" border></el-checkbox>
+ </el-form-item>
+ </div>
+ <el-form-item label="澶囨敞" prop="refundInfo" style="display: block;">
+ <el-input type="textarea" :autosize="{ minRows: 4, maxRows:4 }" style="width: 500px;" v-model="form.cancelInfo" placeholder="璇疯緭鍏ュ彇娑堣鏄�" v-trim/>
+ </el-form-item>
+ </el-form>
+ </div>
+ </div>
+ </div>
+ <template v-slot:footer>
+ <el-button type="primary" @click="confirm">纭</el-button>
+ <el-button @click="visible=false">杩斿洖</el-button>
+ </template>
+ </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import BaseOpera from '@/components/base/BaseOpera'
+import { shopDetail } from '@/api/business/shop'
+export default {
+ name: 'OperaOrderRefundWindow',
+ extends: BaseOpera,
+ components: { GlobalWindow },
+ data () {
+ return {
+ title: '',
+ visible2: false,
+ visible: false,
+ tabelHeight: null,
+ info: {},
+ shopInfo: {},
+ rules: {
+ price: [
+ { required: true, message: '璇疯緭鍏ラ��娆鹃噾棰�', tigger: 'blur' }
+ ]
+ },
+ // 鎼滅储
+ form: {
+ id: '',
+ checked1:false,
+ price: 0,
+ type: null
+ }
+ }
+ },
+ created () {
+ this.config({
+ module: '璁㈠崟淇℃伅琛�',
+ api: '/business/goodsorder',
+ 'field.id': 'id',
+ 'field.main': 'id'
+ })
+ },
+ methods: {
+ successBiz () {
+ this.loadInfo()
+ this.$emit('success')
+ },
+ loadInfo () {
+ shopDetail(this.info.distributionShopId).then(res => {
+ this.shopInfo = res || this.shopInfo
+ })
+ },
+ open (title, info) {
+ this.title = title
+ this.visible = true
+ this.info = info || {}
+ this.form.price = ''
+
+ if (this.info.distributionShopId != null) {
+ this.loadInfo()
+ }
+ },
+ confirm () {
+ this.$refs.form.validate((valid) => {
+ if (!valid) {
+ return
+ }
+ this.$dialog.messageWaring(`纭畾杩涜閫�娆捐璁㈠崟锛�${this.info.code}锛焋)
+ .then(() => {
+ this.isWorking = true
+ this.api.orderRefund(this.form)
+ .then(() => {
+ this.visible = false
+ this.$tip.apiSuccess('閫�娆炬垚鍔�')
+ this.$emit('success')
+ }).catch(e => {
+ this.$tip.apiFailed(e)
+ })
+ .finally(() => {
+ this.isWorking = false
+ })
+ })
+
+ // 璋冪敤鏂板缓鎺ュ彛
+ })
+ }
+ }
+}
+</script>
+<style scoped lang="scss">
+.table-pagination{
+ position: fixed !important;
+ bottom: 50px;
+}
+.header-b{
+ display: inline-block;
+ font-size: 16px;
+ font-weight: bold;
+}
+.header-red-btn{
+ display: inline-block;
+ font-size: 12px;
+ background-color: red;
+ padding: 2px 10px 3px 10px;
+ margin-left: 20px;
+ color: white;
+ cursor: pointer;
+ border-radius: 5px ;
+}
+.header-blue-btn{
+ display: inline-block;
+ font-size: 12px;
+ background-color: #216EEE;
+ padding: 2px 10px 3px 10px;
+ margin-left: 20px;
+ color: white;
+ cursor: pointer;
+ border-radius: 5px ;
+}
+.header-grey{
+ display: inline-block;
+ font-size: 12px;
+ border: 1px solid grey;
+ padding: 2px 10px;
+ margin-left: 20px;
+ color: grey;
+ border-radius: 5px ;
+}
+.header-orange{
+ display: inline-block;
+ font-size: 12px;
+ border: 1px solid orange;
+ padding: 2px 10px;
+ margin-left: 20px;
+ color: orange;
+ border-radius: 5px ;
+}
+.header-btn{
+ display: inline-block;
+ border: none;
+ padding: 2px 10px;
+ margin-left: 20px;
+}
+.info-item{
+ display: flex;
+ width: 100%;
+ margin: 15px;
+}
+.info-item-a{
+ flex: 1;
+ font-size: 14px;
+
+}
+.info-item-a span{
+}
+.info-item-a .btn{
+ font-size: 12px !important;
+ cursor: pointer !important;
+}
+</style>
diff --git a/admin/src/components/business/OperaShipmentsWindow.vue b/admin/src/components/business/OperaShipmentsWindow.vue
index ff11517..4b93227 100644
--- a/admin/src/components/business/OperaShipmentsWindow.vue
+++ b/admin/src/components/business/OperaShipmentsWindow.vue
@@ -7,7 +7,7 @@
@confirm="confirm"
>
<el-form :model="form" ref="form" :rules="rules" label-width="120px" label-suffix="锛�" inline>
- <p class="tip-warn" style="margin: 30px;"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛氭偍姝e湪閽堝璁㈠崟锛�<span class="red">{{ form.code }} </span>杩涜{{ form.status==2?'蹇�掑彉鏇�':'鍙戣揣' }}鎿嶄綔锛�</p>
+ <p class="tip-warn" style="margin: 30px;font-size: 14px;"><i class="el-icon-warning"></i>鎿嶄綔璇存槑锛氭偍姝e湪閽堝璁㈠崟锛�<span class="red">{{ form.code }} </span>杩涜{{ form.status==2?'蹇�掑彉鏇�':'鍙戣揣' }}鎿嶄綔锛�</p>
<el-form-item label="蹇�掑叕鍙�" prop="kdId">
<el-select
v-model="form.kdId"
diff --git a/admin/src/views/business/goodsorder.vue b/admin/src/views/business/goodsorder.vue
index 3e5f518..fc80c6f 100644
--- a/admin/src/views/business/goodsorder.vue
+++ b/admin/src/views/business/goodsorder.vue
@@ -85,7 +85,7 @@
<span v-if="item.status ==1" class="orange">{{item.receiveType==1?'寰呰嚜鎻�':'寰呭彂璐�'}}</span>
<span v-if="item.status ==2" class="orange">寰呮敹璐�</span>
<span v-if="item.status ==3" class="grey">浜ゆ槗瀹屾垚</span>
- <span v-if="item.status ==4" class="grey">宸插叧闂�</span>
+ <span v-if="item.status ==4" class="grey">宸插彇娑�</span>
<span v-if="item.status ==6" class="grey">宸查��娆�</span>
</div>
</div>
@@ -125,9 +125,9 @@
<div class="action">
<el-button v-if="item.status==1 && item.receiveType!=1" style=" width: 80%;" type="primary" @click="$refs.operaShipmentsWindow.open('鍙戣揣', item)">鍙戣揣</el-button>
<div></div>
- <el-button v-if="item.status == 0" style="color: red; " type="text" @click="$refs.OperaOrderCancelWindow.open('鍙栨秷璁㈠崟', item)">鍙栨秷璁㈠崟</el-button>
+ <el-button v-if="item.status == 0 || item.status==1" style="color: red; " type="text" @click="$refs.OperaOrderCancelWindow.open('鍙栨秷璁㈠崟', item)">鍙栨秷璁㈠崟</el-button>
<div></div>
- <el-button v-if="item.status == 3" style="color: red " type="text" @click="cancelOrder(item)">璁㈠崟閫�娆�</el-button>
+ <el-button v-if="item.status == 3" style="color: red " type="text" @click="$refs.OperaOrderRefundWindow.open('璁㈠崟閫�娆�', item)">璁㈠崟閫�娆�</el-button>
<div></div>
<el-button v-if="item.status==2 && item.receiveType!=1" style="color: #666; " type="text" @click="$refs.operaShipmentsWindow.open('蹇�掍俊鎭彉鏇�', item)">蹇�掑彉鏇�</el-button>
<div></div>
@@ -149,6 +149,7 @@
<!-- 鏂板缓/淇敼 -->
<OperaShipmentsWindow ref="operaShipmentsWindow" @success="search"/>
<OperaOrderMarkWindow ref="operaOrderMarkWindow" @success="handlePageChange"/>
+ <OperaOrderRefundWindow ref="OperaOrderRefundWindow" @success="handlePageChange"/>
<OperaOrderCancelWindow ref="OperaOrderCancelWindow" @success="handlePageChange"/>
<OperaGoodsOrderDetail ref="operaGoodsOrderDetail" @success="handlePageChange"/>
</TableLayout>
@@ -162,10 +163,11 @@
import OperaOrderMarkWindow from '@/components/business/OperaOrderMarkWindow'
import OperaOrderCancelWindow from '@/components/business/OperaOrderCancelWindow'
import OperaGoodsOrderDetail from '@/components/business/OperaGoodsOrderDetail'
+import OperaOrderRefundWindow from "@/components/business/OperaOrderRefundWindow";
export default {
name: 'Goodsorder',
extends: BaseTable,
- components: { TableLayout, Pagination, OperaShipmentsWindow, OperaOrderMarkWindow, OperaGoodsOrderDetail,OperaOrderCancelWindow },
+ components: {OperaOrderRefundWindow, TableLayout, Pagination, OperaShipmentsWindow, OperaOrderMarkWindow, OperaGoodsOrderDetail,OperaOrderCancelWindow },
data () {
return {
status: '10',
@@ -177,7 +179,7 @@
{ name: '2', label: '寰呮敹璐�', count: 0 },
{ name: '3', label: '浜ゆ槗瀹屾垚', count: 0 },
{ name: '6', label: '宸查��娆�', count: 0 },
- { name: '4', label: '浜ゆ槗鍏抽棴', count: 0 }],
+ { name: '4', label: '宸插彇娑�', count: 0 }],
// 鎼滅储
searchForm: {
id: '',
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsorderController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsorderController.java
index 776290f..8bbc807 100644
--- a/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsorderController.java
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/GoodsorderController.java
@@ -142,6 +142,13 @@
goodsorderService.orderPlanCancelOrder(goodsorder);
return ApiResponse.success(null);
}
+ @ApiOperation("璁㈠崟閫�娆�")
+ @PostMapping("/orderRefund")
+ @RequiresPermissions("business:goodsorder:update")
+ public ApiResponse orderRefund(@RequestBody Goodsorder goodsorder) {
+ goodsorderService.orderRefund(goodsorder);
+ return ApiResponse.success(null);
+ }
@ApiOperation("鐗╂祦鏌ヨ")
diff --git a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
index b1afc85..a21b33d 100644
--- a/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
+++ b/server/dmmall_service/src/main/java/com/doumee/dao/business/model/Goodsorder.java
@@ -236,6 +236,9 @@
@ApiModelProperty(value = "鐢ㄦ埛濮撳悕")
@TableField(exist = false)
private String memberName;
+ @ApiModelProperty(value = "浼樻儬鍒稿悕绉�")
+ @TableField(exist = false)
+ private String couponName;
@ApiModelProperty(value = "鍙栨秷浜哄憳濮撳悕")
@TableField(exist = false)
private String cancelUserName;
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
index 3767b00..eb2de77 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/GoodsorderService.java
@@ -235,5 +235,5 @@
PageData<Goodsorder> shopOrderPage(PageWrap<ShopOrderRequest> pageWrap);
-
+ void orderRefund(Goodsorder goodsorder);
}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
index 0fa21e1..155c66e 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/GoodsorderServiceImpl.java
@@ -388,7 +388,7 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),ResponseStatus.DATA_EMPTY.getMessage());
}
- cancelOrder( query.getId(), user.getId(),goodsorder.getCancelInfo() );
+ cancelOrderNew( query.getId(), user.getId(),goodsorder.getCancelInfo() );
}
@@ -411,17 +411,27 @@
.selectAs(Member::getNickname,Goodsorder::getNickName)
.selectAs(Member::getPhone,Goodsorder::getPhone)
.selectAs(Member::getName,Goodsorder::getMemberName)
- .selectAs(SystemUser::getRealname,Goodsorder::getKdUserName)
+ .selectAs(MemberCoupon::getName,Goodsorder::getCouponName)
+ .select("t4.realname",Goodsorder::getKdUserName)
+ .select("t5.realname",Goodsorder::getCancelUserName)
+ .select("t6.realname",Goodsorder::getRefundUserName)
.selectAs(Shop::getName,Goodsorder::getShopName)
+ .leftJoin(MemberCoupon.class,MemberCoupon::getId,Goodsorder::getCouponId)
.leftJoin(Shop.class,Shop::getId,Goodsorder::getDistributionShopId)
.leftJoin(Member.class,Member::getId,Goodsorder::getMemberId)
.leftJoin(SystemUser.class,SystemUser::getId,Goodsorder::getKdUser)
+ .leftJoin(SystemUser.class,SystemUser::getId,Goodsorder::getCancelUser)
+ .leftJoin(SystemUser.class,SystemUser::getId,Goodsorder::getRefundUserId)
.eq(Goodsorder::getId,id);
Goodsorder result=goodsorderJoinMapper.selectJoinOne(Goodsorder.class,q);
if(Objects.nonNull(result)){
MPJLambdaWrapper<GoodsorderDetail> queryWrapper = new MPJLambdaWrapper<>();
queryWrapper.selectAll(GoodsorderDetail.class)
+ .selectAs(Labels::getName,GoodsorderDetail::getCategoryName)
.eq(GoodsorderDetail::getIsdeleted,Constants.ZERO)
+ .leftJoin(GoodsSku.class,GoodsSku::getId,GoodsorderDetail::getGoodsSkuId)
+ .leftJoin(Goods.class,Goods::getId,GoodsSku::getGoodsId)
+ .leftJoin(Labels.class,Labels::getId,Goods::getCategoryId)
.eq(GoodsorderDetail::getOrderId,result.getId()) ;
List<GoodsorderDetail> goodsorderDetailList=goodsorderDetailMapper.selectList(queryWrapper);
String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
@@ -430,6 +440,8 @@
if(StringUtils.isNotBlank(model.getImgurl())){
model.setImgurl(path+ model.getImgurl());
}
+ //灏忚
+ model.setTotalPrice(Constants.formatBigdecimal(model.getPrice()).multiply(new BigDecimal(Constants.formatIntegerNum(model.getGoodsNum()))));
}
result.setGoodsorderDetailList(goodsorderDetailList);
}
@@ -456,6 +468,8 @@
queryWrapper.selectAll(Goodsorder.class);
queryWrapper.selectAs(Shop::getName,Goodsorder::getShopName);
initPageQueryWrapper(queryWrapper,pageWrap);
+ queryWrapper.selectAs(MemberCoupon::getName,Goodsorder::getCouponName);
+ queryWrapper.leftJoin(MemberCoupon.class,MemberCoupon::getId,Goodsorder::getCouponId);
queryWrapper.eq(pageWrap.getModel().getStatus()!=null,Goodsorder::getStatus,pageWrap.getModel().getStatus());
queryWrapper.orderByDesc(Goodsorder::getCreateDate);
@@ -1352,11 +1366,12 @@
throw new BusinessException(ResponseStatus.DATA_EMPTY);
}
if(!(Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_PAY.getKey())
- || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())
- || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
+ || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.PAY_DONE.getKey())
+ || Constants.equalsInteger(goodsorder.getStatus(),Constants.OrderStatus.WAIT_RECEIVE.getKey()) )){
throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"璁㈠崟鍙栨秷澶辫触锛氳鍗曠姸鎬佸凡娴佽浆锛�");
}
- if(goodsorder.getPrice().compareTo(BigDecimal.ZERO)>Constants.ZERO){
+ if(Constants.formatBigdecimal(goodsorder.getPrice()).compareTo(BigDecimal.ZERO)>Constants.ZERO
+ && Constants.equalsObject(goodsorder.getPayStatus(),Constants.ONE) ){
//寰俊鐜伴噾閫�娆�
String refundCode = WxMiniUtilService.wxRefund(goodsorder.getCode().toString(), goodsorder.getPrice(), goodsorder.getPrice());
Fund fund = new Fund();
@@ -1934,7 +1949,6 @@
}
}
-
@Override
@Transactional(rollbackFor = Exception.class)
public void orderComment(OrderCommentRequest orderCommentRequest){
@@ -1973,6 +1987,18 @@
goodsorder.setIsComment(Constants.ONE);
goodsorderMapper.updateById(goodsorder);
}
+ @Override
+ @Transactional(rollbackFor = Exception.class)
+ public void orderRefund(Goodsorder param){
+ Goodsorder goodsorder = goodsorderMapper.selectById(param.getId());
+ if(!goodsorder.getMemberId().equals(goodsorder.getMemberId())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氱敤鎴蜂俊鎭尮閰嶅け璐ワ紒");
+ }
+ if(!goodsorder.getStatus().equals(Constants.OrderStatus.DONE.getKey())){
+ throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(),"鎿嶄綔澶辫触锛氳鍗曟湭瀹屾垚锛屾棤娉曢��娆撅紒");
+ }
+
+ }
@Override
--
Gitblit v1.9.3