diff --git a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp index 056ea9f..066081b 100644 --- a/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp +++ b/WebContent/WEB-INF/view/productionplanning/mBomHeaderPopup.jsp @@ -21,6 +21,32 @@ body, html { } + +
+ + + + +
+
+

+ 생산계획 생성 +

+
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ + + + + +
+ +
+
+ +
+
+ + +
+
+
+
+ + diff --git a/WebContent/WEB-INF/view/productionplanning/prodPlanResultMgmtList.jsp b/WebContent/WEB-INF/view/productionplanning/prodPlanResultMgmtList.jsp new file mode 100644 index 0000000..2e05b9f --- /dev/null +++ b/WebContent/WEB-INF/view/productionplanning/prodPlanResultMgmtList.jsp @@ -0,0 +1,510 @@ +<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> +<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%> +<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%> +<%@ page import="com.pms.common.utils.*"%> +<%@ page import="java.util.*" %> +<%@include file= "/init.jsp" %> + + +<% +// DB에서 메뉴명 조회 (공통 유틸 사용) +String menuObjId = request.getParameter("menuObjId"); +String menuName = CommonUtils.getMenuName(menuObjId, "생산계획&실적 관리"); +%> + + + + + <%=Constants.SYSTEM_NAME%> + + + + + + +
+ + +
+ +
+ +
+
+
+

+ <%=menuName%> +

+
+ + + + +
+
+ + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ + + + + + + + + + + ~ + +
+ + + + +
+
+ + + <%@include file= "/WEB-INF/view/common/common_gridArea.jsp" %> +
+
+
+ + diff --git a/src/com/pms/controller/ProductionPlanningController.java b/src/com/pms/controller/ProductionPlanningController.java index d93297e..e3ec712 100644 --- a/src/com/pms/controller/ProductionPlanningController.java +++ b/src/com/pms/controller/ProductionPlanningController.java @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Controller; @@ -15,6 +16,7 @@ import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseBody; import com.google.gson.Gson; +import com.pms.common.bean.PersonBean; import com.pms.common.service.BaseService; import com.pms.common.utils.CommonUtils; import com.pms.common.utils.Constants; @@ -1630,4 +1632,149 @@ public class ProductionPlanningController extends BaseService { } return "/productionplanning/mBomHistoryPopup"; } + + /** + * 생산관리 -> 생산계획&실적관리 목록 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/productionplanning/prodPlanResultMgmtList.do") + public String prodPlanResultMgmtList(HttpServletRequest request, @RequestParam Map paramMap){ + Map code_map = new HashMap(); + try{ + // 프로젝트번호 + code_map.put("project_no", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("project_no")), "common.getCusProjectNoList")); + + // 제품구분 + code_map.put("product_cd", commonService.bizMakeOptionList("0000001", CommonUtils.nullToEmpty((String)paramMap.get("product_code")), "common.getCodeselect")); + + // 주문유형 + code_map.put("category_cd", commonService.bizMakeOptionList("0000167", CommonUtils.nullToEmpty((String)paramMap.get("category_code")), "common.getCodeselect")); + + // 생산유형 + code_map.put("production_type_cd", commonService.bizMakeOptionList("0001832", CommonUtils.nullToEmpty((String)paramMap.get("production_type")), "common.getCodeselect")); + + // 고객사 + code_map.put("customer_cd", commonService.bizMakeOptionList("", CommonUtils.nullToEmpty((String)paramMap.get("customer_objid")), "common.getClientMngSupplySelect")); + + request.setAttribute("code_map", code_map); + }catch(Exception e){ + e.printStackTrace(); + } + return "/productionplanning/prodPlanResultMgmtList"; + } + + /** + * 생산관리 -> 생산계획&실적관리 그리드 목록 + * @param request + * @param paramMap + * @return + */ + @ResponseBody + @RequestMapping("/productionplanning/prodPlanResultMgmtGridList.do") + public Map prodPlanResultMgmtGridList(HttpServletRequest request, @RequestParam Map paramMap){ + commonService.selectListPagingNew("productionplanning.prodPlanResultMgmtGridList", request, paramMap); + return paramMap; + } + + /** + * 생산계획 생성 팝업 + * @param request + * @param paramMap + * @return + */ + @RequestMapping("/productionplanning/prodPlanFormPopup.do") + public String prodPlanFormPopup(HttpServletRequest request, @RequestParam Map paramMap){ + Map code_map = new HashMap(); + try { + String projectObjid = CommonUtils.nullToEmpty((String)paramMap.get("projectObjid")); + String prodPlanObjid = CommonUtils.nullToEmpty((String)paramMap.get("prodPlanObjid")); + + // 프로젝트번호 + code_map.put("project_no", commonService.bizMakeOptionList("", projectObjid, "common.getCusProjectNoList")); + + // 제품구분 + code_map.put("product_cd", commonService.bizMakeOptionList("0000001", "", "common.getCodeselect")); + + // 주문유형 + code_map.put("category_cd", commonService.bizMakeOptionList("0000167", "", "common.getCodeselect")); + + // 생산유형 + code_map.put("production_type_cd", commonService.bizMakeOptionList("0001832", "", "common.getCodeselect")); + + // 고객사 + code_map.put("customer_cd", commonService.bizMakeOptionList("", "", "common.getClientMngSupplySelect")); + + request.setAttribute("code_map", code_map); + request.setAttribute("projectObjid", projectObjid); + + // 수정 모드일 경우 기존 데이터 조회 + if(!"".equals(prodPlanObjid)) { + Map resultMap = productionPlanningService.getProdPlanInfo(prodPlanObjid); + request.setAttribute("resultMap", resultMap); + request.setAttribute("actionType", "modify"); + } else { + request.setAttribute("actionType", "regist"); + } + + } catch(Exception e) { + e.printStackTrace(); + } + return "/productionplanning/prodPlanFormPopup"; + } + + /** + * 프로젝트 정보 조회 (생산계획 폼용) + * @param request + * @param paramMap + * @return + */ + @ResponseBody + @RequestMapping("/productionplanning/getProdPlanProjectInfo.do") + public Map getProdPlanProjectInfo(HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + try { + Map info = productionPlanningService.getProdPlanProjectInfo(paramMap); + resultMap.put("result", "success"); + resultMap.put("info", info); + } catch(Exception e) { + e.printStackTrace(); + resultMap.put("result", "fail"); + resultMap.put("msg", "프로젝트 정보 조회 실패"); + } + return resultMap; + } + + /** + * 생산계획 저장 + * @param request + * @param paramMap + * @return + */ + @ResponseBody + @RequestMapping("/productionplanning/saveProdPlan.do") + public Map saveProdPlan(HttpServletRequest request, @RequestParam Map paramMap){ + Map resultMap = new HashMap(); + try { + HttpSession session = request.getSession(); + PersonBean person = (PersonBean) session.getAttribute(Constants.PERSON_BEAN); + paramMap.put("userId", person.getUserId()); + + boolean success = productionPlanningService.saveProdPlan(paramMap); + if(success) { + resultMap.put("result", "success"); + resultMap.put("msg", "저장되었습니다."); + } else { + resultMap.put("result", "fail"); + resultMap.put("msg", "저장에 실패했습니다."); + } + } catch(Exception e) { + e.printStackTrace(); + resultMap.put("result", "fail"); + resultMap.put("msg", "저장 중 오류가 발생했습니다."); + } + return resultMap; + } + } diff --git a/src/com/pms/mapper/productionplanning.xml b/src/com/pms/mapper/productionplanning.xml index f883803..f962473 100644 --- a/src/com/pms/mapper/productionplanning.xml +++ b/src/com/pms/mapper/productionplanning.xml @@ -2925,7 +2925,7 @@ -- 수량: PROJECT_MGMT 우선 COALESCE(PM.QUANTITY::numeric, CI.ORDER_QUANTITY::numeric, 0) AS QUANTITY, -- 요청납기: CONTRACT_ITEM 우선 - COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.req_del_date) AS REQ_DEL_DATE, + COALESCE(CI.DUE_DATE, PM.DUE_DATE, CM.REQ_DEL_DATE) AS REQ_DEL_DATE, -- 고객요청사항: CONTRACT_ITEM에서 가져옴 COALESCE(CI.CUSTOMER_REQUEST, '') AS CUSTOMER_REQUEST, -- E-BOM 정보: CI.PART_OBJID가 E-BOM OBJID를 가리킴 @@ -3960,48 +3960,50 @@ @@ -4402,4 +4404,239 @@ AND STATUS = 'Y' + + + + + + + + + + + + INSERT INTO PRODUCTION_PLAN ( + OBJID, + PROJECT_OBJID, + PRODUCT_CODE, + CATEGORY_CODE, + PRODUCTION_TYPE, + CUSTOMER_OBJID, + REQ_DEL_DATE, + PART_NO, + PART_NAME, + SERIAL_NO, + ORDER_QTY, + EXTRA_PROD_QTY, + TOTAL_PROD_QTY, + CUSTOMER_REQUEST, + STATUS, + REGDATE, + WRITER + ) VALUES ( + #{OBJID}, + #{PROJECT_NO}, + #{PRODUCT_CODE}, + #{CATEGORY_CODE}, + #{PRODUCTION_TYPE}, + #{CUSTOMER_OBJID}, + #{REQ_DEL_DATE}, + #{PART_NO}, + #{PART_NAME}, + #{SERIAL_NO}, + #{ORDER_QTY}, + #{EXTRA_PROD_QTY}, + #{TOTAL_PROD_QTY}, + #{CUSTOMER_REQUEST}, + 'active', + NOW(), + #{userId} + ) + + + + + UPDATE PRODUCTION_PLAN SET + PROJECT_OBJID = #{PROJECT_NO}, + PRODUCT_CODE = #{PRODUCT_CODE}, + CATEGORY_CODE = #{CATEGORY_CODE}, + PRODUCTION_TYPE = #{PRODUCTION_TYPE}, + CUSTOMER_OBJID = #{CUSTOMER_OBJID}, + REQ_DEL_DATE = #{REQ_DEL_DATE}, + PART_NO = #{PART_NO}, + PART_NAME = #{PART_NAME}, + SERIAL_NO = #{SERIAL_NO}, + ORDER_QTY = #{ORDER_QTY}, + EXTRA_PROD_QTY = #{EXTRA_PROD_QTY}, + TOTAL_PROD_QTY = #{TOTAL_PROD_QTY}, + CUSTOMER_REQUEST = #{CUSTOMER_REQUEST}, + MODDATE = NOW(), + MODIFIER = #{userId} + WHERE OBJID = #{OBJID} + + diff --git a/src/com/pms/service/ProductionPlanningService.java b/src/com/pms/service/ProductionPlanningService.java index 5b19f62..26e6e26 100644 --- a/src/com/pms/service/ProductionPlanningService.java +++ b/src/com/pms/service/ProductionPlanningService.java @@ -1670,4 +1670,92 @@ public class ProductionPlanningService { return resultList; } + + /** + * 생산계획 정보 조회 + * @param prodPlanObjid + * @return + */ + public Map getProdPlanInfo(String prodPlanObjid) { + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + Map paramMap = new HashMap(); + paramMap.put("objid", prodPlanObjid); + resultMap = sqlSession.selectOne("productionplanning.getProdPlanInfo", paramMap); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(sqlSession != null) { + sqlSession.close(); + } + } + + return resultMap; + } + + /** + * 프로젝트 정보 조회 (생산계획 폼용) + * @param paramMap + * @return + */ + public Map getProdPlanProjectInfo(Map paramMap) { + Map resultMap = new HashMap(); + SqlSession sqlSession = null; + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + resultMap = sqlSession.selectOne("productionplanning.getProdPlanProjectInfo", paramMap); + } catch(Exception e) { + e.printStackTrace(); + } finally { + if(sqlSession != null) { + sqlSession.close(); + } + } + + return resultMap; + } + + /** + * 생산계획 저장 + * @param paramMap + * @return + */ + public boolean saveProdPlan(Map paramMap) { + boolean result = false; + SqlSession sqlSession = null; + + try { + sqlSession = SqlMapConfig.getInstance().getSqlSession(); + + String objid = CommonUtils.nullToEmpty((String)paramMap.get("OBJID")); + String actionType = CommonUtils.nullToEmpty((String)paramMap.get("actionType")); + + if("regist".equals(actionType) || "".equals(objid)) { + // 신규 등록 + paramMap.put("OBJID", CommonUtils.createObjId()); + sqlSession.insert("productionplanning.insertProdPlan", paramMap); + } else { + // 수정 + sqlSession.update("productionplanning.updateProdPlan", paramMap); + } + + sqlSession.commit(); + result = true; + } catch(Exception e) { + e.printStackTrace(); + if(sqlSession != null) { + sqlSession.rollback(); + } + } finally { + if(sqlSession != null) { + sqlSession.close(); + } + } + + return result; + } }