package com.qhyf.app.bl.controller;
import java.util.ArrayList;
import java.util.List;
import com.jfinal.core.ActionKey;
import com.jfinal.core.action.Rest;
import com.jfinal.core.pojo.RestMethod;
import com.qhyf.app.bl.base.controller.QhyfController;
import club.newepoch.persistent.db.common.Db;
import club.newepoch.persistent.db.pojo.Record;
import club.newepoch.utils.StringUtils;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
/**
* 获取保理付确认书信息的接口
*
* @author lx
*/
public class InterfaceFactoringPayConfirmationController extends QhyfController {
/**
* 获取付款确认书的信息
*/
@Rest(method = RestMethod.POST)
@ActionKey("/api/qhyf/paycomfirm/info/")
public void PayConfirmationInformation() {
//返回json数据
JSONObject returnJson = new JSONObject();
JSONArray data = new JSONArray();
//存发票号
JSONArray invoiceNodata = new JSONArray();
// 数据校验是否成功标识
boolean checkFlag = true;
StringBuffer errmsgSb = new StringBuffer();
try {
//获取金融机构
String financialInstitutionsId = this.getPara("financial_institutions_id");
//获取期数
String period = this.getPara("periods");
// 获取付款确认书编号
String payNo = this.getPara("pay_code");
// 当payId 为空,核心企业,期数,金融机构不能为空
if (StringUtils.isBlank(payNo)) {
if (StringUtils.isBlank(financialInstitutionsId)) {
errmsgSb.append("金融机构不能为空;");
//缺少参数
returnJson.put("errcode", "3001");
checkFlag = false;
}
if (StringUtils.isBlank(period)) {
errmsgSb.append("期数不能为空;");
//缺少参数
returnJson.put("errcode", "3001");
checkFlag = false;
}
}
// 期数存在的情况下,校验期数是否为数值
if (StringUtils.notBlank(period) && !checkPeriods(period.toString())){
errmsgSb.append("期数参数值不合法");
returnJson.put("errcode", "3002");
checkFlag = false;
}
// 校验通过
if (checkFlag) {
// 构造查询sql
String sql = "SELECT " +
" a.uuid, " +
" a.pay_id , " + // 付款确认书编号
" b.core_enterprise_name , " + // 核心企业名字
" a.financial_institutions_id , " + //金融机构id
" c.financial_institutions_name , " + //金融机构名称
" d.sign_body_name , " + // 原始权益人
" a.periods, " + // 期数
" e.suppliers_name, " + // 供应商名称
" a.suppliers_account, " + // 供应商账号
" a.open_account_bank, " + // 供应商开户行
" a.account_name, " + // 账号名称
" a.suppliers_rate_biz, " + // 供应商利率(业务)
" f.item_company_name, " + // 项目公司名称
" a.loan_date, " + // 实际放款日期(供应商)
" a.account_receivable, " + // 应收账款金额
" a.due_date, " + // 应收账款到期日
" a.suppliers_money, " + // 供应商放款金额
" a.contract_type, " + // 合同类型
" a.pay_priority, " + // 是否加急
" a.item_name , " + // 项目名称
" a.transfer_apply_date, " + // 提单日
" g.region_name, " + // 区域
" h.contract_name, " + // 合同名称
" a.base_contract_name, " + // 商务合同名称
" a.base_contract_no , " + // 商务合同编号
" l.large_region_name " +
"FROM " +
" biz_pay_comfirm_info a , " +
" biz_core_enterprise b, " +
" biz_financial_institutions c, " +
" biz_signing_body d, " +
" biz_suppliers e, " +
" biz_item_company f, " +
" biz_contract_info h, " +
" biz_item_region g " +
" LEFT JOIN biz_large_region_mapping k on g.uuid = k.item_region_uuid and k.sys_status = 1 " +
" LEFT JOIN biz_large_region l on k.large_region_uuid = l.uuid and l.sys_status = 1 " +
" WHERE " +
" a.core_enterprise_id = b.uuid " +
"AND a.financial_institutions_id = c.uuid " +
"AND a.signing_body_id = d.uuid " +
"AND a.suppliers_id = e.uuid " +
"AND a.item_company_id = f.uuid " +
"AND f.region_id = g.uuid " +
"AND a.contract_id = h.uuid " +
"AND a.sys_status = 1 " +
"AND b.sys_status = 1 " +
"AND c.sys_status = 1 " +
"AND d.sys_status = 1 " +
"AND f.sys_status = 1 " +
"AND g.sys_status = 1 " +
"AND h.sys_status = 1 " ;
// where条件
String where = "";
List<String> paras = new ArrayList<String>();
// 金融机构类型不为空时新增查询条件
if (StringUtils.notBlank(financialInstitutionsId)) {
where += "and a.financial_institutions_id = ? ";
paras.add(financialInstitutionsId);
}
// 期数不为空时新增查询条件
if (StringUtils.notBlank(period)) {
where += "and a.periods = ? ";
paras.add(period);
}
// 付款确认书编号不为空时新增查询条件
if (StringUtils.notBlank(payNo)) {
where += "and a.pay_id = ? ";
paras.add(payNo);
}
List<Record> payConfirmationrecordList = Db.find(sql + where, paras.toArray());
// 当查询结果不为空时
if (!payConfirmationrecordList.isEmpty()) {
for (Record rd : payConfirmationrecordList) {
JSONObject json = new JSONObject();
//核心企业
json.put("core_enterprise_name", rd.get("coreEnterpriseName"));
// 金融机构id
json.put("financial_institutions_id", rd.get("financialInstitutionsId"));
// 金融机构名称
json.put("financial_institutions_name", rd.get("financialInstitutionsName"));
// 签约主体
json.put("signing_body_name", rd.get("signBodyName"));
// 期数
json.put("periods", rd.get("periods"));
// 付款确认书编号
json.put("pay_code", rd.get("payId"));
// 供应商名称
json.put("suppliers_name", rd.get("suppliersName"));
// 供应商账号
json.put("suppliers_account", rd.get("suppliersAccount"));
// 供应商开户行
json.put("open_account_bank", rd.get("openAccountBank"));
// 账号名称
json.put("account_name", rd.get("accountName"));
// 供应商利率(业务)
json.put("suppliers_rate_biz", rd.get("suppliersRateBiz"));
// 项目公司名称
json.put("item_company_name", rd.get("itemCompanyName"));
// 放款时间
json.put("loan_date", rd.get("loanDate")==null? "" : rd.get("loanDate").toString());
// 应收账款金额
json.put("accounts_receivable", rd.get("accountReceivable"));
// 应收账款到期日
json.put("due_date", rd.get("dueDate")==null? "" : rd.get("dueDate").toString());
// 放款金额
json.put("loan_amount", rd.get("suppliersMoney"));
// 类型(工程 贸易)
json.put("contract_type", rd.get("contractType"));
// 是否加急(0:是不加急 ,1是加急)
json.put("urgent", rd.get("payPriority") == "0" ? 0:1);
// 是否自垫付
String selfAdvanceSql = "SELECT uuid from biz_own_funds_loan_registe WHERE pay_id = ? and sys_status = 1 " ;
//获取当前单是否为自垫付
String selfAdvance = Db.queryStr(selfAdvanceSql, rd.getStr("uuid")) ;
// 数据为空 ,则不存在 ,不是自垫付
if (StringUtils.isBlank(selfAdvance)){
// 不是自垫付,设置为 0
json.put("self_advance", 0);
}else {
// 是自垫付,设置为 1
json.put("self_advance", 1);
}
//查询是否退单
String chargebackSql= "SELECT " +
" pay_id " +
" FROM " +
" biz_rollback_pay " +
" WHERE " +
" sys_status = 1 " +
" AND biz_state <> 15 " +
"and pay_id = ? " ;
//获取当前单是否为急单
String chargeback = Db.queryStr(chargebackSql, rd.getStr("uuid")) ;
// 是否退单
// 数据为空 ,则不存在 ,不是退单
if (StringUtils.isBlank(chargeback)){
// 不是退单,设置为 0
json.put("ifs_rollback", 0);
}else {
// 是退单,设置为 1
json.put("ifs_rollback", 1);
}
// 提单日
json.put("bl_date", rd.get("transferApplyDate") == null? "" : rd.get("transferApplyDate").toString());
// 区域(指:项目公司区域)
json.put("region_name", rd.get("regionName"));
// 合同名称
json.put("contract_name", rd.get("contractName"));
// 商务合同名称
json.put("base_contract_name", rd.get("baseContractName"));
// 商务合同编号
json.put("base_contract_no", rd.get("baseContractNo"));
// 大区域
json.put("large_region_name", rd.get("largeRegionName"));
//查询 发票号
String invoiceNoSql = "SELECT " +
" h.invoice_no " +
" FROM " +
" biz_invoice_info h " +
" WHERE " +
" h.sys_status = 1" +
" AND h.pay_id = ? ";
//获取发票号
List<Record> invoiceNoList = Db.find(invoiceNoSql, rd.getStr("uuid"));
// 发票号
for (Record invoiceNo : invoiceNoList) {
JSONObject invoiceNoJson = new JSONObject();
invoiceNoJson.put("invoiceNo", invoiceNo.get("invoiceNo"));
invoiceNodata.add(invoiceNoJson);
}
json.put("invoiceList", invoiceNodata);
// 将json加进响应体
data.add(json);
}
returnJson.put("errcode", "0");
returnJson.put("errmsg", "");
} else {
returnJson.put("errcode", "3003");
returnJson.put("errmsg", "未获取到付款确认书信息,请检查请求参数是否正确");
}
} else {
//校验不通过
returnJson.put("errmsg", errmsgSb.toString());
}
returnJson.put("data", data);
} catch (Exception e) {
// 异常处理
returnJson.put("errcode", "9999");
returnJson.put("errmsg", "内部服务处理异常!");
returnJson.put("data", data);
}
//返回结果
this.renderJson(returnJson);
}
/**
* 期数校验
* @param param 需要校验的参数
* @return isCheckThrough 是否满足校验规则
*/
private boolean checkPeriods(String param) {
return StringUtils.matchRegex(param, "^\\d+$");
}
}