Skip to content

Oaelan/CS_PR3

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

177 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Sample Site 링크 -> https://oaelan.github.io/CS_PR3/

이번 프로젝트에서는 저희 팀은 공급사 입장에서의 수주/출하 시스템을 만들었습니다. 다른 팀에서는 발주, 입고 시스템을 만들어 주셨습니다. 그렇기 때문에 데이터적으로 겹치는 부분들이 많았기 때문에 개별 DB / 공용 DB를 만들어 사용하였습니다. DB 2개를 연결하는 작업은

✔ root-context.xml 파일에서 2개의 DB에 대한 설정 및 MyBatis 관련 설정도 해준다.

	<!-- 공급사 DB -->
	<bean id="hikariConfig1" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql://주소/Supplier?serverTimezone=Asia/Seoul" />
		<property name="username" value="" />
		<property name="password" value="" />
	</bean>

	<bean id="subDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig1" />
	</bean>

	<!-- 공통 DB -->
	<bean id="hikariConfig2" class="com.zaxxer.hikari.HikariConfig">
		<property name="driverClassName" value="com.mysql.cj.jdbc.Driver" />
		<property name="jdbcUrl" value="jdbc:mysql://주소/public_schema?serverTimezone=Asia/Seoul" />
		<property name="username" value="" />
		<property name="password" value="" />
	</bean>

	<bean id="pubDataSource" class="com.zaxxer.hikari.HikariDataSource" destroy-method="close">
		<constructor-arg ref="hikariConfig2" />
	</bean>

	
	<!-- MyBatis 관련 설정 SessionFactory -->
	<bean id="subSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" primary="true">
    <property name="dataSource" ref="subDataSource" />
	</bean>

	<bean id="pubSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean" >
    <property name="dataSource" ref="pubDataSource" />
	</bean>

✔ DataSourceConfig.java 파일을 만들어 각 DB에 맞는 설정을 해준다. 매퍼 인터페이스가 위치한 패키지를 지정한 경로와 매퍼 인터페이스가 실제로 위치한 경로가 같아야 인식을 함 그리고 매퍼.xml 경로도 여기서 설정한 것과 같아야함

DataSourceConfigPub.java  // 공용 테이블
    @Configuration
    @EnableTransactionManagement
    @MapperScan(basePackages = "org.hj.mapper.pub", sqlSessionFactoryRef = "pubSqlSessionFactory")// 매퍼 인터페이스가 위치한 패키지 지정
    public class DataSourceConfigPub {
    	
    	@Bean(name = "pubDataSource")
        @ConfigurationProperties(prefix = "pub.datasource")
        public DataSource subDataSource() {
            return DataSourceBuilder.create().type(HikariDataSource.class).build();
        }
    
        @Bean(name = "pubSqlSessionFactory")
        public SqlSessionFactory subSqlSessionFactory(@Qualifier("pubDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:org/hj/mapper/pub/*Mapper.xml"));
            return sessionFactory.getObject();
        }
    
        @Bean(name = "pubTransactionManager")
        public DataSourceTransactionManager subTransactionManager(@Qualifier("pubDataSource") DataSource dataSource) {
            return new DataSourceT	ransactionManager(dataSource);
        }
    }
    }

DataSourceConfigSub.java // 공급사 전용 테이블
    @Configuration
    @EnableTransactionManagement
    @MapperScan(basePackages = "org.hj.mapper.sub", sqlSessionFactoryRef = "subSqlSessionFactory")// 매퍼 인터페이스가 위치한 패키지 지정
    public class DataSourceConfigSub {
    
        @Primary
        @Bean(name = "subDataSource")
        @ConfigurationProperties(prefix = "sub.datasource")
       
        public DataSource primaryDataSource() {
            return DataSourceBuilder.create().type(HikariDataSource.class).build();
        }
    
        @Primary
        @Bean(name = "subSqlSessionFactory")
        public SqlSessionFactory primarySqlSessionFactory(@Qualifier("subDataSource") DataSource dataSource) throws Exception {
            SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
            sessionFactory.setDataSource(dataSource);
            sessionFactory.setMapperLocations(new PathMatchingResourcePatternResolver().getResources("classpath:org/hj/mapper/sub/*Mapper.xml"));
            return sessionFactory.getObject();
        }
    
        @Primary
        @Bean(name = "subTransactionManager")
        public DataSourceTransactionManager primaryTransactionManager(@Qualifier("subDataSource") DataSource dataSource) {
            return new DataSourceTransactionManager(dataSource);
        }
    }

✔ 매퍼.xml 파일에서는 이런식으로 사용함

<select id="addPno"
		parameterType="org.hj.model.Product_manufacturingDto" resultType="int">
		select p_no from Supplier.productCode <!-- DB명.테이블명 -->
		where p_name = #{p_name};
</select>

✔ 개발환경 image


✔ 프로젝트 관련 DB

Supplier DB (공급사 전용 DB)

  • 물류 창고 온도 테이블
SQL Factory_temp 테이블 생성문

CREATE TABLE Factory_temp ( now_temp double NOT NULL, time datetime DEFAULT current_timestamp(), state varchar(255) DEFAULT NULL )

now_temp time state
double datetime varchar(255)
  • 관리자 테이블
SQL Master 테이블 생성문

CREATE TABLE Master ( m_id varchar(20) NOT NULL, m_pw varchar(20) NOT NULL, PRIMARY KEY (m_id )

m_id m_pw
varchar(20) varchar(20)
  • 상품 테이블
SQL productCode 테이블 생성문

CREATE TABLE productCode ( p_name varchar(255) DEFAULT NULL, p_no int(11) NOT NULL AUTO_INCREMENT, p_price int(11) DEFAULT NULL,PRIMARY KEY (p_no )

p_name p_no p_price
varchar(255) int(11) int(11)

public_schema DB (수요자 전용 DB)

  • 유저 테이블
SQL User 테이블 생성문

CREATE TABLE User ( u_id varchar(20) NOT NULL, u_name varchar(20) NOT NULL, u_pw varchar(20) NOT NULL, u_email varchar(50) NOT NULL, u_address varchar(50) NOT NULL, u_no varchar(10) NOT NULL, PRIMARY KEY (u_id) )

u_id u_name u_pw u_email u_address u_no
varchar(20) varchar(20) varchar(20) varchar(50) varchar(50) varchar(10)
  • 상품 재고 테이블
SQL Product_manufacturing 테이블 생성문

CREATE TABLE Product_manufacturing ( m_date date NOT NULL, p_no int(11) NOT NULL, p_name varchar(20) NOT NULL, p_price int(11) NOT NULL, m_num int(11) NOT NULL, p_limitD date NOT NULL )

m_date p_no p_name p_price m_num p_limitD
date int(11) varchar(20) int(11) int(11) date
  • 주문 테이블
SQL OrderList 테이블 생성문 CREATE TABLE `OrderList` ( `o_no` varchar(20) NOT NULL, `o_id` varchar(20) NOT NULL, `o_address` varchar(255) NOT NULL, `p_no` int(11) NOT NULL, `o_num` int(11) NOT NULL, `o_Total` varchar(20) NOT NULL, `o_date` date NOT NULL, `o_permit` tinyint(1) NULL )
o_no o_id o_address p_no o_num o_Total o_date o_permit
varchar(20) varchar(20) varchar(255) int(11) int(11) varchar(20) date tinyint(1)
  • 배송 위치 테이블
SQL Delivery_GPS 테이블 생성문

CREATE TABLE Delivery_GPS ( d_no int(11) NOT NULL AUTO_INCREMENT, o_no varchar(20) NOT NULL, o_id varchar(20) NOT NULL, o_address varchar(255) NOT NULL, x double DEFAULT NULL, y double DEFAULT NULL, d_complete tinyint(1) DEF... )

d_no o_no o_id o_address x y d_complete
int(11) varchar(20) varchar(20) varchar(255) double double tinyint(1)

** Front-End **

  • 모든 페이지는 BootStrap의 사용 방법을 익혀가며 구현

✨ 제품 등록 페이지

  • BootStrap을 활용하여 재고등록 / 재고목록 / 창고온도 폼을 구현
  • 테이블을 사용하지 않고 BootStrap의 class를 card로 설정하여 각 열과 칸을 구현
  • 버튼을 눌렀을 때 모달 창이 뜨도록 구현

✨ 주문 내역 페이지

  • BootStrap을 활용하여 주문 내역 폼을 구현
  • 테이블을 사용하지 않고 BootStrap의 class를 card로 설정하여 각 열과 칸을 구현
  • 주문일자와 상태를 눌렀을 때 BootStrap을 활용한 드롭다운 메뉴가 나오도록 구현

✨ 출하 관리 페이지

  • BootStrap을 활용하여 출하 관리 폼을 구현
  • 테이블을 사용하지 않고 BootStrap의 class를 card로 설정하여 각 열과 칸을 구현
  • BootStrap으로 출하 시작 버튼 구현

✨ 배송 상태 페이지

  • BootStrap을 활용하여 배송 상태 폼을 구현
  • 테이블을 사용하지 않고 BootStrap의 class를 card로 설정하여 각 열과 칸을 구현
  • KakaoMap API를 활용해서 배송 중인 위치를 띄울 지도를 생성

✨ 거래 명세서

  • html의 table을 활용해서 거래명세서 양식을 구현
  • 출력 버튼 구현

구현한 페이지들

✨ 제품 등록 페이지

image

  • 재고 관리 기능 추가 (재고 추가 / 수정 / 폐기)
  • 재고 검색 기능 추가 (제품코드 또는 제품명으로 검색 가능 / 재고 목록을 누르면 전체 재고 리스트 다시 나옴)
  • 상품 등록 기능 추가 (품명, 단가 만 입력하면 제품 코드는 자동으로 생김(autoincrement))
  • 온도 관련 기능 추가 (물류 창고 데이터 가져오기/현재 창고 온도에 따라 생기는 토스트창 구현) 💖- 온도 로그 년/도/월로 조회 및 온도 상태에 따라 조회 가능한 기능 추가 https://github.com/user-attachments/assets/39db428f-6ade-425b-b1ba-647ac84f385f

✨ 수주 내역 페이지

image

  • 수주 내역 조회 기능(수주 들어온 날짜 정렬기능, 수주 상태 필터 기능 추가)
  • 상세 주문 내역 확인 modal(클릭으로 띄움)
  • 수주 수락, 거절 기능(수락, 거절에 따른 데이터 변경)

✨ 출하 관리 페이지

image

  • 출하 상태에 따른 내역 확인
  • 출하 시작 상태로 변경(배송 데이터로 값이 넘어감)

✨ 배송 상태 페이지

image

  • 전체 배송 내역 조회(클릭으로 확인)
  • 배송 내역마다 위치 확인 기능

✨ 라즈베리 파이 세팅 KakaoTalk_20240730_112023137

  • 온도 측정(BMP180 센서)
  • 소리 출력(VK4PK - MH-FMD-Active-Piezo-Buzzer Module)
  • 온도에 따른 LED ON/OFF 및 소리 발생(저온 파란 led / 저음 발생, 고온 빨간 led / 고음 발생)
  • factory_temp.py로 작동

👍 프로젝트 구현 영상

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •