还是这个需求
主界面的列表表格是直接在后台用SQL查出来的
public String getQuerySql(ElemBean condition, List<Object> params) { StringBuilder sql = new StringBuilder(); sql.append("SELECT * FROM (SELECT T.ID, T.MAINTAIN_ID, T.VIN, T.VEHICLE_MODEL_NAME, "); sql.append(" T.VEHICLE_MODEL_CODE, T.RECOMMEND_ASC_AREA, T.VEHICLE_NO, "); sql.append(" T.CLAIMANT_NAME, T.CTO_NAME, T.CTO_PHONE, "); // 2021年4月27日 11点30分 daizhizhou sql.append(" T.CREATED_AT, T.STATUS, T.RECOMMEND_ASC_CODE, T.RECOMMEND_ASC_NAME, "); sql.append(" T.NAME, T.PHONE, T.MILEAGE, T.MANUFACTURING_DATE, T.PRODUCTION_DATE, T.FIRST_CLOSE_DATE, "); sql.append(" T.FIRST_SAVE_DATE, (SELECT MAX(CREATED_AT) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID AND APPLY_STATUS=56771003) APPLY_CLOSE_DATE, "); sql.append(" (SELECT MAX(CREATED_AT) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID AND APPLY_STATUS=56771006) APPLY_OTHER_DATE, "); sql.append(" (SELECT APPLY_STATUS FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_APPLY_STATUS, "); sql.append(" (SELECT IF(APPLY_STATUS=56771003, APPLY_CLOSE_REMARK, APPLY_OTHER_ASC_REMARK) FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_APPLY_REMARK, "); sql.append(" (SELECT AUDIT_REMARK FROM TT_FORESEE_MAINTAIN_ORDER_AUDIT TI1 WHERE TI1.ORDER_ID=T.ID ORDER BY TI1.CREATED_AT DESC LIMIT 1) MAX_AUDIT_REMAR, "); sql.append(" (SELECT GROUP_CONCAT(FAULT_DESC) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_DESC, "); sql.append(" (SELECT GROUP_CONCAT(CORRECTIVE_ACTION) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) CORRECTIVE_ACTION, "); sql.append(" (SELECT GROUP_CONCAT(FAULT_CODE) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_CODE, "); sql.append(" (SELECT GROUP_CONCAT(FAULT_LEVEL) FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL TI1 WHERE TI1.ORDER_ID=T.ID) FAULT_LEVEL "); sql.append(" FROM TT_FORESEE_MAINTAIN_ORDER T "); sql.append(" LEFT JOIN TM_VEHICLE_BASE TV ON TV.VIN = T.VIN "); sql.append(" LEFT JOIN VW_PRODUCT VP ON VP.MODEL_CODE = TV.MODEL_CODE "); sql.append(" WHERE 1 = 1 "); UserInfoDto userInfo = UserUtil.getSessionUser(); if(userInfo.getOrgType().intValue() == Constant.ORG_TYPE_10 || userInfo.getOrgType().intValue() == Constant.ORG_TYPE_13) { sql.append(" AND T.RECOMMEND_ASC_CODE = ? "); params.add(userInfo.getOrgCode()); }else if(!UserUtil.isFactoryType(userInfo.getOrgType())) { sql.append(" AND 1<>1 "); } if(!condition.isNull("vehicleModelCode")) { sql.append(" AND T.VEHICLE_MODEL_CODE LIKE ? "); params.add("%"+condition.getStr("vehicleModelCode")+"%"); } if(!condition.isNull("area")) { sql.append(" AND FIND_IN_SET(T.RECOMMEND_ASC_AREA,?) "); params.add("%"+condition.getStr("area")+"%"); } if(!condition.isNull("vin")) { sql.append(" AND T.VIN LIKE ? "); params.add("%"+condition.getStr("vin")+"%"); } if(!condition.isNull("vehicleNo")) { sql.append(" AND T.VEHICLE_NO LIKE ? "); params.add("%"+condition.getStr("vehicleNo")+"%"); } if(!condition.isNull("createStardate")) { sql.append(" AND T.CREATED_AT >= ? "); params.add(condition.getStr("createStardate")); } if(!condition.isNull("createEndate")) { sql.append(" AND T.CREATED_AT < DATE_ADD(?, INTERVAL 1 DAY) "); params.add(condition.getStr("createEndate")); } if(!condition.isNull("maintainId")) { sql.append(" AND T.MAINTAIN_ID LIKE ? "); params.add("%"+condition.getStr("maintainId")+"%"); } if(!condition.isNull("status")) { sql.append(" AND T.STATUS = ? "); params.add(condition.getInt("status")); } if(!condition.isNull("recommendAscCode")) { sql.append(" AND T.RECOMMEND_ASC_CODE LIKE ? "); params.add("%"+condition.getStr("recommendAscCode")+"%"); } if(!condition.isNull("recommendAscName")) { sql.append(" AND T.RECOMMEND_ASC_NAME LIKE ? "); params.add("%"+condition.getStr("recommendAscName")+"%"); } if(!condition.isNull("phone")) { sql.append(" AND T.PHONE LIKE ? "); params.add("%"+condition.getStr("phone")+"%"); } if(!condition.isNull("faultCode")) { sql.append(" AND T.ID IN (SELECT ORDER_ID FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL WHERE FAULT_CODE LIKE ?) "); params.add("%"+condition.getStr("faultCode")+"%"); } if(!condition.isNull("faultLevel")) { sql.append(" AND T.ID IN (SELECT ORDER_ID FROM TT_FORESEE_MAINTAIN_ORDER_DETAIL WHERE FAULT_LEVEL = ?) "); params.add(condition.getStr("faultLevel")); } sql.append(scSqlUtil.getCyBrandWhereSql("vp.BRAND_ID", params)); sql.append(" ) A "); return sql.toString(); }
这4个字段是从employee进行取值的,这意味着需要直接从SQL中处理好直接带给程序【后台无法处理】
联表 是主表的ID关联 其他表的外键 ORDER_ID:
WHERE TI1.ORDER_ID = T.ID
合并SQL,最后发现,下面的SQL已经这么做了
-- (SELECT group_concat(`NAME` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CLAIMANT_NAME, -- (SELECT group_concat(`NAME` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CTO_NAME, -- (SELECT group_concat(`PHONE` SEPARATOR ', ') FROM TT_FORESEE_MAINTAIN_ORDER_EMPLOYEE EMP WHERE T.ID = EMP.ORDER_ID AND EMP.TYPE = 0) CTO_PHONE,