diff --git a/src_tenwa/com/tenwa/lease/app/quartzmession/CreditAuditHolidayBatch.java b/src_tenwa/com/tenwa/lease/app/quartzmession/CreditAuditHolidayBatch.java index bfe601c7c..e1ef3d8af 100644 --- a/src_tenwa/com/tenwa/lease/app/quartzmession/CreditAuditHolidayBatch.java +++ b/src_tenwa/com/tenwa/lease/app/quartzmession/CreditAuditHolidayBatch.java @@ -1,731 +1,769 @@ -package com.tenwa.lease.app.quartzmession; -import com.amarsoft.are.jbo.JBOException; -import com.amarsoft.awe.util.ASResultSet; -import com.amarsoft.awe.util.SqlObject; -import com.amarsoft.awe.util.Transaction; -import com.amarsoft.dict.als.cache.CacheLoaderFactory; -import org.apache.commons.lang3.StringUtils; -import org.apache.log4j.LogManager; -import org.apache.log4j.Logger; -import org.quartz.Job; -import org.quartz.JobExecutionContext; -import org.quartz.JobExecutionException; -import java.sql.SQLException; -import java.text.ParseException; -import java.text.SimpleDateFormat; -import java.util.Calendar; -import java.util.Date; -import java.util.UUID; - -/** - * 初始化信审考核报表数据跑批 - * @author xiezhiwen - */ -public class CreditAuditHolidayBatch implements Job{ - private static final Logger logger = LogManager.getLogger(CreditAuditHolidayBatch.class);// 引入logger日志 - - public void execute(JobExecutionContext arg0) throws JobExecutionException { - initDetail(); - updateDetail(); - initOrderAuditDay(); - saveOrderAuditDay(); - updateOrderAuditDay(); - } - - /** - * 添加审核流程记录明细 - * @return - */ - private void initDetail(){ - Transaction Sqlca=null; - try{ - Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); - //初始化信审考核明细表 - String result1 = initDetail(Sqlca); - Sqlca.commit(); - logger.info("【初始化信审考核明细表】定时任务执行成功<<<<<<<<<<<<<: "+result1); - }catch(Exception e){ - logger.error("<<<<<<<<<<<<<<<<<<<<<<【初始化信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【初始化信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【初始化信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - try { - Sqlca.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - }finally { - if(Sqlca!=null) { - try { - Sqlca.commit(); - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } - } - } - } - - /** - * 修改审核明细的创建时间 - * @return - */ - private void updateDetail(){ - Transaction Sqlca=null; - try{ - Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); - //初始化信审考核明细表 - String result1 = updateDetail(Sqlca); - Sqlca.commit(); - logger.info("【修改信审考核明细表】定时任务执行异常<<<<<<<<<<<<<: "+result1); - }catch(Exception e){ - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - try { - Sqlca.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - }finally { - if(Sqlca!=null) { - try { - Sqlca.commit(); - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } - } - } - } - - /** - * 初始化审核统计报表-根据进单日期 - * @return - */ - private void initOrderAuditDay(){ - Transaction Sqlca=null; - try{ - Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); - //初始化信审考核明细表 - String result1 = initOrderAuditDay(Sqlca); - Sqlca.commit(); - logger.info("【修改信审考核明细表】定时任务执行完成<<<<<<<<<<<<<: "+result1); - }catch(Exception e){ - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - try { - Sqlca.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - }finally { - if(Sqlca!=null) { - try { - Sqlca.commit(); - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } - } - } - } - - /** - * 初始化或者修改审核统计报表-根据审单日期 - * @return - */ - private void saveOrderAuditDay(){ - Transaction Sqlca=null; - try{ - Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); - //初始化信审考核明细表 - String result1 = saveOrderAuditDay(Sqlca); - Sqlca.commit(); - logger.info("【修改信审考核明细表】定时任务执行完成<<<<<<<<<<<<<: "+result1); - }catch(Exception e){ - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - try { - Sqlca.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - }finally { - if(Sqlca!=null) { - try { - Sqlca.commit(); - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } - } - } - } - - /** - * 初始化或者修改审核统计报表-根据审单日期 - * @return - */ - private void updateOrderAuditDay(){ - Transaction Sqlca=null; - try{ - Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); - //初始化信审考核明细表 - String result1 = updateOrderAuditDay(Sqlca); - Sqlca.commit(); - logger.info("【修改信审考核明细表】定时任务执行完成<<<<<<<<<<<<<: "+result1); - }catch(Exception e){ - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - logger.error("<<<<<<<<<<<<<<<<<<<<<<【修改信审考核明细表】定时任务执行异常>>>>>>>>>>>>>>>>>>>>>>>"); - try { - Sqlca.rollback(); - } catch (JBOException e1) { - e1.printStackTrace(); - } - e.printStackTrace(); - }finally { - if(Sqlca!=null) { - try { - Sqlca.commit(); - Sqlca.disConnect(); - } catch (JBOException e) { - e.printStackTrace(); - } - } - } - } - - - /** - * 添加审核流程记录明细 - * @return - * @throws Exception - */ - public String initDetail(Transaction Sqlca) throws Exception { - // 定义全局对象 - String uuidDetail = ""; // 业务id - String userid = ""; // 用户id - String username = ""; // 用户姓名 - String objectno = ""; // 流程编号 - String serialno = ""; // 流程处理流水 - String auditFlowType = ""; // 流程审核类型 - String auditFlowTypeDes = ""; // 流程审核类型说明 - String createtime = ""; // 流程创建时间 - String begintime = ""; // 流程开始时间 - String endtime = ""; // 流程结束时间 - String jump_createtime = ""; // 跳过节假日之后流程创建时间 - String create_day = ""; // 跳过节假日之后流程创建日期 - String audit_day = ""; // 跳过节假日之后流程审核日期 - String jump_begintime = ""; // 跳过节假日之后流程开始时间 - String jump_endtime = ""; // 跳过节假日之后流程结束时间 - String nextAuditFlowType = ""; // 下阶段流程审核类型 - String auditResSts = ""; // 流程审核结果 - String auditResStsDes = ""; // 流程审核结果说明 - String remark = ""; - String insertSql = ""; - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); - int con=0; - // 查询所有需要发送还款提醒的数据 - String selSql="SELECT \n" + - " FT.userid,\n" + - " FT.username,\n" + - " FT.objectno,\n" + - " FT.serialno,\n" + - " FT.phaseno AS auditFlowType,\n" + - " FT.phasename AS auditFlowTypeDes,\n" + - " FT.begintime,\n" + - " FT.endtime,\n" + - " FT.phaseopinion1 AS nextAuditFlowType,\n" + - " fob.phaseopinion AS auditResSts,\n" + - " (SELECT itemname from code_library WHERE codeno='disagreeOP' AND itemno=fob.phaseopinion) AS auditResStsDes\n" + - "FROM FLOW_TASK FT\n" + - "LEFT JOIN FLOW_OPINION_BUSINESS FOB ON FT.SERIALNO=FOB.SERIALNO \n" + - "WHERE FT.flowname = '业务申请流程' \n" + - "AND FT.phaseno='0030' \n" + - "AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'')"; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - while(rs.next()) { - // 获取接口推送所需数据 - con++; - uuidDetail = UUID.randomUUID().toString().replace("-", ""); - userid = rs.getString("userid"); // 用户id - username = rs.getString("username"); // 用户姓名 - objectno = rs.getString("objectno"); // 流程编号 - serialno = rs.getString("serialno"); // 流程处理流水 - auditFlowType = rs.getString("auditFlowType"); // 流程审核类型 - auditFlowTypeDes = rs.getString("auditFlowTypeDes"); // 流程审核类型说明 - createtime = rs.getString("begintime"); // 流程创建时间 - begintime = rs.getString("begintime"); // 流程开始时间 - endtime = rs.getString("endtime"); // 流程结束时间 - nextAuditFlowType = rs.getString("nextAuditFlowType"); // 下阶段流程审核类型 - auditResSts = rs.getString("auditResSts"); // 流程审核结果 - auditResStsDes = rs.getString("auditResStsDes"); // 流程审核结果说明 - if("任意退回".equals(nextAuditFlowType)){ - continue; - } - if(StringUtils.isNotEmpty(createtime)){//开始时间不为空 - jump_createtime = resJumpHoliday(Sqlca, rs.getString("begintime")); // 跳过节假日之后流程创建时间 - create_day = dayFormat.format(simpleDateFormat.parse(jump_createtime)); - jump_createtime = sdf.format(simpleDateFormat.parse(jump_createtime)); - jump_begintime = jump_createtime; // 跳过节假日之后流程开始时间 - createtime = sdf.format(simpleDateFormat.parse(createtime)); - begintime = createtime; - } - if (StringUtils.isNotEmpty(endtime)){//结束时间不为空 - jump_endtime = resJumpHoliday(Sqlca, rs.getString("endtime")); // 跳过节假日之后流程结束时间 - audit_day = dayFormat.format(simpleDateFormat.parse(jump_endtime)); - endtime = sdf.format(simpleDateFormat.parse(endtime)); - jump_endtime = sdf.format(simpleDateFormat.parse(jump_endtime)); - } - insertSql="INSERT INTO st_credit_audit_order_detail(id,serialno,objectno,userid,username, " + - "auditFlowType," + - "auditFlowTypeDes," + - "createtime," + - "begintime," + - "endtime," + - "create_day," + - "audit_day," + - "jump_createtime," + - "jump_begintime," + - "jump_endtime," + - "nextAuditFlowType," + - "auditResSts," + - "auditResStsDes," + - "remark," + - "INPUTTIME, " + - "UPDATETIME " + - ") " + - "VALUES ( " + - "'"+uuidDetail+"', " + - "'"+serialno+"', " + - "'"+objectno+"', " + - "'"+userid+"', " + - "'"+username+"', " + - "'"+auditFlowType+"', " + - "'"+auditFlowTypeDes+"', " + - " '"+createtime+"', " + - " '"+begintime+"', " + - " '"+endtime+"', " + - " '"+create_day+"', " + - " '"+audit_day+"', " + - " '"+jump_createtime+"', " + - " '"+jump_begintime+"', " + - " '"+jump_endtime+"', " + - "'"+nextAuditFlowType+"', " + - "'"+auditResSts+"', " + - "'"+auditResStsDes+"', " + - "'"+remark+"', " + - "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'), " + - "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') " + - ")"; - Sqlca.executeSQL(new SqlObject(insertSql)); - - } - return String.valueOf(con); - } - - - /** - * 查询最小创建时间更改明细记录中对应的创建时间 - * @return - * @throws Exception - */ - public String updateDetail(Transaction Sqlca) throws Exception { - // 定义全局对象 - String objectno = ""; // 流程编号 - String begintime = ""; // 流程创建时间 - String createtime = ""; // 跳过节假日之后流程创建时间 - String create_day = ""; // 跳过节假日之后流程创建日期 - String updSql = ""; - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); - int con=0; - // 查询所有需要发送还款提醒的数据 - // 查询所有需要发送还款提醒的数据 - String selSql="SELECT \n" + - " FT.userid,\n" + - " FT.objectno,\n" + - " min(FT.begintime) AS begintime\n" + - "FROM FLOW_TASK FT\n" + - "LEFT JOIN FLOW_OPINION_BUSINESS FOB ON FT.SERIALNO=FOB.SERIALNO \n" + - "WHERE FT.flowname = '业务申请流程' \n" + - "AND FT.phaseno='0030' \n" + - "AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') group by FT.objectno"; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - while(rs.next()) { - // 获取接口推送所需数据 - con++; - begintime = rs.getString("begintime"); // 流程编号 - objectno = rs.getString("objectno"); // 流程创建时间 - createtime = sdf.format(simpleDateFormat.parse(begintime)); - create_day = dayFormat.format(simpleDateFormat.parse(resJumpHoliday(Sqlca, begintime))); - updSql="UPDATE st_credit_audit_order_detail SET create_day='"+create_day+"', createtime='"+createtime+"'," + - "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE objectno='"+objectno+"' "; - Sqlca.executeSQL(new SqlObject(updSql)); - objectno = ""; - begintime = ""; - createtime = ""; - create_day = ""; - updSql = ""; - } - return String.valueOf(con); - } - - /** - * 初始化审核统计报表-保存审核日期相关订单 - * @return - * @throws Exception - */ - public String initOrderAuditDay(Transaction Sqlca) throws Exception { - String insertSql="INSERT INTO st_credit_audit_order(\n" + - " id,\n" + - " every_day,\n" + - " userid,\n" + - " username,\n" + - " auditFlowType,\n" + - " auditFlowTypeDes,\n" + - " count_audit,\n" + - " count_audit_pass,\n" + - " count_audit_refuse,\n" + - " count_audit_refuse1,\n" + - " count_audit_refuse2,\n" + - " count_audit_refuse3,\n" + - " count_audit_refuse4,\n" + - " count_audit_refuse5,\n" + - " count_audit_refuse6\n" + - " )\n" + - " SELECT \n" + - " replace(uuid(),'-',''),\n" + - " st2.every_day,\n" + - " st2.userid,\n" + - " st2.username,\n" + - " st2.auditFlowType,\n" + - " st2.auditFlowTypeDes,\n" + - " st2.count_audit,\n" + - " st3.count_audit_pass,\n" + - " st4.count_audit_refuse,\n" + - " st5.count_audit_refuse1,\n" + - " st6.count_audit_refuse2,\n" + - " st7.count_audit_refuse3,\n" + - " st8.count_audit_refuse4,\n" + - " st9.count_audit_refuse5,\n" + - " st10.count_audit_refuse6\n" + - " from\n" + - " (SELECT COUNT(1) AS count_audit,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts != 'null'AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st2 \n" + - " left join (SELECT COUNT(1) AS count_audit_pass,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0070'AND (endtime is not null or endtime != '')GROUP BY audit_day, userid) as st3 on st3.every_day = st2.every_day AND st3.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts != '0070' AND auditResSts != 'null' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st4 on st4.every_day = st2.every_day AND st4.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse1,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0010' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st5 on st5.every_day = st2.every_day AND st5.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse2,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0020' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st6 on st6.every_day = st2.every_day AND st6.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse3,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0030' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st7 on st7.every_day = st2.every_day AND st7.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse4,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0040' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st8 on st8.every_day = st2.every_day AND st8.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse5,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0050' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st9 on st9.every_day = st2.every_day AND st9.userid=st2.userid\n" + - " left join (SELECT COUNT(1) AS count_audit_refuse6,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + - " WHERE auditResSts = '0060' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st10 on st10.every_day = st2.every_day AND st10.userid=st2.userid \n"; - Sqlca.executeSQL(new SqlObject(insertSql)); - return "-1"; - } - - /** - * 根据查询进单统计数据,添加或者更新统计订单数据 - * @return - * @throws Exception - */ - public String saveOrderAuditDay(Transaction Sqlca) throws Exception { - // 定义全局对象 - String id = ""; // 流程编号 - String order_count = ""; // 流程编号 - String userid = ""; // 流程编号 - String every_day = ""; // 流程编号 - String username = ""; // 流程创建时间 - String auditFlowType = ""; // 流程创建时间 - String auditFlowTypeDes = ""; // 跳过节假日之后流程创建时间 - String updSql = ""; - String selSql2 = ""; - int con=0; - // 查询所有需要发送还款提醒的数据 - String selSql="SELECT count(1) as order_count,std1.every_day,std1.userid,std1.username,std1.auditFlowType,std1.auditFlowTypeDes \n" + - " from (SELECT min(create_day) AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail GROUP BY objectno) AS std1 \n" + - " GROUP BY std1.every_day "; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - while(rs.next()) { - id = UUID.randomUUID().toString().replace("-", ""); - // 获取接口推送所需数据 - con++; - every_day = rs.getString("every_day"); // 流程编号 - order_count = rs.getString("order_count"); // 流程创建时间 - userid = rs.getString("userid"); // 流程创建时间 - username = rs.getString("username"); // 流程创建时间 - auditFlowType = rs.getString("auditFlowType"); // 流程创建时间 - auditFlowTypeDes = rs.getString("auditFlowTypeDes"); // 流程创建时间 - - selSql2="SELECT count(1) as countNum FROM st_credit_audit_order WHERE every_day ='" + every_day +"'"; - ASResultSet rs2 = Sqlca.getASResultSet(new SqlObject(selSql2)); - if(rs2.next()) { - if(rs2.getInt("countNum") > 0){ - updSql="UPDATE st_credit_audit_order SET order_count='"+order_count+"', " + - "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE every_day='"+every_day+"' "; - Sqlca.executeSQL(new SqlObject(updSql)); - }else { - String insertSql = "INSERT INTO st_credit_audit_order(\n" + - " id,\n" + - " every_day,\n" + - " userid,\n" + - " username,\n" + - " auditFlowType,\n" + - " auditFlowTypeDes,\n" + - " order_count,\n" + - " INPUTTIME, " + - " UPDATETIME " + - " ) " + - " VALUES ( " + - " '" + id + "', " + - " '" + every_day + "', " + - " '" + userid + "', " + - " '" + userid + "', " + - " '" + username + "', " + - " '" + auditFlowType + "', " + - " '" + auditFlowTypeDes + "', " + - "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'), " + - "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') " + - ")"; - } - } - id = ""; - order_count = ""; - userid = ""; - every_day = ""; - username = ""; - auditFlowType = ""; - auditFlowTypeDes = ""; - updSql = ""; - selSql2 = ""; - } - return String.valueOf(con); - } - - /** - * 根据查询进单统计数据,修改 - * @return - * @throws Exception - */ - public String updateOrderAuditDay(Transaction Sqlca) throws Exception { - // 定义全局对象 - String id = ""; // 流程编号 - String userid = ""; // 流程编号 - String every_day = ""; // 流程编号 - String begintime = ""; // 流程创建时间 - String endtime = ""; // 流程创建时间 - String audittime = ""; // 跳过节假日之后流程创建时间 - String updSql = ""; - String selSql2 = ""; - SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - int con=0; - // 查询所有需要发送还款提醒的数据 - String selSql="SELECT id, every_day, userid FROM st_credit_audit_order "; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - while(rs.next()) { - // 获取接口推送所需数据 - con++; - id = rs.getString("id"); // 流程编号 - every_day = rs.getString("every_day"); // 流程编号 - userid = rs.getString("userid"); // 流程创建时间 - - selSql2="SELECT \n" + - " jump_begintime,\n" + - " jump_endtime \n" + - " FROM st_credit_audit_order_detail \n" + - " WHERE userid = '" + userid +"'" + - " AND audit_day ='" + every_day +"'" + - " AND auditResSts != 'null'" + - " AND (endtime is not null or endtime != '')" ; - ASResultSet rs2 = Sqlca.getASResultSet(new SqlObject(selSql2)); - begintime = ""; // 流程创建时间 - endtime = ""; - while(rs2.next()) { - String jump_begintime = rs2.getString("jump_begintime"); // 流程创建时间 - String jump_endtime = rs2.getString("jump_endtime"); // 流程创建时间 - if(StringUtils.isEmpty(begintime) || sdf.parse(begintime).getTime() > sdf.parse(jump_begintime).getTime()){ - begintime = jump_begintime; - } - if(StringUtils.isEmpty(endtime) || sdf.parse(jump_endtime).getTime() > sdf.parse(endtime).getTime()){ - endtime = jump_endtime; - } - } - audittime = resDiffJumpHoliday(Sqlca, simpleDateFormat.format(sdf.parse(begintime)), simpleDateFormat.format(sdf.parse(endtime))); - updSql="UPDATE st_credit_audit_order SET begintime='"+begintime+"', " + - " endtime='"+endtime+"', " + - " audittime='"+audittime+"', " + - "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE id='"+id+"' "; - Sqlca.executeSQL(new SqlObject(updSql)); - id = ""; - userid = ""; - every_day = ""; - begintime = ""; - endtime = ""; - audittime = ""; - updSql = ""; - selSql2 = ""; - } - return String.valueOf(con); - } - - - - /** - * 0010 信用不良 - * 0020 法院执行 - * 0030 虚假信息 - * 0040 身份核实异常 - * 0050 购车目的异常 - * 0060 综合评分不足 - * 0070 同意 - * 0080 附条件通过 - */ - /** - * 根据当前时间获得跳过节假日的工作日时间 - * @param date - * @return - */ - private String resJumpHoliday(Transaction Sqlca, String date) throws SQLException, ParseException { - //查询当前时间是否在工作时间 - SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - int hour = Integer.parseInt(date.substring(11, 13)); - int minute = Integer.parseInt(date.substring(14, 16)); - if(hour < 9){//时间小于当天9点,则调整时间为上午九点 - date = date.substring(0, 11) + "09:00:00"; - }else if((hour == 17 && minute > 30) || (hour > 17)){//时间小于当天17:30点,则调整时间为第二天的上午九点 - Date time = simpleDateFormat.parse(date); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(time); - calendar.add(Calendar.DAY_OF_MONTH, 1); - date = simpleDateFormat.format(calendar.getTime()).substring(0, 11) + "09:00:00"; - } - //查询当前时间是否在节假日时间 - String day = date.substring(0, 10); - int count = 0; - while (count < 15){ - count ++; - String selSql="SELECT count(1) as countNum " + - " FROM st_credit_audit_holiday st" + - " WHERE st.c_date='" + day +"'" + - " AND st.otype='休'" ; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - int countNum = 0; - if(rs.next()){ - countNum = rs.getInt("countNum"); - } - if(countNum > 0){ - Date time = simpleDateFormat.parse(date); - Calendar calendar = Calendar.getInstance(); - calendar.setTime(time); - calendar.add(Calendar.DAY_OF_MONTH, 1); - date = simpleDateFormat.format(calendar.getTime()).substring(0, 11) + "09:00:00"; - day = date.substring(0, 10); - }else { - break; - } - } - return date; - } - - /** - * 根据时间段相差时间获得跳过节假日的工作日时间 - * @param begintime 开始时间 - * @param endtime 结束时间 - * @return - */ - private String resDiffJumpHoliday(Transaction Sqlca, String begintime, String endtime) throws SQLException, ParseException { - //获取开始时间、结束时间跳过节假日的时间 - begintime = resJumpHoliday(Sqlca, begintime); - endtime = resJumpHoliday(Sqlca, endtime); - //确认开始时间,到结束时间,中间隔的时间,并排除节假日时间 - //如果结束时间小于或者等于开始时间 - SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - Date beginDate = simpleDateFormat.parse(begintime); - Date endDate = simpleDateFormat.parse(endtime); - long diff = 0; - if(beginDate.getTime() >= endDate.getTime()){ - return "0"; - }else if (begintime.substring(0, 10).equals(endtime.substring(0, 10))){ - diff = diffMinute(beginDate.getTime(), endDate.getTime()); - return String.valueOf(diff); - }else { - long diffBeginAfter = diffBeginDateAfter(begintime, beginDate); - long diffEndDateBefore = diffEndDateBefore(endtime, endDate); - diff = diffBeginAfter + diffEndDateBefore; - //得到相差的天数 betweenDate - - beginDate = dayFormat.parse(dayFormat.format(beginDate)); - endDate = dayFormat.parse(dayFormat.format(endDate)); - long betweenDate = (endDate.getTime() - beginDate.getTime())/(60*60*24*1000); - if (betweenDate == 1){ - return String.valueOf(diff); - }else {//中间相隔大于一天查询数据库相隔天数中有几天是假期, - begintime = dayFormat.format(beginDate); - endtime = dayFormat.format(endDate); - String selSql="SELECT COUNT(1) as countNum FROM (\n" + - " SELECT c_date\n" + - " FROM st_credit_audit_holiday st\n" + - " WHERE st.c_date BETWEEN '"+begintime+"' AND '"+endtime+"'\n" + - " AND st.otype='休'\n" + - " GROUP BY st.c_date\n" + - " ) AS s" ; - ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); - int countNum = 0; - if(rs.next()){ - countNum = rs.getInt("countNum"); - } - diff += (betweenDate - countNum - 1)*8*60; - return String.valueOf(diff); - } - } - } - - private long diffEndDateBefore(String endTime, Date endDate) throws ParseException { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - String endtimeBefore = endTime.substring(0, 11) + "09:00:00"; - Date endDateBefore = simpleDateFormat.parse(endtimeBefore); - return diffMinute(endDateBefore.getTime(), endDate.getTime()); - } - - private long diffBeginDateAfter(String beginTime, Date beginDate) throws ParseException { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - String begintimeAfter = beginTime.substring(0, 11) + "17:30:00"; - Date beginDateAfter = simpleDateFormat.parse(begintimeAfter); - return diffMinute(beginDate.getTime(), beginDateAfter.getTime()); - } - - private long diffMinute(long begin, long end){ - if(begin > end){ - return -1; - } - return (end - begin)/1000/60; - } - - - private boolean compareTime(String begin, String end) throws ParseException { - SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); - return simpleDateFormat.parse(begin).getTime() > simpleDateFormat.parse(begin).getTime(); - } -} +package com.tenwa.lease.app.quartzmession; +import com.amarsoft.are.jbo.JBOException; +import com.amarsoft.awe.util.ASResultSet; +import com.amarsoft.awe.util.SqlObject; +import com.amarsoft.awe.util.Transaction; +import com.amarsoft.dict.als.cache.CacheLoaderFactory; +import org.apache.commons.lang3.StringUtils; +import org.apache.log4j.LogManager; +import org.apache.log4j.Logger; +import org.quartz.Job; +import org.quartz.JobExecutionContext; +import org.quartz.JobExecutionException; +import java.sql.SQLException; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Calendar; +import java.util.Date; +import java.util.UUID; + +/** + * 初始化信审考核报表数据跑批 + * @author xiezhiwen + */ +public class CreditAuditHolidayBatch implements Job{ + private static final Logger logger = LogManager.getLogger(CreditAuditHolidayBatch.class);// 引入logger日志 + + public void execute(JobExecutionContext arg0) throws JobExecutionException { + logger.info("【信审考核统计】【CreditAuditHolidayBatch】【开始】<<<<<<<<<<<<<: "); + deleteCreditAudit(); + initDetail(); + updateDetail(); + initOrderAuditDay(); + saveOrderAuditDay(); + updateOrderAuditDay(); + logger.info("【信审考核统计】【CreditAuditHolidayBatch】【完成】<<<<<<<<<<<<<: "); + } + + /** + * 添加审核流程记录明细 + * @return + */ + private void deleteCreditAudit(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String delSql="truncate table st_credit_audit_order_detail"; + String delSql2="truncate table st_credit_audit_order"; + Sqlca.executeSQL(new SqlObject(delSql)); + Sqlca.executeSQL(new SqlObject(delSql2)); + Sqlca.commit(); + logger.info("【信审考核统计】【deleteCreditAudit】数据清空执行完成<<<<<<<<<<<<<: "); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【deleteCreditAudit】数据清空执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【deleteCreditAudit】数据清空执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【deleteCreditAudit】数据清空执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 添加审核流程记录明细 + * @return + */ + private void initDetail(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String result1 = initDetail(Sqlca); + Sqlca.commit(); + logger.info("【信审考核统计】【initDetail】初始化订单明细记录<<<<<<<<<<<<<: "+result1); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initDetail】初始化订单明细记录>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initDetail】初始化订单明细记录>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initDetail】初始化订单明细记录>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 修改审核明细的创建时间 + * @return + */ + private void updateDetail(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String result1 = updateDetail(Sqlca); + Sqlca.commit(); + logger.info("【信审考核统计】【updateDetail】修改订单明细中的创建时间执行完成<<<<<<<<<<<<<: "+result1); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateDetail】修改订单明细中的创建时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateDetail】修改订单明细中的创建时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateDetail】修改订单明细中的创建时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 初始化审核统计报表-根据进单日期 + * @return + */ + private void initOrderAuditDay(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String result1 = initOrderAuditDay(Sqlca); + Sqlca.commit(); + logger.info("【信审考核统计】【initOrderAuditDay】初始化订单表审核数据统计执行完成<<<<<<<<<<<<<: "+result1); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initOrderAuditDay】初始化订单表审核数据统计执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initOrderAuditDay】初始化订单表审核数据统计执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【initOrderAuditDay】初始化订单表审核数据统计执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 初始化或者修改审核统计报表-根据审单日期 + * @return + */ + private void saveOrderAuditDay(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String result1 = saveOrderCreateDay(Sqlca); + Sqlca.commit(); + logger.info("【信审考核统计】【saveOrderAuditDay】根据进单时间新增和修改订单统计表执行完成<<<<<<<<<<<<<: "+result1); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【saveOrderAuditDay】根据进单时间新增和修改订单统计表执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【saveOrderAuditDay】根据进单时间新增和修改订单统计表执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【saveOrderAuditDay】根据进单时间新增和修改订单统计表执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + /** + * 初始化或者修改审核统计报表-根据审单日期 + * @return + */ + private void updateOrderAuditDay(){ + Transaction Sqlca=null; + try{ + Sqlca = Transaction.createTransaction(CacheLoaderFactory.getDataSource()); + //初始化信审考核明细表 + String result1 = updateOrderAuditDay(Sqlca); + Sqlca.commit(); + logger.info("【信审考核统计】【updateOrderAuditDay】计算信审考核统计表审核时间执行完成<<<<<<<<<<<<<: "+result1); + }catch(Exception e){ + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateOrderAuditDay】计算信审考核统计表审核时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateOrderAuditDay】计算信审考核统计表审核时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + logger.error("<<<<<<<<<<<<<<<<<<<<<<【信审考核统计】【updateOrderAuditDay】计算信审考核统计表审核时间执行异常>>>>>>>>>>>>>>>>>>>>>>>"); + try { + Sqlca.rollback(); + } catch (JBOException e1) { + e1.printStackTrace(); + } + e.printStackTrace(); + }finally { + if(Sqlca!=null) { + try { + Sqlca.commit(); + Sqlca.disConnect(); + } catch (JBOException e) { + e.printStackTrace(); + } + } + } + } + + + /** + * 添加审核流程记录明细 + * @return + * @throws Exception + */ + public String initDetail(Transaction Sqlca) throws Exception { + // 定义全局对象 + String uuidDetail = ""; // 业务id + String userid = ""; // 用户id + String username = ""; // 用户姓名 + String objectno = ""; // 流程编号 + String serialno = ""; // 流程处理流水 + String auditFlowType = ""; // 流程审核类型 + String auditFlowTypeDes = ""; // 流程审核类型说明 + String createtime = ""; // 流程创建时间 + String begintime = ""; // 流程开始时间 + String endtime = ""; // 流程结束时间 + String jump_createtime = ""; // 跳过节假日之后流程创建时间 + String create_day = ""; // 跳过节假日之后流程创建日期 + String audit_day = ""; // 跳过节假日之后流程审核日期 + String jump_begintime = ""; // 跳过节假日之后流程开始时间 + String jump_endtime = ""; // 跳过节假日之后流程结束时间 + String nextAuditFlowType = ""; // 下阶段流程审核类型 + String auditResSts = ""; // 流程审核结果 + String auditResStsDes = ""; // 流程审核结果说明 + String remark = ""; + String insertSql = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); + int con=0; + // 查询所有需要发送还款提醒的数据 + String selSql="SELECT \n" + + " FT.userid,\n" + + " FT.username,\n" + + " FT.objectno,\n" + + " FT.serialno,\n" + + " FT.phaseno AS auditFlowType,\n" + + " FT.phasename AS auditFlowTypeDes,\n" + + " FT.begintime,\n" + + " FT.endtime,\n" + + " FT.phaseopinion1 AS nextAuditFlowType,\n" + + " fob.phaseopinion AS auditResSts,\n" + + " (SELECT itemname from code_library WHERE codeno='disagreeOP' AND itemno=fob.phaseopinion) AS auditResStsDes\n" + + "FROM FLOW_TASK FT\n" + + "LEFT JOIN FLOW_OPINION_BUSINESS FOB ON FT.SERIALNO=FOB.SERIALNO \n" + + "WHERE FT.flowname = '业务申请流程' \n" + + "AND FT.phaseno='0030' \n" + + "AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'')"; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + while(rs.next()) { + // 获取接口推送所需数据 + con++; + uuidDetail = UUID.randomUUID().toString().replace("-", ""); + userid = rs.getString("userid"); // 用户id + username = rs.getString("username"); // 用户姓名 + objectno = rs.getString("objectno"); // 流程编号 + serialno = rs.getString("serialno"); // 流程处理流水 + auditFlowType = rs.getString("auditFlowType"); // 流程审核类型 + auditFlowTypeDes = rs.getString("auditFlowTypeDes"); // 流程审核类型说明 + createtime = rs.getString("begintime"); // 流程创建时间 + begintime = rs.getString("begintime"); // 流程开始时间 + endtime = rs.getString("endtime"); // 流程结束时间 + nextAuditFlowType = rs.getString("nextAuditFlowType"); // 下阶段流程审核类型 + auditResSts = rs.getString("auditResSts"); // 流程审核结果 + auditResStsDes = rs.getString("auditResStsDes"); // 流程审核结果说明 + if("任意退回".equals(nextAuditFlowType)){ + continue; + } + if(StringUtils.isNotEmpty(createtime)){//开始时间不为空 + jump_createtime = resJumpHoliday(Sqlca, rs.getString("begintime")); // 跳过节假日之后流程创建时间 + create_day = dayFormat.format(simpleDateFormat.parse(jump_createtime)); + jump_createtime = sdf.format(simpleDateFormat.parse(jump_createtime)); + jump_begintime = jump_createtime; // 跳过节假日之后流程开始时间 + createtime = sdf.format(simpleDateFormat.parse(createtime)); + begintime = createtime; + } + if (StringUtils.isNotEmpty(endtime)){//结束时间不为空 + jump_endtime = resJumpHoliday(Sqlca, rs.getString("endtime")); // 跳过节假日之后流程结束时间 + audit_day = dayFormat.format(simpleDateFormat.parse(jump_endtime)); + endtime = sdf.format(simpleDateFormat.parse(endtime)); + jump_endtime = sdf.format(simpleDateFormat.parse(jump_endtime)); + } + insertSql="INSERT INTO st_credit_audit_order_detail(id,serialno,objectno,userid,username, " + + "auditFlowType," + + "auditFlowTypeDes," + + "createtime," + + "begintime," + + "endtime," + + "create_day," + + "audit_day," + + "jump_createtime," + + "jump_begintime," + + "jump_endtime," + + "nextAuditFlowType," + + "auditResSts," + + "auditResStsDes," + + "remark," + + "INPUTTIME, " + + "UPDATETIME " + + ") " + + "VALUES ( " + + "'"+uuidDetail+"', " + + "'"+serialno+"', " + + "'"+objectno+"', " + + "'"+userid+"', " + + "'"+username+"', " + + "'"+auditFlowType+"', " + + "'"+auditFlowTypeDes+"', " + + " '"+createtime+"', " + + " '"+begintime+"', " + + " '"+endtime+"', " + + " '"+create_day+"', " + + " '"+audit_day+"', " + + " '"+jump_createtime+"', " + + " '"+jump_begintime+"', " + + " '"+jump_endtime+"', " + + "'"+nextAuditFlowType+"', " + + "'"+auditResSts+"', " + + "'"+auditResStsDes+"', " + + "'"+remark+"', " + + "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'), " + + "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') " + + ")"; + Sqlca.executeSQL(new SqlObject(insertSql)); + + } + return String.valueOf(con); + } + + + /** + * 查询最小创建时间更改明细记录中对应的创建时间 + * @return + * @throws Exception + */ + public String updateDetail(Transaction Sqlca) throws Exception { + // 定义全局对象 + String objectno = ""; // 流程编号 + String begintime = ""; // 流程创建时间 + String createtime = ""; // 跳过节假日之后流程创建时间 + String create_day = ""; // 跳过节假日之后流程创建日期 + String updSql = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); + int con=0; + // 查询所有需要发送还款提醒的数据 + // 查询所有需要发送还款提醒的数据 + String selSql="SELECT \n" + + " FT.userid,\n" + + " FT.objectno,\n" + + " min(FT.begintime) AS begintime\n" + + "FROM FLOW_TASK FT\n" + + "LEFT JOIN FLOW_OPINION_BUSINESS FOB ON FT.SERIALNO=FOB.SERIALNO \n" + + "WHERE FT.flowname = '业务申请流程' \n" + + "AND FT.phaseno='0030' \n" + + "AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') group by FT.objectno"; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + while(rs.next()) { + // 获取接口推送所需数据 + con++; + begintime = rs.getString("begintime"); // 流程编号 + objectno = rs.getString("objectno"); // 流程创建时间 + createtime = sdf.format(simpleDateFormat.parse(begintime)); + create_day = dayFormat.format(simpleDateFormat.parse(resJumpHoliday(Sqlca, begintime))); + updSql="UPDATE st_credit_audit_order_detail SET create_day='"+create_day+"', createtime='"+createtime+"'," + + "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE objectno='"+objectno+"' "; + Sqlca.executeSQL(new SqlObject(updSql)); + objectno = ""; + begintime = ""; + createtime = ""; + create_day = ""; + updSql = ""; + } + return String.valueOf(con); + } + + /** + * 初始化审核统计报表-保存审核日期相关订单 + * @return + * @throws Exception + */ + public String initOrderAuditDay(Transaction Sqlca) throws Exception { + String insertSql="INSERT INTO st_credit_audit_order(\n" + + " id,\n" + + " every_day,\n" + + " userid,\n" + + " username,\n" + + " auditFlowType,\n" + + " auditFlowTypeDes,\n" + + " count_audit,\n" + + " count_audit_pass,\n" + + " count_audit_refuse,\n" + + " count_audit_refuse1,\n" + + " count_audit_refuse2,\n" + + " count_audit_refuse3,\n" + + " count_audit_refuse4,\n" + + " count_audit_refuse5,\n" + + " count_audit_refuse6\n" + + " )\n" + + " SELECT \n" + + " replace(uuid(),'-',''),\n" + + " st2.every_day,\n" + + " st2.userid,\n" + + " st2.username,\n" + + " st2.auditFlowType,\n" + + " st2.auditFlowTypeDes,\n" + + " st2.count_audit,\n" + + " st3.count_audit_pass,\n" + + " st4.count_audit_refuse,\n" + + " st5.count_audit_refuse1,\n" + + " st6.count_audit_refuse2,\n" + + " st7.count_audit_refuse3,\n" + + " st8.count_audit_refuse4,\n" + + " st9.count_audit_refuse5,\n" + + " st10.count_audit_refuse6\n" + + " from\n" + + " (SELECT COUNT(1) AS count_audit,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts != 'null'AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st2 \n" + + " left join (SELECT COUNT(1) AS count_audit_pass,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0070'AND (endtime is not null or endtime != '')GROUP BY audit_day, userid) as st3 on st3.every_day = st2.every_day AND st3.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts != '0070' AND auditResSts != 'null' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st4 on st4.every_day = st2.every_day AND st4.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse1,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0010' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st5 on st5.every_day = st2.every_day AND st5.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse2,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0020' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st6 on st6.every_day = st2.every_day AND st6.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse3,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0030' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st7 on st7.every_day = st2.every_day AND st7.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse4,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0040' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st8 on st8.every_day = st2.every_day AND st8.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse5,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0050' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st9 on st9.every_day = st2.every_day AND st9.userid=st2.userid\n" + + " left join (SELECT COUNT(1) AS count_audit_refuse6,audit_day AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail \n" + + " WHERE auditResSts = '0060' AND (endtime is not null or endtime != '') GROUP BY audit_day, userid) as st10 on st10.every_day = st2.every_day AND st10.userid=st2.userid \n"; + Sqlca.executeSQL(new SqlObject(insertSql)); + return "-1"; + } + + /** + * 根据查询进单统计数据,添加或者更新统计订单数据 + * @return + * @throws Exception + */ + public String saveOrderCreateDay(Transaction Sqlca) throws Exception { + // 定义全局对象 + String id = ""; // 流程编号 + String order_count = ""; // 流程编号 + String userid = ""; // 流程编号 + String every_day = ""; // 流程编号 + String username = ""; // 流程创建时间 + String auditFlowType = ""; // 流程创建时间 + String auditFlowTypeDes = ""; // 跳过节假日之后流程创建时间 + String updSql = ""; + String selSql2 = ""; + int con=0; + // 查询所有需要发送还款提醒的数据 + String selSql="SELECT count(1) as order_count,std1.every_day,std1.userid,std1.username,std1.auditFlowType,std1.auditFlowTypeDes \n" + + " from (SELECT min(create_day) AS every_day,userid,username,auditFlowType,auditFlowTypeDes from st_credit_audit_order_detail GROUP BY objectno) AS std1 \n" + + " GROUP BY std1.every_day "; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + while(rs.next()) { + id = UUID.randomUUID().toString().replace("-", ""); + // 获取接口推送所需数据 + con++; + every_day = rs.getString("every_day"); // 流程编号 + order_count = rs.getString("order_count"); // 流程创建时间 + userid = rs.getString("userid"); // 流程创建时间 + username = rs.getString("username"); // 流程创建时间 + auditFlowType = rs.getString("auditFlowType"); // 流程创建时间 + auditFlowTypeDes = rs.getString("auditFlowTypeDes"); // 流程创建时间 + + selSql2="SELECT count(1) as countNum FROM st_credit_audit_order WHERE every_day ='" + every_day +"'"; + ASResultSet rs2 = Sqlca.getASResultSet(new SqlObject(selSql2)); + if(rs2.next()) { + if(rs2.getInt("countNum") > 0){ + updSql="UPDATE st_credit_audit_order SET order_count='"+order_count+"', " + + "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE every_day='"+every_day+"' "; + Sqlca.executeSQL(new SqlObject(updSql)); + }else { + String insertSql = "INSERT INTO st_credit_audit_order(\n" + + " id,\n" + + " every_day,\n" + + " userid,\n" + + " username,\n" + + " auditFlowType,\n" + + " auditFlowTypeDes,\n" + + " order_count,\n" + + " INPUTTIME, " + + " UPDATETIME " + + " ) " + + " VALUES ( " + + " '" + id + "', " + + " '" + every_day + "', " + + " '" + userid + "', " + + " '" + userid + "', " + + " '" + username + "', " + + " '" + auditFlowType + "', " + + " '" + auditFlowTypeDes + "', " + + "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s'), " + + "DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') " + + ")"; + } + } + id = ""; + order_count = ""; + userid = ""; + every_day = ""; + username = ""; + auditFlowType = ""; + auditFlowTypeDes = ""; + updSql = ""; + selSql2 = ""; + } + return String.valueOf(con); + } + + /** + * 更改主表信审考核时间 + * @return + * @throws Exception + */ + public String updateOrderAuditDay(Transaction Sqlca) throws Exception { + // 定义全局对象 + String id = ""; // 流程编号 + String userid = ""; // 流程编号 + String every_day = ""; // 流程编号 + String begintime = ""; // 流程创建时间 + String endtime = ""; // 流程创建时间 + String audittime = "0"; // 跳过节假日之后流程创建时间 + String updSql = ""; + String selSql2 = ""; + SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int con=0; + // 查询所有需要发送还款提醒的数据 + String selSql="SELECT id, every_day, userid FROM st_credit_audit_order "; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + while(rs.next()) { + // 获取接口推送所需数据 + con++; + id = rs.getString("id"); // 流程编号 + every_day = rs.getString("every_day"); // 流程编号 + userid = rs.getString("userid"); // 流程创建时间 + + selSql2="SELECT \n" + + " jump_begintime,\n" + + " jump_endtime \n" + + " FROM st_credit_audit_order_detail \n" + + " WHERE userid = '" + userid +"'" + + " AND audit_day ='" + every_day +"'" + + " AND auditResSts != 'null'" + + " AND (endtime is not null or endtime != '')" ; + ASResultSet rs2 = Sqlca.getASResultSet(new SqlObject(selSql2)); + begintime = ""; // 流程创建时间 + endtime = ""; + while(rs2.next()) { + String jump_begintime = rs2.getString("jump_begintime"); // 流程创建时间 + String jump_endtime = rs2.getString("jump_endtime"); // 流程创建时间 + if(StringUtils.isEmpty(begintime) || sdf.parse(begintime).getTime() > sdf.parse(jump_begintime).getTime()){ + begintime = jump_begintime; + } + if(StringUtils.isEmpty(endtime) || sdf.parse(jump_endtime).getTime() > sdf.parse(endtime).getTime()){ + endtime = jump_endtime; + } + //信审考核时间累加 + String tmpStr = resDiffJumpHoliday(Sqlca, simpleDateFormat.format(sdf.parse(jump_begintime)), simpleDateFormat.format(sdf.parse(jump_endtime))); + int tmpTime = Integer.parseInt(audittime) + Integer.parseInt(tmpStr); + audittime = String.valueOf(tmpTime); + } + + updSql="UPDATE st_credit_audit_order SET begintime='"+begintime+"', " + + " endtime='"+endtime+"', " + + " audittime='"+audittime+"', " + + "UPDATETIME=DATE_FORMAT(NOW(),'%Y/%m/%d %H:%i:%s') WHERE id='"+id+"' "; + Sqlca.executeSQL(new SqlObject(updSql)); + id = ""; + userid = ""; + every_day = ""; + begintime = ""; + endtime = ""; + audittime = "0"; + updSql = ""; + selSql2 = ""; + } + return String.valueOf(con); + } + + + + /** + * 0010 信用不良 + * 0020 法院执行 + * 0030 虚假信息 + * 0040 身份核实异常 + * 0050 购车目的异常 + * 0060 综合评分不足 + * 0070 同意 + * 0080 附条件通过 + */ + /** + * 根据当前时间获得跳过节假日的工作日时间 + * @param date + * @return + */ + private String resJumpHoliday(Transaction Sqlca, String date) throws SQLException, ParseException { + //查询当前时间是否在工作时间 + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + int hour = Integer.parseInt(date.substring(11, 13)); + int minute = Integer.parseInt(date.substring(14, 16)); + if(hour < 9){//时间小于当天9点,则调整时间为上午九点 + date = date.substring(0, 11) + "09:00:00"; + }else if((hour == 17 && minute > 30) || (hour > 17)){//时间小于当天17:30点,则调整时间为第二天的上午九点 + Date time = simpleDateFormat.parse(date); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(time); + calendar.add(Calendar.DAY_OF_MONTH, 1); + date = simpleDateFormat.format(calendar.getTime()).substring(0, 11) + "09:00:00"; + } + //查询当前时间是否在节假日时间 + String day = date.substring(0, 10); + int count = 0; + while (count < 15){ + count ++; + String selSql="SELECT count(1) as countNum " + + " FROM st_credit_audit_holiday st" + + " WHERE st.c_date='" + day +"'" + + " AND st.otype='休'" ; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + int countNum = 0; + if(rs.next()){ + countNum = rs.getInt("countNum"); + } + if(countNum > 0){ + Date time = simpleDateFormat.parse(date); + Calendar calendar = Calendar.getInstance(); + calendar.setTime(time); + calendar.add(Calendar.DAY_OF_MONTH, 1); + date = simpleDateFormat.format(calendar.getTime()).substring(0, 11) + "09:00:00"; + day = date.substring(0, 10); + }else { + break; + } + } + return date; + } + + /** + * 根据时间段相差时间获得跳过节假日的工作日时间 + * @param begintime 开始时间 + * @param endtime 结束时间 + * @return + */ + private String resDiffJumpHoliday(Transaction Sqlca, String begintime, String endtime) throws SQLException, ParseException { + //获取开始时间、结束时间跳过节假日的时间 + begintime = resJumpHoliday(Sqlca, begintime); + endtime = resJumpHoliday(Sqlca, endtime); + //确认开始时间,到结束时间,中间隔的时间,并排除节假日时间 + //如果结束时间小于或者等于开始时间 + SimpleDateFormat dayFormat = new SimpleDateFormat("yyyy/MM/dd"); + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + Date beginDate = simpleDateFormat.parse(begintime); + Date endDate = simpleDateFormat.parse(endtime); + long diff = 0; + if(beginDate.getTime() >= endDate.getTime()){ + return "0"; + }else if (begintime.substring(0, 10).equals(endtime.substring(0, 10))){ + diff = diffMinute(beginDate.getTime(), endDate.getTime()); + return String.valueOf(diff); + }else { + long diffBeginAfter = diffBeginDateAfter(begintime, beginDate); + long diffEndDateBefore = diffEndDateBefore(endtime, endDate); + diff = diffBeginAfter + diffEndDateBefore; + //得到相差的天数 betweenDate + + beginDate = dayFormat.parse(dayFormat.format(beginDate)); + endDate = dayFormat.parse(dayFormat.format(endDate)); + long betweenDate = (endDate.getTime() - beginDate.getTime())/(60*60*24*1000); + if (betweenDate == 1){ + return String.valueOf(diff); + }else {//中间相隔大于一天查询数据库相隔天数中有几天是假期, + begintime = dayFormat.format(beginDate); + endtime = dayFormat.format(endDate); + String selSql="SELECT COUNT(1) as countNum FROM (\n" + + " SELECT c_date\n" + + " FROM st_credit_audit_holiday st\n" + + " WHERE st.c_date BETWEEN '"+begintime+"' AND '"+endtime+"'\n" + + " AND st.otype='休'\n" + + " GROUP BY st.c_date\n" + + " ) AS s" ; + ASResultSet rs = Sqlca.getASResultSet(new SqlObject(selSql)); + int countNum = 0; + if(rs.next()){ + countNum = rs.getInt("countNum"); + } + diff += (betweenDate - countNum - 1)*8*60; + return String.valueOf(diff); + } + } + } + + private long diffEndDateBefore(String endTime, Date endDate) throws ParseException { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + String endtimeBefore = endTime.substring(0, 11) + "09:00:00"; + Date endDateBefore = simpleDateFormat.parse(endtimeBefore); + return diffMinute(endDateBefore.getTime(), endDate.getTime()); + } + + private long diffBeginDateAfter(String beginTime, Date beginDate) throws ParseException { + SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss"); + String begintimeAfter = beginTime.substring(0, 11) + "17:30:00"; + Date beginDateAfter = simpleDateFormat.parse(begintimeAfter); + return diffMinute(beginDate.getTime(), beginDateAfter.getTime()); + } + + private long diffMinute(long begin, long end){ + if(begin > end){ + return -1; + } + return (end - begin)/1000/60; + } +} diff --git a/鎶ヨ〃/寰俊鍏紬鍙锋姤琛/鐢ㄦ埛缁戝畾淇℃伅琛.xml b/鎶ヨ〃/寰俊鍏紬鍙锋姤琛/鐢ㄦ埛缁戝畾淇℃伅琛.xml index da71268d4..43e02ed8f 100644 --- a/鎶ヨ〃/寰俊鍏紬鍙锋姤琛/鐢ㄦ埛缁戝畾淇℃伅琛.xml +++ b/鎶ヨ〃/寰俊鍏紬鍙锋姤琛/鐢ㄦ埛缁戝畾淇℃伅琛.xml @@ -16,37 +16,43 @@ - 2c9c81b66e5d8b8b016eacb3adb80196 + 2c9c81b969188a33016f371d6341014c 鐢ㄦ埛缁戝畾淇℃伅琛 Wechat_user_buinding_report - true 0 REPORT - 2c9c81b66e5d8b8b016eacb10d170195 + 2c9c81b969188a33016f371cc4f2012a - 2c9c81b66f1cf0bd016f37f08b2f001d + 2c9c81b969188a33016f473dd1b301d5 - 2c9c81b66e5d8b8b016eacb4b11f0197 + 2c9c81b969188a33016f371d633b014b寰俊鐢ㄦ埛缁戝畾淇℃伅琛Wechat_user_buinding_report2c9023815726a036015726a496b00001COMPLEXSQLSELECT +WUI.openid, CI.CUSTOMERNAME, WUI.MOBILE_, WUI.CERTID_, WUI.WECHAT_NAME, - LCI.CONTRACT_NUMBER, + LCI.CONTRACT_NUMBER, + CONCAT('姣忔湀',CONVERT(DAY(LRP.PLAN_DATE), CHAR),'鏃') AS PLAN_DATE, + IFNULL(LRP.RENT, 0.00) AS RENT, LCS.STATUS_NAME, LPI.PRODUCT_NAME, DI.DISTRIBUTOR_NAME, LPI.AFFILIATEDNAME, - LEC.FRAME_NUMBER + LEC.FRAME_NUMBER, +case when WUI.attention_status='N' then '鍚' + else '鏄' + end as attention_status, + WUI.binding_time FROM WECHAT_USER_INFO WUI LEFT JOIN @@ -57,6 +63,7 @@ LEFT JOIN LB_PROJECT_INFO LPI ON LPI.ID=LUL.PROJECT_ID LEFT JOIN LB_CONTRACT_INFO LCI ON LCI.ID=LUL.CONTRACT_ID +LEFT JOIN (SELECT CONTRACT_ID,SUM(RENT) AS RENT,MAX(PLAN_DATE) AS PLAN_DATE FROM LC_RENT_PLAN WHERE PLAN_LIST = 1 GROUP BY CONTRACT_ID) LRP ON LRP.CONTRACT_ID = LCI.ID LEFT JOIN LB_EQUIPMENT_CAR LEC ON LEC.CONTRACT_ID=LCI.ID LEFT JOIN @@ -67,109 +74,13 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b320027 + 2c9c81b969188a33016f473dd1b401d6 CUSTOMERNAME STRING CUSTOMERNAME 100 - 10 - true - - false - false - false - false - - - - - - 2c9c81b66f1cf0bd016f37f08b310021 - MOBILE_ - STRING - - - MOBILE_ - 100 - 11 - true - - false - false - false - false - - - - - - 2c9c81b66f1cf0bd016f37f08b320025 - CERTID_ - STRING - - - CERTID_ - 150 - 12 - true - - false - false - false - false - - - - - - 2c9c81b66f1cf0bd016f37f08b310023 - CONTRACT_NUMBER - STRING - - - CONTRACT_NUMBER - 150 - 13 - true - - false - false - false - false - - - - - - 2c9c81b66f1cf0bd016f37f08b310020 - STATUS_NAME - STRING - - - STATUS_NAME - 100 - 14 - true - - false - false - false - false - CENTER - - - - - - 2c9c81b66f1cf0bd016f37f08b320026 - PRODUCT_NAME - STRING - - - PRODUCT_NAME - 200 15 true @@ -182,13 +93,13 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b31001f - DISTRIBUTOR_NAME + 2c9c81b6710c46490171148b10680002 + PLAN_DATE STRING - - DISTRIBUTOR_NAME - 200 + + PLAN_DATE + 100 16 true @@ -201,13 +112,13 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b31001e - AFFILIATEDNAME - STRING + 2c9c81b6710c46490171148b10680003 + RENT + NUMBER - - AFFILIATEDNAME - 200 + + RENT + 100 17 true @@ -220,13 +131,13 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b310022 - FRAME_NUMBER + 2c9c81b969188a33016f473dd1b401db + MOBILE_ STRING - - FRAME_NUMBER - 150 + + MOBILE_ + 100 18 true @@ -239,14 +150,205 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b310024 + 2c9c81b969188a33016f473dd1b401d8 + CERTID_ + STRING + + + CERTID_ + 150 + 19 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401dd + CONTRACT_NUMBER + STRING + + + CONTRACT_NUMBER + 150 + 20 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401df + STATUS_NAME + STRING + + + STATUS_NAME + 100 + 21 + true + + false + false + false + false + CENTER + + + + + + 2c9c81b969188a33016f473dd1b401d9 + PRODUCT_NAME + STRING + + + PRODUCT_NAME + 200 + 22 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401de + DISTRIBUTOR_NAME + STRING + + + DISTRIBUTOR_NAME + 200 + 23 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401da + AFFILIATEDNAME + STRING + + + AFFILIATEDNAME + 200 + 24 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401dc + FRAME_NUMBER + STRING + + + FRAME_NUMBER + 150 + 25 + true + + false + false + false + false + + + + + + 2c9c81b6710c46490171148b10680004 + attention_status + STRING + + + attention_status + 100 + 26 + true + + false + false + false + false + + + + + + 2c9c81b6710c46490171148b105c0001 + openid + STRING + + + openid + 100 + 27 + true + + false + false + false + false + + + + + + 2c9c81b969188a33016f473dd1b401d7 WECHAT_NAME STRING WECHAT_NAME 100 - 19 + 28 + true + + false + false + false + false + + + + + + 2c9c81b6710c46490171148b10680005 + binding_time + STRING + + + binding_time + 200 + 29 true false @@ -263,7 +365,7 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b320028 + 2c9c81b969188a33016f473dd1b401e0 CUSTOMERNAME CUSTOMERNAME @@ -273,7 +375,7 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI 0 - 2c9c81b66f1cf0bd016f37f08b320029 + 2c9c81b969188a33016f473dd1b401e1 CERTID_ CERTID_ @@ -296,12 +398,12 @@ WHERE WUI.BINDING_STATUS='Y' AND (LCI.CONTRACT_STATUS BETWEEN 31 AND 100 OR LCI - 2c9c81b66f1cf0bd016f37f08b2f001d + 2c9c81b969188a33016f473dd1b301d5 0 0 0 - TABLE#2c9c81b66e5d8b8b016eacb4b11f0197 - 2c9c81b66e5d8b8b016eacb3adb80196 + TABLE#2c9c81b969188a33016f371d633b014b + 2c9c81b969188a33016f371d6341014c TABLE diff --git a/鎶ヨ〃/姹借溅绫绘姤琛ㄤ簩/淇″鑰冩牳缁熻鎶ヨ〃.xml b/鎶ヨ〃/姹借溅绫绘姤琛ㄤ簩/淇″鑰冩牳缁熻鎶ヨ〃.xml index 38da0f7e5..b245835c3 100644 --- a/鎶ヨ〃/姹借溅绫绘姤琛ㄤ簩/淇″鑰冩牳缁熻鎶ヨ〃.xml +++ b/鎶ヨ〃/姹借溅绫绘姤琛ㄤ簩/淇″鑰冩牳缁熻鎶ヨ〃.xml @@ -37,46 +37,26 @@ xskhtj 2c9023815726a036015726a496b00001 COMPLEXSQL - SELECT VED.EVERY_DAY AS every_day,IFNULL(CONCAT(FT1.PHASENAME,'/',FT1.USERNAME),'') AS phseanduser,IFNULL(ROUND(FT2.SPSJ/FT3.SP_NUM,2),'') AS spxl,IFNULL(FT1.INPUT_NUM,'') AS inputnum,IFNULL(FT3.SP_NUM,'') AS spjnum,IFNULL(CONCAT(ROUND(IFNULL(FT3.SP_NUM,0)/IFNULL(FT1.INPUT_NUM,0)*100,2),'%'),'') spl,IFNULL(FT4.SP_PASS_NUM,'') AS tgnum,IFNULL(CONCAT(ROUND(IFNULL(FT4.SP_PASS_NUM,0)/IFNULL(FT3.SP_NUM,0)*100,2),'%'),'') AS tgl,IFNULL(FT5.SP_REFUSE_NUM,'') AS thnum,IFNULL(CONCAT(ROUND(IFNULL(FT5.SP_REFUSE_NUM,0)/IFNULL(FT3.SP_NUM,0)*100,2),'%'),'') AS thl,IFNULL(REFUSE1.REFUSE_NUM,'') AS xynum,IFNULL(REFUSE2.REFUSE_NUM,'') AS fynum,IFNULL(REFUSE3.REFUSE_NUM,'') AS xjnum,IFNULL(REFUSE4.REFUSE_NUM,'') AS sfnum,IFNULL(REFUSE5.REFUSE_NUM,'') AS gcnum,IFNULL(REFUSE6.REFUSE_NUM,'') AS zhnum -FROM VI_EVERY_DAY VED -LEFT JOIN (SELECT CASE WHEN FT.begintime BETWEEN DATE_FORMAT( FT.begintime, '%Y/%m/%d 17:30:59' ) AND DATE_FORMAT( FT.begintime, '%Y/%m/%d 23:59:59' ) THEN LEFT(DATE_FORMAT(DATE_ADD(FT.begintime, INTERVAL 1 DAY ),'%Y/%m/%d'), 10 ) ELSE LEFT( FT.begintime,10 ) END SP_TIME,MAX(FT.PHASENAME) AS PHASENAME,FT.USERNAME,COUNT(FT.BEGINTIME) INPUT_NUM FROM FLOW_TASK FT WHERE FT.flowname = '涓氬姟鐢宠娴佺▼' AND FT.phaseno='0030' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND FT.BEGINTIME=(SELECT MIN(BEGINTIME) AS BEGINTIME FROM FLOW_TASK WHERE flowname = '涓氬姟鐢宠娴佺▼' AND phaseno='0030' AND (USERNAME IS NOT NULL OR USERNAME <>'') AND OBJECTNO=FT.OBJECTNO GROUP BY OBJECTNO) GROUP BY SP_TIME,FT.USERNAME)FT1 ON FT1.SP_TIME=VED.EVERY_DAY -LEFT JOIN (SELECT LEFT(FT.ENDTIME,10) AS SP_TIME,SUM(CASE WHEN FT.begintime < DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) AND FT.endtime <DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) THEN TIMESTAMPDIFF( SECOND, FT.begintime, FT.endtime ) WHEN FT.begintime < DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) AND (FT.endtime BETWEEN DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) AND DATE_FORMAT( DATE_ADD(FT.begintime, INTERVAL 1 DAY ), '%Y/%m/%d 09:00:00' ) ) THEN TIMESTAMPDIFF( SECOND, FT.begintime, DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) ) WHEN FT.begintime < DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) AND FT.endtime > DATE_FORMAT( DATE_ADD(FT.begintime, INTERVAL 1 DAY ), '%Y/%m/%d 09:00:00' ) THEN TIMESTAMPDIFF( SECOND,FT.begintime, DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59')) +((TIMESTAMPDIFF(DAY,DATE_FORMAT(FT.begintime,'%Y/%m/%d'),DATE_FORMAT(FT.endtime,'%Y/%m/%d'))-1)*8.5*60*60)+(CASE WHEN (FT.endtime BETWEEN DATE_FORMAT(FT.endtime,'%Y/%m/%d 09:00:00' ) AND DATE_FORMAT(FT.endtime,'%Y/%m/%d 17:30:59' )) THEN TIMESTAMPDIFF(SECOND,DATE_FORMAT(FT.endtime,'%Y/%m/%d 09:00:00' ),FT.endtime) ELSE 0 END) WHEN (FT.begintime BETWEEN DATE_FORMAT(FT.begintime,'%Y/%m/%d 17:30:59' ) AND DATE_FORMAT( DATE_ADD(FT.begintime, INTERVAL 1 DAY ), '%Y/%m/%d 09:00:00' ) ) THEN (CASE WHEN TIMESTAMPDIFF(DAY,DATE_FORMAT(FT.begintime,'%Y/%m/%d'),DATE_FORMAT(FT.endtime,'%Y/%m/%d')) >0 THEN ((TIMESTAMPDIFF(DAY,DATE_FORMAT(FT.begintime,'%Y/%m/%d'),DATE_FORMAT(FT.endtime,'%Y/%m/%d'))-1)*8.5*60*60) ELSE 0 END)+(CASE WHEN FT.endtime BETWEEN DATE_FORMAT(FT.endtime,'%Y/%m/%d 09:00:00' ) AND DATE_FORMAT(FT.endtime,'%Y/%m/%d 17:30:59' ) THEN TIMESTAMPDIFF(SECOND,DATE_FORMAT(FT.endtime,'%Y/%m/%d 09:00:00' ),FT.endtime) ELSE 0 END) ELSE TIMESTAMPDIFF( SECOND, FT.begintime, FT.endtime ) END)/60 SPSJ,FT.USERNAME FROM FLOW_TASK FT WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FT.phaseno='0030' AND FT.endtime IS NOT NULL AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND FT.ENDTIME=(SELECT MAX(ENDTIME) AS ENDTIME FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' AND endtime IS NOT NULL AND (USERNAME IS NOT NULL OR USERNAME <>'') AND OBJECTNO=FT.OBJECTNO GROUP BY OBJECTNO) AND NOT EXISTS(SELECT 1 FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phasename IN('缁忛攢鍟嗗彂璧','淇″涓撳憳鍒濆','淇″鍒濆') AND (ENDTIME IS NULL OR ENDTIME='') AND OBJECTNO=FT.OBJECTNO) GROUP BY LEFT(FT.endtime,10),FT.USERNAME)FT2 ON FT2.SP_TIME=FT1.SP_TIME AND FT1.USERNAME=FT2.USERNAME -LEFT JOIN (SELECT LEFT(FT.ENDTIME,10) AS SP_TIME,COUNT(FT.ENDTIME) AS SP_NUM,FT.USERNAME FROM FLOW_TASK FT WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FT.ENDTIME IS NOT NULL AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND FT.PHASENO = '0030' AND FT.ENDTIME=(SELECT MIN(ENDTIME) AS ENDTIME FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND ENDTIME IS NOT NULL AND (USERNAME IS NOT NULL OR USERNAME <>'') AND PHASENO = '0030' AND OBJECTNO=FT.OBJECTNO GROUP BY OBJECTNO) AND EXISTS(SELECT 1 FROM FLOW_OBJECT FO WHERE FO.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND (FO.PHASENO='1000' OR FO.PHASENO='8000'))GROUP BY LEFT(FT.ENDTIME,10),FT.USERNAME)FT3 ON FT3.SP_TIME=FT1.SP_TIME AND FT3.USERNAME=FT1.USERNAME -LEFT JOIN (SELECT LEFT(FT.ENDTIME,10) AS SP_TIME,COUNT(FT.ENDTIME) AS SP_PASS_NUM,FT.USERNAME FROM FLOW_TASK FT WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FT.ENDTIME IS NOT NULL AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND FT.PHASENO = '0030' AND FT.ENDTIME=(SELECT MIN(ENDTIME) AS ENDTIME FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND ENDTIME IS NOT NULL AND (USERNAME IS NOT NULL OR USERNAME <>'') AND PHASENO = '0030' AND OBJECTNO=FT.OBJECTNO GROUP BY OBJECTNO) AND EXISTS(SELECT 1 FROM FLOW_OBJECT FO WHERE FO.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='1000')GROUP BY LEFT(FT.ENDTIME,10),FT.USERNAME)FT4 ON FT4.SP_TIME=FT1.SP_TIME AND FT4.USERNAME=FT1.USERNAME -LEFT JOIN (SELECT LEFT(ENDTIME,10) AS SP_TIME,FT.PHASENAME,COUNT(ENDTIME) AS SP_REFUSE_NUM,FT.USERNAME FROM FLOW_TASK FT WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FT.ENDTIME IS NOT NULL AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND FT.PHASENO = '0030' AND FT.ENDTIME=(SELECT MAX(ENDTIME) AS ENDTIME FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND ENDTIME IS NOT NULL AND (USERNAME IS NOT NULL OR USERNAME <>'') AND PHASENO = '0030' AND OBJECTNO = FT.OBJECTNO GROUP BY OBJECTNO) AND EXISTS(SELECT 1 FROM FLOW_OBJECT FO WHERE FO.FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000')GROUP BY LEFT(FT.ENDTIME,10),FT.USERNAME)FT5 ON FT5.SP_TIME=FT1.SP_TIME AND FT5.USERNAME=FT1.USERNAME -LEFT JOIN (SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0010' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10) )REFUSE1 ON REFUSE1.SP_TIME=FT1.SP_TIME AND REFUSE1.username=FT1.USERNAME -LEFT JOIN (SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0020' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10))REFUSE2 ON REFUSE2.SP_TIME=FT1.SP_TIME AND REFUSE2.username=FT1.USERNAME -LEFT JOIN (SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0030' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10))REFUSE3 ON REFUSE3.SP_TIME=FT1.SP_TIME AND REFUSE3.username=FT1.USERNAME -LEFT JOIN (SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0040' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10))REFUSE4 ON REFUSE4.SP_TIME=FT1.SP_TIME AND REFUSE4.username=FT1.USERNAME -LEFT JOIN ( -SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0050' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10) -)REFUSE5 ON REFUSE5.SP_TIME=FT1.SP_TIME AND REFUSE5.username=FT1.USERNAME -LEFT JOIN (SELECT xin.SP_TIME AS SP_TIME,COUNT(xin.phaseopinion) REFUSE_NUM,us.username FROM ( -SELECT LEFT(ft.endtime,10) AS SP_TIME,FT.PHASENAME,fob.phaseopinion AS phaseopinion -,ft.objectno,ft.endtime FROM FLOW_OPINION_BUSINESS FOB LEFT JOIN FLOW_TASK FT ON FT.RELATIVEOBJECTNO=FOB.SERIALNO WHERE FT.FLOWNAME='涓氬姟鐢宠娴佺▼' AND (FT.USERNAME IS NOT NULL OR FT.USERNAME <>'') AND (ft.phaseno='0040' OR ft.phaseno='0060') AND FOB.PHASEOPINION='0060' AND EXISTS(SELECT 1 FROM flow_object fo WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND FO.OBJECTNO=FT.OBJECTNO AND FO.PHASENO='8000') ) xin LEFT JOIN (SELECT username,objectno FROM FLOW_TASK WHERE FLOWNAME='涓氬姟鐢宠娴佺▼' AND phaseno='0030' GROUP BY objectno - ) us ON us.objectno=xin.objectno -GROUP BY LEFT(xin.endtime,10))REFUSE6 ON REFUSE6.SP_TIME=FT1.SP_TIME AND REFUSE6.username=FT1.USERNAME -ORDER BY ved.every_day DESC + SELECT +VED.EVERY_DAY AS every_day, +IFNULL(CONCAT(st.auditFlowTypeDes,'/',st.username),'') AS phseanduser, +IFNULL(ROUND(st.audittime/st.count_audit,2),'') AS spxl, +IFNULL(st.order_count,'') AS inputnum, +IFNULL(st.count_audit,'') AS spjnum, +IFNULL(CONCAT(ROUND(IFNULL(st.count_audit,0)/IFNULL(st.order_count,0)*100,2),'%'),'') spl, +IFNULL(st.count_audit_pass,'') AS tgnum, +IFNULL(CONCAT(ROUND(IFNULL(st.count_audit_pass,0)/IFNULL(st.count_audit,0)*100,2),'%'),'') AS tgl, +IFNULL(st.count_audit_refuse,'') AS thnum, +IFNULL(CONCAT(ROUND(IFNULL(st.count_audit_refuse,0)/IFNULL(st.count_audit,0)*100,2),'%'),'') AS thl, +IFNULL(st.count_audit_refuse1,'') AS xynum, +IFNULL(st.count_audit_refuse2,'') AS fynum, +IFNULL(st.count_audit_refuse3,'') AS xjnum, +IFNULL(st.count_audit_refuse4,'') AS sfnum, +IFNULL(st.count_audit_refuse5,'') AS gcnum, +IFNULL(st.count_audit_refuse6,'') AS zhnum +FROM VI_EVERY_DAY VED +LEFT JOIN st_credit_audit_order st ON st.every_day = VED.EVERY_DAY +ORDER BY ved.every_day DESC