邮储逾期回购凭证生成

This commit is contained in:
zhanglei 2021-09-06 15:33:51 +08:00
parent 63a789bde2
commit f9ab7e6115
5 changed files with 661 additions and 43 deletions

View File

@ -6,14 +6,23 @@ import com.tenwa.voucher.CreateVoucherProcess.CreateVoucherCustCautionMoneyIncom
import com.tenwa.voucher.CreateVoucherProcess.CreateVoucherEbankMoney;
import com.tenwa.voucher.CreateVoucherProcess.CreateVoucherRedCompensatory;
import com.tenwa.voucher.CreateVoucherProcess.CreateVoucherRentIncome;
import com.tenwa.voucher.serviceImp.OverdueRepayPlanVoucherPSBC;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 网银收款流程结束后生成相应的凭证
* @author xiezhiwen
*/
public class IncomeVoucher extends BaseBussiness {
private static final Logger logger = LoggerFactory.getLogger(IncomeVoucher.class);
@Override
public Object run(Transaction Sqlca) throws Exception {
OverdueRepayPlanVoucherPSBC overdueRepayPlanVoucherPSBC = new OverdueRepayPlanVoucherPSBC();
if(overdueRepayPlanVoucherPSBC.findFcPSBCOverduce(this.getAttribute("FlowUnid").toString())){
logger.info("IncomeVoucher 网银收款流程结束后生成相应的凭证,当前是邮储相关订单凭证不执行以下操作。");
return "true";
}
this.initBussinessParam(Sqlca);
String FlowUnid=this.getAttribute("FlowUnid").toString();
String userid = this.getAttribute("CurUserID").toString();

View File

@ -39,20 +39,48 @@ public class InsertVoucherRentIncome {
* 查询数据, 判断是否需要执行插入中间表
*/
// 查询是否有当月的, 未生成凭证的数据(卡扣)
String sqls1="SELECT lri.RENT FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m') = DATE_FORMAT(lrp.plan_date, '%Y-%m')";
String sqls1="SELECT lri.RENT FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m') = DATE_FORMAT(lrp.plan_date, '%Y-%m')";
// 查询跨月的, 未生成凭证的数据(卡扣)
String sqls2="SELECT lri.RENT FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m')<> DATE_FORMAT(lrp.plan_date, '%Y-%m')";
String sqls2="SELECT lri.RENT FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m')<> DATE_FORMAT(lrp.plan_date, '%Y-%m')";
// 查询当前数据是否有逾期利息(卡扣)
String sqls3="SELECT lri.PENALTY FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_penalty_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_PENALTY_PLAN GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.penalty > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
String sqls3="SELECT lri.PENALTY FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_penalty_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_PENALTY_PLAN GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.penalty > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
// 代偿反冲租金
String sqls4="SELECT lri.RENT,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-收到代偿的租金%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXUnionPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
String sqls4="SELECT lri.RENT,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-收到代偿的租金%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXUnionPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
// 代偿反冲逾期利息
String slqs5="SELECT lri.PENALTY,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-代偿逾期利息%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXUnionPay') AND lri.PENALTY > 0 AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') ";
String slqs5="SELECT lri.PENALTY,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-代偿逾期利息%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXUnionPay') AND lri.PENALTY > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') ";
// 代偿反冲租金微信
String sqls6="SELECT lri.RENT,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-收到代偿的租金%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID WHERE LRI.CHARGE_WAY IN ('WXPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
String sqls6="SELECT lri.RENT,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-收到代偿的租金%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('WXPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d')";
// 代偿反冲逾期利息微信
String slqs7="SELECT lri.PENALTY,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-代偿逾期利息%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID WHERE LRI.CHARGE_WAY IN ('WXPay') AND lri.PENALTY > 0 AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') ";
String slqs7="SELECT lri.PENALTY,LRI.ID AS F56 FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV1 ON LV1.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT F58,F56 FROM VOUCHER_V8 WHERE MODULE_NAME LIKE '%代偿反冲-代偿逾期利息%' AND (F56 IS NOT NULL AND F56 <> '' AND F58 IS NOT NULL AND F58 <> '') GROUP BY F58,F56) V8 ON V8.F58 = LRI.PLAN_ID AND V8.F56 = LRI.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('WXPay') AND lri.PENALTY > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NOT NULL OR LV2.INCOME_ID IS NOT NULL) AND V8.F58 IS NULL AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') ";
List<Map<String,String>> dataList1=DataOperatorUtil.getDataBySql(Sqlca, sqls1, null);
List<Map<String,String>> dataList2=DataOperatorUtil.getDataBySql(Sqlca, sqls2, null);
@ -66,11 +94,27 @@ public class InsertVoucherRentIncome {
* 将数据插入中间表的SQL
*/
// 未逾期及逾期未过月(卡扣)
String sql1="INSERT INTO lv_rent_income (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,lri.RENT,lri.CORPUS,lri.INTEREST,0.00,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(), '%Y-%m') = DATE_FORMAT(lrp.plan_date, '%Y-%m'))";
String sql1="INSERT INTO lv_rent_income (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,lri.RENT,lri.CORPUS,lri.INTEREST,0.00,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID " +
" FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(), '%Y-%m') = DATE_FORMAT(lrp.plan_date, '%Y-%m'))";
// 逾期过月(卡扣)
String sql2="INSERT INTO lv_rent_income2 (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,lri.RENT,lri.CORPUS,lri.INTEREST,0.00,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m')<> DATE_FORMAT(lrp.plan_date, '%Y-%m'))";
String sql2="INSERT INTO lv_rent_income2 (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,lri.RENT,lri.CORPUS,lri.INTEREST,0.00,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID " +
" FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT income_id,LRI_ID FROM lv_rent_income2 GROUP BY INCOME_ID,LRI_ID) LV2 ON LV2.INCOME_ID = LRI.PLAN_ID AND LV2.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.rent > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d') AND DATE_FORMAT(NOW(),'%Y-%m')<> DATE_FORMAT(lrp.plan_date, '%Y-%m'))";
// 逾期利息(卡扣)
String sql3="INSERT INTO lv_penalty_income (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,0.00,0.00,0.00,lri.PENALTY,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_penalty_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_PENALTY_PLAN GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.penalty > 0 AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d'))";
String sql3="INSERT INTO lv_penalty_income (SELECT REPLACE(UUID(), '-', ''),CONCAT('k', getSerialNumber ('凭证号')),cif.customer_num,cif.customername,lci.id,lci.contract_number,lrp.id,lri.HIRE_DATE,lrp.plan_list,0.00,0.00,0.00,lri.PENALTY,lri.OWN_BANK,lri.OWN_ACCOUNT,lri.OWN_NUMBER,lri.EBANK_NUMBER,lri.CARDDEDUCT_ID,lri.ACCOUNTING_DATE,LRI.CHARGE_WAY AS COLLECT_STATUS,LCI.BUSINESSTYPE,LCI.LEAS_FORM,LRI.ID " +
" FROM lc_rent_income lri LEFT JOIN lc_rent_plan lrp ON lrp.contract_id = lri.contract_id AND lrp.plan_list = lri.plan_list LEFT JOIN lb_contract_info lci ON lci.id = lrp.contract_id LEFT JOIN lb_union_lessee lul ON lul.contract_id = lci.id LEFT JOIN customer_info cif ON cif.customerid = lul.customer_id LEFT JOIN (SELECT income_id,LRI_ID FROM lv_penalty_income GROUP BY INCOME_ID,LRI_ID) LV1 ON LV1.INCOME_ID = LRI.PLAN_ID AND LV1.LRI_ID = LRI.ID LEFT JOIN (SELECT INCOME_ID FROM LV_PENALTY_PLAN GROUP BY INCOME_ID) LV2 ON LV2.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN GROUP BY INCOME_ID) LV3 ON LV3.INCOME_ID = LRP.ID LEFT JOIN (SELECT INCOME_ID FROM LV_RENT_PLAN2 GROUP BY INCOME_ID) LV4 ON LV4.INCOME_ID = LRP.ID " +
" LEFT JOIN fc_yc_overdue_repay_plan fyorp ON fyorp.rent_plan_id = lri.PLAN_ID " +
" WHERE LRI.CHARGE_WAY IN ('AutoBuckle','WXPay','WXUnionPay') AND lri.penalty > 0 " +
" AND fyorp.id IS NULL " +
" AND (LV1.INCOME_ID IS NULL AND LV2.INCOME_ID IS NULL AND LV3.INCOME_ID IS NULL AND LV4.INCOME_ID IS NULL) AND lul.is_main = 'Y' AND DATE_FORMAT(LRI.HIRE_DATE, '%Y/%m/%d') >= DATE_FORMAT('2020/05/01', '%Y/%m/%d'))";
/**
* 根据查询语句判断, 有值才执行插入SQL
*/

View File

@ -0,0 +1,585 @@
package com.tenwa.voucher.serviceImp;
import com.alibaba.fastjson.JSONObject;
import com.amarsoft.are.jbo.*;
import com.amarsoft.awe.util.SqlObject;
import com.amarsoft.awe.util.Transaction;
import com.amarsoft.dict.als.cache.CacheLoaderFactory;
import com.amarsoft.dict.als.manage.NameManager;
import com.google.common.collect.Lists;
import com.tenwa.comm.util.jboutil.DataOperatorUtil;
import com.tenwa.flow.util.FlowUtil;
import com.tenwa.reckon.util.DateUtil;
import com.tenwa.reckon.util.UUIDUtil;
import com.tenwa.voucher.service.VoucherInfoService;
import jbo.app.VOUCHER_V8;
import jbo.com.tenwa.entity.comm.own.OWN_INFO;
import jbo.com.tenwa.lease.comm.LB_CONTRACT_INFO;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.util.CollectionUtils;
import java.math.BigDecimal;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 经财务确认在邮储期间逾期并后期导致回购的订单对于在邮储时逾期的还款计划进行执行该方法单独处理
* 20210831对于在邮储时逾期的还款计划生成凭证时对于扣除的罚息与回购时邮储的罚息进行计算核销
* 当罚息与邮储罚息未抵消完毕时对所收罚息的凭证为利息进行记录
*
* 回款-收到的租金-邮储逾期-安鹏回购 资方邮储逾期回购-之后在邮储逾期未还在安鹏进行还款
*/
public class OverdueRepayPlanVoucherPSBC implements VoucherInfoService {
private static final Logger logger = LoggerFactory.getLogger(OverdueRepayPlanVoucherPSBC.class);
private static final String VOUCHER_CONFIG_NO = "PZ2021082300000030";//回款-收到的租金-邮储逾期-安鹏回购 凭证编号
@Override
public void run() {
Transaction Sqlca =null;
try {
Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource());
logger.info("在邮储期间逾期,并后期导致回购的订单,对于在邮储时逾期的还款计划,进行执行该方法单独处理【开始】");
generateListVoucher(Sqlca);
logger.info("在邮储期间逾期,并后期导致回购的订单,对于在邮储时逾期的还款计划,进行执行该方法单独处理【结束】");
} catch (JBOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}finally {
try {
if(Sqlca!=null){
Sqlca.disConnect();
Sqlca = null;
}
} catch (JBOException e) {
e.printStackTrace();
try {
Sqlca.rollback();
} catch (JBOException jboException) {
jboException.printStackTrace();
}
}
}
}
/**
* 判断当前流程编号是否为邮储逾期回购的计划id
* @return
* @throws Exception
*/
public boolean findFcPSBCOverduce(String flowUnid) throws Exception {
try {
logger.info("findFcPSBCOverduce 判断当前流程编号是否为邮储逾期回购的计划id【开始】flowUnid=" + flowUnid);
String sql = "select fyrp.* " +
" from fc_yc_overdue_repay_plan fyrp " +
" left join LC_FUND_INCOME_TEMP lfit on lfit.PLAN_ID=fyrp.rent_plan_id " +
" where lfit.FLOWUNID ='" +flowUnid+ "'";
List<Map<String,String>> paramList = DataOperatorUtil.getDataBySql(sql);
if(paramList.size()==0){
logger.warn("false正常查询数据不符合。【结束】");
return false;
}
logger.info("true在邮储期间逾期并后期导致回购的订单对于在邮储时逾期的还款计划进行执行该方法单独处理【结束】");
return true;
} catch (Exception e) {
e.printStackTrace();
logger.error("false查询数据报错不符合。【结束】。errorMsg=" + e.getMessage(), e);
}
return false;
}
/**
* 生成所有凭证
* @param Sqlca voucher
* @throws Exception
*/
public void generateListVoucher(Transaction Sqlca) throws Exception {
List<Map<String,String>> incomeList = findRentIncomeList();
for(Map rentIncomeInfo : incomeList){
generateVoucher(rentIncomeInfo, Sqlca);
}
}
/**
* 生成所有凭证
* @param Sqlca
* @throws Exception
*/
public void generateVoucher(Map<String,String> rentIncomeInfo, Transaction Sqlca) throws Exception {
Sqlca.getConnection();
JBOTransaction tx = Sqlca.getTransaction();
/**
* `RENT` decimal(22,2) DEFAULT NULL COMMENT '回笼租金',
* `CORPUS` decimal(22,2) DEFAULT NULL COMMENT '回笼本金',
* `INTEREST` decimal(22,2) DEFAULT NULL COMMENT '回笼租息',
* `PENALTY` decimal(22,2) DEFAULT NULL COMMENT '回笼罚息',
*/
//合同信息
Map<String,String> planInfo = findPlanInfo(rentIncomeInfo);
//凭证参数组装
Map<String,String> voucherInfo = new HashMap<>();
String voucherNo ="k" + FlowUtil.getVoucher_Number(tx);
logger.info("OverdueRepurchaseVoucherPSBC20210818 voucherNo=" + voucherNo);
voucherInfo.put("voucherNo", voucherNo);
voucherInfo.put("contractId", planInfo.get("contract_id"));
voucherInfo.put("contractNo", planInfo.get("contract_no"));
voucherInfo.put("createTime", rentIncomeInfo.get("HIRE_DATE"));
String customerNo = findCustomerNoByContractId(planInfo.get("contract_id"), Sqlca);
logger.info("OverdueRepurchaseVoucherPSBC20210818 查找客户编号信息customerNo=" + customerNo);
voucherInfo.put("customerNo", customerNo);
String customerName = findCustomerName(customerNo, Sqlca);
logger.info("OverdueRepurchaseVoucherPSBC20210818 查找客户编号信息customerName=" + customerName);
voucherInfo.put("customerName", customerName);
logger.info("OverdueRepurchaseVoucherPSBC20210818 开始收集参数initFinalParam");
//获取最终参数
JSONObject resJson = new JSONObject();
resJson.put("fc_request_id", planInfo.get("fc_request_id"));//是否需要修改
resJson.put("updateRepaymentPenaltySts", false);//是否需要修改
resJson.put("ycNowOverdueRepayAmount", 0);//已还罚息
List<Map<String,String>> paramList = initFinalParam(resJson, voucherInfo, VOUCHER_CONFIG_NO, rentIncomeInfo, planInfo, Sqlca);
logger.info("OverdueRepurchaseVoucherPSBC20210818 收集参数完毕initFinalParam paramList=" + JSONObject.toJSONString(paramList));
//生成凭证
logger.info("OverdueRepurchaseVoucherPSBC20210818 开始生成凭证createVoucher voucherNo=" + voucherNo);
createVoucher(paramList, tx);
logger.info("OverdueRepurchaseVoucherPSBC20210818 生成凭证结束createVoucher voucherNo=" + voucherNo);
//更新凭证信息状态
logger.info("OverdueRepurchaseVoucherPSBC20210818 开始更新凭证信息状态updateVoucherStatus contractId=" + planInfo.get("contractId"));
updateVoucherStatus(resJson, rentIncomeInfo, Sqlca);
logger.info("OverdueRepurchaseVoucherPSBC20210818 更新凭证信" +
"息状态结束updateVoucherStatus overdue_back_id=" + planInfo.get("contractId"));
logger.info(" =============:合同编号为"+planInfo.get("contract_no")+"的逾期还款凭证生成完毕============");
}
/**
* 根据客户编号查询客户名称
* @param customerNo
* @param Sqlca
* @return
* @throws Exception
*/
private String findCustomerName(String customerNo,Transaction Sqlca) throws Exception {
String sql = "select ci.customername from customer_info ci WHERE ci.customer_num='"+customerNo+"'";
String customerName = Sqlca.getString(sql);
return customerName;
}
/**
* 生产凭证完成修改状态
* @param resJson
* @param rentIncomeInfo
* @param Sqlca
* @throws Exception
*/
private void updateVoucherStatus(JSONObject resJson, Map<String,String> rentIncomeInfo, Transaction Sqlca) throws Exception {
String sql = "insert into fc_yc_overdue_income_voucher (" +
"id," +
"contract_id," +
"rent_plan_id," +
"voucher_status," +
"create_time," +
"update_time" +
") values" +
" (" +
"'"+ rentIncomeInfo.get("ID") +"',"+//实还id
"'"+ rentIncomeInfo.get("CONTRACT_ID") +"',"+
"'"+ rentIncomeInfo.get("PLAN_ID") +"',"+
"1,"+//已生成凭证
"'"+ DateUtil.getSystemTimeByFormat("yyyyMMddHHmmss") +"',"+
"'"+ DateUtil.getSystemTimeByFormat("yyyyMMddHHmmss") +"'"+
")" ;
SqlObject sqlObject = new SqlObject(sql);
Sqlca.executeSQL(sqlObject);
if(resJson.getBooleanValue("updateRepaymentPenaltySts")){
String updateSql = "update fc_buyback_info set repayment_penalty = '"
+ resJson.getString("ycNowOverdueRepayAmount") +"' where fc_request_id = '"+resJson.getString("fc_request_id")+"'";
SqlObject updateSqlObject = new SqlObject(updateSql);
Sqlca.executeSQL(updateSqlObject);
}
}
/**
* 获取需要生成凭证的实还数据
* @return
* @throws Exception
*/
public List<Map<String,String>> findRentIncomeList() throws Exception {
String sql = "select lri.* " +
" from fc_yc_overdue_repay_plan fyrp " +
" left join lc_rent_income lri on lri.PLAN_ID=fyrp.rent_plan_id " +
" left join fc_yc_overdue_income_voucher fv on fv.id=lri.ID " +
" where lri.ID is not null and (lri.charge_way <> 'PSBC' or lri.charge_way is null) and (fv.id is null or fv.voucher_status=0)";
List<Map<String,String>> paramList = DataOperatorUtil.getDataBySql(sql);
if(paramList.size()==0){
logger.warn("获取需要生成凭证的实还数据 未找到符合规则的数据");
throw new Exception("获取需要生成凭证的实还数据 未找到符合规则的数据");
}
return paramList;
}
private Map<String,String> findPlanInfo(Map<String,String> rentIncomeInfo) throws Exception {
String sql = "select * " +
" from fc_yc_overdue_repay_plan frp " +
" where frp.rent_plan_id='"+rentIncomeInfo.get("PLAN_ID")+"' ";
List<Map<String,String>> list = DataOperatorUtil.getDataBySql(sql);
if(CollectionUtils.isEmpty(list) || list.size() > 1){
logger.warn("rent_plan_id="+ rentIncomeInfo.get("PLAN_ID") + "生成凭证,查询还款信息失败。");
throw new Exception("rent_plan_id="+ rentIncomeInfo.get("PLAN_ID") + "生成凭证,查询还款信息失败。");
}
return list.get(0);
}
/**
* 根据合同id查询客户编号
* @param contractId
* @param Sqlca
* @return
* @throws Exception
*/
private String findCustomerNoByContractId(String contractId,Transaction Sqlca) throws Exception {
String sql = "select ci.customer_num from customer_info ci left join lb_union_lessee lul on lul.CUSTOMER_ID=ci.customerid and lul.IS_MAIN='Y' where lul.CONTRACT_ID='"+contractId+"'";
String customerNo = Sqlca.getString(sql);
return customerNo;
}
/**
* 获取最终的参数
* @param voucherInfo
* @param voucherConfigNo
* @param rentIncomeInfo
* @return
* @throws Exception
*/
private List<Map<String,String>> initFinalParam(JSONObject resJson, Map<String,String> voucherInfo, String voucherConfigNo, Map<String,String> rentIncomeInfo, Map<String,String> planInfo, Transaction Sqlca) throws Exception {
List<Map<String,String>> paramList = findParamOfVoucher(voucherConfigNo);
for(Map<String,String> param : paramList){
//将公共参数放到凭证配置参数里
param.putAll(initCommonParam(voucherInfo));
//将差别参数放进去
addRespectiveParam(param, rentIncomeInfo, planInfo, resJson, Sqlca);
//转译的凭证信息
param.putAll(initConvertParam(param));
}
return paramList;
}
//助贷-合同起租
private static final String ADVANCES_RECEIVED = "2203";//--预收账款-逾期租金+邮储罚息+安鹏罚息-客商
private static final String LONG_TERM_RECEIVABLES_LEASEBACK_PRINCIPAL = "1531020101";//--长期应收-回租-汽车-本金-逾期本金-客商+合同号码
private static final String LONG_TERM_LEASEBACK_INTEREST = "1531020102";//--长期应收-回租-汽车-利息-逾期利息+邮储罚息-客商+合同号码
private static final String LONG_TERM_LEASEBACK_INTEREST_PENALTY = "60410201";//--租赁收入/回租/汽车-安鹏罚息不含税-客商+合同号码+0603(主营类型
private static final String LONG_TERM_LEASEBACK_INTEREST_PENALTY_TAX_RATE = "22210105";//--应交税费\应交增值税\销项税额-安鹏罚息税金-税率
/**
* 每条凭证各自差异数据放到参数List
* @param param
* @param rentIncomeInfo
* @throws Exception
*/
public void addRespectiveParam(Map<String,String> param, Map<String,String> rentIncomeInfo, Map<String,String> planInfo, JSONObject resJson, Transaction Sqlca) throws Exception {
String money = "";
String subjectsCode = param.get("subjectsCode");
BigDecimal actualOverdueAmount = new BigDecimal("0");//安鹏实际罚息
BigDecimal psbcOverdueAmount = new BigDecimal("0");//邮储实际罚息
String sqlQuery2 = "SELECT * from fc_buyback_info WHERE fc_request_id='"+planInfo.get("fc_request_id") +"'";
List<Map<String,String>> paramList2 = DataOperatorUtil.getDataBySql(sqlQuery2);
if(paramList2.size()==0 || paramList2.size()>1){
logger.warn(rentIncomeInfo.get("contractNo") + "逾期回购生成凭证之后查询是否有逾期数据2或逾期数据大于1。");
return;
}
/**
* `RENT` decimal(22,2) DEFAULT NULL COMMENT '回笼租金',
* `CORPUS` decimal(22,2) DEFAULT NULL COMMENT '回笼本金',
* `INTEREST` decimal(22,2) DEFAULT NULL COMMENT '回笼租息',
* `PENALTY` decimal(22,2) DEFAULT NULL COMMENT '回笼罚息',
*/
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "本期 回笼租金:" + rentIncomeInfo.get("RENT"));
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "本期 回笼本金:" + rentIncomeInfo.get("CORPUS"));
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "本期 回笼租息:" + rentIncomeInfo.get("INTEREST"));
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "本期 回笼罚息:" + rentIncomeInfo.get("PENALTY"));
Map<String, String> overduePlan = paramList2.get(0);
String ycOverdueAmount = overduePlan.get("ALL_REMAIN_PENALTY");//邮储总需还罚息
String ycOverdueRepayAmount = overduePlan.get("repayment_penalty");//邮储已还罚息
BigDecimal ycNowOverdueRepayAmount = new BigDecimal(overduePlan.get("repayment_penalty"));//邮储已还罚息+ 本期罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "查询 邮储总需还罚息:" + overduePlan.get("ALL_REMAIN_PENALTY"));
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "查询 邮储已还罚息:" + overduePlan.get("repayment_penalty"));
boolean updateRepaymentPenaltySts = false;//如果需要更新罚息则为true
BigDecimal surplusOverdueAmount = new BigDecimal(ycOverdueAmount).subtract(new BigDecimal(ycOverdueRepayAmount));//邮储应还罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id") + "计算 邮储应还罚息:" + surplusOverdueAmount.toString());
if(surplusOverdueAmount.compareTo(new BigDecimal("0")) <= 0) { // 如果邮储应还罚息小于0 或等于0如果实还中出现罚息则均为安鹏罚息
surplusOverdueAmount = new BigDecimal("0");//邮储应还罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "如果邮储应还罚息小于0 或等于0如果实还中出现罚息则均为安鹏罚息。 邮储应还罚息2" + surplusOverdueAmount.toString());
}else {// 如果邮储应还罚息大于0如果实还中出现罚息则用实际罚息与邮储应还罚息进行比较安鹏罚息=实还罚息-邮储应还罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "如果邮储应还罚息大于0如果实还中出现罚息则用实际罚息与邮储应还罚息进行比较安鹏罚息=实还罚息-邮储应还罚息。");
updateRepaymentPenaltySts = true;
actualOverdueAmount = new BigDecimal(rentIncomeInfo.get("PENALTY")).subtract(surplusOverdueAmount);//安鹏罚息=罚息-邮储罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏罚息=罚息-邮储罚息。计算 本期 安鹏实际还的罚息:" + actualOverdueAmount.toString());
if(actualOverdueAmount.compareTo(BigDecimal.ZERO) < 0){//安鹏罚息小于0
psbcOverdueAmount = new BigDecimal(rentIncomeInfo.get("PENALTY"));//邮储实际罚息
ycNowOverdueRepayAmount = ycNowOverdueRepayAmount.add(psbcOverdueAmount);
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏罚息小于0。 本期 邮储实际还款的罚息:" + psbcOverdueAmount.toString());
actualOverdueAmount = BigDecimal.ZERO;//安鹏实际罚息
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏罚息小于0。 本期 安鹏实际还款的罚息:" + actualOverdueAmount.toString());
}else {
psbcOverdueAmount = surplusOverdueAmount;//邮储实际罚息
ycNowOverdueRepayAmount = ycNowOverdueRepayAmount.add(psbcOverdueAmount);
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏罚息大于等于0。 本期 邮储实际还款的罚息:" + psbcOverdueAmount.toString());
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏罚息大于等于0。 本期 安鹏实际还款的罚息:" + actualOverdueAmount.toString());
}
}
resJson.put("updateRepaymentPenaltySts", updateRepaymentPenaltySts);
resJson.put("ycNowOverdueRepayAmount", ycNowOverdueRepayAmount);
BigDecimal actualOverdueAmountExcludedTax = new BigDecimal("0");//安鹏罚息(不含税)Tax excluded
BigDecimal actualOverdueAmountTax = new BigDecimal("0");//安鹏实际罚息-税金
String taxNumber = findTaxNumber(planInfo, Sqlca);
//查询税率编码
String sqlQueryTaxCode = "SELECT TAX_CODES from TAX_CODE WHERE TAX_NUMBER='"+taxNumber+"'";
String taxCode = Sqlca.getString(sqlQueryTaxCode);
if(actualOverdueAmount.compareTo(BigDecimal.ZERO) > 0){//如果安鹏实际罚息 大于0
BigDecimal ratio = new BigDecimal(taxNumber).divide(new BigDecimal("100")).setScale(2, BigDecimal.ROUND_HALF_UP);
ratio = ratio.add(new BigDecimal("1"));
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏实际罚息 大于0。 计算 税率:" + ratio.toString());
actualOverdueAmountExcludedTax = actualOverdueAmount.divide(ratio,2, BigDecimal.ROUND_HALF_UP);
actualOverdueAmountTax = actualOverdueAmount.subtract(actualOverdueAmountExcludedTax);
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏实际罚息 大于0。 计算本期 罚息相关税款 安鹏罚息(不含税)" + actualOverdueAmountExcludedTax.toString());
logger.info("addRespectiveParam fc_request_id=" + planInfo.get("fc_request_id")
+ "安鹏实际罚息 大于0。 计算本期 罚息相关税款 安鹏实际罚息-税金:" + actualOverdueAmountTax.toString());
}
//预收账款-逾期租金+邮储罚息+安鹏罚息-客商
if(ADVANCES_RECEIVED.equals(subjectsCode)){
BigDecimal amount = new BigDecimal(rentIncomeInfo.get("RENT")).add(new BigDecimal(rentIncomeInfo.get("PENALTY")));
money = amount.toString();
param.put("contractNo","");
}
//长期应收-回租-汽车-本金-逾期本金-客商+合同号码
else if(LONG_TERM_RECEIVABLES_LEASEBACK_PRINCIPAL.equals(subjectsCode)){
money=rentIncomeInfo.get("CORPUS");//逾期本金
}
//长期应收-回租-汽车-利息-逾期利息+邮储罚息-客商+合同号码
else if(LONG_TERM_LEASEBACK_INTEREST.equals(subjectsCode)){
BigDecimal amount = new BigDecimal(rentIncomeInfo.get("INTEREST")).add(psbcOverdueAmount);
money = amount.toString();
}
//租赁收入/回租/汽车-安鹏罚息不含税-客商+合同号码+0603(主营类型
else if(LONG_TERM_LEASEBACK_INTEREST_PENALTY.equals(subjectsCode)){
money = actualOverdueAmountExcludedTax.toString();//安鹏罚息不含税金额
param.put("BUSINESSTYPE", "0603");// 主营类型
}
//应交税费\应交增值税\销项税额-安鹏罚息税金-税率
else if(LONG_TERM_LEASEBACK_INTEREST_PENALTY_TAX_RATE.equals(subjectsCode)){
money = actualOverdueAmountTax.toString();//安鹏罚息税金
param.put("taxCode", taxCode);// 税率编码
param.put("contractNo","");
param.put("customerNo","");
param.put("customerName","");
}else {
logger.warn("生成凭证当前凭证类型匹配失败。subjectsCode=" + subjectsCode);
throw new Exception("生成凭证当前凭证类型匹配失败。subjectsCode=" + subjectsCode);
}
if(StringUtils.isEmpty(money)){
logger.warn("生成凭证,查询凭证相关金额信息失败。");
throw new Exception("生成凭证,查询凭证相关金额信息失败。");
}
//debit:credit:
if("1".equals(param.get("entrydc"))) {
param.put("debitMoney",money);
param.put("creditMoney","0.00");
}else{
param.put("debitMoney","0.00");
param.put("creditMoney",money);
}
}
/**
* 根据凭证配置编号获取对应的每条凭证参数
* @return
* @throws Exception
*/
public String findTaxNumber(Map<String,String> planInfo,Transaction Sqlca) throws Exception {
//查询产品编号
String sqlQueryProductId = "SELECT PRODUCT_ID from fc_request WHERE ID='"+planInfo.get("fc_request_id")+"'";
String productId = Sqlca.getString(sqlQueryProductId);
//查询租赁类型回租直租
String sqlQueryLeasForm = "SELECT LeasForm from PRD_SPECIFIC_LIBRARY where PRODUCTID='"+productId+"'";
String leasForm = Sqlca.getString(sqlQueryLeasForm);
String sql = "SELECT CONTRACT_DATE,break_money from TAX_INFO " +
" where LEASE_FORM='"+leasForm+"' ORDER BY CONTRACT_DATE desc ";
List<Map<String,String>> paramList = DataOperatorUtil.getDataBySql(sql);
if(paramList.size()==0){
logger.warn(planInfo.get("fc_request_id") + "通过凭证配置编号未找到对应配置信息");
throw new Exception(planInfo.get("fc_request_id") + "通过凭证配置编号未找到对应配置信息");
}
return paramList.get(0).get("break_money");
}
/**
* 根据凭证配置编号获取对应的每条凭证参数
* @return
* @throws Exception
*/
public List<Map<String,String>> findParamOfVoucher(String voucherConfigNo) throws Exception {
String sql = "select lvl.SORT_NUMBER as sortNumber,lvl.LOAN_SUBJECT as loanSubject, " +
" CASE WHEN lvl.loan_direction = '1' THEN '1' ELSE '-1' END as entrydc, " +
" lvl.VALUE_ABSTRACT as valueAbstract,lsc.SUBJECTS_CODE as subjectsCode, " +
" lsc.SUBJECTS_NAME as subjectsName,lvc.MODULAR_NUMBER as modularName " +
" from lv_voucher_loan lvl " +
" left join LV_STACTS_CONFIG lsc on lvl.LOAN_SUBJECT=lsc.id " +
" left join lv_voucher_config lvc on lvl.VOUCHER_ID=lvc.id " +
" where lvc.VOUCHER_NO='"+voucherConfigNo+"'";
List<Map<String,String>> paramList = DataOperatorUtil.getDataBySql(sql);
if(paramList.size()==0){
logger.warn(voucherConfigNo + "通过凭证配置编号未找到对应配置信息");
throw new Exception(voucherConfigNo + "通过凭证配置编号未找到对应配置信息");
}
return paramList;
}
/**
* 获取生成凭证所需的公共参数(每个合同为单位)
* 在传来值的基础上增添
* @param voucherInfo
* @return
* @throws Exception
*/
private Map<String,String> initCommonParam(Map<String,String> voucherInfo) throws Exception {
//固定值部分
String evidenceMessage = "凭证输出";//查看凭证表发现只有这一个值目前先设置为固定值
String easFlag = "0";//导入财务系统状态 默认0 (同上只有这一个值)
String userId = "administrator";//操作人
String userName = NameManager.getUserName(userId);
voucherInfo.put("evidenceMessage",evidenceMessage);
voucherInfo.put("easFlag",easFlag);
voucherInfo.put("userId",userId);
voucherInfo.put("userName",userName);
//日期 2021/08/11 17:48:17
String createTime = voucherInfo.get("createTime").substring(0,10);
String periodYear = createTime.substring(0,4);
String periodMonth = createTime.substring(5,7);
voucherInfo.put("periodYear",periodYear);
voucherInfo.put("periodMonth",periodMonth);
voucherInfo.put("accountingDate",createTime);
voucherInfo.put("generateDate", DateUtil.getSystemDateDetailTime());
//主体信息
String contractId = voucherInfo.get("contractId");
voucherInfo.putAll(this.getSubjectInfoByContractId(contractId));
return voucherInfo;
}
/**
* 创建凭证
* @param paramList
* @param tx
* @throws Exception
*/
private void createVoucher(List<Map<String, String>> paramList, JBOTransaction tx) throws Exception {
BizObjectManager bomV8 = JBOFactory.getBizObjectManager(VOUCHER_V8.CLASS_NAME,tx);
for(Map<String, String> param :paramList){
BizObject boV8 = bomV8.newObject();
boV8.setAttributesValue(param);
bomV8.saveObject(boV8);
}
}
/**
* 根据contractId获取主体信息
* @param contractId
* @return
* @throws JBOException
*/
public Map<String,String> getSubjectInfoByContractId(String contractId) throws JBOException {
Map<String,String> subject = new HashMap<>();
BizObjectManager bomLCI = JBOFactory.getBizObjectManager(LB_CONTRACT_INFO.CLASS_NAME);
BizObject boLCI = bomLCI.createQuery("id=:id").setParameter("id",contractId).getSingleResult(false);
String subjectId = boLCI.getAttribute("SUBJECTID").toString();
String subjectName = boLCI.getAttribute("SUBJECTNAME").toString();
BizObjectManager bomOI = JBOFactory.getBizObjectManager(OWN_INFO.CLASS_NAME);
BizObject boOI = bomOI.createQuery("OWN_NAME=:subjectName").setParameter("subjectName",subjectName).getSingleResult(false);
String ownNumber = boOI.getAttribute("OWN_NUMBER").toString();
subject.put("subjectId",subjectId);
subject.put("subjectName",subjectName);
subject.put("ownNumber",ownNumber);
return subject;
}
/**
* 将最终获取的参数转换为凭证表voucher_v8对应的字段
* 注意新增时注意param中字段不可修改
* @param param
* @return
*/
private Map<String,String> initConvertParam(Map<String,String> param){
Map<String,String> finalParam = new HashMap<>();
finalParam.put("evidence_message",param.get("evidenceMessage"));//固定值凭证输出
finalParam.put("periodyear",param.get("periodYear")); //
finalParam.put("f1",param.get("accountingDate"));//会计日期
finalParam.put("f2",param.get("subjectsCode"));//科目编码
finalParam.put("f3",param.get("voucherNo"));//凭证编号
finalParam.put("f5",param.get("valueAbstract"));//摘要
finalParam.put("f6",param.get("loanSubject"));//科目表id
finalParam.put("f7",param.get("debitMoney"));//借方金额
finalParam.put("f8",param.get("creditMoney"));//贷方金额
finalParam.put("f12",param.get("userName"));//操作人
finalParam.put("f15",param.get("accountingDate"));//日期(与会计日期相同)
finalParam.put("f47",param.get("contractNo"));//业务合同编号
finalParam.put("f48",param.get("ownNumber"));//本方信息No
finalParam.put("f49",param.get("subjectId"));//所属公司ID注意实际此字段存的是code_library表中codeno='ManySubject' itemno 字段
finalParam.put("f50",param.get("subjectName"));//所属公司名称
finalParam.put("f51",param.get("periodYear"));//会计期间-与上面 相同
finalParam.put("f52",param.get("periodMonth"));//会计期间-
finalParam.put("f59",param.get("sortNumber"));//凭证配置中排序号
finalParam.put("f60",param.get("contractNo"));//业务合同号与f47相同尚不明为何重复
finalParam.put("f61",param.get("customerName"));//客户名称
finalParam.put("f62",param.get("loanSubject"));//科目表id与f6相同尚不明为何重复
finalParam.put("f65",param.get("customerNo"));//客商编号取值customer_info表中customer_num字段
finalParam.put("f73",param.get("BUSINESSTYPE"));//主营类型
finalParam.put("f76",param.get("taxCode"));//利率编码
finalParam.put("f74",param.get("cashFlow"));// 现金流项目
finalParam.put("v8_status","已完整");//凭证状态 已完整未完整
finalParam.put("generate_date",param.get("generateDate"));//创建时间
finalParam.put("v8_flag",param.get("easFlag"));//导入财务系统状态 默认0尚不知有何逻辑目前整个表中全部为0
finalParam.put("module_name",param.get("modularName"));//凭证模型名称
finalParam.put("entrydc",param.get("entrydc"));//借贷1-1
finalParam.put("inputuserid",param.get("userId"));//操作人id
return finalParam;
}
/**
* 当前期还款计划是否为邮储回购并在回购之前该期为逾期的
* @return
*/
public boolean findYCOverdue(String rentIncomeId, Transaction Sqlca) throws Exception {
String sqlQueryPlanId = "SELECT PLAN_ID from lc_rent_income WHERE rent_plan_id='"+rentIncomeId+"'";//查询还款计划id
String rentPlanId = Sqlca.getString(sqlQueryPlanId);
String sqlCount = "SELECT count(1) from fc_yc_overdue_repay_plan WHERE rent_plan_id='"+rentPlanId+"'";//查询是否在回购之前是否已逾期
String countNum = Sqlca.getString(sqlCount);
if(StringUtils.isEmpty(countNum) || "0".equals(sqlCount)){
logger.warn("rentIncomeId="+ rentIncomeId + ",当前实收所对应的还款计划,不符合邮储回购,并在回购之前该期为逾期的。");
return false;
}
return true;
}
}

View File

@ -126,7 +126,7 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
*/
private String findOutstandingPrincipal(String contractId, Transaction Sqlca) throws Exception {
String sqlPrincipal = "SELECT SUM(CORPUS) from lc_rent_plan WHERE CONTRACT_ID='"+contractId+"'";//总本金
String sqlRepaymentPrincipal = "SELECT SUM(CORPUS) from lc_rent_income WHERE CONTRACT_ID='"+contractId+"'";//已还本金
String sqlRepaymentPrincipal = "SELECT SUM(CORPUS) from lc_rent_income WHERE CONTRACT_ID='"+contractId+"' and charge_way = 'PSBC'";//在邮储方的已还本金
String amountPrincipal = Sqlca.getString(sqlPrincipal);
String amountRepaymentPrincipal = Sqlca.getString(sqlRepaymentPrincipal);
if(StringUtils.isEmpty(amountPrincipal) || StringUtils.isEmpty(amountRepaymentPrincipal)){
@ -159,7 +159,7 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
*/
private String findOutstandingInterest(String contractId, Transaction Sqlca) throws Exception {
String sqlInterest = "SELECT SUM(INTEREST) from lc_rent_plan WHERE CONTRACT_ID='"+contractId+"'";//总利息
String sqlRepaymentInterest = "SELECT SUM(INTEREST) from lc_rent_income WHERE CONTRACT_ID='"+contractId+"'";//已还利息
String sqlRepaymentInterest = "SELECT SUM(INTEREST) from lc_rent_income WHERE CONTRACT_ID='"+contractId+"' and charge_way = 'PSBC' ";//已还利息
String amountInterest = Sqlca.getString(sqlInterest);
String amountRepaymentInterest = Sqlca.getString(sqlRepaymentInterest);
if(StringUtils.isEmpty(amountInterest) || StringUtils.isEmpty(amountRepaymentInterest)){
@ -182,7 +182,7 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
"from fc_buyback_info frc " +
"left join fc_yc_file_repay_result ffr on frc.fc_request_id = ffr.FC_REQUEST_ID " +
"left join fc_request fr on frc.fc_request_id = fr.ID " +
"where frc.voucher_status='0' and fr.DEL_FLAG='0' and fr.CHANNEL_NO='"+channelNo+"' and ffr.REPAYMENT_FLAG='3' and ffr.REPAYMENT_SOURCE='1' and ffr.ID is not null ";
"where frc.is_confirm='1' and frc.voucher_status='0' and fr.DEL_FLAG='0' and fr.CHANNEL_NO='"+channelNo+"' and ffr.REPAYMENT_FLAG='3' and ffr.REPAYMENT_SOURCE='1' and ffr.ID is not null ";
return DataOperatorUtil.getDataBySql(sql);
}
@ -437,37 +437,14 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
* @throws Exception
*/
private void addOverdueRepayPlan(Map<String,String> loanInfo ,Transaction Sqlca) throws Exception {
String sqlQuery = "SELECT plan_list from report_rent_plan WHERE contract_number='"+loanInfo.get("contractNo") +"' and batch_status='未完成' and over_days > 0";
String sqlQuery = "SELECT plan_list from report_rent_plan WHERE contract_number='"+loanInfo.get("contractNo") +"' and batch_status='未完成' and over_days > 0 ";
List<Map<String,String>> paramList = DataOperatorUtil.getDataBySql(sqlQuery);
if(paramList.size()==0 || paramList.size()>2 ){
logger.warn(loanInfo.get("contractNo") + "逾期回购生成凭证之后查询是否有逾期数据或逾期数据大于2。");
return;
}
String sqlQuery2 = "SELECT * from fc_buyback_info WHERE fc_request_id='"+loanInfo.get("fc_request_id") +"'";
List<Map<String,String>> paramList2 = DataOperatorUtil.getDataBySql(sqlQuery2);
if(paramList2.size()==0 || paramList2.size()>1){
logger.warn(loanInfo.get("contractNo") + "逾期回购生成凭证之后查询是否有逾期数据2或逾期数据大于1。");
return;
}
Map<String, String> overduePlan = paramList2.get(0);
String firstOverduePenalty = overduePlan.get("first_overdue_penalty");
String secondOverduePenalty = overduePlan.get("second_overdue_penalty");
if(paramList.size()==1){
paramList.get(0).put("overduePenalty", firstOverduePenalty);
}else if(paramList.size() == 2){
int firstTerm = Integer.parseInt(paramList.get(0).get("plan_list"));
int secondTerm = Integer.parseInt(paramList.get(1).get("plan_list"));
if(firstTerm < secondTerm){
paramList.get(0).put("overduePenalty", firstOverduePenalty);
paramList.get(1).put("overduePenalty", secondOverduePenalty);
}else {
paramList.get(0).put("overduePenalty", secondOverduePenalty);
paramList.get(1).put("overduePenalty", firstOverduePenalty);
}
}
for(Map<String, String> planList : paramList){
String term = planList.get("plan_list");
String overduePenalty = planList.get("overduePenalty");
String sqlRentPlan = "SELECT ID from lc_rent_plan WHERE CONTRACT_ID='"+loanInfo.get("contractId")
+"' and PLAN_LIST='"+term+"'";//租金计划id
String rentPlanId = Sqlca.getString(sqlRentPlan);
@ -478,8 +455,6 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
"contract_no," +
"lend_term," +
"rent_plan_id," +
"yc_overdue_amount," +
"yc_overdue_repay_amount," +
"create_time," +
"update_time" +
") values" +
@ -490,8 +465,6 @@ public class OverdueRepurchaseVoucherPSBC implements VoucherInfoService {
"'"+ loanInfo.get("contractNo") +"',"+
""+ term +","+
"'"+ rentPlanId +"',"+
"'"+ overduePenalty +"',"+
"'0',"+
"'"+ DateUtil.getSystemTimeByFormat("yyyyMMddHHmmss") +"',"+
"'"+ DateUtil.getSystemTimeByFormat("yyyyMMddHHmmss") +"'"+
")" ;

View File

@ -3,10 +3,13 @@ import com.amarsoft.are.util.StringFunction;
import com.base.util.QuartzUtil;
import com.tenwa.voucher.service.VoucherInfoService;
import com.tenwa.voucher.serviceImp.FundIncomeVoucherPSBC;
import com.tenwa.voucher.serviceImp.OverdueRepayPlanVoucherPSBC;
import com.tenwa.voucher.serviceImp.OverdueRepurchaseVoucherPSBC;
import org.quartz.Job;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* 逾期回购生成凭证-定时任务
@ -14,6 +17,8 @@ import org.quartz.JobExecutionException;
*/
public class CorpusSourceOverdueRepurchaseCreateVoucherJob implements Job {
private static final Logger logger = LoggerFactory.getLogger(CorpusSourceOverdueRepurchaseCreateVoucherJob.class);
@Override
public void execute(JobExecutionContext arg0) throws JobExecutionException {
String startime = StringFunction.getTodayNow();
@ -22,6 +27,8 @@ public class CorpusSourceOverdueRepurchaseCreateVoucherJob implements Job {
try{
VoucherInfoService voucher = new OverdueRepurchaseVoucherPSBC();
voucher.run();
VoucherInfoService voucher2 = new OverdueRepayPlanVoucherPSBC();
voucher2.run();
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.CorpusSourceOverdueRepurchaseCreateVoucherJob", "success", "成功", curUserId);
} catch (Exception e) {
QuartzUtil.insertLog(startime,"com.tenwa.lease.app.quartzmession.CorpusSourceOverdueRepurchaseCreateVoucherJob", "error", "失败", curUserId);