Skip to content

Commit

Permalink
Merge pull request #48 from mine0697782/master
Browse files Browse the repository at this point in the history
pr
  • Loading branch information
mine0697782 authored May 23, 2024
2 parents 3fe3ab6 + e104b99 commit 451d471
Show file tree
Hide file tree
Showing 11 changed files with 252 additions and 43 deletions.
1 change: 0 additions & 1 deletion pmsMobile
Submodule pmsMobile deleted from fca076
68 changes: 50 additions & 18 deletions src/DBseed.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ const Employee = require('./models/Employee')
const User = require('./models/User')
const Worksite = require('./models/Worksite')
const mongoose = require('mongoose')
const moment = require('moment')
const { randBirth } = require('./utils/utils')
const utils = require('./utils/utils')

connectDB();

Expand All @@ -14,37 +17,66 @@ const makeSeeds = async () => {

// 근로자 콜렉션 초기화
await Employee.deleteMany({})
for (i=1; i<=20; i++) {
const newEmp = new Employee({user: user, name: '근로자'+i, sex: '남', local: '경기도', RRN: '000101-0000000', phonenumber: '010-1234-5678'})

for (i=1; i<=24; i++) {
const name = utils.getRandName()
const {address, local} = utils.getRandAddressAndLocal()
const RRN = utils.getRandBirth()
const phone = utils.getRandPhone()
// const isExistName = Employee.find({name:name})
const newEmp = new Employee({user: user, name: name, sex: '남', local: local, RRN: RRN, phonenumber: phone})

await newEmp.save()
}

// 현장 콜렉션 초기화
await Worksite.deleteMany({})
const date = new Date()
date.setDate(date.getDate()+7)
// date.setHours(8)
const end = new Date(date)
end.setHours(end.getHours()+8)


const emps = await Employee.find({})
for (i=1; i<=10; i++) {
const newWork = new Worksite({user: user, name: '임시현장'+i, address: '국민대학교 미래관', local: '서울 성북구', salary: '110000', worktype: '이삿짐 운반', date: date, end: end, nopr: 10})
const {address, local} = utils.getRandAddressAndLocal()
const sal = 110000 + ((Math.floor(Math.random()*5))*10000)
const worktype = utils.getRandWorktype()
const date = new Date()
date.setDate(date.getDate()+(Math.floor(Math.random()*14)+2))
const end = new Date(date)
end.setHours(end.getHours()+(Math.floor(Math.random()*2))+7)
const nopr = Math.floor(Math.random()*13)+3

const newWork = new Worksite({user: user, name: '현장'+i, address: address, local: local, salary: sal, worktype: worktype, date: date, end: end, nopr: nopr, worksitenote: '현장 메모'})

// 1~3번 현장에 랜덤 인부 배정
if (i <= 3) {
for (j=1; j<=3; j++) {
let ran = Math.floor(Math.random()*emps.length)
newWork.hired.push(emps[ran])
const career = new Career({employee: emps[ran], worksite: newWork})
await career.save()
// 현장에 랜덤 인부 배정
if (i <= 10) {
const ranNopr = Math.floor(Math.random()*nopr)
for (j=1; j<=(nopr-ranNopr); j++) {
let index = Math.floor(Math.random()*emps.length)

// 이미 추가된 근로자는 제외
let isAlreadyHired = false
newWork.hired.some(emp => {
if (emp._id == emps[index]._id) {
isAlreadyHired = true
return true
}
});

// console.log('isAlreadyHired : ', isAlreadyHired)
// if (isAlreadyHired) {
// console.log('hired : ', newWork.hired)
// console.log('to push : ', emps[index])
// }

if (!isAlreadyHired) {
newWork.hired.push(emps[index])
newWork.recieved.push({phone: emps[index].phonenumber, message: '가능합니다'})
const career = new Career({employee: emps[index], worksite: newWork, pay: sal, review: ''})
await career.save()
}

}

}
await newWork.save()
}

}

makeSeeds().then(() => {
Expand Down
2 changes: 1 addition & 1 deletion src/controllers/employeeController.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
const Employee = require('../models/Employee')
const mongoose = require('mongoose');
const Career = require('../models/Career')
const calculateAge = require('../public/js/calcAge')
const calculateAge = require('../utils/calcAge')


/**
Expand Down
44 changes: 44 additions & 0 deletions src/controllers/smsController.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
const { exec } = require('child_process');
const path = require('path');

exports.getsms = async (req, res) => {
console.log('get sms test')
// console.log(req.user)
// console.log(req.body)
res.send('get sms response')
};

exports.postsms = async (req, res) => {
console.log('post sms test')
console.log(req.user)
console.log(req.body)
res.send('post sms response')
};

exports.parseMessage = async (req, res) => {
console.log('parseMessage')
// res.send('python')
// console.log(req.body)

// res.send('dd')
const params = JSON.stringify(req.body);
// console.log(req.body.message)
// console.log('post params: ', params)
const scriptPath = path.join(__dirname, '../../DataExtract/src/script.py')
exec(`python3 ${scriptPath} '${req.body.message}'`, (error, stdout, stderr) => {
if (error) {
console.error(`exec error: ${error}`);
return res.status(500).send(error);
}
if (stderr) {
console.error(`stderr: ${stderr}`);
return res.status(500).send(stderr);
}
// res.send(stdout.trim());
// console.log(stdout.trim())
const result = stdout.trim()
console.log(result)
console.log('exec out')
});

};
23 changes: 17 additions & 6 deletions src/controllers/worksiteController.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ const Employee = require('../models/Employee');
const Career = require('../models/Career')
const mongoose = require('mongoose');
const moment = require('moment');
const calcAge = require('../public/js/calcAge');
const calcAge = require('../utils/calcAge');

require("moment-timezone")
require("moment/locale/ko");
Expand Down Expand Up @@ -186,14 +186,25 @@ exports.deleteMatchedEmployee = async (req, res) => {

exports.showWorksitePayment = async (req, res) => {
console.log('/worksitePayment')
const { id } = req.params;
const worksite = await Worksite.findById(id).populate('hired')
// console.log(worksite)
res.render('worksite/worksitePayments', { worksite, moment, calcAge })
const { id } = req.params;
const worksite = await Worksite.findById(id).populate('hired')
// console.log(worksite)
res.render('worksite/worksitePayments', { worksite, moment, calcAge })
}

exports.searchWorksite = async (req, res) => {
console.log('/searchWorksite')
console.log(req.body)
res.send("searchWorksite")
const key = req.body.key;
const wholeWorksites = await Worksite.find({});
const worksites = wholeWorksites.filter(worksite =>
worksite.name.includes(key) ||
worksite.address.includes(key) ||
worksite.local.includes(key) ||
worksite.worktype.includes(key)
);
// console.log(worksites)
const messages = await req.flash('info');
res.render('worksite/worksite', { messages, worksites, moment })

}
14 changes: 13 additions & 1 deletion src/models/Career.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,19 @@ const careerSchema = new Schema({
type: Schema.Types.ObjectId,
ref: 'Worksite'
},

done: {
type: Boolean,
default: false
},
pay: {
type: Number,
},
review: {
type: String
},
score: {
type: Number,
}
});

module.exports = mongoose.model('Career', careerSchema)
58 changes: 57 additions & 1 deletion src/models/Worksite.js
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,63 @@ const WorksiteSchema = new Schema({
type: Number,
required: true,
},
//채용 확정된 인원
// 채용 희망 인원 (문자 발송 전)
wanted: [
{
type: Schema.ObjectId,
ref: 'Employee',
}
],
// 채용 희망 인원 (문자 발송 후, 수신 전)
sent: [
{
type: Schema.ObjectId,
ref: 'Employee',
}
],
sendMessage: [
{
phone: {
type: String,
required: true,
},
message: {
type: String,
required: true,
},
date: {
type: Date,
required: true,
default: Date.now()
}
}
],
// 받은 문자들을 저장
recieved: [
{
phone: {
type: String,
required: true,
},
message: {
type: String,
required: true,
},
date: {
type: Date,
required: true,
default: Date.now()
}
}
],
// 채용 거절한 인원 (문자 수신 후)
denied: [
{
type: Schema.ObjectId,
ref: 'Employee',
}
],
// 채용 확정(수락)한 인원 (문자 수신 후))
hired: [
{
type: Schema.ObjectId,
Expand Down
File renamed without changes.
61 changes: 61 additions & 0 deletions src/utils/utils.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
exports.getRandBirth = () => {
const year = 99 - Math.floor(Math.random()*25)
const month = Math.floor(Math.random()*12) + 1
const date = Math.floor(Math.random()*28) + 1
let result = `${year}`
if (month < 10) {
result = result + '0' + month
} else {
result = result + month
}

if (date < 10) {
result = result + 0 + date
} else {
result = result + date
}
result = result + '-1'

return result
}

exports.getRandPhone = () => {
const num1 = Math.floor(Math.random()*9000) + 1000
const num2 = Math.floor(Math.random()*9000) + 1000
const result = `010-${num1}-${num2}`
return result
}

exports.getRandAddressAndLocal = () => {
const address = [
'서울특별시 강남구','서울특별시 강동구','서울특별시 강북구','서울특별시 강서구','서울특별시 관악구','서울특별시 광진구','서울특별시 구로구','서울특별시 금천구','서울특별시 노원구','서울특별시 도봉구','서울특별시 동대문구','서울특별시 동작구','서울특별시 마포구','서울특별시 서대문구','서울특별시 서초구','서울특별시 성동구','서울특별시 성북구','서울특별시 송파구','서울특별시 양천구','서울특별시 영등포구','서울특별시 용산구','서울특별시 은평구','서울특별시 종로구','서울특별시 중구','서울특별시 중랑구',
'경기도 가평군','경기도 고양시','경기도 고양시 덕양구','경기도 고양시 일산서구','경기도 고양시 일산동구','경기도 과천시','경기도 광명시','경기도 광주시','경기도 구리시','경기도 군포시','경기도 김포시','경기도 남양주시','경기도 동두천시','경기도 부천시','경기도 부천시 오정구','경기도 부천시 원미구','경기도 부천시 소사구','경기도 성남시','경기도 성남시 중원구','경기도 성남시 수정구','경기도 성남시 분당구','경기도 수원시','경기도 수원시 장안구','경기도 수원시 권선구','경기도 수원시 팔달구','경기도 수원시 영통구','경기도 시흥시','경기도 안산시','경기도 안산시 단원구','경기도 안산시 상록구','경기도 안성시','경기도 안양시','경기도 안양시 만안구','경기도 안양시 동안구','경기도 양주시','경기도 양평군','경기도 여주시','경기도 연천군','경기도 오산시','경기도 용인시','경기도 용인시 처인구','경기도 용인시 기흥구','경기도 용인시 수지구','경기도 의왕시','경기도 의정부시','경기도 이천시','경기도 파주시','경기도 평택시','경기도 포천시','경기도 하남시','경기도 화성시',
'인천광역시','인천광역시 계양구','인천광역시 남동구','인천광역시 동구','인천광역시 미추홀구','인천광역시 부평구','인천광역시 서구','인천광역시 연수구','인천광역시 중구',

]
const locals = [
// 서울 구는 서울 생략
'강남구','강동구','강북구','강서구','관악구','광진구','구로구','금천구','노원구','도봉구','동대문구','동작구','마포구','서대문구','서초구','성동구','성북구','송파구','양천구','영등포구','용산구','은평구','종로구','중구','중랑구',
// 경기도 일반 시는 경기도 생략
'가평군','고양시','고양시 덕양구','고양시 일산서구','고양시 일산동구','과천시','광명시','광주시','구리시','군포시','김포시','남양주시','동두천시','부천시','부천시 오정구','부천시 원미구','부천시 소사구','성남시','성남시 중원구','성남시 수정구','성남시 분당구','수원시','수원시 장안구','수원시 권선구','수원시 팔달구','수원시 영통구','시흥시','안산시','안산시 단원구','안산시 상록구','안성시','안양시','안양시 만안구','안양시 동안구','양주시','양평군','여주시','연천군','오산시','용인시','용인시 처인구','용인시 기흥구','용인시 수지구','의왕시','의정부시','이천시','파주시','평택시','포천시','하남시','화성시',
'인천','인천 계양구','인천 남동구','인천 동구','인천 미추홀구','인천 부평구','인천 서구','인천 연수구','인천 중구',
]
const index = Math.floor(Math.random()*locals.length)
return {address: address[index], local: locals[index]}
}

exports.getRandName = () => {
// 이름은 랜덤 생성기로 30개 생성
const names = ['봉동근', '백지호', '성민웅', '임지석', '황수정', '황다영', '풍은식', '백범석', '허효민', '전혜지', '김성빈', '김수민', '예재민', '전경민', '노영우', '이혜자', '강규희', '안윤희', '정명우', '하상현', '풍인정', '하병옥', '정희원', '조동하', '풍민정', '신정우', '장재선', '문창수', '안재근', '손유원', '고광석', '유정환', '양진미', '유혜준', '노경숙', '류우연', '서광희', '허선화', '배성용', '복성준', '최만희', '백진선', '김보연', '안대현', '정상아', '봉동영', '권명환', '황재윤', '이창호', '서미자', '임태영', '하해성', '탁민혁', '풍영현', '오영철', '손지선', '신소훈', '문준영', '복지현', '안종남']
return names[Math.floor(Math.random()*names.length)]
}

exports.getRandWorktype = () => {
// 이름은 랜덤 생성기로 30개 생성
const worktypes = ['운반', '가구 설치', '가정 이사', '사무실 이전', '내부 이동', '사무 집기', '폐기', '철거']
return worktypes[Math.floor(Math.random()*worktypes.length)]
}

// for (i=0; i<10; i = i+1) {
// console.log(randPhone())
// }
8 changes: 4 additions & 4 deletions src/views/worksite/worksite.ejs
Original file line number Diff line number Diff line change
Expand Up @@ -74,12 +74,12 @@
<th scope="col" class="sortable" onclick="sortTable('hour', 'number')">근무시간</th>
<th scope="col" class="sortable" onclick="sortTable('norp', 'number')">필요인원</th>
<!-- <th scope="col" class="sortable" onclick="sortTable('update', 'date')">작성일(수정일)</th> -->
<th scope="col" class="text-end">Action</th>
<!-- <th scope="col" class="text-end">Action</th> -->
</tr>
</thead>
<tbody>
<% worksites.forEach(worksite => { %>
<tr class="align-middle" onclick="location.href='/worksite/<%= worksite._id %>'">
<tr class="align-middle" style="height: 60px;" onclick="location.href='/worksite/<%= worksite._id %>'">
<td><%= worksite.name %></td>
<td><%= worksite.address %></td>
<td><%= worksite.local %></td>
Expand All @@ -89,7 +89,7 @@
<td><%= moment(worksite.end).diff(worksite.date, 'hour') %>시간</td>
<td><%= worksite.hired.length %> / <%= worksite.nopr %></td>
<!-- <td><%= moment(worksite.updatedAt).format("YYYY년 MMMM Do a hh:mm") %></td> -->
<td class="text-end">
<!-- <td class="text-end">
<div class="d-flex flex-row justify-content-end gap-2">
<a href="/worksite/<%= worksite._id %>" type="button" class="btn btn-primary btn-small">
Expand All @@ -99,7 +99,7 @@
<i class="bi bi-pencil"></i>
</a>
</div>
</td>
</td> -->
</tr>
<% }) %>
</tbody>
Expand Down
Loading

0 comments on commit 451d471

Please sign in to comment.