@@ -0,0 +1,155 @@ | |||
package com.ffii.lioner.modules.lioner.commonField.entity; | |||
import com.ffii.core.entity.BaseEntity; | |||
import jakarta.persistence.Column; | |||
import jakarta.persistence.Entity; | |||
import jakarta.persistence.Inheritance; | |||
import jakarta.persistence.InheritanceType; | |||
import jakarta.persistence.Table; | |||
import jakarta.validation.constraints.NotNull; | |||
/** @author Vin Luk */ | |||
@Entity | |||
@Table(name = "common_field") | |||
@Inheritance(strategy=InheritanceType.TABLE_PER_CLASS) | |||
public class CommonField extends BaseEntity<Long>{ | |||
//FNA | |||
@NotNull | |||
@Column | |||
private Long clientId; | |||
@Column | |||
private String name; | |||
@Column | |||
private String dateOfBirth; | |||
@Column | |||
private String idCard; | |||
@Column | |||
private String occupation; | |||
//IDA | |||
@Column | |||
private String firstName; | |||
@Column | |||
private String givenName; | |||
@Column | |||
private String genderMale; | |||
@Column | |||
private String genderFemale; | |||
@Column | |||
private String ddDateOfBirth; | |||
@Column | |||
private String mmDateOfBirth; | |||
@Column | |||
private String yyyyDateOfBirth; | |||
public Long getClientId() { | |||
return clientId; | |||
} | |||
public void setClientId(Long clientId) { | |||
this.clientId = clientId; | |||
} | |||
public String getName() { | |||
return name; | |||
} | |||
public void setName(String name) { | |||
this.name = name; | |||
} | |||
public String getDateOfBirth() { | |||
return dateOfBirth; | |||
} | |||
public void setDateOfBirth(String dateOfBirth) { | |||
this.dateOfBirth = dateOfBirth; | |||
} | |||
public String getIdCard() { | |||
return idCard; | |||
} | |||
public void setIdCard(String idCard) { | |||
this.idCard = idCard; | |||
} | |||
public String getOccupation() { | |||
return occupation; | |||
} | |||
public void setOccupation(String occupation) { | |||
this.occupation = occupation; | |||
} | |||
public String getFirstName() { | |||
return firstName; | |||
} | |||
public void setFirstName(String firstName) { | |||
this.firstName = firstName; | |||
} | |||
public String getGivenName() { | |||
return givenName; | |||
} | |||
public void setGivenName(String givenName) { | |||
this.givenName = givenName; | |||
} | |||
public String getGenderMale() { | |||
return genderMale; | |||
} | |||
public void setGenderMale(String genderMale) { | |||
this.genderMale = genderMale; | |||
} | |||
public String getGenderFemale() { | |||
return genderFemale; | |||
} | |||
public void setGenderFemale(String genderFemale) { | |||
this.genderFemale = genderFemale; | |||
} | |||
public String getDdDateOfBirth() { | |||
return ddDateOfBirth; | |||
} | |||
public void setDdDateOfBirth(String ddDateOfBirth) { | |||
this.ddDateOfBirth = ddDateOfBirth; | |||
} | |||
public String getMmDateOfBirth() { | |||
return mmDateOfBirth; | |||
} | |||
public void setMmDateOfBirth(String mmDateOfBirth) { | |||
this.mmDateOfBirth = mmDateOfBirth; | |||
} | |||
public String getYyyyDateOfBirth() { | |||
return yyyyDateOfBirth; | |||
} | |||
public void setYyyyDateOfBirth(String yyyyDateOfBirth) { | |||
this.yyyyDateOfBirth = yyyyDateOfBirth; | |||
} | |||
} | |||
@@ -0,0 +1,6 @@ | |||
package com.ffii.lioner.modules.lioner.commonField.entity; | |||
import com.ffii.core.support.AbstractRepository; | |||
public interface CommonFieldRepository extends AbstractRepository<CommonField, Long> { | |||
} |
@@ -0,0 +1,138 @@ | |||
package com.ffii.lioner.modules.lioner.commonField.req; | |||
import java.util.List; | |||
import jakarta.validation.constraints.Size; | |||
import java.time.LocalDate; | |||
public class UpdateCommonFieldReq { | |||
private Long id; | |||
@Size(max = 500) | |||
String fullname; | |||
@Size(max = 255) | |||
String lastname; | |||
@Size(max = 255) | |||
String firstname; | |||
@Size(max = 50) | |||
String title; | |||
@Size(max = 500) | |||
String email; | |||
@Size(max = 50) | |||
String phone1; | |||
@Size(max = 50) | |||
String phone2; | |||
String remarks; | |||
LocalDate joinDate; | |||
Integer caseManagerId; | |||
Integer consultantId; | |||
public Long getId() { | |||
return id; | |||
} | |||
public void setId(Long id) { | |||
this.id = id; | |||
} | |||
public String getFullname() { | |||
return fullname; | |||
} | |||
public void setFullname(String fullname) { | |||
this.fullname = fullname; | |||
} | |||
public String getLastname() { | |||
return lastname; | |||
} | |||
public void setLastname(String lastname) { | |||
this.lastname = lastname; | |||
} | |||
public String getFirstname() { | |||
return firstname; | |||
} | |||
public void setFirstname(String firstname) { | |||
this.firstname = firstname; | |||
} | |||
public String getTitle() { | |||
return title; | |||
} | |||
public void setTitle(String title) { | |||
this.title = title; | |||
} | |||
public String getEmail() { | |||
return email; | |||
} | |||
public void setEmail(String email) { | |||
this.email = email; | |||
} | |||
public String getPhone1() { | |||
return phone1; | |||
} | |||
public void setPhone1(String phone1) { | |||
this.phone1 = phone1; | |||
} | |||
public String getPhone2() { | |||
return phone2; | |||
} | |||
public void setPhone2(String phone2) { | |||
this.phone2 = phone2; | |||
} | |||
public String getRemarks() { | |||
return remarks; | |||
} | |||
public void setRemarks(String remarks) { | |||
this.remarks = remarks; | |||
} | |||
public LocalDate getJoinDate() { | |||
return joinDate; | |||
} | |||
public void setJoinDate(LocalDate joinDate) { | |||
this.joinDate = joinDate; | |||
} | |||
public Integer getCaseManagerId() { | |||
return caseManagerId; | |||
} | |||
public void setCaseManagerId(Integer caseManagerId) { | |||
this.caseManagerId = caseManagerId; | |||
} | |||
public Integer getConsultantId() { | |||
return consultantId; | |||
} | |||
public void setConsultantId(Integer consultantId) { | |||
this.consultantId = consultantId; | |||
} | |||
} |
@@ -0,0 +1,155 @@ | |||
package com.ffii.lioner.modules.lioner.commonField.service; | |||
import java.util.List; | |||
import java.util.Map; | |||
import org.springframework.stereotype.Service; | |||
import com.ffii.core.support.AbstractBaseEntityService; | |||
import com.ffii.core.support.JdbcDao; | |||
import com.ffii.core.utils.BeanUtils; | |||
import com.ffii.lioner.modules.common.service.AuditLogService; | |||
import com.ffii.lioner.modules.lioner.commonField.entity.CommonField; | |||
import com.ffii.lioner.modules.lioner.commonField.entity.CommonFieldRepository; | |||
import com.ffii.lioner.modules.lioner.commonField.req.UpdateCommonFieldReq; | |||
@Service | |||
public class CommonFieldService extends AbstractBaseEntityService<CommonField, Long, CommonFieldRepository> { | |||
private AuditLogService auditLogService; | |||
public CommonFieldService(JdbcDao jdbcDao, CommonFieldRepository repository, AuditLogService auditLogService) { | |||
super(jdbcDao, repository); | |||
this.auditLogService = auditLogService; | |||
} | |||
public Map<String,Object> getAuditLogObject(Map<String,Object> req){ | |||
StringBuilder sql = new StringBuilder("SELECT" | |||
+ " e.id, " | |||
+ " e.created, " | |||
+ " e.createdBy AS createdById, " | |||
+ " u1.name AS createdBy, " | |||
+ " e.version, " | |||
+ " e.modified, " | |||
+ " e.modifiedBy AS modifiedById, " | |||
+ " e.deleted, " | |||
+ " u2.name AS modifiedBy, " | |||
+ " e.name, " | |||
+ " e.nameCht, " | |||
+ " e.description, " | |||
+ " e.region, " | |||
+ " e.organization, " | |||
+ " e.eventType, " | |||
+ " e.frequency, " | |||
+ " e.series, " | |||
+ " e.startDate, " | |||
+ " e.eventFrom, " | |||
+ " e.eventTo, " | |||
+ " e.applicationDeadline, " | |||
+ " e.nextApplicationDate, " | |||
+ " e.announcementDate, " | |||
+ " e.awardDate, " | |||
+ " e.reminderFlag, " | |||
+ " e.reminderThreshold, " | |||
+ " e.reminderInterval, " | |||
+ " e.reminderLimit " | |||
+ " FROM event e " | |||
+ " LEFT JOIN `user` u1 ON u1.id = e.createdBy " | |||
+ " LEFT JOIN `user` u2 ON u2.id = e.modifiedBy " | |||
+ " WHERE e.id = :id " | |||
); | |||
return jdbcDao.queryForMap(sql.toString(), req).get(); | |||
} | |||
public List<Map<String,Object>> list(Map<String, Object> args){ | |||
StringBuilder sql = new StringBuilder("SELECT" | |||
+ " common_field.* " | |||
+ " FROM common_field " | |||
+ " WHERE deleted = FALSE " | |||
// StringBuilder sql = new StringBuilder("SELECT" | |||
// + " DISTINCT e.id, " | |||
// + " e.name AS name, " | |||
// + " e.applicationDeadline, " | |||
// + " e.startDate, " | |||
// + " e.eventFrom " | |||
// + " FROM event e " | |||
// + " LEFT JOIN event_sub_division esd ON e.id = esd.eventId " | |||
// + " LEFT JOIN sub_division sd ON esd.subDivisionId = sd.id " | |||
// + " LEFT JOIN division d ON d.id = sd.divisionId " | |||
// + " LEFT JOIN `user` u ON u.id = e.createdBy " | |||
// + " WHERE e.deleted = FALSE " | |||
// + " AND esd.deleted = FALSE " | |||
); | |||
if (args != null) { | |||
if (args.containsKey("fullname")) | |||
sql.append(" AND fullname LIKE :fullname "); | |||
if (args.containsKey("lastname")) | |||
sql.append(" AND lastname LIKE :lastname "); | |||
if (args.containsKey("firstname")) | |||
sql.append(" AND firstname LIKE :firstname "); | |||
if (args.containsKey("phone1")) | |||
sql.append(" AND phone1 LIKE :phone1 "); | |||
if (args.containsKey("phone2")) | |||
sql.append(" AND phone2 LIKE :phone2 "); | |||
if (args.containsKey("email")) | |||
sql.append(" AND email LIKE :email "); | |||
if (args.containsKey("remarks")) | |||
sql.append(" AND remarks LIKE :remarks "); | |||
if (args.containsKey("joinDateFrom")) | |||
sql.append(" AND joinDate >= :joinDateFrom "); | |||
if (args.containsKey("joinDateTo")) | |||
sql.append(" AND joinDate <= :joinDateTo "); | |||
// if (args.containsKey("type")) | |||
// sql.append(" AND eventType LIKE :type "); | |||
// if (args.containsKey("divisionIdList")) | |||
// sql.append(" AND sd.divisionId IN (:divisionIdList) "); | |||
// if (args.containsKey("subDivisionIdList")) | |||
// sql.append(" AND sd.id IN (:subDivisionIdList) "); | |||
// if (args.containsKey("keyword")){ | |||
// sql.append(" AND ( createdBy LIKE :keyword "); | |||
// sql.append(" OR u.username LIKE :keyword "); | |||
// sql.append(" OR u.fullname LIKE :keyword "); | |||
// sql.append(" OR u.email LIKE :keyword "); | |||
// sql.append(" OR sd.name LIKE :keyword "); | |||
// sql.append(" OR d.name LIKE :keyword "); | |||
// sql.append(" OR e.name LIKE :keyword) "); | |||
} | |||
// } | |||
// sql.append(" ORDER BY id desc "); | |||
return jdbcDao.queryForList(sql.toString(), args); | |||
} | |||
public Integer getIdByName(String name) { | |||
StringBuilder sql = new StringBuilder("SELECT" | |||
+ " e.id " | |||
+ " FROM event e " | |||
+ " WHERE e.deleted = FALSE" | |||
+ " AND e.name = :name " | |||
); | |||
return jdbcDao.queryForInt(sql.toString(), Map.of("name", name)); | |||
} | |||
public Map<String, Object> saveOrUpdate(UpdateCommonFieldReq req) { | |||
CommonField instance; | |||
// List<SubDivision> onUsingIdList = new ArrayList<SubDivision>(); | |||
if(req.getId()>0){ | |||
instance = find(req.getId()).get(); | |||
// onUsingIdList = this.getSelectedSubDivisionList(req.getId()); | |||
} | |||
else{ | |||
instance = new CommonField(); | |||
} | |||
BeanUtils.copyProperties(req,instance); | |||
instance = save(instance); | |||
return Map.of( | |||
"id", instance.getId() | |||
); | |||
} | |||
} |
@@ -0,0 +1,100 @@ | |||
package com.ffii.lioner.modules.lioner.commonField.web; | |||
import java.io.IOException; | |||
import java.time.LocalDate; | |||
import java.util.List; | |||
import java.util.Map; | |||
import java.util.concurrent.TimeUnit; | |||
import org.apache.commons.logging.Log; | |||
import org.apache.commons.logging.LogFactory; | |||
import org.springframework.core.io.ByteArrayResource; | |||
import org.springframework.core.io.Resource; | |||
import org.springframework.http.CacheControl; | |||
import org.springframework.http.HttpStatus; | |||
import org.springframework.http.ResponseEntity; | |||
import org.springframework.transaction.annotation.Isolation; | |||
import org.springframework.transaction.annotation.Transactional; | |||
import org.springframework.web.bind.ServletRequestBindingException; | |||
import org.springframework.web.bind.annotation.DeleteMapping; | |||
import org.springframework.web.bind.annotation.GetMapping; | |||
import org.springframework.web.bind.annotation.PathVariable; | |||
import org.springframework.web.bind.annotation.PostMapping; | |||
import org.springframework.web.bind.annotation.RequestBody; | |||
import org.springframework.web.bind.annotation.RequestMapping; | |||
import org.springframework.web.bind.annotation.RequestParam; | |||
import org.springframework.web.bind.annotation.ResponseStatus; | |||
import org.springframework.web.bind.annotation.RestController; | |||
import com.ffii.lioner.modules.lioner.commonField.req.UpdateCommonFieldReq; | |||
import com.ffii.lioner.modules.lioner.commonField.service.CommonFieldService; | |||
import aj.org.objectweb.asm.Type; | |||
import com.ffii.lioner.modules.common.service.ExcelReportService; | |||
import com.ffii.core.exception.NotFoundException; | |||
import com.ffii.core.response.DataRes; | |||
import com.ffii.core.response.RecordsRes; | |||
import com.ffii.core.utils.CriteriaArgsBuilder; | |||
import com.ffii.core.utils.Params; | |||
import jakarta.servlet.http.HttpServletRequest; | |||
import jakarta.validation.Valid; | |||
@RestController | |||
@RequestMapping("/commonField") | |||
public class CommonFieldController{ | |||
private final Log logger = LogFactory.getLog(getClass()); | |||
private CommonFieldService commonFieldService; | |||
private ExcelReportService excelReportService; | |||
public CommonFieldController(CommonFieldService commonFieldService, ExcelReportService excelReportService) { | |||
this.commonFieldService = commonFieldService; | |||
this.excelReportService = excelReportService; | |||
} | |||
@GetMapping("/{id}") | |||
public Map<String, Object> get(@PathVariable Long id) { | |||
return Map.of( | |||
Params.DATA, commonFieldService.find(id).orElseThrow(NotFoundException::new) | |||
// "eventDivision", commonFieldService.getEventDivision(Map.of("id",id)) | |||
); | |||
} | |||
@Transactional(isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class, readOnly = false) | |||
@PostMapping("/save") | |||
public Map<String, Object> saveOrUpdate(@RequestBody @Valid UpdateCommonFieldReq req) { | |||
return Map.of( | |||
Params.DATA,commonFieldService.saveOrUpdate(req) | |||
); | |||
} | |||
@Transactional(isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class, readOnly = false) | |||
@DeleteMapping("/{id}") | |||
@ResponseStatus(HttpStatus.NO_CONTENT) | |||
public void delete(@PathVariable Long id) { | |||
commonFieldService.markDelete(commonFieldService.find(id).get()); | |||
// commonFieldService.markDeleteWithAuditLog(commonFieldService.find(id).get()); | |||
} | |||
@GetMapping | |||
public RecordsRes<Map<String, Object>> list(HttpServletRequest request) throws ServletRequestBindingException { | |||
return new RecordsRes<>(commonFieldService.list( | |||
CriteriaArgsBuilder.withRequest(request) | |||
.addStringLike("fullname") | |||
.addStringLike("lastname") | |||
.addStringLike("firstname") | |||
// .addStringLike("title") | |||
.addStringLike("email") | |||
.addStringLike("phone1") | |||
.addStringLike("phone2") | |||
.addDate("joinDateFrom") | |||
.addDate("joinDateTo") | |||
.addStringLike("remarks") | |||
.build())); | |||
} | |||
} |
@@ -0,0 +1,46 @@ | |||
server: | |||
servlet: | |||
contextPath: /api | |||
encoding: | |||
charset: UTF-8 | |||
enabled: true | |||
force: true | |||
port: 8090 | |||
error: | |||
include-message: always | |||
tomcat: | |||
connection-timeout: 300000 | |||
ssl: # <--- This 'ssl' is correctly indented under 'server' | |||
enabled: true # <--- CORRECTED: Use colon, not equals, and remove "server.ssl." prefix | |||
key-store: classpath:keystore.p12 | |||
key-store-type: PKCS12 | |||
key-store-password: Mms1234 | |||
key-alias: lionerapp | |||
key-password: Mms1234 | |||
spring: | |||
datasource: | |||
jdbc-url: jdbc:mysql://localhost:3306/lionerdb?useUnicode=true&characterEncoding=UTF8&serverTimezone=GMT%2B8 | |||
username: root | |||
password: cFDp7988vc+$] | |||
servlet: | |||
multipart: | |||
max-file-size: 500MB | |||
max-request-size: 600MB | |||
jpa: | |||
hibernate: | |||
naming: | |||
physical-strategy: org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl | |||
database-platform: org.hibernate.dialect.MySQL8Dialect | |||
properties: | |||
hibernate: | |||
dialect: | |||
storage_engine: innodb | |||
messages: | |||
basename: i18n/messages | |||
use-code-as-default-message: true | |||
fallback-to-system-locale: false | |||
logging: | |||
config: 'classpath:log4j2.yml' |
@@ -11,7 +11,7 @@ server: | |||
tomcat: | |||
connection-timeout: 300000 | |||
ssl: # <--- This 'ssl' is correctly indented under 'server' | |||
enabled: true # <--- CORRECTED: Use colon, not equals, and remove "server.ssl." prefix | |||
enabled: false # <--- CORRECTED: Use colon, not equals, and remove "server.ssl." prefix | |||
key-store: classpath:keystore.p12 | |||
key-store-type: PKCS12 | |||
key-store-password: Mms1234 | |||
@@ -0,0 +1,28 @@ | |||
--liquibase formatted sql | |||
--changeset Vin:add cliecommon_fieldnt table | |||
CREATE TABLE `common_field` ( | |||
`id` int(11) NOT NULL AUTO_INCREMENT, | |||
`created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
`createdBy` varchar(30) DEFAULT NULL, | |||
`version` int NOT NULL DEFAULT '0', | |||
`modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, | |||
`modifiedBy` varchar(30) DEFAULT NULL, | |||
`deleted` tinyint(1) NOT NULL DEFAULT '0', | |||
`clientId` bigint NOT NULL, | |||
`name` VARCHAR(200), | |||
`dateOfBirth` VARCHAR(200), | |||
`idCard` VARCHAR(100), | |||
`occupation` VARCHAR(100), | |||
`firstName` VARCHAR(100), | |||
`givenName` VARCHAR(100), | |||
`genderMale` VARCHAR(30), | |||
`genderFemale` VARCHAR(30), | |||
`ddDateOfBirth` VARCHAR(10), | |||
`mmDateOfBirth` VARCHAR(10), | |||
`yyyyDateOfBirth` VARCHAR(10), | |||
PRIMARY KEY (`id`) | |||
) ENGINE=InnoDB DEFAULT CHARSET=utf8; |