From 05dcbafd06a56e9fe2959f133fb8bb17bc6c21fd Mon Sep 17 00:00:00 2001
From: doum <doum>
Date: 星期三, 21 一月 2026 09:47:02 +0800
Subject: [PATCH] 经销商管理

---
 server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java          |   92 ++++++++++++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java     |    2 
 admin/src/api/business/inviteRecord.js                                                            |   14 ++
 server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java |   98 ++++++++++++++
 server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java             |   85 ++++++++++++
 admin/src/views/business/inviteRecord.vue                                                         |  106 +++++++++++++++
 6 files changed, 390 insertions(+), 7 deletions(-)

diff --git a/admin/src/api/business/inviteRecord.js b/admin/src/api/business/inviteRecord.js
new file mode 100644
index 0000000..2fa32e9
--- /dev/null
+++ b/admin/src/api/business/inviteRecord.js
@@ -0,0 +1,14 @@
+import request from '../../utils/request'
+
+// 鏌ヨ
+export function fetchList (data) {
+  return request.post('/business/inviteRecord/page', data, {
+    trim: true
+  })
+}
+export function exportExcel (data) {
+  return request.post('/business/inviteRecord/exportExcel', data, {
+    trim: true,
+    download: true
+  })
+}
diff --git a/admin/src/views/business/inviteRecord.vue b/admin/src/views/business/inviteRecord.vue
new file mode 100644
index 0000000..0174d60
--- /dev/null
+++ b/admin/src/views/business/inviteRecord.vue
@@ -0,0 +1,106 @@
+<template>
+  <TableLayout :permissions="['business:membercoupon:query']">
+    <!-- 鎼滅储琛ㄥ崟 -->
+    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
+      <el-form-item label="閭�璇蜂汉淇℃伅" prop="recName" >
+        <el-input v-model="searchForm.recName" placeholder="璇烽個璇蜂汉鏄电О/濮撳悕/鎵嬫満鍙� " clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="琚個璇蜂汉淇℃伅" prop="name" >
+        <el-input v-model="searchForm.name" placeholder="琚個璇蜂汉鏄电О/濮撳悕/鎵嬫満鍙� " clearable @keypress.enter.native="search"></el-input>
+      </el-form-item>
+      <el-form-item label="瀹屾垚闃舵" prop="getMethod">
+        <el-select  v-model="searchForm.firstOrderStatus"  placeholder="璇烽�夋嫨瀹屾垚闃舵"   clearable @change="search" >
+          <el-option  :value="0" label="宸叉敞鍐�"></el-option>
+          <el-option  :value="1" label="宸插畬鎴愰鍗�"></el-option>
+        </el-select>
+      </el-form-item>
+
+      <section>
+        <el-button type="primary" @click="search">鎼滅储</el-button>
+        <el-button @click="reset">閲嶇疆</el-button>
+      </section>
+    </el-form>
+    <!-- 琛ㄦ牸鍜屽垎椤� -->
+    <template v-slot:table-wrap>
+      <ul class="toolbar" v-permissions="['business:membercoupon:create', 'business:membercoupon:exportExcel']">
+        <li><el-button type="primary"  @click="$refs.OperaMemberCouponWindow.open('瀹氬悜鍙戞斁浼樻儬鍒�', null)" v-permissions="['business:membercoupon:create']">瀹氬悜鍙戞斁</el-button></li>
+        <li> <el-button type="primary" :loading="isWorking.export" v-permissions="['business:membercoupon:exportExcel']" @click="exportExcel">瀵煎嚭</el-button></li>
+      </ul>
+      <el-table
+        v-loading="isWorking.search"
+        :data="tableData.list"
+        stripe
+      >
+        <el-table-column prop="nikeName" label="琚個璇蜂汉寰俊ID" min-width="180px"></el-table-column>
+        <el-table-column prop="name" label="琚個璇蜂汉淇℃伅" min-width="180px"></el-table-column>
+        <el-table-column prop="recName" label="閭�璇蜂汉淇℃伅" min-width="180px"></el-table-column>
+        <el-table-column prop="firstOrderStatus" label="瀹屾垚闃舵" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.firstOrderStatus ===1" class="green">瀹屾垚棣栧崟</span>
+            <span v-else class="orange">宸叉敞鍐�</span>
+          </template>
+        </el-table-column>
+        <el-table-column prop="startDate" label="浣跨敤鏈夋晥鏈�" align="center" min-width="210px">
+          <template slot-scope="{row}">
+            <li> 璧凤細{{ row.startDate}}</li> <li>姝細{{row.endDate }}</li>
+          </template>
+        </el-table-column>
+        <el-table-column prop="couponPrice" label="浼樻儬閲戦(鍏�)" min-width="120px">
+          <template slot-scope="{row}">
+             {{row.status==1?(row.couponPrice||0):'-'}}
+          </template>
+        </el-table-column>
+        <el-table-column prop="status" label="鐘舵��" min-width="100px">
+          <template slot-scope="{row}">
+            <span v-if="row.status ===0" class="green"> 鏈娇鐢�</span>
+            <span v-else-if="row.status ===1" class="blue"> 宸蹭娇鐢�</span>
+            <span v-else class="grey">宸茶繃鏈�</span>
+          </template>
+        </el-table-column>
+
+        <el-table-column prop="createDate" label="棣栧崟瀹屾垚鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="createDate" label="娉ㄥ唽鏃堕棿" min-width="150px"></el-table-column>
+        <el-table-column prop="creatorName" label="鎿嶄綔浜�" min-width="100px"></el-table-column>
+      </el-table>
+      <pagination
+        @size-change="handleSizeChange"
+        @current-change="handlePageChange"
+        :pagination="tableData.pagination"
+      >
+      </pagination>
+    </template>
+
+    <OperaMemberCouponWindow ref="OperaMemberCouponWindow" @success="handlePageChange"/>
+  </TableLayout>
+</template>
+
+<script>
+import BaseTable from '@/components/base/BaseTable'
+import TableLayout from '@/layouts/TableLayout'
+import OperaMemberCouponWindow from '@/components/business/OperaMemberCouponWindow'
+import Pagination from '@/components/common/Pagination'
+export default {
+  name: 'inviteRecord',
+  extends: BaseTable,
+  components: { TableLayout, Pagination ,OperaMemberCouponWindow},
+  data () {
+    return {
+      // 鎼滅储
+      searchForm: {
+        recName: '',
+        name: '',
+        firstOrderStatus: ''
+      }
+    }
+  },
+  created () {
+    this.config({
+      module: '鎺ㄨ崘璁板綍琛�',
+      api: '/business/inviteRecord',
+      'field.id': 'id',
+      'field.main': 'id'
+    })
+    this.search()
+  }
+}
+</script>
diff --git a/server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java b/server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java
new file mode 100644
index 0000000..333e524
--- /dev/null
+++ b/server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java
@@ -0,0 +1,85 @@
+package com.doumee.api.business;
+
+import com.doumee.core.annotation.excel.ExcelExporter;
+import com.doumee.core.annotation.pr.PreventRepeat;
+
+import com.doumee.core.model.ApiResponse;
+import com.doumee.core.model.PageData;
+import com.doumee.core.model.PageWrap;
+import com.doumee.dao.business.model.InviteRecord;
+import com.doumee.core.utils.Utils;
+import com.doumee.service.business.InviteRecordService;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.apache.shiro.authz.annotation.RequiresPermissions;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import javax.servlet.http.HttpServletResponse;
+
+import  com.doumee.api.BaseController;
+/**
+ * 鐢ㄦ埛閭�璇疯褰旵ontroller瀹氫箟
+ * @author doumee
+ * @date 2026-01-20 15:51:22
+ */
+@Api(tags = "tableName鎺ュ彛")
+@RestController
+@RequestMapping("/business/inviteRecord")
+public class InviteRecordController extends BaseController {
+
+    @Autowired
+    private InviteRecordService inviteRecordService;
+
+    @PreventRepeat
+    @ApiOperation("鏂板缓")
+    @PostMapping("/create")
+    @RequiresPermissions("business:inviterecord:create")
+    public ApiResponse create(@RequestBody InviteRecord inviteRecord) {
+        return ApiResponse.success(inviteRecordService.create(inviteRecord));
+    }
+
+    @ApiOperation("鏍规嵁ID鍒犻櫎")
+    @GetMapping("/delete/{id}")
+    @RequiresPermissions("business:inviterecord:delete")
+    public ApiResponse deleteById(@PathVariable Integer id) {
+        inviteRecordService.deleteById(id);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鎵归噺鍒犻櫎")
+    @GetMapping("/delete/batch")
+    @RequiresPermissions("business:inviterecord:delete")
+    public ApiResponse deleteByIdInBatch(@RequestParam String ids) {
+        inviteRecordService.deleteByIdInBatch(this.getIdList(ids));
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鏍规嵁ID淇敼")
+    @PostMapping("/updateById")
+    @RequiresPermissions("business:inviterecord:update")
+    public ApiResponse updateById(@RequestBody InviteRecord inviteRecord) {
+        inviteRecordService.updateById(inviteRecord);
+        return ApiResponse.success(null);
+    }
+
+    @ApiOperation("鍒嗛〉鏌ヨ")
+    @PostMapping("/page")
+    @RequiresPermissions("business:inviterecord:query")
+    public ApiResponse<PageData<InviteRecord>> findPage (@RequestBody PageWrap<InviteRecord> pageWrap) {
+        return ApiResponse.success(inviteRecordService.findPage(pageWrap));
+    }
+
+    @ApiOperation("瀵煎嚭Excel")
+    @PostMapping("/exportExcel")
+    @RequiresPermissions("business:inviterecord:exportExcel")
+    public void exportExcel (@RequestBody PageWrap<InviteRecord> pageWrap, HttpServletResponse response) {
+        ExcelExporter.build(InviteRecord.class).export(inviteRecordService.findPage(pageWrap).getRecords(), "浼氬憳閭�璇疯褰曡〃", response);
+    }
+
+    @ApiOperation("鏍规嵁ID鏌ヨ")
+    @GetMapping("/{id}")
+    @RequiresPermissions("business:inviterecord:query")
+    public ApiResponse findById(@PathVariable Integer id) {
+        return ApiResponse.success(inviteRecordService.findById(id));
+    }
+}
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java b/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
index 1b7ae55..2d82218 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java
@@ -2,14 +2,9 @@
 
 import com.doumee.core.model.PageData;
 import com.doumee.core.model.PageWrap;
-import com.doumee.dao.business.model.Integral;
-import com.doumee.dao.web.dto.IntegralDTO;
-import com.doumee.dao.web.dto.IntegralRecordDTO;
-import com.doumee.dao.web.request.DealIntegralRequest;
-import com.doumee.dao.web.response.IntegralDataResponse;
+import com.doumee.dao.business.model.InviteRecord;
 import com.doumee.dao.web.response.InviteInfoResponse;
 
-import java.math.BigDecimal;
 import java.util.List;
 
 /**
@@ -22,5 +17,90 @@
     InviteInfoResponse getInviteInfo(Integer memberId);
 
     String createShareImg(Integer memberId) throws Exception;
+
+
+    /**
+     * 鍒涘缓
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return Integer
+     */
+    Integer create(InviteRecord model);
+
+    /**
+     * 涓婚敭鍒犻櫎
+     *
+     * @param id 涓婚敭
+     */
+    void deleteById(Integer id);
+
+    /**
+     * 鍒犻櫎
+     *
+     * @param model 瀹炰綋瀵硅薄
+     */
+    void delete(InviteRecord model);
+
+    /**
+     * 鎵归噺涓婚敭鍒犻櫎
+     *
+     * @param ids 涓婚敭闆�
+     */
+    void deleteByIdInBatch(List<Integer> ids);
+
+    /**
+     * 涓婚敭鏇存柊
+     *
+     * @param model 瀹炰綋瀵硅薄
+     */
+    void updateById(InviteRecord model);
+
+    /**
+     * 鎵归噺涓婚敭鏇存柊
+     *
+     * @param model 瀹炰綋闆�
+     */
+    void updateByIdInBatch(List<InviteRecord> model);
+
+    /**
+     * 涓婚敭鏌ヨ
+     *
+     * @param id 涓婚敭
+     * @return model
+     */
+    InviteRecord findById(Integer id);
+
+    /**
+     * 鏉′欢鏌ヨ鍗曟潯璁板綍
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return InviteRecord
+     */
+    InviteRecord findOne(InviteRecord model);
+
+    /**
+     * 鏉′欢鏌ヨ
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return List<InviteRecord>
+     */
+    List<InviteRecord> findList(InviteRecord model);
+
+    /**
+     * 鍒嗛〉鏌ヨ
+     *
+     * @param pageWrap 鍒嗛〉瀵硅薄
+     * @return PageData<InviteRecord>
+     */
+    PageData<InviteRecord> findPage(PageWrap<InviteRecord> pageWrap);
+
+    /**
+     * 鏉′欢缁熻
+     *
+     * @param model 瀹炰綋瀵硅薄
+     * @return long
+     */
+    long count(InviteRecord model);
+
 }
 
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
index b084838..42bd9de 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java
@@ -132,7 +132,7 @@
     @Override
     public void deleteById(Integer id) {
         Activity activity = new Activity();
-        activity.setIsdeleted(Constants.ZERO);
+        activity.setIsdeleted(Constants.ONE);
         activity.setId(id);
         activityMapper.updateById(activity);
     }
diff --git a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
index b304208..1cac388 100644
--- a/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
+++ b/server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java
@@ -131,7 +131,105 @@
 
     }
 
+    @Override
+    public Integer create(InviteRecord inviteRecord) {
+        inviteRecordMapper.insert(inviteRecord);
+        return inviteRecord.getId();
+    }
 
+    @Override
+    public void deleteById(Integer id) {
+        inviteRecordMapper.deleteById(id);
+    }
+
+    @Override
+    public void delete(InviteRecord inviteRecord) {
+        UpdateWrapper<InviteRecord> deleteWrapper = new UpdateWrapper<>(inviteRecord);
+        inviteRecordMapper.delete(deleteWrapper);
+    }
+
+    @Override
+    public void deleteByIdInBatch(List<Integer> ids) {
+        if (CollectionUtils.isEmpty(ids)) {
+            return;
+        }
+        inviteRecordMapper.deleteBatchIds(ids);
+    }
+
+    @Override
+    public void updateById(InviteRecord inviteRecord) {
+        inviteRecordMapper.updateById(inviteRecord);
+    }
+
+    @Override
+    public void updateByIdInBatch(List<InviteRecord> inviteRecords) {
+        if (CollectionUtils.isEmpty(inviteRecords)) {
+            return;
+        }
+        for (InviteRecord inviteRecord: inviteRecords) {
+            this.updateById(inviteRecord);
+        }
+    }
+
+    @Override
+    public InviteRecord findById(Integer id) {
+        return inviteRecordMapper.selectById(id);
+    }
+
+    @Override
+    public InviteRecord findOne(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord).last("limit 1");
+        return inviteRecordMapper.selectOne(wrapper);
+    }
+
+    @Override
+    public List<InviteRecord> findList(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
+        return inviteRecordMapper.selectList(wrapper);
+    }
+
+    @Override
+    public PageData<InviteRecord> findPage(PageWrap<InviteRecord> pageWrap) {
+        IPage<InviteRecord> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
+        QueryWrapper<InviteRecord> queryWrapper = new QueryWrapper<>();
+        Utils.MP.blankToNull(pageWrap.getModel());
+        queryWrapper.lambda().eq(pageWrap.getModel().getId() != null,InviteRecord::getId, pageWrap.getModel().getId());
+        queryWrapper.lambda().eq(pageWrap.getModel().getCreator() != null,InviteRecord::getCreator, pageWrap.getModel().getCreator());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().ge(InviteRecord::getCreateDate, Utils.Date.getStart(pageWrap.getModel().getCreateDate()));
+            queryWrapper.lambda().le(InviteRecord::getCreateDate, Utils.Date.getEnd(pageWrap.getModel().getCreateDate()));
+        }
+        queryWrapper.lambda().eq(pageWrap.getModel().getEditor() != null,InviteRecord::getEditor, pageWrap.getModel().getEditor());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().ge(InviteRecord::getEditDate, Utils.Date.getStart(pageWrap.getModel().getEditDate()));
+            queryWrapper.lambda().le(InviteRecord::getEditDate, Utils.Date.getEnd(pageWrap.getModel().getEditDate()));
+        }
+        queryWrapper.lambda().eq(pageWrap.getModel().getIsdeleted() != null,InviteRecord::getIsdeleted, pageWrap.getModel().getIsdeleted());
+        queryWrapper.lambda().eq(pageWrap.getModel().getRemark() != null,InviteRecord::getRemark, pageWrap.getModel().getRemark());
+        queryWrapper.lambda().eq(pageWrap.getModel().getInviteId() != null,InviteRecord::getInviteId, pageWrap.getModel().getInviteId());
+        queryWrapper.lambda().eq(pageWrap.getModel().getMemberId() != null,InviteRecord::getMemberId, pageWrap.getModel().getMemberId());
+        queryWrapper.lambda().eq(pageWrap.getModel().getPhone() != null,InviteRecord::getPhone, pageWrap.getModel().getPhone());
+        queryWrapper.lambda().eq(pageWrap.getModel().getFirstOrderStatus() != null,InviteRecord::getFirstOrderStatus, pageWrap.getModel().getFirstOrderStatus());
+        if (pageWrap.getModel().getId() != null) {
+            queryWrapper.lambda().ge(InviteRecord::getFirstFinishDate, Utils.Date.getStart(pageWrap.getModel().getFirstFinishDate()));
+            queryWrapper.lambda().le(InviteRecord::getFirstFinishDate, Utils.Date.getEnd(pageWrap.getModel().getFirstFinishDate()));
+        }
+        queryWrapper.lambda().eq(pageWrap.getModel().getRewardIntegral() != null,InviteRecord::getRewardIntegral, pageWrap.getModel().getRewardIntegral());
+        for(PageWrap.SortData sortData: pageWrap.getSorts()) {
+            if (sortData.getDirection().equalsIgnoreCase(PageWrap.DESC)) {
+                queryWrapper.orderByDesc(sortData.getProperty());
+            } else {
+                queryWrapper.orderByAsc(sortData.getProperty());
+            }
+        }
+        return PageData.from(inviteRecordMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public long count(InviteRecord inviteRecord) {
+        QueryWrapper<InviteRecord> wrapper = new QueryWrapper<>(inviteRecord);
+        return inviteRecordMapper.selectCount(wrapper);
+    }
 
 
 

--
Gitblit v1.9.3