Browse Source

用户绑定楼宇

master
review512jwy@163.com 3 months ago
parent
commit
46c8e3fc10
  1. 3
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_cn.yml
  2. 1
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml
  3. 3
      model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml
  4. 5
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessApiInterceptor.java
  5. 14
      model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/BuildingController.java
  6. 10
      model2d3d-viewer-back-controller/src/main/resources/config/application.properties
  7. 19
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/MyBatisPlusGenerator.java
  8. 17
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/UserBuildingRelationMapper.java
  9. 4
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicBuildingMapperExt.java
  10. 11
      model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/UserBuildingRelationMapperExt.java
  11. 3
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicCompanyMapper.xml
  12. 17
      model2d3d-viewer-back-dao/src/main/resources/mappers/auto/UserBuildingRelationMapper.xml
  13. 35
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicBuildingMapperExt.xml
  14. 19
      model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml
  15. 2
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/BuildingSearchParams.java
  16. 2
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/DeleteBuildingParams.java
  17. 5
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/OptBuildingParams.java
  18. 5
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/OptCompanyParams.java
  19. 9
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/OptUserParam.java
  20. 4
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicBuilding.java
  21. 4
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicCompany.java
  22. 34
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/UserBuildingRelation.java
  23. 5
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/building/BuildingPageVO.java
  24. 6
      model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/user/UserPageDTO.java
  25. 1
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/BuildingService.java
  26. 2
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/common/CommonOpt.java
  27. 2
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/AccountServiceImpl.java
  28. 32
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/BuildingServiceImpl.java
  29. 14
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/CompanyServiceImpl.java
  30. 17
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/RoleServiceImpl.java
  31. 65
      model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/UserServiceImpl.java
  32. 11
      model2d3d-viewer-back-util/src/main/java/com/model2d3d/viewer/back/util/CommonUtil.java

3
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_cn.yml

@ -36,4 +36,5 @@ msgcn:
oldPwdError: 旧密码错误 oldPwdError: 旧密码错误
newPwdSameOld: 新密码不得与旧密码相同 newPwdSameOld: 新密码不得与旧密码相同
companyLimit: 最多可创建15个企业 companyLimit: 最多可创建15个企业
buildingNameHasExisted: 楼宇已存在 buildingNameHasExisted: 楼宇名称已存在
buildingUidHasExisted: 楼宇记号已存在

1
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_en.yml

@ -37,3 +37,4 @@ msgen:
newPwdSameOld: 新密码不得与旧密码相同 newPwdSameOld: 新密码不得与旧密码相同
companyLimit: 最多可创建15个企业 companyLimit: 最多可创建15个企业
buildingNameHasExisted: Building already exists. buildingNameHasExisted: Building already exists.
buildingUidHasExisted: 楼宇记号已存在

3
model2d3d-viewer-back-common/src/main/resources/config/language/msg/msg_jp.yml

@ -36,4 +36,5 @@ msgjp:
oldPwdError: 旧パスワードエラー oldPwdError: 旧パスワードエラー
newPwdSameOld: 注:旧パスワードと同じものを使用しないでください newPwdSameOld: 注:旧パスワードと同じものを使用しないでください
companyLimit: 最大15のエンタープライズを作成可能 companyLimit: 最大15のエンタープライズを作成可能
buildingNameHasExisted: 当該ビルは既に存在しています。 buildingNameHasExisted: 該当ビル名がすでにある
buildingUidHasExisted: 楼宇记号已存在

5
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/configurator/interceptor/AccessApiInterceptor.java

@ -5,6 +5,8 @@ import com.alibaba.fastjson.JSONObject;
import com.model2d3d.viewer.back.common.response.ResponseCode; import com.model2d3d.viewer.back.common.response.ResponseCode;
import com.model2d3d.viewer.back.service.AccountService; import com.model2d3d.viewer.back.service.AccountService;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
import org.slf4j.Logger; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
@ -13,8 +15,6 @@ import org.springframework.web.method.HandlerMethod;
import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.resource.ResourceHttpRequestHandler; import org.springframework.web.servlet.resource.ResourceHttpRequestHandler;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.lang.reflect.Method; import java.lang.reflect.Method;
public class AccessApiInterceptor implements HandlerInterceptor { public class AccessApiInterceptor implements HandlerInterceptor {
@ -27,6 +27,7 @@ public class AccessApiInterceptor implements HandlerInterceptor {
@Autowired @Autowired
private AccountService accountService; private AccountService accountService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
if(handler instanceof HandlerMethod) { if(handler instanceof HandlerMethod) {
HandlerMethod handlerMethod = (HandlerMethod) handler; HandlerMethod handlerMethod = (HandlerMethod) handler;

14
model2d3d-viewer-back-controller/src/main/java/com/model2d3d/viewer/back/controller/BuildingController.java

@ -16,6 +16,7 @@ import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.Parameter;
import java.io.FileNotFoundException; import java.io.FileNotFoundException;
import java.util.List;
import jakarta.servlet.http.HttpServletResponse; import jakarta.servlet.http.HttpServletResponse;
@ -61,7 +62,6 @@ public class BuildingController {
* @param LanguageType language type (0: Chinese, 1: English, 2: Japanese) * @param LanguageType language type (0: Chinese, 1: English, 2: Japanese)
* @return a SimpleDataResponse indicating the result of the add operation * @return a SimpleDataResponse indicating the result of the add operation
*/ */
@AccessRequired
@Operation(summary = "Add a building") @Operation(summary = "Add a building")
@RequestMapping(value = "/add", method = RequestMethod.POST) @RequestMapping(value = "/add", method = RequestMethod.POST)
public SimpleDataResponse add( public SimpleDataResponse add(
@ -149,4 +149,16 @@ public class BuildingController {
return pageResponse; return pageResponse;
} }
@Operation(summary = "Get buildings bound to the user", description = "获取用户绑定的楼宇")
@RequestMapping(value = "/getBoundBuildings", method = RequestMethod.POST)
public SimpleDataResponse<List<BuildingPageVO>> getBoundBuildings(
@Parameter(name = "LoginName", description = "Login name", required = true, schema = @Schema(defaultValue = "admin")) @RequestHeader(required = true) String LoginName,
@Parameter(name = "AccessToken", description = "Authentication token", required = true) @RequestHeader(required = true) String AccessToken,
@Parameter(name="UserId",description="用户ID",required=true,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String UserId,
@Parameter(name="CompanyId",description="所属企业ID",required=false,schema = @Schema(defaultValue = "1")) @RequestHeader(required=true) String CompanyId,
@Parameter(name = "LanguageType", description = "Language type", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) {
return buildingService.getBoundBuildings(UserId, CompanyId, LanguageType);
}
} }

10
model2d3d-viewer-back-controller/src/main/resources/config/application.properties

@ -70,15 +70,15 @@ spring.redis.lettuce.shutdown-timeout=100
#邮件发送信息 #邮件发送信息
mail.smtp.host=email-smtp.ap-northeast-1.amazonaws.com mail.smtp.host=smtp.163.com
mail.smtp.port=465 mail.smtp.port=465
mail.smtp.auth=true mail.smtp.auth=true
mail.smtp.ssl=true mail.smtp.ssl=true
mail.sender.username=AKIAVRXFMB43Z4Q6WGZN mail.sender.username=style202206@163.com
mail.sender.password_encrypted=true mail.sender.password_encrypted=true
mail.sender.password=a/52R0rao7ksRMvl1j17fVEmPCw7gC9OreHDqWOE+S7sgmoQT0YgoLRJqOlJqX7e mail.sender.password=hVndud7spllTv1zuqPHPBSOk5mmvtET+
mail.sender.sendername=datacenter-info mail.sender.sendername=admin
mail.sender.from=alert@ttkdatatechbuild.com mail.sender.from=style202206@163.com
#邮件通知服务开关 #邮件通知服务开关
mail.send.switch=true mail.send.switch=true

19
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/MyBatisPlusGenerator.java

@ -53,15 +53,19 @@ public class MyBatisPlusGenerator {
"login_history", "login_history",
"basic_menu" "basic_menu"
); );
// uuid算法主键的表 // 雪花算法主键的表
List<String> assignIdTables = Arrays.asList( List<String> assignIdTables = Arrays.asList(
"basic_building", "basic_building"
);
// uuid算法主键的表
List<String> assignUUIdTables = Arrays.asList(
"basic_role", "basic_role",
"basic_company", "basic_company",
"basic_user" "basic_user"
); );
// 没有主键的表 // 没有主键的表
List<String> noIdTables = Arrays.asList( List<String> noIdTables = Arrays.asList(
"user_building_relation",
"basic_role_menu_relation", "basic_role_menu_relation",
"basic_role_user_relation" "basic_role_user_relation"
); );
@ -71,10 +75,13 @@ public class MyBatisPlusGenerator {
autoIncrementTables, IdType.AUTO); autoIncrementTables, IdType.AUTO);
generateForTables(dataSourceConfig, globalConfig, packageConfig, generateForTables(dataSourceConfig, globalConfig, packageConfig,
assignIdTables, IdType.ASSIGN_UUID); assignIdTables, IdType.ASSIGN_ID);
generateForTables(dataSourceConfig, globalConfig, packageConfig,
assignUUIdTables, IdType.ASSIGN_UUID);
generateForTables(dataSourceConfig, globalConfig, packageConfig, generateForTables(dataSourceConfig, globalConfig, packageConfig,
noIdTables, IdType.NONE); noIdTables, null);
} }
private static void generateForTables(DataSourceConfig dataSourceConfig, private static void generateForTables(DataSourceConfig dataSourceConfig,
@ -82,6 +89,10 @@ public class MyBatisPlusGenerator {
PackageConfig packageConfig, PackageConfig packageConfig,
List<String> tables, List<String> tables,
IdType idType) { IdType idType) {
if (tables == null || tables.isEmpty()){
System.out.println("表名不能为空");
return;
}
StrategyConfig strategyConfig = GeneratorBuilder.strategyConfigBuilder() StrategyConfig strategyConfig = GeneratorBuilder.strategyConfigBuilder()
.addInclude(tables) .addInclude(tables)

17
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/auto/UserBuildingRelationMapper.java

@ -0,0 +1,17 @@
package com.model2d3d.viewer.back.dao.auto;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.model2d3d.viewer.back.model.UserBuildingRelation;
/**
* <p>
* Mapper 接口
* </p>
*
* @author jwy
* @since
*/
public interface UserBuildingRelationMapper extends BaseMapper<UserBuildingRelation> {
}

4
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/BasicBuildingMapperExt.java

@ -21,7 +21,9 @@ import java.util.Map;
@Mapper @Mapper
public interface BasicBuildingMapperExt extends BasicBuildingMapper { public interface BasicBuildingMapperExt extends BasicBuildingMapper {
int checkExist(OptBuildingParams optBuildingParams); Map<String, String> checkExist(OptBuildingParams optBuildingParams);
IPage<BuildingPageVO> getListPage(Page page, @Param("params") BuildingSearchParams pageSearchParam); IPage<BuildingPageVO> getListPage(Page page, @Param("params") BuildingSearchParams pageSearchParam);
List<BuildingPageVO> getBoundBuildings(@Param("userId") String userId);
} }

11
model2d3d-viewer-back-dao/src/main/java/com/model2d3d/viewer/back/dao/ex/UserBuildingRelationMapperExt.java

@ -0,0 +1,11 @@
package com.model2d3d.viewer.back.dao.ex;
import com.model2d3d.viewer.back.dao.auto.UserBuildingRelationMapper;
import org.apache.ibatis.annotations.Mapper;
import java.util.Map;
@Mapper
public interface UserBuildingRelationMapperExt extends UserBuildingRelationMapper {
}

3
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/BasicCompanyMapper.xml

@ -10,11 +10,12 @@
<result column="flag" property="flag" /> <result column="flag" property="flag" />
<result column="create_time" property="createTime" /> <result column="create_time" property="createTime" />
<result column="modify_time" property="modifyTime" /> <result column="modify_time" property="modifyTime" />
<result column="apikey" property="apikey" />
</resultMap> </resultMap>
<!-- 通用查询结果列 --> <!-- 通用查询结果列 -->
<sql id="Base_Column_List"> <sql id="Base_Column_List">
id, parent_id, company_name, flag, create_time, modify_time id, parent_id, company_name, flag, create_time, modify_time, apikey
</sql> </sql>
</mapper> </mapper>

17
model2d3d-viewer-back-dao/src/main/resources/mappers/auto/UserBuildingRelationMapper.xml

@ -0,0 +1,17 @@
<?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.model2d3d.viewer.back.dao.auto.UserBuildingRelationMapper">
<!-- 通用查询映射结果 -->
<resultMap id="BaseResultMap" type="com.model2d3d.viewer.back.model.UserBuildingRelation">
<result column="user_id" property="userId" />
<result column="building_id" property="buildingId" />
<result column="create_time" property="createTime" />
</resultMap>
<!-- 通用查询结果列 -->
<sql id="Base_Column_List">
user_id, building_id, create_time
</sql>
</mapper>

35
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicBuildingMapperExt.xml

@ -3,9 +3,12 @@
<mapper namespace="com.model2d3d.viewer.back.dao.ex.BasicBuildingMapperExt"> <mapper namespace="com.model2d3d.viewer.back.dao.ex.BasicBuildingMapperExt">
<select id="checkExist" resultType="java.lang.Integer"> <select id="checkExist" resultType="java.util.Map">
SELECT SELECT
COUNT(1) CASE
WHEN name = #{buildingName} THEN 'buildingName'
WHEN unique_identification = #{uniqueIdentification} THEN 'uniqueIdentification'
END AS conflict_field
FROM FROM
basic_building basic_building
WHERE WHERE
@ -26,7 +29,8 @@
bbuilding.name buildingName, bbuilding.name buildingName,
bbuilding.address, bbuilding.address,
bbuilding.unique_identification, bbuilding.unique_identification,
bbuilding.dimensional_url bbuilding.dimensional_url,
bcomp.company_name
FROM FROM
basic_building bbuilding basic_building bbuilding
INNER JOIN basic_company bcomp ON bcomp.id = bbuilding.company_id INNER JOIN basic_company bcomp ON bcomp.id = bbuilding.company_id
@ -39,6 +43,31 @@
<if test="params.buildingName != null"> <if test="params.buildingName != null">
AND bbuilding.name LIKE CONCAT('%',#{params.buildingName},'%') AND bbuilding.name LIKE CONCAT('%',#{params.buildingName},'%')
</if> </if>
ORDER BY bbuilding.create_time DESC, bbuilding.building_id
</select>
<select id="getBoundBuildings" resultType="com.model2d3d.viewer.back.vo.building.BuildingPageVO">
SELECT
bbuilding.building_id buildingId,
bbuilding.company_id companyId,
bbuilding.name buildingName,
bbuilding.address,
bbuilding.unique_identification,
bbuilding.dimensional_url,
bcomp.company_name
FROM
basic_building bbuilding
<if test='userId != null and !"1".equals(userId)'>
INNER JOIN user_building_relation ubr ON ubr.building_id = bbuilding.building_id
</if>
INNER JOIN basic_company bcomp ON bcomp.id = bbuilding.company_id
WHERE
bbuilding.flag != 1 AND bcomp.flag != 1
<if test='userId != null and !"1".equals(userId)'>
AND ubr.user_id = #{userId}
</if>
ORDER BY bbuilding.create_time DESC, bbuilding.building_id
</select> </select>

19
model2d3d-viewer-back-dao/src/main/resources/mappers/ex/BasicUserMapperExt.xml

@ -26,12 +26,27 @@
buser.mobile_number mobileNumber, buser.mobile_number mobileNumber,
buser.create_time createTime, buser.create_time createTime,
any_value(brole.id) roleId, any_value(brole.id) roleId,
any_value(brole.role_name) roleName any_value(brole.role_name) roleName,
ubrelation.buildingIds,
ubrelation.buildingNames
FROM FROM
basic_user buser basic_user buser
INNER JOIN basic_company bcom ON buser.company_id = bcom.id INNER JOIN basic_company bcom ON buser.company_id = bcom.id
INNER JOIN basic_role_user_relation brur ON brur.user_id = buser.id INNER JOIN basic_role_user_relation brur ON brur.user_id = buser.id
INNER JOIN basic_role brole ON brur.role_id = brole.id INNER JOIN basic_role brole ON brur.role_id = brole.id
LEFT JOIN
(
SELECT
user_building_relation.user_id,
GROUP_CONCAT(user_building_relation.building_id SEPARATOR ',') AS buildingIds,
GROUP_CONCAT(basic_building.name SEPARATOR ',') AS buildingNames
FROM
user_building_relation
INNER JOIN basic_building ON basic_building.building_id = user_building_relation.building_id
WHERE basic_building.flag != 1
GROUP BY
user_building_relation.user_id
) ubrelation ON buser.id = ubrelation.user_id
WHERE WHERE
buser.flag != 1 AND brole.flag != 1 AND buser.company_id IN <foreach collection="params.companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach> buser.flag != 1 AND brole.flag != 1 AND buser.company_id IN <foreach collection="params.companyIdList" item="item" open="(" separator="," close=")">#{item}</foreach>
<if test="params.userId != null"> <if test="params.userId != null">
@ -53,7 +68,7 @@
GROUP_CONCAT(bmenu.id) GROUP_CONCAT(bmenu.id)
FROM FROM
<choose> <choose>
<when test="userId != null and userId == 1"> <when test='userId != null and "1".equals(userId)'>
basic_menu bmenu WHERE bmenu.flag != 1 basic_menu bmenu WHERE bmenu.flag != 1
</when> </when>
<otherwise> <otherwise>

2
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/BuildingSearchParams.java

@ -20,6 +20,6 @@ public class BuildingSearchParams extends BaseSearchParams {
private String buildingIds; private String buildingIds;
@Schema(description ="Building IDs", hidden = true) @Schema(description ="Building IDs", hidden = true)
private List<String> buildingIdList; private List<Long> buildingIdList;
} }

2
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/DeleteBuildingParams.java

@ -15,6 +15,6 @@ public class DeleteBuildingParams{
@NotEmpty(message = "1001") @NotEmpty(message = "1001")
@Schema(description ="Building IDs, array", example = "[\"acbdef2738967\",\"abcc556587\"]") @Schema(description ="Building IDs, array", example = "[\"acbdef2738967\",\"abcc556587\"]")
private List<String> buildingIds; private List<Long> buildingIds;
} }

5
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/building/OptBuildingParams.java

@ -13,9 +13,10 @@ import org.hibernate.validator.constraints.Length;
public class OptBuildingParams{ public class OptBuildingParams{
@Schema(description ="Building unique identifier ID, not required for new additions", example = "2738967") @Schema(description ="Building unique identifier ID, not required for new additions", example = "2738967")
private String buildingId; private Long buildingId;
@Schema(description ="Company ID", example = "2738967", hidden = true) @NotBlank(message = "1001")
@Schema(description ="Company ID", example = "2738967")
private String companyId; private String companyId;
@NotBlank(message = "1001") @NotBlank(message = "1001")

5
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/company/OptCompanyParams.java

@ -24,5 +24,10 @@ public class OptCompanyParams{
@Schema(description ="企业名称",example = "testAccount1", required = true) @Schema(description ="企业名称",example = "testAccount1", required = true)
private String companyName; private String companyName;
@NotBlank(message = "1001")
@Length(max = 255,message = "1002")
@Schema(description ="apikey",example = "173976ba6fe9598dabc76", required = true)
private String apikey;
} }

9
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/dto/user/OptUserParam.java

@ -3,10 +3,13 @@ package com.model2d3d.viewer.back.dto.user;
import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.media.Schema;
import jakarta.validation.constraints.Email; import jakarta.validation.constraints.Email;
import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotEmpty;
import lombok.Getter; import lombok.Getter;
import lombok.Setter; import lombok.Setter;
import org.hibernate.validator.constraints.Length; import org.hibernate.validator.constraints.Length;
import java.util.List;
/** /**
* @author zhc * @author zhc
* @time 2022年6月14日10:56:38 * @time 2022年6月14日10:56:38
@ -37,8 +40,12 @@ public class OptUserParam {
@Schema(description ="手机号码,这里要加上国际区号,比如日本是+81,传给后台的就是+81-08041165856,中国是+86,传给后台的就是+86-18841165856",example = "+81-08041165856", required = false) @Schema(description ="手机号码,这里要加上国际区号,比如日本是+81,传给后台的就是+81-08041165856,中国是+86,传给后台的就是+86-18841165856",example = "+81-08041165856", required = false)
private String mobileNumber; private String mobileNumber;
@Schema(description ="所属企业ID",example = "2", hidden = true) @NotBlank(message = "1001")
@Schema(description ="所属企业ID",example = "2")
private String companyId; private String companyId;
@Schema(description ="Building IDs, array", example = "[11111,2222222]")
private List<Long> buildingIds;
} }

4
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicBuilding.java

@ -17,9 +17,9 @@ import java.io.Serializable;
@Schema(description = "楼宇表") @Schema(description = "楼宇表")
public class BasicBuilding implements Serializable { public class BasicBuilding implements Serializable {
@TableId(value = "building_id", type = IdType.ASSIGN_UUID) @TableId(value = "building_id", type = IdType.ASSIGN_ID)
@Schema(description = "") @Schema(description = "")
private String buildingId; private Long buildingId;
@TableField("company_id") @TableField("company_id")

4
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/BasicCompany.java

@ -42,5 +42,9 @@ public class BasicCompany implements Serializable {
@Schema(description = "") @Schema(description = "")
private Long modifyTime; private Long modifyTime;
@TableField("apikey")
@Schema(description = "")
private String apikey;
} }

34
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/model/UserBuildingRelation.java

@ -0,0 +1,34 @@
package com.model2d3d.viewer.back.model;
import com.baomidou.mybatisplus.annotation.*;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
import lombok.experimental.Accessors;
import java.io.Serializable;
@Getter
@Setter
@ToString
@Accessors(chain = true)
@TableName("user_building_relation")
@Schema(description = "")
public class UserBuildingRelation implements Serializable {
@TableField("user_id")
@Schema(description = "")
private String userId;
@TableField("building_id")
@Schema(description = "")
private Long buildingId;
@TableField("create_time")
@Schema(description = "")
private Long createTime;
}

5
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/building/BuildingPageVO.java

@ -15,9 +15,12 @@ public class BuildingPageVO{
@Schema(description ="Building unique identifier ID, not required for new additions", example = "2738967") @Schema(description ="Building unique identifier ID, not required for new additions", example = "2738967")
private String buildingId; private String buildingId;
@Schema(description ="Company ID", example = "2738967", hidden = true) @Schema(description ="Company ID", example = "2738967", required = true)
private String companyId; private String companyId;
@Schema(description ="Company name", example = "testCompany", required = true)
private String companyName;
@Schema(description ="Building name", example = "testBuilding1", required = true) @Schema(description ="Building name", example = "testBuilding1", required = true)
private String buildingName; private String buildingName;

6
model2d3d-viewer-back-model/src/main/java/com/model2d3d/viewer/back/vo/user/UserPageDTO.java

@ -40,4 +40,10 @@ public class UserPageDTO {
@Schema(description ="创建时间",example = "1678990326897", required = false) @Schema(description ="创建时间",example = "1678990326897", required = false)
private Long createTime; private Long createTime;
@Schema(description ="绑定的楼宇id",example = "1111,222222")
private String buildingIds;
@Schema(description ="绑定的楼宇名称",example = "1111name,222222name")
private String buildingNames;
} }

1
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/BuildingService.java

@ -27,4 +27,5 @@ public interface BuildingService {
IPage<BuildingPageVO> getListPage(BuildingSearchParams pageSearchParam, String companyId, String userId, IPage<BuildingPageVO> getListPage(BuildingSearchParams pageSearchParam, String companyId, String userId,
Integer languageType, Integer uTCOffset); Integer languageType, Integer uTCOffset);
SimpleDataResponse<List<BuildingPageVO>> getBoundBuildings(String userId, String companyId, Integer languageType);
} }

2
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/common/CommonOpt.java

@ -65,7 +65,7 @@ public class CommonOpt {
public List<String> filterCompanyIds(String targetCompanyId, String needProcessedCompanyIds) { public List<String> filterCompanyIds(String targetCompanyId, String needProcessedCompanyIds) {
List<String> selfAndSubCompanyList = getSelfAndSubCompanyId(targetCompanyId); List<String> selfAndSubCompanyList = getSelfAndSubCompanyId(targetCompanyId);
if (StringUtils.isNotBlank(needProcessedCompanyIds)) { if (StringUtils.isNotBlank(needProcessedCompanyIds)) {
List<String> needProcessedCompanyIdList = CommonUtil.commaStr2LongList(needProcessedCompanyIds); List<String> needProcessedCompanyIdList = CommonUtil.commaStr2StrList(needProcessedCompanyIds);
return needProcessedCompanyIdList.stream().filter(selfAndSubCompanyList::contains).collect(Collectors.toList()); return needProcessedCompanyIdList.stream().filter(selfAndSubCompanyList::contains).collect(Collectors.toList());
} }
return null; return null;

2
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/AccountServiceImpl.java

@ -223,7 +223,7 @@ public class AccountServiceImpl implements AccountService {
// logger.info("Parameter [captcha] check failed."); // logger.info("Parameter [captcha] check failed.");
// } // }
if (ValidatorUtil.validParameterAlert(loginParam.getLoginname(), "loginname", true, 1, 20, 4, errorMap) > 0) { if (ValidatorUtil.validParameterAlert(loginParam.getLoginname(), "loginname", true, 1, 50, 4, errorMap) > 0) {
logger.info("Parameter [account] check failed."); logger.info("Parameter [account] check failed.");
} }
if (ValidatorUtil.validParameterAlert(loginParam.getPassword(), "password", true, 1, 20, 4, errorMap) > 0) { if (ValidatorUtil.validParameterAlert(loginParam.getPassword(), "password", true, 1, 20, 4, errorMap) > 0) {

32
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/BuildingServiceImpl.java

@ -27,6 +27,9 @@ import org.springframework.transaction.annotation.Transactional;
import org.springframework.transaction.interceptor.TransactionAspectSupport; import org.springframework.transaction.interceptor.TransactionAspectSupport;
import org.springframework.util.ObjectUtils; import org.springframework.util.ObjectUtils;
import java.util.List;
import java.util.Map;
/** /**
* *
* @author jwy-style * @author jwy-style
@ -67,7 +70,7 @@ public class BuildingServiceImpl implements BuildingService {
try { try {
// Check company association to prevent unauthorized operations on other companies' data // Check company association to prevent unauthorized operations on other companies' data
// if (ObjectUtils.isEmpty(optBuildingParams.getCompanyId())) { // if (ObjectUtils.isEmpty(optBuildingParams.getCompanyId())) {
optBuildingParams.setCompanyId(companyId); // optBuildingParams.setCompanyId(companyId);
// } else { // } else {
// checkCompany(optBuildingParams, languageType, companyId); // checkCompany(optBuildingParams, languageType, companyId);
// } // }
@ -81,7 +84,6 @@ public class BuildingServiceImpl implements BuildingService {
long currentUnix = System.currentTimeMillis(); long currentUnix = System.currentTimeMillis();
BasicBuilding basicBuilding = new BasicBuilding(); BasicBuilding basicBuilding = new BasicBuilding();
BeanUtils.copyProperties(optBuildingParams, basicBuilding); BeanUtils.copyProperties(optBuildingParams, basicBuilding);
basicBuilding.setCompanyId(companyId);
basicBuilding.setBuildingId(null); // Ensure buildingId is null for new entity creation basicBuilding.setBuildingId(null); // Ensure buildingId is null for new entity creation
basicBuilding.setName(optBuildingParams.getBuildingName()); basicBuilding.setName(optBuildingParams.getBuildingName());
basicBuilding.setCreateTime(currentUnix); basicBuilding.setCreateTime(currentUnix);
@ -109,16 +111,17 @@ public class BuildingServiceImpl implements BuildingService {
checkExist(optBuildingParams, languageType); checkExist(optBuildingParams, languageType);
} }
/**
* Checks if a building with the same name already exists in the database.
* Throws a MsgCodeException if the building name is already taken.
*
* @param optBuildingParams The parameters for creating the building.
* @param languageType The language type for error messages.
*/
private void checkExist(OptBuildingParams optBuildingParams, Integer languageType) { private void checkExist(OptBuildingParams optBuildingParams, Integer languageType) {
if (basicBuildingMapperExt.checkExist(optBuildingParams) > 0) { Map<String, String> result = basicBuildingMapperExt.checkExist(optBuildingParams);
throw new MsgCodeException(msgLanguageChange.getParameterMapByCode(languageType, "buildingNameHasExisted")); if (result != null && result.containsKey("conflict_field")) {
String conflictField = result.get("conflict_field");
switch (conflictField) {
case "buildingName":
throw new MsgCodeException(msgLanguageChange.getParameterMapByCode(languageType, "buildingNameHasExisted"));
case "uniqueIdentification":
throw new MsgCodeException(msgLanguageChange.getParameterMapByCode(languageType, "buildingUidHasExisted"));
}
} }
} }
@ -143,6 +146,7 @@ public class BuildingServiceImpl implements BuildingService {
LambdaUpdateWrapper<BasicBuilding> updateWrapper = new LambdaUpdateWrapper<>(); LambdaUpdateWrapper<BasicBuilding> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(BasicBuilding::getBuildingId, optBuildingParams.getBuildingId()) updateWrapper.eq(BasicBuilding::getBuildingId, optBuildingParams.getBuildingId())
.set(BasicBuilding::getCompanyId, optBuildingParams.getCompanyId())
.set(BasicBuilding::getName, optBuildingParams.getBuildingName()) .set(BasicBuilding::getName, optBuildingParams.getBuildingName())
.set(BasicBuilding::getAddress, optBuildingParams.getAddress()) .set(BasicBuilding::getAddress, optBuildingParams.getAddress())
.set(BasicBuilding::getUniqueIdentification, optBuildingParams.getUniqueIdentification()) .set(BasicBuilding::getUniqueIdentification, optBuildingParams.getUniqueIdentification())
@ -204,5 +208,11 @@ public class BuildingServiceImpl implements BuildingService {
return basicBuildingMapperExt.getListPage(page, pageSearchParam); return basicBuildingMapperExt.getListPage(page, pageSearchParam);
} }
@Override
public SimpleDataResponse<List<BuildingPageVO>> getBoundBuildings(String userId, String companyId, Integer languageType) {
List<BuildingPageVO> result = basicBuildingMapperExt.getBoundBuildings(userId);
return SimpleDataResponse.success(result);
}
} }

14
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/CompanyServiceImpl.java

@ -187,12 +187,14 @@ public class CompanyServiceImpl implements CompanyService {
if (200 != checkExistResult.getCode()) { if (200 != checkExistResult.getCode()) {
return checkExistResult; return checkExistResult;
} }
BasicCompany basicCompany = new BasicCompany();
BeanUtils.copyProperties(optCompanyParams,basicCompany); LambdaUpdateWrapper<BasicCompany> updateWrapper = new LambdaUpdateWrapper<>();
basicCompany.setId(optCompanyParams.getCompanyId()); updateWrapper.eq(BasicCompany::getId, optCompanyParams.getCompanyId())
basicCompany.setParentId(null); // .set(BasicCompany::getParentId, optCompanyParams.getParentId())
basicCompany.setModifyTime(System.currentTimeMillis()); .set(BasicCompany::getCompanyName, optCompanyParams.getCompanyName())
basicCompanyMapperExt.updateById(basicCompany); .set(BasicCompany::getApikey, optCompanyParams.getApikey())
.set(BasicCompany::getModifyTime, System.currentTimeMillis());
basicCompanyMapperExt.update(null, updateWrapper);
return SimpleDataResponse.success(); return SimpleDataResponse.success();
} catch (Exception e) { } catch (Exception e) {

17
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/RoleServiceImpl.java

@ -142,14 +142,17 @@ public class RoleServiceImpl implements RoleService {
} }
long currentUnix = System.currentTimeMillis(); long currentUnix = System.currentTimeMillis();
BasicRole basicRole = new BasicRole();
BeanUtils.copyProperties(param, basicRole);
basicRole.setId(param.getRoleId());
basicRole.setModifierId(userId);
basicRole.setModifyTime(currentUnix);
basicRoleMapperExt.updateById(basicRole);
insertRoleMenuRelation(userId, currentUnix, basicRole.getId(), param.getMenuIds()); LambdaUpdateWrapper<BasicRole> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(BasicRole::getId, param.getRoleId())
.set(BasicRole::getCompanyId, param.getCompanyId())
.set(BasicRole::getRoleName, param.getRoleName())
.set(BasicRole::getDescription, param.getDescription())
.set(BasicRole::getModifierId, userId)
.set(BasicRole::getModifyTime, currentUnix);
basicRoleMapperExt.update(null, updateWrapper);
insertRoleMenuRelation(userId, currentUnix, param.getRoleId(), param.getMenuIds());
return SimpleDataResponse.success(); return SimpleDataResponse.success();
} catch (Exception e) { } catch (Exception e) {

65
model2d3d-viewer-back-service/src/main/java/com/model2d3d/viewer/back/service/impl/UserServiceImpl.java

@ -11,6 +11,7 @@ import com.model2d3d.viewer.back.common.response.SimpleDataResponse;
import com.model2d3d.viewer.back.dao.ex.BasicCompanyMapperExt; import com.model2d3d.viewer.back.dao.ex.BasicCompanyMapperExt;
import com.model2d3d.viewer.back.dao.ex.BasicRoleUserRelationMapperExt; import com.model2d3d.viewer.back.dao.ex.BasicRoleUserRelationMapperExt;
import com.model2d3d.viewer.back.dao.ex.BasicUserMapperExt; import com.model2d3d.viewer.back.dao.ex.BasicUserMapperExt;
import com.model2d3d.viewer.back.dao.ex.UserBuildingRelationMapperExt;
import com.model2d3d.viewer.back.dto.user.DeleteUserParam; import com.model2d3d.viewer.back.dto.user.DeleteUserParam;
import com.model2d3d.viewer.back.dto.user.ModifyPassword; import com.model2d3d.viewer.back.dto.user.ModifyPassword;
import com.model2d3d.viewer.back.dto.user.OptUserParam; import com.model2d3d.viewer.back.dto.user.OptUserParam;
@ -28,6 +29,7 @@ import com.model2d3d.viewer.back.vo.company.CompanyPageDTO;
import com.model2d3d.viewer.back.vo.user.UserPageDTO; import com.model2d3d.viewer.back.vo.user.UserPageDTO;
import java.text.MessageFormat; import java.text.MessageFormat;
import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
@ -72,6 +74,8 @@ public class UserServiceImpl implements UserService {
private MsgLanguageChange msgLanguageChange; private MsgLanguageChange msgLanguageChange;
@Autowired @Autowired
private BasicCompanyMapperExt basicCompanyMapperExt; private BasicCompanyMapperExt basicCompanyMapperExt;
@Autowired
private UserBuildingRelationMapperExt userBuildingRelationMapperExt;
@Override @Override
@ -82,7 +86,7 @@ public class UserServiceImpl implements UserService {
param.setLoginName(param.getUsername()); param.setLoginName(param.getUsername());
// } // }
// if (!"1".equals(companyId)) {//非顶级账号 // if (!"1".equals(companyId)) {//非顶级账号
param.setCompanyId(companyId); // param.setCompanyId(companyId);
// } else if (null == param.getCompanyId()) {//admin账号必须能选择企业归属 // } else if (null == param.getCompanyId()) {//admin账号必须能选择企业归属
// return new SimpleDataResponse(ResponseCode.MSG_ERROR, "companyId is required"); // return new SimpleDataResponse(ResponseCode.MSG_ERROR, "companyId is required");
// } // }
@ -114,6 +118,8 @@ public class UserServiceImpl implements UserService {
insertUserRoleRelation(userId, currentUnix, basicUser.getId(), param.getRoleId()); insertUserRoleRelation(userId, currentUnix, basicUser.getId(), param.getRoleId());
insertUserBuildingRelation(userId, currentUnix, basicUser.getId(), param.getBuildingIds());
BasicCompany basicCompany = basicCompanyMapperExt.selectById(basicUser.getCompanyId()); BasicCompany basicCompany = basicCompanyMapperExt.selectById(basicUser.getCompanyId());
//邮箱通知密码 //邮箱通知密码
@ -132,6 +138,26 @@ public class UserServiceImpl implements UserService {
} }
} }
private void insertUserBuildingRelation(String creatorId, long currentUnix, String userId, List<Long> buildingIds) {
// 先删除原有的关联关系
if (userId != null) {
userBuildingRelationMapperExt.delete(new LambdaQueryWrapper<UserBuildingRelation>()
.eq(UserBuildingRelation::getUserId, userId));
}
// 重新插入关联关系
if (Objects.nonNull(userId) && CollectionUtils.isNotEmpty(buildingIds)) {
List<UserBuildingRelation> userBuildingRelationList = new ArrayList<>();
for (Long buildingId : buildingIds){
UserBuildingRelation userBuildingRelation = new UserBuildingRelation();
userBuildingRelation.setBuildingId(buildingId);
userBuildingRelation.setUserId(userId);
userBuildingRelation.setCreateTime(currentUnix);
userBuildingRelationList.add(userBuildingRelation);
}
userBuildingRelationMapperExt.insert(userBuildingRelationList);
}
}
private void insertUserRoleRelation(String creatorId, long currentUnix, String userId, String roleId) { private void insertUserRoleRelation(String creatorId, long currentUnix, String userId, String roleId) {
// 先删除原有的关联关系 // 先删除原有的关联关系
@ -180,11 +206,11 @@ public class UserServiceImpl implements UserService {
// if (StringUtils.isBlank(param.getLoginName())) { // if (StringUtils.isBlank(param.getLoginName())) {
param.setLoginName(param.getUsername()); param.setLoginName(param.getUsername());
// } // }
if (!"1".equals(companyId)) {//非顶级账号 // if (!"1".equals(companyId)) {//非顶级账号
param.setCompanyId(companyId); // param.setCompanyId(companyId);
} else if (null == param.getCompanyId()) {//admin账号必须能选择企业归属 // } else if (null == param.getCompanyId()) {//admin账号必须能选择企业归属
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "companyId is required"); // return new SimpleDataResponse(ResponseCode.MSG_ERROR, "companyId is required");
} // }
//校验参数 //校验参数
SimpleDataResponse checkResult = checkParam(param, languageType); SimpleDataResponse checkResult = checkParam(param, languageType);
if (200 != checkResult.getCode()) { if (200 != checkResult.getCode()) {
@ -212,19 +238,22 @@ public class UserServiceImpl implements UserService {
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "loginNameOrEmailHasExisted")); return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "loginNameOrEmailHasExisted"));
} }
long currentUnix = System.currentTimeMillis(); long currentUnix = System.currentTimeMillis();
BasicUser basicUser = new BasicUser();
BeanUtils.copyProperties(param, basicUser);
basicUser.setId(param.getUserId());
basicUser.setModifierId(userId);
basicUser.setModifyTime(currentUnix);
// basicUser.setCompanyId(companyId);
if (StringUtils.isBlank(param.getMobileNumber())) {
basicUser.setMobileNumber("");
}
basicUserMapperExt.updateById(basicUser);
insertUserRoleRelation(userId, currentUnix, basicUser.getId(), param.getRoleId()); LambdaUpdateWrapper<BasicUser> updateWrapper = new LambdaUpdateWrapper<>();
updateWrapper.eq(BasicUser::getId, param.getUserId())
.set(BasicUser::getCompanyId, param.getCompanyId())
.set(BasicUser::getUsername, param.getUsername())
.set(BasicUser::getLoginName, param.getLoginName())
.set(BasicUser::getEmail, param.getEmail())
.set(BasicUser::getMobileNumber, param.getMobileNumber())
.set(BasicUser::getModifierId, userId)
.set(BasicUser::getModifyTime, currentUnix);
basicUserMapperExt.update(null, updateWrapper);
insertUserRoleRelation(userId, currentUnix, param.getUserId(), param.getRoleId());
insertUserBuildingRelation(userId, currentUnix, param.getUserId(), param.getBuildingIds());
return SimpleDataResponse.success(); return SimpleDataResponse.success();
} catch (Exception e) { } catch (Exception e) {

11
model2d3d-viewer-back-util/src/main/java/com/model2d3d/viewer/back/util/CommonUtil.java

@ -728,7 +728,16 @@ public class CommonUtil {
} }
} }
public static List<String> commaStr2LongList(String commaStr) { public static List<Long> commaStr2LongList(String commaStr) {
if (StringUtils.isBlank(commaStr)) {
return Collections.emptyList(); // 如果字符串为空或为null,返回空列表
}
return Arrays.stream(commaStr.split(","))
.map(Long::parseLong) // 将每个字符串转换为 Long
.collect(Collectors.toList()); // 收集为 List<Long>
}
public static List<String> commaStr2StrList(String commaStr) {
if (StringUtils.isBlank(commaStr)) { if (StringUtils.isBlank(commaStr)) {
return Collections.emptyList(); // 如果字符串为空或为null,返回空列表 return Collections.emptyList(); // 如果字符串为空或为null,返回空列表
} }

Loading…
Cancel
Save