doum
8 小时以前 3a61aa096c3191e97770a92e4e145fe63ddc1aa4
经销商管理
已修改13个文件
168 ■■■■■ 文件已修改
admin/src/components/business/OperaCouponWindow.vue 68 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaLabelExpressWindow.vue 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaLabelsFeeAreaWindow.vue 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaNoticeWindow.vue 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/memberCoupon.vue 30 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/views/business/notice.vue 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/java/com/doumee/AdminApplication.java 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_admin/src/main/resources/application.yml 2 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Coupon.java 10 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java 4 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java 18 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
server/dmmall_service/src/main/resources/application-dev.yml 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
admin/src/components/business/OperaCouponWindow.vue
@@ -38,14 +38,12 @@
        <el-input type="textarea" v-model="form.info" placeholder="请输入优惠券说明" maxlength="500"  v-trim/>
      </el-form-item>
      <p class="tip-header" >使用限制</p>
      <el-form-item label="有效期" prop="useType">
        <el-radio-group v-model="form.useType">
      <el-form-item label="有效期" prop="getDate">
        <el-radio-group v-model="form.useType" @change="changeApplyType">
          <el-radio :label="0">固定时段</el-radio>
          <el-radio :label="1">固定时长</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item label="使用时段" prop="getDate" v-if="form.useType===0">
        <div class="date-style">
        <div class="date-style" v-if="form.useType===0">
          <el-date-picker
              v-model="getDate"
              type="datetimerange"
@@ -57,9 +55,7 @@
              @change="selectDate"
          ></el-date-picker>
        </div>
      </el-form-item>
      <el-form-item label="固定时长" prop="validDays" v-if="form.useType===1">
        <div class="coupon-rule">
        <div class="coupon-rule" v-if="form.useType===1">
          <div class="discrep">领劵后</div>
          <el-input
              v-model="form.validDays"
@@ -72,13 +68,22 @@
        </div>
      </el-form-item>
      <el-form-item label="适用对象" prop="applyType">
        <el-radio-group v-model="form.applyType">
        <el-radio-group v-model="form.applyType" @change="changeApplyType">
          <el-radio :label="0">全场通用</el-radio>
          <el-radio :label="1">按品类</el-radio>
          <el-radio :label="2">指定商品</el-radio>
        </el-radio-group>
      </el-form-item>
      <el-form-item v-if="form.applyType===1" label="选择品类" prop="applyCateIdList" >
      <el-form-item label="选择品类"   prop="applyTypeRule" v-if="form.applyType===1">
          <el-select style="margin-left:10px;width: 300px;" v-model="form.applyCateIdList"  placeholder="请选择商品分类,支持多选" filterable multiple clearable >
            <el-option  v-for="item in categorys" :key="'optCate'+item.id"  :label="item.name"  :value="item.id">  </el-option>
          </el-select>
      </el-form-item>
      <el-form-item label="选中商品" prop="applyTypeRule"  v-if="form.applyType===2">
          <span style="font-size: 12px;color: #216EEE"   @click="selectGoods">已指定【 {{applyDataList.length}} 】件商品</span>
          <el-button style="margin-left:30px;display: inline-block;width: 80px;" type="primary"  @click="selectGoods">去选择 </el-button>
      </el-form-item>
<!--      <el-form-item v-if="form.applyType===1" label="选择品类" prop="applyCateIdList" >
        <el-select v-model="form.applyCateIdList"  placeholder="请选择商品分类,支持多选" filterable multiple clearable >
          <el-option  v-for="item in categorys" :key="'optCate'+item.id"  :label="item.name"  :value="item.id">  </el-option>
        </el-select>
@@ -86,7 +91,7 @@
      <el-form-item v-if="form.applyType===2" label="选择商品" prop="applyIdList" style="display: flex">
          <span style="font-size: 12px;color: #216EEE"   @click="selectGoods">已指定【 {{applyDataList.length}} 】件商品</span>
        <el-button style="margin-left:30px;display: inline-block;width: 80px;" type="primary"  @click="selectGoods">去选择 </el-button>
      </el-form-item>
      </el-form-item>-->
      <p class="tip-header" >发放规则</p>
      <el-form-item label="发放总量" prop="num">
        <div class="num-style">
@@ -123,10 +128,25 @@
      }
    }
    const getDateRules = (rule, value, callback) => {
      if (!this.form.startDate) {
      if (!this.form.useType < 0) {
        callback(new Error('请选择有效期'))
      } else if (this.form.useType == 1 && !this.form.validDays) {
        callback(new Error('请输入固定时长天数'))
      } else if (this.form.useType == 0 && !this.form.startDate) {
        callback(new Error('请选择开始时间'))
      } else if (!this.form.endDate) {
      } else if (this.form.useType == 0 && !this.form.endDate) {
        callback(new Error('请输入结束时间'))
      } else {
        callback()
      }
    }
    const getApplyTypeRule = (rule, value, callback) => {
      if (!this.form.applyType < 0) {
        callback(new Error('请选择适用范围'))
      } else if (this.form.applyType == 1 && (!this.form.applyCateIdList  || !this.form.applyCateIdList.length)) {
        callback(new Error('请选择使用品类'))
      } else if (this.form.applyType == 2 && (!this.form.applyIdList  || !this.form.applyIdList.length)) {
        callback(new Error('请选择指定商品'))
      } else {
        callback()
      }
@@ -187,16 +207,16 @@
        ],
        num: [
          { required: true, validator: numRule, message: '请输入发放总数', tigger: 'blur' }
        ]
        ],
        /* integral: [
          { required: true, validator: numRule, message: '请输入兑换条件', tigger: 'blur' }
        ], */
        // validDays: [
        //   { required: true, message: '请输入可用时间', tigger: 'blur' }
        // ],
        // getDate: [
        //   { required: true, validator: getDateRules, tigger: 'change' }
        // ],
        getDate: [
          { required: true, validator: getDateRules }
        ],
        applyTypeRule: [
          { required: true, validator: getApplyTypeRule }
        ]
        // shopId: [
        //   { required: true, validator: numRule, message: '请选择关联店铺', tigger: 'change' }
        // ]
@@ -231,6 +251,9 @@
        this.applyDataList = res || []
      })
    },
    changeApplyType(){
      this.$refs.form.clearValidate()
    },
    doSelect (rows) {
      console.log(rows, this.applyDataList)
      this.applyDataList = []
@@ -241,6 +264,7 @@
          this.form.applyIdList.push(item.id)
        })
      }
      this.$refs.form.clearValidate();
    },
    open (title, target, type) {
      this.showGoods = false
@@ -273,7 +297,9 @@
        for (const key in this.form) {
          this.form[key] = target[key]
        }
        this.getDate = [target.startDate, target.endDate]
        if (target.startDate && target.endDate) {
          this.getDate = [target.startDate, target.endDate]
        }
        if (this.form.applyType === 1) {
          this.form.applyCateIdList = []
          var ta = this.form.applyIds.split(',')
admin/src/components/business/OperaLabelExpressWindow.vue
@@ -1,6 +1,7 @@
<template>
  <GlobalAlertWindow
    :title="title"
    width="500px"
    :visible.sync="visible"
    :confirm-working="isWorking"
    @confirm="confirm"
admin/src/components/business/OperaLabelsFeeAreaWindow.vue
@@ -23,18 +23,18 @@
      </el-form-item>
      <div style="display: flex">
        <el-form-item label="首重" prop="weight0" style="display: inline-block;flex: 1;">
          <el-input  v-model="form.weight0"    style="width: 150px" placeholder="请输入首重"    type="number">    <template slot="append" >kg</template>  </el-input>
          <el-input  v-model="form.weight0"    style="width: 200px" placeholder="请输入首重"    type="number">    <template slot="append" >kg</template>  </el-input>
        </el-form-item>
        <el-form-item label="首重运费" prop="fee0" style="display: inline-block;flex: 1;">
          <el-input  v-model="form.fee0"  style="width: 150px"    placeholder="请输入金额"  > <template slot="append" >元</template> </el-input>
          <el-input  v-model="form.fee0"  style="width: 200px"    placeholder="请输入金额"  > <template slot="append" >元</template> </el-input>
        </el-form-item>
      </div>
      <div style="display: flex">
      <el-form-item label="续重" prop="weight1" style="display: inline-block;flex:1">
        <el-input  v-model="form.weight1" style="width: 150px"    placeholder="请输入续重"    type="number">    <template slot="append" >kg</template>  </el-input>
        <el-input  v-model="form.weight1" style="width: 200px"    placeholder="请输入续重"    type="number">    <template slot="append" >kg</template>  </el-input>
      </el-form-item>
      <el-form-item label="续重运费增加" prop="fee1" style="display: inline-block;flex: 1;">
        <el-input  v-model="form.fee1" style="width: 150px"    placeholder="请输入金额"  > <template slot="append" >元</template> </el-input>
        <el-input  v-model="form.fee1" style="width: 200px"    placeholder="请输入金额"  > <template slot="append" >元</template> </el-input>
      </el-form-item>
    </div>
      <el-form-item label="排序码" prop="sortnum">
admin/src/components/business/OperaNoticeWindow.vue
@@ -6,7 +6,7 @@
    @confirm="confirm"
  >
    <el-form :model="form" ref="form" :rules="rules" label-width="100px" label-suffix=":" inline>
      <el-form-item label="标题" prop="title">
        <el-input v-model="form.title" placeholder="请输入标题" v-trim/>
      </el-form-item>
@@ -19,12 +19,12 @@
          v-trim
        />
      </el-form-item>
      <el-form-item label="通知对象" prop="notifyObject">
<!--      <el-form-item label="通知对象" prop="notifyObject">
        <el-radio-group v-model="form.notifyObject">
          <el-radio label="0">用户</el-radio>
          <el-radio label="1">商家</el-radio>
        </el-radio-group>
      </el-form-item>
      </el-form-item>-->
    </el-form>
  </GlobalAlertWindow>
</template>
@@ -38,7 +38,6 @@
  components: { GlobalAlertWindow },
  data () {
    let rule = (rule, value, callBack) => {
      debugger
      console.log(rule, value);
      callBack()
    }
@@ -46,11 +45,10 @@
      // 表单数据
      form: {
        id: null,
        title: '',
        content: '',
        notifyObject: '0',
      },
      // 验证规则
      rules: {
admin/src/views/business/memberCoupon.vue
@@ -14,11 +14,16 @@
            <el-option :key="1" :value="1" label="折扣券"></el-option>
          </el-select>
      </el-form-item>
      <el-form-item label="状态" prop="status">
        <el-select  v-model="searchForm.status"  placeholder="状态"  clearable @change="search" >
      <el-form-item label="状态" prop="status" >
        <el-select  v-model="searchForm.status"  placeholder="状态"  clearable @change="changeStatus" >
          <el-option  :value="0" label="未使用"></el-option>
          <el-option  :value="1" label="已使用"></el-option>
          <el-option  :value="2" label="已过期"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="是否过期" prop="isexpire" v-if="searchForm.status ===0">
        <el-select  v-model="searchForm.isexpire"  placeholder="状态"  clearable @change="search" >
          <el-option  :value="0" label="未过期"></el-option>
          <el-option  :value="1" label="已过期"></el-option>
        </el-select>
      </el-form-item>
      <el-form-item label="发放类型" prop="getMethod">
@@ -74,9 +79,12 @@
        </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>
            <div v-if="row.status ===0" >
              <span class="grey"  v-if="row.isexpire ===1" >已过期</span>
              <span class="green" v-else> 未使用</span>
            </div>
            <span v-else-if="row.status ===1" class="blue"> 已使用</span>
            <span v-else class="grey">已过期</span>
          </template>
        </el-table-column>
        <el-table-column prop="useDate" label="使用时间" min-width="100px"></el-table-column>
@@ -112,10 +120,12 @@
        nikeName: '',
        name: '',
        couponType: '',
        status: '',
        status: null,
        isexpire: '',
        getMethod: '',
        orderCode: ''
      }
      },
      hiddenexpire: false
    }
  },
  created () {
@@ -126,6 +136,12 @@
      'field.main': 'id'
    })
    this.search()
  },
  methods:{
    changeStatus(){
      this.searchForm.isexpire=''
      this.search()
    }
  }
}
</script>
admin/src/views/business/notice.vue
@@ -26,16 +26,16 @@
        <el-table-column type="selection" width="55"></el-table-column>
        <!-- <el-table-column prop="id" label="主键" align="center" min-width="100px"></el-table-column> -->
        <el-table-column prop="title" label="标题" align="center" min-width="120px"></el-table-column>
        <el-table-column prop="content" label="内容" align="center" min-width="180px"></el-table-column>
        <el-table-column prop="content" label="内容" align="center" min-width="380px"></el-table-column>
        <!-- <el-table-column prop="objMemberId" label="关联用户编码(关联member表)" min-width="100px"></el-table-column> -->
        <!-- <el-table-column prop="objMemberImg" label="关联用户头像" min-width="100px"></el-table-column> -->
        <!-- <el-table-column prop="imgurl" label="列表图" min-width="100px"></el-table-column>
        <el-table-column prop="objId" label="对象编码" min-width="100px"></el-table-column> -->
        <el-table-column prop="notifyObject" label="通知对象" align="center" min-width="100px">
<!--        <el-table-column prop="notifyObject" label="通知对象" align="center" min-width="100px">
          <template slot-scope="{row}">
            {{ row.notifyObject==0 ? '用户' : '商家' }}
          </template>
        </el-table-column>
        </el-table-column>-->
        <!-- <el-table-column prop="type" label="消息类型 0订单通知 1系统消息 2互动消息 3优惠券提醒 4官方客服  5活动推荐 6我的关注" min-width="100px"></el-table-column> -->
        <el-table-column prop="createDate" label="创建时间" align="center" min-width="140px"></el-table-column>
        <el-table-column prop="creatorName" label="创建人" align="center" min-width="100px"></el-table-column>
server/dmmall_admin/src/main/java/com/doumee/AdminApplication.java
@@ -5,6 +5,7 @@
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ApplicationContext;
import org.springframework.scheduling.annotation.EnableAsync;
/**
 * 启动类
@@ -13,6 +14,7 @@
 */
@Slf4j
@SpringBootApplication
@EnableAsync
@MapperScan("com.doumee.dao")
public class AdminApplication {
server/dmmall_admin/src/main/resources/application.yml
@@ -4,8 +4,6 @@
  version: 1.0.0
  env: development
#  env: production
spring:
  #  application:
  #    name: doumeemes
server/dmmall_service/src/main/java/com/doumee/dao/business/model/Coupon.java
@@ -1,12 +1,9 @@
package com.doumee.dao.business.model;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.*;
import com.doumee.core.annotation.excel.ExcelColumn;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import lombok.Data;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.util.Date;
@@ -72,16 +69,17 @@
    @ApiModelProperty(value = "开始时间")
    @ExcelColumn(name="开始时间")
    @TableField(fill = FieldFill.UPDATE)
    private Date startDate;
    @ApiModelProperty(value = "结束时间")
    @ExcelColumn(name="结束时间")
    @TableField(fill = FieldFill.UPDATE)
    private Date endDate;
    @ApiModelProperty(value = "领取后有效天数", example = "1")
    @ExcelColumn(name="领取后有效天数")
    @TableField(fill = FieldFill.UPDATE)
    private Integer validDays;
    @ApiModelProperty(value = "领取方式 0领取 1兑换", example = "1")
server/dmmall_service/src/main/java/com/doumee/dao/business/model/MemberCoupon.java
@@ -146,6 +146,10 @@
    @ExcelColumn(name="优惠金额(元)",width = 10,index = 7)
    @TableField(exist = false)
    private BigDecimal   couponPrice     ;
    @ApiModelProperty(value = "是否过期 0未过期 1已过期", example = "1")
    @ExcelColumn(name="是否过期",width = 10,index = 14,valueMapping = "0=未过期;1=已过期;")
    @TableField(exist = false)
    private Integer isexpire;
    public static MemberCoupon couponToBean(Coupon coupon, Member member , Date now, Integer getMethod, LoginUserInfo loginUserInfo){
server/dmmall_service/src/main/java/com/doumee/service/business/impl/CouponServiceImpl.java
@@ -106,6 +106,12 @@
                throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "关联的店铺不存在!");
            }
        }
        if(coupon.getUseType() ==0){
            coupon.setValidDays(null);
        }else{
            coupon.setStartDate(null);
            coupon.setEndDate(null);
        }
        coupon.setApplyIds("");
        if(Constants.equalsInteger(coupon.getApplyType(),Constants.TWO) && coupon.getApplyIdList()!=null){
            coupon.setApplyIds(coupon.getApplyIdList().stream().map(String::valueOf).collect(Collectors.joining(",")));//使用对象编码集合
@@ -148,7 +154,7 @@
        isCreateParamValid(coupon);
        Coupon query= couponMapper.selectById(coupon.getId());
        initCouponStatus(query);
     /*   if(!Constants.equalsInteger(query.getCouponStatus(),Constants.ZERO)){
       /* if(!Constants.equalsInteger(query.getCouponStatus(),Constants.ZERO)){
            throw new BusinessException(ResponseStatus.NOT_ALLOWED.getCode(), "活动已开始/已结束状态,不支持编辑操作");
        }*/
        coupon.setEditor(user.getId());
server/dmmall_service/src/main/java/com/doumee/service/business/impl/MemberCouponServiceImpl.java
@@ -325,16 +325,16 @@
        queryWrapper.leftJoin(Goodsorder.class,Goodsorder::getId,MemberCoupon::getOrderId);
        queryWrapper.leftJoin(SystemUser.class,SystemUser::getId,MemberCoupon::getCreator);
        queryWrapper.eq(MemberCoupon::getIsdeleted, Constants.ZERO);
        if(pageWrap.getModel().getStatus()!=null && pageWrap.getModel().getStatus()!=2){
            queryWrapper.eq(pageWrap.getModel().getStatus()!=null,MemberCoupon::getStatus, pageWrap.getModel().getStatus());
        } else if (pageWrap.getModel().getStatus()!=null && pageWrap.getModel().getStatus()==2) {
            //查询已过期(未使用,切已过了使用期限)
            queryWrapper.eq( MemberCoupon::getStatus, Constants.ZERO);
            queryWrapper.lt( MemberCoupon::getEndDate, new Date());
        if(Constants.equalsInteger(pageWrap.getModel().getStatus(),0)&&pageWrap.getModel().getIsexpire()!=null && pageWrap.getModel().getIsexpire()== 0){
            queryWrapper.gt( MemberCoupon::getEndDate, new Date());
        } else if (Constants.equalsInteger(pageWrap.getModel().getStatus(),0)&&pageWrap.getModel().getIsexpire()!=null && pageWrap.getModel().getIsexpire()== 1) {
            queryWrapper.le( MemberCoupon::getEndDate, new Date());
        }
        queryWrapper.in(pageWrap.getModel().getMethodList()!=null,MemberCoupon::getGetMethod, pageWrap.getModel().getMethodList());
        queryWrapper.eq(pageWrap.getModel().getStatus()!=null,MemberCoupon::getStatus, pageWrap.getModel().getStatus());
        queryWrapper.eq(pageWrap.getModel().getCouponType()!=null,MemberCoupon::getCouponType, pageWrap.getModel().getCouponType());
        queryWrapper.eq(pageWrap.getModel().getCouponId()!=null,MemberCoupon::getCouponId, pageWrap.getModel().getCouponId());
        queryWrapper.like(pageWrap.getModel().getName()!=null,MemberCoupon::getName, pageWrap.getModel().getName());
        queryWrapper.eq(pageWrap.getModel().getOrderCode()!=null,Goodsorder::getCode, pageWrap.getModel().getOrderCode());
        queryWrapper.eq(pageWrap.getModel().getGetMethod()!=null,MemberCoupon::getGetMethod, pageWrap.getModel().getGetMethod());
        queryWrapper.and(StringUtils.isNotBlank(pageWrap.getModel().getNikeName()),ms -> ms.like( Member::getNickname,  pageWrap.getModel().getNikeName()).
@@ -349,7 +349,9 @@
                        && model.getEndDate()!=null
                        && model.getEndDate().before(new Date())){
                    //已过期
                    model.setStatus(Constants.TWO);
                    model.setIsexpire(Constants.ONE);
                }else if(Constants.equalsInteger(model.getStatus(),Constants.ZERO)){
                    model.setIsexpire(Constants.ZERO);
                }
            }
        }
server/dmmall_service/src/main/resources/application-dev.yml
@@ -1,4 +1,3 @@
spring:
  # 数据源配置
  datasource: