doum
6 小时以前 05dcbafd06a56e9fe2959f133fb8bb17bc6c21fd
经销商管理
已添加3个文件
已修改3个文件
397 ■■■■■ 文件已修改
admin/src/api/business/inviteRecord.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/inviteRecord.vue 106 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/InviteRecordController.java 85 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/InviteRecordService.java 92 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ActivityServiceImpl.java 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/InviteRecordServiceImpl.java 98 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
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
  })
}
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>
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;
/**
 * ç”¨æˆ·é‚€è¯·è®°å½•Controller定义
 * @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));
    }
}
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);
}
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);
    }
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);
    }