finikes пре 2 година
родитељ
комит
b33ce6e323

+ 57 - 0
src/main/java/com/finikes/oc/vote/controller/VoteStatisticsController.java

@@ -1,11 +1,16 @@
 package com.finikes.oc.vote.controller;
 
 import com.finikes.oc.BaseDTO;
+import com.finikes.oc.estate.Houses;
+import com.finikes.oc.estate.entity.House;
 import com.finikes.oc.vote.dao.ChoiceDao;
+import com.finikes.oc.vote.dao.VoteActivityDao;
 import com.finikes.oc.vote.dao.VoteDao;
+import com.finikes.oc.vote.dto.HousesVoteStateDTO;
 import com.finikes.oc.vote.dto.OptionSummary;
 import com.finikes.oc.vote.dto.VoteStatisticsResponseDTO;
 import com.finikes.oc.vote.entity.Vote;
+import com.finikes.oc.vote.entity.VoteActivity;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.RequestParam;
@@ -22,6 +27,12 @@ public class VoteStatisticsController {
     @Autowired
     private VoteDao voteDao;
 
+    @Autowired
+    private VoteActivityDao voteActivityDao;
+
+    @Autowired
+    private Houses houses;
+
     @GetMapping("/vote/statis")
     public BaseDTO statistics(@RequestParam("voteId") String voteId) {
         int _voteId = Integer.parseInt(voteId);
@@ -42,4 +53,50 @@ public class VoteStatisticsController {
 
         return new BaseDTO().setContent(dto);
     }
+
+    @GetMapping("/vote/house/s/state")
+    public BaseDTO getHousesVoteState(@RequestParam("voteId") int voteId, @RequestParam("page") int page
+            , @RequestParam("pageCapacity") int pageCapacity, @RequestParam("state") int state) {
+        Vote vote = voteDao.selectByPrimaryKey(voteId);
+        VoteActivity voteActivity = voteActivityDao.selectByPrimaryKey(vote.getActivityId());
+        HousesVoteStateDTO dto = new HousesVoteStateDTO();
+        dto.setActivityTitle(voteActivity.getTitle());
+        dto.setVoteTitle(vote.getTitle());
+        if (state == 1) {
+            int total = voteDao.getHousesVoteNum(voteId);
+            int pageQuantity = total / pageCapacity;
+            if (total % pageCapacity > 0) {
+                pageQuantity++;
+            }
+            dto.setPageQuantity(String.valueOf(pageQuantity));
+        } else {
+            int total = voteDao.getHousesNotVoteNum(voteId);
+            int pageQuantity = total / pageCapacity;
+            if (total % pageCapacity > 0) {
+                pageQuantity++;
+            }
+            dto.setPageQuantity(String.valueOf(pageQuantity));
+        }
+
+        List<House> houses = null;
+        int offset = (page - 1) * pageCapacity;
+        if (state == 1) {
+            houses = voteDao.getHousesVote(voteId, offset, pageCapacity);
+        } else {
+            houses = voteDao.getHousesNotVote(voteId, offset, pageCapacity);
+        }
+
+        if (houses == null) {
+            houses = new ArrayList<>();// 避免空指针
+        }
+
+        List<String> houseNames = new ArrayList<>(houses.size());
+        for (House h : houses) {
+            // fixme 可以优化, 一次性在数据库取出多个房产的全名
+            houseNames.add(this.houses.getHouseFullName(h));
+        }
+        dto.setHouseNames(houseNames);
+
+        return new BaseDTO().setContent(dto);
+    }
 }

+ 27 - 0
src/main/java/com/finikes/oc/vote/dao/VoteDao.java

@@ -1,6 +1,7 @@
 package com.finikes.oc.vote.dao;
 
 import com.finikes.oc.common.BaseDao;
+import com.finikes.oc.estate.entity.House;
 import com.finikes.oc.vote.entity.Vote;
 import org.apache.ibatis.annotations.Mapper;
 import org.apache.ibatis.annotations.Param;
@@ -13,4 +14,30 @@ public interface VoteDao extends BaseDao<Vote, Integer> {
     List<Vote> selectByVoteActivityId(@Param("voteActivityId") Integer voteActivityId);
 
     int updateSelective(Vote entity);
+
+    /**
+     * 获得某个投票下未投票房产列表
+     *
+     * @param voteId
+     * @param offset
+     * @param sectionCapacity
+     * @return
+     */
+    List<House> getHousesNotVote(@Param("voteId") Integer voteId, @Param("offset") Integer offset
+            , @Param("sectionCapacity") Integer sectionCapacity);
+
+    /**
+     * 获得某个投票下已投票房产列表
+     *
+     * @param voteId
+     * @param offset
+     * @param sectionCapacity
+     * @return
+     */
+    List<House> getHousesVote(@Param("voteId") Integer voteId, @Param("offset") Integer offset
+            , @Param("sectionCapacity") Integer sectionCapacity);
+
+    int getHousesNotVoteNum(Integer voteId);
+
+    int getHousesVoteNum(Integer voteId);
 }

+ 42 - 0
src/main/java/com/finikes/oc/vote/dto/HousesVoteStateDTO.java

@@ -0,0 +1,42 @@
+package com.finikes.oc.vote.dto;
+
+import java.util.List;
+
+public class HousesVoteStateDTO {
+    private String pageQuantity;
+    private String activityTitle;
+    private String voteTitle;
+    private List<String> houseNames;
+
+    public String getPageQuantity() {
+        return pageQuantity;
+    }
+
+    public void setPageQuantity(String pageQuantity) {
+        this.pageQuantity = pageQuantity;
+    }
+
+    public String getActivityTitle() {
+        return activityTitle;
+    }
+
+    public void setActivityTitle(String activityTitle) {
+        this.activityTitle = activityTitle;
+    }
+
+    public String getVoteTitle() {
+        return voteTitle;
+    }
+
+    public void setVoteTitle(String voteTitle) {
+        this.voteTitle = voteTitle;
+    }
+
+    public List<String> getHouseNames() {
+        return houseNames;
+    }
+
+    public void setHouseNames(List<String> houseNames) {
+        this.houseNames = houseNames;
+    }
+}

+ 45 - 1
src/main/resources/mapper/VoteMapper.xml

@@ -9,7 +9,11 @@
     </insert>
 
     <update id="update" parameterType="com.finikes.oc.vote.entity.Vote">
-        UPDATE t_vote SET activity_id = #{activityId}, sequence = #{sequence}, title = #{title}, content = #{content}
+        UPDATE t_vote
+        SET activity_id = #{activityId},
+            sequence    = #{sequence},
+            title       = #{title},
+            content     = #{content}
         WHERE id = #{id}
     </update>
     <update id="updateSelective">
@@ -49,4 +53,44 @@
         WHERE id = #{primaryKey}
     </delete>
 
+    <select id="getHousesNotVote" resultType="com.finikes.oc.estate.entity.House">
+        SELECT id, unitId, name
+        FROM t_house h
+        WHERE h.id NOT IN (
+            SELECT c.house_id
+            FROM t_choice c
+            WHERE c.option_id IN (SELECT id FROM t_option o WHERE o.vote_id = #{voteId}))
+            LIMIT #{offset}
+            , #{sectionCapacity}
+    </select>
+
+    <select id="getHousesNotVoteNum" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM t_house h
+        WHERE h.id NOT IN (
+            SELECT c.house_id
+            FROM t_choice c
+            WHERE c.option_id IN (SELECT id FROM t_option o WHERE o.vote_id = #{voteId}))
+    </select>
+
+    <select id="getHousesVote" resultType="com.finikes.oc.estate.entity.House">
+        SELECT id, unitId, name
+        FROM t_house h
+        WHERE h.id IN (
+            SELECT c.house_id
+            FROM t_choice c
+            WHERE c.option_id IN (SELECT id FROM t_option o WHERE o.vote_id = #{voteId}))
+            LIMIT #{offset}
+            , #{sectionCapacity}
+    </select>
+
+    <select id="getHousesVoteNum" resultType="java.lang.Integer">
+        SELECT count(1)
+        FROM t_house h
+        WHERE h.id IN (
+            SELECT c.house_id
+            FROM t_choice c
+            WHERE c.option_id IN (SELECT id FROM t_option o WHERE o.vote_id = #{voteId}))
+    </select>
+
 </mapper>