feat : 제품검색화면 추가 조정중
parent
98d0701b09
commit
86ad2c53cb
@ -0,0 +1,160 @@
|
||||
package cokr.xit.adds.nims;
|
||||
|
||||
import cokr.xit.foundation.component.QueryRequest;
|
||||
|
||||
/**단속 대장 정보 조회 요청
|
||||
*
|
||||
* <p>상세 설명:
|
||||
*
|
||||
* <pre>
|
||||
* ============ 변경 이력 ============
|
||||
* 2023-06-23 leebj 최초 작성
|
||||
* ================================
|
||||
* </pre>
|
||||
*/
|
||||
public class ProductQuery extends QueryRequest{
|
||||
|
||||
private static final long serialVersionUID = 1L;
|
||||
|
||||
//검색조건
|
||||
private String schProductCd; // 제품코드
|
||||
private String schProductNm; // 제품명
|
||||
|
||||
//저장소 정보
|
||||
private String prductCd; // 제품코드
|
||||
private String prdlstMstCd; // ??
|
||||
private String prductNm; // 제품명
|
||||
private String nrcdSeNm; // 마약/향정구분
|
||||
private String prtmSeNm; // 중점/일반구분
|
||||
private String prdMinDistbQy; // 최소유통단위
|
||||
private String stdPackngStleNm; // 최소유통단위명
|
||||
private String prdTotPceQy; // 낱개단위
|
||||
private String pceCoUnitNm; // 낱개단위명
|
||||
private String bsshCd; // 취급자 번호
|
||||
private String rgsDt; // ??일시
|
||||
private String updDt; // 수정일시
|
||||
|
||||
public String getSchProductCd() {
|
||||
return ifEmpty(schProductCd, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setSchProductCd(String schProductCd) {
|
||||
this.schProductCd = schProductCd;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getSchProductNm() {
|
||||
return ifEmpty(schProductNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setSchProductNm(String schProductNm) {
|
||||
this.schProductNm = schProductNm;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrductCd() {
|
||||
return ifEmpty(prductCd, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrductCd(String prductCd) {
|
||||
this.prductCd = prductCd;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrdlstMstCd() {
|
||||
return ifEmpty(prdlstMstCd, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrdlstMstCd(String prdlstMstCd) {
|
||||
this.prdlstMstCd = prdlstMstCd;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrductNm() {
|
||||
return ifEmpty(prductNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrductNm(String prductNm) {
|
||||
this.prductNm = prductNm;
|
||||
return self();
|
||||
}
|
||||
public String getNrcdSeNm() {
|
||||
return ifEmpty(nrcdSeNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setNrcdSeNm(String nrcdSeNm) {
|
||||
this.nrcdSeNm = nrcdSeNm;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrtmSeNm() {
|
||||
return ifEmpty(prtmSeNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrtmSeNm(String prtmSeNm) {
|
||||
this.prtmSeNm = prtmSeNm;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrdMinDistbQy() {
|
||||
return ifEmpty(prdMinDistbQy, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrdMinDistbQy(String prdMinDistbQy) {
|
||||
this.prdMinDistbQy = prdMinDistbQy;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getStdPackngStleNm() {
|
||||
return ifEmpty(stdPackngStleNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setStdPackngStleNm(String stdPackngStleNm) {
|
||||
this.stdPackngStleNm = stdPackngStleNm;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPrdTotPceQy() {
|
||||
return ifEmpty(prdTotPceQy, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPrdTotPceQy(String prdTotPceQy) {
|
||||
this.prdTotPceQy = prdTotPceQy;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getPceCoUnitNm() {
|
||||
return ifEmpty(pceCoUnitNm, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setPceCoUnitNm(String pceCoUnitNm) {
|
||||
this.pceCoUnitNm = pceCoUnitNm;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getbsshCd() {
|
||||
return ifEmpty(bsshCd, () -> null);
|
||||
}
|
||||
|
||||
public <T extends BsshQuery> T setbsshCd(String bsshCd) {
|
||||
this.bsshCd = bsshCd;
|
||||
return self();
|
||||
}
|
||||
public String getRgsDt() {
|
||||
return ifEmpty(rgsDt, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setRgsDt(String rgsDt) {
|
||||
this.rgsDt = rgsDt;
|
||||
return self();
|
||||
}
|
||||
|
||||
public String getUpdDt() {
|
||||
return ifEmpty(updDt, () -> null);
|
||||
}
|
||||
|
||||
public <T extends ProductQuery> T setUpdDt(String updDt) {
|
||||
this.updDt = updDt;
|
||||
return self();
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cokr.xit.adds.nims.service.bean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import cokr.xit.adds.nims.DsuseMgtDetailQuery;
|
||||
import cokr.xit.adds.nims.dao.DsuseMgtDetailMapper;
|
||||
import cokr.xit.adds.nims.service.DsuseMgtDetailService;
|
||||
import cokr.xit.foundation.component.AbstractServiceBean;
|
||||
import cokr.xit.foundation.data.DataObject;
|
||||
|
||||
@Service("dsuseMgtDetailService")
|
||||
public class DsuseMgtDetailServiceBean extends AbstractServiceBean implements DsuseMgtDetailService {
|
||||
|
||||
/** 전자우편 안내문 정보 DAO */
|
||||
@Resource(name = "dsuseMgtDetailMapper")
|
||||
private DsuseMgtDetailMapper dsuseMgtDetailMapper;
|
||||
|
||||
@Override
|
||||
public List<DataObject> getDsuseMgtDetailList(DsuseMgtDetailQuery query){
|
||||
return dsuseMgtDetailMapper.selectDsuseMgtDetailList(query);
|
||||
}
|
||||
|
||||
}
|
@ -1,30 +0,0 @@
|
||||
package cokr.xit.adds.nims.service.bean;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Iterator;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.stereotype.Service;
|
||||
|
||||
import cokr.xit.adds.nims.DsuseMgtQuery;
|
||||
import cokr.xit.adds.nims.dao.DsuseMgtMapper;
|
||||
import cokr.xit.adds.nims.service.DsuseMgtService;
|
||||
import cokr.xit.foundation.component.AbstractServiceBean;
|
||||
import cokr.xit.foundation.data.DataObject;
|
||||
|
||||
@Service("dsuseMgtService")
|
||||
public class DsuseMgtServiceBean extends AbstractServiceBean implements DsuseMgtService {
|
||||
|
||||
/** 전자우편 안내문 정보 DAO */
|
||||
@Resource(name = "dsuseMgtMapper")
|
||||
private DsuseMgtMapper dsuseMgtMapper;
|
||||
|
||||
@Override
|
||||
public List<DataObject> getDsuseMgtList(DsuseMgtQuery query){
|
||||
return dsuseMgtMapper.selectDsuseMgtList(query);
|
||||
}
|
||||
|
||||
}
|
@ -1,80 +0,0 @@
|
||||
package cokr.xit.adds.nims.web;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.Consumer;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.json.JsonObject;
|
||||
|
||||
import org.springframework.boot.configurationprocessor.json.JSONException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import net.minidev.json.JSONArray;
|
||||
import net.minidev.json.JSONObject;
|
||||
import net.minidev.json.parser.JSONParser;
|
||||
import net.minidev.json.parser.ParseException;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import cokr.xit.adds.nims.service.DsuseMgtReceiptService;
|
||||
import cokr.xit.adds.nims.service.DsuseMgtService;
|
||||
import cokr.xit.adds.nims.BsshQuery;
|
||||
import cokr.xit.adds.nims.DsuseMgtQuery;
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
import cokr.xit.foundation.web.WebClient;
|
||||
import cokr.xit.foundation.web.WebClient.Request.ContentType;
|
||||
import cokr.xit.foundation.web.WebClient.Request;
|
||||
import cokr.xit.foundation.data.DataObject;
|
||||
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping(
|
||||
name = "마약류폐기 신청 상세",
|
||||
value = {"/adds/nims"}
|
||||
)
|
||||
public class DsuseMgtController extends AbstractController {
|
||||
|
||||
public static final String CLASS_URL = "/adds/nims";
|
||||
|
||||
public class METHOD_URL {
|
||||
public static final String
|
||||
dsuseMgthMain = "/dsuseMgt-main.do" // 부과 제외 관리 메인 화면
|
||||
, getDsuseMgtList = "/dsuseMgt-list.do" // 부과 제외 대장 목록 조회
|
||||
// , getLevyExclusionInfo = "/020/info.do" // 부과 제외 대장 조회
|
||||
// , createLevyExclusion = "/020/create.do" // 부과 제외 대장 등록
|
||||
;
|
||||
}
|
||||
|
||||
@Resource(name="dsuseMgtService")
|
||||
private DsuseMgtService dsuseMgtService;
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 메인", value=METHOD_URL.dsuseMgthMain)
|
||||
public ModelAndView dsuseMgtMain(String dscdmng_id) {
|
||||
ModelAndView mav = new ModelAndView("adds/nims/dsuseMgt-main");
|
||||
|
||||
// 사용자 정보
|
||||
//ManagedUser managedUser = (ManagedUser)currentUser().getUser();
|
||||
|
||||
return mav
|
||||
.addObject("pageName", "dsuseMgthMain") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
|
||||
.addObject("infoPrefix", "dsuseMgt") // prefix
|
||||
.addObject("infoPrefixUrl", "/adds/nims") // prefixUrl
|
||||
.addObject("dscdmng_id", dscdmng_id)
|
||||
;
|
||||
}
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 조회", value=METHOD_URL.getDsuseMgtList)
|
||||
public ModelAndView getDsuseMgtList(DsuseMgtQuery query) throws JsonProcessingException, ParseException {
|
||||
setFetchSize(query);
|
||||
|
||||
return setCollectionInfo(new ModelAndView("jsonView"), dsuseMgtService.getDsuseMgtList(query),"","");
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,62 @@
|
||||
package cokr.xit.adds.nims.web;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import net.minidev.json.parser.ParseException;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
|
||||
import cokr.xit.adds.nims.service.DsuseMgtDetailService;
|
||||
import cokr.xit.adds.nims.DsuseMgtDetailQuery;
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping(
|
||||
name = "마약류폐기 신청 상세",
|
||||
value = {"/adds/nims"}
|
||||
)
|
||||
public class DsuseMgtDetailController extends AbstractController {
|
||||
|
||||
public static final String CLASS_URL = "/adds/nims";
|
||||
|
||||
public class METHOD_URL {
|
||||
public static final String
|
||||
dsuseMgtDetailMain = "/dsuseMgt-info.do" // 부과 제외 관리 메인 화면
|
||||
, getDsuseMgtDetailList = "/dsuseMgtDetail-list.do" // 부과 제외 대장 목록 조회
|
||||
// , getLevyExclusionInfo = "/020/info.do" // 부과 제외 대장 조회
|
||||
// , createLevyExclusion = "/020/create.do" // 부과 제외 대장 등록
|
||||
;
|
||||
}
|
||||
|
||||
@Resource(name="dsuseMgtDetailService")
|
||||
private DsuseMgtDetailService dsuseMgtDetailService;
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 메인", value=METHOD_URL.dsuseMgtDetailMain)
|
||||
public ModelAndView dsuseMgtMain(String usrRptIdNo) {
|
||||
ModelAndView mav = new ModelAndView("adds/nims/dsuseMgt-info");
|
||||
|
||||
// 사용자 정보
|
||||
//ManagedUser managedUser = (ManagedUser)currentUser().getUser();
|
||||
|
||||
return mav
|
||||
.addObject("pageName", "dsuseMgtInfo") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
|
||||
.addObject("infoPrefix", "dsuseMgt") // prefix
|
||||
.addObject("infoPrefixUrl", "/adds/nims") // prefixUrl
|
||||
.addObject("usrRptIdNo", usrRptIdNo)
|
||||
;
|
||||
}
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 조회", value=METHOD_URL.getDsuseMgtDetailList)
|
||||
public ModelAndView getDsuseMgtList(DsuseMgtDetailQuery query) throws JsonProcessingException, ParseException {
|
||||
setFetchSize(query);
|
||||
|
||||
return setCollectionInfo(new ModelAndView("jsonView"), dsuseMgtDetailService.getDsuseMgtDetailList(query),"","dsuseMgtDetail");
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,128 @@
|
||||
package cokr.xit.adds.nims.web;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.function.Consumer;
|
||||
import java.net.http.HttpResponse;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.json.JsonObject;
|
||||
|
||||
import org.springframework.boot.configurationprocessor.json.JSONException;
|
||||
import org.springframework.stereotype.Controller;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.servlet.ModelAndView;
|
||||
|
||||
import net.minidev.json.JSONArray;
|
||||
import net.minidev.json.JSONObject;
|
||||
import net.minidev.json.parser.JSONParser;
|
||||
import net.minidev.json.parser.ParseException;
|
||||
import com.fasterxml.jackson.core.JsonProcessingException;
|
||||
import com.fasterxml.jackson.databind.ObjectMapper;
|
||||
|
||||
import cokr.xit.adds.nims.service.DsuseMgtReceiptService;
|
||||
import cokr.xit.adds.nims.BsshQuery;
|
||||
import cokr.xit.adds.nims.ProductQuery;
|
||||
import cokr.xit.foundation.web.AbstractController;
|
||||
import cokr.xit.foundation.web.WebClient;
|
||||
import cokr.xit.foundation.web.WebClient.Request.ContentType;
|
||||
import cokr.xit.foundation.web.WebClient.Request;
|
||||
import cokr.xit.foundation.data.DataObject;
|
||||
|
||||
|
||||
|
||||
@Controller
|
||||
@RequestMapping(
|
||||
name = "마약류폐기 신청서 접수",
|
||||
value = {"/adds/nims"}
|
||||
)
|
||||
public class ProductController extends AbstractController {
|
||||
|
||||
public static final String CLASS_URL = "/adds/nims";
|
||||
|
||||
public class METHOD_URL {
|
||||
public static final String
|
||||
producthMain = "/product-main.do" // 부과 제외 관리 메인 화면
|
||||
, getProductList = "/product-list.do" // 부과 제외 대장 목록 조회
|
||||
// , getLevyExclusionInfo = "/020/info.do" // 부과 제외 대장 조회
|
||||
// , createLevyExclusion = "/020/create.do" // 부과 제외 대장 등록
|
||||
;
|
||||
}
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 메인", value=METHOD_URL.producthMain)
|
||||
public ModelAndView bsshMain(String openPage) {
|
||||
ModelAndView mav = new ModelAndView("adds/nims/product-main");
|
||||
|
||||
// 사용자 정보
|
||||
//ManagedUser managedUser = (ManagedUser)currentUser().getUser();
|
||||
|
||||
return mav
|
||||
.addObject("pageName", "productMain") // View(jsp)에서 사용할 id 뒤에 붙일 suffix
|
||||
.addObject("infoPrefix", "product") // prefix
|
||||
.addObject("infoPrefixUrl", "/adds/nims") // prefixUrl
|
||||
.addObject("openPage", openPage)
|
||||
;
|
||||
}
|
||||
|
||||
@RequestMapping(name="마약류폐기 신청서 접수 조회", value=METHOD_URL.getProductList)
|
||||
public ModelAndView getbsshList(ProductQuery query) throws JsonProcessingException, ParseException {
|
||||
ModelAndView mav = new ModelAndView();
|
||||
|
||||
System.out.println("취급자 조회 : " + query.getSchProductCd());
|
||||
|
||||
mav.setViewName("jsonView");
|
||||
|
||||
String sMethod = "POST";
|
||||
|
||||
DataObject dataObject = new DataObject();
|
||||
dataObject.put("k","");
|
||||
dataObject.put("fg","1");
|
||||
dataObject.put("pg","1");
|
||||
dataObject.put("ymd","");
|
||||
dataObject.put("fg2","");
|
||||
dataObject.put("p",query.getSchProductCd());
|
||||
dataObject.put("pn",query.getSchProductNm());
|
||||
dataObject.put("dbSkipYn","N");
|
||||
dataObject.put("userId","suji");
|
||||
|
||||
ObjectMapper mapper = new ObjectMapper();
|
||||
|
||||
String sJsonData = mapper.writeValueAsString(dataObject);
|
||||
|
||||
Consumer<Request> configurer = (request) -> {
|
||||
request.uri("http://localhost:9076/api/biz/nims/v1/getNimsProductInfoKd")
|
||||
.contentType(ContentType.JSON)
|
||||
.bodyData(sJsonData);
|
||||
};
|
||||
|
||||
HttpResponse<String> hresp = null;
|
||||
if(sMethod.equals("POST")) {
|
||||
hresp = new WebClient()
|
||||
.post(configurer);
|
||||
} else if(sMethod.equals("GET")) {
|
||||
hresp = new WebClient()
|
||||
.get(configurer);
|
||||
}
|
||||
String resBody = hresp.body();
|
||||
|
||||
System.out.println(resBody);
|
||||
|
||||
JSONParser parser = new JSONParser();
|
||||
|
||||
Object obj = parser.parse( resBody );
|
||||
JSONObject jsonObj = (JSONObject) obj;
|
||||
JSONArray jsonData = (JSONArray) jsonObj.get("data");
|
||||
|
||||
System.out.println(jsonData.get(0).toString());
|
||||
|
||||
ModelAndView result = new ModelAndView("jsonView");
|
||||
|
||||
result.addObject("productMainList", jsonData) // 발송 정보
|
||||
;
|
||||
|
||||
return result;
|
||||
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,41 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
|
||||
<mapper namespace="cokr.xit.adds.nims.dao.DsuseMgtDetailMapper">
|
||||
|
||||
<!-- 전자우편 안내문 정보 매퍼
|
||||
========== 변경 이력 ==========
|
||||
2023-12-04 JoJH 최초 작성
|
||||
============================ -->
|
||||
|
||||
<sql id="select">
|
||||
SELECT
|
||||
DSCDMNG_ID /* 폐기관리 ID */
|
||||
, DSCDMNG_SN /* 폐기관리_순번 */
|
||||
, PRDUCT_CD /* 제품_코드 */
|
||||
, PRDUCT_NM /* 제품_명 */
|
||||
, MIN_DISTB_QY /* 최소_유통단위_수량 */
|
||||
, MIN_DISTB_UNIT /* 최소_유통_단위 */
|
||||
, CONCAT(MIN_DISTB_QY, MIN_DISTB_UNIT) MIN_DISTB /* 최소_유통_단위_및_수량 */
|
||||
, PCE_QY /* 낱개단위_수량 */
|
||||
, PCE_UNIT /* 낱개_단위 */
|
||||
, CONCAT(PCE_QY, PCE_UNIT) PCE /* 낱개_수량_및_단위 */
|
||||
, MNF_NO /* 제조_번호 */
|
||||
, PRD_VALID_DE /* 제품_유효기한_일자 */
|
||||
, MNF_SEQ /* 제조_일련번호 */
|
||||
, DSUSE_QY /* 폐기_수량 */
|
||||
, USR_RPT_LN_ID_NO /* 사용자_보고_라인_식별_번호 */
|
||||
FROM TB_DSUSE_MGT_DTL
|
||||
</sql>
|
||||
|
||||
<select id="selectDsuseMgtDetailList" parameterType="map" resultType="dataobject">/* 전자우편 안내문 목록 조회(epostGdccMapper.selectEpostGdccList) */
|
||||
<include refid="utility.paging-prefix" />
|
||||
<include refid="select" />
|
||||
WHERE 1=1
|
||||
<if test="schDscdmngId != null">
|
||||
AND DSCDMNG_ID = #{schDscdmngId}
|
||||
</if>
|
||||
<include refid="utility.orderBy" />
|
||||
<include refid="utility.paging-suffix" />
|
||||
</select>
|
||||
|
||||
</mapper>
|
@ -0,0 +1,249 @@
|
||||
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" isELIgnored="false" session="false"%>
|
||||
<%@ include file="/WEB-INF/jsp/include/taglib.jsp"%>
|
||||
|
||||
<c:set var="prefixName" scope="request">취급자 정보 조회</c:set>
|
||||
<!-- 입력 영역 -->
|
||||
<form id="frmSearch--${pageName}" name="frmSearch">
|
||||
<div class="container-search">
|
||||
<!-- hidden -->
|
||||
<label for="product--${pageName}">취급자 정보</label>
|
||||
<div class="row my-1 mx-4 g-1 border-card rounded-3">
|
||||
<div class="col-md-4">
|
||||
<label for="ProductNm--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">제품명</label>
|
||||
<input type="text" class="form-control w-60" id="productNm--${pageName}" name="schProductNm" >
|
||||
</div>
|
||||
<div class="col-md-4">
|
||||
<label for="ProductCd--${pageName}" class="w-px-130 bg-lighter pe-2 col-form-label text-sm-end">제품코드</label>
|
||||
<input type="text" class="form-control w-60" id="productCd--${pageName}" name="schProductCd" >
|
||||
</div>
|
||||
<button type="button" class="btn btn-search w-px-120" id="btnSearch--${pageName}" title="검색">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
<!-- 업무 버튼 표시 -->
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<span class="container-window-btn-right">
|
||||
<!-- 업무 버튼 -->
|
||||
<button type="button" class="btn btn-primary w-px-80" id="btnSave--${pageName}" title="선택">선택</button>
|
||||
</span>
|
||||
</span>
|
||||
</div>
|
||||
<!-- / 업무 버튼 표시 -->
|
||||
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer" id="DataTables_Table_0_wrapper--${pageName}">
|
||||
<div class="table-responsive ox-scroll oy-scroll h-px-500" id="table-responsive--${pageName}">
|
||||
<table class="table-layout-fixed dataTable datatables-ajax table table-bordered no-footer" id="DataTables_Table_0--${pageName}" aria-describedby="DataTables_Table_0_info">
|
||||
<thead>
|
||||
<tr><th style="width: 15.828px;text-align:center;" tabindex="0">No</th>
|
||||
<th class="sorting" style="width: 146.156px;">제품코드</th>
|
||||
<th class="sorting" style="width: 160.141px;">제품명</th>
|
||||
<th class="sorting" style="width: 160.141px;">마약/향정 구분</th>
|
||||
<th class="sorting" style="width: 230.469px;">중점/일반 구분</th>
|
||||
<th class="sorting" style="width: 230.469px;">최소유통단위</th>
|
||||
<th class="sorting" style="width: 230.469px;">최수유통단위명</th>
|
||||
<th class="sorting" style="width: 230.469px;">낱개단위</th>
|
||||
<th class="sorting" style="width: 230.469px;">낱개단위명</th>
|
||||
<th class="sorting" style="width: 230.469px;">취급자번호</th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="tbody--${pageName}">
|
||||
</tbody>
|
||||
<template id="${infoPrefix}Row--${pageName}">
|
||||
<tr data-key="productCd">
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{prductCd}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{prductNm}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{nrcdSeNm}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{prtmSeNm}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{prdMinDistbQy}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{stdPackngStleNm}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{prdTotPceQy}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{pceCoUnitNm}</td>
|
||||
<td class="cmn text-center" onclick="{onclick}" ondblclick="{ondblclick}">{bsshCd}</td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="${infoPrefix}NotFound--${pageName}">
|
||||
<tr class="odd">
|
||||
<td valign="top" colspan="13" class="dataTables_empty text-center">${prefixName} 정보를 찾지 못했습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script>
|
||||
/**************************************************************************
|
||||
* Global Variable
|
||||
**************************************************************************/
|
||||
pageObject["${pageName}"] = {};
|
||||
|
||||
/**************************************************************************
|
||||
* script 진입
|
||||
**************************************************************************/
|
||||
$(document).ready(function() {
|
||||
// pageObject
|
||||
let $P = pageObject["${pageName}"];
|
||||
|
||||
// FormFields
|
||||
$P.formFields = new FimsFormFields("#frmSearch--${pageName}");
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
$P.control = new DatasetControl({
|
||||
urls : {
|
||||
load : wctx.url("/adds/nims/product-list.do")
|
||||
}
|
||||
, prefix: "productMain"
|
||||
, prefixName: "취급자 정보 조회"
|
||||
, keymapper: info => info ? info.productCd : ""
|
||||
, dataGetter : obj => obj.productMainList
|
||||
, appendData: true
|
||||
, infoSize: "xl"
|
||||
});
|
||||
|
||||
// $P.control 설정
|
||||
$P.control.defaultFetchSize = FETCH_XS; // 1 페이지당 조회되는 자료 건수 index.jsp에서 확인 FETCH_XS = 30
|
||||
$P.control.untilPageNum = 0; // 현재 페이지 번호
|
||||
$P.control.beforeCurrent = null;
|
||||
$P.control.tableRenderComplete = false; // dataTables 에 자료 추가 완료 여부
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl 이벤트
|
||||
**************************************************************************/
|
||||
// Dataset 변경 이벤트
|
||||
|
||||
$P.control.onDatasetChange = (obj) => {
|
||||
$P.renderList(obj.${infoPrefix}Total);
|
||||
|
||||
$("#paging--${pageName}").setPaging({
|
||||
list: $P.control.dataset
|
||||
, prefix: "paging--${pageName}"
|
||||
, start: obj.productMainStart
|
||||
, totalSize: obj.productMainTotal
|
||||
, fetchSize: obj.productMainFetch
|
||||
, func: "pageObject['${pageName}'].control.load({index})"
|
||||
});
|
||||
|
||||
$P.control.tableRenderComplete = true; // dataTables 에 자료 추가 완료
|
||||
};
|
||||
|
||||
// 현재 선택 자료 변경 이벤트
|
||||
$P.control.onCurrentChange = item => {
|
||||
if (!item) return;
|
||||
|
||||
// Dataset 셋팅
|
||||
$P.formFields.set($P.control, item);
|
||||
}
|
||||
|
||||
|
||||
// 저장 callback
|
||||
|
||||
// 저장
|
||||
|
||||
/**************************************************************************
|
||||
* DataTables 이벤트
|
||||
**************************************************************************/
|
||||
// DataTables에 click, dbclick 이벤트
|
||||
|
||||
$P.renderList = (totalSize) => {
|
||||
let ${infoPrefix}List = $P.control.dataset;
|
||||
let empty = ${infoPrefix}List.empty;
|
||||
|
||||
// 업무별 DataTables(그리드) tr, td
|
||||
let foundContent = document.getElementById("${infoPrefix}Row--${pageName}").content;
|
||||
let foundTr = $(foundContent).find("tr")[0].cloneNode(false);
|
||||
let foundTds = $(foundContent).find("td");
|
||||
|
||||
foundTds.each(function() {
|
||||
foundTr.appendChild(this.cloneNode(true));
|
||||
});
|
||||
|
||||
//
|
||||
let replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "pageObject['${pageName}'].control.setCurrent('" + dataItem.getValue("productCd") + "');")
|
||||
.replace(/{ondblclick}/gi, "pageObject['${pageName}'].fnSave()");
|
||||
|
||||
let trs = empty ? [document.getElementById("${infoPrefix}NotFound--${pageName}").content.outerHTML]
|
||||
: ${infoPrefix}List.inStrings(foundTr.outerHTML, replacer);
|
||||
|
||||
let noMore = (totalSize == ${infoPrefix}List.length);
|
||||
let initScroll = ($P.control.query.pageNum < 2) && ($P.control.untilPageNum == 0);
|
||||
|
||||
$("#table-responsive--${pageName}")[0].changeContent(trs.join(), initScroll, noMore);
|
||||
|
||||
if ($P.control.untilPageNum != 0) {
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize;
|
||||
$P.control.query.pageNum = $P.control.untilPageNum;
|
||||
$P.control.untilPageNum = 0;
|
||||
}
|
||||
|
||||
}
|
||||
/**************************************************************************
|
||||
* 사용자 함수(function)
|
||||
**************************************************************************/
|
||||
|
||||
/**************************************************************************
|
||||
* 버튼 clickEvent
|
||||
**************************************************************************/
|
||||
|
||||
$P.fnSearchList = () => {
|
||||
// 검색조건
|
||||
$P.control.query = $P.formFields.get(); // 검색 조건
|
||||
$P.control.query.fetchSize = $P.control.defaultFetchSize; // 한번에 조회되는 자료 건수
|
||||
$P.control.query.delYn = "N"; // 삭제 여부
|
||||
|
||||
$P.control.load(1);
|
||||
}
|
||||
|
||||
// 저장
|
||||
$P.fnSave = () => {
|
||||
console.log("#${openPage}");
|
||||
dialog.alert({
|
||||
content: "현재 " + $P.control.prefixName + " 정보를 저장하시겠습니까?"
|
||||
, init: () => { setDialogZindex(); }
|
||||
, onOK: () => { var openPage = new FimsFormFields("#${openPage}");
|
||||
openPage.set (null,$P.control.getCurrent()); // formFields
|
||||
dialog.close("productMainDialog");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 초기 셋팅
|
||||
**************************************************************************/
|
||||
// 이벤트 설정
|
||||
$P.setEvent = () => {
|
||||
// 버튼 이벤트
|
||||
$("#btnSave--${pageName}").on("click", () => $P.fnSave()); // 저장
|
||||
$("#btnSearch--${pageName}").on("click", () => $P.fnSearchList());
|
||||
}
|
||||
|
||||
// DataTables width 변경 조정 (업무별 그리드가 존재 한다면.. crdn06010-main.jsp 참고)
|
||||
fnMakeResizableTable($("#table-responsive--${pageName}")[0]);
|
||||
|
||||
// DataTables 스크롤 이벤트 생성
|
||||
fnMakeScrollableTable($("#table-responsive--${pageName}")[0], $P.scrollDataList);
|
||||
|
||||
// 초기 화면 설정
|
||||
$P.initForm = () => {
|
||||
// Dialog 마우스로 드래그 할 수 있도록 설정.
|
||||
fnMakeDraggableDialog(document.getElementById($P.control.prefix + "Dialog"));
|
||||
}
|
||||
|
||||
/**************************************************************************
|
||||
* 최초 실행 함수
|
||||
**************************************************************************/
|
||||
// 1. 이벤트 설정
|
||||
$P.setEvent();
|
||||
|
||||
// 2. 초기 화면 설정
|
||||
$P.initForm();
|
||||
|
||||
// 3. Dataset 설정
|
||||
//$P.control.setData([${opnnDlbrMbrInfo}]);
|
||||
});
|
||||
|
||||
</script>
|
@ -0,0 +1,253 @@
|
||||
<div class="card m-4 p-3">
|
||||
<form name="form" id="form" method="post">
|
||||
<input type="hidden" name="resultType" value="json" /> <!-- 요청 변수 설정 (검색결과형식 설정, json) -->
|
||||
<input type="hidden" name="confmKey" value="U01TX0FVVEgyMDE3MDQwMzIwMzUzMjIwMzI2" /><!-- 요청 변수 설정 (승인키) -->
|
||||
<input type="hidden" name="countPerPage" value="10"/><!-- 요청 변수 설정 (페이지당 출력 개수. countPerPage 범위 : 0 < n <= 100) -->
|
||||
<input type="hidden" id="currentPage" name="currentPage" value="1"/> <!-- 요청 변수 설정 (현재 페이지. currentPage : n > 0) -->
|
||||
|
||||
<div class="container-search">
|
||||
<input type="hidden" id="searchAddrCallback" />
|
||||
<div class="row g-1">
|
||||
<div class="col-12 d-flex justify-content-center">
|
||||
<input type="text" id="dummy" value="" hidden />
|
||||
<input type="text" name="keyword" class="form-control w-px-400"
|
||||
placeholder="예) 도움6로 42, 국립중앙박물관, 상암동 1595, 초성검색"
|
||||
value="" onkeydown="enterSearch();"/><!-- 요청 변수 설정 (키워드) -->
|
||||
<button type="button" class="btn btn-search ms-2" onClick="getAddr(1);">검색</button>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div id="list" class="mt-4">
|
||||
<div class="card-datatable text-nowrap">
|
||||
<div class="dataTables_wrapper dt-bootstrap5 no-footer">
|
||||
<div id="table-responsive" class="table-responsive ox-scroll oy-scroll h-px-400">
|
||||
<table id="DataTables_Table_0" class="table-layout-fixed datatables-ajax table table-bordered dataTable no-footer">
|
||||
<thead>
|
||||
<tr>
|
||||
<th style="width: 650px;">주소</th>
|
||||
<th style="width: 100px;">우편번호</th>
|
||||
<th clss="dummy-th"></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody id="addrTbody">
|
||||
</tbody>
|
||||
<template id="addrRow">
|
||||
<tr data-key="{TEMP_ID}">
|
||||
<td onclick="{onclick}" class="text-start">
|
||||
<strong class="fs-4">{roadAddr}</strong><br/>{jibunAddr}
|
||||
</td>
|
||||
<td onclick="{onclick}" class="text-center">{zipNo}</td>
|
||||
<td class="dummy-td"></td>
|
||||
</tr>
|
||||
</template>
|
||||
<template id="addrNotFound">
|
||||
<tr>
|
||||
<td valign="top" colspan="3" class="dataTables_empty text-center">조회 결과가 없습니다.</td>
|
||||
</tr>
|
||||
</template>
|
||||
</table>
|
||||
</div>
|
||||
</div>
|
||||
</div><!-- 검색 결과 리스트 출력 영역 -->
|
||||
|
||||
<div>
|
||||
<span class="container-page-btn">
|
||||
<div class="d-flex flex-row justify-content-between">
|
||||
<span id="addrPagingPagingInfo" class="dataTables_info" role="status" aria-live="polite">
|
||||
</span>
|
||||
<ul id="addrPaging" class="pagination pagination-primary">
|
||||
</ul>
|
||||
</div>
|
||||
</span>
|
||||
</div>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
<div id="formBottom" hidden>
|
||||
<div>
|
||||
기본주소 :
|
||||
<span id="mainAddr"></span>
|
||||
<br/>
|
||||
상세주소 :
|
||||
<input type="text" id="etcAddr" name="etcAddr" class="form-control w-px-400" />
|
||||
<button type="button" class="btn btn-primary" onClick="fnReturn();">확인</button>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
<script language="javascript">
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl
|
||||
**************************************************************************/
|
||||
var addrControl = new DatasetControl({
|
||||
urls : { load : "", getInfo : "" },
|
||||
dataGetter : obj => obj.juso, appendData:false,
|
||||
keymapper : info => info ? info.TEMP_ID : "",
|
||||
formats: {}
|
||||
});
|
||||
|
||||
/**************************************************************************
|
||||
* DatasetControl.on
|
||||
**************************************************************************/
|
||||
addrControl.onDatasetChange = (obj) => {
|
||||
|
||||
renderAddrList(obj.common.totalCount);
|
||||
|
||||
$("#addrPaging").setPaging({
|
||||
list: addrControl.dataset,
|
||||
prefix: "addrPaging",
|
||||
start: (((obj.common.currentPage - 1) * obj.common.countPerPage) + 1),
|
||||
totalSize: obj.common.totalCount,
|
||||
fetchSize: obj.common.countPerPage,
|
||||
func: "getAddr({index})"
|
||||
});
|
||||
}
|
||||
|
||||
function renderAddrList(total){
|
||||
|
||||
var addrList = addrControl.dataset;
|
||||
var empty = addrList.empty;
|
||||
var notFound = [document.getElementById("addrNotFound").innerHTML];
|
||||
var found = document.getElementById("addrRow").innerHTML;
|
||||
var replacer = (str, dataItem) => str
|
||||
.replace(/{onclick}/gi, "fnClickAddrList('" + dataItem.getValue("TEMP_ID") + "');")
|
||||
var trs = empty ? notFound : addrList.inStrings(found, replacer);
|
||||
$("#addrTbody").html(trs.join());
|
||||
|
||||
}
|
||||
|
||||
function getAddr(pageNum){
|
||||
// 적용예 (api 호출 전에 검색어 체크)
|
||||
if (!checkSearchedWord(document.form.keyword)) {
|
||||
return ;
|
||||
}
|
||||
|
||||
$("#currentPage").val(pageNum);
|
||||
|
||||
$.ajax({
|
||||
url :"https://business.juso.go.kr/addrlink/addrLinkApiJsonp.do" //인터넷망
|
||||
,type:"post"
|
||||
,data:$("#form").serialize()
|
||||
,dataType:"jsonp"
|
||||
,crossDomain:true
|
||||
,success:function(jsonStr){
|
||||
$("#list").show();
|
||||
$("#formBottom").attr("hidden","hidden");
|
||||
|
||||
var errCode = jsonStr.results.common.errorCode;
|
||||
var errDesc = jsonStr.results.common.errorMessage;
|
||||
if(errCode != "0"){
|
||||
alert(errCode+"="+errDesc);
|
||||
}else{
|
||||
if(jsonStr != null){
|
||||
var tempId = 0;
|
||||
jsonStr.results.juso.forEach((item) => item.TEMP_ID = tempId++);
|
||||
|
||||
addrControl.setData(jsonStr.results);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
,error: function(xhr,status, error){
|
||||
alert("에러발생");
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
//특수문자, 특정문자열(sql예약어의 앞뒤공백포함) 제거
|
||||
function checkSearchedWord(obj){
|
||||
if(obj.value.length >0){
|
||||
//특수문자 제거
|
||||
var expText = /[%=><]/ ;
|
||||
if(expText.test(obj.value) == true){
|
||||
alert("특수문자를 입력 할수 없습니다.") ;
|
||||
obj.value = obj.value.split(expText).join("");
|
||||
return false;
|
||||
}
|
||||
|
||||
//특정문자열(sql예약어의 앞뒤공백포함) 제거
|
||||
var sqlArray = new Array(
|
||||
//sql 예약어
|
||||
"OR", "SELECT", "INSERT", "DELETE", "UPDATE", "CREATE", "DROP", "EXEC",
|
||||
"UNION", "FETCH", "DECLARE", "TRUNCATE"
|
||||
);
|
||||
|
||||
var regex;
|
||||
for(var i=0; i<sqlArray.length; i++){
|
||||
regex = new RegExp( sqlArray[i] ,"gi") ;
|
||||
|
||||
if (regex.test(obj.value) ) {
|
||||
alert("\"" + sqlArray[i]+"\"와(과) 같은 특정문자로 검색할 수 없습니다.");
|
||||
obj.value =obj.value.replace(regex, "");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
return true ;
|
||||
}
|
||||
|
||||
function enterSearch() {
|
||||
var evt_code = (window.netscape) ? ev.which : event.keyCode;
|
||||
if (evt_code == 13) {
|
||||
event.keyCode = 0;
|
||||
getAddr(1); //jsonp사용시 enter검색
|
||||
}
|
||||
}
|
||||
|
||||
function fnClickAddrList(tempId){
|
||||
$("#formBottom").removeAttr("hidden");
|
||||
$("#mainAddr").html("");
|
||||
$("#etcAddr").val("");
|
||||
|
||||
addrControl.dataset.setCurrent(tempId);
|
||||
$("#mainAddr").html(addrControl.dataset.getCurrent().roadAddr);
|
||||
$("#addrTbody").setCurrentRow(tempId);
|
||||
$("#etcAddr").focus();
|
||||
}
|
||||
|
||||
function fnReturn(){
|
||||
var addrObj = {};
|
||||
|
||||
addrObj = addrControl.dataset.getCurrent();
|
||||
addrObj.etcAddr = $("#etcAddr").val();
|
||||
|
||||
addrObj.ZIP = addrObj.zipNo;
|
||||
addrObj.ADDR = addrObj.roadAddrPart1;
|
||||
addrObj.DTL_ADDR = addrObj.etcAddr + addrObj.roadAddrPart2;
|
||||
addrObj.ROAD_NM_CD = addrObj.rnMgtSn;
|
||||
addrObj.UDGD_SE_CD = addrObj.udrtYn;
|
||||
addrObj.BMNO = addrObj.buldMnnm;
|
||||
addrObj.BSNO = addrObj.buldSlno;
|
||||
addrObj.BLDG_MNG_NO = addrObj.bdMgtSn;
|
||||
|
||||
addrObj.STDG_CD = addrObj.admCd;
|
||||
addrObj.MTN_SE_CD = addrObj.mtYn;
|
||||
addrObj.MNO = addrObj.lnbrMnnm;
|
||||
addrObj.SNO = addrObj.lnbrSlno;
|
||||
|
||||
addrObj.DONG_CD = "";
|
||||
|
||||
var callbackFuncName = $("#searchAddrCallback").val();
|
||||
|
||||
if(callbackFuncName.startsWith("pageObject")){
|
||||
var i1 = callbackFuncName.indexOf("[");
|
||||
var i2 = callbackFuncName.indexOf("]");
|
||||
|
||||
var page = callbackFuncName.substring(i1+2,i2-1);
|
||||
var func = callbackFuncName.substring(i2+2);
|
||||
|
||||
pageObject[page][func](addrObj);
|
||||
} else {
|
||||
window[callbackFuncName](addrObj);
|
||||
}
|
||||
|
||||
dialog.close("searchAddrDialog");
|
||||
}
|
||||
|
||||
fnMakeResizableTable($("#table-responsive")[0]);
|
||||
$("#list").hide();
|
||||
|
||||
</script>
|
Loading…
Reference in New Issue