생산관리 ui 조금이랑 수정한 부분

This commit is contained in:
leeheejin
2025-11-14 09:50:13 +09:00
parent 1f2bdee683
commit 61dbf15b0f
7 changed files with 215 additions and 94 deletions

View File

@@ -7627,29 +7627,65 @@ SELECT
<!-- //영업정보 수정시 프로젝트 정보 업데이트 -->
<update id="ModifyProjectByContract" parameterType="map">
UPDATE PROJECT_MGMT
SET
DUE_DATE = #{due_date}
,CUSTOMER_PROJECT_NAME = #{customer_project_name}
,LOCATION = #{location}
,SETUP = #{setup}
,FACILITY = #{facility}
,FACILITY_TYPE = #{facility_type}
,FACILITY_DEPTH = #{facility_depth}
,CONTRACT_DATE = #{contract_date}
,PO_NO = #{po_no}
,PM_USER_ID = #{pm_user_id}
,CONTRACT_CURRENCY = #{contract_currency}
,CONTRACT_PRICE_CURRENCY = #{contract_price_currency}
,CONTRACT_PRICE = #{contract_price}
,PROJECT_NAME = #{project_name}
,CONTRACT_DEL_DATE = #{contract_del_date}
,REQ_DEL_DATE = #{req_del_date}
,CONTRACT_COMPANY = #{contract_company}
,MANUFACTURE_PLANT = #{manufacture_plant}
,PART_OBJID = #{part_objid}
,PART_NO = #{part_no}
,PART_NAME = #{part_name}
,QUANTITY = #{quantity}
<set>
<if test="due_date != null and due_date != ''">
DUE_DATE = #{due_date},
</if>
<if test="customer_project_name != null and customer_project_name != ''">
CUSTOMER_PROJECT_NAME = #{customer_project_name},
</if>
<if test="location != null and location != ''">
LOCATION = #{location},
</if>
<if test="setup != null and setup != ''">
SETUP = #{setup},
</if>
<if test="facility != null and facility != ''">
FACILITY = #{facility},
</if>
<if test="facility_type != null and facility_type != ''">
FACILITY_TYPE = #{facility_type},
</if>
<if test="facility_depth != null and facility_depth != ''">
FACILITY_DEPTH = #{facility_depth},
</if>
<if test="contract_date != null and contract_date != ''">
CONTRACT_DATE = #{contract_date},
</if>
<if test="po_no != null and po_no != ''">
PO_NO = #{po_no},
</if>
<if test="pm_user_id != null and pm_user_id != ''">
PM_USER_ID = #{pm_user_id},
</if>
<if test="contract_currency != null and contract_currency != ''">
CONTRACT_CURRENCY = #{contract_currency},
</if>
<if test="contract_price_currency != null and contract_price_currency != ''">
CONTRACT_PRICE_CURRENCY = #{contract_price_currency},
</if>
<if test="contract_price != null and contract_price != ''">
CONTRACT_PRICE = #{contract_price},
</if>
<if test="project_name != null and project_name != ''">
PROJECT_NAME = #{project_name},
</if>
<if test="contract_del_date != null and contract_del_date != ''">
CONTRACT_DEL_DATE = #{contract_del_date},
</if>
<if test="req_del_date != null and req_del_date != ''">
REQ_DEL_DATE = #{req_del_date},
</if>
<if test="contract_company != null and contract_company != ''">
CONTRACT_COMPANY = #{contract_company},
</if>
<if test="manufacture_plant != null and manufacture_plant != ''">
MANUFACTURE_PLANT = #{manufacture_plant},
</if>
<if test="quantity != null and quantity != ''">
QUANTITY = #{quantity}
</if>
</set>
WHERE CONTRACT_OBJID = #{objId}
AND PART_OBJID = #{part_objid}
</update>

View File

@@ -1514,8 +1514,11 @@
SELECT
A.OBJID
,A.CATEGORY_CD
,CODE_NAME(A.CATEGORY_CD) AS CATEGORY_NAME
,A.CUSTOMER_OBJID
,(SELECT SUPPLY_NAME FROM SUPPLY_MNG AS O WHERE O.OBJID = A.CUSTOMER_OBJID::NUMERIC) AS CUSTOMER_NAME
,A.PRODUCT
,CODE_NAME(A.PRODUCT) AS PRODUCT_NAME
,A.CUSTOMER_PROJECT_NAME
,A.STATUS_CD
,A.DUE_DATE
@@ -1558,12 +1561,14 @@
,A.EST_COMP_DATE
,A.EST_RESULT_CD
,A.AREA_CD
,CODE_NAME(A.AREA_CD) AS AREA_NAME
,A.TARGET_PROJECT_NO
,A.TARGET_PROJECT_NO_DIRECT
,A.CUSTOMER_PRODUCTION_NO
,A.MECHANICAL_TYPE
,A.OVERHAUL_ORDER
,A.PAID_TYPE
,(case when A.PAID_TYPE = 'paid' then '유상' when A.PAID_TYPE = 'free' then '무상' else A.PAID_TYPE end) AS PAID_TYPE_NAME
,A.RECEIPT_DATE
,A.PART_NO
,A.PART_NAME
@@ -3614,7 +3619,9 @@ ORDER BY ASM.SUPPLY_NAME
<select id="getProjectListBycontractObjid" parameterType="map" resultType="map">
SELECT
PROJECT_NAME
OBJID,
PROJECT_NAME,
PROJECT_NO
FROM
PROJECT_MGMT
WHERE CONTRACT_OBJID = #{objId}

View File

@@ -1660,11 +1660,50 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
<!-- 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함) -->
<select id="getProjectInfo" parameterType="map" resultType="map">
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */
SELECT CONTRACT_OBJID
FROM PROJECT_MGMT
WHERE PROJECT_NO = #{orderNo}
ORDER BY REGDATE DESC
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 상세 정보 조회 (최신 1개) */
SELECT
PM.CONTRACT_OBJID,
PM.PART_NO,
PM.PART_NAME,
-- 요청납기 (CONTRACT_ITEM의 DUE_DATE 우선, 없으면 PROJECT_MGMT.DUE_DATE)
COALESCE(
(SELECT CI.DUE_DATE
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1),
PM.DUE_DATE
) AS REQ_DEL_DATE,
-- S/N 조회 (CONTRACT_ITEM_SERIAL에서)
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
) AS SERIAL_NO,
-- 고객요청사항 (CONTRACT_ITEM에서)
(SELECT CI.CUSTOMER_REQUEST
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1
) AS CUSTOMER_REQUEST,
-- 반납사유 (CONTRACT_ITEM에서)
(SELECT CI.RETURN_REASON
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1
) AS RETURN_REASON
FROM PROJECT_MGMT PM
WHERE PM.PROJECT_NO = #{orderNo}
ORDER BY PM.REGDATE DESC
LIMIT 1
</select>

View File

@@ -61,7 +61,7 @@ var columns = [
{title:'CONTRACT_OBJID', field:'CONTRACT_OBJID', visible: false},
{title:'BOM_REPORT_OBJID', field:'BOM_REPORT_OBJID', visible: false},
// 체크박스
// 1. 체크박스
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -74,7 +74,7 @@ var columns = [
headerSort: false
},
// 프로젝트번호
// 2. 프로젝트번호
{
headerHozAlign: 'center',
hozAlign: 'left',
@@ -83,7 +83,7 @@ var columns = [
field: 'PROJECT_NO'
},
// 주문유형
// 3. 주문유형
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -92,7 +92,7 @@ var columns = [
field: 'CATEGORY_NAME'
},
// 제품구분
// 4. 제품구분
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -101,7 +101,7 @@ var columns = [
field: 'PRODUCT_NAME'
},
// 국내/해외
// 5. 국내/해외
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -110,7 +110,7 @@ var columns = [
field: 'AREA_NAME'
},
// 접수일
// 6. 접수일
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -119,7 +119,7 @@ var columns = [
field: 'RECEIPT_DATE'
},
// 고객사
// 7. 고객사
{
headerHozAlign: 'center',
hozAlign: 'left',
@@ -128,7 +128,7 @@ var columns = [
field: 'CUSTOMER_NAME'
},
// 유/무상
// 8. 유/무상
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -137,7 +137,7 @@ var columns = [
field: 'PAID_TYPE_NAME'
},
// 품번
// 9. 품번
{
headerHozAlign: 'center',
hozAlign: 'left',
@@ -146,7 +146,7 @@ var columns = [
field: 'PART_NO'
},
// 품명
// 10. 품명
{
headerHozAlign: 'center',
hozAlign: 'left',
@@ -155,7 +155,7 @@ var columns = [
field: 'PART_NAME'
},
// S/N
// 11. S/N
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -164,7 +164,7 @@ var columns = [
field: 'SERIAL_NO'
},
// 수주수량
// 12. 수주수량
{
headerHozAlign: 'center',
hozAlign: 'right',
@@ -173,7 +173,7 @@ var columns = [
field: 'QUANTITY'
},
// 요청납기
// 13. 요청납기
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -182,7 +182,7 @@ var columns = [
field: 'REQ_DEL_DATE'
},
// 고객사요청사항
// 14. 고객사요청사항
{
headerHozAlign: 'center',
hozAlign: 'left',
@@ -191,35 +191,7 @@ var columns = [
field: 'CUSTOMER_REQUEST'
},
// E-BOM
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: 'E-BOM',
field: 'EBOM_STATUS',
formatter: fnc_subInfoValueFormatter,
cellClick: function(e, cell) {
var bomReportObjid = fnc_checkNull(cell.getData().BOM_REPORT_OBJID);
var projectMgmtObjid = fnc_checkNull(cell.getData().OBJID);
var partNo = fnc_checkNull(cell.getData().PART_NO);
var partName = fnc_checkNull(cell.getData().PART_NAME);
// E-BOM이 있든 없든 선택 팝업 열기 (할당된 경우 상세 + 변경 가능)
fn_openEBomSelectPopup(projectMgmtObjid, partNo, partName, bomReportObjid);
}
},
// E-BOM 작성일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '작성일',
field: 'EBOM_REGDATE'
},
// M-BOM
// 15. M-BOM
{
headerHozAlign: 'center',
hozAlign: 'center',
@@ -233,28 +205,20 @@ var columns = [
}
},
// M-BOM Version
// 16. 최종저장일 (M-BOM 작성일)
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 80,
title: 'Version',
field: 'MBOM_VERSION'
},
// M-BOM 작성일
{
headerHozAlign: 'center',
hozAlign: 'center',
width: 100,
title: '작성일',
width: 120,
title: '최종저장일',
field: 'MBOM_REGDATE'
}
];
// 검색 함수
function fn_search(){
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productionplanning/mBomMgmtGridList.do", columns, true);
// showCheck를 false로 설정하여 자동 체크박스 제거 (columns에 이미 체크박스 정의되어 있음)
_tabulGrid = fnc_tabul_search(_tabul_layout_fitColumns, _tabulGrid, "/productionplanning/mBomMgmtGridList.do", columns, false);
}
// E-BOM 팝업

View File

@@ -114,10 +114,17 @@
<td>1</td>
<td>${info.PART_NO}</td>
<td>${info.PART_NAME}</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>-</td>
<td>${info.SERIAL_NO}</td>
<td>${info.REQ_DEL_DATE}</td>
<td>${info.CUSTOMER_REQUEST}</td>
<td>
<c:choose>
<c:when test="${not empty info.RETURN_REASON and info.RETURN_REASON != '-'}">
${info.RETURN_REASON}
</c:when>
<c:otherwise>-</c:otherwise>
</c:choose>
</td>
</tr>
</tbody>
</table>

View File

@@ -307,6 +307,33 @@ public class SalesNcollectMgmtController {
contractParam.put("objId", contractObjId);
Map<String, Object> contractInfo = commonService.selectOne("contractMgmt.getContractInfo", request, contractParam);
// PROJECT_MGMT에서 품번/품명/S/N/요청납기/고객요청사항/반납사유 조회
if(projectInfo != null) {
// 품번
if(contractInfo.get("PART_NO") == null || "".equals(contractInfo.get("PART_NO"))) {
contractInfo.put("PART_NO", projectInfo.get("part_no") != null ? projectInfo.get("part_no") : projectInfo.get("PART_NO"));
}
// 품명
if(contractInfo.get("PART_NAME") == null || "".equals(contractInfo.get("PART_NAME"))) {
contractInfo.put("PART_NAME", projectInfo.get("part_name") != null ? projectInfo.get("part_name") : projectInfo.get("PART_NAME"));
}
// S/N
Object serialNo = projectInfo.get("serial_no") != null ? projectInfo.get("serial_no") : projectInfo.get("SERIAL_NO");
contractInfo.put("SERIAL_NO", serialNo != null ? serialNo : "-");
// 요청납기
Object reqDelDate = projectInfo.get("req_del_date") != null ? projectInfo.get("req_del_date") : projectInfo.get("REQ_DEL_DATE");
contractInfo.put("REQ_DEL_DATE", reqDelDate != null ? reqDelDate : "-");
// 고객요청사항
Object customerRequest = projectInfo.get("customer_request") != null ? projectInfo.get("customer_request") : projectInfo.get("CUSTOMER_REQUEST");
contractInfo.put("CUSTOMER_REQUEST", customerRequest != null ? customerRequest : "-");
// 반납사유
Object returnReason = projectInfo.get("return_reason") != null ? projectInfo.get("return_reason") : projectInfo.get("RETURN_REASON");
contractInfo.put("RETURN_REASON", returnReason != null ? returnReason : "-");
}
// 결재 라인 정보 조회
Map<String, Object> approvalParam = new HashMap<String, Object>();
approvalParam.put("objId", contractObjId);
@@ -318,6 +345,8 @@ public class SalesNcollectMgmtController {
System.out.println("=== 주문서 관리 데이터 조회 완료 ===");
System.out.println("CATEGORY_NAME: " + contractInfo.get("CATEGORY_NAME"));
System.out.println("PRODUCT_NAME: " + contractInfo.get("PRODUCT_NAME"));
System.out.println("PART_NO: " + contractInfo.get("PART_NO"));
System.out.println("PART_NAME: " + contractInfo.get("PART_NAME"));
System.out.println("결재 라인 개수: " + (approvalLine != null ? approvalLine.size() : 0));
// 별도의 JSP로 이동

View File

@@ -1660,11 +1660,50 @@ ORDER BY T.REGDATE DESC, T.PROJECT_NO DESC
<!-- 프로젝트 기본 정보 조회 (CONTRACT_OBJID 포함) -->
<select id="getProjectInfo" parameterType="map" resultType="map">
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 CONTRACT_OBJID 조회 (최신 1개) */
SELECT CONTRACT_OBJID
FROM PROJECT_MGMT
WHERE PROJECT_NO = #{orderNo}
ORDER BY REGDATE DESC
/* salesNcollectMgmt.getProjectInfo - PROJECT_MGMT의 상세 정보 조회 (최신 1개) */
SELECT
PM.CONTRACT_OBJID,
PM.PART_NO,
PM.PART_NAME,
-- 요청납기 (CONTRACT_ITEM의 DUE_DATE 우선, 없으면 PROJECT_MGMT.DUE_DATE)
COALESCE(
(SELECT CI.DUE_DATE
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1),
PM.DUE_DATE
) AS REQ_DEL_DATE,
-- S/N 조회 (CONTRACT_ITEM_SERIAL에서)
(SELECT STRING_AGG(CIS.SERIAL_NO, ', ' ORDER BY CIS.SERIAL_NO)
FROM CONTRACT_ITEM CI
JOIN CONTRACT_ITEM_SERIAL CIS ON CI.OBJID = CIS.ITEM_OBJID
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
AND UPPER(CIS.STATUS) = 'ACTIVE'
AND CIS.SERIAL_NO IS NOT NULL
) AS SERIAL_NO,
-- 고객요청사항 (CONTRACT_ITEM에서)
(SELECT CI.CUSTOMER_REQUEST
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1
) AS CUSTOMER_REQUEST,
-- 반납사유 (CONTRACT_ITEM에서)
(SELECT CI.RETURN_REASON
FROM CONTRACT_ITEM CI
WHERE CI.CONTRACT_OBJID = PM.CONTRACT_OBJID
AND CI.PART_OBJID = PM.PART_OBJID
AND CI.STATUS = 'ACTIVE'
LIMIT 1
) AS RETURN_REASON
FROM PROJECT_MGMT PM
WHERE PM.PROJECT_NO = #{orderNo}
ORDER BY PM.REGDATE DESC
LIMIT 1
</select>