diff --git a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java index c9d24318aa54e7c02910b6e29abe187d838efc55..2479e85dceaf8aa7921555f867091fa297be671d 100755 --- a/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java +++ b/src/main/java/no/nibio/vips/logic/messaging/MessagingBean.java @@ -28,7 +28,9 @@ import java.util.ArrayList; import java.util.Arrays; import java.util.Calendar; import java.util.Date; +import java.util.HashMap; import java.util.List; +import java.util.Map; import java.util.ResourceBundle; import javax.ejb.Stateless; import javax.persistence.EntityManager; @@ -51,7 +53,7 @@ import org.jboss.resteasy.client.jaxrs.ResteasyClientBuilder; import org.jboss.resteasy.client.jaxrs.ResteasyWebTarget; /** - * @copyright 2015 <a href="http://www.nibio.no/">NIBIO</a> + * @copyright 2015-2022 <a href="http://www.nibio.no/">NIBIO</a> * @author Tor-Einar Skog <tor-einar.skog@nibio.no> */ @Stateless @@ -59,6 +61,19 @@ public class MessagingBean { @PersistenceContext(unitName="VIPSLogic-PU") EntityManager em; + private Map<Integer, UniversalMessageFormat> universalMessageFormats; + + public UniversalMessageFormat getUniversalMessageFormat(Integer universalMessageFormatId) + { + if(this.universalMessageFormats == null) + { + this.universalMessageFormats = new HashMap<>(); + this.universalMessageFormats.put(UniversalMessageFormat.FORMAT_SMS, em.find(UniversalMessageFormat.class, UniversalMessageFormat.FORMAT_SMS)); + this.universalMessageFormats.put(UniversalMessageFormat.FORMAT_EMAIL, em.find(UniversalMessageFormat.class, UniversalMessageFormat.FORMAT_EMAIL)); + } + return this.universalMessageFormats.get(universalMessageFormatId); + } + public void sendUniversalMessage(Message message) { String msgDownloadUrlTpl = "https://www.vips-landbruk.no/messages/" + message.getMessageId() + "/"; @@ -116,13 +131,13 @@ public class MessagingBean { { try { - //System.out.println(new ObjectMapper().writeValueAsString(um)); + System.out.println(new ObjectMapper().writeValueAsString(uMessage)); Response r = umClient.sendMessage(new ObjectMapper().writeValueAsString(uMessage)); // TODO: Handle result String result = r.readEntity(String.class); - //System.out.println(result); + System.out.println(result); } catch(JsonProcessingException ex) { diff --git a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java index d833d99fdfe15f8f2ac3842db2b37cdacce07971..05f595ffa8ea19269fd2c41fd72f39907691bd49 100644 --- a/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java +++ b/src/main/java/no/nibio/vips/logic/modules/barkbeetle/BarkbeetleBean.java @@ -63,6 +63,10 @@ import no.nibio.vips.logic.controller.session.UserBean; import no.nibio.vips.logic.entity.Organization; import no.nibio.vips.logic.entity.VipsLogicRole; import no.nibio.vips.logic.entity.VipsLogicUser; +import no.nibio.vips.logic.messaging.MessageRecipient; +import no.nibio.vips.logic.messaging.MessagingBean; +import no.nibio.vips.logic.messaging.UniversalMessage; +import no.nibio.vips.logic.messaging.UniversalMessageFormat; import no.nibio.vips.logic.util.GISEntityUtil; import no.nibio.vips.logic.util.Globals; import no.nibio.vips.logic.util.SimpleMailSender; @@ -83,6 +87,9 @@ public class BarkbeetleBean { @EJB UserBean userBean; + @EJB + MessagingBean messagingBean; + public static BarkbeetleBean getEJBInstance() { try @@ -775,8 +782,15 @@ public class BarkbeetleBean { List<SeasonTrapsite> allSeasonTrapsites = this.getSeasonTrapsites(cal.get(Calendar.YEAR)); for(SeasonTrapsite st:allSeasonTrapsites) { + String heading = "Barkbilleregistrering: Første påminnelse for uke " + (cal.get(Calendar.WEEK_OF_YEAR) + 1); String message = this.getIndividualFirstReminderText(st, cal.get(Calendar.YEAR), cal.get(Calendar.WEEK_OF_YEAR) + 1); - String recipientMail = "tor-einar.skog@nibio.no"; + //VipsLogicUser recipient = st.getUserId(); + // TESTING + VipsLogicUser recipient = new VipsLogicUser(); + recipient.setEmail("tor-einar.skog@nibio.no"); + recipient.setPhone("91303819"); + this.sendReminder(List.of(recipient), heading, message); + /*String recipientMail = "tor-einar.skog@nibio.no"; //String recipientMail = st.getUserId().getEmail(); String registrantPhone = "+4791303819"; System.out.println("Phone number would have been " + st.getUserId().getPhoneCountryCode() + st.getUserId().getPhone()); @@ -786,7 +800,7 @@ public class BarkbeetleBean { mailSender.sendMail("noreply-vips@nibio.no", recipientMail, "Barkbilleregistrering: Første påminnelse for uke " + (cal.get(Calendar.WEEK_OF_YEAR) + 1), message); // Alternative 2: Send SMS - + */ break; } @@ -904,10 +918,41 @@ public class BarkbeetleBean { return retVal; } - public void sendReminder(VipsLogicUser user, String reminderTxt) { - - + /** + * Using the VIPS messaging system + * @param recipients + * @param heading + * @param body + */ + public void sendReminder(List<VipsLogicUser> users, String heading, String body) { + UniversalMessage uMessage = new UniversalMessage(); + Calendar cal = Calendar.getInstance(BarkbeetleBean.NORGE_MITT_NORGE); + cal.setTime(new Date()); + cal.add(Calendar.DATE, 2); + uMessage.setExpiresAt(cal.getTime()); + uMessage.addMessageLocalVersion("nb", heading, "", body, ""); + List<MessageRecipient> recipients = users.stream().map(user->{ + MessageRecipient recipient = new MessageRecipient(); + UniversalMessageFormat umf = messagingBean.getUniversalMessageFormat( + user.isApprovesSmsBilling() && !user.getPhone().trim().isBlank() ? + UniversalMessageFormat.FORMAT_SMS + : UniversalMessageFormat.FORMAT_EMAIL + ); + recipient.setType(umf.getFormatName()); + recipient.setMsgDeliveryAddress( + umf.getUniversalMessageFormatId().equals(UniversalMessageFormat.FORMAT_SMS) ? + user.getPhone() + : user.getEmail() + ); + recipient.setFreeSms(user.isFreeSms()); + return recipient; + }) + .collect(Collectors.toList()); + uMessage.setDistributionList(recipients); + messagingBean.sendUniversalMessage(uMessage); } + + /* public List<SeasonTrapsite> getSeasonTrapsitesForCounty2012(Integer season, String county2012)