diff --git a/frontend/src/modules/custMgt/components/commonModal.vue b/frontend/src/modules/custMgt/components/commonModal.vue index 319575e..9f84813 100644 --- a/frontend/src/modules/custMgt/components/commonModal.vue +++ b/frontend/src/modules/custMgt/components/commonModal.vue @@ -16,7 +16,8 @@

{{ msg4 }}

@@ -96,6 +97,7 @@ export default { msg2: '', msg3: '', msg4: '', + serviceId: '', targetFocus: '', } }, @@ -106,6 +108,7 @@ export default { this.msg2 = props.msg2; this.msg3 = props.msg3; this.msg4 = props.msg4; + this.serviceId = props.serviceId; var dimmed = document.getElementsByClassName('alertModal'); for (var i = 0; i < dimmed.length; i++) { dimmed[i].style.display = 'block'; @@ -119,6 +122,13 @@ export default { } this.$parent.checkFocus(); }, + alertModalClose2(){ + var dimmed = document.getElementsByClassName('alertModal'); + for (var i = 0; i < dimmed.length; i++) { + dimmed[i].style.display = 'none'; + } + this.$parent.subsDetail(this.serviceId); + }, alertModalCancel() { var dimmed = document.getElementsByClassName('alertModal'); for (var i = 0; i < dimmed.length; i++) { diff --git a/frontend/src/modules/custMgt/service/custMgtApi.js b/frontend/src/modules/custMgt/service/custMgtApi.js index 1c77a83..e3c20d4 100644 --- a/frontend/src/modules/custMgt/service/custMgtApi.js +++ b/frontend/src/modules/custMgt/service/custMgtApi.js @@ -117,6 +117,10 @@ const userList = (params) => { return httpClient.post('/api/v1/bo/custMgt/userList', params); } +// 유저 ID 조회 +const cancleSubsSttus = (params) => { + return httpClient.post('/api/v1/bo/custMgt/cancleSubsSttus', params); +} const getExcelHeader = category => { // 엑셀에 출력할 Header 정보를 Mockup 데이터로 관리한다. @@ -165,4 +169,5 @@ export default { chrgDetail, deleteChrg, userList, + cancleSubsSttus, } diff --git a/frontend/src/modules/custMgt/views/SubsDetail.vue b/frontend/src/modules/custMgt/views/SubsDetail.vue index 736f84b..b34779f 100644 --- a/frontend/src/modules/custMgt/views/SubsDetail.vue +++ b/frontend/src/modules/custMgt/views/SubsDetail.vue @@ -80,7 +80,10 @@ 상태 - +
+ + +
@@ -214,6 +217,7 @@ export default { subsDt: '', stat: '', plan: '', + prodCd: '', subsNo: '', adminId: '', adminNm: '', @@ -229,6 +233,8 @@ export default { saveConfirm: false, props: {}, bindDcYn: '', + subsSttusCd: '', + subsId : '', }; }, props: { @@ -285,7 +291,6 @@ export default { this.row.endDt = ''; this.row.page = 1; this.row.serviceId = this.$route.params.serviceId; - console.log(this.row); this.$router.push({ name: 'subsList', params: this.row }); }, async subsDetail(serviceId) { @@ -306,8 +311,11 @@ export default { this.cprRegNo = result.data.cprRegNo; this.birth = result.data.birth; this.subsDt = result.data.subsDt; + this.subsSttusCd = result.data.subsSttusCd; + this.subsId = result.data.subsId; this.stat = result.data.stat; this.plan = result.data.plan; + this.prodCd = result.data.prodCd; this.subsNo = result.data.subsNo; this.adminId = result.data.adminId; this.adminNm = result.data.adminNm; @@ -414,6 +422,33 @@ export default { return String.fromCharCode(s.match(/\d+/gm)[0]); }); }, + + async cancleSubsStatus(){ + let param = { + userId : this.serviceId, + subsId : this.subsId, + adminId : this.adminId, + prodCd : this.prodCd, + } + try { + const response = await custMgtApi.cancleSubsSttus(param); + const result = response.data; + if (result != null && result.retCode == '0000') { + this.row.title = '청약상태취소'; + this.row.msg1 = '청약상태를 취소 하였습니다.'; + this.serviceId = this.serviceId; + this.$refs.commmonModal.alertModalOpen(this.row); + } else { + this.row.title = '청약상태취소'; + this.row.msg1 = '청약 상태 취소에 실패 하였습니다.'; + this.$refs.commmonModal.alertModalOpen(this.row); + } + } catch (error) { + this.row.title = '청약상태취소'; + this.row.msg1 = '청약 상태 취소에 실패 하였습니다.'; + this.$refs.commmonModal.alertModalOpen(this.row); + } + } }, }; diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java index 5e2be9b..5d02a6c 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtController.java @@ -27,6 +27,8 @@ import kr.co.uplus.ez.api.custMgt.dto.AdminInfoReqDto; import kr.co.uplus.ez.api.custMgt.dto.AdminInfoResDto; import kr.co.uplus.ez.api.custMgt.dto.AllMemoListReqDto; import kr.co.uplus.ez.api.custMgt.dto.AllMemoListResDto; +import kr.co.uplus.ez.api.custMgt.dto.CancleSubsSttusReqDto; +import kr.co.uplus.ez.api.custMgt.dto.CancleSubsSttusResDto; import kr.co.uplus.ez.api.custMgt.dto.CarryOverListReqDto; import kr.co.uplus.ez.api.custMgt.dto.CarryOverListResDto; import kr.co.uplus.ez.api.custMgt.dto.ChrgDetailReqDto; @@ -696,4 +698,20 @@ public class CustMgtController { return custService.userLmtListExcel(userLmtListExcelReqDto); } */ + + @ApiOperation(value="cancleSubsSttus", notes = "청약 취소") + @ApiResponses({ + @ApiResponse(code = HttpServletResponse.SC_OK, message = "SUCESS") + }) + @RequestMapping(value = "/cancleSubsSttus" , method = {RequestMethod.POST}) + @ResponseBody + public CancleSubsSttusResDto cancleSubsSttus(@RequestBody @Valid CancleSubsSttusReqDto cancleSubsSttusReqDto, BindingResult bindingResult) throws Exception { + + + if(validComponents.validParameter(bindingResult)) { + return new CancleSubsSttusResDto(ApiResponseCode.CM_PARAMETER_ERROR); + } + + return custService.CancleSubsSttus(cancleSubsSttusReqDto); + } } diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java index 581be8d..57c4503 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtMapper.java @@ -145,4 +145,14 @@ public interface CustMgtMapper { // List selectBLNCLists(UserLmtListReqDto userLmtListReqDto); // /** 요금제 구매 내역 정보 엑셀 목록 조회.*/ // List selectBLNCListsExcel(UserLmtListExcelReqDto userLmtListExcelReqDto); + + // 임시개통, 비즈마켓 개통 상태 취소 시 상태변경 + /** 사용자 상태 변경 */ + void cancleUserSttusCd(CancleSubsSttusReqDto params); + /** 고객 청약 상태 변경 */ + void cancleSubsSttusCd(CancleSubsSttusReqDto params); + /** 청약상태 히스토리 업데이트 */ + void updateCancleSbscstHst(CancleSubsSttus params); + /** 청약상태 히스토리 업데이트 */ + void cancleSbscstHst(CancleSubsSttus params); } diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java index cd17faf..4abc69b 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/CustMgtService.java @@ -1527,5 +1527,47 @@ public class CustMgtService { return new UserLmtListExcelResDto(ApiResponseCode.SUCCESS,userLmtListRes); } */ + @Transactional(value="db1TransactionManager") + public CancleSubsSttusResDto CancleSubsSttus(CancleSubsSttusReqDto cancleSubsSttusReqDto) throws Exception { + + CustMgtMapper custMgtMapper = sqlSessionMaster.getMapper(CustMgtMapper.class); + logger.info("subsSttusCancle. subsId = {}, userId = {}",cancleSubsSttusReqDto.getSubsId(), cancleSubsSttusReqDto.getUserId()); + + //어드민 계정 가져오기 + Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); + UserDetails userDetails = (UserDetails) principal; + String regId = userDetails.getUsername(); + + + try { + CancleSubsSttus selectEfctStDt = new CancleSubsSttus(); + + selectEfctStDt.setSubsId(cancleSubsSttusReqDto.getSubsId()); + selectEfctStDt.setChgId(regId); + //1. 기존 이력 만료시키기 + custMgtMapper.updateCancleSbscstHst(selectEfctStDt); + + selectEfctStDt.setEfctFnsDt("99991231"); + selectEfctStDt.setProdCd(cancleSubsSttusReqDto.getProdCd()); + selectEfctStDt.setRegId(regId); + selectEfctStDt.setUserSttusCd("98"); + + //2. 취소 이력 정보 인서트 + custMgtMapper.cancleSbscstHst(selectEfctStDt); + + //3. 사용자 상태 변경 + custMgtMapper.cancleUserSttusCd(cancleSubsSttusReqDto); + + //4. 고객 청약상태 변경 + custMgtMapper.cancleSubsSttusCd(cancleSubsSttusReqDto); + + } catch (Exception e) { + // TODO: handle exception + + logger.error("CustMgtService.CancleSubsSttus - cancle SubsStatus Error : {}", e.getMessage(), e); + } + + return new CancleSubsSttusResDto(ApiResponseCode.SUCCESS); + } } diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttus.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttus.java new file mode 100644 index 0000000..92b9eff --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttus.java @@ -0,0 +1,41 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import io.swagger.annotations.ApiModelProperty; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CancleSubsSttus implements Serializable{ + + @ApiModelProperty(example = "청약상태코드", name = "청약상태코드", dataType = "String") + private String userSttusCd; + + @ApiModelProperty(example = "유저 시퀀스", name = "유저 시퀀스", dataType = "String") + private String userSeq; + + @ApiModelProperty(example = "청약 ID", name = "청약 ID", dataType = "String") + private String subsId; + + @ApiModelProperty(example = "청약 상태 시작일", name = "청약 상태 시작일", dataType = "String") + private String efctStDt; + + @ApiModelProperty(example = "청약 상태 종료일", name = "청약 상태 종료일", dataType = "String") + private String efctFnsDt; + + @ApiModelProperty(example = "요금제코드", name = "요금제코드", dataType = "String") + private String prodCd; + + @ApiModelProperty(example = "등록ID", name = "등록ID", dataType = "String") + private String regId; + + @ApiModelProperty(example = "등록날짜", name = "등록날짜", dataType = "String") + private String regDt; + + @ApiModelProperty(example = "수정ID", name = "수정ID", dataType = "String") + private String chgId; + + @ApiModelProperty(example = "수정날짜", name = "수정날짜", dataType = "String") + private String chgDt; +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusReqDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusReqDto.java new file mode 100644 index 0000000..199a906 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusReqDto.java @@ -0,0 +1,21 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import javax.validation.constraints.NotNull; + +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CancleSubsSttusReqDto implements Serializable { + + public String subsId; + + public String userId; + + public String adminId; + + public String prodCd; //요금제 + +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusResDto.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusResDto.java new file mode 100644 index 0000000..34f8ef5 --- /dev/null +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/CancleSubsSttusResDto.java @@ -0,0 +1,33 @@ +package kr.co.uplus.ez.api.custMgt.dto; + +import java.io.Serializable; + +import kr.co.uplus.ez.common.data.ApiResponseCode; +import kr.co.uplus.ez.common.data.ResponseMessage; +import lombok.Data; + +@SuppressWarnings("serial") +@Data +public class CancleSubsSttusResDto extends ResponseMessage implements Serializable{ + + // 데이터. + private Object data; + + public CancleSubsSttusResDto() { + this.retCode = ApiResponseCode.SUCCESS.getResultCode(); + this.retMsg = ApiResponseCode.SUCCESS.getResultMsg(); + } + + public CancleSubsSttusResDto(ApiResponseCode returnStr) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + } + + public CancleSubsSttusResDto(ApiResponseCode returnStr, Object data) { + this.retCode = returnStr.getResultCode(); + this.retMsg = returnStr.getResultMsg(); + this.data = data; + } + + +} diff --git a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java index 3bca137..a6b463a 100644 --- a/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java +++ b/src/main/java/kr/co/uplus/ez/api/custMgt/dto/SubsDetail.java @@ -31,8 +31,14 @@ public class SubsDetail implements Serializable { private String subsDt; @ApiModelProperty(example = "청약상태", name = "청약상태", dataType = "String") private String stat; + @ApiModelProperty(example = "청약상태코드", name = "청약상태코드", dataType = "String") + private String subsSttusCd; + @ApiModelProperty(example = "청약ID", name = "청약ID", dataType = "String") + private String subsId; @ApiModelProperty(example = "청약요금제명", name = "청약요금제명", dataType = "String") private String plan; + @ApiModelProperty(example = "청약요금제코드", name = "청약요금제코드", dataType = "String") + private String prodCd; @ApiModelProperty(example = "청약가입번호", name = "청약가입번호", dataType = "String") private String subsNo; @ApiModelProperty(example = "관리자ID", name = "관리자ID", dataType = "String") diff --git a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml index a4586df..58d9b9a 100644 --- a/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml +++ b/src/main/resources/mapper/mysql/custMgt/custMgt-mapper.xml @@ -389,6 +389,8 @@ WHERE GRP_CD = 'SUBS_STTUS_CD' AND DTL_CD = esi.SUBS_STTUS_CD) AS STAT, + esi.SUBS_STTUS_CD, + esi.SUBS_ID, ( SELECT PROD_NM @@ -397,6 +399,7 @@ WHERE PROD_CD = esi.PROD_CD) AS PLAN, esi.ENTR_NO as SUBS_NO, + esi.PROD_CD, esi.ATTRCTOR_ID AS CHANNEL_ID, esi.ATTRCTOR_NM AS CHANNEL_NM, esi.SUBSMNGR_ID AS ADMIN_ID, @@ -1683,4 +1686,75 @@ NOW() ) + + + /*CancleSubsSttus.cancleUserSttusCd - 임시개통, 가입 취소 시 사용자 상태 변경 ('99': 삭제) */ + UPDATE + hubez_common.EZ_SVC_USER + SET + USER_STTUS_CD = '99' + WHERE 1=1 + AND USER_ID = #{userId} + + + + + /* CancleSubsSttus.cancleSubsSttusCd - 임시개통, 가입 취소 시 청약 상태 변경('98': 취소) */ + UPDATE + hubez_common.EZ_SUBS_INFO + SET + SUBS_STTUS_CD = '98' + WHERE 1=1 + AND SUBS_ID = #{subsId} + + + + /* CancleSubsSttus.updateCancleSbscstHst - 임시개통, 가입 취소 시 청약 상태 히스토리 최신 날짜로 변경 */ + UPDATE + hubez_common.EZ_SBSCST_HST + SET + EFCT_FNS_DT = NOW() + WHERE + SUBS_ID = #{subsId} + AND EFCT_ST_DT = + ( + SELECT + EFCT_ST_DT + FROM + hubez_common.EZ_SBSCST_HST + WHERE + SUBS_ID = #{subsId} + ORDER BY EFCT_ST_DT DESC + LIMIT 1 + ) + + + + /* CancleSubsSttus.cancleSbscstHst - 임시개통, 가입 취소 시 청약 상태 히스토리*/ + INSERT INTO + hubez_common.EZ_SBSCST_HST + ( + SUBS_ID, + EFCT_ST_DT, + EFCT_FNS_DT, + PROD_CD, + SUBS_STTUS_CD, + REG_ID, + REG_DT, + CHG_ID, + CHG_DT + ) + VALUES + ( + #{subsId}, + NOW(), + #{efctFnsDt}, + #{prodCd}, + '98', + #{regId}, + NOW(), + #{chgId}, + NOW() + ) +