From c2d3591648b215ab29fc14cab1c747ba58798412 Mon Sep 17 00:00:00 2001
From: jiangping <jp@doumee.com>
Date: 星期三, 16 七月 2025 10:10:39 +0800
Subject: [PATCH] 前端

---
 admin/src/components/business/OperaOrderDetailWindow.vue                              |  336 +++++++++++++++++++++++++++++++++++++
 admin/src/layouts/TableLayout.vue                                                     |   10 +
 server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java            |    8 
 admin/src/api/business/orders.js                                                      |   14 +
 admin/src/views/business/orders.vue                                                   |   70 +++++--
 admin/src/components/business/orderProgress.vue                                       |   57 ++++++
 server/services/src/main/java/com/doumee/dao/business/model/Orders.java               |    2 
 server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java |   14 +
 8 files changed, 480 insertions(+), 31 deletions(-)

diff --git a/admin/src/api/business/orders.js b/admin/src/api/business/orders.js
index b35da85..4d24457 100644
--- a/admin/src/api/business/orders.js
+++ b/admin/src/api/business/orders.js
@@ -11,10 +11,20 @@
     trim: true
   })
 }
+// 瀵煎嚭Excel
+export function exportExcel (data) {
+  return request.post('/business/orders/exportExcel', data, {
+    download: true,
+    trim: true
+  })
+}
 
 // 鍒涘缓
 export function create (data) {
   return request.post('/business/orders/create', data)
+}
+export function cancel (id) {
+  return request.get(`/business/orders/cancel?id=${id}`)
 }
 
 // 淇敼
@@ -26,6 +36,10 @@
 export function deleteById (id) {
   return request.get(`/business/orders/delete/${id}`)
 }
+// 鍒犻櫎
+export function getById (id) {
+  return request.get(`/business/orders/${id}`)
+}
 
 // 鎵归噺鍒犻櫎
 export function deleteByIdInBatch (ids) {
diff --git a/admin/src/components/business/OperaOrderDetailWindow.vue b/admin/src/components/business/OperaOrderDetailWindow.vue
new file mode 100644
index 0000000..36eb0f9
--- /dev/null
+++ b/admin/src/components/business/OperaOrderDetailWindow.vue
@@ -0,0 +1,336 @@
+<template>
+  <GlobalWindow
+    :title="title"
+    :visible.sync="visible"
+    :withFooter="false"
+    width="calc(100% - 250px)"
+    :confirm-working="isWorking"
+    @close="close"
+    @confirm="confirm">
+    <div class="main">
+      <div class="renzheng" >
+        <div class="info" >
+            <span class="m10">璁㈠崟淇℃伅</span>
+            <el-tag type="primary" class="ml10 tag2" v-if="info.status == 0||info.status == 1||info.status == 3">{{ info.statusName }}</el-tag>
+            <el-tag type="success" class="ml10 tag2" v-if="info.status == 4">{{ info.statusName }}</el-tag>
+            <el-tag type="danger" class="ml10 tag2" v-if="info.status == 99">{{ info.statusName }}</el-tag>
+        </div>
+        <div class="detail" >
+          <div class="line">
+            <div class="cont"><span class="label"> 璁㈠崟鍙凤細</span> <span class="txt">{{info.code }}</span></div>
+            <div  class="cont">  <span class="label"> 涓嬪崟鏃堕棿锛�</span> <span class="txt">{{info.createTime }}</span></div>
+            <div  class="cont"><span class="label"> 鎺ュ崟鏃堕棿锛�</span> <span class="txt">{{info.acceptTime || '' }}</span></div>
+          </div>
+          <div class="line">
+            <div class="cont"><span class="label">寮�濮嬫椂闂达細</span> <span class="txt">{{info.workStartTime || '' }}</span></div>
+            <div class="cont" style="flex: 2"><span class="label">瀹屾垚鏃堕棿锛�</span><span class="txt">{{info.finishTime || '' }}</span></div>
+          </div>
+        </div>
+      </div>
+      <div class="renzheng" >
+        <div class="info" >
+          <span class="m10">鏀粯淇℃伅</span>
+        </div>
+        <div class="detail" >
+          <div class="line">
+            <div class="cont"><span class="label"> 瀹炰粯閲戦锛�</span> <span class="txt yellowbtn">{{((info.payAccount||0)/100).toFixed(2) }}鍏�</span></div>
+            <div  class="cont"><span class="label">骞冲彴鎵嬬画璐癸細</span> <span class="txt yellowbtn">{{(((info.payAccount||0) - (info.receiveAccount||0))/100).toFixed(2) }}鍏�</span></div>
+            <div  class="cont"><span class="label">鎺ュ崟鏂规敹鍒伴噾棰濓細</span> <span class="txt yellowbtn">{{((info.receiveAccount||0)/100).toFixed(2) }}鍏�</span></div>
+          </div>
+          <div class="line">
+            <div class="cont"><span class="label">鏀粯鏃堕棿锛�</span> <span class="txt">{{info.payTime || '' }}</span></div>
+            <div class="cont"><span class="label">鏀粯鏂瑰紡锛�</span><span class="txt">{{info.payMethod==0?'寰俊鏀粯':'鍏朵粬' }}</span></div>
+            <div class="cont"><span class="label">浜ゆ槗鍗曞彿锛�</span><span class="txt">{{info.wxExternalNo || '' }}</span></div>
+          </div>
+        </div>
+      </div>
+      <div class="renzheng" >
+        <div class="info" >
+          <span class="m10">闇�姹備俊鎭�</span>
+        </div>
+        <div class="detail" v-if="info.type==0">
+          <div class="line">
+            <div class="cont"><span class="label"> 璁㈠崟绫诲瀷锛�</span> <span class="txt">{{(info.type==0?'鐢ㄥ伐鍗�':(info.type==1?'璐ц繍鍗�':'璁㈠崟鍗�')) }}</span></div>
+            <div  class="cont"><span class="label">宸ョ锛�</span>
+              <span class="txt" v-if="info.type==0">{{(info.workType==0?'閲囨憳宸�':(info.workType==1?'鍒嗘嫞宸�':'鍖呰宸�')) }}</span>
+              <span v-else>-</span>
+            </div>
+            <div  class="cont"><span class="label">閲囨憳鍝佺锛�</span> <span class="txt">{{info.categoryName || ''}}</span></div>
+          </div>
+          <div class="line">
+            <div class="cont"><span class="label">閲囨憳閲嶉噺锛�</span> <span class="txt">{{info.priceNum1 || '' }}鏂�</span></div>
+            <div class="cont"><span class="label">鐢ㄥ伐鏃堕棿锛�</span><span class="txt">{{info.startDate|| '' }}-{{info.endDate|| '' }}</span></div>
+            <div class="cont"><span class="label">鐢ㄥ伐澶╂暟锛�</span><span class="txt">{{info.totalDays || 0 }}</span></div>
+          </div>
+          <div class="line">
+            <div class="cont"><span class="label">鐢ㄥ伐鍦扮偣锛�</span> <span class="txt">{{info.location || '' }}</span></div>
+            <div class="cont"><span class="label">璐圭敤鏍囧噯锛�</span><span class="txt">{{((info.price||0)/100).toFixed(2) }}{{info.priceUnit || '' }}</span></div>
+            <div class="cont"><span class="label">棰勪及鎬昏垂鐢細</span><span class="txt yellowbtn">{{((info.estimatedAccount||0)/100).toFixed(2) }}鍏�</span></div>
+          </div>
+          <div class="line">
+            <div class="cont"><span class="label">鍦扮偣鎻忚堪锛�</span><span class="txt">{{info.locationRemark || '' }}</span></div>
+          </div>
+          <div class="line">
+            <div class="cont" ><span class="label">闇�姹傛弿杩帮細</span><span class="txt">{{info.supplement || '' }}</span></div>
+          </div>
+          <div class="line">
+            <div class="cont">
+              <span class="label">鍥剧墖锛�</span>
+              <span class="txt" v-if="!info.multifileList || info.multifileList.length ==0">鏃�</span>
+            </div>
+          </div>
+          <div class="line" v-if="info.multifileList && info.multifileList.length>0">
+            <div class="cont">
+              <template v-if="info.multifileList && info.multifileList.length>0">
+              <div v-for="item in info.multifileList" style="display: inline-block" :key="item">
+                <el-image v-if="item.fileurlFull" style="width: 50px; height: 50px; margin-right: 10px" :src="item.fileurlFull"
+                          :preview-src-list="[info.fileurlFull]">
+                </el-image>
+              </div>
+              </template>
+            </div>
+          </div>
+          <div class="line" v-if="info.auditStatus == 3 || info.auditStatus == 2" :style="'background-color: '+(info.auditStatus==2?'#eff8ea':'rgb(253 226 226)')+';padding: 20px'">
+            <span class="label"> 瀹℃牳浜猴細</span> <span class="txt">{{info.editorName}} </span><span class="label">{{info.auditTime || '' }} </span>
+            <div  style="margin-top: 20px"> <span class="label">  瀹℃牳淇℃伅锛�</span> <span class="txt">{{info.auditRemark || '' }}</span></div>
+          </div>
+        </div>
+      </div>
+    </div>
+  </GlobalWindow>
+</template>
+
+<script>
+import GlobalWindow from '@/components/common/GlobalWindow'
+import BaseOpera from '@/components/base/BaseOpera'
+import { getById,cancel } from '@/api/business/orders'
+export default {
+  components: {
+    GlobalWindow
+  },
+  extends: BaseOpera,
+  data () {
+    return {
+      id: '',
+      info: {},
+      loading: false
+    }
+  },
+  methods: {
+    open (title, row) {
+      this.title = title
+      this.visible = true
+      this.tableData2 = []
+      this.id = row.id
+      this.getData()
+    },
+    getData () {
+      getById(this.id)
+        .then(res => {
+          this.info = res
+          this.visible = true
+          console.log(this.info)
+        })
+    },
+    close () {
+
+    },
+    checkDo (status) {
+      console.log(this.$refs.formCheck.length)
+      this.$refs.formCheck.validate((valid) => {
+        if (!valid) {
+          return
+        }
+        this.$dialog.actionConfirm('鎮ㄧ‘璁ゃ�愬彇娑堛�戣鐢宠鍚楋紵', '鎿嶄綔纭')
+          .then(() => {
+            this.dealing = true
+            cancel({
+              id: this.id,
+              auditStatus: status,
+              auditRemark: this.form.auditRemark
+            })
+              .then(res => {
+                this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+                this.getData()
+                this.$emit('success')
+              })
+              .catch(e => {
+                this.$tip.apiFailed(e)
+              })
+              .finally(() => {
+                this.dealing = false
+              })
+          })
+      })
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+@import '@/assets/style/variables.scss';
+.bottom{
+  text-align: center;
+  display: block;
+  height: auto;
+  background-color: #e4ecfe;
+  width: calc(100% - 32px);
+  z-index: 999;
+  padding: 16px;
+}
+.renzheng{
+  margin: 0px 0px 50px 20px;
+  width: calc(100% - 60px);
+  .detail{
+    font-size: 14px;
+    .label{
+      //color: #8c939d;
+    }
+    .txt{
+      margin-right: 30px;
+    }
+    .line{
+      font-size: 12px;
+      margin-top: 15px;
+      display: flex;
+      width: calc(100% - 60px);
+      .cont{
+        flex: 1;
+      }
+    }
+  }
+  .ml10{
+    margin-left: 10px;
+  }
+  .info{
+    font-size: 14px;
+    font-weight: bold;
+    color: #5a72c5;
+  }
+  .tag2{
+    font-size: 12px;
+  }
+}
+.home_title {
+  .mr10{
+    margin-right: 10px;
+  }
+  .m10{
+    margin: 10px;
+  }
+  .bluebtn{
+    color: #2985f7;
+  }
+  .tag1{
+    border-radius: 10px;
+    font-size: 10px;
+    padding: 0px 15px;
+    height: 24px;
+  }
+  display: flex;
+  justify-content: space-between;
+  align-items: center;
+  .left {
+    font-weight: 500;
+    font-size: 14px;
+    margin-right: 10px;
+    display: flex;
+    align-items: center;
+    .status {
+      padding: 0 6px;
+      height: 22px;
+      line-height: 22px;
+      border-radius: 2px;
+      border: 1px solid #00BA92;
+      color: #00BA92;
+      font-weight: 400;
+      font-size: 12px;
+      color: #00BA92;
+    }
+  }
+}
+.tab{
+  width: 20%;
+}
+.remark {
+  //background: #E8EBF7;
+  border-radius: 2px;
+  font-size: 14px;
+  margin: 10px 10px 0px -10px;
+  button{
+    border: none;
+    cursor: default;
+    margin-right: 20px;
+    background: #e4ecfe;
+  }
+}
+.bluebtn{
+  font-weight: bold;
+  color: #2985f7;
+}
+
+.redbtn{
+  font-weight: bold;
+  color: #ff1b1b;
+}
+.yellowbtn{
+  font-weight: bold;
+  color: #fc9d20;
+}
+
+.tabs {
+  border-bottom: 1px solid #DFE2E8;
+  display: flex;
+  margin-bottom: 20px;
+  .tab {
+    height: 58px;
+    line-height: 58px;
+    font-size: 14px;
+    color: #666666;
+    margin-right: 30px;
+    cursor: pointer;
+  }
+
+  .active {
+    font-weight: 500;
+    color: $primary-color;
+    border-bottom: 2px solid $primary-color;
+  }
+}
+
+.main {
+  padding: 12px 16px;
+  .title {
+    font-weight: 500;
+    font-size: 12px;
+    color: $primary-color;
+    margin-bottom: 15px;
+  }
+  /deep/ .el-form-item__label{
+    font-size: 12px;
+  }
+  .list {
+    display: flex;
+    flex-wrap: wrap;
+    /*background: #F7F7F7;*/
+    border-radius: 2px;
+    /*padding: 15px 20px;*/
+    margin-bottom: 20px;
+
+    .item {
+      font-size: 14px;
+      width: 25%;
+      margin-bottom: 16px;
+
+      .la {
+        color: #7f7f7f;
+        margin-bottom: 10px;
+      }
+    }
+  }
+}
+
+/deep/ .window__body {
+  padding: 0px !important;
+}
+</style>
diff --git a/admin/src/components/business/orderProgress.vue b/admin/src/components/business/orderProgress.vue
new file mode 100644
index 0000000..06de68c
--- /dev/null
+++ b/admin/src/components/business/orderProgress.vue
@@ -0,0 +1,57 @@
+<template>
+    <GlobalWindow
+        :title="title"
+        width="50%"
+        :withFooter="false"
+        :visible.sync="visible"
+        :confirm-working="isWorking"
+    >
+        <el-timeline reverse>
+            <el-timeline-item v-for="(item, index) in list" :key="index" :hide-timestamp="true">
+                <div style="display: flex; flex-direction: column;">
+                    <span class="a">{{item.title}}</span>
+                    <span class="b">{{item.creatorName}} {{item.companyName || '骞冲彴鐞嗚禂鍛�'}} {{item.createDate }}</span>
+                    <span class="c" v-if="index >0 && item.content">璇存槑锛歿{item.content}}</span>
+                </div>
+            </el-timeline-item>
+        </el-timeline>
+    </GlobalWindow>
+</template>
+
+<script>
+import BaseOpera from '@/components/base/BaseOpera'
+import GlobalWindow from '@/components/common/GlobalWindow'
+export default {
+  name: 'orderProgress',
+  extends: BaseOpera,
+  components: { GlobalWindow },
+  data () {
+    return {
+      list: []
+    }
+  },
+  methods: {
+    open (title, target) {
+      this.title = title
+      this.list = target
+      this.visible = true
+    }
+  }
+}
+</script>
+
+<style lang="scss" scoped>
+    .a {
+        color: rgba(16,16,16,1);
+        font-size: 14px;
+    }
+    .b {
+        color: rgba(154,154,154,1);
+        font-size: 14px;
+        margin: 10px 0;
+    }
+    .c {
+        color: rgba(16,16,16,1);
+        font-size: 14px;
+    }
+</style>
diff --git a/admin/src/layouts/TableLayout.vue b/admin/src/layouts/TableLayout.vue
index 650bfea..9a34b4a 100644
--- a/admin/src/layouts/TableLayout.vue
+++ b/admin/src/layouts/TableLayout.vue
@@ -201,4 +201,14 @@
 .yellowstate{
   color: #fc9d20;
 }
+
+.orderstate4{
+  color: #157713;
+}
+.orderstate0,.orderstate1,.orderstate2,.orderstate3{
+  color: #2080f7;
+}
+.orderstate99{
+  color: #5d6269;
+}
 </style>
diff --git a/admin/src/views/business/orders.vue b/admin/src/views/business/orders.vue
index e449613..bca5db6 100644
--- a/admin/src/views/business/orders.vue
+++ b/admin/src/views/business/orders.vue
@@ -28,27 +28,34 @@
         <el-option label="宸插彇娑�" :value="99"></el-option>
         </el-select>
       </el-form-item>
-      <el-form-item label="鍙戝竷鏃堕棿"   style="width: 380px;" label-width="100px" >
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.createTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
-                        placeholder="寮�濮嬫椂闂�" />-
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.createTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
+      <el-form-item label="鍙戝竷鏃堕棿"   prop="createTimeStart"  label-width="100px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.createTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
+                        placeholder="寮�濮嬫椂闂�" /> -
+      </el-form-item>
+      <el-form-item label="" prop="createTimeEnd"   label-width="0px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.createTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
                         placeholder="缁撴潫鏃堕棿" />
       </el-form-item>
-      <el-form-item label="鎺ュ崟鏃堕棿"    style="width: 380px;" label-width="100px" >
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.acceptTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
-                        placeholder="寮�濮嬫椂闂�" />-
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.acceptTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
+      <el-form-item label="鎺ュ崟鏃堕棿" prop="acceptTimeStart"  label-width="100px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.acceptTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
+                        placeholder="寮�濮嬫椂闂�" /> -
+      </el-form-item>
+      <el-form-item label="" prop="acceptTimeEnd"  label-width="0px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.acceptTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
                         placeholder="缁撴潫鏃堕棿" />
       </el-form-item>
-      <el-form-item label="瀹屾垚鏃堕棿"    style="width: 380px;" label-width="100px" >
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.doneTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
-                        placeholder="寮�濮嬫椂闂�" />-
-        <el-date-picker type="datetime"  style="width: 120px"  v-model="searchForm.doneTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
+      <el-form-item label="瀹屾垚鏃堕棿"    prop="doneTimeStart"   label-width="100px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.doneTimeStart" clearable value-format="yyyy-MM-dd HH:mm:ss"
+                        placeholder="寮�濮嬫椂闂�" /> -
+      </el-form-item>
+      <el-form-item label="" prop="doneTimeEnd"  label-width="0px" >
+        <el-date-picker type="datetime"  style="width: 150px"  v-model="searchForm.doneTimeEnd" clearable value-format="yyyy-MM-dd HH:mm:ss"
                         placeholder="缁撴潫鏃堕棿" />
       </el-form-item>
       <section>
         <el-button type="primary" @click="search">鎼滅储</el-button>
         <el-button @click="reset">閲嶇疆</el-button>
+        <el-button type="primary" :loading="isWorking.export" @click="exportExcel">瀵煎嚭</el-button>
       </section>
     </el-form>
     <!-- 琛ㄦ牸鍜屽垎椤� -->
@@ -69,7 +76,11 @@
             <span style="cursor: pointer;color: #2E68EC" @click="openDetail(row)">{{row.code}}</span>
           </template>
         </el-table-column>
-        <el-table-column prop="statusName" label="璁㈠崟鐘舵��" min-width="100px"  > </el-table-column>
+        <el-table-column prop="statusName" label="璁㈠崟鐘舵��" min-width="100px"  >
+          <template slot-scope="{row}">
+          <span :class="'orderstate'+row.status">{{row.statusName}}</span>
+          </template>
+        </el-table-column>
         <el-table-column prop="type" label="璁㈠崟绫诲瀷" min-width="100px">
           <template slot-scope="{row}">
             <span v-if="row.type==0">鐢ㄥ伐鍗�</span>
@@ -114,7 +125,7 @@
           fixed="right"
         >
           <template slot-scope="{row}">
-            <el-button type="text" class="redstate" @click="cancenDo(row)" v-if="row.status>-1 && row.status<4" icon="el-icon-delete" v-permissions="['business:orders:update']">鍙栨秷</el-button>
+            <el-button type="text" class="redstate" @click="cancelDo(row)" v-if="row.status>-1 && row.status<4" icon="el-icon-delete" v-permissions="['business:orders:update']">鍙栨秷</el-button>
             <el-button type="text" @click="openDetail( row)" icon="el-icon-info"  >璇︽儏</el-button>
           </template>
         </el-table-column>
@@ -127,7 +138,7 @@
       </pagination>
     </template>
     <!-- 鏂板缓/淇敼 -->
-    <OperaOrdersWindow ref="operaOrdersWindow" @success="handlePageChange"/>
+    <OperaOrderDetailWindow ref="OperaOrderDetailWindow" @success="handlePageChange"/>
   </TableLayout>
 </template>
 
@@ -135,11 +146,12 @@
 import BaseTable from '@/components/base/BaseTable'
 import TableLayout from '@/layouts/TableLayout'
 import Pagination from '@/components/common/Pagination'
-import OperaOrdersWindow from '@/components/business/OperaOrdersWindow'
+import OperaOrderDetailWindow from '@/components/business/OperaOrderDetailWindow'
+import { cancel } from '@/api/business/orders'
 export default {
   name: 'Orders',
   extends: BaseTable,
-  components: { TableLayout, Pagination, OperaOrdersWindow },
+  components: { TableLayout, Pagination, OperaOrderDetailWindow },
   data () {
     return {
       // 鎼滅储
@@ -154,7 +166,7 @@
         doneTimeStart: null,
         doneTimeEnd: null,
         status: null,
-        code:null
+        code: null
       }
     }
   },
@@ -167,12 +179,26 @@
     })
     this.search()
   },
-  methods:{
+  methods: {
     openDetail (row) {
-      // this.$refs.OperaMemberDetailWindow.open('鐢ㄦ埛璇︽儏', row.id)
+      this.$refs.OperaOrderDetailWindow.open('璁㈠崟璇︽儏', row )
     },
-    cancenDo(row){
-
+    cancelDo (row) {
+      this.$dialog.actionConfirm('鎮ㄧ‘璁ゃ�愬彇娑堛�戣璁㈠崟鍚楋紵', '鎿嶄綔纭')
+        .then(() => {
+          this.dealing = true
+          cancel(row.id)
+            .then(res => {
+              this.$tip.apiSuccess('鎿嶄綔鎴愬姛')
+              this.search()
+            })
+            .catch(e => {
+              this.$tip.apiFailed(e)
+            })
+            .finally(() => {
+              this.dealing = false
+            })
+      })
     }
   }
 }
diff --git a/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java b/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java
index 369f029..e7911c4 100644
--- a/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java
+++ b/server/services/src/main/java/com/doumee/core/utils/huaweiOBS/ObsUtil.java
@@ -119,10 +119,10 @@
 
     public static void main(String[] args) {
         ObsUtil blobUtil = new ObsUtil("HPUAQVBRXX9A9TLZ3RTA","uHC2uoFh42Z2xgQmCBBtG8rNZ4Caf85qQ2DQqZZf","obs.cn-south-1.myhuaweicloud.com");
-        blobUtil.uploadLocalFile(new File("D://static/1.png"),"jinkuai","member/1.png");
-//        blobUtil.uploadLocalFile(new File("D://static/2.png"),"jinkuai","identity/2.png");
-//        blobUtil.uploadLocalFile(new File("D://static/3.png"),"jinkuai","identity/3.png");
-//        blobUtil.uploadLocalFile(new File("D://static/4.png"),"jinkuai","identity/4.png");
+        blobUtil.uploadLocalFile(new File("D://static/1.png"),"jinkuai","orders/1.png");
+        blobUtil.uploadLocalFile(new File("D://static/2.png"),"jinkuai","orders/2.png");
+        blobUtil.uploadLocalFile(new File("D://static/3.png"),"jinkuai","orders/3.png");
+        blobUtil.uploadLocalFile(new File("D://static/4.png"),"jinkuai","orders/4.png");
     }
     public static  Integer uploadNetFile(ObsClient obsClient,String bucketName,String url, String objectKey) throws IOException {
         InputStream is = new URL(url).openStream();
diff --git a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
index f17f61e..5cbb6b3 100644
--- a/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
+++ b/server/services/src/main/java/com/doumee/dao/business/model/Orders.java
@@ -55,9 +55,11 @@
     private Integer type;
 
     @ApiModelProperty(value = "寮�濮嬫椂闂� yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date startDate;
 
     @ApiModelProperty(value = "缁撴潫鏃堕棿 yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
     private Date endDate;
 
     @ApiModelProperty(value = "鍦扮偣淇℃伅/鐢ㄨ溅璧风偣/鐢ㄩ鍦扮偣")
diff --git a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
index 6ad3885..cf260c4 100644
--- a/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
+++ b/server/services/src/main/java/com/doumee/service/business/impl/OrdersServiceImpl.java
@@ -958,17 +958,21 @@
         }
 
         //鍑忓皯鍙戝崟閲�
-        memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getPublishNum,"publish_num - 1").eq(Member::getId,orders.getReleaseMemberId()));
+        memberMapper.update(new UpdateWrapper<Member>().lambda()
+                .setSql("publish_num = ifnull(publish_num,0) - 1")
+                .eq(Member::getId,orders.getReleaseMemberId()));
 
         if(Constants.equalsInteger(orders.getStatus(),Constants.TWO)||Constants.equalsInteger(orders.getStatus(),Constants.THREE)){
             //鍑忓皯鎺ュ崟閲�
-            memberMapper.update(new UpdateWrapper<Member>().lambda().set(Member::getReceiveNum,"receive_num - 1").eq(Member::getId,orders.getAcceptMemberId()));
+            memberMapper.update(new UpdateWrapper<Member>().lambda()
+                    .setSql("receive_num = ifnull(receive_num,0) - 1")
+                    .eq(Member::getId,orders.getAcceptMemberId()));
         }
-
+Date date = new Date();
         ordersMapper.update(new UpdateWrapper<Orders>().lambda()
                 .set(Orders::getStatus,Constants.ordersStatus.cancel.getKey())
-                .set(Orders::getUpdateTime,"now()")
-                .set(Orders::getCancelTime,"now()")
+                .set(Orders::getUpdateTime,date)
+                .set(Orders::getCancelTime,date)
                 .set(Orders::getCancelType,Constants.TWO)
                 .eq(Orders::getId,orders.getId())
         );

--
Gitblit v1.9.3