payuploadsender.java.svn-base

来自「项目支付宝批量打款,采用httpclient+spring +quarz实现.」· SVN-BASE 代码 · 共 118 行

SVN-BASE
118
字号
package com.szhelper.pay.quartz;

import java.io.IOException;
import java.util.Map;

import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.HttpException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import com.szhelper.pay.ApplicationContextWrapper;
import com.szhelper.pay.Constants;
import com.szhelper.pay.quartz.base.BaseSender;
import com.szhelper.pay.quartz.base.Message;
import com.szhelper.pay.quartz.message.PayUploadMessage;
import com.szhelper.pay.quartz.util.FileCSVHelper;
import com.szhelper.pay.quartz.util.FileZipHelper;
import com.szhelper.pay.service.IPayProxyService;
import com.szhelper.pay.service.impl.PayProxyServiceImpl;

public class PayUploadSender extends BaseSender {
	private static Log logger = LogFactory.getLog(PayUploadSender.class);
	private long threadSleepPeriod = 0;
	private int clientConnTimeout;
	private Map uploadPayConfig;
	private static BaseSender instance = new PayUploadSender();
	private String backupPath;

	public static BaseSender getInstance() {
		return instance;
	}

	private PayUploadSender() {
		uploadPayConfig = (Map) ApplicationContextWrapper.getInstance()
				.getBean("uploadPayConfig");
		threadSleepPeriod = Long.parseLong(uploadPayConfig.get(
				"jobSleepOfUpload").toString());
		logger.info(threadSleepPeriod);
		clientConnTimeout = Integer.parseInt(uploadPayConfig.get(
				"clientConnTimeout").toString());
		backupPath = uploadPayConfig.get("backupPath").toString();
	}

	public void run() {
		while (!runFlag) {
			synchronized (this) {
				if (!queue.empty()) {
					PayUploadMessage message = (PayUploadMessage) queue.pop();
					try {
						if (!send(message)) {
							message.autoIncreaseSentTimes();
							if (message.isAllowSend()) {
								queue.push(message);
							} else {
								message.setStatus(Constants.SENT_RESP_STATUS_E);
								message.getPostMethod().releaseConnection();
								rollbackSendStatus(message);
							}
						}
					} catch (Exception ex) {
						logger.error(ex);
					}
				}
				try {
					// Thread.sleep(1L * 1000L);
					Thread.sleep(threadSleepPeriod);
				} catch (Exception e) {
					logger.error(e);
				}
			}
		}
	}

	public boolean send(Message msg) {
		PayUploadMessage message = (PayUploadMessage) msg;
		boolean flag = false;
		HttpClient client = new HttpClient();
		try {
			logger.info("began to upload file to alipay...");
			client.setConnectionTimeout(clientConnTimeout);
			int responseCode = client.executeMethod(message.getPostMethod());
			String respMsg = message.getPostMethod().getResponseBodyAsString();
			logger.info("alipay upload response code:" + responseCode);
			logger.info("alipay upload response message:" + respMsg);
			if (respMsg != null
					&& respMsg.indexOf(Constants.ALIPAY_UPLOAD_R_SUCCESS) > -1) {
				// move current csv file to backup dir
				FileZipHelper.moveFile(message.getCsvUploading(), backupPath);
				FileCSVHelper.logUploadedFileName(message.getCsvname(), message
						.getUploadLog(), true, "upload csv ["
						+ message.getCsvname()
						+ "] to Alipay successfully and then log ["
						+ message.getCsvname() + "] to "
						+ message.getUploadLog());
				message.getPostMethod().releaseConnection();
				flag = true;
			}
		} catch (HttpException hx) {
			logger.info(hx.getMessage());
		} catch (IOException ex) {
			logger.info(ex.getMessage());
		} 
		return flag;
	}

	private boolean rollbackSendStatus(Message message) {
		IPayProxyService payProxyService = (PayProxyServiceImpl) ApplicationContextWrapper
				.getInstance().getBean("PayProxyService");
		if (!payProxyService.rollbackPrepareSendUploadPM(message)) {
			logger.error("Rollback send stauts error! id=" + message.getId()
					+ ", status=" + message.getStatus() + ", time="
					+ message.getRecieveDate());
			return false;
		}
		return true;
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?