[agent-pipeline] pipe-20260328071539-8dqp round-2

This commit is contained in:
DDD1542
2026-03-28 16:24:36 +09:00
parent 8f61c49f19
commit a7c9ba2982
9 changed files with 61 additions and 15 deletions
@@ -308,7 +308,7 @@ public class AdminController {
* 부서 목록 조회
*/
@GetMapping("/departments")
public ResponseEntity<ApiResponse<List<Map<String, Object>>>> getDepartmentList(
public ResponseEntity<ApiResponse<Map<String, Object>>> getDepartmentList(
@RequestAttribute("companyCode") String companyCode,
@RequestParam Map<String, Object> params) {
params.put("companyCode", companyCode);
@@ -13,7 +13,7 @@ import java.util.List;
import java.util.Map;
@RestController
@RequestMapping("/api/approvals")
@RequestMapping("/api/approval")
@RequiredArgsConstructor
@Slf4j
public class ApprovalController {
@@ -1,6 +1,7 @@
package com.erp.controller;
import com.erp.dto.ApiResponse;
import com.erp.service.CommonService;
import com.erp.service.ScreenManagementService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -17,6 +18,7 @@ import java.util.Map;
public class ScreenManagementController {
private final ScreenManagementService service;
private final CommonService commonService;
// ─── 화면 목록 / 단건 ─────────────────────────────────────
@@ -42,7 +44,7 @@ public class ScreenManagementController {
if (screen == null) {
return ResponseEntity.status(404).body(ApiResponse.error("화면을 찾을 수 없습니다."));
}
return ResponseEntity.ok(ApiResponse.success(screen));
return ResponseEntity.ok(ApiResponse.success(commonService.toCamelCaseKeys(screen)));
}
@GetMapping("/screens/{id}/menu")
@@ -336,9 +338,10 @@ public class ScreenManagementController {
}
@GetMapping("/screens/{screenId}/layout")
public ResponseEntity<ApiResponse<List<Map<String, Object>>>> getLayout(
public ResponseEntity<ApiResponse<Map<String, Object>>> getLayout(
@RequestAttribute("companyCode") String companyCode,
@PathVariable Integer screenId) {
return ResponseEntity.ok(ApiResponse.success(service.getLayoutV1(screenId)));
return ResponseEntity.ok(ApiResponse.success(service.getLayout(screenId, companyCode)));
}
@GetMapping("/screens/{screenId}/layout-v1")
@@ -25,7 +25,9 @@ public class AdminService extends BaseService {
public List<Map<String, Object>> getAdminMenuList(Map<String, Object> params) {
params.putIfAbsent("userLang", "ko");
params.putIfAbsent("includeInactive", false);
// String "false"/"true" → Boolean (OGNL !includeInactive 오작동 방지)
Object includeInactiveRaw = params.get("includeInactive");
params.put("includeInactive", Boolean.TRUE.equals(includeInactiveRaw) || "true".equals(includeInactiveRaw));
params.putIfAbsent("isManagementScreen", false);
return sqlSession.selectList("admin.selectAdminMenuList", params);
}
@@ -124,7 +126,7 @@ public class AdminService extends BaseService {
pagination.put("totalPages", totalPages);
Map<String, Object> result = new HashMap<>();
result.put("data", users);
result.put("data", commonService.toCamelCaseKeysList(users));
result.put("total", total);
result.put("searchType", rawSearch != null ? "v2" : "none");
result.put("pagination", pagination);
@@ -336,15 +338,18 @@ public class AdminService extends BaseService {
// ── 부서 관리 ──────────────────────────────────────────────────────────
public List<Map<String, Object>> getDepartmentList(Map<String, Object> params) {
public Map<String, Object> getDepartmentList(Map<String, Object> params) {
commonService.applyCompanyCodeFilter(params);
return sqlSession.selectList("admin.selectDepartmentList", params);
List<Map<String, Object>> list = sqlSession.selectList("admin.selectDepartmentList", params);
return commonService.buildListResponse(list, list.size(), params);
}
// ── 회사 관리 ──────────────────────────────────────────────────────────
public List<Map<String, Object>> getCompanyList() {
return sqlSession.selectList("admin.selectCompanyList", new HashMap<>());
List<Map<String, Object>> list = sqlSession.selectList("admin.selectCompanyList", new HashMap<>());
list.forEach(row -> row.put("data_type", "company"));
return list;
}
public Map<String, Object> getCompanyByCode(String companyCode) {
@@ -25,7 +25,10 @@ public class ScheduleService extends BaseService {
Integer totalObj = sqlSession.selectOne(NS + "getScheduleListCnt", params);
int totalCount = totalObj != null ? totalObj : 0;
List<Map<String, Object>> list = sqlSession.selectList(NS + "getScheduleList", params);
return commonService.buildListResponse(list, totalCount, params);
Map<String, Object> result = new LinkedHashMap<>();
result.put("data", list);
result.put("total", totalCount);
return result;
}
public Map<String, Object> getScheduleInfo(Map<String, Object> params) {
@@ -498,6 +498,17 @@ public class ScreenManagementService extends BaseService {
return sqlSession.selectList(NS + "selectLayoutV1ByScreen", params);
}
/** GET /layout — V2 우선 조회 (layer_id=1), 없으면 V1을 { components: [...] } 로 감싸서 반환 */
public Map<String, Object> getLayout(Integer screenId, String companyCode) {
Map<String, Object> v2 = getLayoutV2(screenId, companyCode, 1);
if (v2 != null) return v2;
List<Map<String, Object>> v1 = getLayoutV1(screenId);
Map<String, Object> result = new LinkedHashMap<>();
result.put("components", v1 != null ? v1 : Collections.emptyList());
return result;
}
// ═══════════════════════════════════════════════════════════
// Layout V2
// ═══════════════════════════════════════════════════════════
@@ -32,10 +32,14 @@ public class TableManagementService extends BaseService {
public List<Map<String, Object>> getTableList() {
List<Map<String, Object>> tables = sqlSession.selectList(NS + "getTableList");
// column_count BigInt → Integer 변환
// column_count BigInt → Integer 변환 + camelCase 키 추가 (Node 호환)
for (Map<String, Object> t : tables) {
Object cnt = t.get("column_count");
if (cnt instanceof Number) t.put("column_count", ((Number) cnt).intValue());
if (cnt instanceof Number) {
int intVal = ((Number) cnt).intValue();
t.put("column_count", intVal);
t.put("columnCount", intVal);
}
}
return tables;
}
@@ -111,6 +111,16 @@
LIMIT 1),
V.MENU_NAME_KOR
) AS TRANSLATED_NAME
, COALESCE(
(SELECT MLT.LANG_TEXT
FROM MULTI_LANG_KEY_MASTER MLKM
JOIN MULTI_LANG_TEXT MLT
ON MLKM.KEY_ID = MLT.KEY_ID
WHERE MLKM.LANG_KEY = V.LANG_KEY_DESC
AND MLT.LANG_CODE = #{userLang}
LIMIT 1),
V.MENU_DESC
) AS TRANSLATED_DESC
, CASE UPPER(V.STATUS)
WHEN 'ACTIVE' THEN '활성화'
WHEN 'INACTIVE' THEN '비활성화'
@@ -208,6 +218,16 @@
LIMIT 1),
V.MENU_NAME_KOR
) AS TRANSLATED_NAME
, COALESCE(
(SELECT MLT.LANG_TEXT
FROM MULTI_LANG_KEY_MASTER MLKM
JOIN MULTI_LANG_TEXT MLT
ON MLKM.KEY_ID = MLT.KEY_ID
WHERE MLKM.LANG_KEY = V.LANG_KEY_DESC
AND MLT.LANG_CODE = #{userLang}
LIMIT 1),
V.MENU_DESC
) AS TRANSLATED_DESC
, CASE UPPER(V.STATUS)
WHEN 'ACTIVE' THEN '활성화'
WHEN 'INACTIVE' THEN '비활성화'
@@ -393,12 +393,12 @@
SELECT
LAYER_ID
, LAYER_NAME
, CONDITION_CONFIG
, COALESCE(CONDITION_CONFIG, '{}') AS CONDITION_CONFIG
, JSONB_ARRAY_LENGTH(COALESCE(LAYOUT_DATA->'components', '[]'::jsonb)) AS COMPONENT_COUNT
, UPDATED_AT
FROM SCREEN_LAYOUTS_V2
WHERE SCREEN_ID = #{screenId}
<if test="companyCode != null and companyCode != &quot;*&quot;">
<if test='companyCode != null and companyCode != "*"'>
AND (COMPANY_CODE = #{companyCode} OR COMPANY_CODE = '*')
</if>
ORDER BY LAYER_ID