Pārlūkot izejas kodu

finikes alpha 18

finikes 2 gadi atpakaļ
vecāks
revīzija
076f769620
36 mainītis faili ar 763 papildinājumiem un 292 dzēšanām
  1. 1 12
      src/main/java/com/finikes/oc/base/controller/PassportController.java
  2. 0 2
      src/main/java/com/finikes/oc/base/dao/PassportDAO.java
  3. 0 54
      src/main/java/com/finikes/oc/base/dto/PassportHouseInfoResponseDTO.java
  4. 0 9
      src/main/java/com/finikes/oc/base/entity/Passport.java
  5. 33 0
      src/main/java/com/finikes/oc/estate/Houses.java
  6. 53 19
      src/main/java/com/finikes/oc/estate/controller/HouseController.java
  7. 4 3
      src/main/java/com/finikes/oc/estate/controller/HouseRelationController.java
  8. 54 45
      src/main/java/com/finikes/oc/estate/entity/House.java
  9. 1 0
      src/main/java/com/finikes/oc/filter/AuthFilter.java
  10. 35 0
      src/main/java/com/finikes/oc/management/controller/AuthController.java
  11. 2 0
      src/main/java/com/finikes/oc/management/dao/AuthorityDAO.java
  12. 7 3
      src/main/java/com/finikes/oc/management/dao/HouseRelationDAO.java
  13. 31 0
      src/main/java/com/finikes/oc/management/dto/HouseInfoDTO.java
  14. 13 0
      src/main/java/com/finikes/oc/management/dto/ProxyAuthDTO.java
  15. 63 45
      src/main/java/com/finikes/oc/management/entity/HouseRelation.java
  16. 60 0
      src/main/java/com/finikes/oc/suggestion/controller/SuggestionController.java
  17. 17 0
      src/main/java/com/finikes/oc/suggestion/dao/SuggestionDAO.java
  18. 5 14
      src/main/java/com/finikes/oc/suggestion/dto/SuggestionDTO.java
  19. 5 5
      src/main/java/com/finikes/oc/suggestion/dto/SuggestionsDTO.java
  20. 40 0
      src/main/java/com/finikes/oc/suggestion/entity/Suggestion.java
  21. 138 0
      src/main/java/com/finikes/oc/vote/controller/ChoicesController.java
  22. 0 17
      src/main/java/com/finikes/oc/vote/controller/VoteController.java
  23. 3 4
      src/main/java/com/finikes/oc/vote/dao/ChoiceDao.java
  24. 7 17
      src/main/java/com/finikes/oc/vote/dto/ChoiceDelegationDto.java
  25. 13 0
      src/main/java/com/finikes/oc/vote/dto/ChoiceDetail.java
  26. 8 6
      src/main/java/com/finikes/oc/vote/dto/ChoiceDto.java
  27. 33 0
      src/main/java/com/finikes/oc/vote/dto/ChoicesDetailsDTO.java
  28. 42 0
      src/main/java/com/finikes/oc/vote/dto/OptionChoiceDetail.java
  29. 5 5
      src/main/java/com/finikes/oc/vote/entity/Choice.java
  30. 7 12
      src/main/java/com/finikes/oc/vote/service/VoteServiceImpl.java
  31. 11 1
      src/main/resources/mapper/AuthorityMapper.xml
  32. 14 4
      src/main/resources/mapper/ChoiceMapper.xml
  33. 2 2
      src/main/resources/mapper/HouseMapper.xml
  34. 32 7
      src/main/resources/mapper/HouseRelationMapper.xml
  35. 0 6
      src/main/resources/mapper/PassportMapper.xml
  36. 24 0
      src/main/resources/mapper/SuggestionMapper.xml

+ 1 - 12
src/main/java/com/finikes/oc/base/controller/PassportController.java

@@ -118,7 +118,7 @@ public class PassportController {
 
     @ResponseBody
     @RequestMapping(value = "/", method = RequestMethod.GET)
-    public BaseDTO getPassportAndHouses(HttpServletRequest request) {
+    public BaseDTO getPassport(HttpServletRequest request) {
         Passport passport = Passports.getPassport(request);
         if (passport == null || passport.getState() != 1) {
             // 不能查看
@@ -127,17 +127,6 @@ public class PassportController {
 
         PassportHouseInfoResponseDTO dto = new PassportHouseInfoResponseDTO();
         dto.setMobile(passport.getMobile());
-        dto.setName(passport.getName());
-        HouseRelation relation = houseRelationDAO.findByPassport(passport.getId());
-        if (relation != null && relation.getState() == 1) {
-            House house = houseDAO.findById(relation.getHouseId());
-            String houseAddress = getHouseFullName(house);
-            dto.setArea(String.valueOf(house.getArea()));
-            dto.setCertificateNo(relation.getCertificateNo());
-            dto.setHouseAddress(houseAddress);
-            dto.setFunction(house.getFunction());
-            dto.setCertificateUrl(relation.getCertificateUrl());
-        }
 
         return new BaseDTO().setContent(dto);
     }

+ 0 - 2
src/main/java/com/finikes/oc/base/dao/PassportDAO.java

@@ -16,7 +16,5 @@ public interface PassportDAO {
 
     Passport findById(int id);
 
-    void updateName(@Param("id") int id, @Param("name") String name);
-
     void updateStateAndPassword(@Param("mobile") String mobile, @Param("state") int state, @Param("password") String password, @Param("createTime") long createTime);
 }

+ 0 - 54
src/main/java/com/finikes/oc/base/dto/PassportHouseInfoResponseDTO.java

@@ -2,20 +2,6 @@ package com.finikes.oc.base.dto;
 
 public class PassportHouseInfoResponseDTO {
     private String mobile;
-    private String name;
-    private String certificateNo;
-    private String certificateUrl;
-    private String houseAddress;
-    private String area;
-    private String function;
-
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
 
     public String getMobile() {
         return mobile;
@@ -24,44 +10,4 @@ public class PassportHouseInfoResponseDTO {
     public void setMobile(String mobile) {
         this.mobile = mobile;
     }
-
-    public String getCertificateNo() {
-        return certificateNo;
-    }
-
-    public void setCertificateNo(String certificateNo) {
-        this.certificateNo = certificateNo;
-    }
-
-    public String getCertificateUrl() {
-        return certificateUrl;
-    }
-
-    public void setCertificateUrl(String certificateUrl) {
-        this.certificateUrl = certificateUrl;
-    }
-
-    public String getHouseAddress() {
-        return houseAddress;
-    }
-
-    public void setHouseAddress(String houseAddress) {
-        this.houseAddress = houseAddress;
-    }
-
-    public String getArea() {
-        return area;
-    }
-
-    public void setArea(String area) {
-        this.area = area;
-    }
-
-    public String getFunction() {
-        return function;
-    }
-
-    public void setFunction(String function) {
-        this.function = function;
-    }
 }

+ 0 - 9
src/main/java/com/finikes/oc/base/entity/Passport.java

@@ -7,19 +7,10 @@ public class Passport {
     private int id;
     private String mobile; // 手机号码
     private String password; // 密码
-    private String name;
     private transient int state;
     private transient String veriCode;
     private transient long veriCodeDeadline;
 
-    public String getName() {
-        return name;
-    }
-
-    public void setName(String name) {
-        this.name = name;
-    }
-
     public long getVeriCodeDeadline() {
         return veriCodeDeadline;
     }

+ 33 - 0
src/main/java/com/finikes/oc/estate/Houses.java

@@ -0,0 +1,33 @@
+package com.finikes.oc.estate;
+
+import com.finikes.oc.estate.dao.EstateUnitDAO;
+import com.finikes.oc.estate.entity.EstateUnit;
+import com.finikes.oc.estate.entity.House;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+
+@Service
+public class Houses {
+    @Autowired
+    private EstateUnitDAO estateUnitDAO;
+
+    public String getHouseFullName(House house) {
+        StringBuilder builder = new StringBuilder(house.getName());
+        List<String> fullName = new ArrayList<>();
+        EstateUnit eu = estateUnitDAO.findById(house.getUnitId());
+        fullName.add(eu.getName() + eu.getExp());
+        while (eu.getId() != 1) {
+            eu = estateUnitDAO.findById(eu.getParentId());
+            fullName.add(eu.getName() + eu.getExp());
+        }
+
+        for (String name : fullName) {
+            builder = new StringBuilder(name).append(builder);
+        }
+
+        return builder.toString();
+    }
+}

+ 53 - 19
src/main/java/com/finikes/oc/estate/controller/HouseController.java

@@ -5,6 +5,7 @@ import com.finikes.oc.Passports;
 import com.finikes.oc.base.dao.PassportDAO;
 import com.finikes.oc.base.entity.Passport;
 import com.finikes.oc.estate.dao.HouseDAO;
+import com.finikes.oc.estate.entity.House;
 import com.finikes.oc.management.dao.HouseRelationDAO;
 import com.finikes.oc.management.entity.HouseRelation;
 import org.springframework.beans.factory.annotation.Autowired;
@@ -29,45 +30,42 @@ public class HouseController {
     @Autowired
     private PassportDAO passportDAO;
 
+    @Autowired
+    private HouseDAO houseDAO;
+
     @ResponseBody
     @RequestMapping(value = "/passport", method = RequestMethod.PUT)
     public BaseDTO bind(@RequestBody Map<String, Object> map, HttpServletRequest request) {
         String certificateNo = (String) map.get("certificateNo");
         String certificatePhoto = (String) map.get("certificatePhoto");
-        String houseId = (String) map.get("houseId");
+        int houseId = Integer.parseInt((String) map.get("houseId"));
         String name = (String) map.get("name");
+        String idNumber = (String) map.get("idNumber");
+
         Passport passport = Passports.getPassport(request);
         if (passport == null) {
             return new BaseDTO("104", "需要登录");
         }
 
-        HouseRelation relation = houseRelationDAO.findByPassport(passport.getId());
-        if (relation != null) {
-            /*if (relation.getState() == 1) {
+        HouseRelation relation = houseRelationDAO.findByPassportAndHouse(passport.getId(), houseId);
+        if (relation != null) { // 如果不为空, 说明已经有关系数据
+            if (relation.getState() == 1) {
                 return new BaseDTO("105", "已绑定过");
             } else {
-                relation.setState(2);
-                relation.setCertificateNo(certificateNo);
-                relation.setCertificateUrl(certificatePhoto);
-                houseRelationDAO.update(relation);
-                if(name != null && !"".equals(name)) {
-                    passportDAO.updateName(passport.getId(), name);
-                }
-                return new BaseDTO();
-            }*/
-            return new BaseDTO("107", "房产已有绑定");
+                return new BaseDTO("106", "已存在未审核的绑定关系");
+            }
         }
 
         relation = new HouseRelation();
-        relation.setHouseId(Integer.parseInt(houseId));
+        relation.setHouseId(houseId);
         relation.setPassportId(passport.getId());
         relation.setState(2);
         relation.setCertificateNo(certificateNo);
         relation.setCertificateUrl(certificatePhoto);
+        relation.setName(name);
+        relation.setIdNumber(idNumber);
         houseRelationDAO.insert(relation);
-        if(name != null && !"".equals(name)) {
-            passportDAO.updateName(passport.getId(), name);
-        }
+
         return new BaseDTO();
     }
 
@@ -101,7 +99,7 @@ public class HouseController {
     @RequestMapping(value = "/passport/security", method = RequestMethod.POST)
     public BaseDTO checkBind(@RequestBody Map<String, Object> map) {
         String passportId = (String) map.get("passportId");
-        String houseId = (String) map.get("houseId");
+        int houseId = Integer.parseInt((String) map.get("houseId"));
 
         HouseRelation relation = houseRelationDAO.findByPassportAndHouse(Integer.parseInt(passportId), houseId);
         if (relation != null) {
@@ -115,4 +113,40 @@ public class HouseController {
 
         return new BaseDTO("000", "系统错误");
     }
+
+    @ResponseBody
+    @RequestMapping(value = "/passport", method = RequestMethod.POST)
+    public BaseDTO autoBind(@RequestBody Map<String, Object> map, HttpServletRequest request) {
+        int houseId = Integer.parseInt((String) map.get("houseId"));
+        String name = (String) map.get("name");
+        String idNumber = (String) map.get("idNumber");
+        Passport passport = Passports.getPassport(request);
+        if (passport == null) {
+            return new BaseDTO("104", "需要登录");
+        }
+
+        HouseRelation relation = houseRelationDAO.findByPassportAndHouse(passport.getId(), houseId);
+        if (relation != null) {
+            if (relation.getState() == 1) {
+                return new BaseDTO("105", "已绑定过");
+            } else {
+                return new BaseDTO("106", "已存在未审核的绑定关系");
+            }
+        }
+
+        House house = houseDAO.findById(houseId);
+        if (!passport.getMobile().equals(house.getReservedMobile())) {
+            return new BaseDTO("107", "与房产预留电话号码不匹配");
+        }
+
+        relation = new HouseRelation();
+        relation.setHouseId(houseId);
+        relation.setPassportId(passport.getId());
+        relation.setState(1);
+        relation.setName(name);
+        relation.setIdNumber(idNumber);
+        houseRelationDAO.insert(relation);
+
+        return new BaseDTO();
+    }
 }

+ 4 - 3
src/main/java/com/finikes/oc/estate/controller/HouseRelationController.java

@@ -23,9 +23,10 @@ public class HouseRelationController {
 
     /**
      * 房产关系列表
-     * @param pageNum 页码
+     *
+     * @param pageNum      页码
      * @param pageCapacity 页容量
-     * @param state 状态
+     * @param state        状态
      * @return
      */
     @GetMapping("houseRelations")
@@ -45,7 +46,7 @@ public class HouseRelationController {
 
     @PutMapping("houseRelation/verify")
     public BaseDTO verify(@RequestBody @Valid HouseRelationVerifyDto dto) {
-        houseRelationDAO.updateState(String.valueOf(dto.getPassportId()), String.valueOf(dto.getHouseId()), dto.getState());
+        houseRelationDAO.updateState(String.valueOf(dto.getPassportId()), dto.getHouseId(), dto.getState());
         return new BaseDTO();
     }
 

+ 54 - 45
src/main/java/com/finikes/oc/estate/entity/House.java

@@ -4,49 +4,58 @@ package com.finikes.oc.estate.entity;
  * 房产
  */
 public class House extends EstateUnit {
-	private transient int unitId; // 属于那个单元(肯定是个物业单元的叶节点)
-	private int id;
-	private String name; // 名称
-	private float area; // 面积
-	private String function; // 使用性质
-
-	public int getUnitId() {
-		return unitId;
-	}
-
-	public void setUnitId(int unitId) {
-		this.unitId = unitId;
-	}
-
-	public int getId() {
-		return id;
-	}
-
-	public void setId(int id) {
-		this.id = id;
-	}
-
-	public String getName() {
-		return name;
-	}
-
-	public void setName(String name) {
-		this.name = name;
-	}
-
-	public float getArea() {
-		return area;
-	}
-
-	public void setArea(float area) {
-		this.area = area;
-	}
-
-	public String getFunction() {
-		return function;
-	}
-
-	public void setFunction(String function) {
-		this.function = function;
-	}
+    private transient int unitId; // 属于那个单元(肯定是个物业单元的叶节点)
+    private int id;
+    private String name; // 名称
+    private float area; // 面积
+    private String function; // 使用性质
+    private String reservedMobile; // 预留的电话号码
+
+    public String getReservedMobile() {
+        return reservedMobile;
+    }
+
+    public void setReservedMobile(String reservedMobile) {
+        this.reservedMobile = reservedMobile;
+    }
+
+    public int getUnitId() {
+        return unitId;
+    }
+
+    public void setUnitId(int unitId) {
+        this.unitId = unitId;
+    }
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public float getArea() {
+        return area;
+    }
+
+    public void setArea(float area) {
+        this.area = area;
+    }
+
+    public String getFunction() {
+        return function;
+    }
+
+    public void setFunction(String function) {
+        this.function = function;
+    }
 }

+ 1 - 0
src/main/java/com/finikes/oc/filter/AuthFilter.java

@@ -42,6 +42,7 @@ public class AuthFilter implements Filter {
             response.getWriter().print("{\"code\":\"200\", \"message\":\"没有权限\"}");
             return;
         }
+
         if (pass(passport, url, httpMethod) == -1) {
             response.setCharacterEncoding("UTF-8");
             response.setContentType("application/json; charset=utf-8");

+ 35 - 0
src/main/java/com/finikes/oc/management/controller/AuthController.java

@@ -0,0 +1,35 @@
+package com.finikes.oc.management.controller;
+
+import com.finikes.oc.BaseDTO;
+import com.finikes.oc.Passports;
+import com.finikes.oc.management.dao.AuthorityDAO;
+import com.finikes.oc.management.dto.ProxyAuthDTO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RequestMethod;
+import org.springframework.web.bind.annotation.RequestParam;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import javax.servlet.http.HttpServletRequest;
+
+@Controller
+public class AuthController {
+    @Autowired
+    private AuthorityDAO authorityDAO;
+
+    @ResponseBody
+    @RequestMapping(value = "/auth/proxy", method = RequestMethod.GET)
+    public BaseDTO haveProxyAuth(HttpServletRequest request) {
+        int proxyId = Passports.getPassport(request).getId();
+
+        ProxyAuthDTO dto = new ProxyAuthDTO();
+        if (authorityDAO.haveProxyChoiceAuth(proxyId) > 0) {
+            dto.setHave("true");
+        } else {
+            dto.setHave("false");
+        }
+
+        return new BaseDTO().setContent(dto);
+    }
+}

+ 2 - 0
src/main/java/com/finikes/oc/management/dao/AuthorityDAO.java

@@ -7,4 +7,6 @@ import org.apache.ibatis.annotations.Param;
 @Mapper
 public interface AuthorityDAO {
     Authority findByRoleAndResource(@Param("roleId") int roleId, @Param("resourceId") int resourceId);
+
+    int haveProxyChoiceAuth(int passportId);
 }

+ 7 - 3
src/main/java/com/finikes/oc/management/dao/HouseRelationDAO.java

@@ -9,15 +9,19 @@ import java.util.List;
 
 @Mapper
 public interface HouseRelationDAO {
-    HouseRelation findByPassportAndHouse(@Param("id") int id, @Param("houseId") String houseId);
+    HouseRelation findByPassportAndHouse(@Param("id") int id, @Param("houseId") int houseId);
 
-    HouseRelation findByPassport(int passportId);
+    List<HouseRelation> findByPassport(int passportId);
 
     void update(HouseRelation relation);
 
     void insert(HouseRelation relation);
 
-    void updateState(@Param("passportId") String passportId, @Param("houseId") String houseId, @Param("state") int state);
+    void updateState(@Param("passportId") String passportId, @Param("houseId") int houseId, @Param("state") int state);
 
     List<HouseRelationViewDto> selectByState(@Param("state") Integer state);
+
+    List<Integer> findHousesByNotPassportChoice(@Param("passportId") int passportId, @Param("voteId") int voteId);
+
+    List<Integer> findHousesByPassportChoice(@Param("passportId") int passportId, @Param("voteId") int voteId);
 }

+ 31 - 0
src/main/java/com/finikes/oc/management/dto/HouseInfoDTO.java

@@ -0,0 +1,31 @@
+package com.finikes.oc.management.dto;
+
+public class HouseInfoDTO {
+    private String houseId;
+    private String houseName;
+    private String enabled;
+
+    public String getHouseId() {
+        return houseId;
+    }
+
+    public void setHouseId(String houseId) {
+        this.houseId = houseId;
+    }
+
+    public String getHouseName() {
+        return houseName;
+    }
+
+    public void setHouseName(String houseName) {
+        this.houseName = houseName;
+    }
+
+    public String getEnabled() {
+        return enabled;
+    }
+
+    public void setEnabled(String enabled) {
+        this.enabled = enabled;
+    }
+}

+ 13 - 0
src/main/java/com/finikes/oc/management/dto/ProxyAuthDTO.java

@@ -0,0 +1,13 @@
+package com.finikes.oc.management.dto;
+
+public class ProxyAuthDTO {
+    private String have;
+
+    public String getHave() {
+        return have;
+    }
+
+    public void setHave(String have) {
+        this.have = have;
+    }
+}

+ 63 - 45
src/main/java/com/finikes/oc/management/entity/HouseRelation.java

@@ -4,49 +4,67 @@ package com.finikes.oc.management.entity;
  * 房产关系
  */
 public class HouseRelation {
-	private int passportId; // 账号ID
-	private String certificateNo; // 房产证号码
-	private String certificateUrl; // 房产证图片地址(相对)
-	private int houseId;
-	private int state; // 1:审核通过; 2:尚未通过
-
-	public int getState() {
-		return state;
-	}
-
-	public void setState(int state) {
-		this.state = state;
-	}
-
-	public int getHouseId() {
-		return houseId;
-	}
-
-	public void setHouseId(int houseId) {
-		this.houseId = houseId;
-	}
-
-	public int getPassportId() {
-		return passportId;
-	}
-
-	public void setPassportId(int passportId) {
-		this.passportId = passportId;
-	}
-
-	public String getCertificateNo() {
-		return certificateNo;
-	}
-
-	public void setCertificateNo(String certificateNo) {
-		this.certificateNo = certificateNo;
-	}
-
-	public String getCertificateUrl() {
-		return certificateUrl;
-	}
-
-	public void setCertificateUrl(String certificateUrl) {
-		this.certificateUrl = certificateUrl;
-	}
+    private int passportId; // 账号ID
+    private String certificateNo; // 房产证号码
+    private String certificateUrl; // 房产证图片地址(相对)
+    private int houseId;
+    private int state; // 1:审核通过; 2:尚未通过
+    private String name;
+    private String idNumber;
+
+    public String getName() {
+        return name;
+    }
+
+    public void setName(String name) {
+        this.name = name;
+    }
+
+    public String getIdNumber() {
+        return idNumber;
+    }
+
+    public void setIdNumber(String idNumber) {
+        this.idNumber = idNumber;
+    }
+
+    public int getState() {
+        return state;
+    }
+
+    public void setState(int state) {
+        this.state = state;
+    }
+
+    public int getHouseId() {
+        return houseId;
+    }
+
+    public void setHouseId(int houseId) {
+        this.houseId = houseId;
+    }
+
+    public int getPassportId() {
+        return passportId;
+    }
+
+    public void setPassportId(int passportId) {
+        this.passportId = passportId;
+    }
+
+    public String getCertificateNo() {
+        return certificateNo;
+    }
+
+    public void setCertificateNo(String certificateNo) {
+        this.certificateNo = certificateNo;
+    }
+
+    public String getCertificateUrl() {
+        return certificateUrl;
+    }
+
+    public void setCertificateUrl(String certificateUrl) {
+        this.certificateUrl = certificateUrl;
+    }
 }

+ 60 - 0
src/main/java/com/finikes/oc/suggestion/controller/SuggestionController.java

@@ -0,0 +1,60 @@
+package com.finikes.oc.suggestion.controller;
+
+import com.finikes.oc.BaseDTO;
+import com.finikes.oc.BizException;
+import com.finikes.oc.Passports;
+import com.finikes.oc.base.entity.Passport;
+import com.finikes.oc.suggestion.dao.SuggestionDAO;
+import com.finikes.oc.suggestion.dto.SuggestionDTO;
+import com.finikes.oc.suggestion.dto.SuggestionsDTO;
+import com.finikes.oc.suggestion.entity.Suggestion;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+@ResponseBody
+@Controller
+public class SuggestionController {
+    @Autowired
+    private SuggestionDAO suggestionDAO;
+
+    @RequestMapping(value = "/suggestion/s", method = RequestMethod.GET)
+    public BaseDTO suggestions(@RequestParam("page") Integer page, @RequestParam("pageCapacity") Integer pageCapacity) {
+        int offset = (page - 1) * pageCapacity;
+        List<SuggestionDTO> suggestions = suggestionDAO.getSuggestionSection(offset, pageCapacity);
+        SuggestionsDTO content = new SuggestionsDTO();
+        content.setSuggestions(suggestions);
+        int suggestionNum = suggestionDAO.getSuggestionNum();
+        int pageQuantity = suggestionNum / pageCapacity;
+        if (suggestionNum % pageCapacity > 0) {
+            pageQuantity++;
+        }
+        content.setPageQuantity(String.valueOf(pageQuantity));
+
+        return new BaseDTO().setContent(content);
+    }
+
+    @RequestMapping(value = "/suggestion", method = RequestMethod.PUT)
+    public BaseDTO createSuggestion(@RequestBody Map<String, Object> map, HttpServletRequest request) {
+        String content = (String) map.get("content");
+        if (null == content || "".equals(content)) {
+            return new BaseDTO(new BizException("109", "数据不能为空"));
+        }
+
+        if (content.length() > 200) {
+            return new BaseDTO(new BizException("108", "数据超长"));
+        }
+
+        Passport passport = Passports.getPassport(request);
+        Suggestion suggestion = new Suggestion();
+        suggestion.setContent(content);
+        suggestion.setCreateTime(System.currentTimeMillis());
+        suggestion.setPassportId(passport.getId());
+        suggestionDAO.insert(suggestion);
+        return new BaseDTO();
+    }
+}

+ 17 - 0
src/main/java/com/finikes/oc/suggestion/dao/SuggestionDAO.java

@@ -0,0 +1,17 @@
+package com.finikes.oc.suggestion.dao;
+
+import com.finikes.oc.suggestion.dto.SuggestionDTO;
+import com.finikes.oc.suggestion.entity.Suggestion;
+import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+@Mapper
+public interface SuggestionDAO {
+    void insert(Suggestion suggestion);
+
+    List<SuggestionDTO> getSuggestionSection(@Param("offset") int offset, @Param("sectionCapacity") Integer sectionCapacity);
+
+    int getSuggestionNum();
+}

+ 5 - 14
src/main/java/com/finikes/oc/vote/dto/OptionSuggestion.java → src/main/java/com/finikes/oc/suggestion/dto/SuggestionDTO.java

@@ -1,24 +1,15 @@
-package com.finikes.oc.vote.dto;
+package com.finikes.oc.suggestion.dto;
 
-public class OptionSuggestion {
-    private int choiceId;
-    private int passportId;
+public class SuggestionDTO {
+    private String passportId;
     private String passportName;
     private String suggestion;
 
-    public int getChoiceId() {
-        return choiceId;
-    }
-
-    public void setChoiceId(int choiceId) {
-        this.choiceId = choiceId;
-    }
-
-    public int getPassportId() {
+    public String getPassportId() {
         return passportId;
     }
 
-    public void setPassportId(int passportId) {
+    public void setPassportId(String passportId) {
         this.passportId = passportId;
     }
 

+ 5 - 5
src/main/java/com/finikes/oc/vote/dto/OptionSuggestions.java → src/main/java/com/finikes/oc/suggestion/dto/SuggestionsDTO.java

@@ -1,10 +1,10 @@
-package com.finikes.oc.vote.dto;
+package com.finikes.oc.suggestion.dto;
 
 import java.util.List;
 
-public class OptionSuggestions {
+public class SuggestionsDTO {
     private String pageQuantity;
-    private List<OptionSuggestion> suggestions;
+    private List<SuggestionDTO> suggestions;
 
     public String getPageQuantity() {
         return pageQuantity;
@@ -14,11 +14,11 @@ public class OptionSuggestions {
         this.pageQuantity = pageQuantity;
     }
 
-    public List<OptionSuggestion> getSuggestions() {
+    public List<SuggestionDTO> getSuggestions() {
         return suggestions;
     }
 
-    public void setSuggestions(List<OptionSuggestion> suggestions) {
+    public void setSuggestions(List<SuggestionDTO> suggestions) {
         this.suggestions = suggestions;
     }
 }

+ 40 - 0
src/main/java/com/finikes/oc/suggestion/entity/Suggestion.java

@@ -0,0 +1,40 @@
+package com.finikes.oc.suggestion.entity;
+
+public class Suggestion {
+    private int id;
+    private int passportId;
+    private String content;
+    private long createTime;
+
+    public int getId() {
+        return id;
+    }
+
+    public void setId(int id) {
+        this.id = id;
+    }
+
+    public int getPassportId() {
+        return passportId;
+    }
+
+    public void setPassportId(int passportId) {
+        this.passportId = passportId;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public long getCreateTime() {
+        return createTime;
+    }
+
+    public void setCreateTime(long createTime) {
+        this.createTime = createTime;
+    }
+}

+ 138 - 0
src/main/java/com/finikes/oc/vote/controller/ChoicesController.java

@@ -0,0 +1,138 @@
+package com.finikes.oc.vote.controller;
+
+import com.finikes.oc.BaseDTO;
+import com.finikes.oc.BizException;
+import com.finikes.oc.Passports;
+import com.finikes.oc.base.dao.PassportDAO;
+import com.finikes.oc.base.dto.PassportHouseInfoResponseDTO;
+import com.finikes.oc.base.dto.RegisterResponseDTO;
+import com.finikes.oc.base.entity.Passport;
+import com.finikes.oc.estate.Houses;
+import com.finikes.oc.estate.dao.EstateUnitDAO;
+import com.finikes.oc.estate.dao.HouseDAO;
+import com.finikes.oc.estate.entity.EstateUnit;
+import com.finikes.oc.estate.entity.House;
+import com.finikes.oc.management.dao.HouseRelationDAO;
+import com.finikes.oc.management.dto.HouseInfoDTO;
+import com.finikes.oc.management.entity.HouseRelation;
+import com.finikes.oc.vote.dao.ChoiceDao;
+import com.finikes.oc.vote.dao.OptionDao;
+import com.finikes.oc.vote.dao.VoteDao;
+import com.finikes.oc.vote.dto.ChoiceDetail;
+import com.finikes.oc.vote.dto.ChoicesDetailsDTO;
+import com.finikes.oc.vote.dto.OptionChoiceDetail;
+import com.finikes.oc.vote.entity.Option;
+import com.finikes.oc.vote.entity.Vote;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import java.math.BigDecimal;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+
+@Controller
+public class ChoicesController {
+    @Autowired
+    private ChoiceDao choiceDao;
+
+    @Autowired
+    private VoteDao voteDao;
+
+    @Autowired
+    private OptionDao optionDao;
+
+    /**
+     * 查看投票细节
+     * @param voteId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/vote/option/s/choice/s", method = RequestMethod.GET)
+    public BaseDTO getChoicesDetails(@RequestParam(name = "voteId") Integer voteId) {
+        Vote vote = voteDao.selectByPrimaryKey(voteId);
+
+        ChoicesDetailsDTO dto = new ChoicesDetailsDTO();
+
+        dto.setTitle(vote.getTitle());
+        dto.setContent(vote.getContent());
+
+        List<Integer> voteIds = new ArrayList<>();
+        voteIds.add(voteId);
+        List<Option> options = optionDao.selectByVoteIds(voteIds);
+        List<OptionChoiceDetail> ocds = new ArrayList<>();
+        int sum = 0;
+        for (Option o : options) {
+            int optionId = o.getId();
+            List<ChoiceDetail> cds = choiceDao.findByOption(optionId);
+            OptionChoiceDetail ocd = new OptionChoiceDetail();
+            int number = cds.size();
+            sum = sum + number;
+            ocd.setNumber(String.valueOf(number));
+            ocd.setValue(o.getValue());
+            ocd.setChoices(cds);
+
+            ocds.add(ocd);
+        }
+
+        for (OptionChoiceDetail ocd : ocds) {
+            String num_t = ocd.getChoices().size() + ".00";
+            String sum_t = sum + ".00";
+            BigDecimal _num = new BigDecimal(num_t);
+            BigDecimal _sum = new BigDecimal(sum_t);
+            BigDecimal rate = _num.divide(_sum, 2, BigDecimal.ROUND_HALF_UP);
+            ocd.setRate(String.valueOf(rate));
+        }
+        dto.setOptions(ocds);
+
+        return new BaseDTO().setContent(dto);
+    }
+
+    @Autowired
+    private Houses houses;
+
+    @Autowired
+    private HouseRelationDAO houseRelationDAO;
+
+    @Autowired
+    private HouseDAO houseDAO;
+
+    /**
+     * 获取当前在线用户的房产列表(针对投票情况进行过滤)
+     *
+     * @param voteId
+     * @return
+     */
+    @ResponseBody
+    @RequestMapping(value = "/passport/house/s", method = RequestMethod.GET)
+    public BaseDTO getHousesByPassportChoice(@RequestParam(name = "voteId") Integer voteId, HttpServletRequest request) {
+        List<HouseInfoDTO> dtos = new ArrayList<>();
+        // 名下已经投过票的房产
+        List<Integer> houseIds = houseRelationDAO.findHousesByPassportChoice(Passports.getPassport(request).getId(), voteId);
+        for (Integer houseId : houseIds) {
+            HouseInfoDTO dto = new HouseInfoDTO();
+            dto.setEnabled("true");
+            dto.setHouseId(String.valueOf(houseId));
+            dto.setHouseName(houses.getHouseFullName(houseDAO.findById(houseId)));
+
+            dtos.add(dto);
+        }
+
+        // 名下未投过票的房产
+        houseIds = houseRelationDAO.findHousesByNotPassportChoice(Passports.getPassport(request).getId(), voteId);
+        for (Integer houseId : houseIds) {
+            HouseInfoDTO dto = new HouseInfoDTO();
+            dto.setEnabled("false");
+            dto.setHouseId(String.valueOf(houseId));
+            dto.setHouseName(houses.getHouseFullName(houseDAO.findById(houseId)));
+
+            dtos.add(dto);
+        }
+
+        return new BaseDTO().setContent(dtos);
+    }
+}

+ 0 - 17
src/main/java/com/finikes/oc/vote/controller/VoteController.java

@@ -165,23 +165,6 @@ public class VoteController {
         return ApiResponse.successful(dto);
     }
 
-    @GetMapping("/suggestion/s")
-    public ApiResponse<OptionSuggestions> suggestions(@RequestParam("voteId") Integer voteId, @RequestParam("page") Integer page, @RequestParam("pageCapacity") Integer pageCapacity) {
-        int offset = (page - 1) * pageCapacity;
-        List<OptionSuggestion> suggestions = choiceDao.getSuggestionSectionByVote(voteId, offset, pageCapacity);
-        OptionSuggestions optionSuggestions = new OptionSuggestions();
-        optionSuggestions.setSuggestions(suggestions);
-        int suggestionNum = choiceDao.getSuggestionNumByVote(voteId);
-        int pageQuantity = suggestionNum / pageCapacity;
-        if (suggestionNum % pageCapacity > 0) {
-            pageQuantity++;
-        }
-        optionSuggestions.setPageQuantity(String.valueOf(pageQuantity));
-
-        return ApiResponse.successful(optionSuggestions);
-    }
-
-
     /**
      * 异常处理器
      *

+ 3 - 4
src/main/java/com/finikes/oc/vote/dao/ChoiceDao.java

@@ -1,7 +1,7 @@
 package com.finikes.oc.vote.dao;
 
 import com.finikes.oc.common.BaseDao;
-import com.finikes.oc.vote.dto.OptionSuggestion;
+import com.finikes.oc.vote.dto.ChoiceDetail;
 import com.finikes.oc.vote.dto.OptionSummary;
 import com.finikes.oc.vote.entity.Choice;
 import org.apache.ibatis.annotations.Mapper;
@@ -14,11 +14,10 @@ public interface ChoiceDao extends BaseDao<Choice, Long> {
 
     boolean isHouseHolderInThisVote(@Param("voteId") Integer voteId, @Param("certificateNo") String certificateNo);
 
-    boolean isHouseHolderInThisVote_1(@Param("voteId") Integer voteId, @Param("passportId") Integer passportId);
+    int isHouseHolderInThisVote_1(@Param("voteId") Integer voteId, @Param("houseId") Integer houseId);
 
     List<OptionSummary> selectByVoteIds(@Param("voteIds") List<Integer> voteIds);
 
-    List<OptionSuggestion> getSuggestionSectionByVote(@Param("voteId") Integer voteId, @Param("offset") Integer offset, @Param("sectionCapacity") Integer sectionCapacity);
 
-    int getSuggestionNumByVote(Integer voteId);
+    List<ChoiceDetail> findByOption(int optionId);
 }

+ 7 - 17
src/main/java/com/finikes/oc/vote/dto/ChoiceDelegationDto.java

@@ -1,24 +1,22 @@
 package com.finikes.oc.vote.dto;
 
 public class ChoiceDelegationDto {
-    private Integer optionId;
-    private Integer principalId;
-    private String suggestion;
+    private int optionId;
+    private int houseId;
 
-    public String getSuggestion() {
-        return suggestion;
+    public int getHouseId() {
+        return houseId;
     }
 
-    public void setSuggestion(String suggestion) {
-        this.suggestion = suggestion;
+    public void setHouseId(int houseId) {
+        this.houseId = houseId;
     }
 
     @Override
     public String toString() {
         return "ChoiceDelegationDto{" +
                 "optionId=" + optionId +
-                ", principalId=" + principalId +
-                ", suggestion=" + suggestion +
+                ", houseId=" + houseId +
                 '}';
     }
 
@@ -29,12 +27,4 @@ public class ChoiceDelegationDto {
     public void setOptionId(Integer optionId) {
         this.optionId = optionId;
     }
-
-    public Integer getPrincipalId() {
-        return principalId;
-    }
-
-    public void setPrincipalId(Integer principalId) {
-        this.principalId = principalId;
-    }
 }

+ 13 - 0
src/main/java/com/finikes/oc/vote/dto/ChoiceDetail.java

@@ -0,0 +1,13 @@
+package com.finikes.oc.vote.dto;
+
+public class ChoiceDetail {
+    private String voterName;
+
+    public String getVoterName() {
+        return voterName;
+    }
+
+    public void setVoterName(String voterName) {
+        this.voterName = voterName;
+    }
+}

+ 8 - 6
src/main/java/com/finikes/oc/vote/dto/ChoiceDto.java

@@ -13,21 +13,23 @@ public class ChoiceDto {
     @NotNull
     private Integer optionId;
 
-    private String suggestion;
 
-    public String getSuggestion() {
-        return suggestion;
+    @NotNull
+    private Integer houseId;
+
+    public Integer getHouseId() {
+        return houseId;
     }
 
-    public void setSuggestion(String suggestion) {
-        this.suggestion = suggestion;
+    public void setHouseId(Integer houseId) {
+        this.houseId = houseId;
     }
 
     @Override
     public String toString() {
         return "ChoiceDto{" +
                 "optionId=" + optionId +
-                ", suggestion=" + suggestion +
+                ", houseId=" + houseId +
                 '}';
     }
 

+ 33 - 0
src/main/java/com/finikes/oc/vote/dto/ChoicesDetailsDTO.java

@@ -0,0 +1,33 @@
+package com.finikes.oc.vote.dto;
+
+import java.util.List;
+
+public class ChoicesDetailsDTO {
+    private String title;
+    private String content;
+    private List<OptionChoiceDetail> options;
+
+    public String getTitle() {
+        return title;
+    }
+
+    public void setTitle(String title) {
+        this.title = title;
+    }
+
+    public String getContent() {
+        return content;
+    }
+
+    public void setContent(String content) {
+        this.content = content;
+    }
+
+    public List<OptionChoiceDetail> getOptions() {
+        return options;
+    }
+
+    public void setOptions(List<OptionChoiceDetail> options) {
+        this.options = options;
+    }
+}

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

@@ -0,0 +1,42 @@
+package com.finikes.oc.vote.dto;
+
+import java.util.List;
+
+public class OptionChoiceDetail {
+    private String value;
+    private String number;
+    private String rate;
+    private List<ChoiceDetail> choices;
+
+    public String getValue() {
+        return value;
+    }
+
+    public void setValue(String value) {
+        this.value = value;
+    }
+
+    public String getNumber() {
+        return number;
+    }
+
+    public void setNumber(String number) {
+        this.number = number;
+    }
+
+    public String getRate() {
+        return rate;
+    }
+
+    public void setRate(String rate) {
+        this.rate = rate;
+    }
+
+    public List<ChoiceDetail> getChoices() {
+        return choices;
+    }
+
+    public void setChoices(List<ChoiceDetail> choices) {
+        this.choices = choices;
+    }
+}

+ 5 - 5
src/main/java/com/finikes/oc/vote/entity/Choice.java

@@ -10,14 +10,14 @@ public class Choice {
     private long chooseTime; // 选择的时间
     private boolean proxy; // 是否代理投票
     private int assigneeId; // 代理者ID
-    private String suggestion; // 建议或意见
+    private int houseId;
 
-    public String getSuggestion() {
-        return suggestion;
+    public int getHouseId() {
+        return houseId;
     }
 
-    public void setSuggestion(String suggestion) {
-        this.suggestion = suggestion;
+    public void setHouseId(int houseId) {
+        this.houseId = houseId;
     }
 
     public long getId() {

+ 7 - 12
src/main/java/com/finikes/oc/vote/service/VoteServiceImpl.java

@@ -240,10 +240,9 @@ public class VoteServiceImpl implements VoteService {
         }
         String houseResourceId = null;
         try {
-
-            HouseRelation houseRelation = houseRelationDAO.findByPassport(passport.getId());
+            HouseRelation houseRelation = houseRelationDAO.findByPassportAndHouse(passport.getId(), dto.getHouseId());
             if (houseRelation == null || houseRelation.getState() != 1) {
-                throw new BusinessException("无投票资格, 请绑定房产");
+                throw new BusinessException("无投票资格");
             }
 
             houseResourceId = "vote:house:" + houseRelation.getCertificateNo();
@@ -281,7 +280,7 @@ public class VoteServiceImpl implements VoteService {
                 throw new BusinessException("此房产已经参与过投票了");
             }*/
 
-            if (choiceDao.isHouseHolderInThisVote_1(vote.getId(), houseRelation.getPassportId())) {
+            if (choiceDao.isHouseHolderInThisVote_1(vote.getId(), houseRelation.getHouseId()) > 0) {
                 throw new BusinessException("此房产已经参与过投票了");
             }
 
@@ -290,6 +289,7 @@ public class VoteServiceImpl implements VoteService {
             choice.setOptionId(dto.getOptionId());
             choice.setProxy(false);
             choice.setChooseTime(now);
+            choice.setHouseId(dto.getHouseId());
 
             choiceDao.insert(choice);
         } finally {
@@ -300,6 +300,7 @@ public class VoteServiceImpl implements VoteService {
 
     @Override
     public void madeChoiceDelegation(ChoiceDelegationDto dto) {
+        int houseId = dto.getHouseId();
         Passport passport = PassportHelper.currentPassport();
         if (passport == null) {
             throw new BusinessException("获取登录状态异常");
@@ -315,12 +316,6 @@ public class VoteServiceImpl implements VoteService {
         try {
             long now = System.currentTimeMillis();
 
-            HouseRelation houseRelation = houseRelationDAO.findByPassport(passport.getId());
-            if (houseRelation == null || houseRelation.getState() != 1) {
-                throw new BusinessException("无投票资格, 请绑定房产");
-            }
-            houseResourceId = "vote:house:" + houseRelation.getCertificateNo();
-
             Option option = optionDao.selectByPrimaryKey(dto.getOptionId());
             if (option == null) {
                 throw new BusinessException("参与的投票不存在");
@@ -348,16 +343,16 @@ public class VoteServiceImpl implements VoteService {
                 throw new BusinessException("此房产已经参与过投票了");
             }*/
 
-            if (choiceDao.isHouseHolderInThisVote_1(vote.getId(), houseRelation.getPassportId())) {
+            if (choiceDao.isHouseHolderInThisVote_1(vote.getId(), houseId) > 0) {
                 throw new BusinessException("此房产已经参与过投票了");
             }
 
             Choice choice = new Choice();
-            choice.setPassportId(dto.getPrincipalId());
             choice.setOptionId(dto.getOptionId());
             choice.setAssigneeId(passport.getId());
             choice.setProxy(true);
             choice.setChooseTime(now);
+            choice.setHouseId(houseId);
 
             choiceDao.insert(choice);
         } finally {

+ 11 - 1
src/main/resources/mapper/AuthorityMapper.xml

@@ -5,7 +5,17 @@
     <select id="findByRoleAndResource" resultType="com.finikes.oc.management.entity.Authority">
         SELECT roleId, resourceId, state
         FROM t_authority
-        WHERE roleId = #{roleId} AND resourceId = #{resourceId}
+        WHERE roleId = #{roleId}
+          AND resourceId = #{resourceId}
     </select>
 
+    <select id="haveProxyChoiceAuth" resultType="java.lang.Integer">
+        select count(1)
+        from t_authority a,
+             t_manager m
+        where a.resourceId = 1
+          and m.passportId = #{passportId}
+          and a.state = 1
+          and a.roleId = m.roleId
+    </select>
 </mapper>

+ 14 - 4
src/main/resources/mapper/ChoiceMapper.xml

@@ -5,8 +5,8 @@
 
     <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"
             parameterType="com.finikes.oc.vote.entity.Choice">
-        INSERT INTO t_choice (option_id, passport_id, choose_time, proxy, assignee_id)
-        VALUES (#{optionId}, #{passportId}, #{chooseTime}, #{proxy}, #{assigneeId})
+        INSERT INTO t_choice (option_id, passport_id, choose_time, proxy, assignee_id, house_id)
+        VALUES (#{optionId}, #{passportId}, #{chooseTime}, #{proxy}, #{assigneeId}, #{houseId})
     </insert>
 
     <update id="update" parameterType="com.finikes.oc.vote.entity.Choice">
@@ -35,10 +35,10 @@
           AND state = 1
     </select>
 
-    <select id="isHouseHolderInThisVote_1" resultType="java.lang.Boolean">
+    <select id="isHouseHolderInThisVote_1" resultType="java.lang.Integer">
         select count(1)
         from t_choice c
-        where c.passport_id = #{passportId}
+        where c.house_id = #{houseId}
           and c.option_id in (select id from t_option o where o.vote_id = #{voteId})
     </select>
 
@@ -60,6 +60,7 @@
         GROUP BY option_id;
     </select>
 
+    <!--
     <select id="getSuggestionSectionByVote" resultType="com.finikes.oc.vote.dto.OptionSuggestion">
         select c.id as choiceId, p.id as passportId, p.`name` as passportName, c.suggestion as suggestion
         from t_choice c,
@@ -75,4 +76,13 @@
         where c.option_id in
               (select id from t_option where vote_id = #{voteId})
     </select>
+    -->
+
+    <select id="findByOption" resultType="com.finikes.oc.vote.dto.ChoiceDetail">
+        SELECT h.fullDisplayName as voterName
+        FROM t_choice c,
+             t_house h
+        WHERE c.option_id = #{optionId}
+          AND c.house_id = h.id
+    </select>
 </mapper>

+ 2 - 2
src/main/resources/mapper/HouseMapper.xml

@@ -3,13 +3,13 @@
 <mapper namespace="com.finikes.oc.estate.dao.HouseDAO">
 
     <select id="findByUnitId" resultType="com.finikes.oc.estate.entity.House">
-        SELECT id, unitId, name, area, function
+        SELECT id, unitId, name, area, function, reservedMobile
         FROM t_house
         WHERE unitId = #{unitId}
     </select>
 
     <select id="findById" resultType="com.finikes.oc.estate.entity.House">
-        SELECT id, unitId, name, area, function
+        SELECT id, unitId, name, area, function, reservedMobile
         FROM t_house
         WHERE id = #{id}
     </select>

+ 32 - 7
src/main/resources/mapper/HouseRelationMapper.xml

@@ -11,7 +11,8 @@
     <select id="findByPassportAndHouse" resultType="com.finikes.oc.management.entity.HouseRelation">
         SELECT passportId, houseId, state, certificateNo, certificateUrl
         FROM t_house_relation
-        WHERE passportId = #{id} AND houseId = #{houseId}
+        WHERE passportId = #{id}
+          AND houseId = #{houseId}
     </select>
 
     <select id="findByPassport" resultType="com.finikes.oc.management.entity.HouseRelation">
@@ -22,16 +23,18 @@
 
     <update id="update" parameterType="com.finikes.oc.management.entity.HouseRelation">
         UPDATE t_house_relation
-        SET state      = #{state},
-            certificateNo = #{certificateNo},
-            certificateUrl = #{certificateUrl}
-        WHERE mobile = #{mobile}
+        SET state    = #{state},
+            name     = #{name},
+            idNumber = #{idNumber}
+        WHERE passportId = #{passportId}
+          AND houseId = #{houseId}
     </update>
 
     <update id="updateState">
         UPDATE t_house_relation
-        SET state      = #{state}
-        WHERE passportId = #{passportId} AND houseId = #{houseId}
+        SET state = #{state}
+        WHERE passportId = #{passportId}
+          AND houseId = #{houseId}
     </update>
 
     <select id="selectByState" resultType="com.finikes.oc.management.HouseRelationViewDto">
@@ -48,4 +51,26 @@
             AND t_house_relation.state = #{state}
         </if>
     </select>
+
+    <select id="findHousesByNotPassportChoice" resultType="java.lang.Integer">
+        SELECT houseId
+        FROM t_house_relation
+        WHERE passportId = #{passportId}
+          AND houseId not IN (
+            SELECT house_id
+            FROM t_choice
+            WHERE option_id IN (SELECT id FROM t_option WHERE vote_id = #{voteId})
+              AND passport_Id = #{passportId})
+    </select>
+
+    <select id="findHousesByPassportChoice" resultType="java.lang.Integer">
+        SELECT houseId
+        FROM t_house_relation
+        WHERE passportId = #{passportId}
+          AND houseId IN (
+            SELECT house_id
+            FROM t_choice
+            WHERE option_id IN (SELECT id FROM t_option WHERE vote_id = #{voteId})
+              AND passport_Id = #{passportId})
+    </select>
 </mapper>

+ 0 - 6
src/main/resources/mapper/PassportMapper.xml

@@ -41,10 +41,4 @@
             password   = #{password}
         WHERE mobile = #{mobile}
     </update>
-
-    <update id="updateName">
-        UPDATE t_passport
-        SET name = #{name}
-        WHERE id = #{id}
-    </update>
 </mapper>

+ 24 - 0
src/main/resources/mapper/SuggestionMapper.xml

@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.finikes.oc.suggestion.dao.SuggestionDAO">
+
+
+    <insert id="insert" useGeneratedKeys="true" keyProperty="id" keyColumn="id"
+            parameterType="com.finikes.oc.suggestion.entity.Suggestion">
+        INSERT INTO t_suggestion (passportId, content, createTime)
+        VALUES (#{passportId}, #{content}, #{createTime})
+    </insert>
+
+    <select id="getSuggestionSection" resultType="com.finikes.oc.suggestion.dto.SuggestionDTO">
+        select s.id as id, s.passportId as passportId, p.`name` as passportName, s.content as suggestion
+        from t_suggestion s,
+             t_passport p
+        where s.passportId = p.id
+        ORDER BY s.createTime desc LIMIT #{offset}, #{sectionCapacity}
+    </select>
+
+    <select id="getSuggestionNum" resultType="java.lang.Integer">
+        select count(1)
+        from t_suggestion
+    </select>
+</mapper>