고객추가중

This commit is contained in:
2022-12-29 18:47:04 +09:00
parent 921ecbde11
commit 20c881530f
48 changed files with 551 additions and 1563 deletions
@@ -17,67 +17,14 @@ import java.time.LocalDateTime;
@AllArgsConstructor
@NoArgsConstructor
public abstract class BaseDto {
protected String sqlSelectType;
protected String sqlUpdateType;
@CreatedDate
private LocalDateTime regDt;
@LastModifiedDate
private LocalDateTime udtDt;
private LocalDateTime delDt;
private long regUid;
private String regName;
private long udtUid;
private String udtName;
private long delUid;
private String delName;
private long id;
private boolean delYn;
public void base(BaseEntity base) {
this.regDt = base.getRegDt();
this.regUid = base.getRegUid();
this.udtDt = base.getUdtDt();
this.udtUid = base.getUdtUid();
this.delDt = base.getDelDt();
this.delUid = base.getUdtUid();
this.id = base.getId();
this.delYn = base.isDelYn();
}
public String getRegDtText() {
return DateUtils.toDateString(regDt);
}
public String getRegDtTimeText() {
return DateUtils.toDateString(regDt, DateUtils.FORMAT_DEFAULT);
}
public String getUdtDtText() {
return DateUtils.toDateString(udtDt);
}
public String getUdtDtTimeText() {
return DateUtils.toDateString(udtDt, DateUtils.FORMAT_DEFAULT);
}
public String getDelDtKorText() {
if(delDt!= null) {
return DateUtils.toDateString(delDt, DateUtils.FORMAT_YYYYMMDD_KOR);
}
else {
return DateUtils.toDateString(LocalDateTime.now(), DateUtils.FORMAT_YYYYMMDD_KOR);
}
}
public String getDelDtNextWeekText() {
if(delDt!= null) {
return DateUtils.toDateString(delDt.plusDays(7), DateUtils.FORMAT_YYYYMMDD_KOR);
}
else {
return DateUtils.toDateString(LocalDateTime.now(), DateUtils.FORMAT_YYYYMMDD_KOR);
}
}
}
@@ -1,39 +0,0 @@
package com.ns.mobile.website.biz.dto;
import com.ns.mobile.website.biz.entity.FileUpload;
import com.ns.mobile.website.biz.entity.Phone;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class FileUploadDto extends BaseDto{
long id;
String saveFileName;
String originalFileName;
String fileExtension;
String localPath;
public static FileUploadDto of(FileUpload fileUpload) {
FileUploadDto fileUploadDto = FileUploadDto.builder()
.id(fileUpload.getId())
.saveFileName(fileUpload.getSaveFileName())
.originalFileName(fileUpload.getOriginalFileName())
.fileExtension(fileUpload.getFileExtension())
.localPath(fileUpload.getLocalPath())
.build();
fileUploadDto.base(fileUpload);
return fileUploadDto;
}
}
@@ -0,0 +1,41 @@
package com.ns.mobile.website.biz.dto;
import com.ns.mobile.website.biz.entity.Menu;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class MenuDto extends BaseDto{
String name;
String url;
String auth;
String upprId;
String activeUrl;
int sort;
String menuIcon;
public static MenuDto of(Menu menu) {
MenuDto menuDto = MenuDto.builder()
.name(menu.getName())
.url(menu.getUrl())
.auth(menu.getAuth())
.upprId(menu.getUpprId())
.activeUrl(menu.getActiveUrl())
.sort(menu.getSort())
.menuIcon(menu.getMenuIcon())
.build();
menuDto.base(menu);
return menuDto;
}
}
@@ -1,43 +0,0 @@
package com.ns.mobile.website.biz.dto;
import com.ns.mobile.website.biz.entity.PhoneColor;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhoneColorDto extends BaseDto{
long id;
long phoneId;
int sort;
String color;
String colorKr;
String colorEn;
String frontImg;
String sideImg;
String backImg;
public static PhoneColorDto of(PhoneColor phoneColor) {
PhoneColorDto phoneColorDto = PhoneColorDto.builder()
.id(phoneColor.getId())
.phoneId(phoneColor.getPhoneId())
.color(phoneColor.getColor())
.colorKr(phoneColor.getColorKr())
.colorEn(phoneColor.getColorEn())
.frontImg(phoneColor.getFrontImg())
.sideImg(phoneColor.getSideImg())
.backImg(phoneColor.getBackImg())
.build();
phoneColorDto.base(phoneColor);
return phoneColorDto;
}
}
@@ -1,41 +0,0 @@
package com.ns.mobile.website.biz.dto;
import java.util.List;
import com.ns.mobile.website.biz.entity.PhoneDetail;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhoneDetailDto extends BaseDto{
long id;
PhoneDto phoneDto;
List<PhoneColorDto> phoneColorDtoList;
List<PhonePriceDto> phonePriceDtoList;
long phoneId;
String detailPcImg;
String detailMobileImg;
public static PhoneDetailDto of(PhoneDetail phoneDetail) {
PhoneDetailDto phoneDetailDto = PhoneDetailDto.builder()
.id(phoneDetail.getId())
.phoneId(phoneDetail.getPhoneId())
.detailPcImg(phoneDetail.getDetailPcImg())
.detailMobileImg(phoneDetail.getDetailMobileImg())
.build();
phoneDetailDto.base(phoneDetail);
return phoneDetailDto;
}
}
@@ -1,52 +0,0 @@
package com.ns.mobile.website.biz.dto;
import com.ns.mobile.website.biz.entity.Phone;
import com.ns.mobile.website.common.util.NumberUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhoneDto extends BaseDto{
long id;
String title;
String titleEn;
String subTitle;
String producer;
String phoneType;
String titleImg;
boolean mdPick;
boolean hot;
boolean kt;
boolean skt;
boolean lgu;
PhonePriceDto phonePriceDto;
public static PhoneDto of(Phone phone) {
PhoneDto phoneDto = PhoneDto.builder()
.id(phone.getId())
.title(phone.getTitle())
.titleEn(phone.getTitleEn())
.subTitle(phone.getSubTitle())
.producer(phone.getProducer())
.phoneType(phone.getPhoneType())
.titleImg(phone.getTitleImg())
.mdPick(phone.isMdPick())
.hot(phone.isHot())
.kt(phone.isKt())
.skt(phone.isSkt())
.lgu(phone.isLgu())
.build();
phoneDto.base(phone);
return phoneDto;
}
}
@@ -1,54 +0,0 @@
package com.ns.mobile.website.biz.dto;
import com.ns.mobile.website.biz.entity.PhonePrice;
import com.ns.mobile.website.common.util.NumberUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class PhonePriceDto extends BaseDto{
long id;
long phoneId;
int storage;
long releasePrice;
long yogum;
long dcYogum;
long dcDanmal;
public String getReleasePriceTerminalAndCommunicationToComma() {
return NumberUtils.toComma((releasePrice/24)+(66750));
}
public String getReleasePriceTerminalToComma() {
return NumberUtils.toComma(releasePrice/24);
}
public String getReleasePriceToComma() {
return NumberUtils.toComma(releasePrice);
}
public String getStorageString() {
return Integer.toString(storage) + "GB";
}
public static PhonePriceDto of(PhonePrice phonePrice) {
PhonePriceDto phonePriceDto = PhonePriceDto.builder()
.id(phonePrice.getId())
.phoneId(phonePrice.getPhoneId())
.storage(phonePrice.getStorage())
.releasePrice(phonePrice.getReleasePrice())
.yogum(phonePrice.getYogum())
.dcYogum(phonePrice.getDcYogum())
.dcDanmal(phonePrice.getDcDanmal())
.build();
phonePriceDto.base(phonePrice);
return phonePriceDto;
}
}
@@ -1,76 +0,0 @@
package com.ns.mobile.website.biz.dto;
import java.time.LocalDateTime;
import com.ns.mobile.website.biz.entity.Phone;
import com.ns.mobile.website.biz.entity.SellUser;
import com.ns.mobile.website.common.util.DateUtils;
import com.ns.mobile.website.common.util.NumberUtils;
import com.ns.mobile.website.common.util.PhoneUtils;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@EqualsAndHashCode(callSuper = true)
@SuperBuilder
@Data
@AllArgsConstructor
@NoArgsConstructor
public class SellUserDto extends BaseDto{
long id;
LocalDateTime openingDate;
String account;
String newsAgency;
String name;
String socialSecurityNumber;
String phoneNumber;
String customerType;
String legalRepresentativeName;
String legalRepresentativePhoneNumber;
int installmentMonth;
String petName;
String serialNumber;
String subscription;
long fileId;
public static SellUserDto of(SellUser sellUser) {
SellUserDto sellUserDto = SellUserDto.builder()
.id(sellUser.getId())
.openingDate(sellUser.getOpeningDate())
.account(sellUser.getAccount())
.newsAgency(sellUser.getNewsAgency())
.name(sellUser.getName())
.socialSecurityNumber(sellUser.getSocialSecurityNumber())
.phoneNumber(sellUser.getPhoneNumber())
.customerType(sellUser.getCustomerType())
.legalRepresentativeName(sellUser.getLegalRepresentativeName())
.legalRepresentativePhoneNumber(sellUser.getLegalRepresentativePhoneNumber())
.installmentMonth(sellUser.getInstallmentMonth())
.petName(sellUser.getPetName())
.serialNumber(sellUser.getSerialNumber())
.subscription(sellUser.getSubscription())
.fileId(sellUser.getFileId())
.build();
sellUserDto.base(sellUser);
return sellUserDto;
}
public String getOpeningDateKor() {
return DateUtils.toDateString(openingDate, DateUtils.FORMAT_YYYYMMDD_KOR);
}
public String getPhoneNumberText() {
return PhoneUtils.toString(phoneNumber);
}
public String getLegalRepresentativePhoneNumberText() {
return PhoneUtils.toString(legalRepresentativePhoneNumber);
}
}
@@ -20,26 +20,6 @@ public abstract class BaseEntity {
@GeneratedValue(strategy = GenerationType.IDENTITY)
private long id;
@CreationTimestamp
@Column
private LocalDateTime regDt;
@UpdateTimestamp
@Column
private LocalDateTime udtDt;
@Column
private LocalDateTime delDt;
@Column
private long regUid;
@Column
private long udtUid;
@Column
private long delUid;
@Column
private boolean delYn;
@@ -1,23 +0,0 @@
package com.ns.mobile.website.biz.entity;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class FileUpload extends BaseEntity {
long id;
String saveFileName;
String originalFileName;
String fileExtension;
String localPath;
}
@@ -12,15 +12,14 @@ import lombok.experimental.SuperBuilder;
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PhoneColor extends BaseEntity{
long id;
long phoneId;
int sort;
String color;
String colorKr;
String colorEn;
String frontImg;
String sideImg;
String backImg;
public class Menu extends BaseEntity{
private String name;
private String url;
private String auth;
private String upprId;
private String activeUrl;
private int sort;
private String menuIcon;
}
@@ -1,29 +0,0 @@
package com.ns.mobile.website.biz.entity;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class Phone extends BaseEntity{
long id;
String title;
String titleEn;
String subTitle;
String producer;
String phoneType;
String titleImg;
boolean mdPick;
boolean hot;
boolean kt;
boolean skt;
boolean lgu;
}
@@ -1,21 +0,0 @@
package com.ns.mobile.website.biz.entity;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PhoneDetail extends BaseEntity{
long id;
long phoneId;
String detailPcImg;
String detailMobileImg;
}
@@ -1,23 +0,0 @@
package com.ns.mobile.website.biz.entity;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class PhonePrice extends BaseEntity{
long id;
long phoneId;
int storage;
long releasePrice;
long yogum;
long dcYogum;
long dcDanmal;
}
@@ -1,34 +0,0 @@
package com.ns.mobile.website.biz.entity;
import java.time.LocalDateTime;
import javax.persistence.Entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.experimental.SuperBuilder;
@Data
@Entity
@SuperBuilder
@NoArgsConstructor
@AllArgsConstructor
public class SellUser extends BaseEntity{
long id;
LocalDateTime openingDate;
String account;
String newsAgency;
String name;
String socialSecurityNumber;
String phoneNumber;
String customerType;
String legalRepresentativeName;
String legalRepresentativePhoneNumber;
int installmentMonth;
String petName;
String serialNumber;
String subscription;
long fileId;
}
@@ -1,43 +0,0 @@
package com.ns.mobile.website.biz.model;
import com.ns.mobile.website.biz.entity.FileUpload;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UploadFileModel {
long id;
long length;
String originalFileName;
String fileExtension;
String saveFileName;
String uploadUrl;
String localPath;
String uuid;
boolean result;
String message;
public static UploadFileModel fail(String message) {
return UploadFileModel.builder().result(false).message(message).build();
}
public static FileUpload of(UploadFileModel uploadFileModel) {
return FileUpload.builder()
.originalFileName(uploadFileModel.getOriginalFileName())
.fileExtension(uploadFileModel.getFileExtension())
.saveFileName(uploadFileModel.getSaveFileName())
.localPath(uploadFileModel.getLocalPath())
.build();
}
}
@@ -1,23 +0,0 @@
package com.ns.mobile.website.biz.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.ns.mobile.website.biz.dto.FileUploadDto;
import com.ns.mobile.website.biz.entity.FileUpload;
@Repository
public interface FileUploadRepository extends JpaRepository<FileUpload, Long> {
Optional<List<FileUploadDto>> findByDelYn(boolean delYn);
List<FileUploadDto> findByDelYnOrderByIdDesc(boolean delYn);
@Transactional
@Modifying
@Query(value = "UPDATE file_upload SET del_yn = 1 WHERE id = :id", nativeQuery = true)
int updateDelYn(Long id);
}
@@ -6,9 +6,9 @@ import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.ns.mobile.website.biz.entity.PhoneColor;
import com.ns.mobile.website.biz.entity.Menu;
@Repository
public interface PhoneColorRepository extends JpaRepository<PhoneColor, Long> {
Optional<List<PhoneColor>> findByPhoneIdAndDelYnOrderBySort(long phoneId, boolean delYn);
public interface MenuRepository extends JpaRepository<Menu, Long> {
Optional<List<Menu>> findByDelYnOrderBySort(boolean delYn);
}
@@ -1,13 +0,0 @@
package com.ns.mobile.website.biz.repository;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.ns.mobile.website.biz.entity.PhoneDetail;
@Repository
public interface PhoneDetailRepository extends JpaRepository<PhoneDetail, Long> {
Optional<PhoneDetail> findByPhoneIdAndDelYn(long phoneId, boolean delYn);
}
@@ -1,15 +0,0 @@
package com.ns.mobile.website.biz.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.ns.mobile.website.biz.entity.PhonePrice;
@Repository
public interface PhonePriceRepository extends JpaRepository<PhonePrice, Long> {
Optional<List<PhonePrice>> findByPhoneIdAndDelYn(long phoneId, boolean delYn);
Optional<PhonePrice> findTop1ByPhoneIdAndDelYnOrderByReleasePrice(long phoneId, boolean delYn);
}
@@ -1,16 +0,0 @@
package com.ns.mobile.website.biz.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;
import com.ns.mobile.website.biz.entity.Phone;
@Repository
public interface PhoneRepository extends JpaRepository<Phone, Long> {
Optional<Phone> findByIdAndDelYn(long id, boolean delYn);
Optional<List<Phone>> findByDelYn(boolean delYn);
Optional<List<Phone>> findByProducerAndDelYn(String producer, boolean delYn);
}
@@ -1,40 +0,0 @@
package com.ns.mobile.website.biz.repository;
import java.util.List;
import java.util.Optional;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.stereotype.Repository;
import org.springframework.transaction.annotation.Transactional;
import com.ns.mobile.website.biz.entity.SellUser;
@Repository
public interface SellUserRepository extends JpaRepository<SellUser, Long> {
Optional<List<SellUser>> findByDelYn(boolean delYn);
Optional<List<SellUser>> findByAccountContainsAndDelYn(String account, boolean delYn);
Optional<List<SellUser>> findByNewsAgencyContainsAndDelYn(String newsAgency, boolean delYn);
Optional<List<SellUser>> findByNameContainsAndDelYn(String name, boolean delYn);
Optional<List<SellUser>> findByPhoneNumberContainsAndDelYn(String phoneNumber, boolean delYn);
Optional<List<SellUser>> findByCustomerTypeContainsAndDelYn(String customerType, boolean delYn);
Optional<List<SellUser>> findByPetNameContainsAndDelYn(String petName, boolean delYn);
Optional<List<SellUser>> findBySerialNumberContainsAndDelYn(String serialNumber, boolean delYn);
@Query(value = "select * from sell_user "
+ "where (account like concat('%',:account,'%') "
+ "or news_agency like concat('%',:newsAgency,'%') "
+ "or name like concat('%',:name,'%') "
+ "or phone_number like concat('%',:phoneNumber,'%') "
+ "or customer_type like concat('%',:customerType,'%') "
+ "or pet_name like concat('%',:petName,'%') "
+ "or serial_number like concat('%',:serialNumber,'%')) "
+ "and del_yn = :delYn", nativeQuery = true)
Optional<List<SellUser>> findByAccountContainsOrNewsAgencyContainsOrNameContainsOrPhoneNumberContainsOrCustomerTypeContainsOrPetNameContainsOrSerialNumberContainsAndDelYn(String account, String newsAgency, String name, String phoneNumber, String customerType, String petName, String serialNumber, boolean delYn);
@Transactional
@Modifying
@Query(value = "UPDATE sell_user SET del_yn = 1 WHERE file_id = :id", nativeQuery = true)
int updateDelYn(Long id);
}
@@ -1,105 +0,0 @@
package com.ns.mobile.website.biz.service;
import java.io.File;
import java.io.FileOutputStream;
import org.springframework.stereotype.Service;
import org.springframework.util.FileCopyUtils;
import org.springframework.web.multipart.MultipartFile;
import com.ns.mobile.website.biz.entity.FileUpload;
import com.ns.mobile.website.biz.model.UploadFileModel;
import com.ns.mobile.website.biz.properties.FileUrlProperties;
import com.ns.mobile.website.common.util.DateUtils;
import com.ns.mobile.website.common.util.FileUtils;
import com.ns.mobile.website.common.util.StringUtils;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@RequiredArgsConstructor
@Slf4j
@Service
public class FileService {
private final FileUrlProperties fileUrlProperties;
public UploadFileModel upload(MultipartFile file) {
if (file == null) {
return UploadFileModel.fail("파일 정보가 존재하지 않습니다.");
}
UploadFileModel uploadFileModel = null;
try {
uploadFileModel = this._upload(file);
if (uploadFileModel == null || uploadFileModel.getSaveFileName().isEmpty()) {
return UploadFileModel.fail("파일 정보가 존재하지 않습니다.");
}
} catch (Exception e) {
return UploadFileModel.fail(e.getMessage());
}
String uuid = StringUtils.getUuid();
uploadFileModel.setUuid(uuid);
FileUpload hireUploadFile = UploadFileModel.of(uploadFileModel);
uploadFileModel.setResult(true);
uploadFileModel.setId(hireUploadFile.getId());
return uploadFileModel;
}
private String getSaveLocalPath(String baseUploadLocation, String saveFilename) {
String currentYear = DateUtils.getCurrentYear();
String currentMonth = DateUtils.getCurrentMonth();
return String.format("%s/%s/%s/%s", baseUploadLocation, currentYear, currentMonth, saveFilename);
}
private String getUploadPath(String uploadPath, String saveFilename) {
String currentYear = DateUtils.getCurrentYear();
String currentMonth = DateUtils.getCurrentMonth();
return String.format("%s/%s/%s/%s", uploadPath, currentYear, currentMonth, saveFilename);
}
private UploadFileModel _upload(MultipartFile multipartFile) {
try {
FileUtils.createUploadPath(fileUrlProperties.getBaseUploadLocation());
long length = multipartFile.getSize();
String originalFilename = multipartFile.getOriginalFilename();
String fileExtension = FileUtils.getFileExtension(originalFilename).toLowerCase();
String saveFilename = String.format("%s.%s", StringUtils.getUuid(), fileExtension);
String localPath = getSaveLocalPath(fileUrlProperties.getBaseUploadLocation(), saveFilename);
String uploadUrl = getUploadPath(fileUrlProperties.getUploadPath(), saveFilename);
File file = new File(localPath);
FileCopyUtils.copy(multipartFile.getInputStream(), new FileOutputStream(file));
file.setExecutable(true, false);
file.setReadable(true, false);
file.setWritable(true, false);
return UploadFileModel.builder()
.length(length)
.originalFileName(originalFilename)
.fileExtension(fileExtension)
.saveFileName(saveFilename)
.uploadUrl(uploadUrl)
.localPath(localPath)
.build();
} catch (Exception e) {
log.error("error", e);
}
return null;
}
}
@@ -0,0 +1,10 @@
package com.ns.mobile.website.biz.service;
import java.util.List;
import com.ns.mobile.website.biz.dto.MenuDto;
public interface MenuService {
public List<MenuDto> getMenu();
}
@@ -1,13 +0,0 @@
package com.ns.mobile.website.biz.service;
import java.util.List;
import com.ns.mobile.website.biz.dto.PhoneDetailDto;
import com.ns.mobile.website.biz.dto.PhoneDto;
import com.ns.mobile.website.biz.entity.Phone;
public interface PhoneService {
List<PhoneDto> selectList(Phone parameter);
PhoneDetailDto select(Phone parameter);
}
@@ -1,16 +0,0 @@
package com.ns.mobile.website.biz.service;
import java.util.List;
import com.ns.mobile.website.biz.dto.FileUploadDto;
import com.ns.mobile.website.biz.dto.SellUserDto;
import com.ns.mobile.website.biz.entity.FileUpload;
import com.ns.mobile.website.biz.entity.SellUser;
import com.ns.mobile.website.biz.model.SearchData;
public interface SellService {
List<SellUserDto> selectList(SearchData parameter);
List<FileUploadDto> selectAddList(SearchData parameter);
boolean saveList(FileUpload fileUpload, List<SellUser> list);
boolean delFileUpload(FileUpload fileUpload);
}
@@ -0,0 +1,35 @@
package com.ns.mobile.website.biz.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import com.ns.mobile.website.biz.dto.MenuDto;
import com.ns.mobile.website.biz.entity.Menu;
import com.ns.mobile.website.biz.exception.BizApiException;
import com.ns.mobile.website.biz.repository.MenuRepository;
import com.ns.mobile.website.biz.service.MenuService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@Slf4j
@RequiredArgsConstructor
@Service
public class MenuServiceImpl implements MenuService{
private final MenuRepository menuRepository;
@Override
public List<MenuDto> getMenu() {
List<Menu> menuList = menuRepository.findByDelYnOrderBySort(false).orElseThrow(() -> new BizApiException("메뉴 조회가 실패하였습니다."));
List<MenuDto> result = new ArrayList<MenuDto>();
menuList.forEach(e -> {
result.add(MenuDto.of(e));
});
return result;
}
}
@@ -1,80 +0,0 @@
package com.ns.mobile.website.biz.service.impl;
import java.util.ArrayList;
import java.util.List;
import org.springframework.stereotype.Service;
import com.ns.mobile.website.biz.dto.PhoneColorDto;
import com.ns.mobile.website.biz.dto.PhoneDetailDto;
import com.ns.mobile.website.biz.dto.PhoneDto;
import com.ns.mobile.website.biz.dto.PhonePriceDto;
import com.ns.mobile.website.biz.entity.Phone;
import com.ns.mobile.website.biz.entity.PhoneColor;
import com.ns.mobile.website.biz.entity.PhoneDetail;
import com.ns.mobile.website.biz.entity.PhonePrice;
import com.ns.mobile.website.biz.exception.BizException;
import com.ns.mobile.website.biz.repository.PhoneColorRepository;
import com.ns.mobile.website.biz.repository.PhoneDetailRepository;
import com.ns.mobile.website.biz.repository.PhonePriceRepository;
import com.ns.mobile.website.biz.repository.PhoneRepository;
import com.ns.mobile.website.biz.service.PhoneService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import util.SU;
@Slf4j
@RequiredArgsConstructor
@Service
public class PhoneServiceImpl implements PhoneService{
private final PhoneRepository phoneRepository;
private final PhoneDetailRepository phoneDetailRepository;
private final PhoneColorRepository phoneColorRepository;
private final PhonePriceRepository phonePriceRepository;
@Override
public List<PhoneDto> selectList(Phone parameter) {
List<Phone> phoneList = null;
if(SU.emt(parameter.getProducer())) {
phoneList = phoneRepository.findByDelYn(false).orElseThrow(()-> new BizException(""));
}else {
phoneList = phoneRepository.findByProducerAndDelYn(parameter.getProducer(),false).orElseThrow(()-> new BizException(""));
}
List<PhoneDto> resultList = new ArrayList<PhoneDto>();
for(Phone e : phoneList) {
PhoneDto temp = PhoneDto.of(e);
temp.setPhonePriceDto(PhonePriceDto.of(phonePriceRepository.findTop1ByPhoneIdAndDelYnOrderByReleasePrice(e.getId(), false).orElseThrow(()-> new BizException(""))));
resultList.add(temp);
}
return resultList;
}
@Override
public PhoneDetailDto select(Phone parameter) {
Phone phone = phoneRepository.findByIdAndDelYn(parameter.getId(), false).orElseThrow(()-> new BizException(""));
PhoneDto phoneDto = PhoneDto.of(phone);
List<PhonePrice> phonePriceList = phonePriceRepository.findByPhoneIdAndDelYn(phone.getId(), false).orElseThrow(()-> new BizException(""));
List<PhonePriceDto> phonPriceDtoList = new ArrayList<PhonePriceDto>();
for(PhonePrice e : phonePriceList) {
phonPriceDtoList.add(PhonePriceDto.of(e));
}
List<PhoneColor> phoneColorList = phoneColorRepository.findByPhoneIdAndDelYnOrderBySort(phone.getId(), false).orElseThrow(()-> new BizException(""));
List<PhoneColorDto> phonColorDtoList = new ArrayList<PhoneColorDto>();
for(PhoneColor e : phoneColorList) {
phonColorDtoList.add(PhoneColorDto.of(e));
}
PhoneDetail phoneDetail = phoneDetailRepository.findByPhoneIdAndDelYn(phone.getId(), false).orElseThrow(()-> new BizException(""));
PhoneDetailDto result = PhoneDetailDto.of(phoneDetail);
result.setPhoneDto(phoneDto);
result.setPhonePriceDtoList(phonPriceDtoList);
result.setPhoneColorDtoList(phonColorDtoList);
return result;
}
}
@@ -1,97 +0,0 @@
package com.ns.mobile.website.biz.service.impl;
import java.util.ArrayList;
import java.util.List;
import javax.transaction.Transactional;
import org.springframework.data.domain.Sort;
import org.springframework.stereotype.Service;
import com.ns.mobile.website.biz.dto.FileUploadDto;
import com.ns.mobile.website.biz.dto.SellUserDto;
import com.ns.mobile.website.biz.entity.FileUpload;
import com.ns.mobile.website.biz.entity.SellUser;
import com.ns.mobile.website.biz.exception.BizApiException;
import com.ns.mobile.website.biz.model.SearchData;
import com.ns.mobile.website.biz.repository.FileUploadRepository;
import com.ns.mobile.website.biz.repository.SellUserRepository;
import com.ns.mobile.website.biz.service.SellService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import util.SU;
@Slf4j
@RequiredArgsConstructor
@Service
public class SellServiceImpl implements SellService{
private final SellUserRepository sellUserRepository;
private final FileUploadRepository fileUploadRepository;
@Override
public List<SellUserDto> selectList(SearchData parameter) {
List<SellUser> sellUserList;
if(SU.eq("account",parameter.getType())) {
sellUserList = sellUserRepository.findByAccountContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 거래처명입니다."));
}else if(SU.eq("newsAgency",parameter.getType())){
sellUserList = sellUserRepository.findByNewsAgencyContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 통신사명입니다"));
}else if(SU.eq("name",parameter.getType())){
sellUserList = sellUserRepository.findByNameContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 명의자 입니다"));
}else if(SU.eq("phoneNumber",parameter.getType())){
sellUserList = sellUserRepository.findByPhoneNumberContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 개통번호입니다"));
}else if(SU.eq("customerType",parameter.getType())){
sellUserList = sellUserRepository.findByCustomerTypeContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 고객종류입니다"));
}else if(SU.eq("petName",parameter.getType())){
sellUserList = sellUserRepository.findByPetNameContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 펫네임입니다"));
}else if(SU.eq("serialNumber",parameter.getType())){
sellUserList = sellUserRepository.findBySerialNumberContainsAndDelYn(parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 시리얼번호입니다"));
}else {
sellUserList = sellUserRepository.findByAccountContainsOrNewsAgencyContainsOrNameContainsOrPhoneNumberContainsOrCustomerTypeContainsOrPetNameContainsOrSerialNumberContainsAndDelYn(parameter.getText(),parameter.getText(),parameter.getText(),parameter.getText(),parameter.getText(),parameter.getText(),parameter.getText(), false).orElseThrow(() -> new BizApiException("없는 시리얼번호입니다"));
}
List<SellUserDto> resultList = new ArrayList<SellUserDto>();
for(SellUser e : sellUserList) {
SellUserDto temp = SellUserDto.of(e);
resultList.add(temp);
}
return resultList;
}
@Override
public List<FileUploadDto> selectAddList(SearchData parameter) {
List<FileUploadDto> resultList = fileUploadRepository.findByDelYnOrderByIdDesc(false);
return resultList;
}
@Transactional
@Override
public boolean saveList(FileUpload fileUpload, List<SellUser> list) {
try {
fileUpload = fileUploadRepository.saveAndFlush(fileUpload);
for(SellUser e : list) {
e.setFileId(fileUpload.getId());
}
sellUserRepository.saveAll(list);
}catch(Exception e) {
log.error(e.getMessage());
return false;
}
return true;
}
@Override
public boolean delFileUpload(FileUpload fileUpload) {
try {
fileUploadRepository.updateDelYn(fileUpload.getId());
sellUserRepository.updateDelYn(fileUpload.getId());
}catch(Exception e) {
log.error(e.getMessage());
return false;
}
return true;
}
}
@@ -2,11 +2,6 @@ package com.ns.mobile.website.common.util;
import java.io.File;
import java.io.IOException;
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.Date;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
@@ -15,17 +10,11 @@ import java.util.Map;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.DateUtil;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbookType;
import com.ns.mobile.website.biz.entity.SellUser;
import com.ns.mobile.website.biz.repository.FileUploadRepository;
import lombok.extern.slf4j.Slf4j;
@@ -107,104 +96,7 @@ public class ExcelUtil {
}
return account;
}
public static List<SellUser> excelToSellList(String filePath, Map<String,String> account) {
//String localFilename = "/Users/parkkyutae/Downloads/회원목록_20201102140936.xlsx";
File file = new File(filePath);
boolean stop = false;
List<SellUser> sellUserList = new ArrayList<SellUser>();
try {
Workbook workbook = WorkbookFactory.create(file);
Sheet sheet = workbook.getSheetAt(2);
Iterator<Row> rowItr = sheet.iterator();
while(rowItr.hasNext()) {
SellUser sellUser = new SellUser();
Row row = rowItr.next();
if(row.getRowNum() < 2) {
continue;
}
Iterator<Cell> cellItr = row.cellIterator();
while(cellItr.hasNext()) {
Cell cell = cellItr.next();
int index = cell.getColumnIndex();
switch(index) {
case 5:
if(cell.getDateCellValue() == null) {
stop = true;
break;
}
sellUser.setOpeningDate((LocalDateTime)cell.getDateCellValue().toInstant().atZone(ZoneId.systemDefault()).toLocalDateTime());
break;
case 6:
sellUser.setAccount((String) getCellValue(cell));
break;
case 7:
sellUser.setNewsAgency(account.get(sellUser.getAccount()));
break;
case 8:
sellUser.setName((String) getCellValue(cell));
break;
case 9:
if(cell.getCellType() == CellType.NUMERIC)
sellUser.setSocialSecurityNumber(String.format("%06d",(int)cell.getNumericCellValue()));
else
sellUser.setSocialSecurityNumber((String) cell.getStringCellValue());
break;
case 10:
if(cell.getCellType() == CellType.NUMERIC)
sellUser.setPhoneNumber(String.format("%011d",(int)cell.getNumericCellValue()));
else
sellUser.setPhoneNumber(((String) cell.getStringCellValue()).replace("-", ""));
break;
case 11:
if(cell.getCellType() == CellType.NUMERIC)
sellUser.setCustomerType(String.format("%d",(int)cell.getNumericCellValue()));
else
sellUser.setCustomerType((String) cell.getStringCellValue());
break;
case 12:
sellUser.setLegalRepresentativeName((String) cell.getStringCellValue());
break;
case 13:
if(cell.getCellType() == CellType.NUMERIC)
sellUser.setLegalRepresentativePhoneNumber(String.format("%011d",(int)cell.getNumericCellValue()));
else
sellUser.setLegalRepresentativePhoneNumber(((String) cell.getStringCellValue()).replace("-", ""));
break;
case 14:
sellUser.setInstallmentMonth(((Double)cell.getNumericCellValue()).intValue());
break;
case 15:
sellUser.setPetName((String) cell.getStringCellValue());
break;
case 16:
if(cell.getCellType() == CellType.NUMERIC)
sellUser.setSerialNumber(String.format("%d",(int)cell.getNumericCellValue()));
else
sellUser.setSerialNumber((String) cell.getStringCellValue());
break;
case 17:
sellUser.setSubscription((String) cell.getStringCellValue());
break;
}
}
if(stop)
break;
sellUserList.add(sellUser);
}
} catch (Exception e) {
String message = "[엑셀파일 로드 - Data ] 처리 중 DB오류가 발생하였습니다.";
log.error(message + " >> ", e);
}
return sellUserList;
}
private static Object getCellValue(Cell cell) {
switch(cell.getCellType()) {
case STRING:
@@ -0,0 +1,51 @@
package com.ns.mobile.website.web.controller.home;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ns.mobile.website.web.auth.PublicAccess;
import com.ns.mobile.website.web.controller.BaseController;
import com.ns.mobile.website.web.properties.LaneduProperties;
import lombok.RequiredArgsConstructor;
@RequiredArgsConstructor
@Controller
public class GuestController extends BaseController {
private final LaneduProperties laneduProperties;
@PublicAccess
@RequestMapping(value = {"guest/add"})
String home(Model model, HttpServletRequest request, HttpSession session
) {
model.addAttribute("version", laneduProperties.getVersion());
return "guest/add";
}
}
@@ -5,10 +5,8 @@ import javax.servlet.http.HttpSession;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import com.ns.mobile.website.biz.service.PhoneService;
import com.ns.mobile.website.web.auth.PublicAccess;
import com.ns.mobile.website.web.controller.BaseController;
import com.ns.mobile.website.web.properties.LaneduProperties;
@@ -21,6 +19,14 @@ public class HomeController extends BaseController {
private final LaneduProperties laneduProperties;
@PublicAccess
@RequestMapping(value = {"sample"})
String sample(Model model, HttpServletRequest request, HttpSession session
) {
model.addAttribute("version", laneduProperties.getVersion());
return "home/sample";
}
@PublicAccess
@RequestMapping(value = {"home"})
@@ -31,6 +37,7 @@ public class HomeController extends BaseController {
return "home/index";
}
}
@@ -1,34 +1,7 @@
package com.ns.mobile.website.web.controller.home.api;
import java.util.List;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.bind.annotation.RestController;
import org.springframework.web.multipart.MultipartFile;
import com.ns.mobile.website.biz.dto.FileUploadDto;
import com.ns.mobile.website.biz.dto.PhoneDetailDto;
import com.ns.mobile.website.biz.dto.PhoneDto;
import com.ns.mobile.website.biz.dto.SellUserDto;
import com.ns.mobile.website.biz.entity.FileUpload;
import com.ns.mobile.website.biz.entity.Phone;
import com.ns.mobile.website.biz.entity.SellUser;
import com.ns.mobile.website.biz.model.ResponseData;
import com.ns.mobile.website.biz.model.ResponseResult;
import com.ns.mobile.website.biz.model.SearchData;
import com.ns.mobile.website.biz.model.UploadFileModel;
import com.ns.mobile.website.biz.service.FileService;
import com.ns.mobile.website.biz.service.PhoneService;
import com.ns.mobile.website.biz.service.SellService;
import com.ns.mobile.website.common.util.ExcelUtil;
import com.ns.mobile.website.web.auth.PublicAccess;
import com.ns.mobile.website.web.controller.BaseController;
import lombok.RequiredArgsConstructor;
@@ -39,61 +12,61 @@ import lombok.extern.slf4j.Slf4j;
@RestController
public class ApiHomeController extends BaseController {
private final PhoneService phoneService;
private final SellService sellService;
private final FileService fileService;
@PublicAccess
@PostMapping("/api/phone/list.api")
public ResponseEntity<?> list(@RequestBody Phone parameter,HttpServletRequest request, HttpSession session){
List<PhoneDto> result = phoneService.selectList(parameter);
return ResponseResult.success(result);
}
@PublicAccess
@PostMapping("/api/phone/detail.api")
public ResponseEntity<?> detail(@RequestBody Phone parameter,HttpServletRequest request, HttpSession session){
PhoneDetailDto result = phoneService.select(parameter);
return ResponseResult.success(result);
}
@PublicAccess
@PostMapping("/api/sell/list.api")
public ResponseEntity<?> sellList(@RequestBody SearchData parameter,HttpServletRequest request, HttpSession session){
List<SellUserDto> result = sellService.selectList(parameter);
return ResponseResult.success(result);
}
@PublicAccess
@PostMapping("/api/sell/add/list.api")
public ResponseEntity<?> addList(@RequestBody SearchData parameter,HttpServletRequest request, HttpSession session){
List<FileUploadDto> result = sellService.selectAddList(parameter);
return ResponseResult.success(result);
}
@PublicAccess
@PostMapping("/api/sell/del/upload.api")
public ResponseData delFileUpload(@RequestBody FileUpload parameter,HttpServletRequest request, HttpSession session){
if(!sellService.delFileUpload(parameter)) {
return ResponseData.fail("실패");
}
return ResponseData.success();
}
@ResponseBody
@PublicAccess
@PostMapping(value = {"/api/sell/add.api"})
public ResponseData apiAttachExcelFile(MultipartFile attachFile) {
UploadFileModel uploadFile = fileService.upload(attachFile);
if (!uploadFile.isResult()) {
return ResponseData.fail(uploadFile.getMessage());
}
Map<String,String> account = ExcelUtil.excelToAccountList(uploadFile.getLocalPath());
List<SellUser> excelDataList = ExcelUtil.excelToSellList(uploadFile.getLocalPath(), account);
FileUpload fileUpload = UploadFileModel.of(uploadFile);
if(!sellService.saveList(fileUpload, excelDataList)) {
return ResponseData.fail("실패");
}
return ResponseData.success(excelDataList);
}
// private final PhoneService phoneService;
// private final SellService sellService;
// private final FileService fileService;
//
// @PublicAccess
// @PostMapping("/api/phone/list.api")
// public ResponseEntity<?> list(@RequestBody Phone parameter,HttpServletRequest request, HttpSession session){
// List<PhoneDto> result = phoneService.selectList(parameter);
// return ResponseResult.success(result);
// }
//
// @PublicAccess
// @PostMapping("/api/phone/detail.api")
// public ResponseEntity<?> detail(@RequestBody Phone parameter,HttpServletRequest request, HttpSession session){
// PhoneDetailDto result = phoneService.select(parameter);
// return ResponseResult.success(result);
// }
//
// @PublicAccess
// @PostMapping("/api/sell/list.api")
// public ResponseEntity<?> sellList(@RequestBody SearchData parameter,HttpServletRequest request, HttpSession session){
// List<SellUserDto> result = sellService.selectList(parameter);
// return ResponseResult.success(result);
// }
//
// @PublicAccess
// @PostMapping("/api/sell/add/list.api")
// public ResponseEntity<?> addList(@RequestBody SearchData parameter,HttpServletRequest request, HttpSession session){
// List<FileUploadDto> result = sellService.selectAddList(parameter);
// return ResponseResult.success(result);
// }
// @PublicAccess
// @PostMapping("/api/sell/del/upload.api")
// public ResponseData delFileUpload(@RequestBody FileUpload parameter,HttpServletRequest request, HttpSession session){
// if(!sellService.delFileUpload(parameter)) {
// return ResponseData.fail("실패");
// }
// return ResponseData.success();
// }
//
// @ResponseBody
// @PublicAccess
// @PostMapping(value = {"/api/sell/add.api"})
// public ResponseData apiAttachExcelFile(MultipartFile attachFile) {
//
// UploadFileModel uploadFile = fileService.upload(attachFile);
// if (!uploadFile.isResult()) {
// return ResponseData.fail(uploadFile.getMessage());
// }
// Map<String,String> account = ExcelUtil.excelToAccountList(uploadFile.getLocalPath());
// List<SellUser> excelDataList = ExcelUtil.excelToSellList(uploadFile.getLocalPath(), account);
// FileUpload fileUpload = UploadFileModel.of(uploadFile);
// if(!sellService.saveList(fileUpload, excelDataList)) {
// return ResponseData.fail("실패");
// }
// return ResponseData.success(excelDataList);
// }
}
@@ -1,6 +1,7 @@
package com.ns.mobile.website.web.interceptor;
import java.lang.reflect.Method;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@@ -9,7 +10,9 @@ import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.core.env.Environment;
import org.springframework.web.servlet.HandlerInterceptor;
import com.ns.mobile.website.biz.dto.MenuDto;
import com.ns.mobile.website.biz.exception.NotLoginException;
import com.ns.mobile.website.biz.service.MenuService;
import com.ns.mobile.website.common.util.AnnotationUtils;
import com.ns.mobile.website.common.util.DateUtils;
import com.ns.mobile.website.common.util.InterceptorUtils;
@@ -23,6 +26,9 @@ public class FrontInterceptor implements HandlerInterceptor {
@Autowired
private Environment environment;
@Autowired
private MenuService menuService;
private String currentProfile() {
String[] profiles = environment.getActiveProfiles();
@@ -65,8 +71,15 @@ public class FrontInterceptor implements HandlerInterceptor {
if (!checkLogin(request, response, handler)) {
throw new NotLoginException();
}
setMenuList(request, response);
return true;
}
private void setMenuList(HttpServletRequest request, HttpServletResponse response) {
List<MenuDto> menuList = menuService.getMenu();
request.setAttribute("menuList", menuList);
}
}
+1 -1
View File
@@ -1,7 +1,7 @@
spring:
datasource:
driver-class-name: org.mariadb.jdbc.Driver
url: jdbc:mariadb://119.70.122.80:13306/phonessayo?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
url: jdbc:mariadb://119.70.122.80:13306/erp?autoReconnect=true&useUnicode=true&characterEncoding=utf8&serverTimezone=Asia/Seoul
username: kuhan
password: Gnfkqhsh1!
@@ -1,242 +0,0 @@
let appVue = new Vue({
mixins: [MIXIN, PAGING],
el: '#vueApp',
data: {
siteId:'',
detail:{
id: 0
},
phone:{},
color:[{frontImg: '',backImg:'',sideImg:''}],
price:[{releasePrice: 0}],
selectPrice:{}
},
mounted: function () {
this.init();
},
computed: {},
methods: {
init: function () {
let $this = this;
$this.detail.id = $("#phoneId").val();
$this.siteId = $("#siteId").val();
$this.bindDetail();
},
bindDetail: function () {
let $this = this;
let parameter = $this.detail;
nscompany.mobile.api.phone.detail(parameter, function (success, message, data) {
if (!success) {
alert(message);
return false;
}
$this.phone = data.phoneDto;
$this.color = data.phoneColorDtoList;
$this.price = data.phonePriceDtoList;
$this.selectPrice = data.phonePriceDtoList[0];
$this.detail = data;
console.log(data);
});
},
onClickColor: function(e) {
$this = e.currentTarget;
innit2();
// 슬라이드, 이벤트 타켓 가져오기
console.log("클릭이벤트 실행");
jQuery('.colors .circle').removeClass('active');
jQuery($this).find('.circle').addClass('active');
var color_name = jQuery($this).find('p').text();
jQuery('[name="model_color"]').val(color_name);
// 슬라이드 이미지 교체
var url = jQuery($this).attr('data-imgurl');
var color_length = jQuery($this).attr('data-colorcnt');
var top_slider = jQuery('#pd_Slider').find('.swiper-slide');
var bot_slider = jQuery('#pd_thumbs').find('.swiper-slide');
var idx1 = 0;
var idx2 = 0;
for (var i = 1; i <= 3; i++) {
var attr_name = "data-img"+i;
var file_name = jQuery($this).attr(attr_name);
var img_url = url+file_name;
top_slider.eq(idx1).children('img').attr('src',img_url);
++idx1;
}
for (var i = 1; i <= 3; i++) {
var attr_name = "data-img"+i;
var file_name = jQuery($this).attr(attr_name);
var img_url = url+file_name;
bot_slider.eq(idx2).children('img').attr('src',img_url);
++idx2;
}
var stock_el = jQuery($this).find('span:first');
console.log(stock_el);
var loop = +stock_el.attr('data-stockcnt');
var stock_arr =[];
console.log(stock_el);
// 값 가져오기
for (var i = 1; i <= loop; i++) {
var data_name = "data-stock"+i;
var data_val = stock_el.attr(data_name);
if(data_val == "") {
stock_arr.push(false);
console.log("실행");
} else {
stock_arr.push(true);
console.log("실행");
}
}
//select 업데이트하기
var options = jQuery('#size_select option');
console.log(stock_arr);
for (var i = 1; i <= stock_arr.length; i++) {
console.log("selcte판매상태 루프");
if(stock_arr[i-1] == true) {// 판매
options.eq(i).prop('disabled',false);
options.eq(i).text(options.eq(i).attr('data-size'));
} else {// 품절
options.eq(i).prop('disabled',true);
options.eq(i).text(options.eq(i).attr('data-size')+"(품절)");
}
}
selectState(true);
console.log("컬러별 재고 업데이트! 완료");
$("#size_select").val("");
jQuery('#size_select').change(function() {
var index = $("#size_select option").index($("#size_select option:selected"));
if(index == 0)index = 1;
appVue.selectPrice = appVue.price[index-1];
jQuery('[name="model_size"]').val(jQuery($this).find('option:selected').text());
});
jQuery('#size_select').change(get_discount_compare_values);
} // even eid
}//method end
});
var isView = false;
jQuery('.nav>ul>li').mouseenter(function() {
jQuery('.sub-menu').removeClass('view');
jQuery(this).find('.sub-menu').addClass('view');
isView = true;
}).mouseleave(function(event) {
jQuery(this).find('.sub-menu').removeClass('view');
});
var sub_count = jQuery('.sub-menu').length;
for (var i = 0; i < sub_count; i++) {
var children = jQuery('.sub-menu').eq(i).children().length;
var height = 38 * children;
jQuery('.sub-menu').eq(i).css('height', height);
jQuery('.nav>ul>li').eq(i).children('a').removeAttr('href');
}
var galleryThumbs = new Swiper('.gallery-thumbs', {
spaceBetween: 10,
slidesPerView: 3,
freeMode: true,
watchSlidesVisibility: true,
watchSlidesProgress: true,
});
var galleryTop = new Swiper('.gallery-top', {
spaceBetween: 10,
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev',
},
thumbs: {
swiper: galleryThumbs,
},
});
var isMobile_fix = false;
if (jQuery(window).innerWidth() <= 576) {
jQuery(window).scroll(function() {
var top = jQuery(this).scrollTop();
console.log(top);
if (top >= 0 && isMobile_fix == false) {
isMobile_fix = true;
jQuery('header').addClass('scroll');
jQuery('header').addClass('mobile')
jQuery('.usermenu-container').addClass('absol');
jQuery('.usermenu-container').addClass('mobile');
// console.log("스크롤함");
} else if (top <= 0) {
isMobile_fix = false;
jQuery('header').removeClass('scroll');
jQuery('header').removeClass('mobile')
jQuery('.usermenu-container').removeClass('absol');
jQuery('.usermenu-container').removeClass('mobile');
// console.log("맨위로 올라옴");
}
});
}
jQuery(document).ready(function() {
jQuery(".phone_gogo_btn").on("click", function() {
var myNum = jQuery('.phone_gogo').val();
if (myNum.length >= 6) {
jQuery.get("http://luckyphone.kr/wp-admin/admin-ajax.php", {
'action': 'phone_action',
'phone' : myNum
}, function(data) {
/*console.log(data);*/
if (data) {
alert("인증번호가 전송 되었습니다.");
jQuery(".phone_hidden").val(data);
console.log(data);
} else {
alert("실패 하였습니다.");
console.log(data);
}
});
} else {
alert("연락처를 적어주세요");
}
});
});
jQuery(document).ready(function() {
jQuery(".button_div input").on("click", function() {
var phone_hidden = jQuery(".phone_hidden").val();
var phone_gogo = jQuery(".phone_gogo").val();
var phone_hidden_length = phone_hidden.length;
var user_val = jQuery("#recive_num").val();
console.log(phone_hidden_length);
if(phone_hidden_length > 0 && phone_hidden == user_val){
// return true;
alert("가입완료");
return true;
}else{
alert("인증번호를 확인 해주세요.");
return false;
}
});
});
// tabl script
jQuery('.tab-nav li').on('click',function(e){
var idx = jQuery(this).attr('data-idx');
jQuery('.tab-nav li button').removeClass('under-btn active');
jQuery('.tab-nav li').eq(idx).children('button').addClass('under-btn active');
console.log(idx);
jQuery('.tab-content').removeClass('active');
jQuery('.tab-content').eq(idx).addClass('active');
});
@@ -23,14 +23,14 @@ let appVue = new Vue({
let $this = this;
let parameter = $this.detail;
nscompany.mobile.api.phone.list(parameter, function (success, message, data) {
/* nscompany.mobile.api.phone.list(parameter, function (success, message, data) {
if (!success) {
alert(message);
return false;
}
$this.phoneList = data;
});
});*/
},
producerChange: function (event){
let $this = this;
@@ -2,11 +2,12 @@ let appVue = new Vue({
mixins: [MIXIN, PAGING],
el: '#vueApp',
data: {
sellUser:[],
search:{
type:'',
text:''
}
siteId:'',
phoneList:[],
detail:{
producer: '',
priceType: 'terminal'
}
},
mounted: function () {
this.init();
@@ -15,22 +16,25 @@ let appVue = new Vue({
methods: {
init: function () {
let $this = this;
$this.siteId = $("#siteId").val();
$this.bindDetail();
},
bindDetail: function () {
let $this = this;
let parameter = $this.search;
nscompany.mobile.api.phone.sellList(parameter, function (success, message, data) {
let parameter = $this.detail;
nscompany.mobile.api.phone.list(parameter, function (success, message, data) {
if (!success) {
alert(message);
return false;
}
$this.sellUser = data;
console.log(data);
$this.phoneList = data;
});
},
producerChange: function (event){
let $this = this;
$this.bindDetail();
}
}
});
});
@@ -1,102 +0,0 @@
let appVue = new Vue({
mixins: [MIXIN, PAGING],
el: '#vueApp',
data: {
selectedFilename: '',
excelFile: null,
uploadExcelData: [],
uploadList:[]
},
mounted: function () {
this.init();
},
computed: {},
methods: {
init: function () {
let $this = this;
$this.bindList();
},
bindList: function () {
let $this = this;
let parameter = {};
nscompany.mobile.api.phone.addList(parameter, function (success, message, data) {
if (!success) {
alert(message);
return false;
}
$this.uploadList = data;
console.log(data);
});
},
actionFileUpload: function (file) {
let $this = this;
let extension = (file.name.substring(file.name.lastIndexOf('.') + 1) || '').toLowerCase();
let formData = new FormData();
formData.append('attachFile', file);
axios.post('/api/sell/add.api', formData).then(function (response) {
console.log(response);
response.data = response.data || {};
response.data.body = response.data.body || [];
let jsonData = response.data.body;
console.log('############### - FILE');
console.log(jsonData);
$this.uploadExcelData = jsonData;
alert(file.name + " 등록이 완료되었습니다.");
location.reload();
}).catch(function (error) {
console.log('error: ' + error.toString());
alert('error: ' + error.toString());
});
},
onChangeFileInput: function (fileUploadId) {
let $this = this;
let value = document.getElementById(fileUploadId).value || '';
if (value === '') {
return false;
}
let file = document.getElementById(fileUploadId).files[0];
//$this.actionFileUpload(file);
$this.excelFile = file;
$this.selectedFilename = $this.excelFile.name;
console.log('##################### - 1');
console.log($this.excelFile);
},
onClickExcelSave: function () {
let $this = this;
if ($this.excelFile == null) {
alert(' 파일을 선택해 주세요. ');
return false;
}
let $popup = $('#fileLayer');
$this.uploadExcelData = [];
$this.actionFileUpload($this.excelFile);
},
deleteClick: function(id,name) {
let $this = this;
let parameter = {id:id};
nscompany.mobile.api.phone.delUpload(parameter, function (success, message, data) {
if (!success) {
alert(message);
return false;
}
alert(name + " 삭제 되었습니다.");
location.reload();
});
}
}//method end
});
File diff suppressed because one or more lines are too long
+179
View File
@@ -0,0 +1,179 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/view/include/inc_head.jsp"/>
</head>
<body>
<!-- wrapper : s -->
<div class="d-flex" id="wrapper">
<!-- Sidebar : s-->
<jsp:include page="/WEB-INF/view/include/inc_body_sidebar.jsp"/>
<!-- Sidebar : e-->
<!-- container : s-->
<div id="container">
<!-- header : s-->
<jsp:include page="/WEB-INF/view/include/inc_body_header.jsp"/>
<!-- header : e-->
<div class="container-fluid" id="vueApp">
<h3 class="mt-3 mb-3">고객정보 등록</h3>
<h5 class="mt-3 mb-3">거래처 정보</h5>
<div class="border border-2 mb-3">
<div class="row d-flex justify-content-center">
<label for="name" class="col-sm-1 col-form-label mb-3 pt-3">날짜</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="name" value="22-12-29" tabindex="1">
</div>
<label for="birthday" class="col-sm-1 col-form-label mb-3 pt-3">거래처</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="birthday" value="강한" tabindex="2">
</div>
<label for="phoneNumber" class="col-sm-1 col-form-label mb-3 pt-3">통신사</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="phoneNumber" value="LGT" tabindex="3">
</div>
</div>
</div>
<h5 class="mt-3 mb-3">고객정보 등록</h5>
<div class="border border-2 mb-3">
<div class="row d-flex justify-content-center">
<label for="name" class="col-sm-2 col-form-label mb-3 pt-3">이름</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="name" value="한강욱" tabindex="1">
</div>
<div class="vr p-0 m-0"></div>
<label for="pname" class="col-sm-2 col-form-label mb-3 pt-3">법대이름</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="pname" value="황민창" tabindex="4">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="birthday" class="col-sm-2 col-form-label mb-3">생년월일</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="birthday" value="940228" tabindex="2">
</div>
<div class="vr p-0 m-0"></div>
<label for="pbirthday" class="col-sm-2 col-form-label mb-3">법대생년월일</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pbirthday" value="930926" tabindex="5">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="phoneNumber" class="col-sm-2 col-form-label mb-3">핸드폰번호</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="phoneNumber" value="01084068282" tabindex="3">
</div>
<div class="vr p-0"></div>
<label for="pphoneNumber" class="col-sm-2 col-form-label mb-3">법대핸드폰번호</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pphoneNumber" value="01084068282" tabindex="6">
</div>
</div>
</div>
<h5 class="mt-3 mb-3">개통정보</h5>
<div class="border border-2 mb-3">
<div class="row d-flex justify-content-center">
<label for="name" class="col-sm-2 col-form-label mb-3 pt-3">할부개월</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="name" value="24">
</div>
<div class="vr p-0 m-0"></div>
<label for="pname" class="col-sm-2 col-form-label mb-3 pt-3">펫네임</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="pname" value="아이폰12">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="birthday" class="col-sm-2 col-form-label mb-3">일련번호</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="birthday" value="JYNWTXQC7W">
</div>
<div class="vr p-0 m-0"></div>
<label for="pbirthday" class="col-sm-2 col-form-label mb-3">가입구분</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pbirthday" value="MNP">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="phoneNumber" class="col-sm-2 col-form-label mb-3">부가서비스</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="phoneNumber" value="V컬러링">
</div>
<div class="vr p-0"></div>
<label for="pphoneNumber" class="col-sm-2 col-form-label mb-3">요금제</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pphoneNumber" value="5GX 프라임">
</div>
</div>
</div>
<h5 class="mt-3 mb-3">리베이트</h5>
<div class="border border-2 mb-3">
<div class="row d-flex justify-content-center">
<label for="name" class="col-sm-2 col-form-label mb-3 pt-3">계산식</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="name" value="1+2+4+5+6-2">
</div>
<div class="vr p-0 m-0"></div>
<label for="pname" class="col-sm-2 col-form-label mb-3 pt-3">액면R/B</label>
<div class="col-sm-3 mb-3 pt-3">
<input type="text" class="form-control" id="pname" readonly value="160,000">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="birthday" class="col-sm-2 col-form-label mb-3">고객현금</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="birthday" value="130,000">
</div>
<div class="vr p-0 m-0"></div>
<label for="pbirthday" class="col-sm-2 col-form-label mb-3">유심비</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pbirthday" readonly value="7,700">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="birthday" class="col-sm-2 col-form-label mb-3">소개비</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="birthday" value="10,000">
</div>
<div class="vr p-0 m-0"></div>
<label for="pbirthday" class="col-sm-2 col-form-label mb-3">페이백(P/B)</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pbirthday" readonly value="30,000">
</div>
</div>
<div class="row d-flex justify-content-center">
<label for="phoneNumber" class="col-sm-2 col-form-label mb-3">지급예정일자</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="phoneNumber" value="22-12-30">
</div>
<div class="vr p-0"></div>
<label for="pphoneNumber" class="col-sm-2 col-form-label mb-3">페이백(P/B)</label>
<div class="col-sm-3 mb-3">
<input type="text" class="form-control" id="pphoneNumber" value="30,000">
</div>
</div>
</div>
</div>
</div>
</div>
<!-- container : e-->
<script src="/res/front/js/biz/home/index.js?v=${timestamp}"></script>
</body>
</html>
@@ -0,0 +1,40 @@
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<jsp:include page="/WEB-INF/view/include/sample/inc_head.jsp"/>
</head>
<body>
<!-- wrapper : s -->
<div class="d-flex" id="wrapper">
<!-- Sidebar : s-->
<jsp:include page="/WEB-INF/view/include/sample/inc_body_sidebar.jsp"/>
<!-- Sidebar : e-->
<!-- container : s-->
<div id="container">
<!-- header : s-->
<jsp:include page="/WEB-INF/view/include/sample/inc_body_header.jsp"/>
<!-- header : e-->
<div class="container-fluid" id="vueApp">
<h1 class="mt-4">Simple Sidebar</h1>
<p>The starting state of the menu will appear collapsed on smaller screens, and will appear non-collapsed on larger screens. When toggled using the button below, the menu will change.</p>
<p>
Make sure to keep all page content within the
<code>#page-content-wrapper</code>
. The top navbar is optional, and just for demonstration. Just create an element with the
<code>#sidebarToggle</code>
ID which will toggle the menu when clicked.
</p>
</div>
</div>
</div>
<!-- container : e-->
<script src="/res/front/js/biz/home/sample.js?v=${timestamp}"></script>
</body>
</html>
@@ -6,11 +6,15 @@
<div class="border-end bg-white" id="sidebar-wrapper">
<div class="sidebar-heading border-bottom bg-light">Start Bootstrap</div>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>
<c:forEach var="x" items="${menuList}" varStatus="status">
<c:choose>
<c:when test= "${x.upprId == 0 && x.url == null}">
</c:when>
<c:when test= "${x.upprId == 0 && x.url != null}">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="${x.url}">${x.name}</a>
</c:when>
</c:choose>
</c:forEach>
</div>
</div>
@@ -0,0 +1,9 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<footer class="hidden-xs">
<div class="container">
<h6>Copyright© 2023 kuhan. All rights reserved.</h6>
</div>
</footer>
@@ -0,0 +1,27 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<c:set var="urlPath" value="${requestScope['javax.servlet.forward.servlet_path']}" />
<nav class="navbar navbar-expand-lg navbar-light bg-light border-bottom">
<div class="container-fluid">
<button class="btn btn-primary" id="sidebarToggle">Toggle Menu</button>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav ms-auto mt-2 mt-lg-0">
<li class="nav-item active"><a class="nav-link" href="#!">Home</a></li>
<li class="nav-item"><a class="nav-link" href="#!">Link</a></li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" id="navbarDropdown" href="#" role="button" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu dropdown-menu-end" aria-labelledby="navbarDropdown">
<a class="dropdown-item" href="#!">Action</a>
<a class="dropdown-item" href="#!">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#!">Something else here</a>
</div>
</li>
</ul>
</div>
</div>
</nav>
@@ -0,0 +1,16 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="sec" uri="http://www.springframework.org/security/tags"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>
<div class="border-end bg-white" id="sidebar-wrapper">
<div class="sidebar-heading border-bottom bg-light">Start Bootstrap</div>
<div class="list-group list-group-flush">
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Dashboard</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Shortcuts</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Overview</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Events</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Profile</a>
<a class="list-group-item list-group-item-action list-group-item-light p-3" href="#!">Status</a>
</div>
</div>
@@ -0,0 +1,19 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width,initial-scale=1.0,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no">
<title>샘플</title>
<link rel="stylesheet" type="text/css" href="/res/front/css/bootstrap.min.css?v=<%=java.time.LocalDateTime.now()%>">
<link rel="stylesheet" type="text/css" href="/res/front/css/default.css?v=<%=java.time.LocalDateTime.now()%>">
<script type="text/javascript" src="/res/front/js/lib/axios.min.js"></script>
<script type="text/javascript" src="/res/front/js/lib/axios-config.js?v=1"></script>
<script type="text/javascript" src="/res/front/js/lib/vue.js?v=<%=java.time.LocalDateTime.now()%>"></script>
<script type="text/javascript" src="/res/front/js/lib/vue.common.js?v=<%=java.time.LocalDateTime.now()%>"></script>
<script type="text/javascript" src="/res/front/js/lib/bootstrap.bundle.min.js?v=<%=java.time.LocalDateTime.now()%>"></script>
<script type="text/javascript" src="/res/front/js/lib/jquery-3.5.1.min.js?v=<%=java.time.LocalDateTime.now()%>"></script>
<script src="/res/front/js/biz/common/common.js"></script>
<script src="/res/front/js/biz/api/phone-service.js?v=${timestamp}"></script>
-17
View File
@@ -1,17 +0,0 @@
<%@ page contentType="text/html;charset=UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html lang="ko">
<head>
<%-- <jsp:include page="/WEB-INF/view/include/inc_home_head.jsp"/>
<jsp:include page="/WEB-INF/view/include/inc_head_script.jsp"/> --%>
</head>
<body>
<h1> INDEX </h1>
<%-- <jsp:include page="/WEB-INF/view/include/inc_portal_body_footer.jsp"/>
<jsp:include page="/WEB-INF/view/include/inc_home_body_popup.jsp"/> --%>
</body>
</html>