diff --git a/src_tenwa/com/tenwa/collectaudit/cache/CollectAuditInfoCache.java b/src_tenwa/com/tenwa/collectaudit/cache/CollectAuditInfoCache.java index 3c126c0ed..3b6606f74 100644 --- a/src_tenwa/com/tenwa/collectaudit/cache/CollectAuditInfoCache.java +++ b/src_tenwa/com/tenwa/collectaudit/cache/CollectAuditInfoCache.java @@ -1,635 +1,1451 @@ -package com.tenwa.collectaudit.cache; - -import java.math.BigDecimal; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - - - - - - - - - -import jbo.app.tenwa.calc.LC_RENT_INCOME; -import jbo.app.tenwa.calc.LC_RENT_PLAN; -import jbo.app.tenwa.customer.CUSTOMER_ACCOUNT; -import jbo.com.tenwa.lease.comm.COLLECT_RECORD_LOG; -import jbo.com.tenwa.lease.comm.COLLECT_RECORD_STATUS; -import jbo.com.tenwa.lease.comm.VI_LC_AUDIT_RENT_PLAN; -import jbo.sys.CODE_LIBRARY; - -import com.alibaba.fastjson.JSON; -import com.alibaba.fastjson.JSONObject; -import com.amarsoft.app.awe.config.InitCollectConfig; -import com.amarsoft.are.jbo.BizObject; -import com.amarsoft.are.jbo.BizObjectManager; -import com.amarsoft.are.jbo.JBOException; -import com.amarsoft.are.jbo.JBOFactory; -import com.amarsoft.are.jbo.JBOTransaction; -import com.amarsoft.awe.util.SqlObject; -import com.amarsoft.awe.util.Transaction; -import com.tenwa.comm.util.date.DateAssistant; -import com.tenwa.util.SerialNumberUtil; -import com.zhongan.scorpoin.biz.common.CommonRequest; -import com.zhongan.scorpoin.biz.common.CommonResponse; -import com.zhongan.scorpoin.common.ZhongAnApiClient; -import com.zhongan.scorpoin.common.ZhongAnOpenException; - -public class CollectAuditInfoCache { - - - private String id; - private String inputuserid; - private String inputorgid; - - //校验是否已经收款 - public String checkRentIsIncome(JBOTransaction tx) throws JBOException{ - String[] ids = id.split("@"); - StringBuffer parms = new StringBuffer(); - for (String str : ids) { - if (parms.length()==0) { - parms.append("'"+str+"'"); - }else{ - parms.append(",'"+str+"'"); - } - } - BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); - List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.contract_id,O.plan_list,O.plan_date,O.rent_over,crs.deduct_stata from O LEFT JOIN jbo.com.tenwa.lease.comm.COLLECT_RECORD_STATUS crs ON crs.contract_id = O.contract_id AND crs.rent_plan_id = O.id where O.id in ("+parms.toString()+")").getResultList(false); - for (BizObject bo : bolist) { - String name = bo.getAttribute("customer_name").toString().trim(); - String plan_list = bo.getAttribute("plan_list").toString().trim(); - String plan_date = bo.getAttribute("plan_date").toString().trim(); - String deductstata = bo.getAttribute("deduct_stata").toString().trim(); - String rent = bo.getAttribute("rent_over").toString(); - if ("processing".equals(deductstata)) {//判断是否在批量处理中 - return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金正在进行扣款处理中".trim(); - } - if ("".equals(rent) || "0".equals(rent) || "0.0".equals(rent)) {//判断剩余收款金额 - return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经全部收取,无法再次扣款".trim(); - } - } - return "sucess"; - } - - //初审 - public String fristCollectAudit(JBOTransaction tx) throws JBOException{ - String[] ids = id.split("@"); - StringBuffer buff = new StringBuffer(); - for (String str : ids) { - if (buff.length() == 0) { - buff.append("'"+str+"'"); - }else{ - buff.append(",'"+str+"'"); - } - } - String parm = buff.toString(); - BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); - BizObjectManager acc = JBOFactory.getFactory().getManager(CUSTOMER_ACCOUNT.CLASS_NAME); - List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.account,O.acc_number,O.mobile,O.contract_id,O.plan_list,O.plan_date,O.COLLECT_STATUS,O.rent from O where O.id in ("+parm.toString()+")").getResultList(false); - for (BizObject bo : bolist) { - String name = bo.getAttribute("customer_name").toString().trim(); - BizObject ac = acc.createQuery("O.account=:account and O.acc_info = 'Debit' and O.acc_number=:acc_number and O.mobile=:mobile and O.contract_id=:contract_id") - .setParameter("account", bo.getAttribute("account").toString()) - .setParameter("acc_number", bo.getAttribute("acc_number").toString()) - .setParameter("mobile", bo.getAttribute("mobile").toString()) - .setParameter("contract_id", bo.getAttribute("contract_id").toString()) - .getSingleResult(false); - /*if (ac == null) { - return "error@客户"+name+"尚未签约,请先进行签约".trim(); - }*/ - } - BizObjectManager bmr = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); - bmr.createQuery("update O set O.AUDIT_STATE = 'Y' where id in ("+parm+")").executeUpdate(); - - return "success"; - } - - //复审退回 - public String rebackCollectAudit(JBOTransaction tx) throws JBOException{ - String[] ids = id.split("@"); - StringBuffer parms = new StringBuffer(); - for (String str : ids) { - if (parms.length() == 0) { - parms.append("'"+str+"'"); - }else{ - parms.append(",'"+str+"'"); - } - } - BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); - List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.fact_rent,O.account,O.acc_number,O.mobile,O.contract_id,O.plan_list,O.plan_date,O.COLLECT_STATUS,O.BATCH_STATUS,O.rent from O where O.id in ("+parms.toString()+")").getResultList(false); - for (BizObject bo : bolist) { - String name = bo.getAttribute("customer_name").toString().trim(); - String plan_list = bo.getAttribute("plan_list").toString(); - String plan_date = bo.getAttribute("plan_date").toString(); - String batchstatus = bo.getAttribute("BATCH_STATUS").toString(); - String rent = bo.getAttribute("rent").toString(); - double fact_rent = bo.getAttribute("fact_rent").getDouble();//实际租金 - double income_rent = bo.getAttribute("rent").getDouble();//已收租金 - if ("process".equals(batchstatus)) {//判断是否在批量处理中 - return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金正在进行批量扣款处理中,无法退回初审".trim(); - } - if ("".equals(rent) || "0".equals(rent) || "0.0".equals(rent)) {//判断剩余收款金额 - return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经全部收取,无法退回初审".trim(); - } - if (income_rent > 0 && (fact_rent > income_rent)) {//部分收款 - return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经部分收取,无法退回初审".trim(); - } - } - BizObjectManager bmlrp = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); - bmlrp.createQuery("update O set O.AUDIT_STATE = 'N' where id in ("+parms.toString()+")").executeUpdate(); - - return "success"; - } - - /** - * 代收-发送请求 - * @param tx - * @return - * @throws Exception - */ - public String batchCollectManage(JBOTransaction tx) throws Exception{ - String[] ids = id.split("@"); - StringBuffer parms = new StringBuffer(); - for (String str : ids) { - if (parms.length()==0) { - parms.append("'"+str+"'"); - }else{ - parms.append(",'"+str+"'"); - } - } - BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); - BizObjectManager lrpbm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); - List bolist = bm.createQuery("select O.contract_id,O.plan_date,O.id,ci.certid,ca.ACC_NUMBER,ca.mobile,ca.ACCOUNT,ca.BANK_NAME,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca,jbo.app.tenwa.customer.CUSTOMER_INFO ci where ci.customerid=ca.customerid and ca.customerid=O.customer_id and O.contract_id=ca.contract_id and ca.acc_type = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false); - for (BizObject biz : bolist) { - String contract_id = biz.getAttribute("contract_id").toString(); - String plan_id = biz.getAttribute("id").toString(); - String bankname = biz.getAttribute("bank_name").toString(); - String customer_name = biz.getAttribute("account").toString(); - String certid = biz.getAttribute("certid").toString(); - String mobile = biz.getAttribute("mobile").toString(); - String acc_number = biz.getAttribute("ACC_NUMBER").toString(); - String account = biz.getAttribute("ACCOUNT").toString(); - String rent = biz.getAttribute("rent").toString(); - BigDecimal rent_over = new BigDecimal(rent).setScale(2); - List codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'selectCollectBank' and O.isinuse = '1' and O.itemattribute is not null ").getResultList(false); - for (BizObject code : codelist) { - String itemname = code.getAttribute("itemname").toString().trim(); - BigDecimal quota = new BigDecimal(code.getAttribute("itemattribute").toString()).setScale(2); - String collect_sn = "";//代扣流水号 - if (bankname.indexOf(itemname) !=-1 && rent_over.compareTo(quota) == 1) { - int index_z = rent_over.divide(quota).intValue(); - int index_y = rent_over.divideAndRemainder(quota)[1].compareTo(new BigDecimal(0)) == 1 ? 1 : 0; - for (int i = 0; i < index_z; i++) { - JBOTransaction tx1 = JBOFactory.createJBOTransaction(); - collect_sn = SerialNumberUtil.getBatchSerialNumber(tx1); - //发起代扣 - Map result = singleBatchCollectMoeny(tx, collect_sn,certid, bankname, acc_number, account, quota.toString()); - if (result.containsKey("transStatus") && "3".equals(result.get("transStatus"))) { - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, quota.toString()); - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_status = '1' where O.id =:plan_id ").setParameter("plan_id", plan_id).executeUpdate(); - }else if (result.containsKey("transStatus") && "9".equals(result.get("transStatus"))) { - //不做任何操作 - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_msg =:collect_msg where O.id =:plan_id ").setParameter("collect_msg", result.get("resMsg").toString()).setParameter("plan_id", plan_id).executeUpdate(); - }else{ - //其他情况均认为是 处理中 状态 - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, quota.toString()); - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_status = '1' where O.id =:plan_id ").setParameter("plan_id", plan_id).executeUpdate(); - } - //记录发起代扣信息 - archiveRedcodeLog(tx1, collect_sn, contract_id, plan_id, customer_name, certid, mobile, bankname, acc_number, account, quota.toString()); - tx1.commit(); - } - if (index_y == 1) { - //发起代扣 - JBOTransaction tx1 = JBOFactory.createJBOTransaction(); - collect_sn = SerialNumberUtil.getBatchSerialNumber(tx1); - Map result = singleBatchCollectMoeny(tx, collect_sn,certid, bankname, acc_number, account, rent_over.subtract(quota.multiply(new BigDecimal(index_z))).toString()); - if (result.containsKey("transStatus") && "3".equals(result.get("transStatus"))) { - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, rent_over.subtract(quota.multiply(new BigDecimal(index_z))).toString()); - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_status = '1' where O.id =:plan_id ").setParameter("plan_id", plan_id).executeUpdate(); - }else if (result.containsKey("transStatus") && "9".equals(result.get("transStatus"))) { - //不做任何操作 - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_msg =:collect_msg where O.id =:plan_id ").setParameter("collect_msg", result.get("resMsg").toString()).setParameter("plan_id", plan_id).executeUpdate(); - }else{ - //其他情况均认为是 处理中 状态 - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, rent_over.subtract(quota.multiply(new BigDecimal(index_z))).toString()); - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - lrpbm.createQuery("update O set O.collect_status = '1' where O.id =:plan_id ").setParameter("plan_id", plan_id).executeUpdate(); - } - //记录发起代扣信息 - archiveRedcodeLog(tx1, collect_sn, contract_id, plan_id, customer_name, certid, mobile, bankname, acc_number, account, rent_over.subtract(quota.multiply(new BigDecimal(index_z))).toString()); - tx1.commit(); - } - break; - }else if (bankname.indexOf(itemname) !=-1 && rent_over.compareTo(quota) == -1) {//如果小于限额,则直接扣款 - JBOTransaction tx1 = JBOFactory.createJBOTransaction(); - collect_sn = SerialNumberUtil.getBatchSerialNumber(tx1); - //发起代扣 - Map result = singleBatchCollectMoeny(tx, collect_sn, certid,bankname, acc_number, account, rent); - if (result.containsKey("transStatus") && "3".equals(result.get("transStatus"))) { - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, rent); - }else if (result.containsKey("transStatus") && "9".equals(result.get("transStatus"))) { - //不做任何操作 - }else{ - //其他情况均认为是 处理中 状态 - archiveRedcodeStatus(tx1, collect_sn, contract_id, plan_id, rent); - } - tx1.commit(); - break; - } - } - - } - return "系统正在处理中,请稍后"; - } - - /** - * 记录请求日志 - * @param tx1 - * @param contract_id 合同编号 - * @param plan_id 租金计划编号 - * @param bankname 银行名称 - * @param acc_number 银行账号 - * @param account 开户户名 - * @param rent 扣款金额 - * @throws JBOException - */ - public void archiveRedcodeLog(JBOTransaction tx1,String collect_sn,String contract_id,String plan_id,String customer_name,String certid,String mobile,String bankname,String acc_number,String account,String rent) throws JBOException{ - BizObjectManager crlbm = JBOFactory.getFactory().getManager(COLLECT_RECORD_LOG.CLASS_NAME); - BizObject crl = crlbm.newObject(); - tx1.join(crlbm); - crl.setAttributeValue("contract_id", contract_id); - crl.setAttributeValue("customer_name", customer_name); - crl.setAttributeValue("collect_sn", collect_sn); - crl.setAttributeValue("certid", certid); - crl.setAttributeValue("mobile", mobile); - crl.setAttributeValue("acc_number", acc_number); - crl.setAttributeValue("money", new BigDecimal(rent).multiply(new BigDecimal(100)).intValue()); - crl.setAttributeValue("inputorg", getInputorgid()); - crl.setAttributeValue("inputuser", getInputuserid()); - crl.setAttributeValue("inputdate", DateAssistant.getToday()); - crlbm.saveObject(crl); - } - - /** - * 记录请求流水号标志位 - * @param tx1 - * @param contract_id 合同编号 - * @param plan_id 租金计划编号 - * @param bankname 银行名称 - * @param acc_number 银行账号 - * @param account 开户户名 - * @param rent 扣款金额 - * @throws JBOException - */ - public void archiveRedcodeStatus(JBOTransaction tx1,String collect_sn,String contract_id,String plan_id,String rent) throws JBOException{ - BizObjectManager crsbm = JBOFactory.getFactory().getManager(COLLECT_RECORD_STATUS.CLASS_NAME); - BizObject crs = crsbm.newObject(); - tx1.join(crsbm); - crs.setAttributeValue("contract_id", contract_id); - crs.setAttributeValue("rent_plan_id", plan_id); - crs.setAttributeValue("collect_sn", collect_sn); - crs.setAttributeValue("money", rent); - //处理中,processing/处理完成,success/处理失败,failure - crs.setAttributeValue("deduct_stata", "processing"); - crs.setAttributeValue("inputorg", getInputorgid()); - crs.setAttributeValue("inputuser", getInputuserid()); - crs.setAttributeValue("inputdate", DateAssistant.getToday()); - crsbm.saveObject(crs); - } - - /** - * 代收-发送请求 - * @param tx - * @param bc - * @param bo - * @param rent - * @return - * @throws Exception - */ - public Map singleBatchCollectMoeny(JBOTransaction tx,String collect_sn,String certid,String bankName,String accNumber,String account,String rent) throws Exception{ - int money = new BigDecimal(rent).setScale(2).multiply(new BigDecimal(100)).intValue(); - String serviceName = "payacq.transInTrans"; - ZhongAnApiClient client = new ZhongAnApiClient(InitCollectConfig.C_ENV, InitCollectConfig.C_APPKEY, InitCollectConfig.C_PRIVATEKEY, InitCollectConfig.C_VERSION); - CommonRequest request = new CommonRequest(serviceName); - JSONObject params = new JSONObject(); - //传入业务参数 - params.put("version", InitCollectConfig.C_VERSION); - params.put("bizCat", InitCollectConfig.C_BIZCAT); - params.put("bizSys", InitCollectConfig.C_BIZSYS); - //交易流水号 - String outTradeNo = collect_sn; - params.put("outTradeNo", outTradeNo); - params.put("bizType", InitCollectConfig.C_BIZTYPE);//"1-消费 8-申购 30-追偿" - System.out.println(new Date()); - params.put("subBusinessCode", InitCollectConfig.C_SUBBUSINESSCODE); - params.put("businessCode", InitCollectConfig.C_BUSINESSCODE); - params.put("reqTime", new Date()); - params.put("chanAcctId", InitCollectConfig.C_CHANACCTID); - // params.put("ccy", ""); - params.put("orderAmt", money); - /* - 1:借记卡, - 2:信用账户 - 3:中信电子账户 - 5:微信支付 - 7:二类户(备注 2类户) - 8:余额支付工具 - */ - JSONObject values = new JSONObject(); - values.put("payerTool", "1"); - values.put("payerAcctId", "0"); - values.put("payerName", account);//户名 - values.put("payerIdType", "l"); - values.put("payerIdNo", accNumber);//银行卡号 - values.put("payerCardNo", certid); - values.put("payAmt", money); - params.put("payerInfoList", new Object[]{values}); - request.setParams(params); - CommonResponse response = (CommonResponse) client.call(request); - Map map = JSON.parseObject(response.getBizContent()); - if (null == map) { - map = new HashMap(); - } - return map; - } - - /** - * 查询批量收款状态 - * @return - * @throws Exception - */ - public String queryBatchCollectStatus(JBOTransaction tx,StringBuffer parms) throws Exception{ - BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); - List bolist = bc.createQuery("select crs.rent_plan_id,crs.collect_sn,crs.money from O left join jbo.com.tenwa.lease.comm.COLLECT_RECORD_STATUS crs on crs.rent_plan_id = O.id where crs.collect_sn in ("+parms.toString()+")").getResultList(false); - List listId = new ArrayList(); - for (BizObject bo : bolist) { - String plan_id = bo.getAttribute("rent_plan_id").toString(); - String collect_sn = bo.getAttribute("collect_sn").toString(); - Map result = queryTransQry(collect_sn); - JBOTransaction transaction = JBOFactory.createJBOTransaction(); - BizObjectManager crsbm = JBOFactory.getFactory().getManager(COLLECT_RECORD_STATUS.CLASS_NAME,transaction); - if (result.containsKey("transStatus") && "3".equals(result.get("transStatus"))) { - //回笼租金 - querysingleCollectMoeny(transaction, bo); - //更新收款状态 - crsbm.createQuery("update O set O.deduct_stata = 'success',O.deduct_msg = '"+result.get("transMsg")+"' where O.rent_plan_id=:plan_id and O.collect_sn=:collect_sn ") - .setParameter("plan_id", plan_id).setParameter("collect_sn", collect_sn).executeUpdate(); - }else if (result.containsKey("transStatus") && "9".equals(result.get("transStatus"))) { - //如果扣款失败,更新状态,不回笼租金//////处理中,processing/处理完成,success/处理失败,failure - crsbm.createQuery("update O set O.deduct_stata = 'failure',O.deduct_msg = '"+result.get("transMsg")+"' where O.rent_plan_id=:plan_id and O.collect_sn=:collect_sn ") - .setParameter("plan_id", plan_id).setParameter("collect_sn", collect_sn).executeUpdate(); - } else{ - //正在处理中,不做任何操做 - } - transaction.commit(); - if (!listId.contains(plan_id)) { - listId.add(plan_id); - } - - } - Object[] arryId = listId.toArray(); - StringBuffer arryparm = new StringBuffer(); - for (Object string : arryId) { - if (arryparm.length() == 0) { - arryparm.append("'"+string+"'"); - }else { - arryparm.append(",'"+string+"'"); - } - } - BizObjectManager crsbm = JBOFactory.getFactory().getManager(COLLECT_RECORD_STATUS.CLASS_NAME); - List querylist = crsbm.createQuery("select v.GROUP_CONCAT(O.deduct_stata) AS v.debuct_statas,O.rent_plan_id from O where O.rent_plan_id in ("+arryparm.toString()+") ").getResultList(false); - for (BizObject biz : querylist) { - String deduct_stata = biz.getAttribute("debuct_statas").toString(); - String plan_id = biz.getAttribute("rent_plan_id").toString(); - //处理中,processing/处理完成,success/处理失败,failure - if (deduct_stata.contains("processing") && deduct_stata.contains("success") && deduct_stata.contains("failure")) { - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - bc.createQuery("update O set O.collect_status = '1' where id = '"+plan_id+"'").executeUpdate(); - }else if (!deduct_stata.contains("processing") && deduct_stata.contains("success") && deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - bc.createQuery("update O set O.collect_status = '2' where id = '"+plan_id+"'").executeUpdate(); - }else if (!deduct_stata.contains("processing") && deduct_stata.contains("success") && !deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - bc.createQuery("update O set O.collect_status = '3' where id = '"+plan_id+"'").executeUpdate(); - }else if (!deduct_stata.contains("processing") && !deduct_stata.contains("success") && deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - bc.createQuery("update O set O.collect_status = '4' where id = '"+plan_id+"'").executeUpdate(); - } - } - - return "sucess"; - - } - - public static String getDeductStata(String plan_id){ - JBOTransaction tx = null; - StringBuffer result = new StringBuffer(); - try { - tx = JBOFactory.createJBOTransaction(); - BizObjectManager crsbm = JBOFactory.getFactory().getManager(COLLECT_RECORD_STATUS.CLASS_NAME,tx); - BizObject querybiz = crsbm.createQuery("select v.GROUP_CONCAT(O.deduct_stata) AS v.debuct_statas,v.GROUP_CONCAT(O.deduct_msg) AS v.debuct_msgs from O where O.rent_plan_id =:plan_id ").setParameter("plan_id", plan_id).getSingleResult(false); - if(null != querybiz) { - String deduct_stata = querybiz.getAttribute("debuct_statas").toString(); - String[] deduct_statas = querybiz.getAttribute("debuct_statas").toString().trim().split(","); - String[] debuct_msgs = querybiz.getAttribute("debuct_msgs").toString().trim().split(","); - //处理中,processing/处理完成,success/处理失败,failure - if (deduct_stata.contains("processing") && deduct_stata.contains("success") && deduct_stata.contains("failure")) { - result.append("部分收款 >> 收款中 >> "); - for (int i = 0; i < deduct_statas.length; i++) { - if (deduct_statas[i].contains("failure")) { - result.append(debuct_msgs[i]); - break; - } - } - }else if (deduct_stata.contains("processing") && !deduct_stata.contains("success") && !deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - result.append("收款中 "); - }else if (!deduct_stata.contains("processing") && deduct_stata.contains("success") && deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - result.append("部分收款 >>> "); - for (int i = 0; i < deduct_statas.length; i++) { - if (deduct_statas[i].contains("failure")) { - result.append(debuct_msgs[i]); - break; - } - } - - }else if (!deduct_stata.contains("processing") && deduct_stata.contains("success") && !deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - result.append("收款成功 "); - }else if (!deduct_stata.contains("processing") && !deduct_stata.contains("success") && deduct_stata.contains("failure")){ - //更新状态,1,处理中,2,部分收款,3,收款成功,4,收款失败,5,未收款 - result.append("收款失败 >>> "); - for (int i = 0; i < deduct_statas.length; i++) { - if (deduct_statas[i].contains("failure")) { - result.append(debuct_msgs[i]); - break; - } - } - } - } - return result.toString().trim(); - } catch (JBOException e) { - if (tx != null) { - try { - tx.rollback(); - } catch (JBOException e1) { - // TODO Auto-generated catch block - e1.printStackTrace(); - } - } - }finally{ - try { - tx.commit(); - } catch (JBOException e) { - // TODO Auto-generated catch block - e.printStackTrace(); - } - } - return result.toString().trim(); - - } - - /** - * 查询扣款是否成功 - * @param outTradeNo - * @return - */ - public Map queryTransQry(String outTradeNo) { - String serviceName = "payacq.transQry"; - Map result = new HashMap(); - try { - ZhongAnApiClient client = new ZhongAnApiClient(InitCollectConfig.C_ENV, InitCollectConfig.C_APPKEY, InitCollectConfig.C_PRIVATEKEY, InitCollectConfig.C_VERSION); - CommonRequest request = new CommonRequest(serviceName); - JSONObject params = new JSONObject(); - //传入业务参数 - params.put("version", InitCollectConfig.C_VERSION); - params.put("chanAcctId", InitCollectConfig.C_CHANACCTID); - params.put("outTradeNo", outTradeNo); - params.put("bizCat", InitCollectConfig.C_BIZCAT); - params.put("bizSys", InitCollectConfig.C_BIZSYS); - request.setParams(params); - CommonResponse response = (CommonResponse) client.call(request); - System.out.println(response); - result = JSON.parseObject(response.getBizContent()); - } catch (ZhongAnOpenException e) { - e.printStackTrace(); - } - return result; - } - - /** - * 查询接口--回笼租金 - * @param tx - * @param bc - * @param bo - * @param rent - * @return - * @throws Exception - */ - public void querysingleCollectMoeny(JBOTransaction tx,BizObject bo) throws Exception{ - String cerrentDate = DateAssistant.getToday(); - JBOTransaction transaction = tx; - int hire_index = JBOFactory.getBizObjectManager(LC_RENT_INCOME.CLASS_NAME, transaction).createQuery("select COUNT(O.plan_id) from O GROUP BY O.plan_id HAVING O.plan_id=:plan_id ").getResultList(false).size() + 1; - BigDecimal money_value = new BigDecimal(bo.getAttribute("moeny").toString()).setScale(2); - BizObjectManager bmi = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,transaction); - BizObject boi = bmi.createQuery("SELECT v.REPLACE(v.UUID(),'-','') AS id, O.QUOT_ID AS QUOT_ID, O.CUST_ID AS CUST_ID, O.PROJECT_ID AS PROJECT_ID, O.PROJECT_PLAN_NUMBER AS PROJECT_PLAN_NUMBER, " - + "O.CONTRACT_ID AS CONTRACT_ID, O.CONTRACT_PLAN_NUMBER AS CONTRACT_PLAN_NUMBER, " - + "O.PAYMENT_NUMBER AS PAYMENT_NUMBER, '' AS v.EBANK_NUMBER, O.id AS v.PLAN_ID, " - + "O.PLAN_LIST AS PLAN_LIST, '0' AS v.INTEREST_ADJUST, 'settlemethod6' AS SETTLE_METHOD, " - + " '"+hire_index+"' AS v.HIRE_LIST, '"+cerrentDate+"' AS HIRE_DATE, vl.rent_over AS RENT, " - + "vl.corpus_over AS CORPUS, vl.interest_over AS INTEREST, vl.penalty_over AS PENALTY," - + " '0' AS CORPUS_ADJUST, '0' AS PENALTY_ADJUST, '0' AS ROLL_BACK, O.COIN AS COIN FROM O, " - + "jbo.app.tenwa.calc.VI_LC_RENT_PLAN vl WHERE O.id = vl.id AND vl.contract_id = :contract_id " - + " AND vl.plan_date = :plan_date ").setParameter("contract_id", bo.getAttribute("contract_id").toString()) - .setParameter("plan_date", bo.getAttribute("plan_date").toString()).getSingleResult(false); - if (boi != null) { - String sql = ""; - BigDecimal interest_value = new BigDecimal(boi.getAttribute("interest").toString()).setScale(2); - BigDecimal corpus_value = new BigDecimal(boi.getAttribute("corpus").toString()).setScale(2); - BigDecimal penalty_value = new BigDecimal(boi.getAttribute("penalty").toString()).setScale(2); - BigDecimal rent_value = new BigDecimal(boi.getAttribute("rent").toString()).setScale(2); - BigDecimal rent = new BigDecimal(0); - BigDecimal corpus = new BigDecimal(0); - BigDecimal interest = new BigDecimal(0); - BigDecimal penalty = new BigDecimal(0); - if (rent_value.add(penalty_value).compareTo(money_value) == 0) {//如果 租金+罚息=本次扣款金额 - rent = rent_value; - corpus = corpus_value; - interest = interest_value; - penalty = penalty_value; - }else if (interest_value.doubleValue() > 0 && (money_value.compareTo(interest_value) == -1 || money_value.compareTo(interest_value) == 0)) {//剩余利息大于0,本次扣款金额小于或等于利息 - rent = money_value; - interest = money_value; - }else if (interest_value.doubleValue() > 0 && money_value.compareTo(interest_value) == 1) { //剩余利息大于0,本次扣款金额大于利息 - rent = money_value; - corpus = money_value.subtract(interest_value).setScale(2); - interest = interest_value; - }else if (corpus_value.doubleValue() > 0 && (money_value.compareTo(corpus_value) == -1 || money_value.compareTo(corpus_value) == 0)) {//本金大于0,本次扣款金额小于或等于本金 - rent = money_value; - corpus = money_value; - }else if (corpus_value.doubleValue() > 0 && money_value.compareTo(corpus_value) == 1) {//本金大于0,本次扣款金额大于本金 - rent = money_value; - corpus = corpus_value; - penalty = money_value.subtract(corpus_value).setScale(2); - }else if (penalty_value.doubleValue() > 0 && (money_value.compareTo(penalty_value) == -1 || money_value.compareTo(penalty_value) == 0)) {//罚息大于0,本次扣款金额小于或等于罚息 - rent = money_value; - penalty = money_value; - }else if (penalty_value.doubleValue() > 0 && money_value.compareTo(penalty_value) == 1) {//罚息大于0,本次扣款金额大于罚息 - rent = money_value; - corpus = money_value.subtract(interest_value).subtract(corpus_value).setScale(2); - interest = money_value.subtract(interest_value).setScale(2); - penalty = penalty_value; - } - sql = "insert into LC_RENT_INCOME (ID, QUOT_ID, CUST_ID, PROJECT_ID, PROJECT_PLAN_NUMBER, CONTRACT_ID, CONTRACT_PLAN_NUMBER, PAYMENT_NUMBER,EBANK_NUMBER,PLAN_ID, PLAN_LIST," - + " INTEREST_ADJUST,SETTLE_METHOD,HIRE_LIST,HIRE_DATE, RENT,CORPUS,INTEREST,PENALTY,CORPUS_ADJUST,PENALTY_ADJUST,ROLL_BACK,COIN)" - + "values ('"+boi.getAttribute("id")+"','"+boi.getAttribute("QUOT_ID")+"','"+boi.getAttribute("CUST_ID")+"','"+boi.getAttribute("PROJECT_ID")+"','"+boi.getAttribute("PROJECT_PLAN_NUMBER")+"'," - + "'"+boi.getAttribute("CONTRACT_ID")+"','"+boi.getAttribute("CONTRACT_PLAN_NUMBER")+"','"+boi.getAttribute("PAYMENT_NUMBER")+"','"+boi.getAttribute("EBANK_NUMBER")+"','"+boi.getAttribute("PLAN_ID")+"'," - + "'"+boi.getAttribute("PLAN_LIST")+"','"+boi.getAttribute("INTEREST_ADJUST")+"','"+boi.getAttribute("SETTLE_METHOD")+"','"+boi.getAttribute("HIRE_LIST")+"','"+boi.getAttribute("HIRE_DATE")+"','"+rent.toString()+"','"+corpus.toString()+"'," - + "'"+interest.toString()+"','"+penalty.toString()+"','"+boi.getAttribute("CORPUS_ADJUST")+"','"+boi.getAttribute("PENALTY_ADJUST")+"','"+boi.getAttribute("ROLL_BACK")+"','"+boi.getAttribute("COIN")+"')"; - //插入数据 - Transaction Sqlca =null; - Sqlca = Transaction.createTransaction(transaction); - SqlObject asql = new SqlObject(sql); - Sqlca.executeSQL(asql); - } - } - - - public String getInputuserid() { - return inputuserid; - } - - public void setInputuserid(String inputuserid) { - this.inputuserid = inputuserid; - } - - public String getInputorgid() { - return inputorgid; - } - - public void setInputorgid(String inputorgid) { - this.inputorgid = inputorgid; - } - - public String getId() { - return id; - } - - public void setId(String id) { - this.id = id; - } - -} +package com.tenwa.collectaudit.cache; + +import java.io.File; +import java.math.BigDecimal; +import java.text.DecimalFormat; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +import jbo.app.tenwa.calc.LC_RENT_PLAN; +import jbo.app.tenwa.customer.CUSTOMER_ACCOUNT; +import jbo.com.tenwa.lease.comm.LB_CLEAR_FILE_RECORD; +import jbo.com.tenwa.lease.comm.LB_INTFACE_FILE_RECORD; +import jbo.com.tenwa.lease.comm.VI_LC_AUDIT_RENT_PLAN; +import jbo.sys.CODE_LIBRARY; + +import com.amarsoft.app.als.sys.tools.DateTool; +import com.amarsoft.app.awe.config.InitCollectConfig; +import com.amarsoft.app.util.StringUtil; +import com.amarsoft.are.jbo.BizObject; +import com.amarsoft.are.jbo.BizObjectManager; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.are.jbo.JBOFactory; +import com.amarsoft.are.jbo.JBOTransaction; +import com.amarsoft.awe.util.SqlObject; +import com.amarsoft.awe.util.Transaction; +import com.gnete.security.crypt.Crypt; +import com.gnete.security.crypt.CryptException; +import com.ibm.sslight.tools.mainExit; +import com.tenwa.comm.util.date.DateAssistant; +import com.tenwa.comm.util.jboutil.DataOperatorUtil; + +public class CollectAuditInfoCache { + + private String id; + private String fileSavePath = "d:/tmp/als/InterFace"; + private String inputuserid; + private String inputorgid; + private String clearDate; + + //获取存盘文件 + public static String getCollectIntface(String id) throws Exception{ + + String sql="select lr.filename from LB_INTFACE_FILE_RECORD lr " + + "where lr.id=:id"; + Map map=new HashMap(); + map.put("id", id); + JBOTransaction tx = null; + String filename=""; + tx=JBOFactory.createJBOTransaction(); + List> list=DataOperatorUtil.getDataBySql(tx, sql, map); + if(list.size()>0){ + filename=StringUtil.nullToString(list.get(0).get("FILENAME")) ; + } + tx.commit(); + return filename; + } + //校验是否已经收款 + public String checkRentIsIncome(JBOTransaction tx) throws JBOException{ + String[] ids = id.split("@"); + StringBuffer parms = new StringBuffer(); + for (String str : ids) { + if (parms.length()==0) { + parms.append("'"+str+"'"); + }else{ + parms.append(",'"+str+"'"); + } + } + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.account,O.acc_number,O.mobile,O.contract_id,O.plan_list,O.plan_date,O.COLLECT_STATUS,O.BATCH_STATUS,O.rent from O where O.id in ("+parms.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + String name = bo.getAttribute("customer_name").toString().trim(); + String plan_list = bo.getAttribute("plan_list").toString(); + String plan_date = bo.getAttribute("plan_date").toString(); + String batchstatus = bo.getAttribute("BATCH_STATUS").toString(); + String rent = bo.getAttribute("rent").toString(); + if ("process".equals(batchstatus)) {//判断是否在批量处理中 + return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金正在进行批量扣款处理中".trim(); + } + if ("".equals(rent) || "0".equals(rent) || "0.0".equals(rent)) {//判断剩余收款金额 + return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经全部收取,无法再次扣款".trim(); + } + } + return "sucess"; + } + //上传清算文件 + public String uploadClearFile(JBOTransaction tx) throws JBOException{ + String currentDateTime = DateAssistant.getTodayNow(); + String currenttime=currentDateTime.replaceAll("/", ""); + currenttime=currenttime.replaceAll(":", ""); + currenttime=currenttime.replaceAll(" ", ""); + //String SETT_DATE = "20170920"; + String SETT_DATE = this.getClearDate() != null ? this.getClearDate().replace("/", "") : ""; + String SETT_NO = "01"; + String SF_TYPE = InitCollectConfig.FLAG; + String USER_NAME = InitCollectConfig.USERNAME; + String MERCHANT_ID = InitCollectConfig.MERCHANTID; + String REQ_TIME = currenttime; + //String URL = "http://59.41.103.98:333/gzdsf/GetSettFile.do?"; + String URL = InitCollectConfig.CLEARREQUESTURL+"?"; + String SIGNED_MSG = ""; + try { + Crypt crypt = new Crypt("gbk"); + String pathPfx = InitCollectConfig.PRIVATEKEYURL; + //"D:\\BaiduNetdisk\\Download\\代收付系统接口文档和JAVA版测试demo及测试相关参数\\JAVA版测试DEMO及测试参数_20170825\\测试商户证书\\ORA@TEST1.p12"; + SIGNED_MSG = SETT_DATE+"|"+SETT_NO+"|"+USER_NAME+"|"+MERCHANT_ID+"|"+REQ_TIME; + SIGNED_MSG = crypt.sign(SIGNED_MSG, pathPfx, "123456"); + URL += "SETT_DATE="+SETT_DATE+"&SETT_NO="+SETT_NO+"&SF_TYPE="+SF_TYPE+"&USER_NAME="+USER_NAME+"&MERCHANT_ID="+MERCHANT_ID+"&REQ_TIME="+REQ_TIME+"&SIGNED_MSG="+SIGNED_MSG; + System.out.println(URL); + } catch (CryptException e) { + e.printStackTrace(); + } + BizObjectManager bm = JBOFactory.getFactory().getManager(LB_CLEAR_FILE_RECORD.CLASS_NAME); + bm.createQuery("update O set O.FULLPATH=:FULLPATH where O.id=:id").setParameter("FULLPATH", URL) + .setParameter("id", this.getId()).executeUpdate(); + return "sucess"; + } + //初审 + public String fristCollectAudit(JBOTransaction tx) throws JBOException{ + String[] ids = id.split("@"); + StringBuffer buff = new StringBuffer(); + for (String str : ids) { + if (buff.length() == 0) { + buff.append("'"+str+"'"); + }else{ + buff.append(",'"+str+"'"); + } + } + String parm = buff.toString(); + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + BizObjectManager acc = JBOFactory.getFactory().getManager(CUSTOMER_ACCOUNT.CLASS_NAME); + List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.account,O.acc_number,O.mobile,O.contract_id,O.plan_list,O.plan_date,O.COLLECT_STATUS,O.BATCH_STATUS,O.rent from O where O.id in ("+parm.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + String name = bo.getAttribute("customer_name").toString().trim(); + BizObject ac = acc.createQuery("O.account=:account and O.acc_info = 'Debit' and O.sign_status ='Y' and O.acc_number=:acc_number and O.mobile=:mobile and O.contract_id=:contract_id") + .setParameter("account", bo.getAttribute("account").toString()) + .setParameter("acc_number", bo.getAttribute("acc_number").toString()) + .setParameter("mobile", bo.getAttribute("mobile").toString()) + .setParameter("contract_id", bo.getAttribute("contract_id").toString()) + .getSingleResult(false); + if (ac == null) { + return "error@客户"+name+"尚未签约,请先进行签约".trim(); + } + } + BizObjectManager bmr = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + String today=DateTool.getToday(); + bmr.createQuery("update O set O.AUDIT_STATE = 'Y',CollectTime='"+today+"' where id in ("+parm+")").executeUpdate(); + return "success"; + } + + //复审退回 + public String rebackCollectAudit(JBOTransaction tx) throws JBOException{ + String[] ids = id.split("@"); + StringBuffer parms = new StringBuffer(); + for (String str : ids) { + if (parms.length() == 0) { + parms.append("'"+str+"'"); + }else{ + parms.append(",'"+str+"'"); + } + } + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select v.getCustomerName(O.customer_id) as v.customer_name,O.fact_rent,O.account,O.acc_number,O.mobile,O.contract_id,O.plan_list,O.plan_date,O.COLLECT_STATUS,O.BATCH_STATUS,O.rent from O where O.id in ("+parms.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + String name = bo.getAttribute("customer_name").toString().trim(); + String plan_list = bo.getAttribute("plan_list").toString(); + String plan_date = bo.getAttribute("plan_date").toString(); + String batchstatus = bo.getAttribute("BATCH_STATUS").toString(); + String rent = bo.getAttribute("rent").toString(); + double fact_rent = bo.getAttribute("fact_rent").getDouble();//实际租金 + double income_rent = bo.getAttribute("rent").getDouble();//已收租金 + if ("process".equals(batchstatus)) {//判断是否在批量处理中 + return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金正在进行批量扣款处理中,无法退回初审".trim(); + } + if ("".equals(rent) || "0".equals(rent) || "0.0".equals(rent)) {//判断剩余收款金额 + return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经全部收取,无法退回初审".trim(); + } + if (income_rent > 0 && (fact_rent > income_rent)) {//部分收款 + return "error@"+name+"的"+plan_list+"日期为"+plan_date+"的租金已经部分收取,无法退回初审".trim(); + } + } + BizObjectManager bmlrp = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + bmlrp.createQuery("update O set O.AUDIT_STATE = 'N' where id in ("+parms.toString()+")").executeUpdate(); + + return "success"; + } + + /** + * 实时代收 + * @param tx + * @return + * @throws Exception + */ + public String barchCollectManage(JBOTransaction tx) throws Exception{ + int i = 0,j = 0; + String[] ids = id.split("@"); + StringBuffer parms = new StringBuffer(); + for (String str : ids) { + if (parms.length()==0) { + parms.append("'"+str+"'"); + }else{ + parms.append(",'"+str+"'"); + } + } + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select distinct O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,ca.BANK_NAME,ca.ACCOUNT_PROVINCE,ca.BANK_DEPOSIT,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where ca.customerid=O.customer_id and O.contract_id=ca.contract_id and ca.acc_info = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + List codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false); + for (BizObject code : codelist) { + String itemname = code.getAttribute("itemname").toString().trim(); + double itemdescribe = code.getAttribute("itemdescribe").getDouble(); + if (bo.getAttribute("BANK_NAME") != null && bo.getAttribute("bank_name").toString().indexOf(itemname) !=-1 && Double.parseDouble(bo.getAttribute("rent").toString()) > itemdescribe) { + BigDecimal m = new BigDecimal(bo.getAttribute("rent").toString()); + int rent = m.multiply(new BigDecimal(100)).intValue(); + BigDecimal mi = new BigDecimal(itemdescribe); + long divide = mi.multiply(new BigDecimal(100)).longValue(); + int k = (int) Math.floor(rent/divide); + int l = (int) Math.ceil(rent%divide); + int im = 0; + for (int k2 = 1; k2 <= k; k2++) { + Map map = singleCollectMoeny(tx,bc,bo,itemdescribe+"",k2+""); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + im++; + }else{ + j++; + } + } + if (l != 0) { + String surprent = String.valueOf(new DecimalFormat("#.00").format(bo.getAttribute("rent").getDouble() - k*itemdescribe)); + String hire_list = (k+1)+""; + Map map = singleCollectMoeny(tx,bc,bo,surprent,hire_list); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + im++; + }else{ + j++; + } + } + if(im > 1 && ((l != 0 && im != (k+1))||(l == 0 && im != k))){ + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS where O.id=:id") + .setParameter("COLLECT_STATUS", "部分收款") + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + } + }else { + Map map = singleCollectMoeny(tx,bc,bo,bo.getAttribute("rent").toString(),"1"); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + }else{ + j++; + } + } + } + /*if (bo.getAttribute("BANK_NAME") != null && bo.getAttribute("bank_name").toString().indexOf("建设银行") !=-1 && Double.parseDouble(bo.getAttribute("rent").toString()) > 5000) { + BigDecimal m = new BigDecimal(bo.getAttribute("rent").toString()); + int rent = m.multiply(new BigDecimal(100)).intValue(); + int k = (int) Math.floor(rent/500000); + int l = (int) Math.ceil(rent%500000); + int im = 0; + for (int k2 = 1; k2 <= k; k2++) { + Map map = singleCollectMoeny(tx,bc,bo,"5000.00",k2+""); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + im++; + }else{ + j++; + } + } + if (l != 0) { + String surprent = String.valueOf(new DecimalFormat("#.00").format(bo.getAttribute("rent").getDouble() - k*5000)); + String hire_list = (k+1)+""; + Map map = singleCollectMoeny(tx,bc,bo,surprent,hire_list); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + im++; + }else{ + j++; + } + } + if(im > 1 && ((l != 0 && im != (k+1))||(l == 0 && im != k))){ + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS where O.id=:id") + .setParameter("COLLECT_STATUS", "部分收款") + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + } + }else { + Map map = singleCollectMoeny(tx,bc,bo,bo.getAttribute("rent").toString(),"1"); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + }else{ + j++; + } + }*/ + } + + return "总共有 "+i+" 笔租金收款成功\n"+j+" 笔租金收款失败"; + } + + /** + * 接口代付 + * @param tx + * @param bc + * @param bo + * @param rent + * @return + * @throws Exception + */ + public Map singleCollectMoeny(JBOTransaction tx,BizObjectManager bc,BizObject bo,String rent,String hire_list) throws Exception{ + CollectAuditProcess cp = new CollectAuditProcess(); + //创建文件名称 + String currentDateTime = DateAssistant.getTodayNow(); + String currentYear = currentDateTime.substring(0,4); + String month = currentDateTime.substring(5,7); + String day = currentDateTime.substring(8,10); + String merchantNumber = InitCollectConfig.MERCHANTID; + String flag = InitCollectConfig.FLAG; + String version = InitCollectConfig.C_VERSION; + String date = currentYear+month+day;//提交日期 + String batch_title = ""; + int i = 0,j = 0; + //创建文件路径 + String rootDir = this.fileSavePath; + File file = new File(rootDir + File.separator + currentYear + + File.separator + month + File.separator + + day); + System.out.println(file.getAbsolutePath()); + if(!file.exists()){//目录不存在则直接创建 + file.mkdirs(); + } + String req_sn = System.currentTimeMillis()+"";//当日批次号 + batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn; + BigDecimal m = new BigDecimal(rent); + String fact_rent = String.valueOf(m.multiply(new BigDecimal(100)).intValue()); + String acc_number = bo.getAttribute("ACC_NUMBER").toString(); + String account = bo.getAttribute("ACCOUNT").toString(); + String bank_code = bo.getAttribute("BANK_DEPOSIT").toString(); + String province = bo.getAttribute("ACCOUNT_PROVINCE").toString(); + StringBuffer strbuff = collectTimely(fact_rent, acc_number, account,bank_code,province, req_sn); + //响应报文 + String strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title); + Map map = getRetAndCode(strResp); + if ("0000".equals(map.get("RET_CODE"))) { + i++; + }else{ + j++; + } + if (map.containsKey("RET_CODE") && "0000".equals(map.get("RET_CODE"))) { + String cerrentDate = DateAssistant.getToday(); + JBOTransaction transaction = JBOFactory.createJBOTransaction(); + BizObjectManager bmi = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,transaction); + BizObject boi = bmi.createQuery("select v.sys_guid() as v.id,O.QUOT_ID as v.QUOT_ID,O.CUST_ID as v.CUST_ID,O.PROJECT_ID as v.PROJECT_ID,O.PROJECT_PLAN_NUMBER as v.PROJECT_PLAN_NUMBER," + + "O.CONTRACT_ID as v.CONTRACT_ID,O.CONTRACT_PLAN_NUMBER as v.CONTRACT_PLAN_NUMBER,O.PAYMENT_NUMBER as v.PAYMENT_NUMBER,'' as v.EBANK_NUMBER,O.id as v.PLAN_ID,O.PLAN_LIST as v.PLAN_LIST," + + "'0' as v.INTEREST_ADJUST,'settlemethod6' as v.SETTLE_METHOD,'"+hire_list+"' as v.HIRE_LIST,'"+cerrentDate+"' as v.HIRE_DATE,'"+rent+"' as v.RENT,case when ("+rent+" - vl.interest_over) > 0 then ("+rent+" - vl.interest_over) else 0 end as v.CORPUS,case when ("+rent+" - vl.interest_over) > 0 then (vl.interest_over) else "+rent+" end as v.INTEREST,vl.penalty_over as v.PENALTY," + + "'0' as v.CORPUS_ADJUST,'0' as v.PENALTY_ADJUST,'0' as v.ROLL_BACK,O.COIN as v.COIN from O, jbo.app.tenwa.calc.VI_LC_RENT_PLAN vl where O.id = vl.id" + + " and vl.contract_id =:contract_id and vl.plan_date =:plan_date") + .setParameter("contract_id", bo.getAttribute("contract_id").toString()) + .setParameter("plan_date", bo.getAttribute("plan_date").toString()).getSingleResult(false); + if (boi != null) { + //插入数据 + String sql = "insert into LC_RENT_INCOME (ID, QUOT_ID, CUST_ID, PROJECT_ID, PROJECT_PLAN_NUMBER, CONTRACT_ID, CONTRACT_PLAN_NUMBER, PAYMENT_NUMBER,EBANK_NUMBER,PLAN_ID, PLAN_LIST," + + " INTEREST_ADJUST,SETTLE_METHOD,HIRE_LIST,HIRE_DATE, RENT,CORPUS,INTEREST,PENALTY,CORPUS_ADJUST,PENALTY_ADJUST,ROLL_BACK,COIN)" + + "values ('"+boi.getAttribute("id")+"','"+boi.getAttribute("QUOT_ID")+"','"+boi.getAttribute("CUST_ID")+"','"+boi.getAttribute("PROJECT_ID")+"','"+boi.getAttribute("PROJECT_PLAN_NUMBER")+"'," + + "'"+boi.getAttribute("CONTRACT_ID")+"','"+boi.getAttribute("CONTRACT_PLAN_NUMBER")+"','"+boi.getAttribute("PAYMENT_NUMBER")+"','"+boi.getAttribute("EBANK_NUMBER")+"','"+boi.getAttribute("PLAN_ID")+"'," + + "'"+boi.getAttribute("PLAN_LIST")+"','"+boi.getAttribute("INTEREST_ADJUST")+"','"+boi.getAttribute("SETTLE_METHOD")+"','"+boi.getAttribute("HIRE_LIST")+"','"+boi.getAttribute("HIRE_DATE")+"','"+boi.getAttribute("RENT")+"','"+boi.getAttribute("CORPUS")+"'," + + "'"+boi.getAttribute("INTEREST")+"','"+boi.getAttribute("PENALTY")+"','"+boi.getAttribute("CORPUS_ADJUST")+"','"+boi.getAttribute("PENALTY_ADJUST")+"','"+boi.getAttribute("ROLL_BACK")+"','"+boi.getAttribute("COIN")+"')"; + Transaction Sqlca =null; + Sqlca = Transaction.createTransaction(transaction); + SqlObject asql = new SqlObject(sql); + Sqlca.executeSQL(asql); + } + transaction.commit(); + } + BizObject bco = bc.createQuery("id=:id").setParameter("id", bo.getAttribute("id").toString()).getSingleResult(false); + String batch_number = bco.getAttribute("batch_number").toString(); + if ("0000".equals(map.get("RET_CODE"))){ + if (batch_number.length() == 0) { + batch_number += "交易成功流水为:"+req_sn; + }else{ + batch_number += ";交易成功流水为:"+req_sn; + } + }else{ + if (batch_number.length() == 0) { + batch_number += "交易失败流水为:"+req_sn; + }else{ + batch_number += ";交易失败流水为:"+req_sn; + } + } + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_NUMBER=:BATCH_NUMBER where O.id=:id") + .setParameter("COLLECT_STATUS", "0000".equals(map.get("RET_CODE")) ? "收款成功" : "未收款") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("BATCH_NUMBER", batch_number) + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + //生成存盘、回盘文件 + savaFile(tx, strResp,batch_title,bo); + + return map; + } + + /** + * 手动回笼租金 + * @param tx + * @param bc + * @param bo + * @param rent + * @return + * @throws Exception + */ + public Map handcraftsingleCollectMoeny(JBOTransaction tx,BizObjectManager bc,BizObject bo,String rent,String hire_list) throws Exception{ + String cerrentDate = DateAssistant.getToday();//获取当前日期,格式为:yyyy/MM/dd + Map map = new HashMap(); + JBOTransaction transaction = JBOFactory.createJBOTransaction(); + BizObjectManager bmi = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,transaction); + BizObject boi = bmi.createQuery("select v.sys_guid() as v.id,O.QUOT_ID as v.QUOT_ID,O.CUST_ID as v.CUST_ID,O.PROJECT_ID as v.PROJECT_ID,O.PROJECT_PLAN_NUMBER as v.PROJECT_PLAN_NUMBER," + + "O.CONTRACT_ID as v.CONTRACT_ID,O.CONTRACT_PLAN_NUMBER as v.CONTRACT_PLAN_NUMBER,O.PAYMENT_NUMBER as v.PAYMENT_NUMBER,'' as v.EBANK_NUMBER,O.id as v.PLAN_ID,O.PLAN_LIST as v.PLAN_LIST," + + "'0' as v.INTEREST_ADJUST,'settlemethod6' as v.SETTLE_METHOD,'"+hire_list+"' as v.HIRE_LIST,'"+cerrentDate+"' as v.HIRE_DATE,'"+rent+"' as v.RENT,("+rent+"-vl.interest_over) as v.CORPUS,vl.interest_over as v.INTEREST,vl.penalty_over as v.PENALTY," + + "'0' as v.CORPUS_ADJUST,'0' as v.PENALTY_ADJUST,'0' as v.ROLL_BACK,O.COIN as v.COIN from O, jbo.app.tenwa.calc.VI_LC_RENT_PLAN vl where O.id = vl.id" + + " and vl.contract_id =:contract_id and vl.plan_date =:plan_date") + .setParameter("contract_id", bo.getAttribute("contract_id").toString()) + .setParameter("plan_date", bo.getAttribute("plan_date").toString()).getSingleResult(false); + if (boi != null) { + //插入数据 + String sql = "insert into LC_RENT_INCOME (ID, QUOT_ID, CUST_ID, PROJECT_ID, PROJECT_PLAN_NUMBER, CONTRACT_ID, CONTRACT_PLAN_NUMBER, PAYMENT_NUMBER,EBANK_NUMBER,PLAN_ID, PLAN_LIST," + + " INTEREST_ADJUST,SETTLE_METHOD,HIRE_LIST,HIRE_DATE, RENT,CORPUS,INTEREST,PENALTY,CORPUS_ADJUST,PENALTY_ADJUST,ROLL_BACK,COIN)" + + "values ('"+boi.getAttribute("id")+"','"+boi.getAttribute("QUOT_ID")+"','"+boi.getAttribute("CUST_ID")+"','"+boi.getAttribute("PROJECT_ID")+"','"+boi.getAttribute("PROJECT_PLAN_NUMBER")+"'," + + "'"+boi.getAttribute("CONTRACT_ID")+"','"+boi.getAttribute("CONTRACT_PLAN_NUMBER")+"','"+boi.getAttribute("PAYMENT_NUMBER")+"','"+boi.getAttribute("EBANK_NUMBER")+"','"+boi.getAttribute("PLAN_ID")+"'," + + "'"+boi.getAttribute("PLAN_LIST")+"','"+boi.getAttribute("INTEREST_ADJUST")+"','"+boi.getAttribute("SETTLE_METHOD")+"','"+boi.getAttribute("HIRE_LIST")+"','"+boi.getAttribute("HIRE_DATE")+"','"+boi.getAttribute("RENT")+"','"+boi.getAttribute("CORPUS")+"'," + + "'"+boi.getAttribute("INTEREST")+"','"+boi.getAttribute("PENALTY")+"','"+boi.getAttribute("CORPUS_ADJUST")+"','"+boi.getAttribute("PENALTY_ADJUST")+"','"+boi.getAttribute("ROLL_BACK")+"','"+boi.getAttribute("COIN")+"')"; + Transaction Sqlca =null; + Sqlca = Transaction.createTransaction(transaction); + SqlObject asql = new SqlObject(sql); + Sqlca.executeSQL(asql); + } + transaction.commit(); + BizObject bco = bc.createQuery("id=:id").setParameter("id", bo.getAttribute("id").toString()).getSingleResult(false); + String batch_number = bco.getAttribute("batch_number").toString(); + if (batch_number.length() == 0) { + batch_number += "手工付款金额:"+rent; + }else{ + batch_number += ";手工付款金额:"+rent; + } + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_NUMBER=:BATCH_NUMBER where O.id=:id") + .setParameter("COLLECT_STATUS", "收款成功") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("BATCH_NUMBER", batch_number) + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + map.put("RET_CODE", "0000"); + return map; + } + /** + * 手动收款修改状态,回笼租金 + * @param tx + * @return + * @throws Exception + */ + public String afterCollectManage(JBOTransaction tx) throws Exception{ + int i = 0,j = 0; + String[] ids = id.split("@"); + StringBuffer parms = new StringBuffer(); + for (String str : ids) { + if (parms.length()==0) { + parms.append("'"+str+"'"); + }else{ + parms.append(",'"+str+"'"); + } + } + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select distinct O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where ca.customerid=O.customer_id and O.contract_id=ca.contract_id and ca.acc_info = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + Map map = handcraftsingleCollectMoeny(tx,bc,bo,bo.getAttribute("rent").toString(),"1"); + i++; + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG where O.id=:id") + .setParameter("COLLECT_STATUS", "手工收款") + .setParameter("COLLECT_MSG", "手工扣款") + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + + } + + return "总共有 "+i+" 笔租金收款成功\n"+j+" 笔租金收款失败"; + } + /** + * 实时代收 + * @param rent 租金 + * @param acc_number 银行卡号 + * @param account 开户名 + * @param bankcode 银行代码 + * @param province 银行卡所属省份 + * @param req_sn 请求流水号 + * @return + */ + public StringBuffer collectTimely(String rent,String acc_number,String account,String bankcode,String province,String req_sn){ + //拼接XML报文 + String req = System.currentTimeMillis()+""; + StringBuffer strbuff = new StringBuffer(); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + Info info = new Info(); + info.setTRX_CODE(InitCollectConfig.C_TRXCODE); + info.setVERSION(InitCollectConfig.C_VERSION); + info.setDATA_TYPE(InitCollectConfig.C_DATATYPE); + info.setLEVEL(InitCollectConfig.C_LEVEL); + info.setUSER_NAME(InitCollectConfig.USERNAME); + info.setUSER_PASS(InitCollectConfig.USERPASS); + info.setREQ_SN(req_sn); + info.setSIGNED_MSG(""); + strbuff.append(EntityTransform.toXml(info)); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + Trans_Sum trans_sum = new Trans_Sum(); + trans_sum.setBUSINESS_CODE(InitCollectConfig.BUSSINESSCODE); + trans_sum.setMERCHANT_ID(InitCollectConfig.MERCHANTID); + trans_sum.setEXPECT_SEND_TIME(""); + trans_sum.setTOTAL_ITEM("1"); + trans_sum.setTOTAL_SUM(rent); + strbuff.append(EntityTransform.toXml(trans_sum)); + strbuff.append(""); + strbuff.append(""); + Trans_Detail trans_detail = new Trans_Detail(); + trans_detail.setSN("0001"); + trans_detail.setBANK_CODE(bankcode);//银行代码 + trans_detail.setACCOUNT_TYPE("00"); + trans_detail.setACCOUNT_NO(acc_number); + trans_detail.setACCOUNT_NAME(account); + trans_detail.setPROVINCE(province);//银行卡所属省份 + trans_detail.setACCOUNT_PROP("0"); + trans_detail.setAMOUNT(rent); + trans_detail.setCURRENCY("CNY"); + trans_detail.setRECKON_ACCOUNT(""); + strbuff.append(EntityTransform.toXmlByLotCollect(trans_detail)); + strbuff.delete(strbuff.lastIndexOf(""), strbuff.length()); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + + return strbuff; + } + + /** + * 批量代收-发送请求 + * @param tx + * @return + * @throws Exception + */ + public String batchCollectManage(JBOTransaction tx) throws Exception{ + int i = 0,j = 0; + String[] ids = id.split("@"); + StringBuffer parms = new StringBuffer(); + for (String str : ids) { + if (parms.length()==0) { + parms.append("'"+str+"'"); + }else{ + parms.append(",'"+str+"'"); + } + } + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select distinct O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,ca.ACCOUNT_PROVINCE,ca.BANK_DEPOSIT,ca.BANK_NAME,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where ca.customerid=O.customer_id and O.contract_id=ca.contract_id and ca.acc_info = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false); + if (bolist.size() != 0) { + singleBatchCollectMoeny(tx, bolist); + } + return "系统正在处理中,请稍后"; + } + + /** + * 查询批量收款状态 + * @return + * @throws Exception + */ + public String queryBatchCollectStatus(JBOTransaction tx,StringBuffer parms) throws Exception{ + BizObjectManager bm = JBOFactory.getFactory().getManager(VI_LC_AUDIT_RENT_PLAN.CLASS_NAME); + BizObjectManager bc = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME); + List bolist = bm.createQuery("select distinct O.BATCH_NO,O.BATCH_SN,O.contract_id,O.plan_date,O.id,ca.ACC_NUMBER,ca.ACCOUNT,ca.ACCOUNT_PROVINCE,ca.BANK_DEPOSIT,ca.BANK_NAME,O.rent from O , jbo.app.tenwa.customer.CUSTOMER_ACCOUNT ca where ca.customerid=O.customer_id and O.contract_id=ca.contract_id and ca.acc_info = 'Debit' and O.id in ("+parms.toString()+")").getResultList(false); + for (BizObject bo : bolist) { + String query_sn = bo.getAttribute("BATCH_NO").toString(); + String sn = bo.getAttribute("BATCH_SN").toString(); + String rent = bo.getAttribute("rent").toString(); + String bank_name = bo.getAttribute("BANK_NAME").toString(); + int m = 0; + String[] singleRent = null; + List codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false); + for (BizObject code : codelist) { + String itemname = code.getAttribute("itemname").toString().trim(); + double itemdescribe = code.getAttribute("itemdescribe").getDouble(); + if (bank_name.indexOf(itemname) !=-1 && Double.parseDouble(bo.getAttribute("rent").toString()) > itemdescribe) { + BigDecimal mi = new BigDecimal(bo.getAttribute("rent").toString()); + int singlerent = mi.multiply(new BigDecimal(100)).intValue(); + BigDecimal mj = new BigDecimal(itemdescribe); + long divide = mj.multiply(new BigDecimal(100)).longValue(); + int k = (int) Math.floor(singlerent/divide); + int l = (int) Math.ceil(singlerent%divide); + for (int j = 0; j < k; j++) { + m++; + } + if (l!=0) { + m++; + } + singleRent = new String[m]; + for (int i = 0; i < k; i++) { + singleRent[i] = itemdescribe+""; + } + singleRent[m-1] = String.format("%.2f",bo.getAttribute("rent").getDouble() - k*itemdescribe); + break;//如果匹配到,则跳出循环 + } + } + String[] snArray = sn.split(","); + int n = 0;//拆分租金,扣款成功记录 + for (int i = 1; i <= snArray.length; i++) { + Map map = querySingleBatchCollect(tx, bo, query_sn, snArray[(i-1)]); + if (snArray.length == 1) { + if (map.containsKey("RET_CODE") && "0000".equals(map.get("RET_CODE"))) { + querysingleCollectMoeny(tx, bc, bo, rent,i+""); + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_STATUS=:BATCH_STATUS where O.id=:id") + .setParameter("COLLECT_STATUS", "批量收款") + .setParameter("COLLECT_MSG", "批量代收,收款成功") + .setParameter("BATCH_STATUS", "complete")//更新批量处理状态-完成 + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + }else if (map.containsKey("RET_CODE") && ("2007".equals(map.get("RET_CODE")) || "2005".equals(map.get("RET_CODE")) || "2003".equals(map.get("RET_CODE")) || "2001".equals(map.get("RET_CODE")) || "2000".equals(map.get("RET_CODE")))){ + //更新银联处理中的反馈信息 + bc.createQuery("update O set O.COLLECT_MSG=:COLLECT_MSG where O.id=:id") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + }else{ + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO='',O.BATCH_SN='' where O.id=:id") + .setParameter("COLLECT_STATUS", "未收款") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("BATCH_STATUS", "")//清空批量处理状态 + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + } + }else if (snArray.length > 1) { + if (map.containsKey("RET_CODE") && "0000".equals(map.get("RET_CODE"))) { + querysingleCollectMoeny(tx, bc, bo, singleRent[i-1],i+""); + n++; + if (n == snArray.length) { + n = 0;//将扣款成功项 置为 0 + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_STATUS=:BATCH_STATUS where O.id=:id") + .setParameter("COLLECT_STATUS", "批量收款") + .setParameter("COLLECT_MSG", "批量代收,收款成功") + .setParameter("BATCH_STATUS", "complete")//更新批量处理状态-完成 + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + }else{ + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_STATUS=:BATCH_STATUS where O.id=:id") + .setParameter("COLLECT_STATUS", "部分收款") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("BATCH_STATUS", "complete")//清空批量处理状态-完成 + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + } + }else if (map.containsKey("RET_CODE") && ("2007".equals(map.get("RET_CODE")) || "2005".equals(map.get("RET_CODE")) || "2003".equals(map.get("RET_CODE")) || "2001".equals(map.get("RET_CODE")) || "2000".equals(map.get("RET_CODE")))){ + //更新银联处理中的反馈信息 + bc.createQuery("update O set O.COLLECT_MSG=:COLLECT_MSG where O.id=:id") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + }else{//批量拆分多笔扣款,如果扣款成功条数未 0 ,则更新扣款状态为 未扣款 + if (i == snArray.length && n == 0) { + //更新收付状态 + bc.createQuery("update O set O.COLLECT_STATUS=:COLLECT_STATUS ,O.COLLECT_MSG=:COLLECT_MSG,O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO='',O.BATCH_SN='' where O.id=:id") + .setParameter("COLLECT_STATUS", "未收款") + .setParameter("COLLECT_MSG", map.get("ERR_MSG")) + .setParameter("BATCH_STATUS", "")//清空批量处理状态 + .setParameter("id", bo.getAttribute("id").toString()).executeUpdate(); + } + } + } + if (i == snArray.length) {//循环结束,将n置为 0 + n = 0; + } + } + } + + return "sucess"; + + } + /** + * 批量代收查询接口 + * @param tx + * @param bo + * @param list + * @return + * @throws Exception + */ + public Map querySingleBatchCollect(JBOTransaction tx,BizObject bo,String query_sn,String sn) throws Exception{ + CollectAuditProcess cp = new CollectAuditProcess(); + //创建文件名称 + String currentDateTime = DateAssistant.getTodayNow(); + String currentYear = currentDateTime.substring(0,4); + String month = currentDateTime.substring(5,7); + String day = currentDateTime.substring(8,10); + String merchantNumber = InitCollectConfig.MERCHANTID; + String flag = InitCollectConfig.FLAG; + String version = InitCollectConfig.C_VERSION; + String date = currentYear+month+day;//提交日期 + String batch_title = ""; + int i = 0,j = 0; + //创建文件路径 + String rootDir = this.fileSavePath; + File file = new File(rootDir + File.separator + currentYear + + File.separator + month + File.separator + + day); + System.out.println(file.getAbsolutePath()); + if(!file.exists()){//目录不存在则直接创建 + file.mkdirs(); + } + String req_sn = System.currentTimeMillis()+"";//当日批次号 + batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn; + StringBuffer strbuff = queryBatchXML(req_sn, query_sn, sn); + //响应报文 + String strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title); + Map map = getRetAndCode(strResp); + //生成存盘、回盘文件 + savaFile(tx, strResp,batch_title,bo); + + return map; + } + /** + * 批量查询接口--回笼租金 + * @param tx + * @param bc + * @param bo + * @param rent + * @return + * @throws Exception + */ + public Map querysingleCollectMoeny(JBOTransaction tx,BizObjectManager bc,BizObject bo,String rent,String hire_list) throws Exception{ + String cerrentDate = DateAssistant.getToday(); + Map map = new HashMap(); + JBOTransaction transaction = JBOFactory.createJBOTransaction(); + BizObjectManager bmi = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,transaction); + BizObject boi = bmi.createQuery("select v.sys_guid() as v.id,O.QUOT_ID as v.QUOT_ID,O.CUST_ID as v.CUST_ID,O.PROJECT_ID as v.PROJECT_ID,O.PROJECT_PLAN_NUMBER as v.PROJECT_PLAN_NUMBER," + + "O.CONTRACT_ID as v.CONTRACT_ID,O.CONTRACT_PLAN_NUMBER as v.CONTRACT_PLAN_NUMBER,O.PAYMENT_NUMBER as v.PAYMENT_NUMBER,'' as v.EBANK_NUMBER,O.id as v.PLAN_ID,O.PLAN_LIST as v.PLAN_LIST," + + "'0' as v.INTEREST_ADJUST,'settlemethod6' as v.SETTLE_METHOD,'"+hire_list+"' as v.HIRE_LIST,'"+cerrentDate+"' as v.HIRE_DATE,'"+rent+"' as v.RENT,case when ("+rent+" - vl.interest_over) > 0 then ("+rent+" - vl.interest_over) else 0 end as v.CORPUS,case when ("+rent+" - vl.interest_over) > 0 then (vl.interest_over) else "+rent+" end as v.INTEREST,vl.penalty_over as v.PENALTY," + + "'0' as v.CORPUS_ADJUST,'0' as v.PENALTY_ADJUST,'0' as v.ROLL_BACK,O.COIN as v.COIN from O, jbo.app.tenwa.calc.VI_LC_RENT_PLAN vl where O.id = vl.id" + + " and vl.contract_id =:contract_id and vl.plan_date =:plan_date") + .setParameter("contract_id", bo.getAttribute("contract_id").toString()) + .setParameter("plan_date", bo.getAttribute("plan_date").toString()).getSingleResult(false); + if (boi != null) { + //插入数据 + String sql = "insert into LC_RENT_INCOME (ID, QUOT_ID, CUST_ID, PROJECT_ID, PROJECT_PLAN_NUMBER, CONTRACT_ID, CONTRACT_PLAN_NUMBER, PAYMENT_NUMBER,EBANK_NUMBER,PLAN_ID, PLAN_LIST," + + " INTEREST_ADJUST,SETTLE_METHOD,HIRE_LIST,HIRE_DATE, RENT,CORPUS,INTEREST,PENALTY,CORPUS_ADJUST,PENALTY_ADJUST,ROLL_BACK,COIN)" + + "values ('"+boi.getAttribute("id")+"','"+boi.getAttribute("QUOT_ID")+"','"+boi.getAttribute("CUST_ID")+"','"+boi.getAttribute("PROJECT_ID")+"','"+boi.getAttribute("PROJECT_PLAN_NUMBER")+"'," + + "'"+boi.getAttribute("CONTRACT_ID")+"','"+boi.getAttribute("CONTRACT_PLAN_NUMBER")+"','"+boi.getAttribute("PAYMENT_NUMBER")+"','"+boi.getAttribute("EBANK_NUMBER")+"','"+boi.getAttribute("PLAN_ID")+"'," + + "'"+boi.getAttribute("PLAN_LIST")+"','"+boi.getAttribute("INTEREST_ADJUST")+"','"+boi.getAttribute("SETTLE_METHOD")+"','"+boi.getAttribute("HIRE_LIST")+"','"+boi.getAttribute("HIRE_DATE")+"','"+boi.getAttribute("RENT")+"','"+boi.getAttribute("CORPUS")+"'," + + "'"+boi.getAttribute("INTEREST")+"','"+boi.getAttribute("PENALTY")+"','"+boi.getAttribute("CORPUS_ADJUST")+"','"+boi.getAttribute("PENALTY_ADJUST")+"','"+boi.getAttribute("ROLL_BACK")+"','"+boi.getAttribute("COIN")+"')"; + Transaction Sqlca =null; + Sqlca = Transaction.createTransaction(transaction); + SqlObject asql = new SqlObject(sql); + Sqlca.executeSQL(asql); + } + transaction.commit(); + return map; + } + /** + * 批量查询接口报文-xml + * @param req_sn 请求流水号 + * @param query_sn 查询流水号 + * @param sn 查询明细项 + * @return + */ + public StringBuffer queryBatchXML(String req_sn,String query_sn,String sn){ + StringBuffer strbuff = new StringBuffer(); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + Info info = new Info(); + info.setTRX_CODE("200001"); + info.setVERSION(InitCollectConfig.C_VERSION); + info.setDATA_TYPE(InitCollectConfig.C_DATATYPE); + info.setREQ_SN(req_sn); + info.setUSER_NAME(InitCollectConfig.USERNAME); + info.setUSER_PASS(InitCollectConfig.USERPASS); + info.setSIGNED_MSG(""); + strbuff.append(EntityTransform.toXml(info)); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(query_sn);//要查询的交易流水 + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(sn);//交易明细号 + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + return strbuff; + } + /** + * 批量代收-发送请求 + * @param tx + * @param bc + * @param bo + * @param rent + * @return + * @throws Exception + */ + public Map singleBatchCollectMoeny(JBOTransaction tx,List list) throws Exception{ + CollectAuditProcess cp = new CollectAuditProcess(); + //创建文件名称 + String currentDateTime = DateAssistant.getTodayNow(); + String currentYear = currentDateTime.substring(0,4); + String month = currentDateTime.substring(5,7); + String day = currentDateTime.substring(8,10); + String merchantNumber = InitCollectConfig.MERCHANTID; + String flag = InitCollectConfig.FLAG; + String version = InitCollectConfig.C_VERSION; + String date = currentYear+month+day;//提交日期 + String batch_title = ""; + int i = 0,j = 0; + //创建文件路径 + String rootDir = this.fileSavePath; + File file = new File(rootDir + File.separator + currentYear + + File.separator + month + File.separator + + day); + System.out.println(file.getAbsolutePath()); + if(!file.exists()){//目录不存在则直接创建 + file.mkdirs(); + } + String req_sn = System.currentTimeMillis()+"";//当日批次号 + batch_title = merchantNumber+"_"+flag+version+date+"_"+req_sn; + StringBuffer strbuff = collectBatch(req_sn,list); + //响应报文 + String strResp = cp.CollectAuditPayReq(strbuff,file.getAbsolutePath(), batch_title); + for (BizObject bo : list) { + //生成存盘、回盘文件 + savaFile(tx, strResp,batch_title,bo); + } + Map map = getRetAndCodeByBatch(strResp); + if (map.containsKey("RET_CODE")) {//清空批量代收状态 + for (BizObject biz : list) { + //清空批量处理状态 + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id") + .setParameter("BATCH_STATUS", "")//处理中 + .setParameter("BATCH_NO", "") + .setParameter("BATCH_SN", "") + .setParameter("id", biz.getAttribute("id").toString()).executeUpdate(); + trans.commit(); + } + }else{ + int m = 0;//统计发送的代收的批数 + for (int n = 1; n <= map.size(); n++) { + if (map.containsKey("SN"+n)) { + m++; + } + } + for (int k = 1; k <= m; k++) { + if (map.containsKey("REQ_SN") && map.containsKey("RET_CODE"+k) && "0000".equals(map.get("RET_CODE"+k))) { + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + BizObject bo0 = bm.createQuery("O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%"+map.get("SN"+k)+"%'").setParameter("BATCH_NO", map.get("REQ_SN")).getSingleResult(false); + if (bo0 != null && "process".equals(bo0.getAttribute("BATCH_STATUS"))) { + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS where O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%"+map.get("SN"+k)+"%' ") + .setParameter("BATCH_STATUS", "process")//处理状态标记为--处理中 + .setParameter("BATCH_NO", map.get("REQ_SN")).executeUpdate(); + trans.commit(); + }else{ + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS where O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%"+map.get("SN"+k)+"%' ") + .setParameter("BATCH_STATUS", "process")//处理状态标记为--处理中 + .setParameter("BATCH_NO", map.get("REQ_SN")).executeUpdate(); + trans.commit(); + } + }else{ + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + BizObject bo0 = bm.createQuery("O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%"+map.get("SN"+k)+"%'").setParameter("BATCH_NO", map.get("REQ_SN")).getSingleResult(false); + if (bo0 != null && "process".equals(bo0.getAttribute("BATCH_STATUS"))) { + //不做任何操作 + }else{ + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO='',O.BATCH_SN='' where O.BATCH_NO=:BATCH_NO and O.BATCH_SN like '%"+map.get("SN"+k)+"%' ") + .setParameter("BATCH_STATUS", "")//清空批量处理状态 + .setParameter("BATCH_NO", map.get("REQ_SN")).executeUpdate(); + trans.commit(); + } + } + } + } + return map; + } + + /** + * 批量代收--报文拼接 + * @param rent + * @param acc_number + * @param account + * @param req_sn + * @return + * @throws JBOException + */ + public StringBuffer collectBatch(String req_sn,List list) throws JBOException{ + //拼接XML报文 + //String req = System.currentTimeMillis()+""; + StringBuffer strbuff = new StringBuffer(); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + Info info = new Info(); + info.setTRX_CODE(InitCollectConfig.BATCH_TRXCODE); + info.setVERSION(InitCollectConfig.C_VERSION); + info.setDATA_TYPE(InitCollectConfig.C_DATATYPE); + info.setLEVEL(InitCollectConfig.C_LEVEL); + info.setUSER_NAME(InitCollectConfig.USERNAME); + info.setUSER_PASS(InitCollectConfig.USERPASS); + info.setREQ_SN(req_sn); + info.setSIGNED_MSG(""); + strbuff.append(EntityTransform.toXml(info)); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + BigDecimal mutly = new BigDecimal("0"); + int i = 0; + for (BizObject bo : list) { + String single = bo.getAttribute("rent").toString(); + BigDecimal m = new BigDecimal(single); + mutly = mutly.add(m); + String bank_name = bo.getAttribute("BANK_NAME").toString(); + List codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false); + double itemdescribe = 0; + boolean flag = false; + for (BizObject code : codelist) { + String itemnameTmp = code.getAttribute("itemname").toString().trim(); + double itemdescribeTmp = code.getAttribute("itemdescribe").getDouble(); + String itemdescribeTmp1 = code.getAttribute("itemdescribe").toString(); + if (bank_name.indexOf(itemnameTmp) != -1 && itemdescribeTmp1 != null && !"".equals(itemdescribeTmp1)) { + itemdescribe = new BigDecimal(itemdescribeTmp).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + flag = true; + break; + } + } + + if (flag == true && Double.parseDouble(bo.getAttribute("rent").toString()) > itemdescribe) { + BigDecimal mi = new BigDecimal(bo.getAttribute("rent").toString()); + int singlerent = mi.multiply(new BigDecimal(100)).intValue(); + int singleitem = new BigDecimal(itemdescribe).multiply(new BigDecimal(100)).intValue(); + int k = (int) Math.floor(singlerent/singleitem); + int l = (int) Math.ceil(singlerent%singleitem); + for (int j = 0; j < k; j++) { + i++; + } + if (l!=0) { + i++; + } + }else{ + i++; + } + + } + String totalSum = String.valueOf(mutly.multiply(new BigDecimal(100)).longValue()); + String totalItem = String.valueOf(i); + Trans_Sum trans_sum = new Trans_Sum(); + trans_sum.setBUSINESS_CODE(InitCollectConfig.BUSSINESSCODE); + trans_sum.setMERCHANT_ID(InitCollectConfig.MERCHANTID); + trans_sum.setEXPECT_SEND_TIME(""); + trans_sum.setTOTAL_ITEM(totalItem); + trans_sum.setTOTAL_SUM(totalSum); + strbuff.append(EntityTransform.toXml(trans_sum)); + strbuff.append(""); + strbuff.append(""); + int item = 0; + for (BizObject biz : list) { + BigDecimal m = new BigDecimal(biz.getAttribute("rent").toString()); + String rent = String.valueOf(m.multiply(new BigDecimal(100)).longValue()); + String acc_number = biz.getAttribute("acc_number").toString(); + String account = biz.getAttribute("account").toString(); + String bank_name = biz.getAttribute("BANK_NAME").toString(); + String bank_code = biz.getAttribute("BANK_DEPOSIT").toString(); + String province = biz.getAttribute("ACCOUNT_PROVINCE").toString(); + + List codelist = JBOFactory.getFactory().getBizObjectManager(CODE_LIBRARY.CLASS_NAME).createQuery("O.codeno = 'bankType' and O.itemdescribe is not null ").getResultList(false); + double itemdescribe = 0; + boolean flag = false; + for (BizObject code : codelist) { + String itemnameTmp = code.getAttribute("itemname").toString().trim(); + double itemdescribeTmp = code.getAttribute("itemdescribe").getDouble(); + String itemdescribeTmp1 = code.getAttribute("itemdescribe").toString(); + if (bank_name.indexOf(itemnameTmp) != -1 && itemdescribeTmp1 != null && !"".equals(itemdescribeTmp1)) { + itemdescribe = new BigDecimal(itemdescribeTmp).setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue(); + flag = true; + break; + } + } + if (flag == true && Double.parseDouble(biz.getAttribute("rent").toString()) > itemdescribe) { + BigDecimal mi = new BigDecimal(biz.getAttribute("rent").toString()); + int singlerent = mi.multiply(new BigDecimal(100)).intValue(); + int singleitem = new BigDecimal(itemdescribe).multiply(new BigDecimal(100)).intValue(); + int k = (int) Math.floor(singlerent/singleitem); + int l = (int) Math.ceil(singlerent%singleitem); + for (int k2 = 1; k2 <= k; k2++) { + Trans_Detail trans_detail = new Trans_Detail(); + String sn = ""; + if (item >= 10) { + sn = "000"+ (++item); + }else if(item >= 100){ + sn = "00"+ (++item); + }else{ + sn = "0000"+ (++item); + } + //追加批量处理状态 + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + BizObject bo = bm.createQuery("O.id=:id").setParameter("id", biz.getAttribute("id").toString()).getSingleResult(false); + String itemsn0 = ""; + if (bo !=null) { + String itemsn = bo.getAttribute("batch_sn").toString(); + if (itemsn.length() == 0) { + itemsn0 += sn; + }else{ + itemsn0 += itemsn+","+sn; + } + } + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id") + .setParameter("BATCH_STATUS", "")//处理状态-为空 + .setParameter("BATCH_NO", req_sn) + .setParameter("BATCH_SN", itemsn0) + .setParameter("id", biz.getAttribute("id").toString()).executeUpdate(); + trans.commit(); + trans_detail.setSN(sn); + trans_detail.setBANK_CODE(bank_code); + trans_detail.setACCOUNT_TYPE(""); + trans_detail.setACCOUNT_NO(acc_number); + trans_detail.setACCOUNT_NAME(account); + trans_detail.setPROVINCE(province); + trans_detail.setACCOUNT_PROP("0"); + trans_detail.setAMOUNT(String.valueOf(singleitem)); + trans_detail.setCURRENCY("CNY"); + trans_detail.setRECKON_ACCOUNT(""); + strbuff.append(EntityTransform.toXmlByBatchCollect(trans_detail)); + } + if (l != 0) { + String surprent = String.format("%.2f", biz.getAttribute("rent").getDouble() - k*itemdescribe); + BigDecimal mj = new BigDecimal(surprent); + String singlerent0 = String.valueOf(mj.multiply(new BigDecimal(100)).longValue()); + Trans_Detail trans_detail = new Trans_Detail(); + String sn = ""; + if (item >= 10) { + sn = "000"+ (++item); + }else if(item >= 100){ + sn = "00"+ (++item); + }else{ + sn = "0000"+ (++item); + } + //追加批量处理状态 + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + BizObject bo = bm.createQuery("O.id=:id").setParameter("id", biz.getAttribute("id").toString()).getSingleResult(false); + String itemsn0 = ""; + if (bo !=null) { + String itemsn = bo.getAttribute("batch_sn").toString(); + if (itemsn.length() == 0) { + itemsn0 += sn; + }else{ + itemsn0 += itemsn+","+sn; + } + } + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id") + .setParameter("BATCH_STATUS", "")//处理状态-为空 + .setParameter("BATCH_NO", req_sn) + .setParameter("BATCH_SN", itemsn0) + .setParameter("id", biz.getAttribute("id").toString()).executeUpdate(); + trans.commit(); + trans_detail.setSN(sn); + trans_detail.setBANK_CODE(bank_code); + trans_detail.setACCOUNT_TYPE(""); + trans_detail.setACCOUNT_NO(acc_number); + trans_detail.setACCOUNT_NAME(account); + trans_detail.setPROVINCE(province); + trans_detail.setACCOUNT_PROP("0"); + trans_detail.setAMOUNT(singlerent0); + trans_detail.setCURRENCY("CNY"); + trans_detail.setRECKON_ACCOUNT(""); + strbuff.append(EntityTransform.toXmlByBatchCollect(trans_detail)); + } + }else{ + Trans_Detail trans_detail = new Trans_Detail(); + String sn = ""; + if (item >= 10) { + sn = "000"+ (++item); + }else if(item >= 100){ + sn = "00"+ (++item); + }else{ + sn = "0000"+ (++item); + } + //追加批量处理状态 + JBOTransaction trans = JBOFactory.createJBOTransaction(); + BizObjectManager bm = JBOFactory.getFactory().getManager(LC_RENT_PLAN.CLASS_NAME,trans); + bm.createQuery("update O set O.BATCH_STATUS=:BATCH_STATUS,O.BATCH_NO=:BATCH_NO,O.BATCH_SN=:BATCH_SN where O.id=:id") + .setParameter("BATCH_STATUS", "")//处理状态-为空 + .setParameter("BATCH_NO", req_sn) + .setParameter("BATCH_SN", sn) + .setParameter("id", biz.getAttribute("id").toString()).executeUpdate(); + trans.commit(); + trans_detail.setSN(sn); + trans_detail.setBANK_CODE(bank_code); + trans_detail.setACCOUNT_TYPE(""); + trans_detail.setACCOUNT_NO(acc_number); + trans_detail.setACCOUNT_NAME(account); + trans_detail.setPROVINCE(province); + trans_detail.setACCOUNT_PROP("0"); + trans_detail.setAMOUNT(rent); + trans_detail.setCURRENCY("CNY"); + trans_detail.setRECKON_ACCOUNT(""); + strbuff.append(EntityTransform.toXmlByBatchCollect(trans_detail)); + } + } + strbuff.delete(strbuff.lastIndexOf(""), strbuff.length()); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + + + return strbuff; + } + + /** + * 保存存盘、回盘文件 + * @param tx + * @param strResp + * @param batch_title + * @throws Exception + */ + public void savaFile(JBOTransaction tx,String strResp,String batch_title,BizObject bo) throws Exception{ + //创建文件名称 + String currentDateTime = DateAssistant.getTodayNow(); + String currentYear = currentDateTime.substring(0,4); + String month = currentDateTime.substring(5,7); + String day = currentDateTime.substring(8,10); + //创建文件路径 + String rootDir = this.fileSavePath; + File file = new File(rootDir + File.separator + currentYear + + File.separator + month + File.separator + + day); + System.out.println(file.getAbsolutePath()); + if(!file.exists()){//目录不存在则直接创建 + file.mkdirs(); + } + //保存存盘文件 + BizObjectManager bm = JBOFactory.getFactory().getManager(LB_INTFACE_FILE_RECORD.CLASS_NAME); + BizObject send = bm.newObject(); + send.setAttributeValue("filepath", (file.getAbsoluteFile().toString().substring(rootDir.length())+"/"+batch_title+".txt").replace("\\", "/")); + send.setAttributeValue("fullpath", (file.getAbsoluteFile().toString()+"/"+batch_title+".txt").replace("\\", "/")); + send.setAttributeValue("filename", batch_title+".txt"); + send.setAttributeValue("FILE_TYPE", "S"); + send.setAttributeValue("RELA_ID", bo.getAttribute("id")); + send.setAttributeValue("inputuserid", this.inputuserid); + send.setAttributeValue("inputorgid", this.inputorgid); + send.setAttributeValue("inputtime", currentDateTime); + bm.saveObject(send); + //筛选响应信息 + Map map = getRetAndCode(strResp); + //getMsgAndCode(strResp); + + //保存回盘文件 + BizObject reply = bm.newObject(); + reply.setAttributeValue("filepath", (file.getAbsoluteFile().toString().substring(rootDir.length())+"/"+batch_title+".rnt").replace("\\", "/")); + reply.setAttributeValue("fullpath", (file.getAbsoluteFile().toString()+"/"+batch_title+".rnt").replace("\\", "/")); + reply.setAttributeValue("filename", batch_title+".rnt"); + reply.setAttributeValue("feedback_code", map.get("RET_CODE")); + reply.setAttributeValue("feedback_message", map.get("ERR_MSG")); + reply.setAttributeValue("FILE_TYPE", "B"); + reply.setAttributeValue("RELA_ID", bo.getAttribute("id")); + reply.setAttributeValue("inputuserid", this.inputuserid); + reply.setAttributeValue("inputorgid", this.inputorgid); + reply.setAttributeValue("inputtime", currentDateTime); + bm.saveObject(reply); + } + + /** + * 实时代收,响应文件处理 + * @param strXML + * @return + */ + public Map getRetAndCode(String strXML){ + Map map = new HashMap(); + Map res = new HashMap(); + Pattern pm = Pattern.compile("(?<=)([\\S\\s]*?)(?=)"); + Matcher mm = pm.matcher(strXML); + int i = 0; + while (mm.find()) + { + map.put("RET_CODE"+i++, mm.group()); + } + Pattern pc = Pattern.compile("(?<=)([\\S\\s]*?)(?=)"); + Matcher mc = pc.matcher(strXML); + int j = 0; + while (mc.find()) + { + map.put("ERR_MSG"+j++, mc.group()); + } + if (map.containsKey("RET_CODE0") && "0000".equals(map.get("RET_CODE0"))) { + if (map.containsKey("RET_CODE1") && "0000".equals(map.get("RET_CODE1"))) { + res.put("RET_CODE", map.get("RET_CODE1")); + res.put("ERR_MSG", map.get("ERR_MSG1")); + }else{ + res.put("RET_CODE", map.get("RET_CODE1")); + res.put("ERR_MSG", map.get("ERR_MSG1")); + } + }else{ + res.put("RET_CODE", map.get("RET_CODE0")); + res.put("ERR_MSG", map.get("ERR_MSG0")); + } + return res; + } + + /** + * 批量代收-返回报文处理 + * @param strXML + * @return + */ + public Map getRetAndCodeByBatch(String strXML){ + Map map = new HashMap(); + Map res = new HashMap(); + System.out.println(1); + int iStart = strXML.indexOf(""); + if (iStart != -1) { + int end = strXML.indexOf(""); + String errMsg = strXML.substring(iStart+9, end); + map.put("ERR_MSG", errMsg); + } + int kStart = strXML.indexOf(""); + if (kStart != -1) { + int end = strXML.indexOf(""); + String reqSn = strXML.substring(kStart+8, end); + map.put("REQ_SN", reqSn); + } + + Pattern pm = Pattern.compile("(?<=)([\\S\\s]*?)(?=)"); + Matcher mm = pm.matcher(strXML); + int i = 0; + while (mm.find()) + { + map.put("RET_CODE"+i++, mm.group()); + } + Pattern pc = Pattern.compile("(?<=)([\\S\\s]*?)(?=)"); + Matcher mc = pc.matcher(strXML); + int j = 1; + while (mc.find()) + { + map.put("SN"+j++, mc.group()); + } + if (map.containsKey("RET_CODE0") && "0000".equals(map.get("RET_CODE0"))) { + res.putAll(map); + res.remove("RET_CODE0"); + res.remove("ERR_MSG"); + }else{ + res.put("RET_CODE", map.get("RET_CODE0")); + res.put("ERR_MSG", map.get("ERR_MSG0")); + } + return res; + } + + public Map getMsgAndCode(String strXML){ + Map map = new HashMap(); + int iStart = strXML.indexOf(""); + if (iStart != -1) { + int end = strXML.indexOf(""); + String strMsg = strXML.substring(iStart+9, end); + map.put("ERR_MSG", strMsg); + } + int jStart = strXML.indexOf(""); + if (jStart != -1) { + int end = strXML.indexOf(""); + String strMsg = strXML.substring(jStart+10, end); + map.put("RET_CODE", strMsg); + } + return map; + } + + /** + * 获取响应码 + * @param strXML + * @return + */ + public Map getInfoAndStatus(String strXML){ + Map map = new HashMap(); + Map res = new HashMap(); + + int jStart = strXML.indexOf(""); + if (jStart != -1) { + int end = strXML.indexOf(""); + String retCode = strXML.substring(jStart+10, end); + map.put("RET_CODE", retCode); + } + int iStart = strXML.indexOf(""); + if (iStart != -1) { + int end = strXML.indexOf(""); + String errMsg = strXML.substring(iStart+9, end); + map.put("ERR_MSG", errMsg); + } + + int kStart = strXML.indexOf(""); + if (kStart != -1) { + int end = strXML.indexOf(""); + String errMsg = strXML.substring(kStart+14, end); + map.put("TRANS_STATUS", errMsg); + } + int lStart = strXML.indexOf(""); + if (lStart != -1) { + int end = strXML.indexOf(""); + String retCode = strXML.substring(lStart+12, end); + map.put("TRANS_INFO", retCode); + } + if (map.containsKey("RET_CODE") && map.get("RET_CODE").equals("0000")) { + if (map.containsKey("TRANS_STATUS") && map.get("TRANS_STATUS").equals("0000")) { + res.put("RET_CODE", map.get("TRANS_STATUS")); + res.put("ERR_MSG", map.get("TRANS_INFO")); + }else{ + res.put("RET_CODE", map.get("TRANS_STATUS")); + res.put("ERR_MSG", map.get("TRANS_INFO")); + } + }else{ + res.put("RET_CODE", map.get("RET_CODE")); + res.put("ERR_MSG", map.get("ERR_MSG")); + } + return res; + } + //验证银行卡四要素 + public Map vitfyCollectManage(Map map) throws CryptException{ + CollectAuditProcess cp = new CollectAuditProcess(); + String currentDateTime = DateAssistant.getTodayNow(); + String currenttime=currentDateTime.replaceAll("/", ""); + currenttime=currenttime.replaceAll(":", ""); + currenttime=currenttime.replaceAll(" ", ""); + //验证银行卡二、三、四要素 + String req = System.currentTimeMillis()+""; + StringBuffer strbuff = new StringBuffer(); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + Info info = new Info(); + /*info.setTRX_CODE("100039"); + info.setVERSION("03"); + info.setDATA_TYPE("2"); + info.setLEVEL("5"); + info.setUSER_NAME("00019140020764901"); + info.setUSER_PASS("TPSHauto123.");*/ + info.setTRX_CODE(InitCollectConfig.B_TRXCODE); + info.setVERSION(InitCollectConfig.B_VERSION); + info.setDATA_TYPE(InitCollectConfig.B_DATATYPE); + info.setLEVEL(InitCollectConfig.B_LEVEL); + info.setUSER_NAME(InitCollectConfig.USERNAME); + info.setUSER_PASS(InitCollectConfig.USERPASS); + info.setREQ_SN(req); + info.setSIGNED_MSG(""); + strbuff.append(EntityTransform.toXml(info)); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(currenttime);//请求时间 + strbuff.append(""); + strbuff.append(""); + strbuff.append(InitCollectConfig.MERCHANTID);//商户号 + /*strbuff.append("000191400207649");//商户号 +*/ strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(map.get("ACCOUNT_NO"));//卡号 + strbuff.append(""); + strbuff.append(""); + strbuff.append(map.get("ACCOUNT_NAME"));//户名 + strbuff.append(""); + //判断是否存在 + if (map.containsKey("ID_TYPE")) { + strbuff.append(""); + strbuff.append(map.get("ID_TYPE"));//开户证件类型 + strbuff.append(""); + } + if (map.containsKey("ID")) { + strbuff.append(""); + strbuff.append(map.get("ID"));//证件号 + strbuff.append(""); + } + if (map.containsKey("TEL")) { + strbuff.append(""); + strbuff.append(map.get("TEL"));//手机号 + strbuff.append(""); + } + strbuff.append(""); + strbuff.append("");//贷记卡有效期 + strbuff.append(""); + strbuff.append(""); + strbuff.append("");//贷记卡CV2 + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + strbuff.append(""); + String strResp = cp.CollectAuditVerifyReq(strbuff); + return getInfoAndStatus(strResp); + } + + + public String getInputuserid() { + return inputuserid; + } + + public void setInputuserid(String inputuserid) { + this.inputuserid = inputuserid; + } + + public String getInputorgid() { + return inputorgid; + } + + public void setInputorgid(String inputorgid) { + this.inputorgid = inputorgid; + } + + public String getFileSavePath() { + return fileSavePath; + } + + public void setFileSavePath(String fileSavePath) { + this.fileSavePath = fileSavePath; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + public String getClearDate() { + return clearDate; + } + public void setClearDate(String clearDate) { + this.clearDate = clearDate; + } + + +}