| @@ -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; | |||