diff --git a/WebContent/Common/WorkFlow/FlowSubmitDialog.jsp b/WebContent/Common/WorkFlow/FlowSubmitDialog.jsp index dd6367e1c..262397018 100644 --- a/WebContent/Common/WorkFlow/FlowSubmitDialog.jsp +++ b/WebContent/Common/WorkFlow/FlowSubmitDialog.jsp @@ -219,9 +219,9 @@ }else{ actionSet.hide(); }*/ - if(vUser.length==1){ + /*if(vUser.length==1){ actionSet.hide(); - } + }*/ } }else{ actionSet.html(""); diff --git a/src/com/tenwa/lease/app/quartzmession/ProjectProcessTime.java b/src/com/tenwa/lease/app/quartzmession/ProjectProcessTime.java new file mode 100644 index 000000000..766cba1af --- /dev/null +++ b/src/com/tenwa/lease/app/quartzmession/ProjectProcessTime.java @@ -0,0 +1,285 @@ +package com.tenwa.lease.app.quartzmession; + +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.awe.util.SqlObject; +import com.amarsoft.awe.util.Transaction; +import com.amarsoft.dict.als.cache.CacheLoaderFactory; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; + +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; + +/** + * 订单各个环节提交时间报表 + * @author maliang + */ +public class ProjectProcessTime implements Job { + private static final Logger logger = LogManager.getLogger(ProjectProcessTime.class);// 引入logger日志 + + public void execute(JobExecutionContext arg0) throws JobExecutionException { + logger.info("【订单各个环节提交时间报表】【ProjectProcessTime】【开始】<<<<<<<<<<<<<:"); + insertData(); + logger.info("【订单各个环节提交时间报表】【ProjectProcessTime】【完成】<<<<<<<<<<<<<: "); + } + + /** + * 添加审核流程记录明细 + * @return + */ + private void insertData(){ + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); + String today=dayFormat.format(new Date()); + String month=today.substring(0,7); + Transaction Sqlca=null; + try{ + logger.info("【订单各个环节提交时间报表】【ProjectProcessTime】插入数据<<<<<<<<<<<<<"); + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + + String lastMonthFirstDay=getLastMonthFirstDay();//当前时间上月第一天对应的日期 + //插入新增数据 + String insertSql="insert into project_process_time(project_id,subjectname,provinces,distributor_name,project_no,specificname,car_type,customer_name)\n" + + "select p.id,a.subjectname,a.provinces,a.distributor_name,a.project_no,a.specificname,a.car_type,a.customer_name from approval_ledger a,lb_project_info p\n" + + "where a.project_no=p.project_no and not EXISTS (select 1 from project_process_time t where t.project_no=a.project_no)"; + //业务申请时间 信审终审通过时间 + String update1="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tfl.TJTIME,\n" + + "\tvf.ENDTIME \n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf,(\n" + + "\tSELECT\n" + + "\t\tFLOWUNID,\n" + + "\t\tmin( INPUTTIME ) TJTIME \n" + + "\tFROM\n" + + "\t\tFLOW_LOG \n" + + "\tWHERE\n" + + "\t\tlogcontent LIKE '%提交流程%' \n" + + "\tGROUP BY\n" + + "\t\tFLOWUNID \n" + + "\t) fl \n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '业务申请流程'\n" + + " AND str_to_date( REPLACE ( LEFT ( vf.ENDTIME, 10 ), '/', '-' ), '%Y-%m-%d' ) >= str_to_date( '"+lastMonthFirstDay+"', '%Y-%m-%d' ) \t\n" + + "\tAND vf.OBJECTNO = fl.FLOWUNID\n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.business_apply_submit_time= a.TJTIME,t.business_apply_end_time=a.ENDTIME\n" + + "\tWHERE t.project_id = a.proj_id"; + //信审最后退回时间 信审累计退回次数 + String update2="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tfl.TJTIME,\n" + + "\tfl.thcs \n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf,(\n" + + "\tSELECT\n" + + "\t\tFLOWUNID,\n" + + "\t\tmax( INPUTTIME ) TJTIME,\n" + + "\t\tcount(1) thcs\n" + + "\tFROM\n" + + "\t\tFLOW_LOG \n" + + "\tWHERE\n" + + "\t\tlogcontent LIKE '%退回流程%' \n" + + "\tGROUP BY\n" + + "\t\tFLOWUNID \n" + + "\t) fl \n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '业务申请流程' \n" + + "\tAND vf.OBJECTNO = fl.FLOWUNID\n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.business_apply_back_time= a.TJTIME,t.business_apply_back_number=a.thcs\n" + + "\tWHERE t.project_id = a.proj_id "; + //业务变更完成时间、业务变更次数 + String update3="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tmax(vf.ENDTIME) ENDTIME,\n" + + "\tcount(1) bgcs\n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf\n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '业务变更流程' \n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\tgroup by vf.proj_id\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.business_change_end_time= a.ENDTIME,t.business_change_number=a.bgcs\n" + + "\tWHERE t.project_id = a.proj_id "; + + //合同签约完成时间(电子签)\ 合同制作结束时间 + String update4="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tvf.ENDTIME,\n" + + "\tl.INPUTTIME\n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf\n" + + "\tleft join VI_CONTRACTMAKEPRINTLIST vc on vf.OBJECTNO=vc.flowunid\n" + + "\tleft join LB_DOCATTRIBUTE l on vc.ATTRIBUTE_ID=l.id and filename like '%电子%' \n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '合同制作流程' \n" + + "\t AND str_to_date( REPLACE ( LEFT ( vf.ENDTIME, 10 ), '/', '-' ), '%Y-%m-%d' ) >= str_to_date( '"+lastMonthFirstDay+"', '%Y-%m-%d' ) \t\n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.contract_approve_dzq_time= a.INPUTTIME,t.contract_approve_end_time=a.ENDTIME\n" + + "\tWHERE t.project_id = a.proj_id"; + + //合同变更完成时间、合同变更次数 + String update5="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tmax(vf.ENDTIME) ENDTIME,\n" + + "\tcount(1) bgcs\n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf\n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '合同变更流程' \n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\tgroup by vf.proj_id\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.contract_change_end_time= a.ENDTIME,t.contract_change_number=a.bgcs\n" + + "\tWHERE t.project_id = a.proj_id "; + + //渠道付款申请提交时间、付款复审提交时间 + String update6="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tfl.TJTIME,\n" + + "\tvf.ENDTIME \n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf,(\n" + + "\tSELECT\n" + + "\t\tFLOWUNID,\n" + + "\t\tmin( INPUTTIME ) TJTIME \n" + + "\tFROM\n" + + "\t\tFLOW_LOG \n" + + "\tWHERE\n" + + "\t\tlogcontent LIKE '%提交流程%' \n" + + "\tGROUP BY\n" + + "\t\tFLOWUNID \n" + + "\t) fl \n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '付款申请(汽车)' \n" + + "\t AND str_to_date( REPLACE ( LEFT ( vf.ENDTIME, 10 ), '/', '-' ), '%Y-%m-%d' ) >= str_to_date( '"+lastMonthFirstDay+"', '%Y-%m-%d' ) \t\n" + + "\tAND vf.OBJECTNO = fl.FLOWUNID\n" + + "\tand vf.phasename in ('结束','否决','通过')\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.fund_payment_submit_time= a.TJTIME,t.fund_payment_end_time=a.ENDTIME\n" + + "\tWHERE t.project_id = a.proj_id"; + + //付款申请最后退回时间 付款申请累计退回次数 + String update7="update project_process_time t\n" + + " JOIN(SELECT\n" + + " vf.proj_id,\n" + + "\tfl.TJTIME,\n" + + "\tfl.thcs \n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf,(\n" + + "\tSELECT\n" + + "\t\tFLOWUNID,\n" + + "\t\tmax( INPUTTIME ) TJTIME,\n" + + "\t\tcount(1) thcs\n" + + "\tFROM\n" + + "\t\tFLOW_LOG \n" + + "\tWHERE\n" + + "\t\tlogcontent LIKE '%退回流程%' \n" + + "\tGROUP BY\n" + + "\t\tFLOWUNID \n" + + "\t) fl \n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '付款申请(汽车)' \n" + + "\t AND str_to_date( REPLACE ( LEFT ( vf.ENDTIME, 10 ), '/', '-' ), '%Y-%m-%d' ) >= str_to_date( '"+lastMonthFirstDay+"', '%Y-%m-%d' ) \t\n" + + "\tAND vf.OBJECTNO = fl.FLOWUNID\n" + + "\tand vf.phasename in ('结束','否决','通过')\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.fund_payment_back_time= a.TJTIME,t.fund_payment_back_number=a.thcs\n" + + "\tWHERE t.project_id = a.proj_id"; + + //实际付款申请提交时间 回盘成功提交时间 + String update8="update project_process_time t\n" + + " JOIN(SELECT\n" + + " lf.PROJECT_ID proj_id,\n" + + "\tmin(fl.TJTIME) TJTIME,\n" + + "\tmax(vf.ENDTIME) ENDTIME\n" + + "FROM\n" + + "\tVI_FLOW_MONITORING vf,(\n" + + "\tSELECT\n" + + "\t\tFLOWUNID,\n" + + "\t\tmin( INPUTTIME ) TJTIME \n" + + "\tFROM\n" + + "\t\tFLOW_LOG \n" + + "\tWHERE\n" + + "\t\tlogcontent LIKE '%提交流程%' \n" + + "\tGROUP BY\n" + + "\t\tFLOWUNID \n" + + "\t) fl ,LC_FUND_INCOME_temp lft,LC_FUND_INCOME lf\n" + + "WHERE\n" + + "\tvf.FLOW_NAME = '实际付款流程(汽车)' \n" + + "\t AND str_to_date( REPLACE ( LEFT ( vf.ENDTIME, 10 ), '/', '-' ), '%Y-%m-%d' ) >= str_to_date( '"+lastMonthFirstDay+"', '%Y-%m-%d' ) \t\n" + + "\tAND vf.OBJECTNO = fl.FLOWUNID\n" + + "\tand vf.OBJECTNO = lft.FLOWUNID\n" + + "\tand lft.income_id=lf.id and lft.EBANK_STATUS='05' \n" + + "\tand vf.phasename in ('结束','否决')\n" + + "\tgroup by lf.PROJECT_ID\n" + + "\t) a on t.project_id= a.proj_id\n" + + "\tset t.actual_payment_submit_time= a.TJTIME,t.actual_payment_end_time=a.ENDTIME\n" + + "\tWHERE t.project_id = a.proj_id "; + + + Sqlca.executeSQL(new SqlObject(insertSql)); + Sqlca.executeSQL(new SqlObject(update1)); + Sqlca.executeSQL(new SqlObject(update2)); + Sqlca.executeSQL(new SqlObject(update3)); + Sqlca.executeSQL(new SqlObject(update4)); + Sqlca.executeSQL(new SqlObject(update5)); + Sqlca.executeSQL(new SqlObject(update6)); + Sqlca.executeSQL(new SqlObject(update7)); + Sqlca.executeSQL(new SqlObject(update8)); + Sqlca.commit(); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【订单各个环节提交时间报表】【ProjectProcessTime】插入数据>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 获得下月的第一天 格式yyyy/MM/dd + * @return + */ + public static String getLastMonthFirstDay(){ + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd"); + Date date = new Date(); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(date); + calendar.set(Calendar.DAY_OF_MONTH,1); + calendar.add(Calendar.MONTH, -1); + return dayFormat.format(calendar.getTime()); + } + public static void main(String[] args){ + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy-MM-dd"); + System.out.println("--"+dayFormat.format(new Date()).substring(0,7)); + + System.out.println("--"+getLastMonthFirstDay()); + } +} diff --git a/src_tenwa/com/tenwa/makeContract/util/MakeOneCodeAndContractModel.java b/src_tenwa/com/tenwa/makeContract/util/MakeOneCodeAndContractModel.java index 5353de626..06411a646 100644 --- a/src_tenwa/com/tenwa/makeContract/util/MakeOneCodeAndContractModel.java +++ b/src_tenwa/com/tenwa/makeContract/util/MakeOneCodeAndContractModel.java @@ -346,8 +346,8 @@ public class MakeOneCodeAndContractModel { under10.addImage(img); } - if(pages>10&&"02".equals(leasform)&&("乘用车手签".equals(docName)||"商用车手签".equals(docName) - ||"乘用车电子签约".equals(docName)||"商用车电子签约".equals(docName))){ + if(pages>10&&"02".equals(leasform)&&("乘用车手签".equals(docName)||"商用车手签".equals(docName))){ + //||"乘用车电子签约".equals(docName)||"商用车电子签约".equals(docName))){ //车辆交接单水印 PdfContentByte under5 = stamp.getUnderContent(5); img.scaleAbsolute(180, 32); @@ -365,23 +365,23 @@ public class MakeOneCodeAndContractModel { under9.addImage(img); } -// if(pages>7&&"02".equals(leasform)&&("乘用车电子签约".equals(docName)||"商用车电子签约".equals(docName))){ -// //车辆交接单水印 -// PdfContentByte under5 = stamp.getUnderContent(5); -// img.scaleAbsolute(180, 32); -// img.setAbsolutePosition(400, 800); -// under5.addImage(img); -// -// PdfContentByte under7 = stamp.getUnderContent(6); -// img.scaleAbsolute(180, 32); -// img.setAbsolutePosition(400, 800); -// under7.addImage(img); -// //租金支付表水印 -// PdfContentByte under9 = stamp.getUnderContent(8); -// img.scaleAbsolute(180, 32); -// img.setAbsolutePosition(400, 800); -// under9.addImage(img); -// } + if(pages>6&&"02".equals(leasform)&&("乘用车电子签约".equals(docName)||"商用车电子签约".equals(docName))){ + //车辆交接单水印 + PdfContentByte under5 = stamp.getUnderContent(4); + img.scaleAbsolute(180, 32); + img.setAbsolutePosition(400, 800); + under5.addImage(img); + + PdfContentByte under7 = stamp.getUnderContent(5); + img.scaleAbsolute(180, 32); + img.setAbsolutePosition(400, 800); + under7.addImage(img); + //租金支付表水印 + PdfContentByte under9 = stamp.getUnderContent(7); + img.scaleAbsolute(180, 32); + img.setAbsolutePosition(400, 800); + under9.addImage(img); + } stamp.close();// 关闭 File tempfile = new File(InPdfFile); //删除原文件 diff --git a/鎶ヨ〃/姹借溅绫绘姤琛ㄤ竴/璁㈠崟鍚勭幆鑺傛彁浜ゆ椂闂存姤琛.xml b/鎶ヨ〃/姹借溅绫绘姤琛ㄤ竴/璁㈠崟鍚勭幆鑺傛彁浜ゆ椂闂存姤琛.xml new file mode 100644 index 000000000..378754c63 --- /dev/null +++ b/鎶ヨ〃/姹借溅绫绘姤琛ㄤ竴/璁㈠崟鍚勭幆鑺傛彁浜ゆ椂闂存姤琛.xml @@ -0,0 +1,616 @@ + + + + + 2c9023815726a036015726a496b00001 + eleasing_mysql + SPRING + dataSourceJDBC + + + + + com.tenwa.report.query.dialect.MysqlDialect + Mysql + + + 2c9c81b978433095017844cff87b0002 + clms_oracle + SPRING + dataSourceJDBC + com.tenwa.report.query.dialect.OracleDialect + Oracle + + + + + ff8080817dc7ced3017f8409331f013d + 璁㈠崟鍚勪釜鐜妭鎻愪氦鏃堕棿鎶ヨ〃 + project_process_time + REPORT_CODE_1647187669791 + true + 37 + REPORT + 2c9c81b7685efbbc016931c675a50006 + + + ff8080817dc7ced3017f840a4ca7013f + + + + + + ff8080817dc7ced3017f840a13f0013e + 璁㈠崟鍚勪釜鐜妭鎻愪氦鏃堕棿鎶ヨ〃 + project_process_time + 2c9023815726a036015726a496b00001 + SIMPLESQL + select * from project_process_time + + + + ff8080817dc7ced3017f840b5e500151 + subjectname + STRING + + + subjectname + 100 + 0 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500155 + provinces + STRING + + + provinces + 100 + 1 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500150 + distributor_name + STRING + + + distributor_name + 100 + 2 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014e + project_no + STRING + + + project_no + 100 + 3 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e4f0144 + specificname + STRING + + + specificname + 100 + 4 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500146 + car_type + STRING + + + car_type + 100 + 5 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e4f0140 + customer_name + STRING + + + customer_name + 100 + 6 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500145 + business_apply_submit_time + STRING + + + business_apply_submit_time + 100 + 7 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e4f0141 + business_apply_back_time + STRING + + + business_apply_back_time + 100 + 8 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500154 + business_apply_back_number + STRING + + + business_apply_back_number + 100 + 9 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500157 + business_apply_end_time + STRING + + + business_apply_end_time + 100 + 10 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014a + business_change_end_time + STRING + + + business_change_end_time + 100 + 11 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014c + business_change_number + STRING + + + business_change_number + 100 + 12 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500147 + contract_approve_dzq_time + STRING + + + contract_approve_dzq_time + 100 + 13 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500156 + contract_approve_end_time + STRING + + + contract_approve_end_time + 100 + 14 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014f + contract_change_end_time + STRING + + + contract_change_end_time + 100 + 15 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014b + contract_change_number + STRING + + + contract_change_number + 100 + 16 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500148 + fund_payment_submit_time + STRING + + + fund_payment_submit_time + 100 + 17 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500149 + fund_payment_back_time + STRING + + + fund_payment_back_time + 100 + 18 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500153 + fund_payment_back_number + STRING + + + fund_payment_back_number + 100 + 19 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e500152 + fund_payment_end_time + STRING + + + fund_payment_end_time + 100 + 20 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e4f0143 + actual_payment_submit_time + STRING + + + actual_payment_submit_time + 100 + 21 + true + + false + false + false + false + + + + + + ff8080817dc7ced3017f840b5e50014d + actual_payment_end_time + STRING + + + actual_payment_end_time + 100 + 22 + true + + false + false + false + false + + + + + + + + + + + ff8080817dc7ced3017f842941430158 + subjectname + subjectname + + FILTER + STRING + TEXT + 0 + + + ff8080817dc7ced3017f8429b3a00159 + distributor_name + distributor_name + + FILTER + STRING + TEXT + 1 + + + ff8080817dc7ced3017f842dd93e015a + specificname + specificname + + FILTER + STRING + TEXT + 2 + + + ff8080817dc7ced3017f842fd44f015b + business_apply_submit_time + business_apply_submit_time + + FILTER + DATE + DATERANGE + 3 + + + ff8080817dc7ced3017f84305b75015c + business_apply_end_time + business_apply_end_time + + FILTER + DATE + DATERANGE + 4 + + + ff8080817dc7ced3017f84309857015d + business_apply_back_number + business_apply_back_number + + FILTER + NUMBER + NUMBERRANGE + 5 + + + ff8080817dc7ced3017f84316eb4015e + fund_payment_end_time + fund_payment_end_time + + FILTER + DATE + DATERANGE + 6 + + + ff8080817dc7ced3017f84316eb4015f + fund_payment_back_number + fund_payment_back_number + + FILTER + NUMBER + NUMBERRANGE + 7 + + + ff8080817dc7ced3017f84316eb40160 + business_change_number + business_change_number + + FILTER + NUMBER + NUMBERRANGE + 8 + + + ff8080817dc7ced3017f843207680161 + contract_change_number + contract_change_number + + FILTER + NUMBER + NUMBERRANGE + 9 + + + + 20 + false + false + false + false + false +
+
+ + + + + ff8080817dc7ced3017f840a4ca7013f + 0 + 0 + 0 + TABLE#ff8080817dc7ced3017f840a13f0013e + ff8080817dc7ced3017f8409331f013d + TABLE + + +