From 3df3a26e2589cfd7aa901be37b38ea25f0caef7f Mon Sep 17 00:00:00 2001 From: "vluk@2fi-solutions.com.hk" Date: Sat, 5 Jul 2025 01:42:29 +0800 Subject: [PATCH] try adding the CommonField object, added the application-prod.yml for production deploy, the local deploy disabled SSL --- .../commonField/entity/CommonField.java | 155 ++++++++++++++++++ .../entity/CommonFieldRepository.java | 6 + .../commonField/req/UpdateCommonFieldReq.java | 138 ++++++++++++++++ .../service/CommonFieldService.java | 155 ++++++++++++++++++ .../web/CommonFieldController.java | 100 +++++++++++ src/main/resources/application-prod.yml | 46 ++++++ src/main/resources/application.yml | 2 +- .../01_add_common_field_table.sql | 28 ++++ 8 files changed, 629 insertions(+), 1 deletion(-) create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonField.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonFieldRepository.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/commonField/req/UpdateCommonFieldReq.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/commonField/service/CommonFieldService.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/commonField/web/CommonFieldController.java create mode 100644 src/main/resources/application-prod.yml create mode 100644 src/main/resources/db/changelog/changes/06_commonField/01_add_common_field_table.sql diff --git a/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonField.java b/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonField.java new file mode 100644 index 0000000..f1d2c89 --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonField.java @@ -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{ + //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; + } + + + +} + diff --git a/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonFieldRepository.java b/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonFieldRepository.java new file mode 100644 index 0000000..58b331f --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/commonField/entity/CommonFieldRepository.java @@ -0,0 +1,6 @@ +package com.ffii.lioner.modules.lioner.commonField.entity; + +import com.ffii.core.support.AbstractRepository; + +public interface CommonFieldRepository extends AbstractRepository { +} diff --git a/src/main/java/com/ffii/lioner/modules/lioner/commonField/req/UpdateCommonFieldReq.java b/src/main/java/com/ffii/lioner/modules/lioner/commonField/req/UpdateCommonFieldReq.java new file mode 100644 index 0000000..97ddd06 --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/commonField/req/UpdateCommonFieldReq.java @@ -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; + } + +} diff --git a/src/main/java/com/ffii/lioner/modules/lioner/commonField/service/CommonFieldService.java b/src/main/java/com/ffii/lioner/modules/lioner/commonField/service/CommonFieldService.java new file mode 100644 index 0000000..ff377b4 --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/commonField/service/CommonFieldService.java @@ -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 { + + private AuditLogService auditLogService; + public CommonFieldService(JdbcDao jdbcDao, CommonFieldRepository repository, AuditLogService auditLogService) { + super(jdbcDao, repository); + this.auditLogService = auditLogService; + } + + public Map getAuditLogObject(Map 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> list(Map 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 saveOrUpdate(UpdateCommonFieldReq req) { + CommonField instance; + // List onUsingIdList = new ArrayList(); + 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() + ); + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/lioner/modules/lioner/commonField/web/CommonFieldController.java b/src/main/java/com/ffii/lioner/modules/lioner/commonField/web/CommonFieldController.java new file mode 100644 index 0000000..69a019a --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/commonField/web/CommonFieldController.java @@ -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 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 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> 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())); + } + + + +} diff --git a/src/main/resources/application-prod.yml b/src/main/resources/application-prod.yml new file mode 100644 index 0000000..cd49fab --- /dev/null +++ b/src/main/resources/application-prod.yml @@ -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' \ No newline at end of file diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index cd49fab..7f63354 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.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 diff --git a/src/main/resources/db/changelog/changes/06_commonField/01_add_common_field_table.sql b/src/main/resources/db/changelog/changes/06_commonField/01_add_common_field_table.sql new file mode 100644 index 0000000..7a4a41e --- /dev/null +++ b/src/main/resources/db/changelog/changes/06_commonField/01_add_common_field_table.sql @@ -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;