thkim 2026-02-06 09:18:55 +09:00
commit c5a8096ee0
5 changed files with 81 additions and 62 deletions

View File

@ -189,7 +189,10 @@ public class DrillingInputController {
jsonObject.put("result", new JSONObject().put("list", jsonListObject)); jsonObject.put("result", new JSONObject().put("list", jsonListObject));
} else { } else {
JSONObject result = new JSONObject(); JSONObject result = new JSONObject();
long start = System.currentTimeMillis();
result.put("list", drillingInputService.selectConstructCompanyList(params)); result.put("list", drillingInputService.selectConstructCompanyList(params));
long end = System.currentTimeMillis();
LOGGER.info("(CONTROLLER) selectConstructCompanyList 실행시간: {} ms", (end - start));
jsonObject.put("resultMessage", "OK"); jsonObject.put("resultMessage", "OK");
jsonObject.put("resultCode", 200); jsonObject.put("resultCode", 200);
@ -214,7 +217,7 @@ public class DrillingInputController {
JSONObject jsonObject = new JSONObject(); JSONObject jsonObject = new JSONObject();
strUtil sUtil = new strUtil(); strUtil sUtil = new strUtil();
String userid = sUtil.checkNull((String)params.get("encUserid")); String userid = sUtil.checkNull((String)params.get("userid"));
JSONArray jsonListObject = new JSONArray(); JSONArray jsonListObject = new JSONArray();

View File

@ -10,6 +10,8 @@ import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.json.simple.JSONObject; import org.json.simple.JSONObject;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
@ -17,7 +19,7 @@ import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.ModelAndView;
import egovframework.rte.psl.dataaccess.util.EgovMap; import egovframework.rte.psl.dataaccess.util.EgovMap;
import geoinfo.com.CryptoUtil; import geoinfo.drilling.input.DrillingInputController;
import geoinfo.drilling.input.service.DrillingInputMapper; import geoinfo.drilling.input.service.DrillingInputMapper;
import geoinfo.drilling.input.service.DrillingInputService; import geoinfo.drilling.input.service.DrillingInputService;
import geoinfo.drilling.inquiry.service.DrillingInquiryService; import geoinfo.drilling.inquiry.service.DrillingInquiryService;
@ -29,6 +31,7 @@ import ictway.comm.util.strUtil;
@Service("drillingInputService") @Service("drillingInputService")
public class DrillingInputServiceImpl implements DrillingInputService { public class DrillingInputServiceImpl implements DrillingInputService {
private static final Logger LOGGER = LoggerFactory.getLogger(DrillingInputServiceImpl.class);
@Resource(name="drillingInputMapper") @Resource(name="drillingInputMapper")
private DrillingInputMapper drillingInputMapper; private DrillingInputMapper drillingInputMapper;
@ -79,6 +82,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
public HashMap<String, Object> drillingInputAdd(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception { public HashMap<String, Object> drillingInputAdd(HttpServletRequest request, HttpServletResponse response, HashMap<String, Object> params) throws Exception {
String userId = (String)request.getSession().getAttribute("USERID"); String userId = (String)request.getSession().getAttribute("USERID");
String addConstUserid = MyUtil.getStringFromObject( params.get("constUserid") );
HashMap<String, Object> spGetMasterCompanyDistrictParams = getOrganizationUserGlGmGsGfCodes(userId); HashMap<String, Object> spGetMasterCompanyDistrictParams = getOrganizationUserGlGmGsGfCodes(userId);
@ -89,12 +93,6 @@ public class DrillingInputServiceImpl implements DrillingInputService {
params.put("masterCompanyThCode", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") )); params.put("masterCompanyThCode", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gs") ));
params.put("masterCompanyName", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") )); params.put("masterCompanyName", MyUtil.getStringFromObject( spGetMasterCompanyDistrictParams.get("v_gf") ));
// 건설사 계정 연결(암호화된 userid 복호화)
String encryptId = MyUtil.getStringFromObject( params.get("encUserid") );
String decryptId = CryptoUtil.decryptQuickAES(encryptId);
params.put("constUserid", decryptId);
try { try {
Long constCompanyCode = drillingInputMapper.findConstCompanyCodeByConstCompanyName(params); Long constCompanyCode = drillingInputMapper.findConstCompanyCodeByConstCompanyName(params);
@ -106,9 +104,8 @@ public class DrillingInputServiceImpl implements DrillingInputService {
* @constUserId * @constUserId
* @holeNumber ( , -999 ) * @holeNumber ( , -999 )
*/ */
if (!"".equals(encryptId)) { if (!"".equals(addConstUserid)) {
String constUserId = decryptId; params.put("constUserId", addConstUserid);
params.put("constUserId", constUserId);
params.put("holeNumber", -999); params.put("holeNumber", -999);
saveAndInsertMeta(params, request, response); saveAndInsertMeta(params, request, response);
} }
@ -146,26 +143,11 @@ public class DrillingInputServiceImpl implements DrillingInputService {
@Override @Override
public List<EgovMap> selectConstructCompanyList(HashMap<String, Object> params) throws Exception { public List<EgovMap> selectConstructCompanyList(HashMap<String, Object> params) throws Exception {
long start = System.currentTimeMillis();
List<EgovMap> list = new ArrayList<EgovMap>(); List<EgovMap> list = new ArrayList<EgovMap>();
list = drillingInputMapper.selectConstructCompanyList(params); list = drillingInputMapper.selectConstructCompanyList(params);
long end = System.currentTimeMillis();
for (EgovMap map : list) { LOGGER.info("( SERVICE ) selectConstructCompanyList 실행시간: {} ms", (end - start));
String userid = (String) map.get("userid");
if (userid == null) continue;
// 암호화
// String encryptId = CryptoUtil.encryptAES256(userid, secret_key);
String encryptId = CryptoUtil.encryptQuickAES(userid);
// userid 제거
map.remove("userid");
// 복호화 (검증 or 필요 시)
// String decryptId = CryptoUtil.decryptAES256(encryptId, secret_key);
map.put("encryptId", encryptId);
// map.put("decryptId", decryptId);
}
return list; return list;
} }
@ -173,10 +155,6 @@ public class DrillingInputServiceImpl implements DrillingInputService {
@Override @Override
public Map<String, Object> selectConstructUserInfo(HashMap<String, Object> params) throws Exception { public Map<String, Object> selectConstructUserInfo(HashMap<String, Object> params) throws Exception {
Map<String, Object> result = new HashMap<String, Object>(); Map<String, Object> result = new HashMap<String, Object>();
// 건설사 계정 연결(암호화된 userid 복호화)
String encryptId = MyUtil.getStringFromObject( params.get("encUserid") );
String decryptId = CryptoUtil.decryptQuickAES(encryptId);
params.put("userid", decryptId);
Map<String, Object> infoData = loginMapper.selectWebMemberIn(params); Map<String, Object> infoData = loginMapper.selectWebMemberIn(params);
@ -360,10 +338,8 @@ public class DrillingInputServiceImpl implements DrillingInputService {
findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyName", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gf") )); findConstCompanyCodeByConstCompanyNameParams.put("masterCompanyName", MyUtil.getStringFromObject( findConstCompanyCodeByConstCompanyNameParams.get("v_gf") ));
// 건설사 계정 연결(암호화된 userid 복호화) // 건설사 계정 연결(암호화된 userid 복호화)
String encryptId = MyUtil.getStringFromObject( params.get("encUserid") ); String addConstUserid = MyUtil.getStringFromObject( params.get("constUserid") );
String decryptId = CryptoUtil.decryptQuickAES(encryptId); params.put("constUserid", addConstUserid);
params.put("constUserid", decryptId);
try { try {
@ -411,7 +387,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
if (oldTempConstructSiteInfo.get("constUserid") != null && !"".equals(oldTempConstructSiteInfo.get("constUserid"))) { if (oldTempConstructSiteInfo.get("constUserid") != null && !"".equals(oldTempConstructSiteInfo.get("constUserid"))) {
orgConstUserid = sUtil.checkNull((String) oldTempConstructSiteInfo.get("constUserid")); orgConstUserid = sUtil.checkNull((String) oldTempConstructSiteInfo.get("constUserid"));
} }
/** encryptId : /** addConstUserid :
* 1) encryptId == "" && orgConstUserid == "" : -> spUdtTblCsi * 1) encryptId == "" && orgConstUserid == "" : -> spUdtTblCsi
* 2) encryptId == "" && orgConstUserid != "" : -> TEMP_META_~, TEMP_PROJECT_~ TEMP_CONSTRUCT_~ UPDATE spUdtTblCsi * 2) encryptId == "" && orgConstUserid != "" : -> TEMP_META_~, TEMP_PROJECT_~ TEMP_CONSTRUCT_~ UPDATE spUdtTblCsi
* 3) encryptId != "" && orgConstUserid == "" : -> SaveAndInsertMeta . ( PROJECT_CODE , TEMP_META~, TEMP_PROJECT~ ) spUdtTblCsi * 3) encryptId != "" && orgConstUserid == "" : -> SaveAndInsertMeta . ( PROJECT_CODE , TEMP_META~, TEMP_PROJECT~ ) spUdtTblCsi
@ -421,7 +397,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
* 5-2) orgConstUser -> SaveAndInsertMeta . ( PROJECT_CODE , TEMP_META~, TEMP_PROJECT~ ) spUdtTblCsi * 5-2) orgConstUser -> SaveAndInsertMeta . ( PROJECT_CODE , TEMP_META~, TEMP_PROJECT~ ) spUdtTblCsi
*/ */
if ("".equals(encryptId)) { if ("".equals(addConstUserid)) {
if ("".equals(orgConstUserid)) { // 1) if ("".equals(orgConstUserid)) { // 1)
// drillingInputMapper.spUdtTblCsi(spUdtTblCsiParams); // drillingInputMapper.spUdtTblCsi(spUdtTblCsiParams);
} else { // 2) } else { // 2)
@ -433,7 +409,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
} else { // !"".equals(encryptId) } else { // !"".equals(encryptId)
if (orgConstUserid != null && "".equals(orgConstUserid)) { // 3) if (orgConstUserid != null && "".equals(orgConstUserid)) { // 3)
EgovMap tbl = null; // cid로 발주기관 등록 건설현장 정보 조회(PROJECT_CODE 취득) EgovMap tbl = null; // cid로 발주기관 등록 건설현장 정보 조회(PROJECT_CODE 취득)
String constUserId = decryptId; String constUserId = addConstUserid;
params.put("constUserId", constUserId); params.put("constUserId", constUserId);
tbl = drillingInputMapper.getItemByCid( params ); tbl = drillingInputMapper.getItemByCid( params );
if (tbl.get("projectCode") != null && !"".equals(tbl.get("projectCode"))) { // PROJECT_CODE가 존재하면 입력중인 프로젝트. if (tbl.get("projectCode") != null && !"".equals(tbl.get("projectCode"))) { // PROJECT_CODE가 존재하면 입력중인 프로젝트.
@ -446,7 +422,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
saveAndInsertMeta(params, request, response); saveAndInsertMeta(params, request, response);
drillingInputMapper.spUdtTblCsi(spUdtTblCsiParams); drillingInputMapper.spUdtTblCsi(spUdtTblCsiParams);
} else { // !"".equals(orgConstUserId) } else { // !"".equals(orgConstUserId)
if (encryptId.equals(orgConstUserid)) { // 4) if (addConstUserid.equals(orgConstUserid)) { // 4)
} else { // !encryptId.equals(orgConstUserid) 5) } else { // !encryptId.equals(orgConstUserid) 5)
// 기업사용자 입력 진행 여부: !NULL -> 입력 전, NULL -> 입력 중(삭제불가) // 기업사용자 입력 진행 여부: !NULL -> 입력 전, NULL -> 입력 중(삭제불가)
EgovMap constCompanyProjectWriting = drillingInputMapper.selectConstructCompanyProjectWriting(oldTempConstructSiteInfo); EgovMap constCompanyProjectWriting = drillingInputMapper.selectConstructCompanyProjectWriting(oldTempConstructSiteInfo);
@ -459,7 +435,7 @@ public class DrillingInputServiceImpl implements DrillingInputService {
deleteTempProjectInfo(oldTempConstructSiteInfo); deleteTempProjectInfo(oldTempConstructSiteInfo);
params.put("holeNumber", -999); params.put("holeNumber", -999);
params.put("constProjectCode", oldTempConstructSiteInfo.get("projectCode")); // 기존에 부여된 PROJECT_CODE 유지 params.put("constProjectCode", oldTempConstructSiteInfo.get("projectCode")); // 기존에 부여된 PROJECT_CODE 유지
params.put("constUserId", decryptId); // 새로 선정한 건설사계정 params.put("constUserId", addConstUserid); // 새로 선정한 건설사계정
saveAndInsertMeta(params, request, response); saveAndInsertMeta(params, request, response);
} }
} }

View File

@ -290,11 +290,6 @@ public class DrillingInquiryServiceImpl implements DrillingInquiryService {
data.put("orgConstUserId", orgConstUserId); data.put("orgConstUserId", orgConstUserId);
} }
String encryptId = "";
if (data.get("constUserid")!= null /*&& !"".equals(data.get("constUserid"))*/) {
encryptId = CryptoUtil.encryptQuickAES((String) data.get("constUserid"));
data.put("constUserid", encryptId);
}
Long nConstCompanyCodeKey = MyUtil.getLongFromObject(data.get("constCompanyCode")); Long nConstCompanyCodeKey = MyUtil.getLongFromObject(data.get("constCompanyCode"));
if( nConstCompanyCodeKey != null ) { if( nConstCompanyCodeKey != null ) {
params.put("constCompanyCode", nConstCompanyCodeKey); params.put("constCompanyCode", nConstCompanyCodeKey);

View File

@ -74,10 +74,8 @@
SELECT SELECT
TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME, TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME,
wmi.USERID, wmi.USERID,
SUBSTR(wmi.USERID, 1, 2) || '****' || SUBSTR(wmi.USERID, LENGTH(wmi.USERID)-1, 2) AS MaskedID,
TRIM(wmi.NEW_ADDRESS) AS NEW_ADDRESS,
TRIM(wmi.PART_NAME) AS PART_NAME, TRIM(wmi.PART_NAME) AS PART_NAME,
wmi.COMPANY_REGIST_NO wmi.EMAIL
FROM FROM
web_member_in wmi web_member_in wmi
WHERE WHERE
@ -85,6 +83,45 @@
and wmi.COMPANY_NAME NOT IN ('111', 'a') and wmi.COMPANY_NAME NOT IN ('111', 'a')
and wmi.COMPANY_NAME is not NULL and wmi.COMPANY_NAME is not NULL
and wmi.COMPANY_NAME LIKE '%' || #{companyName} || '%' and wmi.COMPANY_NAME LIKE '%' || #{companyName} || '%'
UNION
SELECT
TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME,
wmi.USERID,
TRIM(wmi.PART_NAME) AS PART_NAME,
wmi.EMAIL
FROM
web_member_in wmi
WHERE
wmi.CLS = 1
and wmi.COMPANY_NAME NOT IN ('111', 'a')
and wmi.COMPANY_NAME is not NULL
and wmi.USER_NAME like '%' || #{companyName} || '%'
UNION
SELECT
TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME,
wmi.USERID,
TRIM(wmi.PART_NAME) AS PART_NAME,
wmi.EMAIL
FROM
web_member_in wmi
WHERE
wmi.CLS = 1
and wmi.COMPANY_NAME NOT IN ('111', 'a')
and wmi.COMPANY_NAME is not NULL
and wmi.USERID like '%' || #{companyName} || '%'
UNION
SELECT
TRIM(wmi.COMPANY_NAME) AS COMPANY_NAME,
wmi.USERID,
TRIM(wmi.PART_NAME) AS PART_NAME,
wmi.EMAIL
FROM
web_member_in wmi
WHERE
wmi.CLS = 1
and wmi.COMPANY_NAME NOT IN ('111', 'a')
and wmi.COMPANY_NAME is not NULL
and wmi.EMAIL like '%' || #{companyName} || '%'
</select> </select>
<select id="getDepartments" parameterType="map" resultType="egovMap"> <select id="getDepartments" parameterType="map" resultType="egovMap">

View File

@ -268,7 +268,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<th>건설사</th> <th>건설사</th>
<td colspan="3" class="info-row"> <td colspan="3" class="info-row">
<input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" /> <input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" />
<input type="text" value="" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명"> <input type="text" value="" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명, 이름, 아이디 또는 이메일">
<input type="text" value="" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자"> <input type="text" value="" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자">
<input type="text" value="010-0000-0000" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처"> <input type="text" value="010-0000-0000" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처">
<label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `"> <label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `">
@ -417,12 +417,12 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
list.forEach(function (item) { list.forEach(function (item) {
const suggestionItem = document.createElement('div'); const suggestionItem = document.createElement('div');
let maskedid = ''; let userid = '';
let partName = ''; let partName = '';
let newAddress = ''; let email = '';
if (item.maskedid) maskedid = item.maskedid; if (item.userid) userid = item.userid;
if (item.partName) partName = item.partName; if (item.partName) partName = item.partName;
if (item.newAddress) newAddress = item.newAddress; if (item.email) email = item.email;
const keyword = companyName; const keyword = companyName;
const regex = new RegExp(keyword, 'gi'); const regex = new RegExp(keyword, 'gi');
@ -430,17 +430,25 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
regex, regex,
'<b style="background:yellow">' + keyword + '</b>' '<b style="background:yellow">' + keyword + '</b>'
); );
const boldConstUserid = item.userid.replace(
regex,
'<b style="background:yellow; color:red">' + keyword + '</b>'
);
const boldEmail = item.email.replace(
regex,
'<b style="background:yellow; color:red">' + keyword + '</b>'
);
suggestionItem.innerHTML = suggestionItem.innerHTML =
'<span class="organizational-structure">' + boldCompanyName + '</span><br />' + '<span class="organizational-structure">' + boldCompanyName + '</span><br />' +
'<span>' + maskedid + '(' + partName + ')' + '/' + newAddress '<span>' + boldConstUserid + '(' + partName + ')' + '/' + boldEmail
'</span>'; '</span>';
suggestionItem.addEventListener('click', function () { suggestionItem.addEventListener('click', function () {
companyNameInput.value = item.companyName; companyNameInput.value = item.companyName;
hiddenUserIdInput.value = item.encryptId; hiddenUserIdInput.value = item.userid;
suggestionListDiv.style.display = 'none'; suggestionListDiv.style.display = 'none';
setConstInfo(item.encryptId, tableContainerDiv); // 건설사 계정 선택시 이름, 연락처 자동 셋팅 setConstInfo(userid, tableContainerDiv); // 건설사 계정 선택시 이름, 연락처 자동 셋팅
}); });
suggestionListDiv.appendChild(suggestionItem); suggestionListDiv.appendChild(suggestionItem);
@ -604,8 +612,8 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
} }
// 건설사 - 선택한 건설사 userid // 건설사 - 선택한 건설사 userid
var hiddenUseridEle = document.getElementById('const-user-id-' + dataIndexValue); var useridEle = document.getElementById('const-user-id-' + dataIndexValue);
jsonItem.encUserid = hiddenUseridEle.value; jsonItem.constUserid = useridEle.value;
if (cid) { if (cid) {
jsonItem.cid=cid; jsonItem.cid=cid;
} }
@ -786,7 +794,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
url: '/const-user-info.json', url: '/const-user-info.json',
dataType: 'json', dataType: 'json',
data: { data: {
encUserid: encId userid: encId
}, },
success: function (json) { success: function (json) {
// console.log(json) // console.log(json)
@ -933,7 +941,7 @@ if (request.getSession().getAttribute("CLS") == null || "2".equals(request.getSe
<th>건설사</th> <th>건설사</th>
<td colspan="3" class="info-row"> <td colspan="3" class="info-row">
<input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" /> <input type="hidden" value="" id="const-user-id-` + tableId + `" name="const-user-id" />
<input type="text" value="` + const_company_dept + `" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명"> <input type="text" value="` + const_company_dept + `" class="input-box information1 const-company-dept" id="const-company-dept-` + tableId + `" placeholder="건설사명, 이름, 아이디 또는 이메일">
<input type="text" value="` + const_company_name + `" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자"> <input type="text" value="` + const_company_name + `" class="input-box information2" id="const-company-admin-` + tableId + `" placeholder="담당자">
<input type="text" value="` + const_company_tel + `" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처"> <input type="text" value="` + const_company_tel + `" class="input-box information3" id="const-company-tel-` + tableId + `" placeholder="담당자 연락처">
<label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `" ` + fin_const_company + `> <label class="check-box unselected-constructor-label" for="unselected-constructor-` + tableId + `"><input type="checkbox" id="unselected-constructor-` + tableId + `" ` + fin_const_company + `>