diff --git a/pom.xml b/pom.xml index b627d25..3bb0537 100644 --- a/pom.xml +++ b/pom.xml @@ -27,7 +27,7 @@ jdt_apt 1.2.0.Final 1.16.18 - ${ENV_VAR} + local target/classes/application.properties src/main/environment/common_${environment}.properties true diff --git a/src/main/environment/common_local.properties b/src/main/environment/common_local.properties index e59c4f5..739894e 100644 --- a/src/main/environment/common_local.properties +++ b/src/main/environment/common_local.properties @@ -5,17 +5,26 @@ fhir-url=/fhirapi-v1.0 tm-url=/tmapi-v1.0 ##--------------------------------------------## Primary db------------------------------------------------------------------- -spring.datasource.url= -spring.datasource.username= -spring.datasource.password= -spring.datasource.driver-class-name=com.mysql.jdbc.Driver +server.port=8082 + +spring.datasource.url=jdbc:mysql://localhost:3306/db_iemr +spring.datasource.username=root +spring.datasource.password=YesBank@123# +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver ##--------------------------------------------## Secondary db------------------------------------------------------------------- -secondary.datasource.username= -secondary.datasource.password= -secondary.datasource.url= -secondary.datasource.driver-class-name=com.mysql.jdbc.Driver +secondary.datasource.url=jdbc:mysql://localhost:3306/db_identity +secondary.datasource.username=root +secondary.datasource.password=YesBank@123# +secondary.datasource.driver-class-name=com.mysql.cj.jdbc.Driver springdoc.api-docs.enabled=true -springdoc.swagger-ui.enabled=true \ No newline at end of file +springdoc.swagger-ui.enabled=true + +spring.session.store-type=redis +spring.redis.host=localhost +spring.redis.password=123456 +spring.redis.port=6379 +jakarta.persistence.schema-generation.database.action=create +spring.jpa.defer-datasource-initialization=true \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/controller/AshaProfileController.java b/src/main/java/com/iemr/flw/controller/AshaProfileController.java new file mode 100644 index 0000000..eb8daff --- /dev/null +++ b/src/main/java/com/iemr/flw/controller/AshaProfileController.java @@ -0,0 +1,88 @@ +package com.iemr.flw.controller; + +import com.iemr.flw.domain.iemr.AshaWorker; +import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.dto.iemr.UserServiceRoleDTO; +import com.iemr.flw.repo.iemr.UserServiceRoleRepo; +import com.iemr.flw.service.AshaProfileService; +import com.iemr.flw.service.EmployeeMasterInter; +import com.iemr.flw.service.UserService; +import io.swagger.v3.oas.annotations.Operation; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +@RestController +@RequestMapping(value = "/asha", headers = "Authorization", produces = "application/json") +public class AshaProfileController { + private Logger logger = LoggerFactory.getLogger(this.getClass().getSimpleName()); + @Autowired + AshaProfileService ashaProfileService; + private Map response = new HashMap<>(); + + @Autowired + private EmployeeMasterInter employeeMasterInter; + @CrossOrigin() + @Operation(summary = "Edit Asha Profile") + + + @RequestMapping(value = "editProfile", method = { RequestMethod.POST }, produces = { + "application/json" },consumes = "application/json" ) + public ResponseEntity> editEmployee(@RequestBody AshaWorker editEmployee) { + + try { + System.out.println(editEmployee.toString()); + + + AshaWorker ashaWorker = ashaProfileService.saveEditData(editEmployee); + response.put("data",ashaWorker); + response.put("statusCode",200); + response.put("status","Success"); + response.put("errorMessage","Success"); + + + + + } catch (Exception e) { + logger.error("Unexpected error:", e); + ResponseEntity.status(500).body(e.getMessage()); + + } + + return ResponseEntity.ok().body(response); + + } + @Operation(summary = "Profile Detail") + @RequestMapping(value = "getProfile",method = RequestMethod.GET ,headers = "Authorization" ) + public ResponseEntity> getProfile(@RequestParam ("employeeId")Integer employeeId){ + try { + AshaWorker ashaWorker = ashaProfileService.getProfileData(employeeId); + if(ashaWorker!=null){ + response.put("data",ashaWorker); + response.put("statusCode",200); + response.put("status","Success"); + response.put("errorMessage","Success"); + }else { + response.put("data",ashaWorker); + response.put("statusCode",200); + response.put("status","Success"); + response.put("errorMessage","Asha profile not found"); + } + + }catch (Exception e) { + logger.error("Unexpected error:", e); + ResponseEntity.status(500).body(e.getMessage()); + + } + + return ResponseEntity.ok().body(response); + + + } +} diff --git a/src/main/java/com/iemr/flw/controller/BeneficiaryOTPGatewayController.java b/src/main/java/com/iemr/flw/controller/BeneficiaryOTPGatewayController.java new file mode 100644 index 0000000..1ab9984 --- /dev/null +++ b/src/main/java/com/iemr/flw/controller/BeneficiaryOTPGatewayController.java @@ -0,0 +1,93 @@ +package com.iemr.flw.controller; + +import com.iemr.flw.domain.iemr.OtpBeneficiary; +import com.iemr.flw.dto.iemr.OTPRequestParsor; +import com.iemr.flw.dto.iemr.OtpRequestDTO; +import com.iemr.flw.mapper.InputMapper; +import com.iemr.flw.service.OTPHandler; +import com.iemr.flw.utils.response.OutputResponse; +import io.lettuce.core.dynamic.annotation.Param; +import io.swagger.v3.oas.annotations.Operation; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.ws.rs.core.MediaType; + +@RestController +@RequestMapping("/beneficiary") +public class BeneficiaryOTPGatewayController { + final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + @Autowired + private OTPHandler otpHandler; + + @Operation(summary = "Send OTP") + @RequestMapping(value = "/sendOTP", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON,headers = "Authorization") + public String sendOTP(@RequestParam String phoneNumber) { + OutputResponse response = new OutputResponse(); + + try { + + String success = otpHandler.sendOTP(phoneNumber); + + if (success.contains("success")) + response.setResponse(success); + else + response.setError(5000, "failure"); + + } catch (Exception e) { + logger.error("error in sending OTP : " + e); + response.setError(5000, "error : " + e); + } + return response.toString(); + } + + @CrossOrigin() + @Operation(summary = "Validate OTP") + @RequestMapping(value = "/validateOTP", method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON, produces = MediaType.APPLICATION_JSON,headers = "Authorization") + public String validateOTP(@RequestBody OtpRequestDTO requestOBJ) { + + OutputResponse response = new OutputResponse(); + + try { +// OTPRequestParsor obj = InputMapper.gson().fromJson(requestOBJ, OTPRequestParsor.class); + + JSONObject responseOBJ = otpHandler.validateOTP(requestOBJ); + if (responseOBJ != null) + response.setResponse(responseOBJ.toString()); + else + response.setError(5000, "failure"); + + } catch (Exception e) { + logger.error("error in validating OTP : " + e); + response.setError(5000, "error : " + e); + } + return response.toString(); + } + + @CrossOrigin() + @Operation(summary = "Resend OTP") + @RequestMapping(value = "/resendOTP", method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON,headers = "Authorization") + public String resendOTP(@RequestParam String phoneNumber) { + + OutputResponse response = new OutputResponse(); + + try { + + String success = otpHandler.resendOTP(phoneNumber); + if (success.contains("success")) + response.setResponse(success); + else + response.setError(5000, "failure"); + + } catch (Exception e) { + logger.error("error in re-sending OTP : " + e); + response.setError(5000, "error : " + e); + } + return response.toString(); + } + +} diff --git a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java index 61476ef..4fb2630 100644 --- a/src/main/java/com/iemr/flw/controller/MaternalHealthController.java +++ b/src/main/java/com/iemr/flw/controller/MaternalHealthController.java @@ -3,18 +3,20 @@ import com.google.gson.Gson; import com.iemr.flw.dto.identity.GetBenRequestHandler; import com.iemr.flw.dto.iemr.*; -import com.iemr.flw.service.ChildService; -import com.iemr.flw.service.DeliveryOutcomeService; -import com.iemr.flw.service.InfantService; -import com.iemr.flw.service.MaternalHealthService; +import com.iemr.flw.service.*; import com.iemr.flw.utils.response.OutputResponse; import io.swagger.v3.oas.annotations.Operation; +import jakarta.validation.Valid; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import org.springframework.web.multipart.MultipartFile; import java.sql.Timestamp; import java.util.List; @@ -24,6 +26,8 @@ public class MaternalHealthController { private final Logger logger = LoggerFactory.getLogger(CoupleController.class); + @Autowired + FileStorageService fileStorageService; @Autowired private MaternalHealthService maternalHealthService; @@ -108,6 +112,49 @@ public String saveANCVisit(@RequestBody List ancVisitDTOs, return response.toString(); } + @CrossOrigin() + @Operation(summary = "save ANC visit details with file") + @RequestMapping(value = {"/ancVisit/saveAll"}, method = {RequestMethod.POST}, consumes = {MediaType.MULTIPART_FORM_DATA_VALUE}) + public ResponseEntity saveANCVisit( + @RequestPart("ancVisitDTOs") @Valid @RequestBody List ancVisitDTOs, + @RequestPart(value = "file", required = false) MultipartFile file, + @RequestHeader(value = "Authorization") String Authorization) { + + OutputResponse response = new OutputResponse(); + try { + if (ancVisitDTOs.isEmpty()) { + response.setError(5000, "Invalid/NULL request obj"); + return ResponseEntity.badRequest().body(response); + } + + // Save File if provided + String filePath = null; + if (file != null && !file.isEmpty()) { + filePath = fileStorageService.storeFile(file); // Save the file + } + + // Set the filePath in DTOs + for (ANCVisitDTO dto : ancVisitDTOs) { + dto.setFilePath(filePath); + } + + logger.info("Saving ANC visits with timestamp : " + new Timestamp(System.currentTimeMillis())); + String s = maternalHealthService.saveANCVisit(ancVisitDTOs); + + if (s != null) { + response.setResponse(s); + return ResponseEntity.ok(response); + } else { + response.setError(5000, "Saving ANC data to DB failed"); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } catch (Exception e) { + logger.error("Error in saving ANC visit details : " + e); + response.setError(5000, "Error in saving ANC visit details: " + e.getMessage()); + return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(response); + } + } + @CrossOrigin() @Operation(summary = "get anc visit details") @RequestMapping(value = {"/ancVisit/getAll"}, method = {RequestMethod.POST}) diff --git a/src/main/java/com/iemr/flw/controller/MicroBirthPlanController.java b/src/main/java/com/iemr/flw/controller/MicroBirthPlanController.java new file mode 100644 index 0000000..3410394 --- /dev/null +++ b/src/main/java/com/iemr/flw/controller/MicroBirthPlanController.java @@ -0,0 +1,39 @@ +package com.iemr.flw.controller; + +import com.iemr.flw.domain.iemr.MicroBirthPlan; +import com.iemr.flw.service.MicroBirthPlanService; +import io.swagger.v3.oas.annotations.Operation; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +import java.util.List; + +@RestController +@RequestMapping(value = "/micro-birthPlan",headers = "Authorization", produces = "application/json") +public class MicroBirthPlanController { + @Autowired + private MicroBirthPlanService service; + @CrossOrigin() + @Operation(summary = "Micro BirthPlan") + + @RequestMapping(value = "save",method = RequestMethod.POST) + public ResponseEntity createMicroBirthPlan(@RequestBody MicroBirthPlan birthPlan) { + return ResponseEntity.ok(service.createMicroBirthPlan(birthPlan)); + } + + + @RequestMapping(value = "downSync",method = RequestMethod.GET) + public ResponseEntity> getAllMicroBirthPlans() { + return ResponseEntity.ok(service.getAllMicroBirthPlans()); + } + + @RequestMapping(value = "getAllMicroBirthPlansBy{id}",method = RequestMethod.GET) + public ResponseEntity getMicroBirthPlanById(@PathVariable Long id) { + return service.getMicroBirthPlanById(id) + .map(ResponseEntity::ok) + .orElse(ResponseEntity.notFound().build()); + } + + +} diff --git a/src/main/java/com/iemr/flw/controller/UserController.java b/src/main/java/com/iemr/flw/controller/UserController.java index 4a1a79f..bf596bf 100644 --- a/src/main/java/com/iemr/flw/controller/UserController.java +++ b/src/main/java/com/iemr/flw/controller/UserController.java @@ -32,7 +32,7 @@ public ResponseEntity getUserDetail(@RequestParam(value = "userId") Integer u return new ResponseEntity<>( new ApiResponse(true, null, result), HttpStatus.ACCEPTED); } catch (Exception e) { - logger.error("Error in fetching user role, " + e); + logger.error("Error in fetching user role, " + e.getMessage()); return new ResponseEntity<>( new ApiResponse(false, "Error in fetching user role, " + e.getMessage(), null), HttpStatus.INTERNAL_SERVER_ERROR); } diff --git a/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java index 9aeb887..4207e27 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java +++ b/src/main/java/com/iemr/flw/domain/iemr/ANCVisit.java @@ -112,4 +112,8 @@ public class ANCVisit { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "file_path") + private String filePath; + } diff --git a/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java b/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java new file mode 100644 index 0000000..5cf5bfd --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/AshaWorker.java @@ -0,0 +1,100 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import jakarta.validation.constraints.*; +import lombok.*; + +import java.time.LocalDate; + + +@Entity +@Data +@Table(name = "asha_profile",schema = "db_iemr") +public class AshaWorker { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Column(name = "id") + private Long id; + + @Column(name = "name") + private String name; + + @Column(name = "village") + private String village; + + @Column(name = "employee_id") + private Integer employeeId; // Changed from Integer to String + + @Column(name = "dob") + private LocalDate dob; // Changed from String to LocalDate + + + @Column(name = "mobile_number") + private String mobileNumber; + + @Column(name = "alternate_mobile_number") + private String alternateMobileNumber; + + @Column(name = "father_or_spouse_name") + private String fatherOrSpouseName; + + @Column(name = "date_of_joining") + private LocalDate dateOfJoining; // Changed from String to LocalDate + + + @Column(name = "bank_account") + private String bankAccount; + + @Column(name = "ifsc") + private String ifsc; + + + @Column(name = "population_covered") + private Integer populationCovered; + + + @Column(name = "cho_name",nullable = false) + private String choName; + + + @Column(name = "cho_mobile") + private String choMobile; + + + @Column(name = "aww_name") + private String awwName; + + + @Column(name = "aww_mobile") + private String awwMobile; + + + @Column(name = "anm1_name") + private String anm1Name; + + + @Column(name = "anm1_mobile") + private String anm1Mobile; + + + @Column(name = "anm2_name") + private String anm2Name; + + + @Column(name = "anm2_mobile") + private String anm2Mobile; + + + @Column(name = "abha_number") + private String abhaNumber; + + @Column(name = "asha_household_registration") + private String ashaHouseholdRegistration; + + @Column(name = "asha_family_member") + private String ashaFamilyMember; + + @Column(name = "ProviderServiceMapID") + private Integer ProviderServiceMapID; +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java index abe8313..d5db1b4 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java +++ b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleRegister.java @@ -157,4 +157,10 @@ public class EligibleCoupleRegister { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "lmp_date") + private Timestamp lmpDate; + + } + diff --git a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java index 2cde943..729fa36 100644 --- a/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java +++ b/src/main/java/com/iemr/flw/domain/iemr/EligibleCoupleTracking.java @@ -49,4 +49,7 @@ public class EligibleCoupleTracking { @Column(name = "updated_by") private String updatedBy; + + @Column(name = "lmp_date") + private Timestamp lmpDate; } diff --git a/src/main/java/com/iemr/flw/domain/iemr/M_User.java b/src/main/java/com/iemr/flw/domain/iemr/M_User.java new file mode 100644 index 0000000..fbacff2 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/M_User.java @@ -0,0 +1,143 @@ +package com.iemr.flw.domain.iemr; + +import com.google.gson.annotations.Expose; +import jakarta.persistence.*; +import lombok.Data; + +import java.sql.Date; +import java.sql.Timestamp; +import java.time.LocalDate; + +@Entity +@Table(name = "m_User",schema = "db_iemr") +@Data +public class M_User { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + @Expose + @Column(name="UserID") + private Integer userID; + @Expose + @Column(name="TitleID") + private Integer titleID; + @Expose + @Column(name="FirstName") + private String firstName; + @Expose + @Column(name="MiddleName") + private String middleName; + @Expose + @Column(name="LastName") + private String lastName; + @Expose + @Column(name="GenderID") + private Short genderID; + + @Expose + @Column(name="MaritalStatusID") + private Integer maritalStatusID; + @Expose + @Column(name="DesignationID") + private Integer designationID; + + @Expose + @Column(name="AadhaarNo") + private String aadhaarNo; + @Expose + @Column(name="PAN") + private String pAN; + @Expose + @Column(name="DOB") + private LocalDate dOB; + @Expose + @Column(name="DOJ") + private LocalDate dOJ; + @Expose + @Column(name="QualificationID") + private Integer qualificationID; + @Expose + @Column(name="HealthProfessionalID") + private String healthProfessionalID; + @Expose + @Column(name="UserName") + private String userName; + @Expose + @Column(name="Password") + private String password; + @Expose + @Column(name="IsExternal") + private Boolean isExternal; + @Expose + @Column(name="AgentID") + private String agentID; + @Expose + @Column(name="AgentPassword") + private String agentPassword; + @Expose + @Column(name="EmailID") + private String emailID; + @Expose + @Column(name="StatusID") + private Integer statusID; + @Expose + @Column(name="EmergencyContactPerson") + private String emergencyContactPerson; + @Expose + @Column(name="EmergencyContactNo") + private String emergencyContactNo; + @Expose + @Column(name="IsSupervisor") + private Boolean isSupervisor; + @Expose + @Column(name="Deleted",insertable = false, updatable = true) + private Boolean deleted; + @Expose + @Column(name="CreatedBy") + private String createdBy; + @Expose + @Column(name="EmployeeID") + private String employeeID; + @Expose + @Column(name="CreatedDate",insertable = false, updatable = false) + private Timestamp createdDate; + @Expose + @Column(name="ModifiedBy") + private String modifiedBy; + @Expose + @Column(name="LastModDate",insertable = false, updatable = false) + private Timestamp lastModDate; + + @Expose + @Column(name="Remarks") + private String remarks; + + @Expose + @Column(name="ContactNo") + private String contactNo; + + + @Expose + @Column(name="IsProviderAdmin") + private Boolean isProviderAdmin; + + @Expose + @Column(name="ServiceProviderID") + private Integer serviceProviderID; + + + + @Expose + @Column(name = "failed_attempt", insertable = false) + private Integer failedAttempt; + public M_User() { + // TODO Auto-generated constructor stub + } + + public M_User(Integer userID, String userName) { + // TODO Auto-generated constructor stub + this.userID=userID; + this.userName=userName; + } + +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java b/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java new file mode 100644 index 0000000..89f97f6 --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/MicroBirthPlan.java @@ -0,0 +1,68 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; + +@Entity +@Table(name = "t_micro_birth_plan", schema = "db_iemr") +@Data +public class MicroBirthPlan { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "pw_name") + private String pwName; // Auto-populated + + @Column(name = "age") + private Integer age; // Auto-populated + + @Column(name = "contact_no_1", length = 10) + private String contactNo1; // Auto-filled, must be 10 digits, starts with 6-9 + + @Column(name = "contact_no_2", length = 10) + private String contactNo2; // Optional, 10 digits, starts with 6-9 + + @Column(name = "sc_hwc_tg_hosp", length = 100) + private String scHwcTgHosp; // Alphanumeric, all caps + + @Column(name = "block", length = 100) + private String block; // Alphanumeric, all caps + + @Column(name = "husband_name") + private String husbandName; // Auto-populated + + @Column(name = "nearest_sc_hwc", length = 100) + private String nearestScHwc; // Alphanumeric, all caps + + @Column(name = "nearest_phc", length = 100) + private String nearestPhc; // Alphanumeric, all caps + + @Column(name = "nearest_fru", length = 100) + private String nearestFru; // Alphanumeric, all caps + + @Column(name = "nearest_usg", length = 100) + private String nearestUsg; // Alphanumeric, all caps + + @Column(name = "blood_group") + private String bloodGroup; // Spinner: A+, B+, etc. + + @Column(name = "blood_donors", length = 50) + private String bloodDonors; // Alphabets only, all caps + + @Column(name = "birth_companion", length = 50) + private String birthCompanion; // Alphabets only, all caps + + @Column(name = "child_caretaker", length = 50) + private String childCaretaker; // Alphabets only, all caps + + @Column(name = "community_support", length = 100) + private String communitySupport; // Alphabets only, all caps + + @Column(name = "transportation_mode", length = 100) + private String transportationMode; // Mode of transport + + @Column(name = "is_synced") + private Boolean isSynced; +} diff --git a/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java b/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java new file mode 100644 index 0000000..15a87bd --- /dev/null +++ b/src/main/java/com/iemr/flw/domain/iemr/OtpBeneficiary.java @@ -0,0 +1,33 @@ +package com.iemr.flw.domain.iemr; + +import jakarta.persistence.*; +import lombok.Data; +import java.sql.Timestamp; + +@Entity +@Table(name = "m_otp_beneficiary", schema = "db_iemr") +@Data +public class OtpBeneficiary { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Long id; + + @Column(name = "beneficiaryId", nullable = false) + private Long beneficiaryId; + + @Column(name = "phoneNumber", nullable = false, length = 45) + private String phoneNumber; + + @Column(name = "isOtpVerify") + private Boolean isOtpVerify = false; + + @Column(name = "otp", nullable = false) + private Integer otp; + + @Column(name = "isExpired") + private Boolean isExpired = false; + + @Column(name = "createdAt", updatable = false, columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP") + private Timestamp createdAt; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java index 83f1ace..0cd0784 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/ANCVisitDTO.java @@ -2,6 +2,7 @@ import lombok.Data; +import java.io.File; import java.sql.Timestamp; @Data @@ -42,5 +43,8 @@ public class ANCVisitDTO { private Timestamp updatedDate; private String updatedBy; private Integer providerServiceMapID; + private String filePath; + + } diff --git a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java index e51bbb7..43b5ff4 100644 --- a/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java +++ b/src/main/java/com/iemr/flw/dto/iemr/EligibleCoupleDTO.java @@ -105,4 +105,7 @@ public class EligibleCoupleDTO implements Serializable { private Timestamp updatedDate; private String updatedBy; + + private Timestamp lmpDate; + } diff --git a/src/main/java/com/iemr/flw/dto/iemr/OTPRequestParsor.java b/src/main/java/com/iemr/flw/dto/iemr/OTPRequestParsor.java new file mode 100644 index 0000000..91dc1d1 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OTPRequestParsor.java @@ -0,0 +1,9 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class OTPRequestParsor { + private String mobNo; + private int otp; +} diff --git a/src/main/java/com/iemr/flw/dto/iemr/OtpRequestDTO.java b/src/main/java/com/iemr/flw/dto/iemr/OtpRequestDTO.java new file mode 100644 index 0000000..b9be965 --- /dev/null +++ b/src/main/java/com/iemr/flw/dto/iemr/OtpRequestDTO.java @@ -0,0 +1,10 @@ +package com.iemr.flw.dto.iemr; + +import lombok.Data; + +@Data +public class OtpRequestDTO { + private Long beneficiaryId; + private String phoneNumber; + private Integer otp; +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/AshaProfileRepo.java b/src/main/java/com/iemr/flw/repo/iemr/AshaProfileRepo.java new file mode 100644 index 0000000..c7ed26c --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/AshaProfileRepo.java @@ -0,0 +1,10 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.AshaWorker; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository +public interface AshaProfileRepo extends JpaRepository { + AshaWorker findByEmployeeId(Integer employeeId); + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java new file mode 100644 index 0000000..6b57efc --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/EmployeeMasterRepo.java @@ -0,0 +1,11 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.M_User; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface EmployeeMasterRepo extends JpaRepository { + M_User findByUserID(Integer userID); + +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/MicroBirthPlanRepository.java b/src/main/java/com/iemr/flw/repo/iemr/MicroBirthPlanRepository.java new file mode 100644 index 0000000..489ddd7 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/MicroBirthPlanRepository.java @@ -0,0 +1,9 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.MicroBirthPlan; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface MicroBirthPlanRepository extends JpaRepository { +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/OtpBeneficiaryRepository.java b/src/main/java/com/iemr/flw/repo/iemr/OtpBeneficiaryRepository.java new file mode 100644 index 0000000..bc22357 --- /dev/null +++ b/src/main/java/com/iemr/flw/repo/iemr/OtpBeneficiaryRepository.java @@ -0,0 +1,11 @@ +package com.iemr.flw.repo.iemr; + +import com.iemr.flw.domain.iemr.OtpBeneficiary; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; +@Repository +public interface OtpBeneficiaryRepository extends JpaRepository { + Optional findByPhoneNumberAndOtp(String phoneNumber, Integer otp); +} diff --git a/src/main/java/com/iemr/flw/repo/iemr/UserServiceRoleRepo.java b/src/main/java/com/iemr/flw/repo/iemr/UserServiceRoleRepo.java index 3fbfe0b..be829bd 100644 --- a/src/main/java/com/iemr/flw/repo/iemr/UserServiceRoleRepo.java +++ b/src/main/java/com/iemr/flw/repo/iemr/UserServiceRoleRepo.java @@ -6,7 +6,6 @@ import org.springframework.data.jpa.repository.Query; import org.springframework.data.repository.query.Param; import org.springframework.stereotype.Repository; - import java.util.List; @Repository @@ -15,8 +14,8 @@ public interface UserServiceRoleRepo extends JpaRepository getUserRole(@Param("userId") Integer userId); + List getUserRole(@Param("userId") Integer userId); @Query("select u.userId from UserServiceRole u where u.userName = :userName") Integer getUserIdByName(@Param("userName") String userName); diff --git a/src/main/java/com/iemr/flw/service/AshaProfileService.java b/src/main/java/com/iemr/flw/service/AshaProfileService.java new file mode 100644 index 0000000..c576109 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/AshaProfileService.java @@ -0,0 +1,11 @@ +package com.iemr.flw.service; + +import com.iemr.flw.domain.iemr.AshaWorker; +import org.springframework.stereotype.Service; + +@Service +public interface AshaProfileService { + AshaWorker saveEditData(AshaWorker ashaWorkerRequest); + AshaWorker getProfileData(Integer employeeId); + +} diff --git a/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java b/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java new file mode 100644 index 0000000..c360c34 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/EmployeeMasterInter.java @@ -0,0 +1,10 @@ +package com.iemr.flw.service; + +import com.iemr.flw.domain.iemr.M_User; +import org.springframework.stereotype.Service; + +@Service +public interface EmployeeMasterInter { + public M_User getUserDetails(Integer userID); + +} diff --git a/src/main/java/com/iemr/flw/service/FileStorageService.java b/src/main/java/com/iemr/flw/service/FileStorageService.java new file mode 100644 index 0000000..d22352c --- /dev/null +++ b/src/main/java/com/iemr/flw/service/FileStorageService.java @@ -0,0 +1,38 @@ +package com.iemr.flw.service; + +import org.springframework.stereotype.Service; +import org.springframework.web.multipart.MultipartFile; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Path; +import java.nio.file.Paths; +import java.util.UUID; + +@Service +public class FileStorageService { + + private static final String UPLOAD_DIR = "uploads/"; // Define your upload directory + + public String storeFile(MultipartFile file) throws IOException { + if (file.isEmpty()) { + throw new IllegalStateException("Cannot store empty file."); + } + + // Create directories if they do not exist + File uploadDir = new File(UPLOAD_DIR); + if (!uploadDir.exists()) { + uploadDir.mkdirs(); + } + + // Generate a unique file name + String fileName = UUID.randomUUID().toString() + "_" + file.getOriginalFilename(); + Path filePath = Paths.get(UPLOAD_DIR + fileName); + + // Save file + Files.write(filePath, file.getBytes()); + + return filePath.toString(); // Return the saved file path + } +} \ No newline at end of file diff --git a/src/main/java/com/iemr/flw/service/MicroBirthPlanService.java b/src/main/java/com/iemr/flw/service/MicroBirthPlanService.java new file mode 100644 index 0000000..c3b8d50 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/MicroBirthPlanService.java @@ -0,0 +1,55 @@ +package com.iemr.flw.service; + +import com.iemr.flw.domain.iemr.MicroBirthPlan; +import com.iemr.flw.repo.iemr.MicroBirthPlanRepository; +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; +import java.util.Optional; + +@Service +public class MicroBirthPlanService { + @Autowired + private MicroBirthPlanRepository repository; + + public MicroBirthPlan createMicroBirthPlan(MicroBirthPlan birthPlan) { + return repository.save(birthPlan); + } + + public List getAllMicroBirthPlans() { + return repository.findAll(); + } + + public Optional getMicroBirthPlanById(Long id) { + return repository.findById(id); + } + + public MicroBirthPlan updateMicroBirthPlan(Long id, MicroBirthPlan updatedPlan) { + return repository.findById(id).map(existingPlan -> { + existingPlan.setPwName(updatedPlan.getPwName()); + existingPlan.setAge(updatedPlan.getAge()); + existingPlan.setContactNo1(updatedPlan.getContactNo1()); + existingPlan.setContactNo2(updatedPlan.getContactNo2()); + existingPlan.setScHwcTgHosp(updatedPlan.getScHwcTgHosp()); + existingPlan.setBlock(updatedPlan.getBlock()); + existingPlan.setHusbandName(updatedPlan.getHusbandName()); + existingPlan.setNearestScHwc(updatedPlan.getNearestScHwc()); + existingPlan.setNearestPhc(updatedPlan.getNearestPhc()); + existingPlan.setNearestFru(updatedPlan.getNearestFru()); + existingPlan.setNearestUsg(updatedPlan.getNearestUsg()); + existingPlan.setBloodGroup(updatedPlan.getBloodGroup()); + existingPlan.setBloodDonors(updatedPlan.getBloodDonors()); + existingPlan.setBirthCompanion(updatedPlan.getBirthCompanion()); + existingPlan.setChildCaretaker(updatedPlan.getChildCaretaker()); + existingPlan.setCommunitySupport(updatedPlan.getCommunitySupport()); + existingPlan.setTransportationMode(updatedPlan.getTransportationMode()); + return repository.save(existingPlan); + }).orElseThrow(() -> new RuntimeException("Micro Birth Plan not found")); + } + + public void deleteMicroBirthPlan(Long id) { + repository.deleteById(id); + } +} diff --git a/src/main/java/com/iemr/flw/service/OTPHandler.java b/src/main/java/com/iemr/flw/service/OTPHandler.java new file mode 100644 index 0000000..0ab17b5 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/OTPHandler.java @@ -0,0 +1,15 @@ +package com.iemr.flw.service; + +import com.iemr.flw.dto.iemr.OTPRequestParsor; +import com.iemr.flw.dto.iemr.OtpRequestDTO; +import org.json.JSONObject; +import org.springframework.stereotype.Service; + +public interface OTPHandler { + public String sendOTP(String mobNo) throws Exception; + + public JSONObject validateOTP(OtpRequestDTO obj) throws Exception; + + public String resendOTP(String mobNo) throws Exception; + +} diff --git a/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java new file mode 100644 index 0000000..0673cc4 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/AshaProfileImpl.java @@ -0,0 +1,101 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.AshaWorker; +import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.repo.iemr.AshaProfileRepo; +import com.iemr.flw.service.AshaProfileService; +import com.iemr.flw.service.EmployeeMasterInter; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.Objects; + +@Service +public class AshaProfileImpl implements AshaProfileService { + @Autowired + AshaProfileRepo ashaProfileRepo; + @Autowired + EmployeeMasterInter employeeMasterInter; + + private final Logger logger = LoggerFactory.getLogger(AshaProfileImpl.class); + + @Override + public AshaWorker saveEditData(AshaWorker ashaWorkerRequest) { + AshaWorker ashaWorker; + if (ashaWorkerRequest.getId() != null) { + ashaWorker = ashaProfileRepo.saveAndFlush(updateProfile(ashaWorkerRequest)); + + } else { + ashaWorker = ashaProfileRepo.saveAndFlush(ashaWorkerRequest); + + } + System.out.println("ashaWorker->>>" + ashaWorker.toString()); + + return ashaWorker; + + + } + + @Override + public AshaWorker getProfileData(Integer employeeId) { + if (ashaProfileRepo.findByEmployeeId(employeeId)!=null) { + return ashaProfileRepo.findByEmployeeId(employeeId); + } else { + return getDetails(employeeId); + } + } + + private AshaWorker getDetails(Integer userID) { + AshaWorker ashaWorker = new AshaWorker(); + M_User m_user = employeeMasterInter.getUserDetails(userID); + + ashaWorker.setEmployeeId(m_user.getUserID()); + ashaWorker.setEmployeeId(m_user.getUserID()); + ashaWorker.setDob(m_user.getDOB()); + ashaWorker.setDateOfJoining(m_user.getDOJ()); + ashaWorker.setName(m_user.getFirstName() + " " + m_user.getLastName()); + ashaWorker.setMobileNumber(m_user.getContactNo()); + ashaWorker.setAlternateMobileNumber(m_user.getEmergencyContactNo()); + ashaWorker.setProviderServiceMapID(m_user.getServiceProviderID()); + return ashaWorker; + } + + + private AshaWorker updateProfile(AshaWorker editAshaWorkerRequest) { + System.out.println(editAshaWorkerRequest.toString()); + + AshaWorker editdata = new AshaWorker(); + editdata.setId(editAshaWorkerRequest.getId()); + editdata.setAbhaNumber(editAshaWorkerRequest.getAbhaNumber()); + editdata.setEmployeeId(editAshaWorkerRequest.getEmployeeId()); + editdata.setDob(editAshaWorkerRequest.getDob()); + editdata.setAlternateMobileNumber(editAshaWorkerRequest.getAlternateMobileNumber()); + editdata.setAnm1Mobile(editAshaWorkerRequest.getAnm1Mobile()); + editdata.setAnm2Name(editAshaWorkerRequest.getAnm2Name()); + editdata.setIfsc(editAshaWorkerRequest.getIfsc()); + editdata.setAwwName(editAshaWorkerRequest.getAwwName()); + editdata.setName(editAshaWorkerRequest.getName()); + editdata.setVillage(editAshaWorkerRequest.getVillage()); + editdata.setBankAccount(editAshaWorkerRequest.getBankAccount()); + editdata.setChoName(editAshaWorkerRequest.getChoName()); + editdata.setChoMobile(editAshaWorkerRequest.getChoMobile()); + editdata.setAbhaNumber(editAshaWorkerRequest.getAbhaNumber()); + editdata.setAshaFamilyMember(editAshaWorkerRequest.getAshaFamilyMember()); + editdata.setDateOfJoining(editAshaWorkerRequest.getDateOfJoining()); + editdata.setMobileNumber(editAshaWorkerRequest.getMobileNumber()); + editdata.setAshaHouseholdRegistration(editAshaWorkerRequest.getAshaHouseholdRegistration()); + editdata.setFatherOrSpouseName(editAshaWorkerRequest.getFatherOrSpouseName()); + editdata.setPopulationCovered(editAshaWorkerRequest.getPopulationCovered()); + editdata.setAnm1Name(editAshaWorkerRequest.getAnm1Name()); + editdata.setAnm2Mobile(editAshaWorkerRequest.getAnm2Mobile()); // Corrected line + editdata.setAwwMobile(editAshaWorkerRequest.getAwwMobile()); + editdata.setProviderServiceMapID(editAshaWorkerRequest.getProviderServiceMapID()); + + return editdata; + + + } + +} diff --git a/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java b/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java new file mode 100644 index 0000000..cf54267 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/EmployeeMasterImpl.java @@ -0,0 +1,18 @@ +package com.iemr.flw.service.impl; + +import com.iemr.flw.domain.iemr.M_User; +import com.iemr.flw.repo.iemr.EmployeeMasterRepo; +import com.iemr.flw.service.EmployeeMasterInter; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class EmployeeMasterImpl implements EmployeeMasterInter { + @Autowired + EmployeeMasterRepo employeeMasterRepo; + + @Override + public M_User getUserDetails(Integer userID) { + return employeeMasterRepo.findByUserID(userID); + } +} diff --git a/src/main/java/com/iemr/flw/service/impl/OTPHandlerServiceImpl.java b/src/main/java/com/iemr/flw/service/impl/OTPHandlerServiceImpl.java new file mode 100644 index 0000000..ef311f0 --- /dev/null +++ b/src/main/java/com/iemr/flw/service/impl/OTPHandlerServiceImpl.java @@ -0,0 +1,210 @@ +package com.iemr.flw.service.impl; + +import com.google.common.cache.CacheBuilder; +import com.google.common.cache.CacheLoader; +import com.google.common.cache.LoadingCache; +import com.google.common.primitives.Ints; +import com.iemr.flw.domain.iemr.OtpBeneficiary; +import com.iemr.flw.dto.iemr.OTPRequestParsor; +import com.iemr.flw.dto.iemr.OtpRequestDTO; +import com.iemr.flw.repo.iemr.OtpBeneficiaryRepository; +import com.iemr.flw.service.OTPHandler; +import com.iemr.flw.utils.config.ConfigProperties; +import com.iemr.flw.utils.http.HttpUtils; +import org.json.JSONObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; + +import java.security.MessageDigest; +import java.security.SecureRandom; +import java.sql.Timestamp; +import java.util.Optional; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@Service +public class OTPHandlerServiceImpl implements OTPHandler { + @Autowired + HttpUtils httpUtils; + @Autowired + OtpBeneficiaryRepository otpBeneficiaryRepository; + + + final Logger logger = LoggerFactory.getLogger(this.getClass().getName()); + + private LoadingCache otpCache; + + private static final Integer EXPIRE_MIN = 5; + + private static final String SMS_GATEWAY_URL = ConfigProperties.getPropertyByName("sms-gateway-url"); + + + // Constructor for new object creation + public OTPHandlerServiceImpl() { + otpCache = CacheBuilder.newBuilder().expireAfterWrite(EXPIRE_MIN, TimeUnit.MINUTES) + .build(new CacheLoader() { + public String load(String key) { + return "0"; + } + }); + } + + /*** + * @param + * @return success if OTP sent successfully + */ + @Override + public String sendOTP(String mobNo) throws Exception { + System.out.println("mobNo:"+mobNo); + int otp = generateOTP(mobNo); + saveOtp(mobNo,otp); + // sendSMS(otp, mobNo, "OTP is "); + return "success+\n"+otp; + } + + /*** + * @param obj + * @return OTP verification success or failure + * + */ + @Override + public JSONObject validateOTP(OtpRequestDTO obj) throws Exception { + String cachedOTP = otpCache.get(obj.getPhoneNumber()); + String inputOTPEncrypted = getEncryptedOTP(obj.getOtp()); + System.out.println(cachedOTP.toString() +" "+inputOTPEncrypted.toString()); + + if (cachedOTP.equalsIgnoreCase(inputOTPEncrypted)) { + JSONObject responseObj = new JSONObject(); + responseObj.put("userName", obj.getPhoneNumber()); + responseObj.put("userID", obj.getPhoneNumber()); + + verifyOtp(obj.getPhoneNumber(),obj.getOtp(),obj.getBeneficiaryId()); + return responseObj; + } else { + throw new Exception("Please enter valid OTP"); + } + + } + + /*** + * @param + * @return success if OTP re-sent successfully + */ + @Override + public String resendOTP(String mobNo) throws Exception { + int otp = generateOTP(mobNo); + // sendSMS(otp, mobNo, "OTP is "); + saveOtp(mobNo,otp); + return "success+\n"+otp; + } + public String verifyOtp(String phoneNumber, Integer otp,Long otpBeneficiaryId) { + Optional otpEntry = otpBeneficiaryRepository.findByPhoneNumberAndOtp(phoneNumber, otp); + + if (otpEntry.isPresent()) { + OtpBeneficiary otpBeneficiary = otpEntry.get(); + otpBeneficiary.setBeneficiaryId(otpBeneficiaryId); + otpBeneficiary.setIsOtpVerify(true); + otpBeneficiary.setIsExpired(true); + otpBeneficiaryRepository.save(otpBeneficiary); + return "OTP verified successfully."; + } else { + return "Invalid or expired OTP."; + } + } + + // generate 6 digit random no # + public int generateOTP(String authKey) throws Exception { + String generatedPassword = null; + +// Random random = new Random(); + Random random = SecureRandom.getInstanceStrong(); + int otp = 100000 + random.nextInt(900000); + + generatedPassword = getEncryptedOTP(otp); + + if (otpCache != null) + otpCache.put(authKey, generatedPassword); + else { + OTPHandlerServiceImpl obj = new OTPHandlerServiceImpl(); + obj.otpCache.put(authKey, generatedPassword); + } + return otp; + } + private void saveOtp(String phoneNo,Integer otp){ + OtpBeneficiary otpEntry = new OtpBeneficiary(); + otpEntry.setBeneficiaryId(null); + otpEntry.setPhoneNumber(phoneNo); + otpEntry.setOtp(otp); + otpEntry.setCreatedAt(new Timestamp(System.currentTimeMillis())); + + otpBeneficiaryRepository.save(otpEntry); + } + + // SHA-256 encoding logic implemented + private String getEncryptedOTP(int otp) throws Exception { + MessageDigest md = MessageDigest.getInstance("SHA-256"); + byte[] bytes = md.digest(Ints.toByteArray(otp)); + StringBuilder sb = new StringBuilder(); + for (int i = 0; i < bytes.length; i++) { + sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1)); + } + + return sb.toString(); + } + + // send SMS to user + private void sendSMS(int otp, String phoneNo, String msgText) throws Exception { + String sendSMSURL = ConfigProperties.getPropertyByName("send-message-url"); + String sendSMSAPI = SMS_GATEWAY_URL + "/" + sendSMSURL; + String senderName = ConfigProperties.getPropertyByName("sms-username"); + String senderPassword = ConfigProperties.getPropertyByName("sms-password"); + String senderNumber = ConfigProperties.getPropertyByName("sms-sender-number"); + System.out.println("OTP"+otp+"Phone"+phoneNo+"SMSURL"+sendSMSAPI+"sendName"+senderName+"senderPassword"+senderPassword+"senderNumber"+senderNumber); + + + sendSMSAPI = sendSMSAPI.replace("USERNAME", senderName).replace("PASSWORD", senderPassword) + .replace("SENDER_NUMBER", senderNumber); + + sendSMSAPI = sendSMSAPI + .replace("SMS_TEXT", + msgText.concat(String.valueOf(otp)) + .concat(" for Tele-consultation verification and validity is 5 mins")) + .replace("RECEIVER_NUMBER", phoneNo); + + ResponseEntity response = httpUtils.getV1(sendSMSAPI); + System.out.println("Otp Response"+response); + if (response.getStatusCodeValue() == 200) { + String smsResponse = response.getBody(); + // JSONObject obj = new JSONObject(smsResponse); + // String jobID = obj.getString("JobId"); + switch (smsResponse) { + case "0x200 - Invalid Username or Password": + case "0x201 - Account suspended due to one of several defined reasons": + case "0x202 - Invalid Source Address/Sender ID. As per GSM standard, the sender ID should " + + "be within 11 characters": + case "0x203 - Message length exceeded (more than 160 characters) if concat is set to 0": + case "0x204 - Message length exceeded (more than 459 characters) in concat is set to 1": + case "0x205 - DRL URL is not set": + case "0x206 - Only the subscribed service type can be accessed – " + + "make sure of the service type you are trying to connect with": + case "0x207 - Invalid Source IP – kindly check if the IP is responding": + case "0x208 - Account deactivated/expired": + case "0x209 - Invalid message length (less than 160 characters) if concat is set to 1": + case "0x210 - Invalid Parameter values": + case "0x211 - Invalid Message Length (more than 280 characters)": + case "0x212 - Invalid Message Length": + case "0x213 - Invalid Destination Number": + throw new Exception(smsResponse); + default: + logger.info("SMS Sent successfully by calling API " + sendSMSAPI); + logger.info("SMS Sent successfully sent to : " + phoneNo); + break; + } + } else { + throw new Exception(response.getStatusCodeValue() + " and error " + response.getStatusCode().toString()); + } + } +} diff --git a/src/main/java/com/iemr/flw/utils/http/HTTPRequestInterceptor.java b/src/main/java/com/iemr/flw/utils/http/HTTPRequestInterceptor.java index 23a7942..5065837 100644 --- a/src/main/java/com/iemr/flw/utils/http/HTTPRequestInterceptor.java +++ b/src/main/java/com/iemr/flw/utils/http/HTTPRequestInterceptor.java @@ -87,7 +87,7 @@ public boolean preHandle(HttpServletRequest request, HttpServletResponse respons if (remoteAddress == null || remoteAddress.trim().length() == 0) { remoteAddress = request.getRemoteAddr(); } - validator.checkKeyExists(authorization, remoteAddress); + // validator.checkKeyExists(authorization, remoteAddress); break; } } catch (Exception e) { diff --git a/src/main/java/com/iemr/flw/utils/http/HttpUtils.java b/src/main/java/com/iemr/flw/utils/http/HttpUtils.java index edc5930..57281f2 100644 --- a/src/main/java/com/iemr/flw/utils/http/HttpUtils.java +++ b/src/main/java/com/iemr/flw/utils/http/HttpUtils.java @@ -111,4 +111,11 @@ public HttpStatus getStatus() { public void setStatus(HttpStatus status) { this.status = status; } + + public ResponseEntity getV1(String uri) { + System.out.println(uri.toString()); + HttpEntity requestEntity = new HttpEntity("", headers); + ResponseEntity responseEntity = rest.exchange(uri, HttpMethod.GET, requestEntity, String.class); + return responseEntity; + } } diff --git a/src/main/java/com/iemr/flw/utils/redis/RedisStorage.java b/src/main/java/com/iemr/flw/utils/redis/RedisStorage.java index 5995b7c..59a6f43 100644 --- a/src/main/java/com/iemr/flw/utils/redis/RedisStorage.java +++ b/src/main/java/com/iemr/flw/utils/redis/RedisStorage.java @@ -1,8 +1,8 @@ /* -* AMRIT – Accessible Medical Records via Integrated Technology -* Integrated EHR (Electronic Health Records) Solution +* AMRIT – Accessible Medical Records via Integrated Technology +* Integrated EHR (Electronic Health Records) Solution * -* Copyright (C) "Piramal Swasthya Management and Research Institute" +* Copyright (C) "Piramal Swasthya Management and Research Institute" * * This file is part of AMRIT. * @@ -49,6 +49,8 @@ public String setObject(String key, String value, int expirationTime) throws Red redCon.set(key.getBytes(), value.getBytes(), Expiration.seconds(expirationTime), SetOption.UPSERT); } return key; + + } public String getObject(String key, Boolean extendExpirationTime, int expirationTime) throws RedisSessionException { diff --git a/src/main/resources/application.properties b/src/main/resources/application.properties index 12a1494..17783a9 100644 --- a/src/main/resources/application.properties +++ b/src/main/resources/application.properties @@ -1,7 +1,10 @@ spring.main.banner-mode=off spring.data.jpa.repositories.enabled=true #spring.jpa.hibernate.ddl-auto=none +fhir-url=https://uatamrit.piramalswasthya.org/fhirapi-v1.0 +# TM Config +tm-url=https://uatamrit.piramalswasthya.org/tmapi-v1.0 # Naming strategies spring.jpa.hibernate.naming.implicit-strategy=org.hibernate.boot.model.naming.ImplicitNamingStrategyJpaCompliantImpl spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl @@ -45,7 +48,40 @@ get-HRP-Status=ANC/getHRPStatus #Get Beneficiary ABHA getHealthID=healthID/getBenhealthID +# FHIR Config +#fhir-url=/fhirapi-v1.0 +#server.port=8082 +# TM Config +#tm-url=/tmapi-v1.0 +##--------------------------------------------## Primary db------------------------------------------------------------------- + +spring.datasource.url=jdbc:mysql://localhost:3306/db_iemr +spring.datasource.username=root +#spring.datasource.password=YesBank@123# +spring.datasource.password=BizDev@24BB + +spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +##--------------------------------------------## Secondary db------------------------------------------------------------------- + +secondary.datasource.url=jdbc:mysql://localhost:3306/db_identity +secondary.datasource.username=root +#secondary.datasource.password=YesBank@123# +secondary.datasource.password=BizDev@24BB + +secondary.datasource.driver-class-name=com.mysql.cj.jdbc.Driver + +springdoc.api-docs.enabled=true +springdoc.swagger-ui.enabled=true + +sendSMSUrl = v1/send-sms +source-address=AIDSHL +sms-username=PIRAMAL_SW_AHxoyCXejeJba13oKHcv +sms-password=]Kt9GAp8}$S*@ +sms-sender-number ="9560618681" +send-message-url= v1/send-sms +sms-gateway-url= https://iqsms.airtel.in/api