Sfoglia il codice sorgente

Merge branch 'master' of https://git.2fi-solutions.com/davidhui/TSMS-backend

tags/Baseline_30082024_BACKEND_UAT
cyril.tsui 1 anno fa
parent
commit
f15c557096
12 ha cambiato i file con 121 aggiunte e 40 eliminazioni
  1. +5
    -1
      src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java
  2. +22
    -7
      src/main/java/com/ffii/tsms/modules/data/service/DepartmentService.kt
  3. +14
    -6
      src/main/java/com/ffii/tsms/modules/data/service/PositionService.kt
  4. +14
    -0
      src/main/java/com/ffii/tsms/modules/data/web/DepartmentController.kt
  5. +7
    -0
      src/main/java/com/ffii/tsms/modules/data/web/PositionController.kt
  6. +3
    -2
      src/main/java/com/ffii/tsms/modules/data/web/models/NewDepartmentRequest.kt
  7. +3
    -3
      src/main/java/com/ffii/tsms/modules/data/web/models/NewPositionRequest.kt
  8. +9
    -9
      src/main/java/com/ffii/tsms/modules/user/req/UpdateUserReq.java
  9. +19
    -0
      src/main/java/com/ffii/tsms/modules/user/service/GroupService.java
  10. +6
    -12
      src/main/java/com/ffii/tsms/modules/user/service/UserService.java
  11. +8
    -0
      src/main/java/com/ffii/tsms/modules/user/service/pojo/UserRecord.java
  12. +11
    -0
      src/main/java/com/ffii/tsms/modules/user/web/GroupController.java

+ 5
- 1
src/main/java/com/ffii/tsms/modules/data/entity/DepartmentRepository.java Vedi File

@@ -4,7 +4,11 @@ import com.ffii.core.support.AbstractRepository;
import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo;

import java.util.List;
import java.util.Optional;

public interface DepartmentRepository extends AbstractRepository<Department, Long> {
List<DepartmentSearchInfo> findDepartmentSearchInfoBy();
List<DepartmentSearchInfo> findDepartmentSearchInfoByAndDeletedFalse();

Optional<DepartmentSearchInfo> findDepartmentSearchInfoById(Long departmentId);

}

+ 22
- 7
src/main/java/com/ffii/tsms/modules/data/service/DepartmentService.kt Vedi File

@@ -6,7 +6,10 @@ import com.ffii.tsms.modules.data.entity.Department
import com.ffii.tsms.modules.data.entity.DepartmentRepository
import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo
import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest
import com.ffii.tsms.modules.project.web.models.EditProjectDetails
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
import kotlin.jvm.optionals.getOrNull

@Service
open class DepartmentService(
@@ -14,20 +17,32 @@ open class DepartmentService(
private val jdbcDao: JdbcDao,
) : AbstractBaseEntityService<Department, Long, DepartmentRepository>(jdbcDao, departmentRepository) {
open fun allDepartments(): List<DepartmentSearchInfo>{
return departmentRepository.findDepartmentSearchInfoBy()
return departmentRepository.findDepartmentSearchInfoByAndDeletedFalse()
}

open fun saveDepartment(request: NewDepartmentRequest): Department {
val department =
Department().apply {
name = request.departmentName
code = request.departmentCode
description = request.description
}
var department = Department()

if (request.id != null && request.id > 0) {
department = departmentRepository.findById(request.id).orElseThrow()

BeanUtils.copyProperties(request, department)

}else{
department.name = request.name
department.code = request.code
department.description = request.description
}

return departmentRepository.save(department)
}

open fun getDepartmentDetails(departmentId: Long): DepartmentSearchInfo? {
val department = departmentRepository.findDepartmentSearchInfoById(departmentId).orElseThrow()

return department
}

open fun combo(args: Map<String, Any>): List<Map<String, Any>> {
val sql = StringBuilder("select"
+ " d.id as id,"


+ 14
- 6
src/main/java/com/ffii/tsms/modules/data/service/PositionService.kt Vedi File

@@ -12,6 +12,7 @@ import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo
import com.ffii.tsms.modules.data.entity.projections.PositionSearchInfo
import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest
import com.ffii.tsms.modules.data.web.models.NewPositionRequest
import org.springframework.beans.BeanUtils
import org.springframework.stereotype.Service
@Service
open class PositionService(
@@ -27,12 +28,19 @@ open class PositionService(
}

open fun savePosition(request: NewPositionRequest): Position {
val position =
Position().apply {
name = request.positionName
code = request.positionCode
description = request.description
}

var position = Position()

if (request.id != null && request.id > 0 ){
position = positionRepository.findById(request.id).orElseThrow()

BeanUtils.copyProperties(request, position)

}else{
position.name = request.name
position.code = request.code
position.description = request.description
}

return positionRepository.save(position)
}


+ 14
- 0
src/main/java/com/ffii/tsms/modules/data/web/DepartmentController.kt Vedi File

@@ -1,5 +1,6 @@
package com.ffii.tsms.modules.data.web

import com.ffii.core.exception.NotFoundException
import com.ffii.core.response.RecordsRes
import com.ffii.core.utils.CriteriaArgsBuilder
import com.ffii.tsms.modules.data.entity.Department
@@ -7,9 +8,11 @@ import com.ffii.tsms.modules.data.entity.projections.DepartmentSearchInfo
import com.ffii.tsms.modules.data.service.DepartmentService
import com.ffii.tsms.modules.data.web.models.NewDepartmentRequest
import com.ffii.tsms.modules.project.entity.Project
import com.ffii.tsms.modules.project.web.models.EditProjectDetails
import com.ffii.tsms.modules.project.web.models.NewProjectRequest
import jakarta.servlet.http.HttpServletRequest
import jakarta.validation.Valid
import org.springframework.http.HttpStatus
import org.springframework.web.bind.ServletRequestBindingException
import org.springframework.web.bind.annotation.*

@@ -22,11 +25,22 @@ class DepartmentController(private val departmentService: DepartmentService
return departmentService.allDepartments()
}

@GetMapping("/departmentDetails/{id}")
fun departmentDetails(@PathVariable id: Long): DepartmentSearchInfo {
return departmentService.getDepartmentDetails(id) ?: throw NotFoundException()
}

@PostMapping("/new")
fun saveProject(@Valid @RequestBody newDepartment: NewDepartmentRequest): Department {
return departmentService.saveDepartment(newDepartment)
}

@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
fun deleteDepartment(@PathVariable id: Long) {
departmentService.markDelete(id)
}

@GetMapping("/combo")
@Throws(ServletRequestBindingException::class)
fun combo(request: HttpServletRequest?): RecordsRes<Map<String, Any>> {


+ 7
- 0
src/main/java/com/ffii/tsms/modules/data/web/PositionController.kt Vedi File

@@ -14,6 +14,7 @@ import com.ffii.tsms.modules.project.entity.Project
import com.ffii.tsms.modules.project.web.models.NewProjectRequest
import jakarta.servlet.http.HttpServletRequest
import jakarta.validation.Valid
import org.springframework.http.HttpStatus
import org.springframework.web.bind.ServletRequestBindingException
import org.springframework.web.bind.annotation.*

@@ -36,6 +37,12 @@ class PositionController(private val positionService: PositionService
return positionService.savePosition(newPosition)
}

@DeleteMapping("/{id}")
@ResponseStatus(HttpStatus.NO_CONTENT)
fun deletePosition(@PathVariable id: Long) {
positionService.markDelete(id)
}

@GetMapping("/combo")
@Throws(ServletRequestBindingException::class)
fun combo(request: HttpServletRequest?): RecordsRes<Map<String, Any>> {


+ 3
- 2
src/main/java/com/ffii/tsms/modules/data/web/models/NewDepartmentRequest.kt Vedi File

@@ -3,10 +3,11 @@ package com.ffii.tsms.modules.data.web.models
import jakarta.validation.constraints.NotBlank

data class NewDepartmentRequest (
val id: Long?,
@field: NotBlank(message = "Department code cannot be empty")
val departmentCode: String,
val code: String,
@field:NotBlank(message = "Department name cannot be empty")
val departmentName: String,
val name: String,

val description: String
)

+ 3
- 3
src/main/java/com/ffii/tsms/modules/data/web/models/NewPositionRequest.kt Vedi File

@@ -4,12 +4,12 @@ import jakarta.validation.constraints.NotBlank

data class NewPositionRequest (

val id: Long,
val id: Long?,

@field: NotBlank(message = "Position code cannot be empty")
val positionCode: String,
val code: String,
@field:NotBlank(message = "Position name cannot be empty")
val positionName: String,
val name: String,

val description: String
)

+ 9
- 9
src/main/java/com/ffii/tsms/modules/user/req/UpdateUserReq.java Vedi File

@@ -27,8 +27,8 @@ public class UpdateUserReq {
@NotBlank
@Email
private String email;
@NotBlank
private String department;
// @NotBlank
// private String department;

// @NotNull
private List<Integer> addGroupIds;
@@ -140,12 +140,12 @@ public class UpdateUserReq {
this.email = email;
}

public String getDepartment() {
return department;
}
public void setDepartment(String department) {
this.department = department;
}
// public String getDepartment() {
// return department;
// }
//
// public void setDepartment(String department) {
// this.department = department;
// }

}

+ 19
- 0
src/main/java/com/ffii/tsms/modules/user/service/GroupService.java Vedi File

@@ -173,4 +173,23 @@ public class GroupService extends AbstractBaseEntityService<Group, Long, GroupRe
Map.of(Params.ID, id));
}


@Transactional(rollbackFor = Exception.class)
public List<Map<String, Object>> listGroupAuth(Map<String, Object> args) {

StringBuilder sql = new StringBuilder("SELECT"
+ " a.id, "
+ " a.module,"
+ " a.authority,"
+ " a.name,"
+ " a.description, ");
if (args.containsKey("groupId"))
sql.append(" EXISTS(SELECT 1 FROM group_authority ga WHERE a.id = ga.authId AND groupId = :groupId) AS v");
else
sql.append(" 0 AS v");
sql.append(" FROM authority a"
+ " ORDER BY a.module, a.name");

return jdbcDao.queryForList(sql.toString(), args);
}
}

+ 6
- 12
src/main/java/com/ffii/tsms/modules/user/service/UserService.java Vedi File

@@ -3,15 +3,12 @@ package com.ffii.tsms.modules.user.service;
import java.io.UnsupportedEncodingException;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.Optional;
import java.util.Set;
import java.util.Date;
import java.util.stream.Collectors;

import com.ffii.tsms.modules.common.service.AuditLogService;
import org.apache.commons.lang3.LocaleUtils;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
@@ -41,8 +38,6 @@ import jakarta.persistence.Table;
import com.ffii.core.utils.JsonUtils;
import com.ffii.tsms.modules.common.SecurityUtils;

import jakarta.mail.internet.InternetAddress;

@Service
public class UserService extends AbstractBaseEntityService<User, Long, UserRepository> {
private static final String USER_AUTH_SQL = "SELECT a.authority"
@@ -91,9 +86,9 @@ public class UserService extends AbstractBaseEntityService<User, Long, UserRepos
return userRepository.findByUsernameAndDeletedFalse(username);
}

public Map<String, Object> softDelete(User user) {
public void softDelete(User user) {

// =====GET OLD AUDIT LOG=====//
// =====GET OLD AUDIT LOG=====//
String tableName = user.getClass().getAnnotation(Table.class).name();
StringBuilder sql = new StringBuilder("SELECT * FROM " + tableName + " WHERE id = :id");
String oldValueJson = null;
@@ -124,8 +119,6 @@ public class UserService extends AbstractBaseEntityService<User, Long, UserRepos
newValueJson);
// =====GET NEW AUDIT LOG=====//

return Map.of(
"id", user.getId());
}

// @Transactional(rollbackFor = Exception.class)
@@ -148,7 +141,8 @@ public class UserService extends AbstractBaseEntityService<User, Long, UserRepos
+ " u.email,"
+ " u.phone1,"
+ " u.phone2,"
+ " u.remarks "
+ " u.remarks, "
+ " ug.groupId "
+ " FROM `user` u"
+ " left join user_group ug on u.id = ug.userId"
+ " where u.deleted = false");
@@ -201,7 +195,7 @@ public class UserService extends AbstractBaseEntityService<User, Long, UserRepos
}

private User saveOrUpdate(User instance, UpdateUserReq req) {
if (instance.getId() == null){
req.setLocked(false);
}
@@ -263,7 +257,7 @@ public class UserService extends AbstractBaseEntityService<User, Long, UserRepos
User instance = new User();
instance.setPassword(pwdHash);
instance = saveOrUpdate(instance, req);
// Locale locale = instance.getLocale() != null ? LocaleUtils.from(instance.getLocale()) : Locale.ENGLISH;
// mailService.send(
// MailRequest.builder()


+ 8
- 0
src/main/java/com/ffii/tsms/modules/user/service/pojo/UserRecord.java Vedi File

@@ -25,6 +25,8 @@ public class UserRecord {
private String phone2;
private String remarks;

private Long groupId;

public Integer getId() {
return id;
}
@@ -152,4 +154,10 @@ public class UserRecord {
this.remarks = remarks;
}

public Long getGroupId() {
return groupId;
}

public void setGroupId(Long groupId) { this.groupId = groupId; }

}

+ 11
- 0
src/main/java/com/ffii/tsms/modules/user/web/GroupController.java Vedi File

@@ -1,5 +1,6 @@
package com.ffii.tsms.modules.user.web;

import java.util.HashMap;
import java.util.Map;

import org.apache.commons.logging.Log;
@@ -77,4 +78,14 @@ public class GroupController{
.build()));
}

@GetMapping("/auth/combo/{id}")
public RecordsRes<Map<String, Object>> authComboJson(HttpServletRequest request, @PathVariable("id") int id) throws ServletRequestBindingException {
System.out.println(request);
Map<String, Object> args = new HashMap<>();
if (id != 0)
args.put("groupId", id);

return new RecordsRes<>(groupService.listGroupAuth(args));
}

}

Caricamento…
Annulla
Salva