Compare commits

..

193 Commits

Author SHA1 Message Date
b230529537 addresseeCompanyName 50자제한 2026-04-08 10:12:48 +09:00
cd4a913a9f Merge branch 'dev-deploy' into hotfix/9999 2026-04-03 16:26:05 +09:00
1bf777f8a0 자동 로그인 추적 2026-04-03 13:17:27 +09:00
60b84191c1 로그인, 로그아웃 추적 2026-04-03 11:12:34 +09:00
709b1f1f15 [1480]사의 각도 설정을 "각도"로 했을 때 발생하는 문제 - 출력물 2026-04-03 09:12:18 +09:00
f407079fb2 [1480]사의 각도 설정을 "각도"로 했을 때 발생하는 문제 - 출력물 2026-04-02 18:28:37 +09:00
3e64d8a2fc [1480]사의 각도 설정을 "각도"로 했을 때 발생하는 문제 - 출력물 2026-04-02 17:17:06 +09:00
0b9eeb996e quotationErrSave api 추가 2026-04-01 18:34:57 +09:00
2b43fad252 [1423]설계 가져오기 기능에 대해 2026-04-01 15:12:15 +09:00
037e320137 java 버전 맞춤3 2026-04-01 14:30:47 +09:00
d68b127001 java 버전 맞춤2 2026-04-01 14:27:04 +09:00
9b7620637e java 버전 맞춤 2026-04-01 13:44:37 +09:00
73da60a017 java 버전 맞춤 2026-04-01 13:29:25 +09:00
2d34526a8a Merge pull request '발전시뮬레이션 관련 견적서 조회 API 개발' (#448) from feature/jp-0331 into dev
Reviewed-on: #448
2026-04-01 09:12:10 +09:00
a662c49064 Merge pull request 'dev' (#435) from dev into dev-deploy
Reviewed-on: #435
2026-03-19 15:27:34 +09:00
ed8a8203e8 Merge pull request '[카카오] ® → ? => (R) and PDF font 복구' (#434) from dev into dev-deploy
Reviewed-on: #434
2026-03-17 18:40:23 +09:00
b9815dcec1 Merge pull request '[카카오] ® → ? => (R) and PDF font' (#433) from dev into dev-deploy
Reviewed-on: #433
2026-03-17 17:50:52 +09:00
fdf6dc3f93 Merge pull request '[카카오] ® → ? => Ⓡ' (#432) from dev into dev-deploy
Reviewed-on: #432
2026-03-17 17:40:11 +09:00
61306ddaba Merge pull request 'dev' (#430) from dev into dev-deploy
Reviewed-on: #430
2026-03-17 13:32:42 +09:00
7395c0178f Merge pull request 'dev' (#426) from dev into dev-deploy
Reviewed-on: #426
2026-03-17 10:44:35 +09:00
8f55d80133 Merge pull request 'dev' (#422) from dev into dev-deploy
Reviewed-on: #422
2026-03-13 15:45:14 +09:00
303a81d7fa Merge pull request '[1479]물건 정보 화면에 일부 PCS 명칭이 표시되지 않는다 - 스토리지뱃더리 추가' (#420) from dev into dev-deploy
Reviewed-on: #420
2026-03-12 17:12:04 +09:00
297abd9e37 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 cell 이미지 추가' (#418) from dev into dev-deploy
Reviewed-on: #418
2026-03-11 18:25:00 +09:00
0aea25af53 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 cell 이미지 추가' (#417) from dev into dev-deploy
Reviewed-on: #417
2026-03-11 18:10:22 +09:00
5fa758771b Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 cell 이미지 추가' (#416) from dev into dev-deploy
Reviewed-on: #416
2026-03-11 18:04:12 +09:00
7bb5211f04 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 cell 이미지 추가' (#415) from dev into dev-deploy
Reviewed-on: #415
2026-03-11 18:00:33 +09:00
f45e23e442 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 cell 이미지 추가' (#414) from dev into dev-deploy
Reviewed-on: #414
2026-03-11 17:22:17 +09:00
7c5d4077d5 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 시트 추가' (#413) from dev into dev-deploy
Reviewed-on: #413
2026-03-11 15:00:04 +09:00
7d03bb1cf0 Merge pull request '[1470] 배치도·계통도 및 구조도의 화질 개선 시트 추가' (#412) from dev into dev-deploy
Reviewed-on: #412
2026-03-11 14:48:12 +09:00
7b0451c166 Merge pull request 'dev' (#411) from dev into dev-deploy
Reviewed-on: #411
2026-03-11 11:04:35 +09:00
953b044e4c Merge pull request '[1379] 견적서 주소 수정' (#409) from dev into dev-deploy
Reviewed-on: #409
2026-03-09 18:41:09 +09:00
604a7561f0 Merge pull request '[1516] 발전량 수정 중복모듈처리' (#407) from dev into dev-deploy
Reviewed-on: #407
2026-03-09 13:38:45 +09:00
0b2c2d12ac Merge pull request '[1379] 견적서 출력 쿼리수정' (#405) from dev into dev-deploy
Reviewed-on: #405
2026-02-26 13:41:30 +09:00
975d42a0b5 Merge pull request '[1375]인증용량 쿼리수정2' (#403) from dev into dev-deploy
Reviewed-on: #403
2026-02-25 20:09:29 +09:00
cc6744d158 Merge pull request '[1375]인증용량 쿼리수정' (#401) from dev into dev-deploy
Reviewed-on: #401
2026-02-24 17:53:02 +09:00
a6fc8bed90 Merge pull request 'dev' (#399) from dev into dev-deploy
Reviewed-on: #399
2026-02-23 09:11:03 +09:00
45d8e58fe7 Merge pull request 'dev' (#397) from dev into dev-deploy
Reviewed-on: #397
2026-02-12 11:24:03 +09:00
caffde39ee Merge pull request 'dev' (#396) from dev into dev-deploy
Reviewed-on: #396
2026-02-12 09:07:40 +09:00
2397be70ff Merge pull request '배치데드락로그' (#391) from dev into dev-deploy
Reviewed-on: #391
2026-02-11 13:16:40 +09:00
3777da8540 Merge pull request '[1379] 견적서 출력 zip, address, tel, fax 수정' (#389) from dev into dev-deploy
Reviewed-on: #389
2026-02-10 17:25:16 +09:00
c5527b6347 Merge pull request 'dev' (#387) from dev into dev-deploy
Reviewed-on: #387
2026-02-10 14:46:51 +09:00
48f11da0bb Merge pull request '[1379] 견적서 출력 zip, address, tel, fax 수정' (#385) from dev into dev-deploy
Reviewed-on: #385
2026-02-10 12:24:50 +09:00
5dd6de7173 Merge pull request 'dev' (#383) from dev into dev-deploy
Reviewed-on: #383
2026-02-09 17:38:35 +09:00
6973b3e545 Merge pull request '[1460] text->숫자' (#381) from dev into dev-deploy
Reviewed-on: #381
2026-02-09 13:47:23 +09:00
de3bee2e39 Merge pull request '[1375]인증용량 pcs 관련 스펙 추가' (#379) from dev into dev-deploy
Reviewed-on: #379
2026-02-09 11:13:35 +09:00
7d5b646f9a Merge pull request '[1375]인증용량 pcs 관련 스펙 추가' (#377) from dev into dev-deploy
Reviewed-on: #377
2026-02-06 16:59:56 +09:00
042bbfd7c3 Merge pull request 'job 로그 추가(에러확인)' (#375) from dev into dev-deploy
Reviewed-on: #375
2026-02-06 14:34:59 +09:00
15deda383a Merge pull request 'dev' (#373) from dev into dev-deploy
Reviewed-on: #373
2026-02-05 14:55:00 +09:00
709425a484 Merge pull request '[1445] 각도 0 일때 시뮬레이션 문제' (#371) from dev into dev-deploy
Reviewed-on: #371
2026-02-04 17:49:28 +09:00
ef5116a926 Merge pull request '[1375]인증용량 소수점3자리까지' (#369) from dev into dev-deploy
Reviewed-on: #369
2026-02-04 11:33:10 +09:00
7a1fce57e8 Merge pull request '[1375]인증용량 소수점2자리까지' (#367) from dev into dev-deploy
Reviewed-on: #367
2026-02-04 11:30:14 +09:00
8810377af0 Merge pull request '[1375]인증용량 계산수정6' (#365) from dev into dev-deploy
Reviewed-on: #365
2026-02-04 11:19:39 +09:00
c147d13719 Merge pull request '[1375]인증용량 계산수정5' (#363) from dev into dev-deploy
Reviewed-on: #363
2026-02-03 18:39:27 +09:00
3e3131c9a9 Merge pull request '[1375]인증용량 계산수정4' (#361) from dev into dev-deploy
Reviewed-on: #361
2026-02-03 15:27:45 +09:00
61c8db15b5 Merge pull request '[1448]견적서에서 지붕 면적이 배치보다 많이 표시' (#359) from dev into dev-deploy
Reviewed-on: #359
2026-02-03 13:10:28 +09:00
f42a084d33 Merge pull request 'Merge pull request 'updatePlanConfirmSync 쿼리변경' (#356) from dev_ysCha into dev' (#357) from dev into dev-deploy
Reviewed-on: #357
2026-02-02 18:24:33 +09:00
17e5dd1c2d Merge pull request 'dev_ysCha' (#355) from dev_ysCha into dev-deploy
Reviewed-on: #355
2026-01-30 10:16:51 +09:00
41b1fce8f3 Merge pull request '[1429] 모듈이 여러개 인경우 amp 높은순' (#354) from dev into dev-deploy
Reviewed-on: #354
2026-01-29 14:35:43 +09:00
bb6a2968cf Merge pull request '[1429] TT.DISP_ORDER, TT.ITEM_ID' (#353) from dev into dev-deploy
Reviewed-on: #353
2026-01-27 17:50:12 +09:00
0bedaa32f0 Merge pull request 'dev' (#352) from dev into dev-deploy
Reviewed-on: #352
2026-01-26 17:33:57 +09:00
d11578d472 Merge pull request 'dev' (#350) from dev into dev-deploy
Reviewed-on: #350
2026-01-26 16:28:18 +09:00
f9bbe04a9c Merge pull request 'dev' (#348) from dev into dev-deploy
Reviewed-on: #348
2026-01-26 15:16:17 +09:00
ead7dc32ab Merge pull request 'dev' (#346) from dev into dev-deploy
Reviewed-on: #346
2026-01-26 14:18:14 +09:00
35cae5901c Merge pull request 'dev' (#344) from dev into dev-deploy
Reviewed-on: #344
2026-01-23 15:17:55 +09:00
f76fcdd488 Merge pull request '[1417] 폰트통일' (#341) from dev into dev-deploy
Reviewed-on: #341
2026-01-23 09:35:04 +09:00
d75a870f86 Merge pull request '[1375]인증용량 계산수정' (#339) from dev into dev-deploy
Reviewed-on: #339
2026-01-22 15:34:53 +09:00
6315c9cfc0 Merge pull request 'dev' (#337) from dev into dev-deploy
Reviewed-on: #337
2026-01-22 13:42:58 +09:00
9098ce8c84 Merge pull request '[1375]인증용량 계산수정' (#335) from dev into dev-deploy
Reviewed-on: #335
2026-01-21 11:31:29 +09:00
143eb44612 Merge pull request '[1375]인증용량 계산수정' (#334) from dev into dev-deploy
Reviewed-on: #334
2026-01-21 11:21:47 +09:00
547330163b Merge pull request '[1375]인증용량 계산수정' (#333) from dev into dev-deploy
Reviewed-on: #333
2026-01-21 11:14:55 +09:00
2050c0027a Merge pull request 'dev' (#331) from dev into dev-deploy
Reviewed-on: #331
2026-01-20 13:52:45 +09:00
419c6af7ce Merge pull request '[1394]시뮬레이션 목록 오류' (#329) from dev into dev-deploy
Reviewed-on: #329
2026-01-19 11:10:38 +09:00
3974ea39fe Merge pull request 'dev' (#326) from dev into dev-deploy
Reviewed-on: #326
2026-01-14 16:13:43 +09:00
b9626f4ae3 Merge pull request 'dev' (#324) from dev into dev-deploy
Reviewed-on: #324
2026-01-14 14:37:17 +09:00
78861015db Merge pull request 'dev' (#321) from dev into dev-deploy
Reviewed-on: #321
2026-01-14 14:13:43 +09:00
4ec934438b Merge pull request 'dev' (#318) from dev into dev-deploy
Reviewed-on: #318
2026-01-14 13:14:10 +09:00
6aa189e337 Merge pull request 'dev' (#315) from dev into dev-deploy
Reviewed-on: #315
2026-01-13 17:40:27 +09:00
51aaaf2ae4 Merge pull request 'dev' (#312) from dev into dev-deploy
Reviewed-on: #312
2026-01-12 16:58:41 +09:00
8a8ea7cb27 Merge pull request '1차점 생성 2차점 가격미노출(정표)' (#309) from dev into dev-deploy
Reviewed-on: #309
2026-01-12 14:54:04 +09:00
6bbbded4da Merge pull request 'dev' (#307) from dev into dev-deploy
Reviewed-on: #307
2026-01-12 13:41:02 +09:00
d206d1bc2d Merge pull request 'dev' (#305) from dev into dev-deploy
Reviewed-on: #305
2026-01-12 11:11:45 +09:00
d99e6786fb Merge pull request '[1388] 지붕재 중복 순환 문제' (#302) from dev into dev-deploy
Reviewed-on: #302
2026-01-09 16:59:52 +09:00
a1192d4656 Merge pull request '[1393]Simulation 발전량 오류' (#300) from dev into dev-deploy
Reviewed-on: #300
2026-01-09 15:23:41 +09:00
9641f7560d Merge pull request '[1394]Simulation 내용의 오류 - 엑셀다운로드' (#298) from dev into dev-deploy
Reviewed-on: #298
2026-01-09 09:42:17 +09:00
f4f493b7c2 Merge pull request 'dev' (#297) from dev into dev-deploy
Reviewed-on: #297
2026-01-08 16:59:37 +09:00
4788938c70 Merge pull request 'dev' (#295) from dev into dev-deploy
Reviewed-on: #295
2026-01-06 17:33:02 +09:00
3392d342b0 Merge pull request 'businessTeamCd -> businessChargerTeamCd' (#293) from dev into dev-deploy
Reviewed-on: #293
2026-01-05 14:52:46 +09:00
acec646754 Merge pull request 'QCAST_CUST_PRD_ID != PC_ITEM_ID 수정' (#291) from dev into dev-deploy
Reviewed-on: #291
2026-01-05 14:02:46 +09:00
aeefbdd7cc Merge pull request 'dev' (#289) from dev into dev-deploy
Reviewed-on: #289
2026-01-05 13:07:48 +09:00
0b13ab7c58 Merge pull request 'estimateMapper.xml' (#287) from dev into dev-deploy
Reviewed-on: #287
2026-01-02 15:44:26 +09:00
109430e1d2 Merge pull request 'estimateMapper.xml' (#286) from dev into dev-deploy
Reviewed-on: #286
2026-01-02 14:23:04 +09:00
8152e029ce Merge pull request '배치가 멈춰있더라도 1시간만 지나면 별도의 조치 없이 다음 실행 때 자동으로 정상화' (#285) from dev into dev-deploy
Reviewed-on: #285
2025-12-31 14:56:17 +09:00
de9219cf56 Merge pull request 'resetFailedJobs가 실행되면서 DB에 끼어있던(STARTED) 상태들을 모두 실패(FAILED)로 바꿈' (#284) from dev into dev-deploy
Reviewed-on: #284
2025-12-31 14:23:32 +09:00
fefde969db Merge pull request '"storeAdditionalJob","businessChargerJob","adminUserJob" 허용' (#283) from dev into dev-deploy
Reviewed-on: #283
2025-12-31 09:46:25 +09:00
fcd47662cb Merge pull request 'dev' (#281) from dev into dev-deploy
Reviewed-on: #281
2025-12-30 14:30:48 +09:00
dca4a83062 Merge pull request 'String으로 수정' (#279) from dev into dev-deploy
Reviewed-on: #279
2025-12-24 17:50:09 +09:00
9c5feef68d Merge pull request 'northModuleYn 컬럼 추가' (#277) from dev into dev-deploy
Reviewed-on: #277
2025-12-24 17:31:29 +09:00
c4eb97a02a Merge pull request '엑셀수정' (#276) from dev into dev-deploy
Reviewed-on: #276
2025-12-23 17:57:22 +09:00
cb18e2196a Merge pull request '특이사항 제거 ,excel, pdf' (#274) from dev into dev-deploy
Reviewed-on: #274
2025-12-22 11:24:20 +09:00
14125fc2cc Merge pull request '엑셀사이즈변경' (#272) from dev into dev-deploy
Reviewed-on: #272
2025-12-19 13:10:08 +09:00
6f0d043603 Merge pull request '특이사항 제거 ,excel, pdf' (#270) from dev into dev-deploy
Reviewed-on: #270
2025-12-18 14:01:50 +09:00
cd91cc9006 Merge pull request '방위각 절대치 적용' (#268) from dev into dev-deploy
Reviewed-on: #268
2025-12-17 18:44:29 +09:00
901ba11c59 Merge pull request 'custNm 추가' (#266) from dev into dev-deploy
Reviewed-on: #266
2025-12-16 10:58:08 +09:00
92c96eec96 Merge pull request '[1314] houi 절대값으로 변경' (#264) from dev into dev-deploy
Reviewed-on: #264
2025-12-15 16:43:01 +09:00
0f0da4f9be Merge pull request '경사도 기본 수치 추가 inclBase' (#263) from dev into dev-deploy
Reviewed-on: #263
2025-12-15 15:18:15 +09:00
65c7a1bae4 Merge pull request 'pdf 디자인변경 및 크기변경' (#261) from dev into dev-deploy
Reviewed-on: #261
2025-12-15 13:11:54 +09:00
4563be8c2c Merge pull request 'pdf 디자인변경 및 크기변경' (#259) from dev into dev-deploy
Reviewed-on: #259
2025-12-11 15:33:44 +09:00
a1b44cac5c Merge pull request '혼함모듈 계산 수정' (#257) from dev into dev-deploy
Reviewed-on: #257
2025-12-10 11:24:45 +09:00
f612c8dba6 Merge pull request 'dev' (#256) from dev into dev-deploy
Reviewed-on: #256
2025-12-10 09:36:24 +09:00
cd52a44376 Merge pull request 'dev' (#254) from dev into dev-deploy
Reviewed-on: #254
2025-12-02 13:35:35 +09:00
01be6a5a09 Merge pull request '배치허용 추가(plan, esti, bom)' (#252) from dev into dev-deploy
Reviewed-on: #252
2025-11-26 10:28:27 +09:00
ac63eccb77 Merge pull request '[1314][HANASYS DESIGN]Simulation내용의 변경에 대해서' (#250) from dev into dev-deploy
Reviewed-on: #250
2025-11-18 13:29:31 +09:00
e453f9d219 Merge pull request 'monsola20_北面減少率考慮 -db추가' (#248) from dev into dev-deploy
Reviewed-on: #248
2025-11-18 11:30:32 +09:00
9b535c2016 Merge pull request '[1258] api/v1/master/pcsMakerList 에 moduleMatlCds 파라미터 추가' (#246) from dev into dev-deploy
Reviewed-on: #246
2025-10-22 13:09:38 +09:00
4b848bc104 Merge pull request '[1258] api/v1/master/pcsMakerList 에 moduleMatlCds 제거' (#244) from dev into dev-deploy
Reviewed-on: #244
2025-10-22 13:05:14 +09:00
e148b36e5e Merge pull request '[1258] api/v1/master/pcsMakerList 에 moduleMatlCds 추가' (#242) from dev into dev-deploy
Reviewed-on: #242
2025-10-21 11:26:21 +09:00
4a15fc5ef4 Merge pull request '문의게시판 상세 api 수정' (#240) from dev into dev-deploy
Reviewed-on: #240
2025-10-01 11:12:46 +09:00
eb7bf3a5a5 Merge pull request '[1303] Excel의 주의사항이 모두 표시되지 않습니다' (#238) from dev into dev-deploy
Reviewed-on: #238
2025-09-29 11:02:48 +09:00
814e79615f Merge pull request '개발에서 도메인 안됨' (#237) from dev into dev-deploy
Reviewed-on: #237
2025-09-19 11:32:48 +09:00
3cc7050d41 Merge pull request '견적서 출력시 주소, 전화, 팩스 selectEstimatePdfDetail 쿼리변경' (#236) from dev into dev-deploy
Reviewed-on: #236
2025-09-19 11:26:38 +09:00
8c46d865b1 Merge pull request 'specialNoteDispItemAdditionalJob 배치가능' (#234) from dev into dev-deploy
Reviewed-on: #234
2025-09-18 09:29:31 +09:00
897607bf80 Merge pull request 'specialNoteDispItemAdditionalJob 배치가능' (#233) from dev into dev-deploy
Reviewed-on: #233
2025-09-17 14:03:40 +09:00
9f2a4980a3 Merge pull request '[1216] - 모듈시리즈 moduleSerCd 추가' (#231) from dev into dev-deploy
Reviewed-on: #231
2025-09-10 11:19:51 +09:00
cd06784b09 Merge pull request '북면설치가능 상점의 del_flag count => del_flag' (#229) from dev into dev-deploy
Reviewed-on: #229
2025-09-02 15:12:56 +09:00
829ed2e29e Merge pull request 'dev 잡스케쥴 stop' (#227) from dev into dev-deploy
Reviewed-on: #227
2025-09-01 16:19:15 +09:00
b579a4412b Merge pull request 'dev 스토어 잡스케쥴 해제' (#226) from dev into dev-deploy
Reviewed-on: #226
2025-09-01 16:02:07 +09:00
db39044bcd Merge pull request 'dev 스토어 잡스케쥴 해제' (#224) from dev into dev-deploy
Reviewed-on: #224
2025-09-01 15:38:50 +09:00
486d231798 Merge pull request '엑셀 양식 변경 이미지 변경 사이즈 변경' (#222) from dev into dev-deploy
Reviewed-on: #222
2025-08-07 13:25:37 +09:00
32fe1fb7bc Merge pull request 'job scheduler 개발 - 멈춤' (#220) from dev into dev-deploy
Reviewed-on: #220
2025-08-04 18:02:18 +09:00
27166f8b47 Merge pull request '[1226] 새로고침 지붕재 리셋 하제비치' (#218) from dev into dev-deploy
Reviewed-on: #218
2025-08-04 13:58:34 +09:00
045cb3e5d6 Merge pull request '[1122] 견적서 변경' (#216) from dev into dev-deploy
Reviewed-on: #216
2025-08-01 16:07:24 +09:00
31ec55e2f0 Merge pull request '[1219] 견적서 엑셀에 방위각도 추가 - 이미지 경로 변경' (#214) from dev into dev-deploy
Reviewed-on: #214
2025-08-01 13:22:54 +09:00
ebd490bc21 Merge pull request '[1219] excel 수정' (#212) from dev into dev-deploy
Reviewed-on: #212
2025-07-31 13:42:05 +09:00
33831af7c1 Merge pull request '[1219] 견적서 PDF에 방위각도 추가' (#210) from dev into dev-deploy
Reviewed-on: #210
2025-07-31 13:22:11 +09:00
10a7df0755 Merge pull request '[1219] 견적서 엑셀에 방위각도 추가' (#209) from dev into dev-deploy
Reviewed-on: #209
2025-07-31 10:26:10 +09:00
8f321656ad Merge pull request '[1221] 엑셀에 하세비치 추가' (#207) from dev into dev-deploy
Reviewed-on: #207
2025-07-30 15:04:26 +09:00
0eba7150f3 Merge pull request '[1122] 견적서 추가' (#205) from dev into dev-deploy
Reviewed-on: #205
2025-07-29 18:21:50 +09:00
d47950828a Merge pull request '[1122] 견적서 추가' (#203) from dev into dev-deploy
Reviewed-on: #203
2025-07-29 11:11:11 +09:00
8623b29252 Merge pull request 'dev' (#201) from dev into dev-deploy
Reviewed-on: #201
2025-07-28 17:21:06 +09:00
c450de9770 Merge pull request '시뮬레이션 물건명, 경칭 추가' (#199) from dev into dev-deploy
Reviewed-on: #199
2025-07-25 09:40:50 +09:00
20c7c6bb5d Merge pull request 'M_ITEM fixedPrice 삭제' (#197) from dev into dev-deploy
Reviewed-on: #197
2025-07-23 16:12:58 +09:00
9a37eb79b4 Merge pull request '두 인스턴스가 데이터베이스를 통해 실제 job 실행 상태를 정확히 확인가능 변' (#195) from dev into dev-deploy
Reviewed-on: #195
2025-07-23 15:59:48 +09:00
a846322449 Merge pull request 'allYn=Y => allYn=N' (#193) from dev into dev-deploy
Reviewed-on: #193
2025-07-23 13:11:36 +09:00
7e91131a46 Merge pull request '엑셀 템플릿 수정' (#191) from dev into dev-deploy
Reviewed-on: #191
2025-07-21 16:09:28 +09:00
9062ad99d3 Merge pull request '[1195] 엑셀 리포트 모양 변경' (#189) from dev into dev-deploy
Reviewed-on: #189
2025-07-18 15:22:12 +09:00
48875e3348 Merge pull request 'dev' (#187) from dev into dev-deploy
Reviewed-on: #187
2025-07-17 11:28:16 +09:00
86b7129f24 Merge pull request 'dev' (#185) from dev into dev-deploy
Reviewed-on: #185
2025-07-17 08:50:02 +09:00
fbb68bbb5f Merge pull request '배치 멀티 가능 수정' (#183) from dev into dev-deploy
Reviewed-on: #183
2025-07-16 17:47:46 +09:00
ef89cef862 Merge pull request 'materialJob open' (#182) from dev into dev-deploy
Reviewed-on: #182
2025-07-16 08:39:43 +09:00
00e46f204e Merge pull request 'materialJob open' (#179) from dev into dev-deploy
Reviewed-on: #179
2025-07-15 18:39:39 +09:00
15a827d54c Merge pull request '주석제거' (#177) from dev into dev-deploy
Reviewed-on: #177
2025-07-15 17:55:05 +09:00
2fc9a85c7d Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다 - 저장 및 출력부분2' (#175) from dev into dev-deploy
Reviewed-on: #175
2025-07-15 16:17:16 +09:00
30dc11b37a Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다 - 저장 및 출력부분' (#173) from dev into dev-deploy
Reviewed-on: #173
2025-07-15 15:54:36 +09:00
48dff518b3 Merge pull request '운영 job 스케줄 실행' (#171) from dev into dev-deploy
Reviewed-on: #171
2025-07-15 13:46:44 +09:00
8c73455cb1 Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다 - setQcastCustPrdId 추가' (#170) from dev into dev-deploy
Reviewed-on: #170
2025-07-15 13:04:10 +09:00
01a6139b57 Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다 - qcast_cust_prd_id 추가' (#169) from dev into dev-deploy
Reviewed-on: #169
2025-07-15 11:16:06 +09:00
1756d74afc Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다 - qcastCustPrdId 추가' (#167) from dev into dev-deploy
Reviewed-on: #167
2025-07-15 09:42:35 +09:00
2f17256e1b Merge pull request '[1157] DESING 견적 출력 시 중량표가 출력되지 않음 - 합계계산추가, 조건추가' (#165) from dev into dev-deploy
Reviewed-on: #165
2025-07-14 13:27:39 +09:00
0a20f718b3 Merge pull request '[1157] DESING 견적 출력 시 중량표가 출력되지 않음 - 계산추가' (#163) from dev into dev-deploy
Reviewed-on: #163
2025-07-10 17:32:01 +09:00
96f950e46d Merge pull request '[1157] DESING 견적 출력 시 중량표가 출력되지 않음' (#161) from dev into dev-deploy
Reviewed-on: #161
2025-07-09 09:23:56 +09:00
97874c34e6 Merge pull request 'dev' (#159) from dev into dev-deploy
Reviewed-on: #159
2025-07-04 14:13:52 +09:00
c43a7e1f94 Merge pull request 'dev' (#157) from dev into dev-deploy
Reviewed-on: #157
2025-07-04 13:29:20 +09:00
1679859acb Merge pull request 'dev' (#154) from dev into dev-deploy
Reviewed-on: #154
2025-07-04 13:22:58 +09:00
8c4b1cb930 Merge pull request '[1155] Excel에 출력되는 설비 용량(인정 용량)이 다릅니다.' (#152) from dev into dev-deploy
Reviewed-on: #152
2025-07-03 16:14:55 +09:00
d22eaac274 Merge pull request 'dev' (#149) from dev into dev-deploy
Reviewed-on: #149
2025-06-27 18:48:26 +09:00
94fb14e732 Merge pull request 'dev [1131] 발전 시뮬레이션 선택 지역 수정 発電シミュレーションの選択地域の修正 (M_PREFECTURE_AREA => T_SIMULATION_AREA)' (#146) from dev into dev-deploy
Reviewed-on: #146
2025-06-27 10:55:17 +09:00
b4142e112d Merge pull request 'dev' (#143) from dev into dev-deploy
Reviewed-on: #143
2025-06-26 09:27:51 +09:00
7dbc8b367d Merge pull request 'dev [1128]文字修正 - excel, pdf' (#139) from dev into dev-deploy
Reviewed-on: #139
2025-06-25 13:16:01 +09:00
ede94ab769 Merge pull request 'dev [1126]Excelの架台図/割付図・系統図 で屋根の情報が表示されなくなった 엑셀출력 수정2' (#136) from dev into dev-deploy
Reviewed-on: #136
2025-06-24 17:01:50 +09:00
41d448249e Merge pull request 'dev [1126]Excelの架台図/割付図・系統図 で屋根の情報が表示されなくなった 엑셀출력 수정' (#133) from dev into dev-deploy
Reviewed-on: #133
2025-06-24 16:22:10 +09:00
08914f1516 Merge pull request 'dev 운영배치 다 막음 (commonCode 빼고)' (#130) from dev into dev-deploy
Reviewed-on: #130
2025-06-20 16:35:13 +09:00
63cf9a8ee8 Merge pull request 'dev 배치 setItemSyncSave 쿼리변경' (#127) from dev into dev-deploy
Reviewed-on: #127
2025-06-20 16:19:11 +09:00
bd6ecfde80 Merge pull request 'dev 운영 배치 logback 에러설정' (#124) from dev into dev-deploy
Reviewed-on: #124
2025-06-20 16:04:40 +09:00
7b81e5b6a2 Merge pull request '운영 배치 일부만 실행 (bomJob, materialJob, commonCodeJob)' (#121) from dev into dev-deploy
Reviewed-on: #121
2025-06-20 09:26:35 +09:00
249cf65fc6 Merge pull request 'dev' (#118) from dev into dev-deploy
Reviewed-on: #118
2025-06-19 17:08:12 +09:00
6cffd578b5 Merge pull request 'dev' (#115) from dev into dev-deploy
Reviewed-on: #115
2025-06-19 17:05:12 +09:00
99e904bc15 Merge pull request 'dev' (#112) from dev into dev-deploy
Reviewed-on: #112
2025-06-19 16:56:42 +09:00
deebd687d9 Merge pull request 'dev' (#109) from dev into dev-deploy
Reviewed-on: #109
2025-06-19 10:03:13 +09:00
b322e21cb1 Merge pull request 'dev' (#106) from dev into dev-deploy
Reviewed-on: #106
2025-06-18 18:24:38 +09:00
4c568052d7 Merge pull request 'dev' (#103) from dev into dev-deploy
Reviewed-on: #103
2025-06-18 18:20:06 +09:00
f1fd136061 Merge pull request 'dev' (#100) from dev into dev-deploy
Reviewed-on: #100
2025-06-18 14:07:38 +09:00
f29c3034a4 Merge pull request 'dev' (#98) from dev into dev-deploy
Reviewed-on: #98
2025-06-18 13:43:24 +09:00
a6974776e9 Merge pull request 'dev' (#96) from dev into dev-deploy
Reviewed-on: #96
2025-06-17 16:34:47 +09:00
28e318283b Merge pull request 'dev' (#94) from dev into dev-deploy
Reviewed-on: #94
2025-06-17 15:26:13 +09:00
fe266cbfa2 Merge pull request 'dev' (#92) from dev into dev-deploy
Reviewed-on: #92
2025-06-17 14:27:45 +09:00
7ce3cd56d7 Merge pull request 'dev' (#90) from dev into dev-deploy
Reviewed-on: #90
2025-06-17 13:36:00 +09:00
de5728dbeb Merge pull request '배치 2007 설정' (#88) from feature/cha into dev-deploy
Reviewed-on: #88
2025-06-17 10:34:10 +09:00
e10b9b7cd8 Merge pull request 'dev' (#86) from dev into dev-deploy
Reviewed-on: #86
2025-06-13 15:30:03 +09:00
b44adf5bb4 Merge pull request 'dev' (#83) from dev into dev-deploy
Reviewed-on: #83
2025-06-13 13:16:21 +09:00
b422d5b0f3 Merge pull request 'rackRows String으로 변환' (#80) from dev into dev-deploy
Reviewed-on: #80
2025-06-11 15:15:02 +09:00
92047f04fd Merge pull request 'dev' (#78) from dev into dev-deploy
Reviewed-on: #78
2025-06-10 14:47:39 +09:00
a903a71e9c Merge pull request 'dev' (#76) from dev into dev-deploy
Reviewed-on: #76
2025-06-09 15:44:50 +09:00
fc7842aca1 Merge pull request 'dev' (#72) from dev into dev-deploy
Reviewed-on: #72
2025-06-05 11:36:57 +09:00
24 changed files with 235 additions and 68 deletions

View File

@ -4,6 +4,7 @@ import com.interplug.qcast.biz.estimate.EstimateService;
import com.interplug.qcast.biz.estimate.dto.EstimateSyncResponse;
import com.interplug.qcast.biz.estimate.dto.PlanSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.batch.core.Job;
@ -77,7 +78,8 @@ public class EstimateSyncConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<PlanSyncResponse> estimateSyncWriter() {
return items -> {
estimateService.setEstimateSyncSave((List<PlanSyncResponse>) items.getItems());
List<PlanSyncResponse> planList = new ArrayList<>(items.getItems());
estimateService.setEstimateSyncSave(planList);
};
}
}

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.interplug.qcast.biz.estimate.EstimateService;
import com.interplug.qcast.biz.estimate.dto.PlanSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.batch.core.Job;
@ -74,7 +75,7 @@ public class PlanConfrimConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<PlanSyncResponse> planConfirmWriter() {
return items -> {
estimateService.setPlanConfirmSyncSave((List<PlanSyncResponse>) items.getItems());
estimateService.setPlanConfirmSyncSave(new ArrayList<>(items.getItems()));
};
}
}

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.interplug.qcast.biz.displayItem.DisplayItemService;
import com.interplug.qcast.biz.displayItem.dto.BomSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.batch.core.Job;
@ -74,7 +75,7 @@ public class BomConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<BomSyncResponse> bomWriter() {
return items -> {
displayItemService.setBomSyncSave((List<BomSyncResponse>) items.getItems());
displayItemService.setBomSyncSave(new ArrayList<>(items.getItems()));
};
}
}

View File

@ -103,7 +103,7 @@ public class MaterialConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<ItemSyncResponse> materialWriter() {
return items -> {
displayItemService.setItemSyncSave((List<ItemSyncResponse>) items.getItems());
displayItemService.setItemSyncSave(new ArrayList<>(items.getItems()));
};
}
}

View File

@ -4,6 +4,7 @@ import com.interplug.qcast.biz.displayItem.DisplayItemService;
import com.interplug.qcast.biz.displayItem.dto.PriceItemSyncResponse;
import com.interplug.qcast.biz.displayItem.dto.PriceSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@ -141,7 +142,7 @@ public class PriceJobConfiguration implements JobExecutionListener {
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
return items -> {
try {
List<T> itemList = (List<T>) items.getItems();
List<T> itemList = new ArrayList<>(items.getItems());
processor.accept(itemList);
log.info("{}Writer: {} items 처리 완료", writerName, items.size());
} catch (Exception e) {

View File

@ -5,6 +5,7 @@ import com.interplug.qcast.biz.specialNote.dto.SpecialNoteItemRequest;
import com.interplug.qcast.biz.specialNote.dto.SpecialNoteRequest;
import com.interplug.qcast.biz.specialNote.dto.SpecialNoteSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@ -157,7 +158,7 @@ public class SpecialNoteDispItemJobConfiguration implements JobExecutionListener
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
return items -> {
try {
List<T> itemList = (List<T>) items.getItems();
List<T> itemList = new ArrayList<>(items.getItems());
processor.accept(itemList);
log.info("{}Writer: {} items 처리 완료", writerName, items.size());
} catch (Exception e) {

View File

@ -10,6 +10,7 @@ import com.interplug.qcast.biz.user.dto.StoreSyncResponse;
import com.interplug.qcast.biz.user.dto.StoreSyncResquest;
import com.interplug.qcast.biz.user.dto.UserRequest;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@ -212,7 +213,7 @@ public class StoreJobConfiguration implements JobExecutionListener {
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
return items -> {
try {
List<T> itemList = (List<T>) items.getItems();
List<T> itemList = new ArrayList<>(items.getItems());
processor.accept(itemList);
log.info("{}Writer: {} items 처리 완료", writerName, items.size());
} catch (Exception e) {

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.interplug.qcast.biz.user.UserService;
import com.interplug.qcast.biz.user.dto.AdminUserSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.batch.core.Job;
@ -82,7 +83,7 @@ public class AdminUserConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<AdminUserSyncResponse> adminUserWriter() {
return items -> {
userService.setAdminUserSyncSave((List<AdminUserSyncResponse>) items.getItems());
userService.setAdminUserSyncSave(new ArrayList<>(items.getItems()));
};
}
}

View File

@ -4,6 +4,7 @@ import com.fasterxml.jackson.core.type.TypeReference;
import com.interplug.qcast.biz.user.UserService;
import com.interplug.qcast.biz.user.dto.BusinessChargerSyncResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import org.springframework.batch.core.Job;
@ -78,7 +79,7 @@ public class BusinessChargerConfiguration implements JobExecutionListener {
@Bean
public ItemWriter<BusinessChargerSyncResponse> businessChargerWriter() {
return items -> {
userService.setBusinessChargerSyncSave((List<BusinessChargerSyncResponse>) items.getItems());
userService.setBusinessChargerSyncSave(new ArrayList<>(items.getItems()));
};
}
}

View File

@ -1,5 +1,6 @@
package com.interplug.qcast.batch.system;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.function.Consumer;
@ -126,7 +127,7 @@ public class CommonCodeConfiguration implements JobExecutionListener {
private <T> ItemWriter<T> createWriter(Consumer<List<T>> processor, String writerName) {
return items -> {
try {
List<T> itemList = (List<T>) items.getItems();
List<T> itemList = new ArrayList<>(items.getItems());
processor.accept(itemList);
log.info("{}Writer: {} items 처리 완료", writerName, items.size());
} catch (Exception e) {

View File

@ -19,8 +19,8 @@ import java.util.stream.Collectors;
import com.interplug.qcast.biz.canvaspopupstatus.CanvasPopupStatusService;
import com.interplug.qcast.biz.canvaspopupstatus.dto.CanvasPopupStatus;
import com.interplug.qcast.biz.estimate.dto.*;
import com.interplug.qcast.biz.pwrGnrSimulation.dto.PwrGnrSimRoofResponse;
import org.apache.commons.lang3.StringEscapeUtils;
import org.apache.commons.lang3.StringUtils;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellStyle;
@ -32,7 +32,6 @@ import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.jsoup.nodes.Document;
import org.jsoup.nodes.Element;
import org.jxls.util.Util;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
@ -326,6 +325,16 @@ public class EstimateService {
List<ItemRequest> itemList = estimateRequest.getItemList();
if (itemList == null || itemList.isEmpty()) {
try {
Map<String, String> errReq = new HashMap<>();
errReq.put("objectNo", estimateRequest.getObjectNo());
errReq.put("planNo", estimateRequest.getPlanNo());
errReq.put("rejectRsn", "itemList is empty");
errReq.put("regId", estimateRequest.getUserId());
interfaceQsp.callApi(HttpMethod.POST, QSP_API_URL + "/api/master/quotationErrSave", errReq);
} catch (Exception e) {
log.warn("quotationErrSave failed: {}", e.getMessage());
}
throw new QcastException(ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "itemList"));
}
@ -1403,9 +1412,9 @@ public class EstimateService {
String classTypeName = "";
if ("0".equals(roofVol.getClassType())) {
classTypeName = roofVol.getSlope() + "";
classTypeName = new BigDecimal(StringUtils.defaultString(roofVol.getSlope(), "0")).stripTrailingZeros().toPlainString() + "";
} else {
classTypeName = roofVol.getAngle() + "º";
classTypeName = new BigDecimal(StringUtils.defaultString(roofVol.getAngle(), "0")).stripTrailingZeros().toPlainString() + "º";
}
roofVol.setClassTypeName(classTypeName);
@ -1415,6 +1424,15 @@ public class EstimateService {
roofInfoResponse.setModuleTotAmount(String.valueOf(moduleTotAmount));
roofInfoResponse.setModuleTotVolKw(String.valueOf(moduleTotVolKw));
for (RoofResponse roof : roofList) {
String roofClassTypeName = "";
if ("0".equals(roof.getClassType())) {
roofClassTypeName = new BigDecimal(StringUtils.defaultString(roof.getSlope(), "0")).stripTrailingZeros().toPlainString() + "";
} else {
roofClassTypeName = new BigDecimal(StringUtils.defaultString(roof.getAngle(), "0")).stripTrailingZeros().toPlainString() + "º";
}
roof.setClassTypeName(roofClassTypeName);
}
roofInfoResponse.setRoofList(roofList);
roofInfoResponse.setCircuitItemList(circuitItemList);
roofInfoResponse.setRoofVolList(roofVolList);
@ -1445,7 +1463,7 @@ public class EstimateService {
InputStream imageInputStream = getClass().getResourceAsStream(imagePath);
if (imageInputStream != null) {
byte[] degImg = Util.toByteArray(imageInputStream);
byte[] degImg = imageInputStream.readAllBytes();
roofInfoResponse.setCompasDegImg(degImg);
imageInputStream.close();
} else {
@ -1988,7 +2006,7 @@ public class EstimateService {
if ("YJSS".equals(estimateType)) {
pkgTotPrice = pkgAsp.multiply(totVol);
pkgTotPrice = pkgTotPrice.setScale(0, BigDecimal.ROUND_HALF_UP);
pkgTotPrice = pkgTotPrice.setScale(0, RoundingMode.HALF_UP);
supplyPrice = supplyPrice.add(pkgTotPrice);
}
@ -1998,14 +2016,14 @@ public class EstimateService {
totPrice = totPrice.add(supplyPrice.add(vatPrice));
estimateResponse.setPkgTotPrice(String.valueOf(pkgTotPrice));
estimateResponse.setTotAmount(String.valueOf(totAmount.setScale(0, BigDecimal.ROUND_HALF_UP)));
estimateResponse.setTotAmount(String.valueOf(totAmount.setScale(0, RoundingMode.HALF_UP)));
estimateResponse.setTotVol(String.valueOf(totVol));
estimateResponse.setTotVolKw(String
.valueOf(totVol.multiply(new BigDecimal("0.001")).setScale(3, BigDecimal.ROUND_FLOOR)));
.valueOf(totVol.multiply(new BigDecimal("0.001")).setScale(3, RoundingMode.FLOOR)));
estimateResponse
.setSupplyPrice(String.valueOf(supplyPrice.setScale(0, BigDecimal.ROUND_HALF_UP)));
estimateResponse.setVatPrice(String.valueOf(vatPrice.setScale(0, BigDecimal.ROUND_HALF_UP)));
estimateResponse.setTotPrice(String.valueOf(totPrice.setScale(0, BigDecimal.ROUND_HALF_UP)));
.setSupplyPrice(String.valueOf(supplyPrice.setScale(0, RoundingMode.HALF_UP)));
estimateResponse.setVatPrice(String.valueOf(vatPrice.setScale(0, RoundingMode.HALF_UP)));
estimateResponse.setTotPrice(String.valueOf(totPrice.setScale(0, RoundingMode.HALF_UP)));
}
private static final Set<String> EXCEL_ITEM_NUMBER_FIELDS = new HashSet<>(
@ -2315,9 +2333,11 @@ public class EstimateService {
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
response = om.readValue(strResponse, EstimateApiResponse.class);
@SuppressWarnings("unchecked")
Map<String, Object> result = (Map<String, Object>) response.getData();
if (result != null) {
@SuppressWarnings("unchecked")
List<Map<String, Object>> succList =
(List<Map<String, Object>>) result.get("successList");
for (Map<String, Object> succ : succList) {
@ -2586,7 +2606,7 @@ public class EstimateService {
sb.append("<td>" + StringUtils.defaultString(roofResponse.getRoofSurface()) + "</td>");
sb.append("<td style='text-align:left;'>"
+ StringUtils.defaultString(roofResponse.getRoofMaterialName()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSlope()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getClassTypeName()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getConstructSpecificationName())
+ "</td>");
sb.append("<td style='text-align:left;'>"
@ -2666,7 +2686,7 @@ public class EstimateService {
sb.append("<td>" + StringUtils.defaultString(roofResponse.getRoofSurface()) + "</td>");
sb.append("<td style='text-align:left;'>"
+ StringUtils.defaultString(roofResponse.getRoofMaterialName()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getSlope()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getClassTypeName()) + "</td>");
sb.append("<td>" + StringUtils.defaultString(roofResponse.getConstructSpecificationName())
+ "</td>");
sb.append("<td style='text-align:left;'>"
@ -2992,7 +3012,7 @@ public class EstimateService {
}
}
try (InputStream imageInputStream = connection.getInputStream()) {
return Util.toByteArray(imageInputStream);
return imageInputStream.readAllBytes();
}
} catch (Exception e) {
log.warn("Failed to load drawing image. url={}", url, e);

View File

@ -59,6 +59,34 @@ public class LoginController {
return loginService.getLogin(loginUser);
}
/**
* Q.CAST III에 자동 로그인하여 사용자 정보를 획득한다.
*
* @param loginUser LoginUser
* @return UserLoginResponse
* @throws Exception
*/
@Operation(description = "Q.CAST III에 자동 로그인하여 사용자 정보를 획득한다.")
@PostMapping("/v1.0/autoLogin")
@ResponseStatus(HttpStatus.CREATED)
public UserLoginResponse autoLogin(@RequestBody LoginUser loginUser) throws Exception {
return loginService.getAutoLogin(loginUser);
}
/**
* Q.CAST III에서 로그아웃한다.
*
* @param loginUser LoginUser
* @return DefaultResponse
* @throws Exception
*/
@Operation(description = "Q.CAST III에서 로그아웃한다.")
@PostMapping("/v1.0/logout")
@ResponseStatus(HttpStatus.CREATED)
public DefaultResponse logout(@RequestBody LoginUser loginUser) throws Exception {
return loginService.getLogout(loginUser);
}
@PostMapping("/v1.0/user")
@ResponseStatus(HttpStatus.CREATED)
public UserResponse getUser(@RequestBody LoginUser loginUser) {

View File

@ -1,24 +1,24 @@
package com.interplug.qcast.biz.login;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.interplug.qcast.biz.login.dto.JoinUser;
import com.interplug.qcast.biz.login.dto.LoginUser;
import com.interplug.qcast.biz.login.dto.UserLoginResponse;
import com.interplug.qcast.biz.login.dto.UserPassword;
import com.interplug.qcast.biz.login.dto.UserResponse;
import com.interplug.qcast.config.Exception.ErrorCode;
import com.interplug.qcast.config.Exception.QcastException;
import com.interplug.qcast.config.message.Messages;
import com.interplug.qcast.util.DefaultResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpMethod;
import org.springframework.stereotype.Service;
import com.fasterxml.jackson.databind.DeserializationFeature;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.interplug.qcast.biz.login.dto.JoinUser;
import com.interplug.qcast.biz.login.dto.LoginUser;
import com.interplug.qcast.biz.login.dto.UserLoginResponse;
import com.interplug.qcast.biz.login.dto.UserPassword;
import com.interplug.qcast.biz.login.dto.UserResponse;
import com.interplug.qcast.config.Exception.ErrorCode;
import com.interplug.qcast.config.Exception.QcastException;
import com.interplug.qcast.config.message.Messages;
import com.interplug.qcast.util.DefaultResponse;
import com.interplug.qcast.util.InterfaceQsp;
import java.util.UUID;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@Service
@ -50,6 +50,31 @@ public class LoginService {
throw new QcastException(ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Password"));
return callLoginApi(loginUser, "LOGIN");
}
/**
* 자동 로그인 처리
*
* @param loginUser LoginUser
* @return UserLoginResponse
* @throws Exception
*/
public UserLoginResponse getAutoLogin(LoginUser loginUser) throws Exception {
if (loginUser.getLoginId() == null || "".equals(loginUser.getLoginId()))
throw new QcastException(ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Login Id"));
return callLoginApi(loginUser, "AUTO_LOGIN");
}
private UserLoginResponse callLoginApi(LoginUser loginUser, String actLog) throws Exception {
loginUser.setAccsSiteCd("DESIGN");
loginUser.setActLog(actLog);
String sessionId = UUID.randomUUID().toString();
loginUser.setRequestId(sessionId);
UserLoginResponse userLoginResponse = null;
// QSP API Call..
@ -58,20 +83,51 @@ public class LoginService {
// /api/user/login
String strResponse =
interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/login", loginUser);
if (!"".equals(strResponse)) {
ObjectMapper om =
new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
userLoginResponse = om.readValue(strResponse, UserLoginResponse.class);
}
if (userLoginResponse != null
&& userLoginResponse.getResult() != null
&& "S".equalsIgnoreCase(userLoginResponse.getResult().getResultCode())) {
userLoginResponse.setSessionId(UUID.randomUUID().toString());
}
return userLoginResponse;
}
if (!"".equals(strResponse)) {
ObjectMapper om =
new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
userLoginResponse = om.readValue(strResponse, UserLoginResponse.class);
}
if (userLoginResponse != null
&& userLoginResponse.getResult() != null
&& "S".equalsIgnoreCase(userLoginResponse.getResult().getResultCode())) {
userLoginResponse.setSessionId(sessionId);
}
return userLoginResponse;
}
/**
* 로그아웃 처리
*
* @param loginUser LoginUser
* @return DefaultResponse
* @throws Exception
*/
public DefaultResponse getLogout(LoginUser loginUser) throws Exception {
if (loginUser.getLoginId() == null || "".equals(loginUser.getLoginId()))
throw new QcastException(ErrorCode.INVALID_INPUT_VALUE,
message.getMessage("common.message.required.data", "Login Id"));
loginUser.setAccsSiteCd("DESIGN");
loginUser.setActLog("LOGOUT");
// QSP API Call..
// Q.CAST 로그아웃
// post
// /api/user/logout
DefaultResponse defaultResponse = null;
String strResponse =
interfaceQsp.callApi(HttpMethod.POST, qspUrl + "/api/user/logout", loginUser);
if (!"".equals(strResponse)) {
ObjectMapper om =
new ObjectMapper().configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
defaultResponse = om.readValue(strResponse, DefaultResponse.class);
}
return defaultResponse;
}
public UserResponse getUser(LoginUser loginUser) {
return loginMapper.getUser(loginUser);

View File

@ -6,4 +6,7 @@ import lombok.Data;
public class LoginUser {
private String loginId; // Login Id
private String pwd; // Password
private String accsSiteCd; // Access Site Code (QSP, QORDER, QMUSUBI_DESIGN, QREAD, QWARRANTY, QPARTNERS)
private String actLog; // Action Log (LOGIN, AUTO_LOGIN, LOGOUT)
private String requestId; // Request ID <= Unique ID
}

View File

@ -28,4 +28,6 @@ public class UserResponse {
private String custNm;
//시공사 번호
private String builderNo;
private String builderNm; // Builder Name
private String builderId; // Builder Id
}

View File

@ -63,6 +63,13 @@ public class ObjectController {
return objectService.selectSaleStoreList(saleStoreId, firstFlg, userId);
}
@Operation(description = "1차점 ID 및 판매점명을 조회한다. (saleStoreLevel=2 인 경우)")
@GetMapping("/saleStore/{saleStoreId}/firstAgent")
@ResponseStatus(HttpStatus.OK)
public SaleStoreResponse selectFirstAgentInfo(@PathVariable String saleStoreId) throws Exception {
return objectService.selectFirstAgentInfo(saleStoreId);
}
@Operation(description = "물건정보 목록을 조회한다.")
@GetMapping("/list")
@ResponseStatus(HttpStatus.OK)

View File

@ -25,6 +25,9 @@ public interface ObjectMapper {
// 판매점 정보 조회
public SaleStoreResponse selectSaleStoreInfo(String saleStoreId);
// 1차점 ID/ 조회 (saleStoreLevel = '2' 경우)
public SaleStoreResponse selectFirstAgentInfo(String saleStoreId);
// 물건정보 메인 목록 조회
public List<ObjectResponse> selectObjectMainList(ObjectRequest objectRequest);

View File

@ -166,6 +166,14 @@ public class ObjectService {
return objectMapper.selectSaleStoreInfo(saleStoreId);
}
public SaleStoreResponse selectFirstAgentInfo(String saleStoreId) throws Exception {
SaleStoreResponse result = objectMapper.selectFirstAgentInfo(saleStoreId);
if (result == null) {
throw new QcastException(ErrorCode.NOT_FOUND, message.getMessage("common.message.no.data"));
}
return result;
}
/**
* 물건정보 메인 목록 조회
*
@ -341,8 +349,11 @@ public class ObjectService {
// 물건정보 등록
objectRequest.setAddress(
((!StringUtils.isEmpty(objectRequest.getAddress())) ? objectRequest.getAddress() : ""));
objectRequest.setAddresseeCompanyName(
objectRequest.getObjectName() + ' ' + objectRequest.getObjectNameOmit());
String addresseeCompanyName = objectRequest.getObjectName() + ' ' + objectRequest.getObjectNameOmit();
if (addresseeCompanyName.length() > 50) {
addresseeCompanyName = addresseeCompanyName.substring(0, 50);
}
objectRequest.setAddresseeCompanyName(addresseeCompanyName);
objectRequest.setAddresseeCompanyNameOmit(objectRequest.getObjectNameOmit());
objectRequest.setContentsPath(baseDirPath + "\\\\" + objectRequest.getObjectNo());
result += objectMapper.insertObject(objectRequest);
@ -378,6 +389,7 @@ public class ObjectService {
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
response = om.readValue(strResponse, PlanReqResponse.class);
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) response.getResult();
if ("E".equals(String.valueOf(map.get("resultCode")))) {
throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR,
@ -432,8 +444,11 @@ public class ObjectService {
// 물건정보 수정
objectRequest.setAddress(
((!StringUtils.isEmpty(objectRequest.getAddress())) ? objectRequest.getAddress() : ""));
objectRequest.setAddresseeCompanyName(
objectRequest.getObjectName() + ' ' + objectRequest.getObjectNameOmit());
String addresseeCompanyName2 = objectRequest.getObjectName() + ' ' + objectRequest.getObjectNameOmit();
if (addresseeCompanyName2.length() > 50) {
addresseeCompanyName2 = addresseeCompanyName2.substring(0, 50);
}
objectRequest.setAddresseeCompanyName(addresseeCompanyName2);
objectRequest.setAddresseeCompanyNameOmit(objectRequest.getObjectNameOmit());
objectRequest.setContentsPath(baseDirPath + "\\\\"
+ (tempChgFlg ? objectRequest.getNewObjectNo() : objectRequest.getObjectNo()));
@ -464,7 +479,8 @@ public class ObjectService {
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
response = om.readValue(strResponse, PlanReqResponse.class);
Map<String, Object> map = (Map<String, Object>) response.getResult();
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) response.getResult();
if ("E".equals(String.valueOf(map.get("resultCode")))) {
throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR,
String.valueOf(map.get("resultMsg")));
@ -545,7 +561,8 @@ public class ObjectService {
.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
response = om.readValue(strResponse, PlanReqResponse.class);
Map<String, Object> map = (Map<String, Object>) response.getResult();
@SuppressWarnings("unchecked")
Map<String, Object> map = (Map<String, Object>) response.getResult();
if ("E".equals(String.valueOf(map.get("resultCode")))) {
throw new QcastException(ErrorCode.INTERNAL_SERVER_ERROR,
String.valueOf(map.get("resultMsg")));

View File

@ -24,6 +24,9 @@ public class SaleStoreResponse {
@Schema(description = "1차점판매점ID")
private String firstAgentId;
@Schema(description = "1차점판매점명")
private String firstAgentName;
@Schema(description = "영업사원명")
private String businessCharger;

View File

@ -3,7 +3,7 @@ package com.interplug.qcast.config.json;
import com.fasterxml.jackson.core.SerializableString;
import com.fasterxml.jackson.core.io.CharacterEscapes;
import com.fasterxml.jackson.core.io.SerializedString;
import org.apache.commons.lang3.StringEscapeUtils;
import org.springframework.web.util.HtmlUtils;
/**
* <pre>
@ -50,7 +50,7 @@ public class HtmlCharacterEscapes extends CharacterEscapes {
sb.append(String.format("%04x", ch));
serializedString = new SerializedString(sb.toString());
} else {
serializedString = new SerializedString(StringEscapeUtils.escapeHtml4(Character.toString(charAt)));
serializedString = new SerializedString(HtmlUtils.htmlEscape(Character.toString(charAt)));
}
return serializedString;

View File

@ -53,6 +53,7 @@ public class InterfaceQsp {
// GET 요청 requestObject를 쿼리 스트링으로 변환
if (HttpMethod.GET.equals(httpMethod) && requestObject != null) {
ObjectMapper om = new ObjectMapper();
@SuppressWarnings("unchecked")
Map<String, Object> params = om.convertValue(requestObject, Map.class); // Object -> Map 변환
String queryString =
params.entrySet().stream()
@ -159,11 +160,17 @@ public class InterfaceQsp {
}
}
if (responseObject == null) {
return (T) dataJson;
@SuppressWarnings("unchecked")
T result = (T) dataJson;
return result;
} else if (responseObject instanceof Class<?>) {
return om.readValue(dataJson, (Class<T>) responseObject);
@SuppressWarnings("unchecked")
Class<T> responseClass = (Class<T>) responseObject;
return om.readValue(dataJson, responseClass);
} else if (responseObject instanceof TypeReference<?>) {
return om.readValue(dataJson, (TypeReference<T>) responseObject);
@SuppressWarnings("unchecked")
TypeReference<T> responseType = (TypeReference<T>) responseObject;
return om.readValue(dataJson, responseType);
} else {
throw new IllegalArgumentException("Unsupported responseType");
}

View File

@ -140,6 +140,17 @@
WHERE A.SALE_STORE_ID = #{saleStoreId}
</select>
<select id="selectFirstAgentInfo" parameterType="String" resultType="com.interplug.qcast.biz.object.dto.SaleStoreResponse">
/* sqlid : com.interplug.qcast.biz.object.selectFirstAgentInfo */
SELECT
A.FIRST_AGENT_ID
, (SELECT SALE_STORE_NAME FROM M_SALES_STORE WITH(NOLOCK) WHERE SALE_STORE_ID = A.FIRST_AGENT_ID AND APPROVE_FLG = '2' AND DEL_FLG = '0') AS FIRST_AGENT_NAME
FROM M_SALES_STORE A WITH(NOLOCK)
WHERE A.SALE_STORE_ID = #{saleStoreId}
AND A.SALE_STORE_LEVEL = '2'
AND A.DEL_FLG = '0'
</select>
<select id="selectObjectMainList" parameterType="com.interplug.qcast.biz.object.dto.ObjectRequest" resultType="com.interplug.qcast.biz.object.dto.ObjectResponse">
/* sqlid : com.interplug.qcast.biz.object.selectObjectMainList */