licailing 4 vuotta sitten
vanhempi
commit
62e3020956

+ 19 - 0
src/main/java/com/izouma/nineth/dto/CompanyDTO.java

@@ -0,0 +1,19 @@
+package com.izouma.nineth.dto;
+
+import com.izouma.nineth.domain.User;
+import lombok.Data;
+import org.springframework.beans.BeanUtils;
+
+@Data
+public class CompanyDTO {
+    private Long   id;
+    private String username;
+    private String nickname;
+    private String avatar;
+    private int    showroomNum;
+    private int    boxShowroomNum;
+
+    public CompanyDTO(User user) {
+        BeanUtils.copyProperties(user, this);
+    }
+}

+ 5 - 0
src/main/java/com/izouma/nineth/repo/ShowroomRepo.java

@@ -10,6 +10,8 @@ import org.springframework.data.jpa.repository.Query;
 
 import javax.annotation.Nonnull;
 import javax.transaction.Transactional;
+import java.util.List;
+import java.util.Map;
 import java.util.Optional;
 
 public interface ShowroomRepo extends JpaRepository<Showroom, Long>, JpaSpecificationExecutor<Showroom> {
@@ -55,4 +57,7 @@ public interface ShowroomRepo extends JpaRepository<Showroom, Long>, JpaSpecific
     @Modifying
     @Transactional
     void addHeatAndRegister(Long id, int heatNum, int registerNum);
+
+    @Query(nativeQuery = true, value = "select user_id, count(id) num from showroom where type = ?1 group by user_id")
+    List<Map<String, Object>> countNum(String type);
 }

+ 2 - 2
src/main/java/com/izouma/nineth/service/CacheService.java

@@ -87,8 +87,8 @@ public class CacheService {
     public void clearSettingList(int flag) {
     }
 
-    @CacheEvict(value = {"showroom"}, allEntries = true)
-    public void clearShowroom() {
+    @CacheEvict(value = {"showroom"}, key = "#id")
+    public void clearShowroom(Long id) {
     }
 
     @CacheEvict(value = "fmaa", allEntries = true)

+ 3 - 6
src/main/java/com/izouma/nineth/service/ShowroomService.java

@@ -1,8 +1,8 @@
 package com.izouma.nineth.service;
 
 import cn.hutool.core.collection.CollUtil;
-import com.izouma.nineth.domain.*;
 import com.izouma.nineth.domain.Collection;
+import com.izouma.nineth.domain.*;
 import com.izouma.nineth.dto.PageQuery;
 import com.izouma.nineth.enums.AssetStatus;
 import com.izouma.nineth.enums.AuthStatus;
@@ -104,7 +104,6 @@ public class ShowroomService {
             }
         });
 
-        cacheService.clearShowroom();
         return show;
     }
 
@@ -133,7 +132,6 @@ public class ShowroomService {
                 .build();
         showroom = showroomRepo.save(showroom);
 
-        cacheService.clearShowroom();
         return showroom;
     }
 
@@ -160,7 +158,6 @@ public class ShowroomService {
                 .build();
         showroom = showroomRepo.save(showroom);
 
-        cacheService.clearShowroom();
         return showroom;
     }
 
@@ -246,7 +243,7 @@ public class ShowroomService {
         recordRoom.setPublish(true);
 
         showroom = showroomRepo.save(recordRoom);
-        cacheService.clearShowroom();
+        cacheService.clearShowroom(showroom.getId());
         return showroom;
     }
 
@@ -261,7 +258,7 @@ public class ShowroomService {
         showroom.setStatus(status);
         showroom.setReason(reason);
         showroomRepo.save(showroom);
-        cacheService.clearShowroom();
+        cacheService.clearShowroom(id);
     }
 
     public String getStatus(Collection collection) {

+ 20 - 4
src/main/java/com/izouma/nineth/service/UserService.java

@@ -3,8 +3,8 @@ package com.izouma.nineth.service;
 import cn.binarywang.wx.miniapp.api.WxMaService;
 import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
 import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
+import cn.hutool.core.convert.Convert;
 import com.alibaba.fastjson.JSONObject;
-import com.fasterxml.jackson.core.sym.NameN;
 import com.huifu.adapay.core.exception.BaseAdaPayException;
 import com.izouma.nineth.TokenHistory;
 import com.izouma.nineth.config.Constants;
@@ -16,7 +16,6 @@ import com.izouma.nineth.dto.*;
 import com.izouma.nineth.enums.AuthStatus;
 import com.izouma.nineth.enums.AuthorityName;
 import com.izouma.nineth.enums.HeatType;
-import com.izouma.nineth.event.AccountCreatedEvent;
 import com.izouma.nineth.event.RegisterEvent;
 import com.izouma.nineth.exception.BusinessException;
 import com.izouma.nineth.repo.*;
@@ -42,8 +41,6 @@ import org.apache.rocketmq.spring.core.RocketMQTemplate;
 import org.springframework.beans.BeanUtils;
 import org.springframework.cache.annotation.CacheEvict;
 import org.springframework.cache.annotation.Cacheable;
-import org.springframework.context.event.EventListener;
-import org.springframework.core.env.Environment;
 import org.springframework.data.domain.Page;
 import org.springframework.data.domain.PageImpl;
 import org.springframework.data.domain.PageRequest;
@@ -911,4 +908,23 @@ public class UserService {
         user.setWalletEnabled(true);
         save(user);
     }
+
+    public Page<CompanyDTO> companyList(PageQuery pageQuery) {
+        Page<User> users = this.all(pageQuery).toPage();
+        List<Map<String, Object>> companyNums = showroomRepo.countNum("COMPANY");
+        Map<Long, Integer> showroomNum = new HashMap<>();
+        companyNums.forEach(value -> showroomNum.put(Convert.convert(Long.class, value.get("user_id")),
+                Convert.convert(Integer.class, value.get("num"))));
+
+        List<Map<String, Object>> companyBoxNums = showroomRepo.countNum("COMPANY_BOX");
+        Map<Long, Integer> boxNum = new HashMap<>();
+        companyBoxNums.forEach(value -> boxNum.put((Long) value.get("user_id"), (Integer) value.get("num")));
+        return users.map(user -> {
+            CompanyDTO dto = new CompanyDTO(user);
+            dto.setShowroomNum(showroomNum.get(user.getId()) == null ? 0 : showroomNum.get(user.getId()));
+            dto.setBoxShowroomNum(boxNum.get(user.getId()) == null ? 0 : boxNum.get(user.getId()));
+            return dto;
+        });
+    }
+
 }

+ 7 - 0
src/main/java/com/izouma/nineth/web/UserController.java

@@ -320,6 +320,13 @@ public class UserController extends BaseController {
     public void enableWallet() {
         userService.enableWallet(SecurityUtils.getAuthenticatedUser().getId());
     }
+
+    @PreAuthorize("hasAnyRole('ADMIN', 'SHOWROOM')")
+    @PostMapping("/companyAll")
+    public Page<CompanyDTO> companyAll(@RequestBody PageQuery pageQuery) {
+        return userService.companyList(pageQuery);
+    }
+
 }
 
 

+ 31 - 6
src/main/vue/src/views/CompanyList.vue

@@ -37,9 +37,11 @@
                     ></el-image>
                 </template>
             </el-table-column>
+            <el-table-column prop="showroomNum" label="展厅数量"> </el-table-column>
+            <el-table-column prop="boxShowroomNum" label="盲盒展厅数量"> </el-table-column>
             <el-table-column label="操作" align="center" fixed="right" width="180">
                 <template slot-scope="{ row }">
-                    <el-button @click="createShowroom(row)" type="success" size="mini" plain>发放展厅</el-button>
+                    <el-button @click="chooseShowroomType" type="success" size="mini" plain>发放展厅</el-button>
                     <el-button @click="editRow(row)" type="primary" size="mini" plain>编辑</el-button>
                 </template>
             </el-table-column>
@@ -57,6 +59,20 @@
             >
             </el-pagination>
         </div>
+        <el-dialog :visible.sync="showDialog" title="选择类型" width="500px" center>
+            <el-form :model="addShowroom" label-width="100px" size="mini">
+                <el-form-item label="发放类型" prop="type">
+                    <el-radio-group v-model="addShowroom.type">
+                        <el-radio label="COMPANY">普通展厅</el-radio>
+                        <el-radio label="COMPANY_BOX">盲盒展厅</el-radio>
+                    </el-radio-group>
+                </el-form-item>
+                <el-form-item>
+                    <el-button type="primary" size="mini" @click="createShowroom">确定</el-button>
+                    <el-button @click="showDialog = false">取消</el-button>
+                </el-form-item>
+            </el-form>
+        </el-dialog>
     </div>
 </template>
 <script>
@@ -70,8 +86,10 @@ export default {
         return {
             multipleMode: false,
             search: '',
-            url: '/user/adminAll',
-            downloading: false
+            url: '/user/companyAll',
+            downloading: false,
+            showDialog: false,
+            addShowroom: {}
         };
     },
     computed: {
@@ -154,7 +172,7 @@ export default {
                     .then(res => {
                         let el = document.createElement('div');
                         new ClipboardJS(el, {
-                            text: function (trigger) {
+                            text: function(trigger) {
                                 return res;
                             }
                         });
@@ -167,14 +185,21 @@ export default {
                     });
             }
         },
-        createShowroom(row) {
+        chooseShowroomType(row) {
+            this.showDialog = true;
+            this.addShowroom.id = row.id;
+        },
+        createShowroom() {
             this.$confirm('确认发布展厅吗?', '提示', {
                 confirmButtonText: '确定',
                 cancelButtonText: '取消',
                 type: 'warning'
             })
                 .then(() => {
-                    return this.$http.post('/showroom/create', { userId: row.id });
+                    return this.$http.post('/showroom/create', {
+                        userId: this.addShowroom.id,
+                        type: this.addShowroom.type
+                    });
                 })
                 .then(() => {
                     this.saving = false;