From 4fb8bfcfa251e8af6dbe598f0258beea7c07380d Mon Sep 17 00:00:00 2001 From: "vluk@2fi-solutions.com.hk" Date: Mon, 18 Aug 2025 21:10:30 +0800 Subject: [PATCH] no message --- .../modules/lioner/client/entity/Client.java | 10 +++ .../service/CommonFieldService.java | 2 +- .../modules/lioner/pdf/entity/Consultant.java | 34 ++++++++ .../pdf/entity/ConsultantRepository.java | 9 ++ .../lioner/pdf/req/UpdateConsultantReq.java | 26 ++++++ .../lioner/pdf/service/ConsultantService.java | 85 +++++++++++++++++++ .../lioner/pdf/service/PdfService.java | 15 +++- .../lioner/pdf/web/ConsultantController.java | 84 ++++++++++++++++++ .../15_consultant/01_add_consultant_table.sql | 17 ++++ 9 files changed, 277 insertions(+), 5 deletions(-) create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/pdf/entity/Consultant.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/pdf/entity/ConsultantRepository.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/pdf/req/UpdateConsultantReq.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/pdf/service/ConsultantService.java create mode 100644 src/main/java/com/ffii/lioner/modules/lioner/pdf/web/ConsultantController.java create mode 100644 src/main/resources/db/changelog/changes/15_consultant/01_add_consultant_table.sql diff --git a/src/main/java/com/ffii/lioner/modules/lioner/client/entity/Client.java b/src/main/java/com/ffii/lioner/modules/lioner/client/entity/Client.java index aca14dc..89f99d4 100644 --- a/src/main/java/com/ffii/lioner/modules/lioner/client/entity/Client.java +++ b/src/main/java/com/ffii/lioner/modules/lioner/client/entity/Client.java @@ -50,6 +50,9 @@ public class Client extends BaseEntity{ @Column private LocalDate dob; + + @Column + private Integer consultantId; public String getClientCode() { @@ -132,5 +135,12 @@ public class Client extends BaseEntity{ this.dob = dob; } + 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 index bf45d39..f360d64 100644 --- 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 @@ -134,7 +134,7 @@ public class CommonFieldService extends AbstractBaseEntityService{ + + @NotNull + @Column + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} + diff --git a/src/main/java/com/ffii/lioner/modules/lioner/pdf/entity/ConsultantRepository.java b/src/main/java/com/ffii/lioner/modules/lioner/pdf/entity/ConsultantRepository.java new file mode 100644 index 0000000..9bc46c2 --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/pdf/entity/ConsultantRepository.java @@ -0,0 +1,9 @@ +package com.ffii.lioner.modules.lioner.pdf.entity; + +import java.util.List; + +import com.ffii.core.support.AbstractRepository; + +public interface ConsultantRepository extends AbstractRepository { + +} diff --git a/src/main/java/com/ffii/lioner/modules/lioner/pdf/req/UpdateConsultantReq.java b/src/main/java/com/ffii/lioner/modules/lioner/pdf/req/UpdateConsultantReq.java new file mode 100644 index 0000000..cc50e8d --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/pdf/req/UpdateConsultantReq.java @@ -0,0 +1,26 @@ +package com.ffii.lioner.modules.lioner.pdf.req; + +public class UpdateConsultantReq { + + private Long id; + + private String name; + + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + +} diff --git a/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/ConsultantService.java b/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/ConsultantService.java new file mode 100644 index 0000000..84842cd --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/ConsultantService.java @@ -0,0 +1,85 @@ +package com.ffii.lioner.modules.lioner.pdf.service; + +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import org.springframework.stereotype.Service; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.ffii.core.exception.NotFoundException; +import com.ffii.core.exception.UnprocessableEntityException; +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.pdf.entity.Consultant; +import com.ffii.lioner.modules.lioner.pdf.req.UpdateConsultantReq; +import com.ffii.lioner.modules.lioner.pdf.entity.ConsultantRepository; + +@Service +public class ConsultantService extends AbstractBaseEntityService { + + private AuditLogService auditLogService; + + public ConsultantService(JdbcDao jdbcDao, ConsultantRepository repository, AuditLogService auditLogService) { + super(jdbcDao, repository); + this.auditLogService = auditLogService; + } + + public Map saveOrUpdate(UpdateConsultantReq req) { + Consultant instance; + // List onUsingIdList = new ArrayList(); + if(req.getId() == null) + req.setId(-1L); + + if (req.getId() > 0){ + instance = find(req.getId()).get(); + // onUsingIdList = this.getSelectedSubDivisionList(req.getId()); + } + else { + instance = new Consultant(); + } + + BeanUtils.copyProperties(req,instance); + instance = save(instance); + + return Map.of( + "id", instance.getId() + ); + } + + public List> list(Map args){ + StringBuilder sql = new StringBuilder("SELECT" + + " c.id, " + + " c.name, " + + " c.created, " + + " c.modified " + + " FROM consultant c " + + " WHERE c.deleted = FALSE " + ); + + if (args != null) { + if (args.containsKey("name")) + sql.append(" AND c.name LIKE :name "); + if (args.containsKey("createDateFrom")) + sql.append(" AND c.created >= :createDateFrom "); + if (args.containsKey("createDateTo")) + sql.append(" AND c.created <= :createDateTo "); + } + sql.append(" ORDER BY c.id asc "); + + return jdbcDao.queryForList(sql.toString(), args); + } + + public Map loadConsultant(Long id) { + String sql = "SELECT" + + " c.id, " + + " c.name " + + " FROM consultant c " + + " WHERE c.deleted = FALSE " + + " AND c.id = :id " + ; + return jdbcDao.queryForMap(sql, Map.of("id", id)).orElseThrow(NotFoundException::new); + } +} \ No newline at end of file diff --git a/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java b/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java index 06ef072..ef0a51f 100644 --- a/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java +++ b/src/main/java/com/ffii/lioner/modules/lioner/pdf/service/PdfService.java @@ -445,7 +445,6 @@ public class PdfService extends AbstractBaseEntityService commonField.setFna_b1b_2(fieldValue); case "part2_1d_3" -> commonField.setFna_b1b_3(fieldValue); - case "part2_1e_desc" -> commonField.setFna_b1_b(fieldValue); + case "part2_1e" -> commonField.setFna_b1_b(fieldValue); case "part2_1f" -> commonField.setFna_b1_f(fieldValue); case "part2_1f_desc" -> commonField.setFna_b1_f_other(fieldValue); diff --git a/src/main/java/com/ffii/lioner/modules/lioner/pdf/web/ConsultantController.java b/src/main/java/com/ffii/lioner/modules/lioner/pdf/web/ConsultantController.java new file mode 100644 index 0000000..b230dcf --- /dev/null +++ b/src/main/java/com/ffii/lioner/modules/lioner/pdf/web/ConsultantController.java @@ -0,0 +1,84 @@ +package com.ffii.lioner.modules.lioner.pdf.web; + +import java.util.HashMap; +import java.util.Map; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +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.CrossOrigin; +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.RestController; + +import com.ffii.core.response.RecordsRes; +import com.ffii.core.utils.CriteriaArgsBuilder; +import com.ffii.core.utils.Params; +import com.ffii.lioner.modules.lioner.client.req.UpdateClientReq; +import com.ffii.lioner.modules.lioner.pdf.req.UpdateConsultantReq; +import com.ffii.lioner.modules.lioner.pdf.service.ConsultantService; + +import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.Valid; + + +@RestController +@RequestMapping("/consultant") +@CrossOrigin(origins = "", allowedHeaders = "") + +public class ConsultantController { + + private ConsultantService consultantService; + private static final Logger logger = LoggerFactory.getLogger(ConsultantController.class); + + public ConsultantController(ConsultantService consultantService) { + this.consultantService = consultantService; + } + + // @GetMapping("/{id}") + // public List> get(@PathVariable Long id) { + // return Map.of( + // Params.DATA, consultantService.findByConsultantId(id).orElseThrow(NotFoundException::new) + // ); + // } + + @GetMapping + public RecordsRes> list(HttpServletRequest request) throws ServletRequestBindingException { + return new RecordsRes<>(consultantService.list( + CriteriaArgsBuilder.withRequest(request) + .addStringLike("name") + .addDate("createDateFrom") + .addDate("createDateTo") + .addStringLike("remarks") + .build())); + } + + @GetMapping("/{id}") + public Map get(@PathVariable Long id) { + return consultantService.loadConsultant(id); + } + + @Transactional(isolation = Isolation.SERIALIZABLE, rollbackFor = Exception.class, readOnly = false) + @PostMapping("/save") + public Map saveOrUpdate(@RequestBody @Valid UpdateConsultantReq req) { + logger.info("saveOrUpdate"); + return Map.of( + Params.DATA,consultantService.saveOrUpdate(req) + ); + + + } + + @GetMapping("/combo") + public RecordsRes> getCombo(HttpServletRequest request) throws ServletRequestBindingException { + return new RecordsRes<>(consultantService.list( + CriteriaArgsBuilder.withRequest(request) + .build())); + } +} diff --git a/src/main/resources/db/changelog/changes/15_consultant/01_add_consultant_table.sql b/src/main/resources/db/changelog/changes/15_consultant/01_add_consultant_table.sql new file mode 100644 index 0000000..d35f33e --- /dev/null +++ b/src/main/resources/db/changelog/changes/15_consultant/01_add_consultant_table.sql @@ -0,0 +1,17 @@ +--liquibase formatted sql + +--changeset vin:add consultant table + +CREATE TABLE `consultant` ( + `id` int NOT NULL AUTO_INCREMENT, + `created` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `createdBy` int DEFAULT NULL, + `version` int NOT NULL DEFAULT '0', + `modified` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP, + `modifiedBy` int DEFAULT NULL, + `deleted` tinyint(1) NOT NULL DEFAULT '0', + + `name` VARCHAR(500) NOT NULL, + + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8; \ No newline at end of file