From f9ab7e61152f44dcc125da5078de35210d0ecebe Mon Sep 17 00:00:00 2001 From: zhanglei Date: Mon, 6 Sep 2021 15:33:51 +0800 Subject: [PATCH] =?UTF-8?q?=E9=82=AE=E5=82=A8=E9=80=BE=E6=9C=9F=E5=9B=9E?= =?UTF-8?q?=E8=B4=AD=E5=87=AD=E8=AF=81=E7=94=9F=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../IncomeVoucher.java | 11 +- .../InsertVoucherRentIncome.java | 66 +- .../OverdueRepayPlanVoucherPSBC.java | 585 ++++++++++++++++++ .../OverdueRepurchaseVoucherPSBC.java | 35 +- ...urceOverdueRepurchaseCreateVoucherJob.java | 7 + 5 files changed, 661 insertions(+), 43 deletions(-) create mode 100644 src_core/com/tenwa/voucher/serviceImp/OverdueRepayPlanVoucherPSBC.java diff --git a/src_core/com/tenwa/voucher/CreateVoucherProcess/CreateVoucherMethodSettle/IncomeVoucher.java b/src_core/com/tenwa/voucher/CreateVoucherProcess/CreateVoucherMethodSettle/IncomeVoucher.java index bcd3b16b3..bc28438f3 100644 --- a/src_core/com/tenwa/voucher/CreateVoucherProcess/CreateVoucherMethodSettle/IncomeVoucher.java +++ b/src_core/com/tenwa/voucher/CreateVoucherProcess/CreateVoucherMethodSettle/IncomeVoucher.java @@ -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(); diff --git a/src_core/com/tenwa/voucher/CreateVoucherProcess/InsertVoucherRentIncome.java b/src_core/com/tenwa/voucher/CreateVoucherProcess/InsertVoucherRentIncome.java index 5932f132f..67f9739ad 100644 --- a/src_core/com/tenwa/voucher/CreateVoucherProcess/InsertVoucherRentIncome.java +++ b/src_core/com/tenwa/voucher/CreateVoucherProcess/InsertVoucherRentIncome.java @@ -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> dataList1=DataOperatorUtil.getDataBySql(Sqlca, sqls1, null); List> 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 */ diff --git a/src_core/com/tenwa/voucher/serviceImp/OverdueRepayPlanVoucherPSBC.java b/src_core/com/tenwa/voucher/serviceImp/OverdueRepayPlanVoucherPSBC.java new file mode 100644 index 000000000..9a4a76e5d --- /dev/null +++ b/src_core/com/tenwa/voucher/serviceImp/OverdueRepayPlanVoucherPSBC.java @@ -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> 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> incomeList = findRentIncomeList(); + for(Map rentIncomeInfo : incomeList){ + generateVoucher(rentIncomeInfo, Sqlca); + } + } + + + /** + * 生成所有凭证 + * @param Sqlca + * @throws Exception + */ + public void generateVoucher(Map 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 planInfo = findPlanInfo(rentIncomeInfo); + //凭证参数组装 + Map 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> 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 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> 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> paramList = DataOperatorUtil.getDataBySql(sql); + if(paramList.size()==0){ + logger.warn("获取需要生成凭证的实还数据 未找到符合规则的数据"); + throw new Exception("获取需要生成凭证的实还数据 未找到符合规则的数据"); + } + return paramList; + } + + private Map findPlanInfo(Map rentIncomeInfo) throws Exception { + String sql = "select * " + + " from fc_yc_overdue_repay_plan frp " + + " where frp.rent_plan_id='"+rentIncomeInfo.get("PLAN_ID")+"' "; + List> 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> initFinalParam(JSONObject resJson, Map voucherInfo, String voucherConfigNo, Map rentIncomeInfo, Map planInfo, Transaction Sqlca) throws Exception { + List> paramList = findParamOfVoucher(voucherConfigNo); + for(Map 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 param, Map rentIncomeInfo, Map 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> 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 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 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> 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> 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> paramList = DataOperatorUtil.getDataBySql(sql); + if(paramList.size()==0){ + logger.warn(voucherConfigNo + "通过凭证配置编号未找到对应配置信息"); + throw new Exception(voucherConfigNo + "通过凭证配置编号未找到对应配置信息"); + } + return paramList; + } + + /** + * 获取生成凭证所需的公共参数(每个合同为单位) + * 在传来值的基础上增添 + * @param voucherInfo + * @return + * @throws Exception + */ + private Map initCommonParam(Map 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> paramList, JBOTransaction tx) throws Exception { + BizObjectManager bomV8 = JBOFactory.getBizObjectManager(VOUCHER_V8.CLASS_NAME,tx); + for(Map param :paramList){ + BizObject boV8 = bomV8.newObject(); + boV8.setAttributesValue(param); + bomV8.saveObject(boV8); + } + } + + /** + * 根据contractId获取主体信息 + * @param contractId + * @return + * @throws JBOException + */ + public Map getSubjectInfoByContractId(String contractId) throws JBOException { + Map 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 initConvertParam(Map param){ + Map 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; + } +} diff --git a/src_core/com/tenwa/voucher/serviceImp/OverdueRepurchaseVoucherPSBC.java b/src_core/com/tenwa/voucher/serviceImp/OverdueRepurchaseVoucherPSBC.java index d733df03d..473203963 100644 --- a/src_core/com/tenwa/voucher/serviceImp/OverdueRepurchaseVoucherPSBC.java +++ b/src_core/com/tenwa/voucher/serviceImp/OverdueRepurchaseVoucherPSBC.java @@ -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 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> 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> paramList2 = DataOperatorUtil.getDataBySql(sqlQuery2); - if(paramList2.size()==0 || paramList2.size()>1){ - logger.warn(loanInfo.get("contractNo") + "逾期回购生成凭证之后,查询是否有逾期数据2,或逾期数据大于1。"); - return; - } - Map 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 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") +"'"+ ")" ; diff --git a/src_tenwa/com/tenwa/lease/app/quartzmession/CorpusSourceOverdueRepurchaseCreateVoucherJob.java b/src_tenwa/com/tenwa/lease/app/quartzmession/CorpusSourceOverdueRepurchaseCreateVoucherJob.java index aa265bedd..4e22f3fe6 100644 --- a/src_tenwa/com/tenwa/lease/app/quartzmession/CorpusSourceOverdueRepurchaseCreateVoucherJob.java +++ b/src_tenwa/com/tenwa/lease/app/quartzmession/CorpusSourceOverdueRepurchaseCreateVoucherJob.java @@ -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);