`

一个service管理多个service

 
阅读更多

global.dao.dbcp.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" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx" xmlns:context="http://www.springframework.org/schema/context"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
	http://www.springframework.org/schema/context  http://www.springframework.org/schema/context/spring-context-3.0.xsd">

	<!-- =================== G4Studio平台数据源配置 ================== -->
	<!-- Apache Commons DBCP 数据源   
	<bean id="dataSourceG4" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName" value="${pmpf.jdbc.driverClassName}" />
		<property name="url" value="${pmpf.jdbc.url}" />
		<property name="username" value="${pmpf.jdbc.username}" />
		<property name="password" value="${pmpf.jdbc.password}" />
		<property name="initialSize" value="10" />
		<property name="maxActive" value="30" />
		<property name="maxIdle" value="15" />
		<property name="minIdle" value="5" />
		<property name="removeAbandoned" value="true" />
		<property name="removeAbandonedTimeout" value="60" />
		<property name="maxWait" value="10000" />
		<property name="logAbandoned" value="true" />
	</bean>
	--> 
	<!-- Alibaba Druid 数据源 -->
	<bean id="dataSourceG4" class="com.alibaba.druid.pool.DruidDataSource" init-method="init" destroy-method="close">
		<property name="url" value="${pmpf.jdbc.url}" />
		<property name="username" value="${pmpf.jdbc.username}" />
		<property name="password" value="${pmpf.jdbc.password}" />
		<!-- 配置初始化大小、最小、最大 -->
		<property name="initialSize" value="${pmpf.jdbc.initialSize}" />
		<property name="maxActive" value="${pmpf.jdbc.maxActive}" />
		<property name="minIdle" value="${pmpf.jdbc.minIdle}" />
		<!-- 配置获取连接等待超时的时间 -->
		<property name="maxWait" value="${pmpf.jdbc.maxWait}" />
		<!-- 配置一个连接在池中最小生存的时间,单位是毫秒 -->
		<property name="minEvictableIdleTimeMillis" value="${pmpf.jdbc.minEvictableIdleTimeMillis}" />
		<!-- 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 -->
		<property name="timeBetweenEvictionRunsMillis" value="${pmpf.jdbc.timeBetweenEvictionRunsMillis}" />

		<property name="validationQuery" value="${pmpf.jdbc.validationQuery}" />
		<property name="testWhileIdle" value="${pmpf.jdbc.testWhileIdle}" />
		<property name="testOnBorrow" value="${pmpf.jdbc.testOnBorrow}" />
		<property name="testOnReturn" value="${pmpf.jdbc.testOnReturn}" />
		<!-- 打开PSCache,并且指定每个连接上PSCache的大小 -->
		<property name="poolPreparedStatements" value="${pmpf.jdbc.poolPreparedStatements}" />
		<property name="maxPoolPreparedStatementPerConnectionSize" value="${pmpf.jdbc.maxPoolPreparedStatementPerConnectionSize}" />

		<!-- 配置监控统计拦截的filters -->
		<property name="filters" value="${pmpf.jdbc.filters}" /> 
		<!-- 关闭长时间不使用的连接超时时间,单位秒 -->
		<property name="removeAbandoned" value="${pmpf.jdbc.removeAbandoned}" />
		<property name="removeAbandonedTimeout" value="${pmpf.jdbc.removeAbandonedTimeout}" />
		<property name="logAbandoned" value="${pmpf.jdbc.logAbandoned}" />
	</bean>
	
	<!-- JNDI 数据源 
	<bean id="dataSourceG4" class="org.springframework.jndi.JndiObjectFactoryBean">
		<property name="jndiName">
			<value>${global.datasource}</value>
		</property>
	</bean>
	-->
	
	 <!-- 配置平台层面的qlmapClientFactory -->
	<bean id="sqlMapClientG4" class="org.g4studio.core.orm.xibatis.support.SqlMapClientFactoryBean">
		<property name="configLocations">
			<list>
				<value>config/g4/g4.sqlmap.xml</value>
				<value>classpath*:config/app/*.sqlmap.xml</value>
			</list>
		</property>
		<property name="dataSource" ref="dataSourceG4" />
	</bean>
	<!-- 配置平台层面的G4Reader -->
	<bean id="g4Reader" class="org.g4studio.core.model.dao.impl.ReaderImpl">
		<property name="sqlMapClient" ref="sqlMapClientG4" />
	</bean>
	<!-- 配置平台层面的G4Dao -->
	<bean id="g4Dao" class="org.g4studio.core.model.dao.impl.DaoImpl">
		<property name="sqlMapClient" ref="sqlMapClientG4" />
	</bean>

	<!-- JDBC事务管理器配置 -->
	<bean id="transactionManagerG4" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
		<property name="dataSource">
			<ref bean="dataSourceG4" />
		</property>
	</bean>
	<!-- 配置事务代理的基类 -->
	<bean id="baseTransactionProxyG4" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean" abstract="true">
		<property name="transactionManager">
			<ref bean="transactionManagerG4" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="save*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="do*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="insert*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="del*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="drop*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="update*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="edit*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="modify*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="call*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="get*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="query*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="batch*">PROPAGATION_REQUIRED,-Exception</prop>
				<prop key="*">PROPAGATION_SUPPORTS,-Exception</prop>
			</props>
		</property>
	</bean>

</beans>

pmpf.service.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" xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:tx="http://www.springframework.org/schema/tx"
	xsi:schemaLocation="
	http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
	http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
	http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-3.0.xsd">

	
	<!-- 退款处理-->
	<bean id="refundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.service.impl.RefundManageServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
				<property name="refundInfoExpServiceMap">
					<map>
						<entry key="ICBC"  value-ref="icbcRefundManageService"/>
						<entry key="CEB" value-ref="cebRefundManageService"/>
						<entry key="BOC" value-ref="bocRefundManageService"/>
						<entry key="CCB" value-ref="ccbRefundManageService"/>
						<entry key="BOCOM" value-ref="bocomRefundManageService"/>
						<entry key="CIB" value-ref="cibRefundManageService"/>
						<entry key="CMB" value-ref="cmbRefundManageService"/>
						<entry key="CITIC" value-ref="citicRefundManageService"/>
					</map>
				</property>
			</bean>
		</property>
	</bean>
	
	<!-- 工商银行退款导出管理-->
	<bean id="icbcRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.ICBCRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 光大银行退款导出管理-->
	<bean id="cebRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.CEBRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 中国银行退款导出管理-->
	<bean id="bocRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.BOCRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 建设银行退款导出管理-->
	<bean id="ccbRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.CCBRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 交通银行退款导出管理-->
	<bean id="bocomRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.BOCOMRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 兴业银行退款导出管理-->
	<bean id="cibRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.CIBRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 招商银行退款导出管理-->
	<bean id="cmbRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.CMBRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
	<!-- 中信银行退款导出管理-->
	<bean id="citicRefundManageService" parent="baseTransactionProxyG4">
		<property name="target">
			<bean class="com.saicfc.pmpf.internal.manage.renfund.impl.CITICRefundInfoExportServiceImpl">
				<property name="g4Dao" ref="g4Dao" />
			</bean>
		</property>
	</bean>
	
</beans>


RefundManageService.java

/**
 * 
 */
package com.saicfc.pmpf.internal.manage.service;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.List;

import org.g4studio.core.metatype.Dto;

/**
 * 退款处理
 * @author lizhiyong
 * @version $Id: RefundManageService.java, v 0.1
		2014年7月7日 下午1:33:34 Exp $
 */
public interface RefundManageService {

    
    /**
     * 配置导出的详细信息
     * @param channelCode
     *                 渠道代码
     * @param paymentMap
     *                 订单信息
     * @param map
     *           退款信息
     * @return
     * @throws Exception 
     */
    @SuppressWarnings("rawtypes")
    public LinkedHashMap getExportDetailInfo(String channelCode, HashMap paymentMap, HashMap refundMap) throws Exception;

    /**
     * 设置导出文件头部信息
     * @param channelCode  渠道代码
     * @return
     * @throws Exception 
     */
    @SuppressWarnings("rawtypes")
    public LinkedHashMap getExportTile(String channelCode) throws Exception;
    
    /**
     * 上传网银格式文件的最大数目
     * @param channelCode
     * @return
     */
    public int maxCount(String channelCode);
    
    
}

RefundManageServiceImpl.java

/**
 * 
 */
package com.saicfc.pmpf.internal.manage.service.impl;

import java.sql.SQLException;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.g4studio.core.metatype.Dto;
import org.g4studio.core.metatype.impl.BaseDto;
import org.g4studio.core.model.service.impl.BizServiceImpl;

import com.saicfc.pmpf.internal.manage.renfund.RefundInfoExportService;
import com.saicfc.pmpf.internal.manage.service.RefundManageService;
import com.saicfc.pmpf.internal.manage.utils.CommonUtils;
import com.saicfc.pmpf.internal.manage.utils.Contants;
import com.saicfc.pmpf.internal.manage.utils.DateUtil;

/**
 * 退款处理
 * @author lizhiyong
 * @version $Id: RefundManageServiceImpl.java, v 0.1
		2014年7月7日 下午1:33:49 Exp $
 */
public class RefundManageServiceImpl extends BizServiceImpl implements RefundManageService {

    private Log                                  logger = LogFactory.getLog(getClass());

    private Map<String, RefundInfoExportService> refundInfoExpServiceMap;

    public void setRefundInfoExpServiceMap(Map<String, RefundInfoExportService> refundInfoExpServiceMap) {
        this.refundInfoExpServiceMap = refundInfoExpServiceMap;
    }

    @SuppressWarnings("rawtypes")
    @Override
    public LinkedHashMap getExportDetailInfo(String channelCode, HashMap paymentMap, HashMap refundMap)
                                                                                                 throws Exception {
        try {
            return this.refundInfoExpServiceMap.get(channelCode).getExportDetailInfo(paymentMap,
                refundMap);
        } catch (Exception e) {
            throw e;
        }
    }

    @SuppressWarnings("rawtypes")
    @Override
    public LinkedHashMap getExportTile(String channelCode) throws Exception {
        try {
            return this.refundInfoExpServiceMap.get(channelCode).getExportTile();
        } catch (Exception e) {
            throw e;
        }
    }

    @Override
    public int maxCount(String channelCode) {
        return this.refundInfoExpServiceMap.get(channelCode).maxCount();
    }
}


RefundInfoExportService.java

package com.saicfc.pmpf.internal.manage.renfund;

import java.util.HashMap;
import java.util.LinkedHashMap;

/**
 * 退款导出网银格式文件service
 * @author lizhiyong
 * @version $Id: RefundInfoExportService.java, v 0.1
		2014年9月10日 下午4:06:26 Exp $
 */
public interface RefundInfoExportService {

    /**
     * 配置导出的详细信息
     * @param channelCode
     *                 渠道代码
     * @param paymentMap
     *                 订单信息
     * @param map
     *           退款信息
     * @return
     */
    @SuppressWarnings("rawtypes")
    public LinkedHashMap getExportDetailInfo(HashMap paymentMap, HashMap refundMap);

    /**
     * 设置导出文件头部信息
     * @param channelCode  渠道代码
     * @return
     */
    @SuppressWarnings("rawtypes")
    public LinkedHashMap getExportTile();

    /**
     * 设置最大导出条数
     * @param channelCode
     * @return
     */
    int maxCount();

    
}

ICBCRefundInfoExportServiceImpl.java

package com.saicfc.pmpf.internal.manage.renfund.impl;

import java.math.BigDecimal;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedHashMap;

import org.g4studio.core.model.service.impl.BizServiceImpl;

import com.saicfc.pmpf.internal.manage.renfund.RefundInfoExportService;
import com.saicfc.pmpf.internal.manage.utils.DateUtil;

public class ICBCRefundInfoExportServiceImpl extends BizServiceImpl implements
                                                                   RefundInfoExportService {

    /**
     * 配置工商银行导出的详细信息
     * @param channelCode
     * @param paymentMap
     * @param map
     * @return 
     * @see com.saicfc.pmpf.internal.manage.renfund.RefundInfoExportService#getExportDetailInfo(java.lang.String, java.util.HashMap, java.util.HashMap)
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public LinkedHashMap getExportDetailInfo(HashMap paymentMap, HashMap refundMap) {
        LinkedHashMap datamMap = new LinkedHashMap();
        String orderTime = DateUtil.convertDateToString("yyyyMMdd",
            (Date) paymentMap.get("orderTime"));
        String channelOrderNo = (String) paymentMap.get("channelOrderNo");
        datamMap.put("1", channelOrderNo);
        datamMap.put("2", orderTime);
        BigDecimal amount = (BigDecimal) refundMap.get("amount");
        String amountString = amount.divide(new BigDecimal(10)).toPlainString();
        datamMap.put("3", amountString);
        datamMap.put("4", refundMap.get("remark") != null ? refundMap.get("remark") : "");
        datamMap.put("5", "");
        return datamMap;
    }

    /**
     * 设置工商银行导出文件头部信息
     * @param channelCode
     * @return 
     * @see com.saicfc.pmpf.internal.manage.renfund.RefundInfoExportService#getExportTile(java.lang.String)
     */
    @SuppressWarnings({ "rawtypes", "unchecked" })
    @Override
    public LinkedHashMap getExportTile() {
        LinkedHashMap map = new LinkedHashMap();
        map.put("1", "订单号");
        map.put("2", "支付日期");
        map.put("3", "退货现金金额(整数金额 单位:分)");
        map.put("4", "退货原因");
        map.put("5", "退货积分商户金额(整数金额  单位 : 分)");
        return map;
    }

    @Override
    public int maxCount() {
        return 0;
    }

}


分享到:
评论

相关推荐

    android多个activity和一个service通信

    在实际项目中,常常需要多个Activity与一个Service进行通信,比如本例中提到的“service在后台下载”场景。这种通信机制对于实现应用的流畅性和功能完整性至关重要。 首先,我们来看如何创建和启动一个Service。...

    5. 多个service实现同一个接口 或者抽象类 1

    在Java Spring框架中,多个Service实现同一个接口或抽象类是一种常见的设计模式,它允许我们根据不同的业务需求选择合适的实现。这种模式通常被称为多态服务或者策略模式。在给定的文件中,我们看到一个名为`...

    Android 多个service的action 相同冲突 验证demo

    在某些情况下,我们可能需要启动多个Service来执行不同的任务,但问题在于,如果这些Service的Intent ACTION(动作)相同,可能会引发冲突。本篇文章将深入探讨这个主题,并提供一个验证示例。 当多个Service声明了...

    Service与多个Activity交互

    当一个Service需要与多个Activity进行数据交换或控制交互时,Broadcast(广播)就起到了关键的作用。 **Broadcast(广播):** BroadcastReceiver是Android系统中的一个重要组件,它用于接收系统或应用发送的广播...

    Android防止service多次执行startCommand

    这样,即使有多个启动请求,也只有第一个能真正启动Service。 ```java // 在Service中 @Override public void onCreate() { super.onCreate(); IntentFilter filter = new IntentFilter(ACTION_SERVICE_STARTED);...

    安卓开发观察者模式应用-一个service通知多个activity更新ui的实现

    在给定的场景中,我们将讨论如何利用观察者模式来实现一个Service通知多个Activity更新UI的功能。 首先,我们需要理解Service和Activity之间的交互方式。在Android中,Service是后台运行的组件,而Activity是用户...

    一个最简单的Service DEMO

    本"一个最简单的Service DEMO"旨在提供基础的Service使用教程,帮助开发者了解如何在Android应用中创建和使用Service。我们可以通过参看链接(已失效)获取更详细的信息。 首先,Service的创建通常涉及以下步骤: ...

    service now web service

    该驱动程序利用 Service Now 的 Web 服务支持,提供了一个只读查询接口。由于它使用 Web 服务接口,因此在整个平台上强制执行访问控制列表 (ACL),并确保数据安全性。 **注意事项**: - ODBC 驱动程序仅支持 SELECT...

    Activity绑定Service(Kotlin)

    首先,我们需要创建一个Service类,继承自Android的`Service`类。在Kotlin中,通常会重写`onStartCommand()`和`onBind()`方法。`onStartCommand()`用于处理通过`startService()`启动的服务,`onBind()`则用于处理...

    Android 多个service的action冲突验证demo

    然而,当一个应用程序中有多个Service并且它们都绑定了相同的Intent Action时,可能会出现Action冲突的问题。本示例"Android 多个service的action冲突验证demo"将深入探讨这个问题,并提供解决策略。 首先,我们...

    service-worker-express.rar

    Service Worker 是 Chrome 团队提出和力推的一个 WEB API,用于给 web 应用提供高级的可持续的后台处理能力。 service worker 能够操作的缓存是有别于浏览器内部的 memory cache 或者 disk cache。它是独立于当前...

    oracle service_name参数

    在Oracle数据库管理中,`service_name`是一个重要的参数,它用于标识数据库实例所提供的服务名称。通过设置正确的`service_name`,可以确保客户端应用程序能够顺利连接到所需的数据库实例。本文将详细介绍`service_...

    QT for Android下Service的创建

    7. **多Service管理**:如果需要创建多个Service,你可以按照上述步骤分别创建不同的C++类,并在AndroidManifest.xml中声明。通过Qt的模块化设计,每个Service可以独立处理不同的后台任务,提高代码的可维护性和复用...

    用SQL语句解决Service Broker未启动的问题

    Service Broker 是 SQL Server 2005 中引入的一个新功能,它使数据库管理员可以创建异步消息应用程序。Service Broker 应用程序由多个对象组成,包括消息队列、对话和服务_contract。消息队列是用于存储消息的数据库...

    通过Service播放音频的代码

    在实际应用中,你可能还需要考虑更多细节,比如错误处理、资源释放、音频焦点管理(在多个应用同时播放音频时确保音质),以及优化Service的生命周期管理以节省系统资源。此外,对于长音乐文件,推荐使用`ExoPlayer`...

    基于Service的简易音乐播放器

    综上所述,基于Service的简易音乐播放器涉及到Android的Service组件、Activity组件交互、多媒体播放、资源管理等多个核心知识点。通过实践这个项目,开发者可以增强对Android应用开发的理解,特别是对于后台服务和...

    service应用

    - 音频焦点管理:多个应用可能同时播放音频,Android提供了AudioManager来管理音频焦点,确保只有一个应用在前台播放。 6. 耗电与性能考虑: 长时间运行的Service会增加电池消耗。因此,在不播放音乐时,应当及时...

    servicedemo

    创建一个Service需要继承`android.app.Service`类,并实现其生命周期方法,如`onCreate()`, `onStartCommand()`, `onBind()`等。在AndroidManifest.xml文件中,还需要声明Service,以使系统知道该组件的存在。 3. ...

    Windows Service Wrapper

    Windows Service Wrapper是一个开源工具,专为在Windows操作系统中管理和运行应用程序设计,特别是为了方便像nginx这样的Web服务器作为系统服务运行。这个工具的核心功能是将非服务应用程序包装成一个可管理和控制的...

    Android_Service多线程断点下载

    在“Android Service多线程断点下载”这个主题中,我们将深入探讨如何利用Service组件来实现文件的多线程和断点续传下载功能。 1. **Service基础**: - Service的基本概念:Service是Android四大组件之一,用于...

Global site tag (gtag.js) - Google Analytics