rest查询接口开发步骤

rest查询接口开发步骤

public端

一、nc.ift.wgbfb.rest.base

  1. 添加BaseRestResource登录类
package nc.ift.wgbfb.rest.base;
import java.io.InputStream;
import java.util.Properties;

import com.alibaba.fastjson.JSONObject;

import nc.bs.dao.BaseDAO;
import nc.bs.framework.common.InvocationInfoProxy;
import nc.bs.framework.common.NCLocator;
import nc.bs.framework.server.ISecurityTokenCallback;
import nc.bs.logging.Logger;
import nc.jdbc.framework.processor.ColumnProcessor;
import nc.vo.pub.BusinessException;
import nc.vo.pubapp.pattern.exception.ExceptionUtils;
import uap.ws.rest.resource.AbstractUAPRestResource;

/**
 * @author hanh
 * @date 2023-12-07
 */
public class BaseRestResource extends AbstractUAPRestResource{

	
	public void login(JSONObject jsonInfo){
		ISecurityTokenCallback sc = NCLocator.getInstance().lookup(ISecurityTokenCallback.class);
	      sc.token("NCSystem".getBytes(), "NCSSODXGD".getBytes());
		init(jsonInfo);
	}
	
	private void init(JSONObject jsonInfo){
		String cuserid = (String) jsonInfo.get("userid");
		try {
			if(cuserid == null) {
				throw new BusinessException("用户编码为空!");
			}
			InvocationInfoProxy.getInstance().setUserDataSource(getEnvInfo("datasource"));
			InvocationInfoProxy.getInstance().setGroupId(getEnvInfo("groupId"));
			String sql = "SELECT cuserid FROM sm_user WHERE user_code = '"+cuserid+"' AND isnull(dr,0) = 0";
			String pk = (String) new BaseDAO().executeQuery(sql, new ColumnProcessor());
			if(pk == null) {
				throw new BusinessException("未查询到编码为" + cuserid + "的操作用户!");
			}
			InvocationInfoProxy.getInstance().setUserId(pk);
		} catch (Exception e) {
			Logger.error("根据用户提交的cuserid(用户编码) = ["+cuserid+"] 查询用户主键时发生了错误 "+e);
			ExceptionUtils.wrappBusinessException(e.getMessage());
		}
		
	}
	
	/**
	 * 得到配置文件参数值
	 */
	public String getEnvInfo(String param) {
		// 属性集合对象
		Properties prop = new Properties();
		try {
			InputStream fis = BaseRestResource.class.getResourceAsStream("data.properties");
			// 将属性文件流装载到Properties对象中
			prop.load(fis);
		} catch (Exception e) {
			Logger.debug(e);
		}
		return prop.getProperty(param);
	}
	
	@Override
	public String getModule() {
		return "jych";
	}

}


  1. 添加配置文件data.properties
datasource=design
groupId=0001A1100000000002FX

二、nc.ift.wgbfb.rest.fzhsquery

  1. 添加IFzhsQueryService接口类
package nc.ift.wgbfb.rest.fzhsquery;

import com.alibaba.fastjson.JSONObject;


/**
 * @desc:辅助核算查询接口
 * @author hanh
 * @date:2023-12-07
 */
public interface IFzhsQueryService {
	
	/**
	 * 辅助核算查询接口
	 * @author hanh
	 * @date 2023年12月7日
	 * @time 下午10:23:08 
	 */
	public JSONObject fzhsQueryData(JSONObject jsonInfo);
}

  1. 添加FzhsQueryServiceResource服务类
package nc.ift.wgbfb.rest.fzhsquery;

import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;

import nc.bs.framework.common.NCLocator;
import nc.bs.logging.Logger;
import nc.ift.wgbfb.rest.base.BaseRestResource;
import nc.vo.wgbfb.resources.ResultParam;

import org.springframework.web.bind.annotation.ResponseBody;

import com.alibaba.fastjson.JSONObject;


@Path("/wgbfb")
public class FzhsQueryServiceResource extends BaseRestResource{
	
	/**
	 * @desc 辅助核算查询接口
	 * @author hanh
	 * @date 2023-12-07
	 */
	@POST
	@Path("/fzhsQueryData")
	@Produces("application/json")
	@Consumes("application/json")
	@ResponseBody
	public Object fzhsQueryData(JSONObject json) {
		Logger.info("*****************************接收json:" + json + "*****************************");
		Object retMsg = null;
		try {
			login(json);
			retMsg = getService().fzhsQueryData(json);
		} catch (Exception e) {
			ResultParam returnvo = new ResultParam();
			returnvo.setCode("500");
			returnvo.setMessage("接口调用失败" + e.getMessage());
			Logger.error("*****************************rest接口调用失败:" + e.getMessage() + "*****************************");
			retMsg = returnvo;
		}
		return JSONObject.parseObject(retMsg.toString());
	}
	
	private IFzhsQueryService service;
	private IFzhsQueryService getService() {
		if(service == null) {
			service = NCLocator.getInstance().lookup(IFzhsQueryService.class);
		}
		return service;
	}
	
}


三、nc.vo.resources

  1. 添加ResultParam接口返回参数通用类
package nc.vo.wgbfb.resources;

/**
 * @desc 接口通用返回vo
 * @author hanh
 * @date 2023-12-07
 *
 */

public class ResultParam {
	String code;
	String message;
	Object body;
	public String getCode() {
		return code;
	}
	public void setCode(String code) {
		this.code = code;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
	public Object getBody() {
		return body;
	}
	public void setBody(Object body) {
		this.body = body;
	}
}

四、nc.vo.wgbfb.fzhsquery

  1. 添加FzhsQueryParam查询条件类
package nc.vo.wgbfb.fzhsquery;

/** 
* 辅助核算查询接口入参
* @author hanh
* @date 2023年12月7日
* @time 上午10:34:57 
*/
public class FzhsQueryParam {
	//用户编码
	private String userid;

	//期间年
	private String qjn;
	
	//期间月
	private String qjy;
	
	public String getUserid() {
		return userid;
	}

	public void setUserid(String userid) {
		this.userid = userid;
	}

	public String getQjn() {
		return qjn;
	}

	public void setQjn(String qjn) {
		this.qjn = qjn;
	}

	public String getQjy() {
		return qjy;
	}

	public void setQjy(String qjy) {
		this.qjy = qjy;
	}
	
	
}


  1. 添加FzhsQueryReturnVO返回参数类
package nc.vo.wgbfb.fzhsquery;

import java.util.List;
import java.util.Map;

/** 
* 辅助核算查询接口出参
* @author hanh
* @date 2023年12月7日
* @time 上午10:38:09 
*/
public class FzhsQueryReturnVO {
	private String code;
	
	private String message;
	
	private List<Map<String, Object>> data;

	public String getCode() {
		return code;
	}

	public void setCode(String code) {
		this.code = code;
	}

	public String getMessage() {
		return message;
	}

	public void setMessage(String message) {
		this.message = message;
	}

	public List<Map<String, Object>> getData() {
		return data;
	}

	public void setData(List<Map<String, Object>> data) {
		this.data = data;
	}
	
}

五、nc.ift.wgbfb.rest.utils

  1. 添加CreateJsonFileToolUtil生成日志文件工具类
package nc.ift.wgbfb.rest.utils;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import nc.bs.framework.common.RuntimeEnv;
import nc.vo.pub.BusinessException;
import nc.vo.pub.lang.UFDate;

/**
 *  生成报文
 * @author hanh
 * @date 2023年12月7日
 * @time 下午2:01:46
 */
public class CreateJsonFileToolUtil {
	
	public static void saveJsonFile(String dataType, String dataJson, String type) {
		try {
			createJsonFile(dataType, dataJson, type);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	/**
	 * 落地发送报文
	 * 
	 * @param dataType
	 * @param dataJson
	 * @throws Exception 
	 * @throws Exception
	 */
	public static void createJsonFile(String dataType, String dataJson, String type) throws Exception {
		
		dataType = new UFDate().toString().substring(0, 10)  +  dataType;
		FileOutputStream out = null;
		try {
			// 系统当前年月
			String tempFileName = RuntimeEnv.getInstance().getNCHome() + File.separator + "nclogs" + File.separator
					+ "fzhsquery" + File.separator + type + File.separator + dataType + ".log";
			File file = new File(tempFileName);
			if (!file.exists()) {
				if (!file.getParentFile().exists()) { // 如果父文件夹不存在
					file.getParentFile().mkdirs(); // 新建多层文件夹
				}
				file.createNewFile();
			}
			// 创建文件输入流
			out = new FileOutputStream(file, true); // 如果追加方式用true
			// 系统当前时间
			SimpleDateFormat sdf1 = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
			String time = sdf1.format(new Date());

			StringBuffer msg1 = new StringBuffer();
			msg1.append("-----------" + time + "------------:");
			msg1.append("\n");
			msg1.append(dataJson + "\n");
			msg1.append("\n");
			// 写入
			out.write(msg1.toString().getBytes("utf-8"));// 注意需要转换对应的字符集
		} catch (Exception e) {
			e.printStackTrace();
			throw new BusinessException(e.getMessage());
		} finally {
			try {
				if (out != null) {
					out.flush();
					out.close(); // 关闭流
				}
			} catch (IOException e) {
				e.printStackTrace();
				throw new BusinessException(e.getMessage());
			}
		}
	}
}

private端

一、nc.impl.wgbfb.rest.fzhsquery

  1. 添加FzhsQueryServiceImpl实现类
package nc.impl.wgbfb.rest.fzhsquery;

import java.util.List;
import java.util.Map;

import nc.bs.dao.BaseDAO;
import nc.bs.logging.Logger;
import nc.ift.wgbfb.rest.fzhsquery.IFzhsQueryService;
import nc.ift.wgbfb.rest.utils.CreateJsonFileToolUtil;
import nc.jdbc.framework.processor.MapListProcessor;
import nc.vo.pubapp.pattern.pub.SqlBuilder;
import nc.vo.wgbfb.fzhsquery.FzhsQueryParam;
import nc.vo.wgbfb.fzhsquery.FzhsQueryReturnVO;

import com.alibaba.fastjson.JSONObject;
import com.google.gson.Gson;

public class FzhsQueryServiceImpl implements IFzhsQueryService{

	/** 
	* 辅助核算查询接口
	* @author hanh
	* @date 2023年12月7日
	* @time 下午10:32:18 
	*/
	@SuppressWarnings("unchecked")
	@Override
	public JSONObject fzhsQueryData(JSONObject jsonInfo) {
		// TODO 自动生成的方法存根
		FzhsQueryParam jsonvo = new Gson().fromJson(jsonInfo.toString(),FzhsQueryParam.class);
		CreateJsonFileToolUtil.saveJsonFile("辅助核算查询接口", "NC接收信息:" + jsonInfo.toJSONString(), "fzhsQuery");
		FzhsQueryReturnVO returnvo = new FzhsQueryReturnVO(); 
		returnvo.setCode("200");
		returnvo.setMessage("成功");
		try {
			SqlBuilder sql = new SqlBuilder();
			sql.append("	SELECT 	");
			sql.append("	  oa.code as zbbm, 	");
			sql.append("	  oa.name as zbmc, 	");
			sql.append("	  u1.user_name as zdr, 	");
			sql.append("	  u2.user_name as shr, 	");
			sql.append("	  gl_voucher.year as qjn, 	");
			sql.append("	  gl_voucher.adjustperiod as qjy, 	");
			sql.append("	  substr(gl_voucher.prepareddate,9,2) as qjr,	");
			sql.append("	  gl_voucher.num as pzbm, 	");
			sql.append("	  gl_detail.detailindex as flh, 	");
			sql.append("	  gl_detail.explanation as zy, 	");
			sql.append("	  bac.code as kmbm, 	");
			sql.append("	  ba.name as kmmc, 	");
			sql.append("	  ba.dispname as kmqc,	");
			sql.append("	  bat.name as kmlx,	");
			sql.append("	  bc.name as bz, 	");
			sql.append("	  gl_detail.debitamount as jfyb, 	");
			sql.append("	  gl_detail.localdebitamount as jfbb, 	");
			sql.append("	  gl_detail.creditamount as dfyb, 	");
			sql.append("	  gl_detail.localcreditamount as dfbb, 	");
			sql.append("	  gl_detail.localdebitamount as zzbbjfje,	");
			sql.append("	  gl_detail.localcreditamount as zzbbdfje,	");
			sql.append("	  temp_gl_fzhscombine_view.assconbilename as fzhs 	");
			sql.append("	FROM 	");
			sql.append("	  gl_detail 	");
			sql.append("	  INNER JOIN gl_voucher ON gl_detail.pk_voucher = gl_voucher.pk_voucher 	");
			sql.append("	  left join temp_gl_fzhscombine_view on temp_gl_fzhscombine_view.assid = gl_detail.assid 	");
			sql.append("	  left join bd_currtype bc on bc.pk_currtype = gl_detail.pk_currtype 	");
			sql.append("	  and nvl(bc.dr, 0) = 0 	");
			sql.append("	  left join bd_accasoa ba on ba.pk_accasoa = gl_detail.pk_accasoa 	");
			sql.append("	  and nvl(ba.dr, 0) = 0 	");
			sql.append("	  left join bd_account bac on bac.pk_account = gl_detail.pk_account 	");
			sql.append("	  and nvl(bac.dr, 0) = 0 	");
			sql.append("	  left join bd_acctype bat on bat.pk_acctype = bac.pk_acctype 	");
			sql.append("	  and nvl(bat.dr, 0) = 0 	");
			sql.append("	  left join org_accountingbook oa on oa.pk_accountingbook = gl_voucher.pk_accountingbook 	");
			sql.append("	  and nvl(oa.dr, 0) = 0 	");
			sql.append("	  left join sm_user u1 on gl_voucher.pk_prepared = u1.cuserid 	");
			sql.append("	  and nvl(u1.dr, 0) = 0 	");
			sql.append("	  left join sm_user u2 on gl_voucher.pk_checked = u2.cuserid 	");
			sql.append("	  and nvl(u2.dr, 0) = 0 	");
			sql.append("	  left join gl_cashflowcase on gl_cashflowcase.pk_detail = gl_detail.pk_detail 	");
			sql.append("	  and nvl(gl_cashflowcase.dr, 0) = 0 	");
			sql.append("	  left join bd_cashflow on bd_cashflow.pk_cashflow = gl_cashflowcase.pk_cashflow 	");
			sql.append("	  and nvl(bd_cashflow.dr, 0) = 0 	");
			sql.append("	  left join fip_relation on fip_relation.des_relationid = gl_voucher.pk_voucher 	");
			sql.append("	  WHERE 	");
			sql.append("	  ( 	");
			sql.append("	    nvl (gl_voucher.errmessage, '~') = '~' 	");
			sql.append("	    and (gl_voucher.discardflag <> 'Y') 	");
			sql.append("	    and (gl_voucher.tempsaveflag <> 'Y') 	");
			sql.append("	    or gl_voucher.errmessage <> '~' 	");
			sql.append("	  ) 	");
			sql.append("	  and gl_voucher.voucherkind <> 2 	");
			sql.append("	  and gl_voucher.voucherkind <> 255 	");
			sql.append("	  and gl_voucher.dr = 0	");
			//期间年
			if(jsonvo.getQjn() != null && !"".equals(jsonvo.getQjn())) {
				sql.append(" 	   and gl_voucher.year = '" + jsonvo.getQjn() + "'	 ");
			}
			//期间月
			if(jsonvo.getQjy() != null && !"".equals(jsonvo.getQjy())) {
				sql.append(" 	   and gl_voucher.adjustperiod = '" + jsonvo.getQjy() + "'	 ");
			}
			sql.append("	order by 	");
			sql.append("	  gl_voucher.pk_accountingbook, 	");
			sql.append("	  gl_voucher.year, 	");
			sql.append("	  gl_voucher.adjustperiod, 	");
			sql.append("	  gl_voucher.prepareddate, 	");
			sql.append("	  gl_voucher.num, 	");
			sql.append("	  gl_detail.detailindex	");
			List<Map<String, Object>> maplist = (List<Map<String, Object>>) getDao().executeQuery(sql.toString(), new MapListProcessor());
			returnvo.setData(maplist);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			Logger.error("失败!" + e.getMessage());
			returnvo = new FzhsQueryReturnVO();
			returnvo.setCode("500");
			returnvo.setMessage("执行失败" + e.getMessage());
		}
		JSONObject retMsg = JSONObject.parseObject(new Gson().toJson(returnvo));
		/**
		 * 落地发送报文
		 */
		CreateJsonFileToolUtil.saveJsonFile("辅助核算查询接口", "NC返回信息:" + retMsg.toJSONString(), "fzhsQuery");
		return retMsg;
	}
	
	private BaseDAO dao;
	private BaseDAO getDao(){
		if(dao == null){
			dao = new BaseDAO();
		}
		return dao;
	}
}


upm文件和rest文件

一、在开发工具wgbfb下

  1. 添加fzhs.upm文件
<?xml version="1.0" encoding='gb2312'?>
<module name="jych">
  <public>
	
	<component remote="true" singleton="true"  tx="CMT">
	  <interface>nc.ift.wgbfb.rest.fzhsquery.IFzhsQueryService</interface>
	  <implementation>nc.impl.wgbfb.rest.fzhsquery.FzhsQueryServiceImpl</implementation>
	</component>
	
  </public> 
</module> 
  1. 添加fzhs.rest文件
<?xml version="1.0" encoding='gb2312'?>
<module>
        <rest>
				<resource classname="nc.ift.wgbfb.rest.fzhsquery.FzhsQueryServiceResource"  exinfo=""/>
        </rest>
</module>

二、在home/mouldes/jych/META-INF下

  1. 添加fzhs.upm文件
<?xml version="1.0" encoding='gb2312'?>
<module name="jych">
  <public>
	
	<component remote="true" singleton="true"  tx="CMT">
	  <interface>nc.ift.wgbfb.rest.fzhsquery.IFzhsQueryService</interface>
	  <implementation>nc.impl.wgbfb.rest.fzhsquery.FzhsQueryServiceImpl</implementation>
	</component>
	
  </public> 
</module> 
  1. 添加fzhs.rest文件
<?xml version="1.0" encoding='gb2312'?>
<module>
        <rest>
				<resource classname="nc.ift.wgbfb.rest.fzhsquery.FzhsQueryServiceResource"  exinfo=""/>
        </rest>
</module>

3.添加moudles.xml文件

<?xml version="1.0" encoding="gb2312"?>
<module name="jych">
    <public>
    </public>
    <private>
    </private>
</module>

调用地址和json参数

1.调用地址

http://127.0.0.1:80/uapws/rest/wgbfb/fzhsQueryData

2.调用json格式

{
	"userid":"yh1",
    "qjn":"2020",
    "qjy":"08"
}
  • 27
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

和安韩Pro

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

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

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

打赏作者

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

抵扣说明:

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

余额充值