doum
4 小时以前 666a942f5f2b59209cf422bb202f6548fbbe212e
经销商管理
已添加5个文件
已修改12个文件
908 ■■■■■ 文件已修改
admin/src/api/business/shopMoney.js 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaChangeIntegralWindow.vue 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaIntegralShopMoneyWindow.vue 181 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaMemberDetail.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaShopGoodsWindow.vue 2 ●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaShopInfoWindow.vue 416 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/integral.vue 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/shop.vue 12 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/shopMoney.vue 93 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java 10 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java 14 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java 19 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java 40 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java 26 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java 54 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/api/business/shopMoney.js
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,14 @@
import request from '../../utils/request'
// æŸ¥è¯¢
export function fetchList (data) {
  return request.post('/business/shop/pageMoney', data, {
    trim: true
  })
}
export function exportExcel (data) {
  return request.post('/business/shop/exportExcelMoney', data, {
    trim: true,
    download: true
  })
}
admin/src/components/business/OperaChangeIntegralWindow.vue
@@ -76,7 +76,7 @@
            this.$emit('success')
          })
          .catch(e => {
            this.$tip.apiFailed(e)
            // this.$tip.apiFailed(e)
          })
          .finally(() => {
            this.isWorking = false
@@ -88,7 +88,7 @@
      this.visible = true
      this.info = target
      this.form.type = 0
      this.form.userType = 0
      this.form.userType = userType || 0
      this.form.memberId = target.id
      this.form.num = null
      this.form.remark = null
admin/src/components/business/OperaIntegralShopMoneyWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,181 @@
<template>
  <GlobalWindow
      :title="title"
      width="80%"
      :visible.sync="visible"
  >
    <TableLayout :permissions="['business:integral:query']">
      <!-- æœç´¢è¡¨å• -->
      <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
        <el-form-item label="" prop="type">
          <el-select v-model="searchForm.type"    placeholder="请选择收支类型"   @change="search" >
            <el-option :key="0" :value="0" label="收入"></el-option>
            <el-option :key="1" :value="1" label="支出"></el-option>
          </el-select>
        </el-form-item>
        <el-form-item label="" prop="orderCode">
          <el-input v-model="searchForm.orderCode" placeholder="请输入订单号" @keypress.enter.native="search"></el-input>
        </el-form-item>
        <el-form-item label="" prop="objType">
          <el-select v-model="searchForm.objType"    placeholder="请选择消费类型"   @change="search" >
            <el-option :key="16" :value="16" label="订单结算"></el-option>
            <el-option :key="17" :value="17" label="余额提现"></el-option>
            <el-option :key="19" :value="19" label="提现退回"></el-option>
            <el-option :key="20" :value="20" label="订单结算退回"></el-option>
          </el-select>
        </el-form-item>
        <div class="date-style" style="display: inline">
          <el-form-item label="交易时间" prop="starttime" >
            <el-date-picker
                style="width: 160px"
                v-model="searchForm.starttime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                format="yyyy-MM-dd HH:mm:ss"
                range-separator="至"
                placeholder="开始时间"
            ></el-date-picker>
          </el-form-item>
          <el-form-item label="-" label-width="10px" prop="endtime" >
            <el-date-picker
                style="width: 160px"
                v-model="searchForm.endtime"
                type="datetime"
                value-format="yyyy-MM-dd HH:mm:ss"
                format="yyyy-MM-dd HH:mm:ss"
                range-separator="至"
                placeholder="截止时间"
            ></el-date-picker>
          </el-form-item>
        </div>
        <section>
          <el-button type="primary" @click="search">搜索</el-button>
          <el-button type="primary" :loading="isWorking.export" v-permissions="['business:integral:exportExcel']" @click="exportExcel">导出</el-button>
          <el-button @click="reset">重置</el-button>
        </section>
      </el-form>
      <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
      <template v-slot:table-wrap>
        <el-table
            v-loading="isWorking.search"
            :data="tableData.list"
            stripe
            border
        >
          <el-table-column prop="createDate" align="center" label="交易时间" min-width="100px"></el-table-column>
          <el-table-column prop="type" align="center" label="收支类型" min-width="100px">
            <template slot-scope="{row}">
              <span v-if="row.type==0" class="green">收入</span>
              <span v-else class="red">支出</span>
            </template>
          </el-table-column>
          <el-table-column prop="num" align="center" label="金额(元)" min-width="100px"></el-table-column>
          <el-table-column prop="totalNum" align="center" label="当前余额(元)" min-width="100px"></el-table-column>
          <el-table-column prop="strObjType" align="center" label="交易类型" min-width="100px"></el-table-column>
          <el-table-column prop="orderCode" align="center" label="交易单号" min-width="100px"></el-table-column>
          <el-table-column prop="content" align="center" label="交易说明" min-width="150px" show-overflow-tooltip></el-table-column>
        </el-table>
        <pagination
            @size-change="handleSizeChange"
            @current-change="handlePageChange"
            :pagination="tableData.pagination"
        >
        </pagination>
      </template>
    </TableLayout>
    <template  v-slot:footer>
      <el-button @click="visible=false">返回</el-button>
    </template>
  </GlobalWindow>
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
export default {
  name: 'OperaIntegralShopMoneyWindow',
  extends: BaseTable,
  components: { GlobalWindow, TableLayout, Pagination},
  data () {
    return {
      title: '',
      visible: false,
      tabelHeight: null,
      info: {},
      // æœç´¢
      searchForm: {
        memberId: null,
        userType: 2,
        type: '',
        starttime: '',
        objType: null,
        endtime: '',
        orderCode: ''
      }
    }
  },
  created () {
    this.config({
      module: '用户信息表',
      api: '/business/integral',
      'field.id': 'id',
      'field.main': 'id'
    })
  },
  methods: {
    open (title, info) {
      this.title = title
      this.visible = true
      this.info = info
      this.searchForm.memberId = info.id
      this.search()
    }
  }
}
</script>
<style scoped>
.table-pagination{
  position: fixed !important;
  bottom: 50px;
}
.header-b{
  display: inline-block;
  font-size: 16px;
  font-weight: bold;
}
.header-blue{
  display: inline-block;
  font-size: 12px;
  border: 1px solid #216EEE;
  padding: 2px 10px;
  margin-left: 20px;
  color: #216EEE;
  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{
  font-weight: 600;
}
.info-item-a  .btn{
  font-size: 12px !important;
  cursor: pointer !important;
}
</style>
admin/src/components/business/OperaMemberDetail.vue
@@ -21,10 +21,10 @@
      </div>
      <div class="info-item"></div>
    </div>
    <div style="display: block">
    <div style="display: block;margin-bottom: 50px;">
      <div class="header">
        <div  class="header-b">积分明细</div>
        <div v-if="info.phone!=null && info.phone!=''" class="header-btn">
        <div   class="header-btn">
          <el-button style="display: inline" type="primary" @click="changeIntegral">积分调整</el-button>
        </div>
      </div>
@@ -55,10 +55,12 @@
            >
              <el-table-column prop="type"  label="获得/扣除" align="center" min-width="150px">
                <template slot-scope="{row}">
                  {{ row.saleType == 1?'扣除':'获得'}}
                </template>
                    <span v-if="row.type==0" class="green">获得</span>
                    <span v-else class="red">扣除</span>
                  </template>
              </el-table-column>
              <el-table-column prop="num" label="数量" fixed align="center" min-width="100px">  </el-table-column>
              <el-table-column prop="totalNum" label="余额" fixed align="center" min-width="100px">  </el-table-column>
              <el-table-column prop="strObjType" label="消费类型" align="center" min-width="100px"></el-table-column>
              <el-table-column prop="content" label="消费内容" align="center" min-width="150px" show-overflow-tooltip></el-table-column>
              <el-table-column prop="orderCode" label="关联订单" align="center" min-width="150px"></el-table-column>
admin/src/components/business/OperaShopGoodsWindow.vue
@@ -180,7 +180,7 @@
      row.oldGoodsPrice = row.goodsPrice
    },
    blurEvent (row, curIndex, column) {
      if(this.price >= row.goodsPrice) {
      if(this.price <= row.goodsPrice) {
        this.$tip.error('供货价不能低于销售价')
        row.isPriceSelected = !row.isPriceSelected
        row.goodsPrice = row.oldGoodsPrice// ä»·æ ¼è¿˜åŽŸ
admin/src/components/business/OperaShopInfoWindow.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,416 @@
<template>
  <GlobalWindow
      :title="title"
      width="100%"
      :visible.sync="visible"
  >
    <div style="display: block;">
      <div class="platgroup_tabs">
        <div class="tab" :class="{ active: activeGroup === item.id }" @click="groupClick(item)"
             v-for="(item, i) in groupList" :key="i">
          {{ item.name }}
        </div>
      </div>
    </div>
    <template v-if="activeGroup ==0">
      <div style="display: block;">
        <div class="header">
          <div  class="header-b">基本信息</div>
          <div v-if="info.status !=1" class="header-green">正常</div>
          <div v-if="info.status ==1" class="header-red">禁用</div>
        </div>
        <div class="info-item">
          <div class="info-item-a">经销商名称:<span>{{info.name || ''}}</span><span class="blue header-blue">{{ info.saleType == 1?'自由采购':'平台铺货'}}</span></div>
          <div class="info-item-a">门店ID:<span>{{info.code || ''}}</span></div>
          <div class="info-item-a">登录账号:<span>{{info.username || ''}}</span></div>
        </div>
        <div class="info-item">
          <div class="info-item-a">所属地区:<span>{{info.bigAreaName || ''}}</span></div>
          <div class="info-item-a">省市区:<span v-if="info.areas">{{(info.areas.provinceName||'') + (info.areas.cityName||'') + (info.areas.name||'')}}</span></div>
          <div class="info-item-a">详细地址:<span>{{info.addr || ''}}</span></div>
        </div>
        <div class="info-item">
          <div class="info-item-a">联系人:<span>{{info.realname || ''}}</span></div>
          <div class="info-item-a">手机号:<span>{{info.phone || ''}}</span></div>
          <div class="info-item-a">创建时间:<span>{{info.createDate || ''}}</span></div>
        </div>
        <div class="info-item">
          <div class="info-item-a">定位信息:<span>经度:{{info.longitude  || '-'}} ç»´åº¦ï¼š{{info.latitude|| '-'}}</span></div>
          <div class="info-item-a">营业时间:<span>{{info.startTime || ''}}</span></div>
          <div class="info-item-a"></div>
        </div>
        <div class="info-item">
          <div class="info-item-a">门头图:
            <div> <el-image v-if="info.imgurlfull" style="margin-left: 100px; width: 100px; height: 100px; border-radius: 2px;" :src="info.imgurlfull" :preview-src-list="[info.imgurlfull]"></el-image></div>
          </div>
          <div class="info-item-a"></div>
          <div class="info-item-a"></div>
        </div>
        <div class="info-item"></div>
      </div>
      <div style="display: block">
        <div class="header">
          <div  class="header-b">资质信息</div>
        </div>
        <div class="info-item">
          <div class="info-item-a">法人姓名:<span>{{info.legalPersonName || ''}}</span></div>
          <div class="info-item-a">联系电话:<span>{{info.legalPersonPhone || ''}}</span></div>
          <div class="info-item-a"></div>
        </div>
        <div class="info-item">
          <div class="info-item-a"> èº«ä»½è¯ï¼š
            <div style="display: inline-block;width: 300px;margin-left: 100px;">
              <el-image v-if="info.idcardImg" style="width: 100px; height: 100px; border-radius: 2px;display: inline-block;"
                        :src="info.imgFullUrl +info.idcardImg"
                        :preview-src-list="[info.imgFullUrl +info.idcardImg]"></el-image>
              <el-image v-if="info.idcardImgBack" style="margin-left:10px;width: 100px; height: 100px; border-radius: 2px;display: inline-block;"
                        :src="info.imgFullUrl +info.idcardImgBack"
                        :preview-src-list="[info.imgFullUrl +info.idcardImgBack]"></el-image>
            </div>
          </div>
          <div class="info-item-a">营业执照:
            <div  style="display: inline-block;width: 300px;margin-left: 100px;">
              <el-image v-if="info.businessImg" style="width: 100px; height: 100px; border-radius: 2px;"
                        :src="info.imgFullUrl +info.businessImg"
                        :preview-src-list="[info.imgFullUrl +info.businessImg]"></el-image>
            </div>
          </div>
          <div class="info-item-a"></div>
        </div>
        <div class="info-item"></div>
      </div>
      <div style="display: block;margin-bottom: 50px;">
        <div class="header">
          <div  class="header-b">销售模式变更记录</div>
        </div>
        <TableLayout >
          <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
          <template v-slot:table-wrap>
            <el-table
                v-loading="isWorking.search0"
                :data="tableData0.list"
                stripe
                border
            >
              <el-table-column prop="type" label="变更类型" fixed align="center" min-width="150px">销售模式</el-table-column>
              <el-table-column prop="beforeInfo" label="变更前" fixed align="center" min-width="150px">  </el-table-column>
              <el-table-column prop="afterInfo" label="变更后" fixed align="center" min-width="150px">  </el-table-column>
              <el-table-column prop="remark" label="备注" align="center" min-width="300px"></el-table-column>
              <el-table-column prop="createName" label="操作人" align="center" min-width="100px"></el-table-column>
              <el-table-column prop="createDate" label="操作时间" align="center" min-width="150px"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange0"
                @current-change="handlePageChange0"
                :pagination="tableData0.pagination"
            >
            </pagination>
          </template>
        </TableLayout>
      </div>
    </template>
    <template v-else-if="activeGroup == 2">
      <div style="display: block;margin-bottom: 50px;">
        <div class="header">
          <div  class="header-b">积分明细</div>
          <div  class="header-btn">
            <el-button style="display: inline" type="primary" @click="changeIntegral">积分调整</el-button>
          </div>
        </div>
        <TableLayout >
          <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
          <template v-slot:table-wrap>
            <div >
              <div style="float: left; margin-bottom: 20px;width:50%;">
                <div class="info-item">
                  <div class="info-item-a">现有积分:<span>{{info.integral || 0}}</span></div>
                  <div class="info-item-a">累计积分:<span>{{info.totalIntegral || 0}}</span></div>
                </div>
              </div>
              <div style="float: right; margin-bottom: 20px;">
                <el-select  v-model="searchForm2.type"  placeholder="全部"  clearable @change="search" style="width: 120px;" >
                  <el-option  :key="0" :value="0"  label="获得"  ></el-option>
                  <el-option   :key="1" :value="1" label="扣除"  ></el-option>
                </el-select>
                <el-button @click="handlePageChange2(1)" type="点击刷新"  icon="el-icon-refresh"  style="margin-left: 10px;" ></el-button>
              </div>
            </div>
            <el-table
                v-loading="isWorking.search2"
                :data="tableData2.list"
                stripe
                border
            >
              <el-table-column prop="type"  label="获得/扣除" align="center" min-width="150px">
                <template slot-scope="{row}">
                  <span v-if="row.type==0" class="green">获得</span>
                  <span v-else class="red">扣除</span>
                </template>
              </el-table-column>
              <el-table-column prop="num" label="数量" fixed align="center" min-width="100px">  </el-table-column>
              <el-table-column prop="totalNum" label="余额" fixed align="center" min-width="100px">  </el-table-column>
              <el-table-column prop="strObjType" label="消费类型" align="center" min-width="100px"></el-table-column>
              <el-table-column prop="content" label="来源" align="center" min-width="150px" show-overflow-tooltip></el-table-column>
              <el-table-column prop="remark" label="备注" align="center" min-width="200px"></el-table-column>
              <el-table-column prop="orderCode" label="关联订单" align="center" min-width="150px"></el-table-column>
              <el-table-column prop="createDate" label="变动时间" align="center" min-width="200px"></el-table-column>
            </el-table>
            <pagination
                @size-change="handleSizeChange2"
                @current-change="handlePageChange2"
                :pagination="tableData2.pagination"
            >
            </pagination>
          </template>
        </TableLayout>
      </div>
    </template>
    <template  v-slot:footer>
      <el-button @click="visible=false">返回</el-button>
    </template>
    <OperaChangeShopRecordWindow ref="OperaChangeShopRecordWindow"/>
    <OperaChangeIntegralWindow ref="OperaChangeIntegralWindow" @success="successBiz"/>
  </GlobalWindow>
</template>
<script>
import GlobalWindow from '@/components/common/GlobalWindow'
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaChangeShopRecordWindow from '@/components/business/OperaChangeShopRecordWindow'
import OperaChangeIntegralWindow from '@/components/business/OperaChangeIntegralWindow'
import { shopDetail as detail } from '@/api/business/shop'
import { fetchList as actionList } from '@/api/business/userAction'
import { fetchList as integralList } from '@/api/business/integral'
export default {
  name: 'OperaShopInfoWindow',
  extends: BaseTable,
  components: { GlobalWindow, TableLayout, Pagination, OperaChangeShopRecordWindow, OperaChangeIntegralWindow },
  data () {
    return {
      title: '',
      visible: false,
      tabelHeight: null,
      activeGroup: -1,
      groupList: [{ id: 0, name: '基本信息' }, { id: 1, name: '销售信息' }, { id: 2, name: '积分信息' }],
      info: {},
      // æœç´¢
      searchForm2: {
        memberId: '',
        userType: 1,
        type: null
      },
      isWorking: {
        search0: false,
        search1: false,
        search2: false
      },
      tableData0: {
        // å·²é€‰ä¸­çš„æ•°æ®
        selectedRows: [],
        // æŽ’序的字段
        sorts: [],
        // å½“前页数据
        list: [],
        // åˆ†é¡µ
        pagination: {
          pageIndex: 1,
          pageSize: 10,
          total: 0
        }
      },
      tableData2: {
        // å·²é€‰ä¸­çš„æ•°æ®
        selectedRows: [],
        // æŽ’序的字段
        sorts: [],
        // å½“前页数据
        list: [],
        // åˆ†é¡µ
        pagination: {
          pageIndex: 1,
          pageSize: 10,
          total: 0
        }
      }
    }
  },
  created () {
    this.config({
      module: '用户信息表',
      api: '/business/integral',
      'field.id': 'id',
      'field.main': 'id'
    })
  },
  methods: {
    groupClick(item){
      this.activeGroup = item.id
    },
    successBiz () {
      this.handlePageChange2(1)
      this.loadInfo()
      this.$emit('success')
    },
    loadInfo () {
      detail(this.info.id).then(res => {
        this.info = res || this.info
      })
    },
    showChangeRecord () {
      if (this.info) {
        this.$refs.OperaChangeShopRecordWindow.open('客户经销商变更记录', this.info)
      }
    },
    changeIntegral () {
      if (this.info) {
        this.$refs.OperaChangeIntegralWindow.open('经销商积分调整', this.info, 1)
      }
    },
    open (title, info) {
      this.title = title
      this.visible = true
      this.info = info
      this.activeGroup = 0
      this.searchForm2.memberId = info.id
      if (this.info.imgurl) {
        this.info.imgurlfull = this.info.imgFullUrl + this.info.imgurl
      }
      this.handlePageChange0(1)
      this.handlePageChange2(1)
    },
    handleSizeChange0 (pageSize) {
      this.tableData0.pagination.pageSize = pageSize
      this.search0()
    },
    // é¡µç å˜æ›´å¤„理
    handlePageChange0 (pageIndex) {
      this.tableData0.pagination.pageIndex = pageIndex || this.tableData0.pagination.pageIndex
      this.isWorking.search0 = true
      actionList({
        page: this.tableData0.pagination.pageIndex,
        capacity: this.tableData0.pagination.pageSize,
        model: { type: 1, memberId: this.info.id }, // é”€å”®æ¨¡å¼å˜æ›´
        sorts: this.tableData0.sorts
      })
        .then(data => {
          this.tableData0.list = data.records
          this.tableData0.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search0 = false
        })
    },
    handleSizeChange2 (pageSize) {
      this.tableData0.pagination.pageSize = pageSize
      this.search0()
    },
    // é¡µç å˜æ›´å¤„理
    handlePageChange2 (pageIndex) {
      this.tableData2.pagination.pageIndex = pageIndex || this.tableData2.pagination.pageIndex
      this.isWorking.search2 = true
      integralList({
        page: this.tableData0.pagination.pageIndex,
        capacity: this.tableData0.pagination.pageSize,
        model: this.searchForm2, // é”€å”®æ¨¡å¼å˜æ›´
        sorts: this.tableData2.sorts
      })
        .then(data => {
          this.tableData2.list = data.records
          this.tableData2.pagination.total = data.total
        })
        .catch(e => {
          this.$tip.apiFailed(e)
        })
        .finally(() => {
          this.isWorking.search2 = false
        })
    }
  }
}
</script>
<style lang="scss"  scoped>
.platgroup_tabs {
  flex: 1;
  display: flex;
  border-bottom: 1px solid #dfe2e8;
  margin-bottom: 30px;
  .tab {
    color: #666666;
    margin-right: 40px;
    cursor: pointer;
    padding-bottom: 10px;
    border-bottom: 2px solid #fff;
  }
  .active {
    font-weight: 500;
    font-size: 15px;
    color: #216EEE;
    border-bottom: 2px solid #216EEE;
  }
}
.table-pagination{
  position: fixed !important;
  bottom: 50px;
}
.header-b{
  display: inline-block;
  font-size: 16px;
  font-weight: bold;
}
.header-green{
  display: inline-block;
  font-size: 12px;
  border: 1px solid green;
  padding: 2px 10px;
  margin-left: 20px;
  color: green;
  border-radius: 5px ;
}
.header-red{
  display: inline-block;
  font-size: 12px;
  border: 1px solid red;
  padding: 2px 10px;
  margin-left: 20px;
  color: red;
  border-radius: 5px ;
}
.header-blue{
  display: inline-block;
  font-size: 12px;
  border: 1px solid #216EEE;
  padding: 2px 10px;
  margin-left: 20px;
  color: #216EEE;
  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{
  font-weight: 600;
}
.info-item-a  .btn{
  font-size: 12px !important;
  cursor: pointer !important;
}
</style>
admin/src/views/business/integral.vue
@@ -52,7 +52,9 @@
      </div>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
<!--
        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:integral:exportExcel']" @click="exportExcel">导出</el-button>
-->
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
@@ -64,19 +66,20 @@
        stripe
        border
      >
      <el-table-column prop="remark" label="流水号" align="center" min-width="100px"></el-table-column>
<!--         <el-table-column prop="remark" label="流水号" align="center" min-width="100px"></el-table-column>-->
        <el-table-column prop="nickName" label="用户" align="center" min-width="100px"> </el-table-column>
        <el-table-column prop="phone" align="center" label="手机号" min-width="100px"></el-table-column>
        <el-table-column prop="type" align="center" label="收支类型" min-width="100px">
          <template slot-scope="{row}">
            {{ row.type==0?'收入':'支出' }}
           <span v-if="row.type==0" class="green">获得</span>
           <span v-else class="red">扣除</span>
          </template>
        </el-table-column>
        <el-table-column prop="num" align="center" label="数量" min-width="100px"></el-table-column>
        <el-table-column prop="totalNum" align="center" label="当前余额" min-width="100px"></el-table-column>
        <el-table-column prop="strObjType" align="center" label="消费类型" min-width="100px"></el-table-column>
        <el-table-column prop="content" align="center" label="变动内容" min-width="150px" show-overflow-tooltip></el-table-column>
        <el-table-column prop="orderCode" align="center" label="交易单号" min-width="100px"></el-table-column>
        <el-table-column prop="content" align="center" label="收支说明" min-width="100px"></el-table-column>
        <el-table-column prop="createDate" align="center" label="变动时间" min-width="100px"></el-table-column>
      </el-table>
      <pagination
@@ -106,6 +109,7 @@
        userType: 0,
        type: '',
        starttime: '',
        objType: null,
        endtime: '',
        orderCode: ''
      }
admin/src/views/business/shop.vue
@@ -30,7 +30,7 @@
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <ul class="toolbar" v-permissions="['business:shop:create', 'business:shop:delete']">
        <li><el-button type="primary" @click="$refs.operaShopWindow.open('新建店铺')" icon="el-icon-plus" v-permissions="['business:shop:create']">新建</el-button></li>
        <li><el-button type="primary" @click="$refs.operaShopWindow.open('新建经销商')" icon="el-icon-plus" v-permissions="['business:shop:create']">新建</el-button></li>
        <!-- <li><el-button @click="deleteByIdInBatch" icon="el-icon-delete" v-permissions="['business:shop:delete']">删除</el-button></li> -->
      </ul>
      <el-table
@@ -114,7 +114,7 @@
    </template>
    <!-- æ–°å»º/修改 -->
    <OperaShopWindow ref="operaShopWindow" @success="handlePageChange"/>
    <OperaShopDetailWindow ref="operaShopDetailWindow" />
    <OperaShopInfoWindow ref="OperaShopInfoWindow" />
    <ResetPwdShopWindow ref="resetPwdWindow"/>
  </TableLayout>
</template>
@@ -124,13 +124,13 @@
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaShopWindow from '@/components/business/OperaShopWindow'
import OperaShopDetailWindow from '@/components/business/OperaShopDetailWindow'
import OperaShopInfoWindow from '@/components/business/OperaShopInfoWindow'
import { resetPwd, updateIsRecById } from '@/api/business/shop'
import ResetPwdShopWindow from '@/components/business/ResetPwdShopWindow'
export default {
  name: 'Shop',
  extends: BaseTable,
  components: { TableLayout, Pagination, OperaShopWindow, OperaShopDetailWindow, ResetPwdShopWindow },
  components: { TableLayout, Pagination, OperaShopWindow, OperaShopInfoWindow, ResetPwdShopWindow },
  data () {
    return {
@@ -146,7 +146,7 @@
  },
  created () {
    this.config({
      module: '店铺基本信息表',
      module: '经销商基本信息表',
      api: '/business/shop',
      'field.id': 'id',
      'field.main': 'id'
@@ -184,7 +184,7 @@
        })
    },
    showDetail (row) {
      this.$refs.operaShopDetailWindow.open('店铺详情', row)
      this.$refs.OperaShopInfoWindow.open('经销商详情', row)
    }
  }
}
admin/src/views/business/shopMoney.vue
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,93 @@
<template>
  <TableLayout :permissions="['business:integral:query']">
    <!-- æœç´¢è¡¨å• -->
    <el-form ref="searchForm" slot="search-form" :model="searchForm" label-width="100px" inline>
      <el-form-item label="经销商名称" prop="name">
        <el-input v-model="searchForm.name" placeholder="请输入经销商名称" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <el-form-item label="门店ID" prop="code">
        <el-input v-model="searchForm.code" placeholder="请输入门店ID" @keypress.enter.native="search"></el-input>
      </el-form-item>
      <section>
        <el-button type="primary" @click="search">搜索</el-button>
        <el-button type="primary" :loading="isWorking.export" v-permissions="['business:shop:exportExcel']" @click="exportExcel">导出</el-button>
        <el-button @click="reset">重置</el-button>
      </section>
    </el-form>
    <!-- è¡¨æ ¼å’Œåˆ†é¡µ -->
    <template v-slot:table-wrap>
      <el-table
        v-loading="isWorking.search"
        :data="tableData.list"
        stripe
        border
      >
        <el-table-column prop="name" label="经销商名称" align="center" min-width="150px"> </el-table-column>
        <el-table-column prop="code" label="门店ID" align="center" min-width="150px"> </el-table-column>
        <el-table-column prop="amount" align="center" label="账户余额(元)" min-width="150px">
          <template slot-scope="{row}">{{row.amount || 0}}</template>
        </el-table-column>
        <el-table-column prop="jiesuanIng" align="center" label="待结算(元)" min-width="150px">
          <template slot-scope="{row}">{{row.jiesuanIng || 0}}</template>
        </el-table-column>
        <el-table-column prop="withdrawIng" align="center" label="提现中(元)" min-width="150px">
          <template slot-scope="{row}">{{row.withdrawIng || 0}}</template>
        </el-table-column>
        <el-table-column prop="withdrawTotal" align="center" label="累计提现(元)" min-width="150px">
          <template slot-scope="{row}">{{row.withdrawTotal || 0}}</template>
        </el-table-column>
        <el-table-column prop="withdrawDate" align="center" label="最近提现时间" min-width="150px"></el-table-column>
        <el-table-column
            label="操作"
            min-width="100"
            fixed="right"
            align="center"
        >
          <template slot-scope="{row}">
            <el-button type="text" @click="$refs.OperaIntegralShopMoneyWindow.open('查询经销商余额明细', row)" icon="el-icon-edit" >查询明细</el-button>
          </template>
        </el-table-column>
      </el-table>
      <pagination
        @size-change="handleSizeChange"
        @current-change="handlePageChange"
        :pagination="tableData.pagination"
      >
      </pagination>
    </template>
    <OperaIntegralShopMoneyWindow ref="OperaIntegralShopMoneyWindow"/>
  </TableLayout>
</template>
<script>
import BaseTable from '@/components/base/BaseTable'
import TableLayout from '@/layouts/TableLayout'
import Pagination from '@/components/common/Pagination'
import OperaIntegralShopMoneyWindow from '@/components/business/OperaIntegralShopMoneyWindow'
export default {
  name: 'Integral',
  extends: BaseTable,
  components: { TableLayout, Pagination ,OperaIntegralShopMoneyWindow},
  data () {
    return {
      createDate: [],
      // æœç´¢
      searchForm: {
        code: '',
        name: ''
      }
    }
  },
  created () {
    this.config({
      module: '经销商账户明细',
      api: '/business/shopMoney',
      'field.id': 'id',
      'field.main': 'id'
    })
    this.search()
  },
  methods: {
  }
}
</script>
server/dmmall_admin/src/main/java/com/doumee/api/business/IntegralController.java
@@ -88,15 +88,7 @@
    @RequiresPermissions("business:integral:exportExcel")
    public void exportExcel (@RequestBody PageWrap<Integral> pageWrap, HttpServletResponse response) throws Exception {
       List<Integral>  list=integralService.findPage(pageWrap).getRecords();
        for(Integral model:list){
            if(Constants.equalsInteger(model.getType(),Constants.ZERO)){
                model.setStrType("收入");
            }else  if(Constants.equalsInteger(model.getType(),Constants.ONE)){
                model.setStrType("支出");
            }
            model.setStrObjType(Constants.IntegralObjType.getName(model.getObjType()));
        }
        ExcelExporter.build(Integral.class).export(list, "用户积分明细"+ DateUtil.getNowLongTime(), response);
        ExcelExporter.build(Integral.class).export(list, "经销商余额明细"+ DateUtil.getNowLongTime(), response);
    }
    @ApiOperation("根据ID查询")
server/dmmall_admin/src/main/java/com/doumee/api/business/ShopController.java
@@ -8,6 +8,7 @@
import com.doumee.core.model.PageWrap;
import com.doumee.core.model.PageData;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.system.vo.ShopMoneyVO;
import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
import com.doumee.service.business.ShopService;
import io.swagger.annotations.Api;
@@ -94,6 +95,13 @@
        return ApiResponse.success(shopService.findPage(pageWrap));
    }
    @ApiOperation("分页查询账号明细")
    @PostMapping("/pageMoney")
    @RequiresPermissions("business:shop:query")
    public ApiResponse<PageData<ShopMoneyVO>> findPageMoney (@RequestBody PageWrap<Shop> pageWrap) {
        return ApiResponse.success(shopService.findPageMoney(pageWrap));
    }
    @ApiOperation("查询所有数据")
    @PostMapping("/findAll")
    @RequiresPermissions("business:shop:query")
@@ -108,6 +116,12 @@
    public void exportExcel (@RequestBody PageWrap<Shop> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(Shop.class).export(shopService.findPage(pageWrap).getRecords(), "店铺基本信息表", response);
    }
    @ApiOperation("导出Excel")
    @PostMapping("/exportExcelMoney")
    @RequiresPermissions("business:shop:exportExcel")
    public void exportExcelMoney (@RequestBody PageWrap<Shop> pageWrap, HttpServletResponse response) {
        ExcelExporter.build(ShopMoneyVO.class).export(shopService.findPageMoney(pageWrap).getRecords(), "经销商账号明细", response);
    }
    @ApiOperation("根据ID查询")
    @GetMapping("/{id}")
server/dmmall_service/src/main/java/com/doumee/core/utils/Constants.java
@@ -1176,6 +1176,7 @@
    public  enum UserActionType {
        CHANGE_SHOP(0, "经销商更换","由【${param1}】于【${param2}】,进行【经销商更换】" ),
        CHANGE_SALETYPE(1, "经销商更换销售模式","由【${param1}】于【${param2}】,进行【销售模式变更】" ),
        ;
        // æˆå‘˜å˜é‡
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Integral.java
@@ -31,7 +31,7 @@
    private Integer creator;
    @ApiModelProperty(value = "创建时间")
    @ExcelColumn(name="创建时间" ,index = 8,width = 10)
    @ExcelColumn(name="交易时间" ,index =1,width = 10)
    private Date createDate;
    @ApiModelProperty(value = "更新人编码", example = "1")
@@ -54,7 +54,7 @@
    private String title;
    @ApiModelProperty(value = "内容")
    @ExcelColumn(name="收支说明",index =7,width = 10)
    @ExcelColumn(name="交易说明",index =7,width = 10)
    private String content;
    @ApiModelProperty(value = "对象编码 0平台注册 1签到 2分享邀请 3邀请新用户 4兑换商品", example = "1")
@@ -64,24 +64,25 @@
    private Integer objType;
    @ApiModelProperty(value = "收支类型 0收入 1支出", example = "1")
    @ExcelColumn(name="收支类型",index =2,width = 10,valueMapping = "0=收入;1=支出;")
    private Integer type;
    @ApiModelProperty(value = "数量", example = "1")
    @ExcelColumn(name="收支金额",index =4,width = 10)
    @ExcelColumn(name="收支金额(元)",index =3,width = 10)
    private BigDecimal num;
    @ApiModelProperty(value = "当前余额", example = "1")
    @ExcelColumn(name="当前余额",index =5,width = 10)
    @ExcelColumn(name="当前余额(元)",index =4,width = 10)
    private BigDecimal totalNum;
    @ApiModelProperty(value = "交易单号")
    @ExcelColumn(name="关联订单号",index =6,width = 10)
    private String orderCode;
    @ApiModelProperty(value = "用户数据类型:0=消费者积分;1=经销商积分;2=经销商结算金额;")
    private Integer userType;
    @ApiModelProperty(value = "用户昵称")
    @ExcelColumn(name="用户",index =1,width = 10)
    @TableField(exist = false)
    private String nickName;
@@ -91,13 +92,7 @@
    @ApiModelProperty(value = "用户手机号")
    @TableField(exist = false)
    @ExcelColumn(name="手机号",index =2,width = 10)
    private String phone;
    @TableField(exist = false)
    @ExcelColumn(name="收支类型",index =3,width = 10)
    private String strType;
    @ApiModelProperty(value = "开始时间 ")
    @TableField(exist = false)
@@ -108,7 +103,7 @@
    private Date endtime;
    @TableField(exist = false)
    @ExcelColumn(name="类型",index =6,width = 10)
    @ExcelColumn(name="交易类型",index =5,width = 10)
    private String strObjType;
server/dmmall_service/src/main/java/com/doumee/dao/system/vo/ShopMoneyVO.java
¶Ô±ÈÐÂÎļþ
@@ -0,0 +1,40 @@
package com.doumee.dao.system.vo;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
@ApiModel("经销商账户明细对象")
public class ShopMoneyVO {
    @ApiModelProperty(value = "主键", example = "1")
    private Integer id;
    @ApiModelProperty(value = "店铺名称")
    @ExcelColumn(name="经销商名称",width = 10,index = 1)
    private String name;
    @ApiModelProperty(value = "门店ID")
    @ExcelColumn(name="门店ID",width = 10,index = 2)
    private String code;
    @ApiModelProperty(value = "可提现金额")
    @ExcelColumn(name="账号余额(元)",width = 10,index = 3)
    private BigDecimal amount;
    @ApiModelProperty(value = "结算中")
    @ExcelColumn(name="结算中(元)",width = 10,index = 4)
    private BigDecimal jiesuanIng;
    @ApiModelProperty(value = "提现中金额")
    @ExcelColumn(name="提现中(元)",width = 10,index = 5)
    private BigDecimal withdrawIng;
    @ApiModelProperty(value = "累计提现金额")
    @ExcelColumn(name="累计提现(元)",width = 10,index =6 )
    private BigDecimal withdrawTotal;
    @ApiModelProperty(value = "最近提现时间")
    @ExcelColumn(name="最近提现时间",width = 10,index =7,dateFormat = "yyyy-MM-dd HH:mm:ss")
    private Date withdrawDate;
}
server/dmmall_service/src/main/java/com/doumee/service/business/ShopService.java
@@ -5,6 +5,7 @@
import com.doumee.dao.business.model.Integral;
import com.doumee.dao.business.model.Member;
import com.doumee.dao.business.model.Shop;
import com.doumee.dao.system.vo.ShopMoneyVO;
import com.doumee.dao.web.dto.MemberDTO;
import com.doumee.dao.web.dto.ResetSystemUserPwdDTO;
import com.doumee.dao.web.dto.ShopLoginDTO;
@@ -214,4 +215,5 @@
    String setGoodsPrice(Shop shop);
    PageData<ShopMoneyVO>  findPageMoney(PageWrap<Shop> pageWrap);
}
server/dmmall_service/src/main/java/com/doumee/service/business/impl/IntegralServiceImpl.java
@@ -317,14 +317,14 @@
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper.selectAll(Integral.class);
        queryWrapper.selectAs(Member::getNickname, Fund::getNickName);
        queryWrapper.selectAs(Member::getImgurl, Fund::getImgurl);
        queryWrapper.selectAs(Member::getPhone, Fund::getPhone);
        queryWrapper.selectAs(Member::getNickname, Integral::getNickName);
        queryWrapper.selectAs(Member::getImgurl, Integral::getImgurl);
        queryWrapper.selectAs(Member::getPhone, Integral::getPhone);
        queryWrapper.leftJoin(Member.class, Member::getId, Integral::getMemberId);
        queryWrapper.eq(pageWrap.getModel().getMemberId() != null, Integral::getMemberId, pageWrap.getModel().getMemberId());
        queryWrapper.eq(pageWrap.getModel().getType() != null, Integral::getType, pageWrap.getModel().getType());
        queryWrapper.eq(pageWrap.getModel().getUserType() != null, Integral::getUserType, pageWrap.getModel().getUserType());
        queryWrapper.eq(  pageWrap.getModel().getObjType() !=null, Integral::getObjType, pageWrap.getModel().getObjType());
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNickName()), ms -> ms.like(Member::getNickname, pageWrap.getModel().getNickName())
                .or().like(Member::getPhone, pageWrap.getModel().getNickName())
        );
@@ -416,7 +416,7 @@
        if(com.github.xiaoymin.knife4j.core.util.CollectionUtils.isNotEmpty(result.getRecords())){
            for (Integral integral:result.getRecords()) {
                integral.setStrType(Constants.IntegralObjType.getName(integral.getObjType()));
                integral.setStrObjType(Constants.IntegralObjType.getName(integral.getObjType()));
            }
        }
        return PageData.from(result);
@@ -436,7 +436,7 @@
        Date date = new Date();
        Integral integral = new Integral();
        Constants.IntegralObjType integralObjType =null;
        if(Constants.equalsInteger(param.getUserType(), Constants.ZERO)){
        if(Constants.equalsInteger(param.getUserType(), Constants.ZERO)){//用户账号
            MPJLambdaWrapper<Member> queryWrapper =new MPJLambdaWrapper<>();
            queryWrapper.selectAll(Member.class);
            queryWrapper.selectAs(Shop::getName,Member::getShopName);
@@ -463,8 +463,9 @@
                    .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
            integralObjType = param.getType()==0?Constants.IntegralObjType.SYSTEM_RECHARGE:Constants.IntegralObjType.SYSTEM_DEDUCT;
            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
        }else{
            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum()));
            integral.setUserType(Constants.ZERO);
        }else{//经销商账户
            Shop model = shopMapper.selectById(param.getMemberId());
            if(model == null ||Constants.equalsObject(model.getIsdeleted(),Constants.ONE)){
                throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"经销商信息查询无效!");
@@ -483,9 +484,9 @@
                    .setSql(param.getType() == 0,"total_integral = ifnull(total_integral,0)+" + num)//累计增加
                    .setSql(param.getType() == 0,"integral = ifnull(integral,0)+" + param.getNum())
                    .setSql(param.getType() == 1,"integral = ifnull(integral,0)-" + param.getNum()));
             integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT;
            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(integral.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(integral.getNum()));
            integralObjType = param.getType()==0?Constants.IntegralObjType.SHOP_SYSTEM_RECHARGE:Constants.IntegralObjType.SHOP_SYSTEM_DEDUCT;
            integral.setTotalNum(param.getType() == 0? Constants.formatBigdecimal(model.getIntegral()).add(param.getNum()):Constants.formatBigdecimal(model.getIntegral()).subtract(param.getNum()));
            integral.setUserType(Constants.ONE);
        }
        integral.setCreateDate(new Date());
        integral.setCreator(user.getId());
@@ -499,7 +500,6 @@
        integral.setType(param.getType());
        integral.setRemark(param.getRemark());
        integral.setOrderCode(null);
        integral.setUserType(Constants.ZERO);
        integralMapper.insert(integral);
    }
    @Override
server/dmmall_service/src/main/java/com/doumee/service/business/impl/ShopServiceImpl.java
@@ -1,6 +1,6 @@
package com.doumee.service.business.impl;
import com.baomidou.mybatisplus.core.conditions.Wrapper;
import com.alibaba.fastjson.JSONObject;
import com.doumee.biz.system.SystemDictDataBiz;
import com.doumee.config.Jwt.JwtPayLoad;
import com.doumee.config.Jwt.JwtTokenUtil;
@@ -11,11 +11,11 @@
import com.doumee.core.model.PageData;
import com.doumee.core.model.PageWrap;
import com.doumee.core.utils.Constants;
import com.doumee.core.utils.DateUtil;
import com.doumee.core.utils.Utils;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.GoodsorderJoinMapper;
import com.doumee.dao.business.join.MemberJoinMapper;
import com.doumee.dao.business.*;
import com.doumee.dao.business.join.ProductLabelJoinMapper;
import com.doumee.dao.business.model.*;
import com.doumee.dao.business.model.Labels;
@@ -24,6 +24,7 @@
import com.doumee.dao.business.model.ShopScan;
import com.doumee.dao.system.SystemUserMapper;
import com.doumee.dao.system.model.SystemUser;
import com.doumee.dao.system.vo.ShopMoneyVO;
import com.doumee.dao.web.dto.*;
import com.doumee.dao.web.dto.shop.*;
import com.doumee.dao.web.request.MyCustomerRequest;
@@ -39,12 +40,9 @@
import org.apache.shiro.SecurityUtils;
import com.github.yulichang.wrapper.MPJLambdaWrapper;
import org.apache.commons.lang3.StringUtils;
import org.apache.xpath.operations.Bool;
import org.checkerframework.checker.units.qual.C;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.annotation.Lazy;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;
@@ -64,6 +62,9 @@
    @Autowired
    private ShopMapper shopMapper;
    @Autowired
    private UserActionMapper userActionMapper;
    @Autowired
    private GoodsMapper goodsMapper;
    @Autowired
@@ -222,15 +223,33 @@
    }
    @Override
    @Transactional
    public void updateById(Shop shop) {
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();
        if(shop.getId()==null ){
            throw new BusinessException(ResponseStatus.BAD_REQUEST.getCode(), ResponseStatus.BAD_REQUEST.getMessage());
        }
        isCreateParamValid(shop,user);
        Shop model = shopMapper.selectById(shop.getId());
        if(model.getId()==null || Constants.equalsInteger(model.getIsdeleted(),Constants.ONE) ){
            throw new BusinessException(ResponseStatus.DATA_EMPTY);
        }
        shop.setEditor(user.getId());
        shop.setEditDate(new Date());
        shopMapper.updateById(shop);
        if(shop.getSaleType() !=null && !Constants.equalsInteger(shop.getSaleType(),model.getSaleType())){
            //如果销售模式发生编码,记录变更记录
            //更换日志记录
            UserActionServiceImpl.saveUserActionBiz(user,shop.getId(),
                    Constants.UserActionType.CHANGE_SALETYPE,
                    userActionMapper,
                    shop.getEditDate(),
                    new String[]{user.getUsername(), DateUtil.getPlusTime2(shop.getEditDate())},
                    JSONObject.toJSONString(shop) ,
                    Constants.equalsInteger(model.getSaleType(),Constants.ONE)?"自由采购":"平台铺货",
                    Constants.equalsInteger(shop.getSaleType(),Constants.ONE)?"自由采购":"平台铺货");
        }
    }
@@ -320,9 +339,7 @@
       Shop shop= shopJoinMapper.selectJoinOne(Shop.class,queryWrapper);
        String path = systemDictDataBiz.queryByCode(Constants.OSS, Constants.RESOURCE_PATH).getCode()
                + systemDictDataBiz.queryByCode(Constants.OSS, Constants.SHOP_FILE).getCode();
        if(Objects.nonNull(shop)&&StringUtils.isNotBlank(shop.getImgurl())){
            shop.setImgFullUrl(path+shop.getImgurl());
        }
        shop.setImgFullUrl(path);
        shop.setAreas(AreasServiceImpl.getAddressByAreaId(shop.getAreaId()));
        if(shop.getLatitude()!=null && shop.getLongitude()!=null){
            shop.setLocationInfo(shop.getLatitude().doubleValue()+","+shop.getLongitude().doubleValue());
@@ -392,6 +409,25 @@
            }
        }
        return PageData.from(result );
    }
    @Override
    public   PageData<ShopMoneyVO>  findPageMoney(PageWrap<Shop> pageWrap){
        IPage<Shop> page = new Page<>(pageWrap.getPage(), pageWrap.getCapacity());
        MPJLambdaWrapper<Shop> queryWrapper = new MPJLambdaWrapper<>();
        Utils.MP.blankToNull(pageWrap.getModel());
        queryWrapper
                .selectAll(Shop.class)
                .select("(select sum(price) from goodsorder g where  g.DISTRIBUTION_SHOP_ID=t.id and g.status in (1,2) and g.isdeleted=0) as jiesuanIng" )
                .select("(select g.create_date from withdraw_record g where  g.MEMBER_ID=t.id  and g.isdeleted=0 order by g.id desc limit 1 ) as withdrawDate" )
                .select("(select sum(g.amount)  from withdraw_record g where  g.MEMBER_ID=t.id and g.status=1  and g.isdeleted=0 ) as withdrawTotal"  )
                .select("(select sum(g.amount)  from withdraw_record g where  g.MEMBER_ID=t.id and g.status=0 and g.isdeleted=0 ) as withdrawIng" );
        queryWrapper.eq(Shop::getIsdeleted, Constants.ZERO);
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getCode()) ,Shop::getCode,pageWrap.getModel().getCode());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getUsername()) ,Shop::getName,pageWrap.getModel().getUsername());
        queryWrapper.like(StringUtils.isNotBlank(pageWrap.getModel().getName()) ,Shop::getName,pageWrap.getModel().getName());
        queryWrapper.orderByDesc(Shop::getId);
        IPage<ShopMoneyVO> result = shopJoinMapper.selectJoinPage(page, ShopMoneyVO.class, queryWrapper);
        return PageData.from(result );
    }
@@ -864,7 +900,7 @@
        }
        //默认sku信息
        GoodsSku goodsSku = goodsSkuList.get(0);
        if(Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(Constants.formatBigdecimal(dto.getGoodsPrice())) >=0){
        if(Constants.formatBigdecimal(goodsSku.getPrice()).compareTo(Constants.formatBigdecimal(dto.getGoodsPrice()))<=0){
            throw new BusinessException(ResponseStatus.DATA_EMPTY.getCode(),"对不起,供货价不允许大于商品销售价!");
        }
        LoginUserInfo user = (LoginUserInfo) SecurityUtils.getSubject().getPrincipal();