实现房源15天后自动下架记录
生活随笔
收集整理的這篇文章主要介紹了
实现房源15天后自动下架记录
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
首先 我要先考慮的是15天自動(dòng)下架的話 也就是我們要對(duì)數(shù)據(jù)庫(kù)進(jìn)行掃描,發(fā)現(xiàn)有房源的添加時(shí)間與掃描此刻的時(shí)間相差大于15天時(shí)就對(duì)房源的狀態(tài)進(jìn)行改變.
我們會(huì)用的優(yōu)定時(shí)器 ,還有就是發(fā)送短信,由于我們公司時(shí)用的阿里大于發(fā)送短信 所以我就可以直接調(diào)用阿里大于的api.
定時(shí)器的話 由于我用的是spring boot框架所以可能直接用@Scheduled來(lái)做每天掃描,當(dāng)然 我覺(jué)得最好把掃描時(shí)間定在凌晨或者是深夜,這樣用戶(hù)少,方便我們操作。
我覺(jué)得我們可以先定出定時(shí)器的執(zhí)行方法。
1.0 HouseTimingTask.java
@Component public class HouseTimingTask { @Scheduled(cron = "0 30 6 ? * *")//我這邊設(shè)置的是每天早上六點(diǎn)半執(zhí)行 public void Task(){ //這里面寫(xiě)掃描數(shù)據(jù)庫(kù)的方法 我就不把自己的代碼寫(xiě)出來(lái)了 畢竟每個(gè)項(xiàng)目的數(shù)據(jù)庫(kù)環(huán)境都不一樣, //重要的是要看房源的添加時(shí)間與掃描此刻的時(shí)間相差大于15天時(shí)就對(duì)房源的狀態(tài)進(jìn)行改變.if(DateUtil.dateTointerval(添加的時(shí)間,現(xiàn)在的時(shí)間)>15){//1,改變房源狀態(tài)//2,發(fā)送短信給房東}}定時(shí)器寫(xiě)好了 我們現(xiàn)在來(lái)配置阿里大于的接口,在到定時(shí)任務(wù)中進(jìn)行調(diào)用。
2.導(dǎo)入依賴(lài)
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-activemq</artifactId></dependency><!-- 阿里大于相關(guān)配置 --><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-dysmsapi</artifactId><version>1.0.0-SNAPSHOT</version></dependency><dependency><groupId>com.aliyun</groupId><artifactId>aliyun-java-sdk-core</artifactId><version>3.2.2</version></dependency>3.0 SmsUtils.java 短信工具類(lèi)
import com.aliyuncs.DefaultAcsClient; import com.aliyuncs.IAcsClient; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsRequest; import com.aliyuncs.dysmsapi.model.v20170525.QuerySendDetailsResponse; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsRequest; import com.aliyuncs.exceptions.ClientException; import com.aliyuncs.dysmsapi.model.v20170525.SendSmsResponse; import com.aliyuncs.profile.DefaultProfile; import com.aliyuncs.profile.IClientProfile; import org.springframework.core.env.Environment; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Component;import java.text.SimpleDateFormat; import java.util.Date;@Component public class SmsUtils {static final String product = "Dysmsapi";static final String domain = "dysmsapi.aliyuncs.com";@Autowiredprivate Environment env;/*** 發(fā)送短信驗(yàn)證碼* @param phoneNum 待發(fā)手機(jī)號(hào)* @param signName 短信簽名* @param templateCode 短信模板*/public SendSmsResponse sendSms(String phoneNum,String signName,String templateCode)throws ClientException {//可自助調(diào)整超時(shí)時(shí)間System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暫不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", env.getProperty("AccessKeyID"), env.getProperty("accessKeySecret"));DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//組裝請(qǐng)求對(duì)象-具體描述見(jiàn)控制臺(tái)-文檔部分內(nèi)容SendSmsRequest request = new SendSmsRequest();//必填:待發(fā)送手機(jī)號(hào)request.setPhoneNumbers(phoneNum);//必填:短信簽名-可在短信控制臺(tái)中找到request.setSignName(signName);//必填:短信模板-可在短信控制臺(tái)中找到request.setTemplateCode(templateCode);SendSmsResponse sendSmsResponse = acsClient.getAcsResponse(request);return sendSmsResponse;}public QuerySendDetailsResponse querySendDetails(String phoneNum,String bizId) throws ClientException {String accessKeyId =env.getProperty("accessKeyId");String accessKeySecret = env.getProperty("accessKeySecret");//可自助調(diào)整超時(shí)時(shí)間System.setProperty("sun.net.client.defaultConnectTimeout", "10000");System.setProperty("sun.net.client.defaultReadTimeout", "10000");//初始化acsClient,暫不支持region化IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);DefaultProfile.addEndpoint("cn-hangzhou", "cn-hangzhou", product, domain);IAcsClient acsClient = new DefaultAcsClient(profile);//組裝請(qǐng)求對(duì)象QuerySendDetailsRequest request = new QuerySendDetailsRequest();//必填-號(hào)碼request.setPhoneNumber(phoneNum);//可選-流水號(hào)request.setBizId(bizId);//必填-發(fā)送日期 支持30天內(nèi)記錄查詢(xún),格式y(tǒng)yyyMMddSimpleDateFormat ft = new SimpleDateFormat("yyyyMMdd");request.setSendDate(ft.format(new Date()));//必填-頁(yè)大小request.setPageSize(10L);//必填-當(dāng)前頁(yè)碼從1開(kāi)始計(jì)數(shù)request.setCurrentPage(1L);//hint 此處可能會(huì)拋出異常,注意catchQuerySendDetailsResponse querySendDetailsResponse = acsClient.getAcsResponse(request);return querySendDetailsResponse;} }由于我用到了activemq所以進(jìn)行配置
4.application.properties
#整合mq spring.activemq.broker-url=tcp://192.168.12.66:61616 #發(fā)送短信秘鑰 AccessKeyID=自己在阿里大于上面看 accessKeySecret=自己在阿里大于上面看5.applicationContext-mq-producer.xml
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://www.springframework.org/schema/beanshttp://www.springframework.org/schema/beans/spring-beans.xsd"><!--把a(bǔ)ctiveMQ交給spring管理--><bean id="targetConnnectionFactory" class="org.apache.activemq.ActiveMQConnectionFactory"><constructor-arg name="brokerURL" value="tcp://139.199.***.***:61616"/></bean><!--創(chuàng)建spring jms組件提供工廠對(duì)象,無(wú)縫接管activeMQ--><bean id="connectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory"><property name="targetConnectionFactory" ref="targetConnnectionFactory"/></bean><!--spring jms提供消息發(fā)送模板對(duì)象--><bean class="org.springframework.jms.core.JmsTemplate"><property name="connectionFactory" ref="connectionFactory"/></bean><!--發(fā)布訂閱消息空間--><bean class="org.apache.activemq.command.ActiveMQQueue"><constructor-arg value="sms"/></bean></beans>6.SmsListener.java
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.annotation.JmsListener; import org.springframework.stereotype.Component;import java.util.Map;@Component public class SmsListener {//注入對(duì)象@Autowiredprivate SmsUtils smsUtils;@JmsListener(destination = "sms")public void sendSms(Map map){try {//從map中獲取消息String signName = (String) map.get("sign_name");//模板codeString templateCode = (String) map.get("template_code");//電話號(hào)碼String phone = (String) map.get("phone");// 發(fā)送短信smsUtils.sendSms(phone,signName,templateCode);} catch (Exception e) {e.printStackTrace();}} }7.完善 HouseTimingTask.java
import com.chuangting.common.util.DateUtil; import com.chuangting.organization.entity.EOrganization; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.jms.core.JmsTemplate; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Component;import java.util.*;@Component public class HouseTimingTask {@Scheduled(fixedDelayString = "0 30 6 ? * *")public void Task(){//這里面寫(xiě)掃描數(shù)據(jù)庫(kù)的方法 我就不把自己的代碼寫(xiě)出來(lái)了 畢竟每個(gè)項(xiàng)目的數(shù)據(jù)庫(kù)環(huán)境都不一樣, //重要的是要看房源的添加時(shí)間與掃描此刻的時(shí)間相差大于15天時(shí)就對(duì)房源的狀態(tài)進(jìn)行改變.if(DateUtil.dateTointerval(添加的時(shí)間,現(xiàn)在的時(shí)間)>15){//1,改變房源狀態(tài)...............自己補(bǔ)充//2,發(fā)送短信給房東sendSms(查詢(xún)到的電話號(hào)碼,名稱(chēng),模板簽名);}@Autowiredprivate JmsTemplate jmsTemplate;public void sendSms(String phoneNum,String signName,String templateCode){try {HashMap<String, String> map = new HashMap<>();map.put("phoneNum", phoneNum);map.put("signName", signName);map.put("templateCode", templateCode);jmsTemplate.convertAndSend("sms", map);}catch (Exception e){e.printStackTrace();}}}以上是我寫(xiě)的實(shí)現(xiàn)房源15天后自動(dòng)下架的思路 ,肯定也有很多問(wèn)題 ,希望各位大佬多指教一下
總結(jié)
以上是生活随笔為你收集整理的实现房源15天后自动下架记录的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: MODBUS-RTU CRC校验算法及函
- 下一篇: Windows使用ffmpeg教程