spring+quartz 实现自动和手动匹配数据库表

先定义一个功能类用于定时器定时调用功能类中的方法

功能类的写法:

<span style="font-size:18px;">
public class MatchingMaterialService extends QuartzJobBean {
	
	private IMatchingTempMaterialService matchingTempMaterialService;
	private IMatchingTempPharmacyService matchingTempPharmacyService;
	
	public void setMatchingTempMaterialService(IMatchingTempMaterialService matchingTempMaterialService) {
		this.matchingTempMaterialService = matchingTempMaterialService;
	}
	public void setMatchingTempPharmacyService(IMatchingTempPharmacyService matchingTempPharmacyService) {
		this.matchingTempPharmacyService = matchingTempPharmacyService;
	}
	
	@Override
	protected void executeInternal(JobExecutionContext context)
			throws JobExecutionException {
		try {
			matchingTempMaterialService.autoMatchMaterial();
			
			matchingTempPharmacyService.autoMatchPharmacy();
			
		} catch (Exception e) {
			e.printStackTrace();
			logger.error("***QuartzCartSalesService--->executeInternal error message:"+e);
		}
	}
	
}</span>

功能类写好了要配置定时器了,我们新建一个spring的配置文件

applicationContext-quartz-matching.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:aop="http://www.springframework.org/schema/aop" xmlns:tx="http://www.springframework.org/schema/tx"
	xmlns:context="http://www.springframework.org/schema/context"
	xmlns:mvc="http://www.springframework.org/schema/mvc"
	xsi:schemaLocation="
			http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.1.xsd
			http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.1.xsd
			http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.1.xsd
			http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.1.xsd
			http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.1.xsd">
	<!-- 匹配临时表和大库表定时器任务 -->
	<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 总管理类 如果将lazy-init='false'那么容器启动就会执行调度程序  </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<span style="font-size:18px;"><strong>	</strong><bean id="webScheduler"
		class="org.springframework.scheduling.quartz.SchedulerFactoryBean">
		
		<property name="triggers">
			<list>
				<ref bean="cartSalesCrawlerTrigger" />
			</list>
		</property>
	</bean></span>
<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 定义触发时间 </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
<span style="font-size:18px;">	<bean id="cartSalesCrawlerTrigger"
		class="org.springframework.scheduling.quartz.CronTriggerFactoryBean">
		<property name="jobDetail">
			<ref bean="cartSalesCrawlerTaskJobDetail" />
		</property>
		<property name="cronExpression"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> cron表达式 ,每十秒,其他时间可在网上搜,一大片</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span></span>
			<value>0/10 * * * * ?</value>
			<!-- <value>0/5 * * * * ?</value> -->
		</property>
	</bean></span>
<span style="font-size:18px;"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 定义调用对象和调用对象的方法 把刚才的功能类写在这里边</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
	<bean id="cartSalesCrawlerTaskJobDetail"
		class="org.springframework.scheduling.quartz.JobDetailFactoryBean">
		<span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"><!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 要调用的工作类 </span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
		<property name="jobClass" value="com.fufang.fftg.manager.service.MatchingMaterialService" />
		<property name="jobDataAsMap"></span>
<span style="font-size:18px;"><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">                                       <!--</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);"> 调用的类 ,即功能类中要调用的资源,此处时注入的service层代码</span><span style="margin: 0px; padding: 0px; font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 13px; line-height: 23.4px; color: rgb(0, 128, 0);">--></span>
			<map>
			    <entry key="matchingTempMaterialService" value-ref="matchingTempMaterialService" />
			    <entry key="matchingTempPharmacyService" value-ref="matchingTempPharmacyService" />
				
			</map>
		</property>
	</bean>
</beans></span>

当然我们的定时器配置文件不要忘记加入wel.xml中得到加载:

<span style="font-size:24px;font-weight: bold;"> </span><span style="font-size:18px;"><context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:config/spring/applicationContext.xml,<strong>classpath:config/spring/applicationContext-quartz.xml,classpath:config/spring/applicationContext-quartz-matching.xml</strong></param-value>
  </context-param></span>

定时器功能类调用了两个功能方法,即两个service层分别匹配数据库中的两张表,此处拿出其中一个简单的service的实现展现其匹配


<span style="font-size:18px;">
@Repository("matchingTempPharmacyDao")
public class MatchingTempPharmacyDaoImpl implements IMatchingTempPharmacyDao {

	@Autowired
	private SessionFactory sessionFactory;
	
	@Override
	public boolean autoMatchPharmacy() {//定时器功能类调用的就是此方法实现两个表的匹配,匹配后茶如另一张表</span>
<span style="font-size:18px;">		try {
			StringBuffer sql=new StringBuffer();
			sql.append("insert into wit_selection.middle_pharmacyMapping (dwbh,phId,suppId,createDate) ");
			sql.append("select tm.dwbh, ph.id,tm.supplierId,GETDATE() from wit_selection.middle_temp_pharmacy tm join  dbo.t_pharmacy ph ");
			sql.append("on tm.dwmch = ph.name ");
			sql.append("where tm.state <> 2 or tm.state is null  and ph.used=1");

			this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString()).executeUpdate();
		        //插入另一张表之后修改原先其中一张表的状态字段,使之不再参与匹配
			StringBuffer sqls=new StringBuffer();
			sqls.append("update wit_selection.middle_temp_pharmacy set state=2 where dwbh in(");
			sqls.append("select tm.dwbh from wit_selection.middle_temp_pharmacy tm join  dbo.t_pharmacy ph ");
			sqls.append("on tm.dwmch = ph.name  where tm.state <> 2 or tm.state is null  and ph.used=1");
			this.sessionFactory.getCurrentSession().createSQLQuery(sqls.toString()).executeUpdate();
			return true;
		} catch (HibernateException e) {
			e.printStackTrace();
			return false;
		}
	}</span>
<span style="font-size:18px;">//以下方法都是用于手动匹配,逻辑与自动相似,只是需要添加前台,分步骤进行,不再赘叙
	@Override
	public int getPharmacyCount(Map<String, Object> paramMap) {
		int count = 0;
		StringBuffer sql=new StringBuffer();
		Map<String, Object> sqlMap = new HashMap<String, Object>();
		sql.append("select count(mn.id) from t_pharmacy mn ")
		.append(" where mn.used=1 ");
		if (null != paramMap && paramMap.size() > 0) {
			if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
				sql.append( " and mn.name like :key ");
				sqlMap.put("key", "%"
						+ paramMap.get("key").toString().trim() + "%");
			}
		}
		Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setProperties(sqlMap);
		List list = query.list();
		if (null != list && list.size() > 0) {
			count = Integer.valueOf(list.get(0).toString());
		}
		return count;
	}

	@Override
	public List<Pharmacy> getPharmacyList(int page, int pageSize,
			Map<String, Object> paramMap) {
		Map<String, Object> sqlMap = new HashMap<String, Object>();
		List<Pharmacy> PharmacyList = null;
		StringBuffer sql=new StringBuffer();
		sql.append("select mn.id,mn.name from t_pharmacy mn ")
		.append(" where mn.used=1 ");
		if (null != paramMap && paramMap.size() > 0) {
			if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
				sql.append( " and mn.name like :key ");
				sqlMap.put("key", "%"
						+ paramMap.get("key").toString().trim() + "%");
			}
		}
		SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setFirstResult(page);
		query.setMaxResults(pageSize);
		query.setProperties(sqlMap);
		PharmacyList = query.setResultTransformer(
				Transformers.aliasToBean(Pharmacy.class)).list();
		return PharmacyList;
	}

	@Override
	public int getTempPharmacyCount(Map<String, Object> paramMap) {
		int count = 0;
		StringBuffer sql=new StringBuffer();
		Map<String, Object> sqlMap = new HashMap<String, Object>();
		sql.append("select count(tm.dwbh) from wit_selection.middle_temp_pharmacy tm ")
		.append(" where tm.state <> 2 or tm.state is null ");
		if (null != paramMap && paramMap.size() > 0) {
			if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
				sql.append( " and tm.dwmch like :key ");
				sqlMap.put("key", "%"
						+ paramMap.get("key").toString().trim() + "%");
			}
		}
		Query query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setProperties(sqlMap);
		List list = query.list();
		if (null != list && list.size() > 0) {
			count = Integer.valueOf(list.get(0).toString());
		}
		return count;
	}

	@Override
	public List<MiddleTempPharmacy> getTempPharmacyList(int page, int pageSize,
			Map<String, Object> paramMap) {
		Map<String, Object> sqlMap = new HashMap<String, Object>();
		List<MiddleTempPharmacy> TempPharmacyList = null;
		StringBuffer sql=new StringBuffer();
		sql.append("select tm.dwbh,tm.dwmch from wit_selection.middle_temp_pharmacy tm ")
		.append(" where tm.state <> 2 or tm.state is null  ");
		if (null != paramMap && paramMap.size() > 0) {
			if (null != paramMap.get("key") && !"".equals(paramMap.get("key"))) {
				sql.append( " and tm.dwmch like :key ");
				sqlMap.put("key", "%"
						+ paramMap.get("key").toString().trim() + "%");
			}
		}
		SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setFirstResult(page);
		query.setMaxResults(pageSize);
		query.setProperties(sqlMap);
		TempPharmacyList = query.setResultTransformer(
				Transformers.aliasToBean(MiddleTempPharmacy.class)).list();
		return TempPharmacyList;
	}

	@Override
	public boolean updateState(Map<String, Object> paramMap) {
		StringBuffer sql=new StringBuffer();
		Map<String, Object> sqlMap = new HashMap<String, Object>();
		sql.append("update wit_selection.middle_temp_pharmacy set state=2 where 1=1 ");
		if (null != paramMap && paramMap.size() > 0) {
			if (null != paramMap.get("dwbh") && !"".equals(paramMap.get("dwbh"))) {
				sql.append( " and dwbh =:dwbh  ");
				sqlMap.put("dwbh", paramMap.get("dwbh").toString().trim()  );
			}
	    }
		SQLQuery query=this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setProperties(sqlMap);
		int num=query.executeUpdate();
		if(num>0){
			return true;
		}
		return false;
	}

	@Override
	public boolean saveToPharmacyMapping(MiddlePharmacyMapping entity) {
		try {
			this.sessionFactory.getCurrentSession().save(entity);
			return true;
		} catch (HibernateException e) {
			e.printStackTrace();
		}
		return false;
	}

	@Override
	public MiddleTempPharmacy getTempPharmacyById(String dwbh) {
		List<MiddleTempPharmacy> PharmacyList = null;
		StringBuffer sql=new StringBuffer();
		sql.append("select tm.sptm ")
		.append(" from wit_selection.middle_temp_pharmacy tm ")
		.append(" where tm.dwbh=:dwbh ");
		SQLQuery query = this.sessionFactory.getCurrentSession().createSQLQuery(sql.toString());
		query.setParameter("dwbh",dwbh);
		PharmacyList = query.setResultTransformer(new AliasToBeanResultTransformer(MiddleTempPharmacy.class)).list();
		if(!PharmacyList.isEmpty() && null!=PharmacyList){
		   return PharmacyList.get(0);
		}
		return null;
	}

}</span>





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值