NC6定时任务开发配置

1、后台任务类型注册

位置:动态建模平台->开发配置->后台任务类型注册。

说明:配置定时任务对应后台代码类,模块及说明等。

业务插件类:客开类,需实现IBackgroundWorkPlugin接口

 

 代码示例:

package nc.bs.gl.pushbt;

import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

import javax.naming.NamingException;

import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.NCLocator;
import nc.bs.gl.voucher.DetailDMO;
import nc.bs.glcom.query.VoucherQueryBO;
import nc.bs.pub.SystemException;
import nc.bs.pub.pa.PreAlertObject;
import nc.bs.pub.taskcenter.BgWorkingContext;
import nc.bs.pub.taskcenter.IBackgroundWorkPlugin;
import nc.bs.trade.business.HYPubBO;
import nc.jdbc.framework.processor.ResultSetProcessor;
import nc.vo.bd.accassitem.AccAssItemVO;
import nc.vo.bd.bankaccount.BankAccSubVO;
import nc.vo.gl.aggvoucher.FreeValueVO;
import nc.vo.gl.pubvoucher.DetailVO;
import nc.vo.gl.pubvoucher.VoucherVO;
import nc.vo.pub.BusinessException;
import nc.ws.intf.BTLogVO;
import nc.ws.intf.HttpClient;

import org.apache.commons.lang.StringUtils;

import uap.iweb.log.Logger;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;

/**
 * 日记账定时任务
 * 
 * @author Xbx
 */
@SuppressWarnings({ "restriction", "rawtypes", "unused", "unchecked" })
public class PushGLInfo implements IBackgroundWorkPlugin {
	public static HYPubBO hyPubBO;

	@Override
	public PreAlertObject executeTask(BgWorkingContext bgwc)
			throws BusinessException {
		// TODO Auto-generated method stub
		// 获取接口地址
		String url = getUrl();
		if (url != null) {
			try {
				// 查询分录VO数组
				DetailVO[] vos = getDetailSql();
				if (vos.length > 0) {
					// 获取封装接口数据
					String send_data = getItfData(vos);
					// 调用拜特资金系统接口
					String back = pushBTData(url, send_data);
					Logger.error("发送拜特数据:"+send_data);// 发送拜特数据
					Logger.error("拜特返回数据:"+back);// 拜特返回数据
					// 保存日志
					String savelog = SaveBTLog(vos[0].getPk_org(),
							vos[0].getPk_group(),back);
					if (StringUtils.isNotEmpty(savelog)) {
						bgwc.setLogStr("保存日志报错:" + savelog);
					}
					// 处理返回数据
					String err = handleResult(back);
					if (StringUtils.isNotEmpty(err)) {
						bgwc.setLogStr(err);
					}
				}
			} catch (BusinessException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				bgwc.setLogStr(e1.getMessage());
			} catch (SystemException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				bgwc.setLogStr(e1.getMessage());
			} catch (NamingException e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				bgwc.setLogStr(e1.getMessage());
			} catch (Exception e1) {
				// TODO Auto-generated catch block
				e1.printStackTrace();
				bgwc.setLogStr(e1.getMessage());
			}
		}
		return null;
	}

	// 处理返回数据
	private String handleResult(String back) {
		// TODO Auto-generated method stub
		String errmsg = null;
		if (isJSONArray(back)) {
			JSONArray res = JSONArray.parseArray(back);
			for (int i = 0; i < res.size(); i++) {
				JSONObject obj = JSONArray.parseObject(res.get(i).toString()); // 将JSONArray数组转成JSONObject对象
				String sql = "";
				String pk_detail = obj.getString("id");// 凭证分录主键
				String status = obj.getString("status");// 接收状态
														// 0:接受成功;2:接受失败
				String message = obj.getString("message");// 接受失败原因
				if (StringUtils.isNotEmpty(status)
						&& StringUtils.equals(status, "2")) {
					sql = "update gl_detail set free1 = 'Y' "
							+ "where pk_detail = '" + pk_detail
							+ "' and nvl(dr,0) = 0 ";
				} else if (StringUtils.isNotEmpty(status)) {
					sql = "update gl_detail set free1 = 'N', free2 = '"
							+ message + "' " + "where pk_detail = '"
							+ pk_detail + "' and nvl(dr,0) = 0 ";
				}
				if (StringUtils.isNotEmpty(sql)) {
					try {
						new BaseDAO().executeUpdate(sql);
					} catch (BusinessException e) {
						// TODO: handle exception
						errmsg = ("更新凭证分录[" + sql + "]出错:" + e.getMessage());
					}
				}
			}
		}
		return errmsg;
	}

	// 调用拜特资金系统接口
	private String pushBTData(String url, String send_data) {
		// TODO Auto-generated method stub
		Map<String, String> heads = new HashMap<String, String>();
		String back = HttpClient.httpPostRaw(url, send_data, heads, "utf-8");
		return back;
	}

	// 封装接口数据
	private String getItfData(DetailVO[] vos) throws BusinessException {
		// TODO Auto-generated method stub
		JSONArray fileArr = new JSONArray();// 拼装后数据
		for (DetailVO detail : vos) {
			VoucherVO[] hvos = new VoucherQueryBO()
					.queryByPks(new String[] { detail.getPk_voucher() });
			if (hvos != null && hvos.length > 0) {
				VoucherVO hvo = hvos[0];// 凭证主表
				JSONObject filejson = new JSONObject();
				filejson.put("ID", detail.getPrimaryKey());// 主键--凭证分录主键
				filejson.put("VOUCHER_NO", hvo.getAttributeValue("num"));// 凭证号
				filejson.put("CUR", "RMB");// 币种
				filejson.put("TALLY_DATE", hvo.getPrepareddate().toStdString());// 记账日期--制单日期
				// 获取银行账户
				String bankaccount = getBank(detail);
				filejson.put("COMP_ACC", bankaccount);// 银行账号
				
				filejson.put("DEBIT_MONEY", detail.getLocaldebitamount()
						.toString());// 借方发生额
				filejson.put("CREDIT_MONEY", detail.getLocalcreditamount()
						.toString());// 贷方发生额
				if (detail.getLocalcreditamount().toDouble() < 0 
						|| detail.getLocaldebitamount().toDouble() < 0) {
					// 如果贷方发生额 > O
					filejson.put("REDBLUE_SIGN", "H");// 贷方发生额
				} else {
					filejson.put("REDBLUE_SIGN", "S");// 贷方发生额
				}
				filejson.put("SUMMARY_CONTENT", detail.getExplanation());// 摘要
				filejson.put("fromSys", "NC");// 来源系统
				fileArr.add(filejson);
			} else {
				throw new BusinessException("根据[" + detail.getPk_voucher()
						+ "]获取凭证失败!");
			}
		}
		return fileArr.toString();
	}

	// 获取银行账户
	private String getBank(DetailVO detail) throws BusinessException {
		// TODO Auto-generated method stub
		String bankaccount = null;
		// 获取辅助核算
		FreeValueVO[] hsvos = (FreeValueVO[]) getHyPubBO().queryByCondition(
				FreeValueVO.class, "nvl(dr,0) = 0 and freevalueid = '"+detail.getAssid()+"'");
		if(hsvos == null || hsvos.length <= 0){
			throw new BusinessException("根据["+detail.getAssid()+"]查询辅助核算异常!");
		}
		FreeValueVO hsvo = hsvos[0];
		// 会计辅助核算项目VO
		AccAssItemVO[] hsxmvo = (AccAssItemVO[]) getHyPubBO().queryByCondition(
				AccAssItemVO.class, "nvl(dr,0) = 0 and name = '银行账户'");
		String pk_accassitem = hsxmvo.length > 0 ? hsxmvo[0].getPrimaryKey()
				: null;
		if (StringUtils.isNotEmpty(pk_accassitem)) {
			String pk_bankaccsub = null;
			if (StringUtils.isNotEmpty(hsvo.getTypevalue1())
					&& hsvo.getTypevalue1().indexOf(pk_accassitem) != -1) {
				pk_bankaccsub = hsvo.getTypevalue1().substring(
						hsvo.getTypevalue1().length() - 20,
						hsvo.getTypevalue1().length());
			}else if (StringUtils.isNotEmpty(hsvo.getTypevalue2())
					&& hsvo.getTypevalue2().indexOf(pk_accassitem) != -1) {
				pk_bankaccsub = hsvo.getTypevalue2().substring(
						hsvo.getTypevalue2().length() - 20,
						hsvo.getTypevalue2().length());
			}
			if(StringUtils.isNotEmpty(pk_bankaccsub)){
				BankAccSubVO yhvo = (BankAccSubVO) getHyPubBO().queryByPrimaryKey(BankAccSubVO.class, pk_bankaccsub);
				bankaccount = yhvo.getAccnum();// 账号 
			}else{
				throw new BusinessException("获取银行账户失败!");
			}
		} else {
			throw new BusinessException("获取会计辅助核算项目失败!");
		}
		return bankaccount;
	}

	// 拼装查询分录SQL
	private DetailVO[] getDetailSql() throws SystemException, NamingException,
			Exception {
		// TODO Auto-generated method stub
		StringBuffer mxsql = new StringBuffer();
		mxsql.append("select pk_detail from gl_detail where ");
		mxsql.append("nvl(dr,0) = 0 and pk_accasoa in ");
		mxsql.append("(select distinct a.pk_accasoa from bd_account t, bd_accasoa a where t.pk_account = a.pk_account "
				+ "and a.pk_accchart in ( '1001B11000000000CM4V' ) and  t.code like '1002%') ");
		mxsql.append(" and (free1 <> 'Y' or free1 is null)");
		mxsql.append(" and pk_voucher in (select pk_voucher from gl_voucher where voucherkind<>2 and voucherkind<>255 and dr=0 )");
		String[] pk_details = (String[]) new BaseDAO().executeQuery(
				mxsql.toString(), new ResultSetProcessor() {
					private static final long serialVersionUID = 1L;

					public Object handleResultSet(ResultSet rs)
							throws SQLException {
						List<String> pklist = new LinkedList();
						String pk = null;
						while (rs.next()) {
							pk = rs.getString("pk_detail");
							pklist.add(pk);
						}
						return pklist.toArray(new String[0]);
					}
				});
		DetailVO[] vos = new DetailDMO().findByPrimaryKeyArray(pk_details);
		return vos;
	}

	// 保存日志
	private String SaveBTLog(String pk_org, String pk_group,String rdtdata) throws BusinessException {
		// TODO Auto-generated method stub
		String mes = null;// 保存VO成功标识
		BTLogVO vo = new BTLogVO();
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
		vo.setCreationtime(df.format(new Date()));// 创建时间
		vo.setTransi_type("推送日记账");// 使用transi_type标记是交易结果接口
		vo.setRtn_data(rdtdata);// 拜特返回数据
		vo.setPk_org(pk_org);// 所属组织
		vo.setPk_group(pk_group);// 所属集团
		vo.setDr(0);
		try {
			getHyPubBO().insert(vo);
		} catch (BusinessException e) {
			// TODO: handle exception
			return e.getMessage();
		}
		return mes;
	}

	// 获取日记账接口地址,通过自定义档案维护-集团,编码BTURL下的RJZURL行
	private String getUrl() throws BusinessException {
		String url = (String) getHyPubBO().findColValue("bd_defdoc", "name",
				"nvl(dr,0) = 0 and code = 'RJZURL'");
		return url;
	}

	// 判断是否JSONArray格式
	private static boolean isJSONArray(String json) {
		if (!("{}".equals(json) || (json.length() > 2 && json.charAt(0) == '{' && json
				.charAt(json.length() - 1) == '}'))) {
			try {
				JSONArray jsonArray = JSONArray.parseArray(json);
			} catch (Exception e) {
				e.printStackTrace();
				return false;
			}
			return true;
		}
		return false;
	}

	public static HYPubBO getHyPubBO() {
		if (null == hyPubBO) {
			hyPubBO = new HYPubBO();
		}
		return hyPubBO;
	}
}

2、后台任务部署

位置:动态建模平台->客户化配置->后台任务不是。

说明:管理后台任务类型注册,配置相关参数及定时任务配置。

 

 

3、定时任务日志查看

位置:动态建模平台->系统管理->后台任务日志。

说明:所有定时任务任务可在此处查询,说明列为报错信息。

 

  • 16
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猪仔搬砖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值