Browse Source

Merge remote-tracking branch 'origin/master'

master
luogw 1 month ago
parent
commit
6505f0c0de
  1. 24
      src/main/java/com/project/base/config/InsertBatchOnDuplicateKeyUpdate.java
  2. 13
      src/main/java/com/project/base/config/MybatisPlusConfig.java
  3. 10
      src/main/java/com/project/base/domain/advice/GlobalExceptionHandlerAdvice.java
  4. 1
      src/main/java/com/project/base/domain/dto/BaseDTO.java
  5. 9
      src/main/java/com/project/base/domain/entity/BaseEntity.java
  6. 10
      src/main/java/com/project/base/domain/param/BaseParam.java
  7. 23
      src/main/java/com/project/base/domain/result/PageResult.java
  8. 7
      src/main/java/com/project/base/domain/result/Result.java
  9. 2
      src/main/java/com/project/base/domain/result/ResultCodeEnum.java
  10. 14
      src/main/java/com/project/base/domain/utils/PageConverter.java
  11. 18
      src/main/java/com/project/ding/application/UserApplicationService.java
  12. 37
      src/main/java/com/project/ding/application/impl/UserApplicationServiceImpl.java
  13. 36
      src/main/java/com/project/ding/controller/UserController.java
  14. 7
      src/main/java/com/project/ding/domain/dto/UserDTO.java
  15. 2
      src/main/java/com/project/ding/domain/entity/DepartmentEntity.java
  16. 5
      src/main/java/com/project/ding/domain/entity/SyncLogEntity.java
  17. 5
      src/main/java/com/project/ding/domain/entity/UserEntity.java
  18. 12
      src/main/java/com/project/ding/domain/param/UserParam.java
  19. 7
      src/main/java/com/project/ding/domain/service/GetLastSyncTimeSyncLogDomainService.java
  20. 13
      src/main/java/com/project/ding/domain/service/SearchUserDomainService.java
  21. 32
      src/main/java/com/project/ding/domain/service/impl/GetLastSyncTimeSyncLogDomainServiceImpl.java
  22. 59
      src/main/java/com/project/ding/domain/service/impl/SearchUserDomainServiceImpl.java
  23. 13
      src/main/java/com/project/information/application/BusinessGroupApplicationService.java
  24. 31
      src/main/java/com/project/information/application/impl/BusinessGroupApplicationServiceImpl.java
  25. 33
      src/main/java/com/project/information/controller/BusinessGroupController.java
  26. 10
      src/main/java/com/project/information/domain/dto/BusinessGroupDTO.java
  27. 14
      src/main/java/com/project/information/domain/dto/InformationDTO.java
  28. 14
      src/main/java/com/project/information/domain/dto/ProductLineDTO.java
  29. 29
      src/main/java/com/project/information/domain/entity/BusinessGroupEntity.java
  30. 41
      src/main/java/com/project/information/domain/entity/InformationEntity.java
  31. 43
      src/main/java/com/project/information/domain/entity/ProductLineEntity.java
  32. 8
      src/main/java/com/project/information/domain/param/BusinessGroupParam.java
  33. 8
      src/main/java/com/project/information/domain/param/InformationParam.java
  34. 8
      src/main/java/com/project/information/domain/param/ProductLineParam.java
  35. 10
      src/main/java/com/project/information/domain/service/BatchSaveBusinessGroupDomainService.java
  36. 8
      src/main/java/com/project/information/domain/service/BusinessGroupBaseService.java
  37. 12
      src/main/java/com/project/information/domain/service/SearchBusinessGroupDomainService.java
  38. 38
      src/main/java/com/project/information/domain/service/impl/BatchSaveBusinessGroupDomainServiceImpl.java
  39. 11
      src/main/java/com/project/information/domain/service/impl/BusinessGroupBaseServiceImpl.java
  40. 29
      src/main/java/com/project/information/domain/service/impl/SearchBusinessGroupDomainServiceImpl.java
  41. 10
      src/main/java/com/project/information/mapper/BusinessGroupMapper.java
  42. 9
      src/main/java/com/project/information/mapper/InformationMapper.java
  43. 9
      src/main/java/com/project/information/mapper/ProductLineMapper.java
  44. 4
      src/main/resources/application.yml

24
src/main/java/com/project/base/config/InsertBatchOnDuplicateKeyUpdate.java

@ -28,23 +28,39 @@ public class InsertBatchOnDuplicateKeyUpdate extends AbstractMethod {
.map(TableFieldInfo::getColumn)
.collect(Collectors.joining(",")) + ")";
// 2. 准备 VALUES 部分 (修复重点!)
// 2. 准备 VALUES 部分 (处理逻辑删除位)
String valuesScript = "(#{item." + tableInfo.getKeyProperty() + "}," +
tableInfo.getFieldList().stream()
.map(i -> {
// 【核心修复】检查该字段是否有 TypeHandler (如 JacksonTypeHandler)
// A. 如果是逻辑删除字段:处理“没传就默认 0”
if (i.isLogicDelete()) {
// 使用 IFNULL 保证如果 Java 对象里 deleted 是 null,数据库填入 0
return "IFNULL(#{item." + i.getProperty() + "}, 0)";
}
// B. 处理 TypeHandler (如之前处理的 JSON 字段)
if (i.getTypeHandler() != null) {
// 生成格式如:#{item.depIdPath,typeHandler=com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler}
return "#{item." + i.getProperty() + ",typeHandler=" + i.getTypeHandler().getName() + "}";
}
// C. 普通字段
return "#{item." + i.getProperty() + "}";
})
.collect(Collectors.joining(",")) + ")";
// 3. 准备 ON DUPLICATE KEY UPDATE 部分
String updateScript = tableInfo.getFieldList().stream()
// 排除主键和创建时间
.filter(i -> !i.getColumn().equals("create_time"))
.map(i -> i.getColumn() + " = VALUES(" + i.getColumn() + ")")
.map(i -> {
// 如果是逻辑删除位,在更新时强制置为 0(即复活数据)
// 理由:全量同步中,只要数据还在钉钉列表里,就说明该部门/人员是活跃的
if (i.isLogicDelete()) {
return i.getColumn() + " = 0";
}
// 其他字段正常更新
return i.getColumn() + " = VALUES(" + i.getColumn() + ")";
})
.collect(Collectors.joining(",")) + ", update_time = NOW()";
String sql = String.format("<script>INSERT INTO %s %s VALUES <foreach collection=\"list\" item=\"item\" separator=\",\">%s</foreach> ON DUPLICATE KEY UPDATE %s</script>",

13
src/main/java/com/project/base/config/MybatisPlusConfig.java

@ -1,8 +1,12 @@
package com.project.base.config;
import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.injector.AbstractMethod;
import com.baomidou.mybatisplus.core.injector.DefaultSqlInjector;
import com.baomidou.mybatisplus.core.metadata.TableInfo;
import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import java.util.List;
@ -16,5 +20,12 @@ public class MybatisPlusConfig extends DefaultSqlInjector {
methodList.add(new InsertBatchOnDuplicateKeyUpdate()); // 确保这里添加了你的自定义方法
return methodList;
}
@Bean
public MybatisPlusInterceptor mybatisPlusInterceptor() {
MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
// 向拦截器链中添加分页拦截器
// DbType.MYSQL 必须设置,否则插件可能无法正确分页
interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
return interceptor;
}
}

10
src/main/java/com/project/base/domain/advice/GlobalExceptionHandlerAdvice.java

@ -9,6 +9,7 @@ import com.project.base.domain.result.ResultCodeEnum;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.HttpStatus;
import org.springframework.validation.BindException;
import org.springframework.web.HttpRequestMethodNotSupportedException;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;
@ -69,6 +70,15 @@ public class GlobalExceptionHandlerAdvice {
return Result.fail(ResultCodeEnum.getResultCodeEnumByCode(e.getCode()) , e.getMessage());
}
@ExceptionHandler(HttpRequestMethodNotSupportedException.class)
@ResponseBody
@ResponseStatus(HttpStatus.OK)
public Result error(HttpRequestMethodNotSupportedException e) {
e.printStackTrace();
log.error("全局异常捕获:" + e);
return Result.fail(ResultCodeEnum.REQUEST_METHOD_NOT_SUPPORTED);
}
@ExceptionHandler(ResourceNotExistException.class)
@ResponseBody

1
src/main/java/com/project/base/domain/dto/BaseDTO.java

@ -24,7 +24,6 @@ public class BaseDTO {
public <T> T toEntity(Supplier<T> supplier) {
// 这里的 supplier.get() 等价于执行了 new UserEntity()
T entity = supplier.get();
BeanUtil.copyProperties(this, entity);
return entity;

9
src/main/java/com/project/base/domain/entity/BaseEntity.java

@ -1,5 +1,6 @@
package com.project.base.domain.entity;
import cn.hutool.core.bean.BeanUtil;
import com.baomidou.mybatisplus.annotation.*;
import com.project.base.domain.enums.StatusEnum;
import jakarta.persistence.Column;
@ -10,6 +11,7 @@ import org.hibernate.annotations.Comment;
import java.io.Serializable;
import java.util.Date;
import java.util.function.Supplier;
@MappedSuperclass
@Data
@ -47,4 +49,11 @@ public class BaseEntity implements Serializable {
@Column(name = "deleted")
private Boolean deleted = StatusEnum.Normal.getValue();
public <T> T toDTO(Supplier<T> supplier) {
T dto = supplier.get();
BeanUtil.copyProperties(this, dto);
return dto;
}
}

10
src/main/java/com/project/base/domain/param/BaseParam.java

@ -0,0 +1,10 @@
package com.project.base.domain.param;
import lombok.Data;
@Data
public class BaseParam {
private Integer current = 1;
private Integer size = 10;
}

23
src/main/java/com/project/base/domain/result/PageResult.java

@ -0,0 +1,23 @@
package com.project.base.domain.result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Data;
import java.io.Serializable;
import java.util.List;
@Data
public class PageResult<T> implements Serializable {
private List<T> content; // 数据列表
private long total; // 总条数
private long size; // 每页条数
private long current; // 当前页码 (从1开始)
private long pages; // 总页数
public PageResult(IPage<T> mpPage) {
this.content = mpPage.getRecords();
this.total = mpPage.getTotal();
this.size = mpPage.getSize();
this.current = mpPage.getCurrent();
this.pages = mpPage.getPages();
}
}

7
src/main/java/com/project/base/domain/result/Result.java

@ -1,5 +1,6 @@
package com.project.base.domain.result;
import com.baomidou.mybatisplus.core.metadata.IPage;
import lombok.Getter;
import lombok.Setter;
@ -20,6 +21,8 @@ public class Result<T> implements Serializable {
private T data;
public static <T> Result<T> success(T data) {
Result<T> result = new Result<T>();
result.setCode(ResultCodeEnum.SUCCESS.getCode());
@ -60,4 +63,8 @@ public class Result<T> implements Serializable {
return res;
}
public static <T> Result<PageResult<T>> page(IPage<T> mpPage) {
return success(new PageResult<>(mpPage));
}
}

2
src/main/java/com/project/base/domain/result/ResultCodeEnum.java

@ -14,6 +14,8 @@ public enum ResultCodeEnum {
USER_NOT_FIND(false , 40103 , "用户身份信息缺失") ,
PERMISSION_DENIED(false , 40301 , "操作权限不足"),
RESOURCE_NOT_EXIST(false , 40401 , "请求的资源不存在") ,
REQUEST_METHOD_NOT_SUPPORTED(false , 40501 , "错误的请求方式") ,
INTERNAL_SYSTEM_ERROR(false , 50001 , "系统内部错误,请稍后重试"),
EXTERNAL_CALL_ERROR(false , 50002 , "外部服务调用失败"),
BUSINESS_ERROR(false , 60001 , "业务错误"),

14
src/main/java/com/project/base/domain/utils/PageConverter.java

@ -0,0 +1,14 @@
package com.project.base.domain.utils;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.project.base.domain.param.BaseParam;
public class PageConverter {
/**
* 将任意 BaseParam 子类转换为 MyBatis-Plus Page 对象
*/
public static <T> Page<T> toMpPage(BaseParam param) {
return new Page<>(param.getCurrent(), param.getSize());
}
}

18
src/main/java/com/project/ding/application/UserApplicationService.java

@ -0,0 +1,18 @@
package com.project.ding.application;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.param.UserParam;
public interface UserApplicationService {
Result<PageResult<UserDTO>> search(UserParam param) throws Exception;
Result<UserDTO> getDetail(Long id) throws Exception;
Result<String> getLastSyncTime() throws Exception;
}

37
src/main/java/com/project/ding/application/impl/UserApplicationServiceImpl.java

@ -0,0 +1,37 @@
package com.project.ding.application.impl;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.ding.application.UserApplicationService;
import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.param.UserParam;
import com.project.ding.domain.service.GetLastSyncTimeSyncLogDomainService;
import com.project.ding.domain.service.SearchUserDomainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.stereotype.Service;
@Service
public class UserApplicationServiceImpl implements UserApplicationService {
@Autowired
private SearchUserDomainService searchUserDomainService;
@Autowired
private GetLastSyncTimeSyncLogDomainService getLastSyncTimeSyncLogDomainService;
@Override
public Result<PageResult<UserDTO>> search(UserParam param) throws Exception {
return searchUserDomainService.search(param);
}
@Override
public Result<UserDTO> getDetail(Long id) throws Exception {
return searchUserDomainService.getDetail(id);
}
@Override
public Result<String> getLastSyncTime() throws Exception {
return getLastSyncTimeSyncLogDomainService.getLastSyncTime();
}
}

36
src/main/java/com/project/ding/controller/UserController.java

@ -0,0 +1,36 @@
package com.project.ding.controller;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.ding.application.UserApplicationService;
import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.param.UserParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
@Slf4j
@RequestMapping("/dingUser")
public class UserController {
@Autowired
private UserApplicationService userApplicationService;
@GetMapping("/search")
public Result<PageResult<UserDTO>> search(UserParam param) throws Exception {
return userApplicationService.search(param);
}
@GetMapping("/getLastSyncTime")
public Result<String> getLastSyncTime() throws Exception {
return userApplicationService.getLastSyncTime();
}
@GetMapping("/getDetail")
public Result<UserDTO> getDetail(Long id) throws Exception {
return userApplicationService.getDetail(id);
}
}

7
src/main/java/com/project/ding/domain/dto/UserDTO.java

@ -1,6 +1,7 @@
package com.project.ding.domain.dto;
import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.DesensitizedUtil;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.project.base.domain.dto.BaseDTO;
import io.vavr.control.Try;
@ -63,4 +64,10 @@ public class UserDTO extends BaseDTO {
.collect(Collectors.joining(",")));
return userDTO;
}
public UserDTO desensitize() {
this.mobile = DesensitizedUtil.mobilePhone(this.getMobile());
this.setName(DesensitizedUtil.chineseName(this.getMobile()));
return this;
}
}

2
src/main/java/com/project/ding/domain/entity/DepartmentEntity.java

@ -35,7 +35,7 @@ public class DepartmentEntity extends BaseEntity {
private Long parentId;
@TableField(typeHandler = JacksonTypeHandler.class)
@TableField(value = "dept_id_path" , typeHandler = JacksonTypeHandler.class)
@Column(name = "dept_id_path", columnDefinition = "json comment '部门ID全路径'")
@JdbcTypeCode(SqlTypes.JSON)
private List<Long> deptIdPath;

5
src/main/java/com/project/ding/domain/entity/SyncLogEntity.java

@ -1,5 +1,6 @@
package com.project.ding.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.project.base.domain.entity.BaseEntity;
import jakarta.persistence.Column;
@ -21,10 +22,13 @@ public class SyncLogEntity extends BaseEntity {
@Comment("同步开始时间")
@Column(name = "start_time")
@TableField("start_time")
private Date startTime;
@Comment("同步结束时间")
@Column(name = "end_time")
@TableField("end_time")
private Date endTime;
@Column(name = "status")
@ -32,6 +36,7 @@ public class SyncLogEntity extends BaseEntity {
private Integer status; // 0-进行中, 1-成功, 2-失败
@Column(name = "error_msg" , columnDefinition="TEXT comment '错误信息'")
@TableField("error_msg")
private String errorMsg;
}

5
src/main/java/com/project/ding/domain/entity/UserEntity.java

@ -29,6 +29,7 @@ public class UserEntity extends BaseEntity {
private Long id;
@Column(name = "union_id" , columnDefinition="varchar(255) comment '企业架构内唯一标识'")
@TableField("union_id")
private String unionId;
@Column(name = "name" , columnDefinition="varchar(255) comment '员工姓名'")
@ -41,6 +42,7 @@ public class UserEntity extends BaseEntity {
private String mobile;
@Column(name = "job_number" , columnDefinition="varchar(255) comment '员工工号'")
@TableField("job_number" )
private String jobNumber;
@Column(name = "title" , columnDefinition="varchar(50) comment '职位'")
@ -52,11 +54,12 @@ public class UserEntity extends BaseEntity {
/**
* 存储为 JSON 数组: [1, 10, 101]
*/
@TableField(typeHandler = JacksonTypeHandler.class)
@TableField(value = "dept_id_list" , typeHandler = JacksonTypeHandler.class)
@Column(name = "dept_id_list", columnDefinition = "json comment '部门ID列表'")
@JdbcTypeCode(SqlTypes.JSON)
private List<Long> deptIdList;
@TableField("hired_date")
@Column(name = "hired_date")
@Comment("入职时间")
private Date hiredDate;

12
src/main/java/com/project/ding/domain/param/UserParam.java

@ -0,0 +1,12 @@
package com.project.ding.domain.param;
import com.project.base.domain.param.BaseParam;
import lombok.Data;
@Data
public class UserParam extends BaseParam{
private String name;
private Long searchDeptId;
}

7
src/main/java/com/project/ding/domain/service/GetLastSyncTimeSyncLogDomainService.java

@ -0,0 +1,7 @@
package com.project.ding.domain.service;
import com.project.base.domain.result.Result;
public interface GetLastSyncTimeSyncLogDomainService {
Result<String> getLastSyncTime() throws Exception;
}

13
src/main/java/com/project/ding/domain/service/SearchUserDomainService.java

@ -0,0 +1,13 @@
package com.project.ding.domain.service;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.param.UserParam;
public interface SearchUserDomainService {
Result<PageResult<UserDTO>> search(UserParam param) throws Exception;
Result<UserDTO> getDetail(Long id) throws Exception;
}

32
src/main/java/com/project/ding/domain/service/impl/GetLastSyncTimeSyncLogDomainServiceImpl.java

@ -0,0 +1,32 @@
package com.project.ding.domain.service.impl;
import cn.hutool.core.date.DateUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.project.base.domain.result.Result;
import com.project.ding.domain.entity.SyncLogEntity;
import com.project.ding.domain.service.GetLastSyncTimeSyncLogDomainService;
import com.project.ding.mapper.SyncLogMapper;
import io.vavr.control.Try;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Service
public class GetLastSyncTimeSyncLogDomainServiceImpl implements GetLastSyncTimeSyncLogDomainService {
@Autowired
private SyncLogMapper syncLogMapper;
private final static String timeFormatStr = "yyyy-MM-dd HH:mm:ss";
@Override
public Result<String> getLastSyncTime() throws Exception {
// 1. 查询最后一条成功的记录
SyncLogEntity lastLog = syncLogMapper.selectOne(
new LambdaQueryWrapper<SyncLogEntity>()
.eq(SyncLogEntity::getStatus, 1) // 1-成功
.orderByDesc(SyncLogEntity::getId)
.last("LIMIT 1")
);
return Result.success(Try.of(() ->
DateUtil.format(lastLog.getEndTime() , timeFormatStr))
.getOrElse(""));
}
}

59
src/main/java/com/project/ding/domain/service/impl/SearchUserDomainServiceImpl.java

@ -0,0 +1,59 @@
package com.project.ding.domain.service.impl;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.project.base.domain.result.PageResult;
import com.project.base.domain.result.Result;
import com.project.base.domain.utils.PageConverter;
import com.project.ding.domain.dto.UserDTO;
import com.project.ding.domain.entity.UserEntity;
import com.project.ding.domain.param.UserParam;
import com.project.ding.domain.service.SearchUserDomainService;
import com.project.ding.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Objects;
@Service
public class SearchUserDomainServiceImpl implements SearchUserDomainService {
@Autowired
private UserMapper userMapper;
@Override
public Result<PageResult<UserDTO>> search(UserParam param) throws Exception {
LambdaQueryWrapper<UserEntity> queryWrapper = new LambdaQueryWrapper<>();
if (StrUtil.isNotBlank(param.getName())) {
queryWrapper.like(UserEntity::getName , param.getName());
}
if (Objects.nonNull(param.getSearchDeptId())) {
queryWrapper.apply("{0} MEMBER OF(dept_id_list)", param.getSearchDeptId());
}
queryWrapper.orderByDesc(UserEntity::getDeptIdStr);
IPage<UserEntity> userEntityPage = userMapper.selectPage(
PageConverter.toMpPage(param),
queryWrapper);
IPage<UserDTO> userDtoPage = userEntityPage.convert(entity -> buildDTO(entity)
.desensitize());
return Result.page(userDtoPage);
}
private UserDTO buildDTO(UserEntity entity) {
UserDTO dto = entity.toDTO(UserDTO::new);
// todo 构建考试信息
return entity.toDTO(UserDTO::new);
}
@Override
public Result<UserDTO> getDetail(Long id) throws Exception {
UserEntity entity = userMapper.selectById(id);
return Result.success(buildDTO(entity));
}
}

13
src/main/java/com/project/information/application/BusinessGroupApplicationService.java

@ -0,0 +1,13 @@
package com.project.information.application;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.param.BusinessGroupParam;
import java.util.List;
public interface BusinessGroupApplicationService {
Result<List<BusinessGroupDTO>> list(BusinessGroupParam param) throws Exception;
Result<List<BusinessGroupDTO>> batchSave(String batchSaveStr) throws Exception;
}

31
src/main/java/com/project/information/application/impl/BusinessGroupApplicationServiceImpl.java

@ -0,0 +1,31 @@
package com.project.information.application.impl;
import com.project.base.domain.result.Result;
import com.project.information.application.BusinessGroupApplicationService;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.param.BusinessGroupParam;
import com.project.information.domain.service.BatchSaveBusinessGroupDomainService;
import com.project.information.domain.service.SearchBusinessGroupDomainService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
@Service
public class BusinessGroupApplicationServiceImpl implements BusinessGroupApplicationService {
@Autowired
private SearchBusinessGroupDomainService searchBusinessGroupDomainService;
@Autowired
private BatchSaveBusinessGroupDomainService batchSaveBusinessGroupDomainService;
@Override
public Result<List<BusinessGroupDTO>> list(BusinessGroupParam param) throws Exception {
return searchBusinessGroupDomainService.list(param);
}
@Override
public Result<List<BusinessGroupDTO>> batchSave(String batchSaveStr) throws Exception {
return batchSaveBusinessGroupDomainService.batchSave(batchSaveStr);
}
}

33
src/main/java/com/project/information/controller/BusinessGroupController.java

@ -0,0 +1,33 @@
package com.project.information.controller;
import com.project.base.domain.result.Result;
import com.project.information.application.BusinessGroupApplicationService;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.param.BusinessGroupParam;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;
@RestController
@Slf4j
@RequestMapping("/businessGroup")
public class BusinessGroupController {
@Autowired
private BusinessGroupApplicationService businessGroupApplicationService;
@GetMapping("/list")
public Result<List<BusinessGroupDTO>> list(BusinessGroupParam param) throws Exception {
return businessGroupApplicationService.list(param);
}
@PostMapping("/batchSave")
public Result<List<BusinessGroupDTO>> batchSave(String batchSaveStr) throws Exception {
return businessGroupApplicationService.batchSave(batchSaveStr);
}
}

10
src/main/java/com/project/information/domain/dto/BusinessGroupDTO.java

@ -0,0 +1,10 @@
package com.project.information.domain.dto;
import com.project.base.domain.dto.BaseDTO;
import lombok.Data;
@Data
public class BusinessGroupDTO extends BaseDTO {
private String name;
private String sort;
}

14
src/main/java/com/project/information/domain/dto/InformationDTO.java

@ -0,0 +1,14 @@
package com.project.information.domain.dto;
import com.project.base.domain.dto.BaseDTO;
import lombok.Data;
@Data
public class InformationDTO extends BaseDTO {
private Long subLineId;
private String subLineName;
private String name;
private String filePath;
private Integer parseStatus;
}

14
src/main/java/com/project/information/domain/dto/ProductLineDTO.java

@ -0,0 +1,14 @@
package com.project.information.domain.dto;
import lombok.Data;
@Data
public class ProductLineDTO {
private String name;
private Integer sort;
private Boolean leaf;
private String business;
private Long parentId;
private String parentName;
}

29
src/main/java/com/project/information/domain/entity/BusinessGroupEntity.java

@ -0,0 +1,29 @@
package com.project.information.domain.entity;
import com.baomidou.mybatisplus.annotation.TableName;
import com.project.base.domain.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Comment;
@Data
@Table(name = "evaluator_business_group", indexes = {@Index(name = "Idx_sort", columnList = "sort")})
@Entity
@TableName(value = "evaluator_business_group")
@EqualsAndHashCode(callSuper = true)
public class BusinessGroupEntity extends BaseEntity {
@Column(name = "name" , columnDefinition="varchar(255) comment '事业部名称'")
private String name;
@Column(name = "sort", nullable = false)
@Comment("排序权重")
private Integer sort = 0; // 默认值为0
}

41
src/main/java/com/project/information/domain/entity/InformationEntity.java

@ -0,0 +1,41 @@
package com.project.information.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.project.base.domain.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Comment;
@Data
@Table(name = "evaluator_information")
@Entity
@TableName(value = "evaluator_information")
@EqualsAndHashCode(callSuper = true)
public class InformationEntity extends BaseEntity {
@Column(name = "sub_line_id")
@Comment("所属子产品线ID")
@TableField("sub_line_id")
private Long subLineId;
@Column(name = "sub_line_name" , columnDefinition="varchar(550) comment '所属子产品线名称'")
@Comment("所属子产品线名称")
@TableField("sub_line_name")
private String subLineName;
@Column(name = "name" , columnDefinition="varchar(550) comment '文件名称'")
private String name;
@Column(name = "file_path" , columnDefinition="varchar(550) comment '文件存储路径'")
@TableField("file_path")
private String filePath;
@Column(name = "parse_status")
@TableField("parse_status")
@Comment("排序权重")
private Integer parseStatus;
}

43
src/main/java/com/project/information/domain/entity/ProductLineEntity.java

@ -0,0 +1,43 @@
package com.project.information.domain.entity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.project.base.domain.entity.BaseEntity;
import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.Index;
import jakarta.persistence.Table;
import lombok.Data;
import lombok.EqualsAndHashCode;
import org.hibernate.annotations.Comment;
@Data
@Table(name = "evaluator_product_line" , indexes = {@Index(name = "Idx_parentId_sort", columnList = "parent_id,sort")})
@Entity
@TableName(value = "evaluator_product_line")
@EqualsAndHashCode(callSuper = true)
public class ProductLineEntity extends BaseEntity {
@Column(name = "name" , columnDefinition="varchar(550) comment '部门名称'")
private String name;
@Column(name = "sort", nullable = false)
@Comment("排序权重")
private Integer sort = 0; // 默认值为0
@Column(name = "leaf", nullable = false)
@Comment("是否是子产品线")
private Boolean leaf;
@Column(name = "business", columnDefinition="varchar(100) comment '所属BG名称'")
private String business;
@Column(name = "parent_id")
@TableField("parent_id")
@Comment("父级ID")
private Long parentId;
@Column(name = "parent_name", columnDefinition="varchar(550) comment '父级名称'")
@TableField("parent_name")
private String parentName;
}

8
src/main/java/com/project/information/domain/param/BusinessGroupParam.java

@ -0,0 +1,8 @@
package com.project.information.domain.param;
import com.project.base.domain.param.BaseParam;
import lombok.Data;
@Data
public class BusinessGroupParam extends BaseParam {
}

8
src/main/java/com/project/information/domain/param/InformationParam.java

@ -0,0 +1,8 @@
package com.project.information.domain.param;
import com.project.base.domain.param.BaseParam;
import lombok.Data;
@Data
public class InformationParam extends BaseParam {
}

8
src/main/java/com/project/information/domain/param/ProductLineParam.java

@ -0,0 +1,8 @@
package com.project.information.domain.param;
import com.project.base.domain.param.BaseParam;
import lombok.Data;
@Data
public class ProductLineParam extends BaseParam {
}

10
src/main/java/com/project/information/domain/service/BatchSaveBusinessGroupDomainService.java

@ -0,0 +1,10 @@
package com.project.information.domain.service;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.BusinessGroupDTO;
import java.util.List;
public interface BatchSaveBusinessGroupDomainService {
Result<List<BusinessGroupDTO>> batchSave(String batchSaveStr) throws Exception;
}

8
src/main/java/com/project/information/domain/service/BusinessGroupBaseService.java

@ -0,0 +1,8 @@
package com.project.information.domain.service;
import com.baomidou.mybatisplus.extension.service.IService;
import com.project.ding.domain.entity.UserEntity;
import com.project.information.domain.entity.BusinessGroupEntity;
public interface BusinessGroupBaseService extends IService<BusinessGroupEntity> {
}

12
src/main/java/com/project/information/domain/service/SearchBusinessGroupDomainService.java

@ -0,0 +1,12 @@
package com.project.information.domain.service;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.param.BusinessGroupParam;
import java.util.List;
public interface SearchBusinessGroupDomainService {
Result<List<BusinessGroupDTO>> list(BusinessGroupParam param) throws Exception;
}

38
src/main/java/com/project/information/domain/service/impl/BatchSaveBusinessGroupDomainServiceImpl.java

@ -0,0 +1,38 @@
package com.project.information.domain.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.entity.BusinessGroupEntity;
import com.project.information.domain.service.BatchSaveBusinessGroupDomainService;
import com.project.information.domain.service.BusinessGroupBaseService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class BatchSaveBusinessGroupDomainServiceImpl implements BatchSaveBusinessGroupDomainService {
@Autowired
private BusinessGroupBaseService businessGroupBaseService;
@Override
public Result<List<BusinessGroupDTO>> batchSave(String batchSaveStr) throws Exception {
// 全量删掉
businessGroupBaseService.remove(new LambdaQueryWrapper<>());
List<BusinessGroupEntity> res = new ArrayList<>();
for (String saveStr : batchSaveStr.split(",")) {
BusinessGroupEntity businessGroupEntity = new BusinessGroupEntity();
businessGroupEntity.setName(saveStr);
businessGroupBaseService.save(businessGroupEntity);
res.add(businessGroupEntity);
}
return Result.success(res.stream()
.map(entity -> entity.toDTO(BusinessGroupDTO::new))
.collect(Collectors.toList()));
}
}

11
src/main/java/com/project/information/domain/service/impl/BusinessGroupBaseServiceImpl.java

@ -0,0 +1,11 @@
package com.project.information.domain.service.impl;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.project.information.domain.entity.BusinessGroupEntity;
import com.project.information.domain.service.BusinessGroupBaseService;
import com.project.information.mapper.BusinessGroupMapper;
import org.springframework.stereotype.Service;
@Service
public class BusinessGroupBaseServiceImpl extends ServiceImpl<BusinessGroupMapper, BusinessGroupEntity> implements BusinessGroupBaseService {
}

29
src/main/java/com/project/information/domain/service/impl/SearchBusinessGroupDomainServiceImpl.java

@ -0,0 +1,29 @@
package com.project.information.domain.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.project.base.domain.result.Result;
import com.project.information.domain.dto.BusinessGroupDTO;
import com.project.information.domain.entity.BusinessGroupEntity;
import com.project.information.domain.param.BusinessGroupParam;
import com.project.information.domain.service.SearchBusinessGroupDomainService;
import com.project.information.mapper.BusinessGroupMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.stream.Collectors;
@Service
public class SearchBusinessGroupDomainServiceImpl implements SearchBusinessGroupDomainService {
@Autowired
private BusinessGroupMapper businessGroupMapper;
@Override
public Result<List<BusinessGroupDTO>> list(BusinessGroupParam param) throws Exception {
LambdaQueryWrapper<BusinessGroupEntity> queryWrapper = new LambdaQueryWrapper<>();
List<BusinessGroupEntity> entityList = businessGroupMapper.selectList(queryWrapper);
return Result.success(entityList.stream()
.map(entity -> entity.toDTO(BusinessGroupDTO::new))
.collect(Collectors.toList()));
}
}

10
src/main/java/com/project/information/mapper/BusinessGroupMapper.java

@ -0,0 +1,10 @@
package com.project.information.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.information.domain.entity.BusinessGroupEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface BusinessGroupMapper extends BaseMapper<BusinessGroupEntity> {
}

9
src/main/java/com/project/information/mapper/InformationMapper.java

@ -0,0 +1,9 @@
package com.project.information.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.information.domain.entity.InformationEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface InformationMapper extends BaseMapper<InformationEntity> {
}

9
src/main/java/com/project/information/mapper/ProductLineMapper.java

@ -0,0 +1,9 @@
package com.project.information.mapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.project.information.domain.entity.ProductLineEntity;
import org.apache.ibatis.annotations.Mapper;
@Mapper
public interface ProductLineMapper extends BaseMapper<ProductLineEntity> {
}

4
src/main/resources/application.yml

@ -40,6 +40,10 @@ spring:
max-file-size: 100MB
max-request-size: 100MB
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
serialization:
write-dates-as-timestamps: false
generator:
write-numbers-as-strings: true
minio:

Loading…
Cancel
Save