18 changed files with 931 additions and 9 deletions
@ -0,0 +1,112 @@ |
|||||
|
package com.dongjian.dashboard.back.controller; |
||||
|
|
||||
|
import com.dongjian.dashboard.back.common.exception.BusinessException; |
||||
|
import com.dongjian.dashboard.back.common.response.PageInfo; |
||||
|
import com.dongjian.dashboard.back.common.response.PageResponse; |
||||
|
import com.dongjian.dashboard.back.common.response.ResponseCode; |
||||
|
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
||||
|
import com.dongjian.dashboard.back.configurator.aspect.OperationLog; |
||||
|
import com.dongjian.dashboard.back.configurator.interceptor.AccessRequired; |
||||
|
import com.dongjian.dashboard.back.dto.level.DeleteLevelParam; |
||||
|
import com.dongjian.dashboard.back.dto.level.OptLevelParam; |
||||
|
import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam; |
||||
|
import com.dongjian.dashboard.back.service.LevelService; |
||||
|
import com.dongjian.dashboard.back.vo.level.LevelPageDTO; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.Hidden; |
||||
|
import io.swagger.v3.oas.annotations.Operation; |
||||
|
import io.swagger.v3.oas.annotations.Parameter; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import io.swagger.v3.oas.annotations.tags.Tag; |
||||
|
|
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.web.bind.annotation.*; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别管理Controller |
||||
|
* 实现物件级别的增删改查功能 |
||||
|
*/ |
||||
|
@Hidden |
||||
|
@RestController |
||||
|
@AccessRequired |
||||
|
@RequestMapping("/level") |
||||
|
@Tag(name = "物件级别管理的相关接口", description = "物件级别的增删改查操作") |
||||
|
@SuppressWarnings("unchecked") |
||||
|
public class LevelController { |
||||
|
|
||||
|
private static Logger logger = LoggerFactory.getLogger(LevelController.class); |
||||
|
|
||||
|
@Autowired |
||||
|
private LevelService levelService; |
||||
|
|
||||
|
@AccessRequired |
||||
|
@OperationLog(operation = "addLevel", remark = "添加物件级别") |
||||
|
@Operation(summary = "添加物件级别") |
||||
|
@RequestMapping(value = "/add", method = RequestMethod.POST) |
||||
|
public SimpleDataResponse add( |
||||
|
@RequestBody OptLevelParam optLevelParam, |
||||
|
@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 = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId, |
||||
|
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId, |
||||
|
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) { |
||||
|
return levelService.add(optLevelParam, CompanyId, UserId, LanguageType); |
||||
|
} |
||||
|
|
||||
|
@AccessRequired |
||||
|
@OperationLog(operation = "editLevel", remark = "编辑物件级别") |
||||
|
@Operation(summary = "编辑物件级别") |
||||
|
@RequestMapping(value = "/edit", method = RequestMethod.POST) |
||||
|
public SimpleDataResponse edit( |
||||
|
@RequestBody OptLevelParam optLevelParam, |
||||
|
@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 = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId, |
||||
|
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId, |
||||
|
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) { |
||||
|
return levelService.edit(optLevelParam, CompanyId, UserId, LanguageType); |
||||
|
} |
||||
|
|
||||
|
@AccessRequired |
||||
|
@OperationLog(operation = "deleteLevel", remark = "删除物件级别") |
||||
|
@Operation(summary = "删除物件级别") |
||||
|
@RequestMapping(value = "/batchDelete", method = RequestMethod.POST) |
||||
|
public SimpleDataResponse batchDelete( |
||||
|
@RequestBody DeleteLevelParam deleteLevelParam, |
||||
|
@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 = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId, |
||||
|
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long CompanyId, |
||||
|
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType) { |
||||
|
return levelService.batchDelete(deleteLevelParam, CompanyId, UserId, LanguageType); |
||||
|
} |
||||
|
|
||||
|
@AccessRequired |
||||
|
@OperationLog(operation = "queryLevel", remark = "获取物件级别列表") |
||||
|
@Operation(summary = "获取物件级别列表") |
||||
|
@RequestMapping(value = "/getListPage", method = RequestMethod.GET) |
||||
|
public PageResponse<PageInfo<LevelPageDTO>> getListPage( |
||||
|
@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 = "User ID", required = true, schema = @Schema(defaultValue = "1")) @RequestHeader(required = true) Long UserId, |
||||
|
@Parameter(name = "CompanyId", description = "ID of the company to which the user belongs", required = false, schema = @Schema(defaultValue = "1")) @RequestHeader(required = false) Long CompanyId, |
||||
|
@Parameter(name = "LanguageType", description = "Language type (0: Chinese, 1: English, 2: Japanese)", required = true, schema = @Schema(defaultValue = "2")) @RequestHeader(required = true) Integer LanguageType, |
||||
|
PageLevelSearchParam pageLevelSearchParam |
||||
|
) throws BusinessException { |
||||
|
|
||||
|
pageLevelSearchParam.setUserId(UserId); |
||||
|
PageResponse<PageInfo<LevelPageDTO>> pageResponse = new PageResponse<>(); |
||||
|
try { |
||||
|
pageResponse.setData(levelService.getListPage(pageLevelSearchParam, CompanyId, UserId, LanguageType)); |
||||
|
pageResponse.setCode(ResponseCode.SUCCESS); |
||||
|
pageResponse.setMsg("success"); |
||||
|
} catch (Exception e) { |
||||
|
logger.error("查询物件级别列表报错", e); |
||||
|
pageResponse.setCode(ResponseCode.SERVER_ERROR); |
||||
|
pageResponse.setMsg("service error"); |
||||
|
} |
||||
|
return pageResponse; |
||||
|
} |
||||
|
} |
||||
@ -0,0 +1,35 @@ |
|||||
|
package com.dongjian.dashboard.back.dao.ex; |
||||
|
|
||||
|
import com.dongjian.dashboard.back.dto.level.LevelEntity; |
||||
|
import com.dongjian.dashboard.back.dto.level.LevelRelationEntity; |
||||
|
import com.dongjian.dashboard.back.dto.level.OptLevelParam; |
||||
|
import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam; |
||||
|
import com.dongjian.dashboard.back.vo.level.LevelPageDTO; |
||||
|
import org.apache.ibatis.annotations.Mapper; |
||||
|
import org.apache.ibatis.annotations.Param; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
@Mapper |
||||
|
public interface LevelMapperExt { |
||||
|
|
||||
|
long checkExist(OptLevelParam param); |
||||
|
|
||||
|
void saveLevel(LevelEntity levelEntity); |
||||
|
|
||||
|
void saveLevelRelation(LevelRelationEntity levelRelationEntity); |
||||
|
|
||||
|
long countParentLevel(OptLevelParam param); |
||||
|
|
||||
|
void updateLevel(LevelEntity levelEntity); |
||||
|
|
||||
|
void deleteLevelRelation(LevelRelationEntity param); |
||||
|
|
||||
|
long checkIfReferencedByChildren(@Param("param") LevelRelationEntity param, @Param("idList") List<Long> idList); |
||||
|
|
||||
|
void deleteLevelByIdList(@Param("tableName") String tableName, @Param("idList") List<Long> idList); |
||||
|
|
||||
|
void deleteLevelRelationByIdList(@Param("param") LevelRelationEntity param, @Param("idList") List<Long> idList); |
||||
|
|
||||
|
List<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam); |
||||
|
} |
||||
@ -0,0 +1,183 @@ |
|||||
|
<?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.dongjian.dashboard.back.dao.ex.LevelMapperExt"> |
||||
|
|
||||
|
<!-- 根据levelType选择对应的表名 --> |
||||
|
<sql id="selectTable"> |
||||
|
<choose> |
||||
|
<when test="levelType == 1">dashboard_level_branch</when> |
||||
|
<when test="levelType == 2">dashboard_level_store</when> |
||||
|
<when test="levelType == 3">dashboard_level_area</when> |
||||
|
<when test="levelType == 4">dashboard_level_site</when> |
||||
|
</choose> |
||||
|
</sql> |
||||
|
|
||||
|
<sql id="selectParentTable"> |
||||
|
<choose> |
||||
|
<when test="levelType == 2">dashboard_level_branch</when> |
||||
|
<when test="levelType == 3">dashboard_level_store</when> |
||||
|
<when test="levelType == 4">dashboard_level_area</when> |
||||
|
</choose> |
||||
|
</sql> |
||||
|
|
||||
|
<!-- 检查级别名称是否存在 --> |
||||
|
<select id="checkExist" resultType="java.lang.Long"> |
||||
|
SELECT |
||||
|
COUNT(1) |
||||
|
FROM |
||||
|
<include refid="selectTable" /> |
||||
|
WHERE `flag` = 0 AND name = #{levelName} AND company_id = #{companyId} |
||||
|
<if test="id != null"> |
||||
|
AND id != #{id} |
||||
|
</if> |
||||
|
|
||||
|
</select> |
||||
|
|
||||
|
<select id="countParentLevel" resultType="java.lang.Long"> |
||||
|
SELECT |
||||
|
COUNT(1) |
||||
|
FROM |
||||
|
<include refid="selectParentTable" /> |
||||
|
WHERE `flag` = 0 AND company_id = #{companyId} |
||||
|
AND id IN <foreach collection="parentIdList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</select> |
||||
|
|
||||
|
<!-- 保存级别信息到对应表 --> |
||||
|
<insert id="saveLevel" useGeneratedKeys="true" keyProperty="id" keyColumn="id"> |
||||
|
INSERT INTO |
||||
|
<include refid="selectTable" /> |
||||
|
(company_id, name, remark, created_by, created_at) |
||||
|
VALUES |
||||
|
(#{companyId}, #{name}, #{remark}, #{createdBy}, #{createdAt}) |
||||
|
</insert> |
||||
|
|
||||
|
<!-- 保存级别信息到对应表 --> |
||||
|
<insert id="saveLevelRelation"> |
||||
|
INSERT INTO |
||||
|
${tableName} |
||||
|
(${parentField}, ${childField}, created_by, created_at) |
||||
|
VALUES |
||||
|
(#{parentId}, #{childId}, #{createdBy}, #{createdAt}) |
||||
|
</insert> |
||||
|
|
||||
|
<delete id="deleteLevelRelation"> |
||||
|
delete from ${tableName} WHERE ${childField} = #{childId} |
||||
|
</delete> |
||||
|
|
||||
|
<!-- 更新级别信息到对应表 --> |
||||
|
<update id="updateLevel"> |
||||
|
UPDATE |
||||
|
<include refid="selectTable" /> |
||||
|
SET |
||||
|
name = #{name}, |
||||
|
remark = #{remark}, |
||||
|
updated_at = #{updatedAt}, |
||||
|
updated_by = #{updatedBy} |
||||
|
WHERE id = #{id} |
||||
|
</update> |
||||
|
|
||||
|
<select id="checkIfReferencedByChildren" resultType="java.lang.Long"> |
||||
|
SELECT |
||||
|
COUNT(1) |
||||
|
FROM |
||||
|
${param.tableName} |
||||
|
WHERE ${param.parentField} IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</select> |
||||
|
|
||||
|
<update id="deleteLevelByIdList"> |
||||
|
UPDATE |
||||
|
${tableName} |
||||
|
SET |
||||
|
`flag` = 1 |
||||
|
WHERE id IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</update> |
||||
|
|
||||
|
<delete id="deleteLevelRelationByIdList"> |
||||
|
delete from ${param.tableName} |
||||
|
WHERE ${param.childField} |
||||
|
IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</delete> |
||||
|
|
||||
|
<sql id="commonField"> |
||||
|
base.`id`, |
||||
|
base.company_id, |
||||
|
base.`name` AS levelName, |
||||
|
base.remark, |
||||
|
base.created_by, |
||||
|
base.created_at, |
||||
|
base.updated_by, |
||||
|
base.updated_at |
||||
|
</sql> |
||||
|
|
||||
|
<sql id="commonWhere"> |
||||
|
base.flag =0 |
||||
|
<if test="idList != null and idList.size() > 0"> |
||||
|
AND base.`id` IN <foreach collection="idList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</if> |
||||
|
<if test="levelName != null and levelName != ''"> |
||||
|
AND base.`name` like CONCAT('%',#{levelName},'%') |
||||
|
</if> |
||||
|
<if test="parentIdList != null and parentIdList.size() > 0"> |
||||
|
AND pa.id IN <foreach collection="parentIdList" item="item" open="(" separator="," close=")">#{item}</foreach> |
||||
|
</if> |
||||
|
</sql> |
||||
|
|
||||
|
<!-- 分页查询级别列表 --> |
||||
|
<select id="getListPage" resultType="com.dongjian.dashboard.back.vo.level.LevelPageDTO"> |
||||
|
<choose> |
||||
|
<when test="levelType == 1"> |
||||
|
SELECT |
||||
|
1 AS levelType, |
||||
|
<include refid="commonField" /> |
||||
|
FROM |
||||
|
dashboard_level_branch base |
||||
|
WHERE |
||||
|
<include refid="commonWhere" /> |
||||
|
</when> |
||||
|
<when test="levelType == 2"> |
||||
|
SELECT |
||||
|
2 AS levelType, |
||||
|
GROUP_CONCAT(pa.id) AS parentIds, |
||||
|
GROUP_CONCAT(pa.`name`) AS parentNames, |
||||
|
<include refid="commonField" /> |
||||
|
FROM |
||||
|
dashboard_level_store base |
||||
|
LEFT JOIN dashboard_level_relation_branch_store rela ON base.`id` = rela.store_id |
||||
|
LEFT JOIN dashboard_level_branch pa ON rela.branch_id = pa.`id` |
||||
|
WHERE |
||||
|
<include refid="commonWhere" /> |
||||
|
GROUP BY base.`id` |
||||
|
</when> |
||||
|
<when test="levelType == 3"> |
||||
|
SELECT |
||||
|
3 AS levelType, |
||||
|
GROUP_CONCAT(pa.id) AS parentIds, |
||||
|
GROUP_CONCAT(pa.`name`) AS parentNames, |
||||
|
<include refid="commonField" /> |
||||
|
FROM |
||||
|
dashboard_level_area base |
||||
|
LEFT JOIN dashboard_level_relation_store_area rela ON base.`id` = rela.area_id |
||||
|
LEFT JOIN dashboard_level_store pa ON rela.store_id = pa.`id` |
||||
|
WHERE |
||||
|
<include refid="commonWhere" /> |
||||
|
GROUP BY base.`id` |
||||
|
</when> |
||||
|
<when test="levelType == 4"> |
||||
|
SELECT |
||||
|
4 AS levelType, |
||||
|
GROUP_CONCAT(pa.id) AS parentIds, |
||||
|
GROUP_CONCAT(pa.`name`) AS parentNames, |
||||
|
<include refid="commonField" /> |
||||
|
FROM |
||||
|
dashboard_level_site base |
||||
|
LEFT JOIN dashboard_level_relation_area_site rela ON base.`id` = rela.site_id |
||||
|
LEFT JOIN dashboard_level_area pa ON rela.area_id = pa.`id` |
||||
|
WHERE |
||||
|
<include refid="commonWhere" /> |
||||
|
GROUP BY base.`id` |
||||
|
</when> |
||||
|
</choose> |
||||
|
order BY base.`id` desc |
||||
|
</select> |
||||
|
|
||||
|
</mapper> |
||||
@ -0,0 +1,26 @@ |
|||||
|
package com.dongjian.dashboard.back.dto.level; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别删除参数类 |
||||
|
* 用于批量删除物件级别 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class DeleteLevelParam { |
||||
|
|
||||
|
/** |
||||
|
* 要删除的物件级别ID列表 |
||||
|
*/ |
||||
|
@Schema(description = "Id,多个使用逗号连接",example = "3,5", required = true) |
||||
|
private String ids; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别类型(1-支社、2-各支店、3-area、4-site) |
||||
|
*/ |
||||
|
@Schema(description = "物件级别类型(1-支社、2-各支店、3-area、4-site)",example = "2", required = true) |
||||
|
private Integer levelType; |
||||
|
} |
||||
@ -0,0 +1,56 @@ |
|||||
|
package com.dongjian.dashboard.back.dto.level; |
||||
|
|
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别实体类 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class LevelEntity { |
||||
|
|
||||
|
private Long companyId; |
||||
|
|
||||
|
/** |
||||
|
* 主键ID |
||||
|
*/ |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别名称 |
||||
|
*/ |
||||
|
private String name; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别类型:1-支社 2-各支店 3-area 4-site |
||||
|
*/ |
||||
|
private Integer levelType; |
||||
|
|
||||
|
/** |
||||
|
* 描述 |
||||
|
*/ |
||||
|
private String remark; |
||||
|
|
||||
|
/** |
||||
|
* 创建时间 |
||||
|
*/ |
||||
|
private Long createdAt; |
||||
|
|
||||
|
/** |
||||
|
* 创建人ID |
||||
|
*/ |
||||
|
private Long createdBy; |
||||
|
|
||||
|
/** |
||||
|
* 更新时间 |
||||
|
*/ |
||||
|
private Long updatedAt; |
||||
|
|
||||
|
/** |
||||
|
* 更新人ID |
||||
|
*/ |
||||
|
private Long updatedBy; |
||||
|
|
||||
|
|
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
package com.dongjian.dashboard.back.dto.level; |
||||
|
|
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别关系操作实体类 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class LevelRelationEntity { |
||||
|
|
||||
|
private String parentField; |
||||
|
|
||||
|
private String childField; |
||||
|
|
||||
|
private Long parentId; |
||||
|
|
||||
|
private Long childId; |
||||
|
|
||||
|
private String tableName; |
||||
|
|
||||
|
private Long createdAt; |
||||
|
|
||||
|
private Long createdBy; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,50 @@ |
|||||
|
package com.dongjian.dashboard.back.dto.level; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别操作参数类 |
||||
|
* 用于添加和编辑物件级别 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class OptLevelParam { |
||||
|
|
||||
|
/** |
||||
|
* 主键ID(编辑时必填) |
||||
|
*/ |
||||
|
@Schema(description = "物件级别id,新增时不需要)",example = "2", required = true) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别名称 |
||||
|
*/ |
||||
|
@Schema(description = "名称)",example = "2", required = true) |
||||
|
private String levelName; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别类型:1-支社 2-各支店 3-area 4-site |
||||
|
*/ |
||||
|
@Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) |
||||
|
private Integer levelType; |
||||
|
|
||||
|
/** |
||||
|
* 父级ID |
||||
|
*/ |
||||
|
@Schema(description = "上一层级ID,可以属于多个上级层级, levelType=1时不需要传",example = "[]", required = true) |
||||
|
private List<Long> parentIdList; |
||||
|
|
||||
|
/** |
||||
|
* 描述 |
||||
|
*/ |
||||
|
@Schema(description = "备注",example = "2") |
||||
|
private String remark; |
||||
|
|
||||
|
|
||||
|
@Schema(description = "所属企业ID",example = "2", hidden = true) |
||||
|
private Long companyId; |
||||
|
} |
||||
@ -0,0 +1,36 @@ |
|||||
|
package com.dongjian.dashboard.back.dto.level; |
||||
|
|
||||
|
import com.dongjian.dashboard.back.dto.BaseSearchParams; |
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
import java.util.List; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别分页查询参数类 |
||||
|
* 用于分页查询物件级别列表 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class PageLevelSearchParam extends BaseSearchParams { |
||||
|
|
||||
|
@Schema(description = "层级id") |
||||
|
private String ids; |
||||
|
|
||||
|
@Schema(description = "层级id", hidden = true) |
||||
|
private List<Long> idList; |
||||
|
|
||||
|
@Schema(description = "父级层级id") |
||||
|
private String parentIds; |
||||
|
|
||||
|
@Schema(description = "父级层级id", hidden = true) |
||||
|
private List<Long> parentIdList; |
||||
|
|
||||
|
@Schema(description = "名称",example = "jyk2") |
||||
|
private String levelName; |
||||
|
|
||||
|
@Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) |
||||
|
private Integer levelType; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,55 @@ |
|||||
|
package com.dongjian.dashboard.back.vo.level; |
||||
|
|
||||
|
import io.swagger.v3.oas.annotations.media.Schema; |
||||
|
import lombok.Getter; |
||||
|
import lombok.Setter; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别分页查询DTO类 |
||||
|
* 用于返回物件级别分页查询结果 |
||||
|
*/ |
||||
|
@Setter |
||||
|
@Getter |
||||
|
public class LevelPageDTO { |
||||
|
|
||||
|
/** |
||||
|
* 主键ID(编辑时必填) |
||||
|
*/ |
||||
|
@Schema(description = "物件级别id,新增时不需要)",example = "2", required = true) |
||||
|
private Long id; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别名称 |
||||
|
*/ |
||||
|
@Schema(description = "名称)",example = "2", required = true) |
||||
|
private String levelName; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别类型:1-支社 2-各支店 3-area 4-site |
||||
|
*/ |
||||
|
@Schema(description = "级别类型:1-支社 2-各支店 3-area 4-site",example = "2", required = true) |
||||
|
private Integer levelType; |
||||
|
|
||||
|
/** |
||||
|
* 父级ID |
||||
|
*/ |
||||
|
@Schema(description = "上一层级ID",example = "2", required = true) |
||||
|
private String parentIds; |
||||
|
|
||||
|
/** |
||||
|
* 父级名称 |
||||
|
*/ |
||||
|
@Schema(description = "上一层级名称",example = "2") |
||||
|
private String parentNames; |
||||
|
|
||||
|
/** |
||||
|
* 描述 |
||||
|
*/ |
||||
|
@Schema(description = "备注",example = "2") |
||||
|
private String remark; |
||||
|
|
||||
|
|
||||
|
@Schema(description = "创建时间,毫秒级时间戳",example = "2") |
||||
|
private Long createdAt; |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,23 @@ |
|||||
|
package com.dongjian.dashboard.back.service; |
||||
|
|
||||
|
import com.dongjian.dashboard.back.common.response.PageInfo; |
||||
|
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
||||
|
import com.dongjian.dashboard.back.dto.level.DeleteLevelParam; |
||||
|
import com.dongjian.dashboard.back.dto.level.OptLevelParam; |
||||
|
import com.dongjian.dashboard.back.dto.level.PageLevelSearchParam; |
||||
|
import com.dongjian.dashboard.back.vo.level.LevelPageDTO; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别Service接口 |
||||
|
* 定义物件级别的增删改查操作 |
||||
|
*/ |
||||
|
public interface LevelService { |
||||
|
|
||||
|
SimpleDataResponse add(OptLevelParam optLevelParam, Long companyId, Long userId, Integer languageType); |
||||
|
|
||||
|
SimpleDataResponse edit(OptLevelParam optLevelParam, Long companyId, Long userId, Integer languageType); |
||||
|
|
||||
|
SimpleDataResponse batchDelete(DeleteLevelParam deleteLevelParam, Long companyId, Long userId, Integer languageType); |
||||
|
|
||||
|
PageInfo<LevelPageDTO> getListPage(PageLevelSearchParam pageLevelSearchParam, Long companyId, Long userId, Integer languageType); |
||||
|
} |
||||
@ -0,0 +1,297 @@ |
|||||
|
package com.dongjian.dashboard.back.service.impl; |
||||
|
|
||||
|
import com.dongjian.dashboard.back.common.language.msg.MsgLanguageChange; |
||||
|
import com.dongjian.dashboard.back.common.response.PageInfo; |
||||
|
import com.dongjian.dashboard.back.common.response.ResponseCode; |
||||
|
import com.dongjian.dashboard.back.common.response.SimpleDataResponse; |
||||
|
import com.dongjian.dashboard.back.dao.ex.LevelMapperExt; |
||||
|
import com.dongjian.dashboard.back.dto.level.*; |
||||
|
import com.dongjian.dashboard.back.service.LevelService; |
||||
|
import com.dongjian.dashboard.back.service.common.CommonOpt; |
||||
|
import com.dongjian.dashboard.back.vo.level.LevelPageDTO; |
||||
|
import com.github.pagehelper.PageHelper; |
||||
|
import org.apache.commons.collections.CollectionUtils; |
||||
|
import org.apache.commons.lang3.StringUtils; |
||||
|
import org.slf4j.Logger; |
||||
|
import org.slf4j.LoggerFactory; |
||||
|
import org.springframework.beans.BeanUtils; |
||||
|
import org.springframework.beans.factory.annotation.Autowired; |
||||
|
import org.springframework.stereotype.Service; |
||||
|
import org.springframework.transaction.annotation.Transactional; |
||||
|
import org.springframework.transaction.interceptor.TransactionAspectSupport; |
||||
|
|
||||
|
import java.util.Arrays; |
||||
|
import java.util.Collections; |
||||
|
import java.util.List; |
||||
|
import java.util.stream.Collectors; |
||||
|
|
||||
|
/** |
||||
|
* 物件级别Service实现类 |
||||
|
* 实现物件级别的业务逻辑 |
||||
|
*/ |
||||
|
@Service |
||||
|
public class LevelServiceImpl implements LevelService { |
||||
|
|
||||
|
private static Logger logger = LoggerFactory.getLogger(LevelServiceImpl.class); |
||||
|
|
||||
|
|
||||
|
@Autowired |
||||
|
private CommonOpt commonOpt; |
||||
|
@Autowired |
||||
|
private MsgLanguageChange msgLanguageChange; |
||||
|
|
||||
|
@Autowired |
||||
|
private LevelMapperExt levelMapperExt; |
||||
|
|
||||
|
|
||||
|
@Override |
||||
|
@Transactional |
||||
|
public SimpleDataResponse add(OptLevelParam param, Long companyId, Long userId, Integer languageType) { |
||||
|
try { |
||||
|
param.setCompanyId(companyId); |
||||
|
param.setId(null); |
||||
|
//校验参数
|
||||
|
SimpleDataResponse checkResult = checkParam(param, languageType); |
||||
|
if (200 != checkResult.getCode()) { |
||||
|
return checkResult; |
||||
|
} |
||||
|
//重复校验
|
||||
|
if (checkExist(param) > 0) { |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "levelNameExist")); |
||||
|
} |
||||
|
//父级id是否有效
|
||||
|
if (1 != param.getLevelType() && isParentLevelInvalid(param)){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "invalidParentLevel")); |
||||
|
} |
||||
|
|
||||
|
long currentUnix = System.currentTimeMillis(); |
||||
|
LevelEntity levelEntity = new LevelEntity(); |
||||
|
BeanUtils.copyProperties(param, levelEntity); |
||||
|
levelEntity.setName(param.getLevelName()); |
||||
|
levelEntity.setCreatedBy(userId); |
||||
|
levelEntity.setCreatedAt(currentUnix); |
||||
|
levelEntity.setCompanyId(companyId); |
||||
|
levelMapperExt.saveLevel(levelEntity); |
||||
|
|
||||
|
if (1 != param.getLevelType()) { |
||||
|
//插入关联
|
||||
|
insertLevelRelation(param, levelEntity, 1); |
||||
|
} |
||||
|
|
||||
|
return SimpleDataResponse.success(); |
||||
|
} catch (Exception e) { |
||||
|
logger.error("添加层级报错", e); |
||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
||||
|
return new SimpleDataResponse(ResponseCode.SERVER_ERROR, e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private void insertLevelRelation(OptLevelParam param, LevelEntity levelEntity, int optType) { |
||||
|
for (Long parentId : param.getParentIdList()){ |
||||
|
LevelRelationEntity levelRelationEntity =new LevelRelationEntity(); |
||||
|
switch (param.getLevelType()){ |
||||
|
case 2: |
||||
|
levelRelationEntity.setParentField("branch_id"); |
||||
|
levelRelationEntity.setChildField("store_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_branch_store"); |
||||
|
break; |
||||
|
case 3: |
||||
|
levelRelationEntity.setParentField("store_id"); |
||||
|
levelRelationEntity.setChildField("area_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_store_area"); |
||||
|
break; |
||||
|
case 4: |
||||
|
levelRelationEntity.setParentField("area_id"); |
||||
|
levelRelationEntity.setChildField("site_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_area_site"); |
||||
|
break; |
||||
|
} |
||||
|
levelRelationEntity.setParentId(parentId); |
||||
|
levelRelationEntity.setChildId(levelEntity.getId()); |
||||
|
if (1 == optType){ |
||||
|
levelRelationEntity.setCreatedBy(levelEntity.getCreatedBy()); |
||||
|
levelRelationEntity.setCreatedAt(levelEntity.getCreatedAt()); |
||||
|
} else if (2 == optType){ |
||||
|
levelRelationEntity.setCreatedBy(levelEntity.getUpdatedBy()); |
||||
|
levelRelationEntity.setCreatedAt(levelEntity.getUpdatedAt()); |
||||
|
} |
||||
|
|
||||
|
levelMapperExt.saveLevelRelation(levelRelationEntity); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
private boolean isParentLevelInvalid(OptLevelParam param) { |
||||
|
long checkSize = levelMapperExt.countParentLevel(param); |
||||
|
return checkSize != param.getParentIdList().size(); |
||||
|
} |
||||
|
|
||||
|
private long checkExist(OptLevelParam param) { |
||||
|
return levelMapperExt.checkExist(param); |
||||
|
} |
||||
|
|
||||
|
private SimpleDataResponse checkParam(OptLevelParam param, Integer languageType) { |
||||
|
if(StringUtils.isBlank(param.getLevelName()) || param.getLevelName().length() > 255){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "Parameter [levelName] error"); |
||||
|
} |
||||
|
if(null == param.getLevelType() || param.getLevelType() < 1 || param.getLevelType() > 4){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "Parameter [levelType] error"); |
||||
|
} |
||||
|
if(1 != param.getLevelType() && CollectionUtils.isEmpty(param.getParentIdList())){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, "parentIdList can not be null"); |
||||
|
} |
||||
|
return SimpleDataResponse.success(); |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public SimpleDataResponse edit(OptLevelParam param, Long companyId, Long userId, Integer languageType) { |
||||
|
try { |
||||
|
param.setCompanyId(companyId); |
||||
|
//校验参数
|
||||
|
SimpleDataResponse checkResult = checkParam(param, languageType); |
||||
|
if (200 != checkResult.getCode()) { |
||||
|
return checkResult; |
||||
|
} |
||||
|
//重复校验
|
||||
|
if (checkExist(param) > 0) { |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "levelNameExist")); |
||||
|
} |
||||
|
//父级id是否有效
|
||||
|
if (1 != param.getLevelType() && isParentLevelInvalid(param)){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "invalidParentLevel")); |
||||
|
} |
||||
|
|
||||
|
long currentUnix = System.currentTimeMillis(); |
||||
|
LevelEntity levelEntity = new LevelEntity(); |
||||
|
BeanUtils.copyProperties(param, levelEntity); |
||||
|
levelEntity.setName(param.getLevelName()); |
||||
|
levelEntity.setUpdatedBy(userId); |
||||
|
levelEntity.setUpdatedAt(currentUnix); |
||||
|
levelMapperExt.updateLevel(levelEntity); |
||||
|
|
||||
|
if (1 != param.getLevelType()){ |
||||
|
//先删除关联关系
|
||||
|
LevelRelationEntity deleteLevelRelationEntity = new LevelRelationEntity(); |
||||
|
deleteLevelRelationEntity.setChildId(param.getId()); |
||||
|
switch (param.getLevelType()){ |
||||
|
case 2: |
||||
|
deleteLevelRelationEntity.setChildField("store_id"); |
||||
|
deleteLevelRelationEntity.setTableName("dashboard_level_relation_branch_store"); |
||||
|
break; |
||||
|
case 3: |
||||
|
deleteLevelRelationEntity.setChildField("area_id"); |
||||
|
deleteLevelRelationEntity.setTableName("dashboard_level_relation_store_area"); |
||||
|
break; |
||||
|
case 4: |
||||
|
deleteLevelRelationEntity.setChildField("site_id"); |
||||
|
deleteLevelRelationEntity.setTableName("dashboard_level_relation_area_site"); |
||||
|
break; |
||||
|
} |
||||
|
levelMapperExt.deleteLevelRelation(deleteLevelRelationEntity); |
||||
|
//插入关联
|
||||
|
insertLevelRelation(param, levelEntity, 2); |
||||
|
} |
||||
|
|
||||
|
return SimpleDataResponse.success(); |
||||
|
} catch (Exception e) { |
||||
|
logger.error("编辑层级报错", e); |
||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
||||
|
return new SimpleDataResponse(ResponseCode.SERVER_ERROR, e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public SimpleDataResponse batchDelete(DeleteLevelParam deleteLevelParam, Long companyId, Long userId, Integer languageType) { |
||||
|
try { |
||||
|
List<Long> idList = Arrays.asList(deleteLevelParam.getIds().split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList()); |
||||
|
|
||||
|
// 检查是否有下级引用(支社、支店、area级别需要检查,site级别没有下级)
|
||||
|
Integer levelType = deleteLevelParam.getLevelType(); |
||||
|
LevelRelationEntity levelRelationEntity =new LevelRelationEntity(); |
||||
|
switch (levelType){ |
||||
|
case 1: |
||||
|
levelRelationEntity.setParentField("branch_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_branch_store"); |
||||
|
break; |
||||
|
case 2: |
||||
|
levelRelationEntity.setParentField("store_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_store_area"); |
||||
|
break; |
||||
|
case 3: |
||||
|
levelRelationEntity.setParentField("area_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_area_site"); |
||||
|
break; |
||||
|
case 4: |
||||
|
levelRelationEntity.setParentField("site_id"); |
||||
|
levelRelationEntity.setTableName("dashboard_level_relation_site_building"); |
||||
|
break; |
||||
|
} |
||||
|
if (levelMapperExt.checkIfReferencedByChildren(levelRelationEntity, idList) > 0){ |
||||
|
return new SimpleDataResponse(ResponseCode.MSG_ERROR, msgLanguageChange.getParameterMapByCode(languageType, "levelReferencedByChildren")); |
||||
|
} |
||||
|
|
||||
|
//基础表删除
|
||||
|
String tableName = switch (levelType) { |
||||
|
case 1 -> "dashboard_level_branch"; |
||||
|
case 2 -> "dashboard_level_store"; |
||||
|
case 3 -> "dashboard_level_area"; |
||||
|
case 4 -> "dashboard_level_site"; |
||||
|
default -> ""; |
||||
|
}; |
||||
|
levelMapperExt.deleteLevelByIdList(tableName, idList); |
||||
|
|
||||
|
//删除关联表
|
||||
|
LevelRelationEntity deleteEntity =new LevelRelationEntity(); |
||||
|
switch (levelType){ |
||||
|
case 1: |
||||
|
deleteEntity.setChildField("branch_id"); |
||||
|
deleteEntity.setTableName("dashboard_level_relation_branch_store"); |
||||
|
break; |
||||
|
case 2: |
||||
|
deleteEntity.setChildField("store_id"); |
||||
|
deleteEntity.setTableName("dashboard_level_relation_branch_store"); |
||||
|
break; |
||||
|
case 3: |
||||
|
deleteEntity.setChildField("area_id"); |
||||
|
deleteEntity.setTableName("dashboard_level_relation_store_area"); |
||||
|
break; |
||||
|
case 4: |
||||
|
deleteEntity.setChildField("site_id"); |
||||
|
deleteEntity.setTableName("dashboard_level_relation_area_site"); |
||||
|
break; |
||||
|
} |
||||
|
levelMapperExt.deleteLevelRelationByIdList(deleteEntity, idList); |
||||
|
|
||||
|
return SimpleDataResponse.success(); |
||||
|
} catch (Exception e) { |
||||
|
logger.error("删除层级报错", e); |
||||
|
TransactionAspectSupport.currentTransactionStatus().setRollbackOnly(); |
||||
|
return new SimpleDataResponse(ResponseCode.SERVER_ERROR, e.getMessage()); |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
@Override |
||||
|
public PageInfo<LevelPageDTO> getListPage(PageLevelSearchParam pageSearchParam, Long companyId, Long userId, Integer languageType) { |
||||
|
Integer levelType = pageSearchParam.getLevelType(); |
||||
|
if (null == levelType){ |
||||
|
logger.error("leveType required........"); |
||||
|
return PageInfo.emptyPageInfo(); |
||||
|
} |
||||
|
//list防${}注入
|
||||
|
if (StringUtils.isBlank(pageSearchParam.getCompanyIds())) { |
||||
|
pageSearchParam.setCompanyIdList(Collections.singletonList(companyId)); |
||||
|
} else { |
||||
|
pageSearchParam.setCompanyIdList(commonOpt.filterCompanyIds(companyId, pageSearchParam.getCompanyIds())); |
||||
|
} |
||||
|
if (StringUtils.isNotBlank(pageSearchParam.getIds())) { |
||||
|
pageSearchParam.setIdList(Arrays.asList(pageSearchParam.getIds().split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); |
||||
|
} |
||||
|
if (1 != levelType && StringUtils.isNotBlank(pageSearchParam.getParentIds())){ |
||||
|
pageSearchParam.setParentIdList(Arrays.asList(pageSearchParam.getParentIds().split(",")).stream().map(s -> Long.parseLong(s.trim())).collect(Collectors.toList())); |
||||
|
} |
||||
|
|
||||
|
PageHelper.startPage(pageSearchParam.getPageNum() == null ? 1 : pageSearchParam.getPageNum(), pageSearchParam.getPageSize() == null ? 20 : pageSearchParam.getPageSize()); |
||||
|
List<LevelPageDTO> resultList = levelMapperExt.getListPage(pageSearchParam); |
||||
|
|
||||
|
return new PageInfo<>(resultList); |
||||
|
} |
||||
|
} |
||||
Loading…
Reference in new issue