zoukankan      html  css  js  c++  java
  • 客服工作台

    public Page<Record> customerDeskList(QhyfController controller) throws Exception {
            //获取分页信息
            PageInfo pageInfo = controller.getPageInfo();
            int pageNumber = pageInfo.getPageIndex();
            int pageSize = pageInfo.getPageSize();
            List<String> paras = new ArrayList<String>();
            //获取查询条件--核心企业
            String coreEnterpriseId = controller.getPara("coreEnterpriseId");
            //获取查询条件--供应商名称
            String supplierName = controller.getPara("supplierName");
            //获取查询条件--是否已完成
            String completeStatus = controller.getPara("completeStatus");
            // 获取当前登录用户uuid
            String userUuid = controller.getCurrentUser().get(BlConstant.FIELD_USER_ID);
            // 办理事项
            String matterId = controller.getPara("matterId");
            // 付款确认书编号
            String payId = controller.getPara("payId");
            // 区域
            String coreRegionId = controller.getPara("regionId");
            // 保理申请开始日期
            String startTransferApplyDate = controller.getPara("startTransferApplyDate");
            // 保理申请结束日期
            String endTransferApplyDate = controller.getPara("endTransferApplyDate");
            
            // 当登录用户不是客服主管时,添加分配客服id条件
            String csWhere = "";
            if (!isCsUser(userUuid)) {
                csWhere = String.format(" AND a.cs_user_id = %s ", "'"+ userUuid+ "'");
            }
            
            // 定义总查询条件
            String where = "";
            // 定义子查询条件
            String aubQueryWhere = "";
            // 定义子查询条件
            String queryWhere = "";
            // 定义子查询参数List
            List<String> aubQueryParas = new ArrayList<String>();
            // 查询条件:是否已完成、办理事项都不为空时,查询该办理事项 存在未完成/已完成 的供应商
            if(StringUtils.notBlank(completeStatus) && StringUtils.notBlank(matterId)){
                aubQueryWhere += " AND b.matter_id = ? and b.complete_status = ? ";
                aubQueryParas.add(matterId);
                aubQueryParas.add(completeStatus);
            }
            // 查询条件:是否已完成不为空、办理事项为空时,查询该供应商对应的所有任务是否完成
            else if(StringUtils.notBlank(completeStatus) && StringUtils.isBlank(matterId)){
                if ("1".equals(completeStatus)) {
                    where += " AND x.complete = x.total ";
                } else if ("0".equals(completeStatus)) {
                    where += " AND x.complete <> x.total ";
                }
            }
            // 查询条件:是否已完成为空、办理事项不为空时,查询包含有该任务的所有供应商
            else if(StringUtils.isBlank(completeStatus) && StringUtils.notBlank(matterId)){
                aubQueryWhere += " AND b.matter_id = ? ";
                aubQueryParas.add(matterId);
            }
            
            //查询条件--付款确认书编号不为空时
            if(StringUtils.notBlank(payId)){
                // 调用共通转义
                payId = this.strEscape(payId);
                aubQueryWhere += " AND c.pay_id LIKE ? ";
                aubQueryParas.add("%" + payId + "%");
            }
            
            //查询条件--区域不为空时
            if(StringUtils.notBlank(coreRegionId)){
                String coreRegionIds[] = coreRegionId.split("-");
                String regionId = coreRegionIds[1];
                aubQueryWhere += " AND d.region_id = ? ";
                aubQueryParas.add(regionId);
            }
            
            //查询条件--保理申请开始日期不为空时
            if(StringUtils.notBlank(startTransferApplyDate)){
                aubQueryWhere += " AND DATE_FORMAT(c.transfer_apply_date,'%Y-%m-%d') >= ? ";
                aubQueryParas.add(startTransferApplyDate);
            }
            
            //查询条件--保理申请结束日期不为空时
            if(StringUtils.notBlank(endTransferApplyDate)){
                aubQueryWhere += " AND DATE_FORMAT(c.transfer_apply_date,'%Y-%m-%d') <= ? ";
                aubQueryParas.add(endTransferApplyDate);
            }
            
            // 子查询条件不为空时
            if (StringUtils.notBlank(aubQueryWhere)){
                // 定义查询SQL, 查询出符合子查询条件的供应商及对应的核心企业
                String querySQL  = String.format(""
                        + "select distinct "
                        + "       a.suppliers_id, "
                        + "       a.core_enterprise_id "
                        + "  from biz_business_task_allocate a, "
                        + "       biz_cs_task_info b "
                        + "       left join biz_pay_comfirm_info c "
                        + "         on c.sys_status = 1 "
                        + "            and c.uuid = b.biz_id "
                        + "       left join biz_item_company d "
                        + "         on d.uuid = c.item_company_id "
                        + "            and d.sys_status = 1 "
                        + " where a.sys_status = 1 "
                        + "   and b.sys_status = 1 "
                        + "   and a.biz_id = b.biz_id %s %s ", aubQueryWhere, csWhere);
                // 执行子查询SQL, 获取符合子查询条件的供应商及对应的核心企业
                // add by wj 从读库中获取数据 20181114 start
                List<Record> aubQueryRecordList = Db.use(BlConstant.READ_ONLY).find(querySQL, aubQueryParas.toArray());
                // add by wj 从读库中获取数据 20181114 end
                // 循环子查询结果,构造查询条件
                for(int i = 0 ; i< aubQueryRecordList.size(); i++){
                    // 结果只有一条数据时
                    if(aubQueryRecordList.size() == 1){
                        where += "AND ( x.suppliers_id = ? AND x.core_enterprise_id = ? )";
                        paras.add(aubQueryRecordList.get(i).getStr("suppliersId"));
                        paras.add(aubQueryRecordList.get(i).getStr("coreEnterpriseId"));
                        queryWhere += "AND ( a.suppliers_id = '" + aubQueryRecordList.get(i).getStr("suppliersId") 
                                    + "' AND a.core_enterprise_id = '" + aubQueryRecordList.get(i).getStr("coreEnterpriseId") + "' )";
                    // 结果不止一条数据时
                    }else{
                        // 第一条数据
                        if(i == 0){
                            where += "AND ( (x.suppliers_id = ? AND x.core_enterprise_id = ?) OR ";
                            paras.add(aubQueryRecordList.get(i).getStr("suppliersId"));
                            paras.add(aubQueryRecordList.get(i).getStr("coreEnterpriseId"));
                            queryWhere += "AND ( (a.suppliers_id = '" + aubQueryRecordList.get(i).getStr("suppliersId") 
                                    + "' AND a.core_enterprise_id = '" + aubQueryRecordList.get(i).getStr("coreEnterpriseId") + "') OR ";
                        }
                        else if(i<aubQueryRecordList.size() - 1){
                            where += " (x.suppliers_id = ? AND x.core_enterprise_id = ?) OR ";
                            paras.add(aubQueryRecordList.get(i).getStr("suppliersId"));
                            paras.add(aubQueryRecordList.get(i).getStr("coreEnterpriseId"));
                            queryWhere += " (a.suppliers_id = '" + aubQueryRecordList.get(i).getStr("suppliersId") 
                                        + "' AND a.core_enterprise_id = '" + aubQueryRecordList.get(i).getStr("coreEnterpriseId") + "') OR ";
                        }
                        // 最后一条数据
                        else if(i == aubQueryRecordList.size() - 1){
                            where += " (x.suppliers_id = ? AND x.core_enterprise_id = ?))";
                            paras.add(aubQueryRecordList.get(i).getStr("suppliersId"));
                            paras.add(aubQueryRecordList.get(i).getStr("coreEnterpriseId"));
                            queryWhere += " (a.suppliers_id = '" + aubQueryRecordList.get(i).getStr("suppliersId") 
                                        + "' AND a.core_enterprise_id = '" + aubQueryRecordList.get(i).getStr("coreEnterpriseId") + "'))";
                        }
                    }
                }
            }
            //查询条件--核心企业不为空时
            if(StringUtils.notBlank(coreEnterpriseId)){
                where += " AND x.core_enterprise_id = ? ";
                paras.add(coreEnterpriseId);
                if(!StringUtils.notBlank(aubQueryWhere)){
                    queryWhere += " AND a.core_enterprise_id = '" + coreEnterpriseId + "' ";
                }
            }
            //查询条件--供应商名称不为空时
            if(StringUtils.notBlank(supplierName)){
                // 调用共通转义
                supplierName = this.strEscape(supplierName);
                where += " AND x.suppliers_name LIKE ? ";
                paras.add("%" + supplierName + "%");
                if(!StringUtils.notBlank(aubQueryWhere)){
                    queryWhere += " AND d.suppliers_name LIKE '%" + supplierName + "%' ";
                }
            }
            
            // selectSql
            String selectSql = " "
                    + " SELECT "
                    + "   x.core_enterprise_name, "
                    + "   x.suppliers_name, "
                    + "   x.complete, "
                    + "   x.total, "
                    + "   x.complete_status, "
                    + "   x.items_num, "
                    + "   x.suppliers_id, "
                    + "   x.core_enterprise_id ";
    
            // fromSql
            String fromSql = String.format(""
                    + " FROM ("
                    + "        SELECT "
                    + "            y.core_enterprise_name, "
                    + "            y.suppliers_name, "
                    + "            y.suppliers_id, "
                    + "            y.core_enterprise_id, "
                    + "            SUM(y.complete_status = 1) AS complete, "
                    + "            COUNT(y.complete_status) AS total, "
                    + "            IF (SUM(y.complete_status = 1) = COUNT(y.complete_status), '已完成', '未完成') AS complete_status, "
                    + "            CONCAT_WS('/',CAST(    SUM(y.complete_status = 1) AS CHAR), CAST(COUNT(y.complete_status) AS CHAR) ) AS items_num "
                    + "        FROM "
                    + "            ( "
                    + "                SELECT "
                    + "                    c.core_enterprise_name, "
                    + "                    d.suppliers_name, "
                    + "                    b.complete_status, "
                    + "                    a.suppliers_id, "
                    + "                    a.core_enterprise_id "
                    + "                FROM "
                    + "                    biz_business_task_allocate a, "
                    + "                    biz_core_enterprise c, "
                    + "                    biz_suppliers d, "
                    + "                    biz_cs_task_info b "
                    + "                WHERE "
                    + "                    a.sys_status = 1 "
                    + "                    AND b.sys_status = 1 "
                    + "                    AND b.biz_type = 'F' "
                    + "                    AND a.biz_type = 'F' "
                    + "                    AND c.sys_status = 1 "
                    + "                    AND d.sys_status = 1 "
                    + "                    AND a.biz_id = b.biz_id "
                    + "                    AND a.core_enterprise_id = c.uuid "
                    + "                    AND a.suppliers_id = d.uuid "
                    + "                    AND a.biz_id NOT IN ( "
                    + "                                        SELECT "
                    + "                                            f.pay_id "
                    + "                                        FROM "
                    + "                                            biz_rollback_pay f "
                    + "                                        WHERE "
                    + "                                             f.`sys_status` = 1 "
                    + "                                            AND f.`biz_state` <> 15 "
                    + "                                        ) %s %s"
                    + "         UNION ALL "
                    + "                SELECT "
                    + "                    c.core_enterprise_name, "
                    + "                    d.suppliers_name, "
                    + "                    b.complete_status, "
                    + "                    a.suppliers_id, "
                    + "                    a.core_enterprise_id "
                    + "                FROM "
                    + "                    biz_business_task_allocate a, "
                    + "                    biz_core_enterprise c, "
                    + "                    biz_suppliers d, "
                    + "                    biz_cs_task_info b "
                    + "                WHERE "
                    + "                    a.sys_status = 1 "
                    + "                    AND b.sys_status = 1 "
                    + "                    AND c.sys_status = 1 "
                    + "                    AND d.sys_status = 1 "
                    + "                    AND b.biz_type = 'S' "
                    + "                    AND a.biz_type = 'S' "
                    + "                    AND a.biz_id = b.biz_id "
                    + "                    AND a.core_enterprise_id = c.uuid "
                    + "                    AND a.suppliers_id = d.uuid %s %s"
                    + "            ) y "
                    + "            GROUP BY y.suppliers_id,y.core_enterprise_id "
                    + "        ) x " 
                    + "    WHERE 1=1  %s "
                    + " ORDER BY x.suppliers_name DESC, x.core_enterprise_id DESC ", csWhere, queryWhere,csWhere, queryWhere, where);
            
                // 执行SQL,将获取的数据返回前端
               // add by wj 从读库中获取数据 20181114 start
                Page<Record> pageRecords = Db.use(BlConstant.READ_ONLY).paginate(pageNumber, pageSize, selectSql, fromSql, paras.toArray());
                // add by wj 从读库中获取数据 20181114 end
                
                // 客服工作台增加一列,显示此供应商最近一次首次签约(包含续签)的流程状态(包括线上、线下)。   
                if (pageRecords.getList() != null && pageRecords.getList().size() > 0) {
                    for (Record customerDeskInfo : pageRecords.getList()) {
                        // 准入流程最新流程状态
                        String instanceLastActivity = "";
                        // 获取供应商ID
                        String suppliersId = customerDeskInfo.getStr("suppliersId");
                        // 获取核心企业ID
                        String coreEnterpriseUuid = customerDeskInfo.getStr("coreEnterpriseId");
                        
                        // 以供应商ID、核心企业ID为条件,获取该供应商最新的签约信息
                        Record firstContractInfo = getFirstContractInfo(suppliersId, coreEnterpriseUuid);
                        
                        // 签约信息不为空时
                        if(firstContractInfo != null){
                            // 获取首次签约ID
                            String firstContractId = firstContractInfo.getStr("uuid");
                            
                            // 根据首次签约ID, 获取最新准入接收ID
                            String admittanceReceptionId = getAdmittanceReceptionId(firstContractId);
                            // 准入接收ID不为空,则存在准入线下流程信息
                            if(StringUtils.notBlank(admittanceReceptionId)){
                                // 根据接收ID,获取最新准入线下流程信息
                                Record instanceLastActivityInfo = getInstanceLastActivityInfo(admittanceReceptionId);
                                if(instanceLastActivityInfo != null){
                                    // 流程最新活动名称
                                    String activityName = instanceLastActivityInfo.getStr("activityName");
                                    
                                    if("0".equals(firstContractInfo.getStr("renewFlag"))){
                                        // 不是续签时
                                        instanceLastActivity = "首次签约-" + activityName + "-" + instanceLastActivityInfo.getStr("status");
                                    }else{
                                        // 是续签时
                                        instanceLastActivity = "第"+ firstContractInfo.getInt("renewCount") + "次续签-" + activityName + 
                                                "-" + instanceLastActivityInfo.getStr("status") ;
                                    }
                                    // 当流程风控审核已经完成时, 判断资料是否齐全
                                    if("风控审核".equals(activityName) && "已完成".equals(instanceLastActivityInfo.getStr("status"))){
                                        // 判断准入资料是否接收齐全
                                        boolean isCompleteFlag = isAdmittanceReceptionComplete(firstContractId);
                                        // 资料齐全时
                                        if(isCompleteFlag){
                                            instanceLastActivity = instanceLastActivity + "-资料齐全";
                                        }else{
                                            instanceLastActivity = instanceLastActivity + "-资料未齐全";
                                        }
                                    }
                                }
                            }
                            // 准入接收ID为空,则只有准入线上流程信息
                            else{
                                // 根据首次签约ID,获取最新准入线上流程信息
                                Record instanceLastActivityInfo = getInstanceLastActivityInfo(firstContractId);
                                if(instanceLastActivityInfo != null){
                                    // 流程最新活动名称
                                    String activityName = instanceLastActivityInfo.getStr("activityName");
                                    // 判断是否续签
                                    if("0".equals(firstContractInfo.getStr("renewFlag"))){
                                        // 不是续签时
                                        instanceLastActivity = "首次签约-" + activityName + "-" + instanceLastActivityInfo.getStr("status");
                                    }else{
                                        // 是续签时
                                        instanceLastActivity = "第"+ firstContractInfo.getInt("renewCount") + "次续签-" + activityName + 
                                                "-" + instanceLastActivityInfo.getStr("status") ;
                                    }
                                }
                            }
                        }
                        // 准入流程最新流程状态,添加进客服任务信息中
                        customerDeskInfo.set("instanceLastActivity", instanceLastActivity);
                    }
                }
                
                return pageRecords;
            
        }
  • 相关阅读:
    left join 和 inner join 区别和优化
    认识位移操作符
    動態修改 XML 欄位
    (轉載)sql server xml字段的操作
    (轉)CSS 单行溢出文本显示省略号...的方法(兼容IE FF)
    (轉)Equal height boxes with CSS
    獲得瀏覽器顯示標簽的真實的長寬高
    轉:Jquery绑定img的click事件
    SqlLocalDB 的一些常用命令行
    转:css实现强制不换行/自动换行/强制换行
  • 原文地址:https://www.cnblogs.com/xiaoniuniu886/p/11118898.html
Copyright © 2011-2022 走看看