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";
}
}
datasource=design
groupId=0001A1100000000002FX
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);
}
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;
}
}
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;
}
}
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;
}
}
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;
}
}
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());
}
}
}
}
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;
}
}
<module name="jych">
<public>
<component remote="true" singleton="true" tx="CMT">
<interface>nc.ift.wgbfb.rest.fzhsquery.IFzhsQueryServiceinterface>
<implementation>nc.impl.wgbfb.rest.fzhsquery.FzhsQueryServiceImplimplementation>
component>
public>
module>
<module>
<rest>
<resource classname="nc.ift.wgbfb.rest.fzhsquery.FzhsQueryServiceResource" exinfo=""/>
rest>
module>
<module name="jych">
<public>
<component remote="true" singleton="true" tx="CMT">
<interface>nc.ift.wgbfb.rest.fzhsquery.IFzhsQueryServiceinterface>
<implementation>nc.impl.wgbfb.rest.fzhsquery.FzhsQueryServiceImplimplementation>
component>
public>
module>
<module>
<rest>
<resource classname="nc.ift.wgbfb.rest.fzhsquery.FzhsQueryServiceResource" exinfo=""/>
rest>
module>
3.添加moudles.xml文件
<module name="jych">
<public>
public>
<private>
private>
module>
1.调用地址
http://127.0.0.1:80/uapws/rest/wgbfb/fzhsQueryData
2.调用json格式
{
"userid":"yh1",
"qjn":"2020",
"qjy":"08"
}