hudingbo 5 years ago
parent
commit
74649b85ab

+ 25 - 13
whepi-web/src/main/java/com/bofeng/controller/WxUserOpenController.java

@@ -1,10 +1,7 @@
 package com.bofeng.controller;
 
 import com.bofeng.dao.UserRoleMapper;
-import com.bofeng.entity.OwnerLinkman;
-import com.bofeng.entity.UptownHome;
-import com.bofeng.entity.UserOpen;
-import com.bofeng.entity.UserRole;
+import com.bofeng.entity.*;
 import com.bofeng.service.HomeService;
 import com.bofeng.service.WxUserOpenService;
 import com.yvan.Model;
@@ -154,30 +151,45 @@ public class WxUserOpenController {
         return Model.newSuccess(wxUserOpenService.queryFamily(userId));
     }
 
+    @ApiOperation("创建业委会资格")
+    @PostMapping("/userOpen/createYWHRule")
+    public Model<Long> createYWHRule(JsonWapper jsonWapper) throws Exception {
+        Long userId = jsonWapper.asObject(Long.class, "userId");
+        if (userId == null || userId == 0L) {
+            return Model.newFail("用户不存在");
+        }
+        //成功返回用户Id
+        try {
+            return Model.newSuccess(wxUserOpenService.createYWHRule(userId));
+        } catch (Exception e) {
+            return Model.newFail(e.getMessage());
+        }
+    }
+
     @ApiOperation("创建业委会角色、成员信息")
     @PostMapping("/userOpen/createYWH")
     public Model<Long> createYWH(JsonWapper jsonWapper) throws Exception {
         Long uptownId = jsonWapper.asObject(Long.class, "uptownId");
         Long userId = jsonWapper.asObject(Long.class, "userId");
-        List<OwnerLinkman> lstOwnerMan = new ArrayList<>();
-        OwnerLinkman ownerLinkman;
+        List<Owner> lstOwner = new ArrayList<>();
+        Owner owner;
         if (uptownId == null || uptownId == 0L) {
             return Model.newFail("请选择所在小区");
         }
         for (int i = 0; i < jsonWapper.asList("lstOwner").size(); i++) {
             Map<String, Object> mm = (Map) jsonWapper.asList("lstOwner").get(i);
-            ownerLinkman = new OwnerLinkman();
-            ownerLinkman.setLinkman(mm.get("linkman").toString());
-            ownerLinkman.setPhone(mm.get("phone").toString());
-            ownerLinkman.setType(Long.parseLong(mm.get("type").toString()));
-            lstOwnerMan.add(ownerLinkman);
+            owner = new Owner();
+            owner.setLinkman(mm.get("linkman").toString());
+            owner.setPhone(mm.get("phone").toString());
+            owner.setType(Long.parseLong(mm.get("type").toString()));
+            lstOwner.add(owner);
         }
-        if (lstOwnerMan == null || lstOwnerMan.size() == 0) {
+        if (lstOwner == null || lstOwner.size() == 0) {
             return Model.newFail("请增加业委会成员");
         }
         //成功返回用户Id
         try {
-            return Model.newSuccess(wxUserOpenService.createYWH(userId, uptownId, lstOwnerMan));
+            return Model.newSuccess(wxUserOpenService.createYWH(userId, uptownId, lstOwner));
         } catch (Exception e) {
             return Model.newFail(e.getMessage());
         }

+ 3 - 0
whepi-web/src/main/java/com/bofeng/dao/OwnerMapper.java

@@ -15,4 +15,7 @@ public interface OwnerMapper extends BaseMapper<Owner> {
 
     @Select("select * from sys_owner where uptown_id = #{uptownId}")
     List<Owner> getOwnerByUptownId(@Param("uptownId") Long uptownId);
+
+    @Select("select * from sys_owner where phone = #{phone}")
+    List<Owner> getOwnerByPhone(@Param("phone") String phone);
 }

+ 7 - 0
whepi-web/src/main/java/com/bofeng/dao/SysUptownUnitMapper.java

@@ -1,13 +1,20 @@
 package com.bofeng.dao;
 
 import com.baomidou.mybatisplus.mapper.BaseMapper;
+import com.bofeng.entity.UptownUnit;
 import com.bofeng.entity.sysUptownUnit;
 import org.apache.ibatis.annotations.Mapper;
+import org.apache.ibatis.annotations.Param;
+import org.apache.ibatis.annotations.Select;
 import org.springframework.stereotype.Repository;
 
+import java.util.List;
+
 @Mapper
 @Repository
 public interface SysUptownUnitMapper extends BaseMapper<sysUptownUnit> {
 
+    @Select("select * from sys_uptown_unit where status = 1 and unit_id = #{unitId}")
+    List<UptownUnit> selectByUnitId(@Param("unitId") Long unitId);
 
 }

+ 24 - 8
whepi-web/src/main/java/com/bofeng/entity/Owner.java

@@ -16,28 +16,44 @@ import java.util.Map;
 @TableName("sys_owner")
 public class Owner {
 
-    @TableId("owner_id")
+    @ApiModelProperty("业委会ID")
+    @TableId("OWNER_ID")
     private Long ownerId;
 
-    @TableField("uptown_id")
+    @ApiModelProperty("小区ID,下拉选ID")
+    @TableField("UPTOWN_ID")
     private Long uptownId;
 
-    @TableField("linkman")
+    @ApiModelProperty("类型:1负责人、2成员")
+    @TableField("TYPE")
+    private Long type;
+
+    @ApiModelProperty("用户id")
+    @TableField("USER_ID")
+    private Long userId;
+
+    @ApiModelProperty("联系人名称")
+    @TableField("LINKMAN")
     private String linkman;
 
-    @TableField("phone")
+    @ApiModelProperty("联系人电话")
+    @TableField("PHONE")
     private String phone;
 
-    @TableField("user_create")
+    @ApiModelProperty("新增人")
+    @TableField("USER_CREATE")
     private Long userCreate;
 
-    @TableField(exist = false)
+    @ApiModelProperty("新增时间")
+    @TableField("TIME_CREATE")
     private DateTime timeCreate;
 
-    @TableField("user_update")
+    @ApiModelProperty("修改人")
+    @TableField("USER_UPDATE")
     private Long userUpdate;
 
-    @TableField(exist = false)
+    @ApiModelProperty("修改时间")
+    @TableField("TIME_UPDATE")
     private DateTime timeUpdate;
 
     @TableField(exist = false)

+ 4 - 0
whepi-web/src/main/java/com/bofeng/entity/OwnerLinkman.java

@@ -25,6 +25,10 @@ public class OwnerLinkman {
     @TableField("TYPE")
     private Long type;
 
+    @ApiModelProperty("用户id")
+    @TableField("USER_ID")
+    private Long userId;
+
     @ApiModelProperty("联系人名称")
     @TableField("LINKMAN")
     private String linkman;

+ 182 - 34
whepi-web/src/main/java/com/bofeng/service/WxUserOpenService.java

@@ -72,6 +72,10 @@ public class WxUserOpenService {
 
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
     public Long createFamily(Long userId, Long unitId, String doorPlate, String linkMan, Integer helpNum, String phone) throws Exception {
+        /** 创建家庭用户
+         *  1.家庭用户填写电话号码后和ownerlinkman中该小区的电话做比对,如有则自动添加业委会成员角色
+         *  2.
+         * */
         Long sysUserId = queryUser(userId);
 
         //判断该用户是否已经创建了家庭用户角色
@@ -82,7 +86,7 @@ public class WxUserOpenService {
         if (lstUserRole.size() > 0) {
             for (UserRole item : lstUserRole) {
                 if (item.getRoleId() == 1L) {
-                    throw new Exception("家庭用户角色已存在");   //todo 暂时只允许一个用户角色绑定一个家庭门牌号
+                    throw new Exception("家庭用户角色已存在,请使用编辑功能");   //todo 暂时只允许一个用户角色绑定一个家庭门牌号
                 }
             }
         }
@@ -108,6 +112,10 @@ public class WxUserOpenService {
             throw new Exception("创建门牌失败!");
         }
         userRole.setPropertyId(uptownHouse.getHouseId());   //绑定家庭用户角色的门牌id
+        List<UptownHome> list = uptownHomeMapper.getUptownHomeByPhone(phone);
+        if (list.size() > 0) {
+            throw new Exception("该电话号码已被其他家庭用户注册使用!");
+        }
         //判断该门牌是否存在家庭信息
         List<UptownHome> lstUptownHome = uptownHomeMapper.getUptownHomeBy(uptownHouse.getHouseId());
         if (lstUptownHome.size() > 0) {
@@ -126,13 +134,135 @@ public class WxUserOpenService {
             throw new Exception("创建家庭信息失败!");
         }
         userRoleMapper.insert(userRole);
+        /** 判断是否增加业委会角色
+         *  新增时根据所填家庭电话号码,去linkman表去找,如果存在且业委会小区和当前小区一致,则添加业委会角色
+         *  找linkman的phone
+         * */
+        //查询小区id
+        List<UptownUnit> lstUnit = sysUptownUnitMapper.selectByUnitId(unitId);
+        if (lstUnit == null) {
+            throw new Exception("小区不存在!");
+        }
+        if (lstUnit.size() != 1) {
+            throw new Exception("小区数据异常!");
+        }
+        int phoneCount = 0;
+        List<Owner> lstOwner = ownerMapper.getOwnerByUptownId(lstUnit.get(0).getUptownId());
+        for (Owner item : lstOwner) {
+            if (item.getPhone().equals(phone)) {
+                phoneCount++;
+            }
+        }
+        if (phoneCount > 1) {
+            throw new Exception("电话号码在该小区业委会中存在多条记录,请联系客服!");
+        }
+        if (phoneCount == 1) {
+            //如果是小区业委会成员,绑定业委会成员和用户id,新增业委会角色
+            List<Owner> lst = ownerMapper.getOwnerByPhone(phone);
+            if (lst == null) {
+                throw new Exception("业委会联系电话数据异常");
+            }
+            if (lst.size() != 1) {
+                throw new Exception("业委会联系电话数据重复");
+            }
+            if (lst.get(0).getUptownId() != lstUnit.get(0).getUptownId()) {
+                throw new Exception("联系电话和所在小区不匹配");
+            }
+            lst.get(0).setUserId(sysUserId);
+            lst.get(0).setUserUpdate(sysUserId);
+            ownerMapper.updateById(lst.get(0));
+
+            //增加业委会成员角色
+            UserRole userRoleYWH = new UserRole();
+            userRoleYWH.setUrId(IdWorker.getId());
+            userRoleYWH.setUserId(sysUserId);
+            userRoleYWH.setUserUpdate(sysUserId);
+            userRoleYWH.setRoleId(2);   //业委会成员
+            userRoleYWH.setPropertyId(lst.get(0).getOwnerId());
+            userRoleMapper.insert(userRoleYWH);
+        }
 
         return userRole.getUrId();
     }
 
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
-    public Long createYWH(Long userId, Long uptownId, List<OwnerLinkman> lstOwnerMan) throws Exception {
+    public Long createYWHRule(Long userId) throws Exception {
+        /** 创建业委会资格
+         *  1.当前用户有无家庭角色,无则退出
+         *  2.小区已有业委会,退出
+         * */
         Long sysUserId = queryUser(userId);
+        List<UserRole> lstUserRole = new ArrayList<>();
+        if (sysUserId > 0L) {
+            lstUserRole = userRoleMapper.getUserRoleByUserId(sysUserId);
+        }
+        boolean hasFamily = false;
+        Long myUptownId = 0L;
+        Long myOwnerId = 0L;
+        if (lstUserRole.size() > 0) {
+            //判断该用户是否创建了业委会的角色
+            for (UserRole item : lstUserRole) {
+                if (item.getRoleId() == 1L) {
+                    hasFamily = true;
+                    myUptownId = item.getPropertyId();
+                }
+                if (item.getRoleId() == 2L) {
+                    myOwnerId = item.getPropertyId();
+                }
+            }
+        }
+        if (!hasFamily) {
+            throw new Exception("请先完善家庭地址!");
+        }
+        if (myUptownId == 0L) {
+            throw new Exception("家庭地址中尚未选择小区!");
+        }
+        //判断业委会是否已经建立
+        List<Owner> lstSysOwner = ownerMapper.getOwnerByUptownId(myUptownId);
+        boolean hasOwner = false;
+        if (lstSysOwner != null && lstSysOwner.size() > 0) {
+            for (Owner item : lstSysOwner) {
+                if (item.getUserId() == sysUserId && item.getType() == 1) {
+                    //业委会负责人的绑定用户是自己
+                    hasOwner = true;
+                    break;
+                }
+            }
+            if (!hasOwner) {
+                throw new Exception("该小区已建立业委会");
+            }
+        }
+        List<OwnerLinkman> lstOwnerLinkman = ownerLinkmanMapper.getOwnerLinkmanByOwnerId(sysUserId);
+        if (lstOwnerLinkman == null) {
+            return 1L;
+            //throw new Exception("不是业委会成员!");
+        }
+        for (OwnerLinkman item : lstOwnerLinkman) {
+            if (item.getType() == 1) {
+                return 1L;  //业委会负责人可以编辑完善业委会信息
+            }
+        }
+        return 0L;
+    }
+
+    @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
+    public Long createYWH(Long userId, Long uptownId, List<Owner> lstOwner) throws Exception {
+        /** 创建业委会
+         *  0.流程上业委会负责人是第一个创建业委会的人
+         *  1.在创建业委会之前,必须有家庭用户角色?
+         *  2.小区已有业委会,不允许再创建业委会
+         *  3.小区已有业委会,其他人不允许再进此页面
+         *  4.业委会所在小区必须和当前用户的家庭用户所在小区一致
+         * */
+        Long sysUserId = queryUser(userId);
+        Long myUptownId = 0L;
+        if (uptownId <= 0L) {
+            throw new Exception("小区id为空!");
+        }
+        Uptown uptown = uptownMapper.selectById(uptownId);
+        if (uptown == null) {
+            throw new Exception("小区不存在!");
+        }
         //判断该用户是否已经创建了业委会角色
         List<UserRole> lstUserRole = new ArrayList<>();
         if (sysUserId > 0L) {
@@ -142,63 +272,80 @@ public class WxUserOpenService {
             //判断该用户是否创建了业委会的角色
             for (UserRole item : lstUserRole) {
                 if (item.getRoleId() == 2L) {
-                    throw new Exception("业委会用户角色已存在");   //todo 暂时只允许一个用户角色绑定一个业委会
+                    throw new Exception("业委会用户角色已存在!");   //todo 暂时只允许一个用户角色绑定一个业委会
+                }
+                if (item.getRoleId() == 1L) {
+                    myUptownId = item.getPropertyId();
                 }
             }
         }
+        if (myUptownId == 0L) {
+            throw new Exception("请先创建家庭用户!");
+        }
+        if (myUptownId != uptownId) {
+            throw new Exception("家庭所在小区和业委会所在小区不一致!");
+        }
         //创建业委会用户角色
         UserRole userRole = new UserRole();
         userRole.setUrId(IdWorker.getId());
         userRole.setUserId(sysUserId);
         userRole.setUserCreate(sysUserId);
         userRole.setUserUpdate(sysUserId);
-        userRole.setRoleId(2);  //业委会
+        userRole.setRoleId(2);  //业委会角色
+        userRole.setStatus(0);  //需后台审核后变更为1
 
         //判断业委会是否已经建立
-        List<Owner> lstOwner = new ArrayList<>();
-        Owner owner;
+        List<Owner> lstSysOwner;
         if (uptownId > 0L) {
-            lstOwner = ownerMapper.getOwnerByUptownId(uptownId);
-        }
-        if (lstOwner.size() > 0) {
-            //判断该用户是否创建了业委会
-            for (Owner item : lstOwner) {
-                if (item.getUptownId() == uptownId) {
-                    throw new Exception("该小区已建立业委会");
-                }
+            lstSysOwner = ownerMapper.getOwnerByUptownId(uptownId);
+            if (lstSysOwner != null && lstSysOwner.size() > 0) {
+                throw new Exception("该小区已建立业委会");
             }
         }
-        owner = new Owner();
-        owner.setOwnerId(IdWorker.getId());
-        owner.setUptownId(uptownId);
-        owner.setUserCreate(sysUserId);
-        owner.setUserUpdate(sysUserId);
-
-        userRole.setPropertyId(owner.getOwnerId()); //设置业委会id给角色
-        userRoleMapper.insert(userRole);
-
-        //建立业委会成员
-        if (lstOwnerMan == null) {
+        //建立业委会负责人和成员
+        if (lstOwner == null) {
             throw new Exception("请新增业委会成员");
         }
         int masterNum = 0;
-        for (OwnerLinkman item : lstOwnerMan) {
+        for (Owner item : lstOwner) {
             if (item.getType() == 1L) {
                 masterNum++;
             }
         }
+        if (masterNum == 0) {
+            throw new Exception("必须指定一个业委会负责人!");
+        }
         if (masterNum != 1) {
-            throw new Exception("业委会负责人只允许有一个");
+            throw new Exception("业委会负责人只允许有一个");
         }
-        for (OwnerLinkman item : lstOwnerMan) {
+        //判断业委会中的联系电话是否重复
+        List<String> lstPhone = new ArrayList<>();
+        for (Owner item : lstOwner) {
+            if (!lstPhone.contains(item.getPhone())) {
+                lstPhone.add(item.getPhone());
+            }
+        }
+        if (lstPhone.size() != lstOwner.size()) {
+            throw new Exception("联系电话有重复!");
+        }
+        for (Owner item : lstOwner) {
+            item.setOwnerId(IdWorker.getId());
+            item.setUptownId(uptownId);
+            item.setUserCreate(sysUserId);
+            item.setUserUpdate(sysUserId);
             if (item.getType() == 1L) {
-                owner.setLinkman(item.getLinkman());
-                owner.setPhone(item.getPhone());
+                item.setUserId(sysUserId);  //业委会负责人绑定用户
+                userRole.setPropertyId(item.getOwnerId()); //设置业委会id给角色的PropertyId
             }
-            item.setOwnerId(owner.getOwnerId());
-            ownerLinkmanMapper.insert(item);
+            //新增时还需判断业委会中是否已存在该电话号码
+            List<Owner> lst = ownerMapper.getOwnerByPhone(item.getPhone());
+            if (lst != null && lst.size() > 1) {
+                throw new Exception(item.getPhone() + "电话已被其他业委会使用!");
+            }
+            ownerMapper.insert(item);
         }
-        ownerMapper.insert(owner);
+        userRoleMapper.insert(userRole);
+        //业委会其他成员不创建userRole
 
         return userRole.getUrId();
     }
@@ -321,7 +468,8 @@ public class WxUserOpenService {
     }
 
     @Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRED)
-    public Long editFamily(Long userId, Long unitId, String doorPlate, String linkMan, Integer helpNum, String phone, Long urId) throws Exception {
+    public Long editFamily(Long userId, Long unitId, String doorPlate, String linkMan, Integer helpNum, String
+            phone, Long urId) throws Exception {
         Long sysUserId = queryUser(userId);
         if (urId == 0L) {
             throw new Exception("尚未建立家庭用户角色,无法编辑");