Explorar o código

商户 商品的显示

licailing %!s(int64=5) %!d(string=hai) anos
pai
achega
652190a584

+ 43 - 0
src/main/java/com/izouma/dingdong/domain/backstage/Priority.java

@@ -0,0 +1,43 @@
+package com.izouma.dingdong.domain.backstage;
+
+
+import com.izouma.dingdong.domain.BaseEntity;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.AllArgsConstructor;
+import lombok.Builder;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import javax.persistence.Column;
+import javax.persistence.Entity;
+
+@Entity
+@Data
+@AllArgsConstructor
+@NoArgsConstructor
+@Builder
+public class Priority extends BaseEntity {
+
+    //0-商户 1-商品
+    @ApiModelProperty(value = "类型", name = "type")
+    private Integer type;
+
+    @ApiModelProperty(value = "级别", name = "level")
+    private Integer level;
+
+    @ApiModelProperty(value = "所需点赞", name = "likes")
+    private Integer likes;
+
+    @ApiModelProperty(value = "所需月销", name = "monthSales")
+    private Integer monthSales;
+
+    @ApiModelProperty(value = "一个月销量可为0的天数", name = "zeroSalesDay")
+    private Integer zeroSalesDay;
+
+    @ApiModelProperty(value = "月最低销量", name = "lessMonthSales")
+    private Integer lessMonthSales;
+
+    @Builder.Default
+    @Column(nullable = false)
+    private Boolean enabled = true;
+}

+ 9 - 0
src/main/java/com/izouma/dingdong/domain/merchant/Goods.java

@@ -108,4 +108,13 @@ public class Goods extends BaseEntity implements Serializable {
     @OneToMany(fetch = FetchType.LAZY, cascade = CascadeType.ALL)
     @JoinColumn(name = "goodsId")
     private List<GoodsSpecification> specifications;
+
+    @ApiModelProperty(value = "优先级", name = "priority")
+    private Integer priority;
+
+    @ApiModelProperty(value = "好评")
+    private Boolean praise;
+
+    @ApiModelProperty(value = "人气")
+    private Boolean popularity;
 }

+ 2 - 0
src/main/java/com/izouma/dingdong/domain/merchant/Merchant.java

@@ -111,4 +111,6 @@ public class Merchant extends BaseEntity implements Serializable {
     @ManyToOne(fetch = FetchType.LAZY,cascade = CascadeType.DETACH)
     @JoinColumn(name = "verifiedId", insertable = false, updatable = false, foreignKey = @ForeignKey(ConstraintMode.NO_CONSTRAINT))
     private Verified verified;*/
+
+
 }

+ 3 - 0
src/main/java/com/izouma/dingdong/domain/merchant/MerchantSettings.java

@@ -118,4 +118,7 @@ public class MerchantSettings extends BaseEntity implements Serializable {
 
     @ApiModelProperty(value = "购买口碑联盟", name = "buyAlliance")
     private Boolean buyAlliance = false;
+
+    @ApiModelProperty(value = "优先级", name = "priority")
+    private Integer priority;
 }

+ 12 - 0
src/main/java/com/izouma/dingdong/enums/GoodType.java

@@ -0,0 +1,12 @@
+package com.izouma.dingdong.enums;
+
+public enum GoodType {
+    //发现美食下
+
+    //招牌美食
+    SIGNBOARD_FOOD,
+    //人气美食
+    POPULAR_FOOD,
+    //好评美食
+    PRAISE_FOOD
+}

+ 15 - 0
src/main/java/com/izouma/dingdong/enums/PopularTag.java

@@ -0,0 +1,15 @@
+package com.izouma.dingdong.enums;
+
+public enum PopularTag {
+
+    //首单立减
+
+    //满减优惠
+
+    // 折扣商家
+
+    // 下单返红包
+
+    // 可用红包
+
+}

+ 1 - 0
src/main/java/com/izouma/dingdong/repo/backstage/TimeTagRepo.java

@@ -5,4 +5,5 @@ import org.springframework.data.jpa.repository.JpaRepository;
 import org.springframework.data.jpa.repository.JpaSpecificationExecutor;
 
 public interface TimeTagRepo extends JpaRepository<TimeTag, Long>, JpaSpecificationExecutor<TimeTag> {
+
 }

+ 3 - 0
src/main/java/com/izouma/dingdong/repo/merchant/SalesRepo.java

@@ -15,6 +15,9 @@ public interface SalesRepo extends JpaRepository<Sales, Long>, JpaSpecificationE
     //查找商品今天的销量
     Sales findByGoodsIdAndDay(Long goodsId, LocalDate day);
 
+    //找出时间段内销量
+    List<Sales> findAllByGoodsIdAndDayBetween(Long goodsId, LocalDate start, LocalDate end);
+
     List<Sales> findAllByDay(LocalDate day);
 
     //好评商品

+ 60 - 4
src/main/java/com/izouma/dingdong/service/merchant/GoodsService.java

@@ -8,6 +8,7 @@ import com.izouma.dingdong.domain.backstage.Email;
 import com.izouma.dingdong.domain.merchant.*;
 import com.izouma.dingdong.dto.AppraisalMerDTO;
 import com.izouma.dingdong.enums.ApplyStatus;
+import com.izouma.dingdong.enums.GoodType;
 import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.backstage.EmailRepo;
 import com.izouma.dingdong.repo.merchant.*;
@@ -17,9 +18,11 @@ import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
+import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 
 @Service
@@ -34,6 +37,7 @@ public class GoodsService {
     private MerchantRepo merchantRepo;
     private AppraisalService appraisalService;
     private GoodsSpecificationRepo goodsSpecificationRepo;
+    private SalesRepo salesRepo;
 
     /**
      * 添加修改商品
@@ -83,6 +87,12 @@ public class GoodsService {
             goods.setEnabled(true);
             //审核
             goods.setIsPass(false);
+            //优先级
+            goods.setPriority(1);
+            //好评
+            goods.setPopularity(false);
+            //人气
+            goods.setPraise(false);
             goods.setStatus(ApplyStatus.PENDING);
         }
 
@@ -224,17 +234,63 @@ public class GoodsService {
     /*
     显示商品所有信息
      */
-    public Map<String,Object> goodsAllInfo(Long goodsId){
+    public Map<String, Object> goodsAllInfo(Long goodsId) {
         HashMap<String, Object> map = new HashMap<>();
         Goods goods = goodsRepo.findById(goodsId).orElseThrow(new BusinessException("无记录"));
-        map.put("goods",goods);
+        map.put("goods", goods);
 
         List<AppraisalMerDTO> appraisals = appraisalService.goodsAppraisals(goodsId);
-        map.put("appraisal",appraisals);
+        map.put("appraisal", appraisals);
 
         List<GoodsSpecification> specifications = goodsSpecificationRepo.findAllByGoodsId(goodsId);
-        map.put("specification",specifications);
+        map.put("specification", specifications);
 
         return map;
     }
+
+    /*
+    商品列表
+     */
+    public List<Goods> showAll(GoodType type) {
+
+        //用户3km以内的商品 3km以内的商户
+
+        List<Goods> goodsList = goodsRepo.findAll();
+
+        List<Goods> all = new ArrayList<>();
+
+        //(1000-距离)/1000*0.5 + 月销/10000*0.5 (月销大于10000按照10000计算)
+        switch (type) {
+            case PRAISE_FOOD:
+                all.addAll(goodsList.stream().filter(Goods::getSignboard)
+                        .sorted((a, b) -> b.getPriority().compareTo(a.getPriority())).collect(Collectors.toList()));
+            case POPULAR_FOOD:
+                all.addAll(goodsList.stream().filter(Goods::getPopularity).collect(Collectors.toList()));
+            case SIGNBOARD_FOOD:
+                all.addAll(goodsList.stream().filter(Goods::getPraise).collect(Collectors.toList()));
+        }
+        for (Goods a : all) {
+
+        }
+        return all;
+    }
+
+    //更新商品优先级,每月1日更新
+    public void priority(Long goodsId) {
+        Goods goods = goodsRepo.findById(goodsId).orElseThrow(new BusinessException("无商品"));
+
+        LocalDate now = LocalDate.now();
+        //上个月日期
+        LocalDate lastMonth = now.minusMonths(1);
+        List<Sales> sales = salesRepo.findAllByGoodsIdAndDayBetween(goodsId, lastMonth, now);
+
+        //点赞数
+        Integer likes = 0;
+        //差评数
+        Integer badReview = 0;
+        for (Sales s : sales) {
+            likes += s.getDayLikes();
+            badReview += s.getDayBad();
+        }
+    }
 }

+ 14 - 6
src/main/java/com/izouma/dingdong/service/merchant/MerchantService.java

@@ -266,7 +266,9 @@ public class MerchantService {
 
 //        Specification<Merchant> specification = toSpecification(pageQuery, Merchant.class);
 
-        List<Merchant> merchantList = merchantRepo.findAll(toSpecification(pageQuery, Merchant.class));
+        List<Merchant> merchantList = merchantRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> criteriaQuery.where(
+                criteriaBuilder.like(root.get("name"), "%" + pageQuery.getSearch() + "%")).getRestriction()
+        ));
 
         List<Goods> goods = goodsRepo.findAll(((root, criteriaQuery, criteriaBuilder) -> criteriaQuery.where(
                 criteriaBuilder.like(root.get("name"), "%" + pageQuery.getSearch() + "%")).getRestriction()
@@ -294,8 +296,8 @@ public class MerchantService {
             mers.add(m.getKey());
         }*/
 
-        //排序
-        List<Merchant> mers = this.distanceSorting(merchants, longitude, latitude);
+        //距离排序
+        List<Merchant> mers = this.distanceSorting(merchants, longitude, latitude, null);
 
         if (popularTag == null) {
             popularTag = pageQuery.getSearch();
@@ -385,9 +387,9 @@ public class MerchantService {
     }
 
     /*
-    距离排序
+    距离排序,如果有范围,范围内进行排序
      */
-    public List<Merchant> distanceSorting(Set<Merchant> merchants, Double longitude, Double latitude) {
+    public List<Merchant> distanceSorting(Set<Merchant> merchants, Double longitude, Double latitude, Double range) {
         //List<Merchant> merchants = merchantRepo.findAll();
 
         //所有商家要按距离排序规则
@@ -396,7 +398,13 @@ public class MerchantService {
         for (Merchant m : merchants) {
             if (m.getLatitude() != null && m.getLongitude() != null) {
                 Double distance = MapUtils.distance(m.getLongitude(), m.getLatitude(), longitude, latitude);
-                map.put(m, distance);
+                if (range != null) {
+                    if (distance < range) {
+                        map.put(m, distance);
+                    }
+                } else {
+                    map.put(m, distance);
+                }
             }
         }
 

+ 6 - 3
src/main/java/com/izouma/dingdong/service/merchant/MerchantSettingsService.java

@@ -24,15 +24,14 @@ import com.izouma.dingdong.repo.backstage.PromoteRepo;
 import com.izouma.dingdong.repo.backstage.TimeTagRepo;
 import com.izouma.dingdong.repo.merchant.*;
 import lombok.AllArgsConstructor;
+import org.springframework.data.domain.Sort;
 import org.springframework.stereotype.Service;
 
 import java.math.BigDecimal;
 import java.time.LocalDate;
 import java.time.LocalDateTime;
 import java.time.LocalTime;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.util.*;
 import java.util.stream.Collectors;
 
 @Service
@@ -129,6 +128,9 @@ public class MerchantSettingsService {
         List<Category> categories = categoryRepo.findAllByParent((long) 1);
 
         //时间标签
+        List<TimeTag> timeTags = timeTagRepo.findAll();
+        LocalTime now = LocalTime.now();
+        List<TimeTag> timeTag = timeTags.stream().filter(t -> now.isAfter(t.getStartTime()) && now.isBefore(t.getEndTime())).collect(Collectors.toList());
 
         //优惠专区
         //主推荐位 2个
@@ -149,6 +151,7 @@ public class MerchantSettingsService {
         Map<String, Object> map = new HashMap<>();
         map.put("banner", banners);
         map.put("categories", categories);
+        map.put("timeTag", timeTag.get(0));
         map.put("promote1", promote1);
         map.put("promote2", promote2);
         map.put("newMerchants", newMerchants);

+ 17 - 2
src/main/java/com/izouma/dingdong/service/merchant/SalesService.java

@@ -3,8 +3,10 @@ package com.izouma.dingdong.service.merchant;
 import com.izouma.dingdong.domain.Appraisal;
 import com.izouma.dingdong.domain.OrderGoodsSpec;
 import com.izouma.dingdong.domain.OrderInfo;
+import com.izouma.dingdong.domain.merchant.Goods;
 import com.izouma.dingdong.domain.merchant.MerchantClassification;
 import com.izouma.dingdong.domain.merchant.Sales;
+import com.izouma.dingdong.exception.BusinessException;
 import com.izouma.dingdong.repo.AppraisalRepo;
 import com.izouma.dingdong.repo.OrderGoodsSpecRepo;
 import com.izouma.dingdong.repo.merchant.GoodsRepo;
@@ -164,8 +166,21 @@ public class SalesService {
         List<Sales> praises = salesRepo.findAllByDayAndPraiseGreaterThanEqual(LocalDate.now(), 5);
 
         //插入
-        popularities.forEach(this::into);
-        praises.forEach(this::into);
+       // popularities.forEach(this::into);
+        popularities.forEach(p->{
+            this.into(p);
+            Goods goods = goodsRepo.findById(p.getGoodsId()).orElseThrow(new BusinessException("无商品"));
+            goods.setPopularity(true);
+            goodsRepo.save(goods);
+        });
+
+       // praises.forEach(this::into);
+        praises.forEach(p->{
+            this.into(p);
+            Goods goods = goodsRepo.findById(p.getGoodsId()).orElseThrow(new BusinessException("无商品"));
+            goods.setPraise(true);
+            goodsRepo.save(goods);
+        });
     }
 
 

+ 2 - 2
src/main/vue/src/router.js

@@ -386,7 +386,7 @@ const router = new Router({
                 {
                     path: '/promoteEdit',
                     name: 'PromoteEdit',
-                    component: () => import(/* webpackChunkName: "promoteEdit" */ '@/views/PromoteEdit.vue'),
+                    component: () => import(/* webpackChunkName: "promoteEdit" */ '@/views/backstage/PromoteEdit.vue'),
                     meta: {
                        title: '首页推荐位编辑',
                     },
@@ -394,7 +394,7 @@ const router = new Router({
                 {
                     path: '/promoteList',
                     name: 'PromoteList',
-                    component: () => import(/* webpackChunkName: "promoteList" */ '@/views/PromoteList.vue'),
+                    component: () => import(/* webpackChunkName: "promoteList" */ '@/views/backstage/PromoteList.vue'),
                     meta: {
                        title: '首页推荐位',
                     },

+ 22 - 18
src/main/vue/src/views/Categories.vue

@@ -15,21 +15,24 @@
 <!--                <el-form-item label="菜单地址" prop="path">-->
 <!--                    <el-input v-model="menu.path"></el-input>-->
 <!--                </el-form-item>-->
-                <el-form-item prop="icon" label="图片">
+
+                <el-form-item prop="icon" label="图标">
 <!--                    <template slot="label">图片
                         <a href="https://fontawesome.com/icons?d=gallery&s=brands,solid&m=free"
                            target="_blank"
                            class="available-icons">查看所有可用图标</a></template>-->
-                    <el-input v-model="icon">
-                        <template slot="append">
-                            <span ref="iconContainer" style="font-size: 10px">
-                                <el-button @click="">上传</el-button>
+<!--                    <el-input v-model="icon">-->
+<!--                        <template slot="append">-->
+<!--                            <span ref="iconContainer" style="font-size: 10px">-->
+<!--                                <el-button @click="">上传</el-button>-->
                                 <!--<i
                                 class="fas fa-"></i>-->
-                            </span>
-                        </template>
-                    </el-input>
+<!--                            </span>-->
+<!--                        </template>-->
+                        <crop-upload v-model="menu.icon"></crop-upload>
+<!--                    </el-input>-->
                 </el-form-item>
+
             </el-form>
             <div slot="footer">
                 <el-button @click="dialogVisible = false">取消
@@ -54,14 +57,14 @@
                 menu: {
                     name: "",
                     // path: "",
-                    // icon: "",
+                    icon: "",
                     // root: false,
-                    // active: true
+                    active: true
                 },
                 parent: null,
                 currentRef: null,
                 edit: false,
-                // icon: ""
+                icon: ""
             };
         },
         methods: {
@@ -69,12 +72,12 @@
                 this.menu = {
                     name: "",
                     // path: "",
-                    // active: true,
+                    active: true,
                     // root: true,
-                    // icon: "bars"
+                    icon: ""
                 };
                 this.parent = 1;
-                // this.icon = "bars";
+                this.icon = "";
                 this.dialogVisible = true;
                 // setTimeout(() => {
                 //     this.showIcon("bars");
@@ -87,11 +90,11 @@
                     parent: node.data.id,
                     name: "",
                     // path: "",
-                    // active: true,
+                    active: true,
                     // root: false,
-                    // icon: null
+                    icon: ""
                 };
-                // this.icon = "";
+                this.icon = "";
                 this.dialogVisible = true;
                 // setTimeout(() => {
                 //     this.showIcon("");
@@ -100,6 +103,7 @@
             showEditDialog(node, data) {
                 this.edit = true;
                 this.currentRef = node.data;
+                this.icon = data.icon
                 // const getIconName = icon => {
                 //     let iconName = "";
                 //     if (icon) {
@@ -373,7 +377,7 @@
         border-top: 1px solid #f2f4f5;
         .el-tree-node__content {
             height: 42px;
-            border: 1px solid #f2f4f5;
+            //border: 1px solid #f2f4f5;
             border-top: none;
         }
     }

+ 34 - 31
src/main/vue/src/views/PromoteEdit.vue → src/main/vue/src/views/backstage/PromoteEdit.vue

@@ -2,34 +2,36 @@
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="108px" label-position="right" size="small"
                  style="max-width: 500px;">
-                <el-form-item prop="merchantId" label="商家ID">
-                            <el-input-number type="number" v-model="formData.merchantId"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="action" label="位置">
-                            <el-input-number type="number" v-model="formData.action"></el-input-number>
-                </el-form-item>
-                <el-form-item prop="startDateTime" label="推广开始时间">
-                            <el-date-picker
-                                    v-model="formData.startDateTime"
-                                    type="datetime"
-                                    value-format="yyyy-MM-dd HH:mm:ss"
-                                    placeholder="选择日期时间">
-                            </el-date-picker>
-                </el-form-item>
-                <el-form-item prop="endDateTime" label="推广结束时间">
-                            <el-date-picker
-                                    v-model="formData.endDateTime"
-                                    type="datetime"
-                                    value-format="yyyy-MM-dd HH:mm:ss"
-                                    placeholder="选择日期时间">
-                            </el-date-picker>
-                </el-form-item>
-                <el-form-item prop="merchant" label="merchant">
-                            <el-input v-model="formData.merchant"></el-input>
-                </el-form-item>
+            <el-form-item prop="merchantId" label="商家ID">
+                <el-input v-model="formData.merchantId"></el-input>
+            </el-form-item>
+            <el-form-item prop="action" label="位置">
+                <el-select v-model="formData.action">
+                    <el-option v-for="item in actionOption" :label="item.label"
+                    :value="item.value" :key="item.value">
+                    </el-option>
+                </el-select>
+            </el-form-item>
+            <el-form-item prop="startDateTime" label="推广开始时间">
+                <el-date-picker
+                        v-model="formData.startDateTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        placeholder="选择日期时间">
+                </el-date-picker>
+            </el-form-item>
+            <el-form-item prop="endDateTime" label="推广结束时间">
+                <el-date-picker
+                        v-model="formData.endDateTime"
+                        type="datetime"
+                        value-format="yyyy-MM-dd HH:mm:ss"
+                        placeholder="选择日期时间">
+                </el-date-picker>
+            </el-form-item>
             <el-form-item>
                 <el-button @click="onSave" :loading="saving"
-                           type="primary">保存</el-button>
+                           type="primary">保存
+                </el-button>
                 <el-button @click="onDelete" :loading="saving"
                            type="danger" v-if="formData.id">删除
                 </el-button>
@@ -44,7 +46,7 @@
         created() {
             if (this.$route.query.id) {
                 this.$http
-                    .get('promote/get/'+this.$route.query.id)
+                    .get('promote/get/' + this.$route.query.id)
                     .then(res => {
                         this.formData = res;
                     })
@@ -57,10 +59,11 @@
         data() {
             return {
                 saving: false,
-                formData: {
-                },
-                rules: {
-                },
+                formData: {},
+                rules: {},
+                actionOption: [
+                    {"label": "主推广位", "value": 1},
+                    {"label": "副推广位", "value": 2}]
             }
         },
         methods: {

+ 36 - 25
src/main/vue/src/views/PromoteList.vue → src/main/vue/src/views/backstage/PromoteList.vue

@@ -1,5 +1,5 @@
 <template>
-    <div  class="list-view">
+    <div class="list-view">
         <div class="filters-container">
             <el-input placeholder="输入关键字" v-model="search" clearable
                       class="filter-item"></el-input>
@@ -9,7 +9,7 @@
             <el-button @click="addRow" type="primary" icon="el-icon-plus"
                        class="filter-item">添加
             </el-button>
-                    </div>
+        </div>
         <el-table :data="tableData" row-key="id" ref="table"
                   header-row-class-name="table-header-row"
                   header-cell-class-name="table-header-cell"
@@ -20,23 +20,24 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                    <el-table-column prop="merchantId" label="商家ID"
->
-                    </el-table-column>
-                    <el-table-column prop="action" label="位置"
->
-                    </el-table-column>
-                    <el-table-column prop="startDateTime" label="推广开始时间"
-                            :formatter="datetimeFormatter"
->
-                    </el-table-column>
-                    <el-table-column prop="endDateTime" label="推广结束时间"
-                            :formatter="datetimeFormatter"
->
-                    </el-table-column>
-                    <el-table-column prop="merchant" label="merchant"
->
-                    </el-table-column>
+            <!--            <el-table-column prop="merchantId" label="商家ID"
+                        >
+                        </el-table-column>-->
+            <el-table-column prop="action" label="位置"
+                             :formatter="actionFormatter"
+            >
+            </el-table-column>
+            <el-table-column prop="startDateTime" label="推广开始时间"
+                             :formatter="datetimeFormatter"
+            >
+            </el-table-column>
+            <el-table-column prop="endDateTime" label="推广结束时间"
+                             :formatter="datetimeFormatter"
+            >
+            </el-table-column>
+            <el-table-column prop="merchant.name" label="商户名称"
+            >
+            </el-table-column>
             <el-table-column
                     label="操作"
                     align="center"
@@ -68,7 +69,7 @@
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
 
     export default {
@@ -83,6 +84,9 @@
                 search: "",
                 url: "/promote/all",
                 downloading: false,
+                actionOption: [
+                    {"label": "主推广位", "value": 1},
+                    {"label": "副推广位", "value": 2}]
             }
         },
         computed: {
@@ -91,9 +95,16 @@
             }
         },
         methods: {
+            actionFormatter(row, column, cellValue, index) {
+                let selectedOption = this.actionOption.find(i => i.value === cellValue);
+                if (selectedOption) {
+                    return selectedOption.label;
+                }
+                return '';
+            },
             beforeGetData() {
                 if (this.search) {
-                    return { search: this.search };
+                    return {search: this.search};
                 }
             },
             toggleMultipleMode(multipleMode) {
@@ -106,7 +117,7 @@
                 this.$router.push({
                     path: "/promoteEdit",
                     query: {
-                    ...this.$route.query
+                        ...this.$route.query
                     }
                 });
             },
@@ -114,16 +125,16 @@
                 this.$router.push({
                     path: "/promoteEdit",
                     query: {
-                    id: row.id
+                        id: row.id
                     }
                 });
             },
             download() {
                 this.downloading = true;
                 this.$axios
-                    .get("/promote/excel", { 
+                    .get("/promote/excel", {
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     .then(res => {
                         console.log(res);

+ 7 - 1
src/main/vue/src/views/backstage/TimeTagEdit.vue

@@ -2,6 +2,9 @@
     <div class="edit-view">
         <el-form :model="formData" :rules="rules" ref="form" label-width="80px" label-position="right" size="small"
                  style="max-width: 500px;">
+            <el-form-item prop="icon" label="图标">
+                <crop-upload v-model="formData.icon"></crop-upload>
+            </el-form-item>
             <el-form-item prop="name" label="名称" >
                 <el-input v-model="formData.name"></el-input>
             </el-form-item>
@@ -56,7 +59,10 @@
         data() {
             return {
                 saving: false,
-                formData: {},
+                formData: {
+                    icon:
+                        'https://idingdong.oss-cn-hangzhou.aliyuncs.com/image/2020-06-12-15-42-37zDfSXPvT.jpg',
+                },
                 rules: {},
                 startTime: '',
                 endTime: ''

+ 23 - 16
src/main/vue/src/views/backstage/TimeTagList.vue

@@ -1,5 +1,5 @@
 <template>
-    <div  class="list-view">
+    <div class="list-view">
         <div class="filters-container">
             <el-input placeholder="输入关键字" v-model="search" clearable
                       class="filter-item"></el-input>
@@ -23,16 +23,23 @@
             </el-table-column>
             <el-table-column prop="id" label="ID" width="100">
             </el-table-column>
-                                <el-table-column prop="name" label="名称"
->
-                    </el-table-column>
-                    <el-table-column prop="startTime" label="开始时间"
->
+            <el-table-column prop="name" label="名称"
+            >
+            </el-table-column>
+            <el-table-column prop="startTime" label="开始时间"
+            >
 
-                    </el-table-column>
-                    <el-table-column prop="endTime" label="结束时间"
->
-                    </el-table-column>
+            </el-table-column>
+            <el-table-column prop="endTime" label="结束时间"
+            >
+            </el-table-column>
+            <el-table-column label="图标" min-width="100">
+                <template slot-scope="{row}">
+                    <el-image style="width: 30px; height: 30px"
+                              :src="row.icon" fit="cover"
+                              :preview-src-list="[row.icon]"></el-image>
+                </template>
+            </el-table-column>
             <el-table-column
                     label="操作"
                     align="center"
@@ -64,7 +71,7 @@
     </div>
 </template>
 <script>
-    import { mapState } from "vuex";
+    import {mapState} from "vuex";
     import pageableTable from "@/mixins/pageableTable";
 
     export default {
@@ -89,7 +96,7 @@
         methods: {
             beforeGetData() {
                 if (this.search) {
-                    return { search: this.search };
+                    return {search: this.search};
                 }
             },
             toggleMultipleMode(multipleMode) {
@@ -102,7 +109,7 @@
                 this.$router.push({
                     path: "/timeTagEdit",
                     query: {
-                    ...this.$route.query
+                        ...this.$route.query
                     }
                 });
             },
@@ -110,16 +117,16 @@
                 this.$router.push({
                     path: "/timeTagEdit",
                     query: {
-                    id: row.id
+                        id: row.id
                     }
                 });
             },
             download() {
                 this.downloading = true;
                 this.$axios
-                    .get("/timeTag/excel", { 
+                    .get("/timeTag/excel", {
                         responseType: "blob",
-                        params: { size: 10000 }
+                        params: {size: 10000}
                     })
                     .then(res => {
                         console.log(res);

+ 2 - 0
src/test/java/com/izouma/dingdong/TimeTest.java

@@ -1,6 +1,7 @@
 package com.izouma.dingdong;
 
 
+import org.junit.Test;
 
 public class TimeTest {
 
@@ -26,4 +27,5 @@ public class TimeTest {
 
 
     }*/
+
 }

+ 8 - 0
src/test/java/com/izouma/dingdong/repo/SalesRepoTest.java

@@ -23,4 +23,12 @@ public class SalesRepoTest {
 //        System.out.println(salesRepo.findByGoodsIdAndDayAndPopularityGreaterThanEqual(57l, LocalDate.now().plusDays(-1), 5));
 
     }
+
+    @Test
+    public void test() {
+        LocalDate of = LocalDate.of(2020, 7, 1);
+        //System.out.println(of);
+        //System.out.println(of.minusMonths(1));
+        System.out.println(salesRepo.findAllByGoodsIdAndDayBetween(607L, of.minusMonths(1), of).size());
+    }
 }