add main login pulled
This commit is contained in:
commit
98b0542ec1
11
Pipfile
11
Pipfile
|
|
@ -1,11 +0,0 @@
|
|||
[[source]]
|
||||
name = "pypi"
|
||||
url = "https://pypi.org/simple"
|
||||
verify_ssl = true
|
||||
|
||||
[dev-packages]
|
||||
|
||||
[packages]
|
||||
|
||||
[requires]
|
||||
python_version = "3.5"
|
||||
Binary file not shown.
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}隐患统计{% endblock %}
|
||||
|
|
@ -132,3 +133,145 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}在线考试统计{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">在线考试统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>在线考试统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
<div id="examchart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
exam();
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
exam();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function exam() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/examChart?code=exam&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data.data.number);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var examChart = echarts.init(document.getElementById("examchart"));
|
||||
|
||||
var exnum = [];
|
||||
var companyName = [];
|
||||
if (data.data != null) {
|
||||
$.each(data.data, function (i, item) {
|
||||
|
||||
|
||||
exnum.push(item.number);
|
||||
|
||||
companyName.push(item.companyName);
|
||||
|
||||
})
|
||||
examChart.setOption(
|
||||
|
||||
option = {
|
||||
color: ['#32CD32'],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
text: '本集团各公司在线考试统计图'
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
data: ['公司在线考试总数']
|
||||
},
|
||||
grid: {
|
||||
y2: 140
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -30,//-30度角倾斜显示
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
yAxis: {},
|
||||
series: [{
|
||||
name: '公司在线考试总数',
|
||||
data: exnum,
|
||||
type: 'bar'
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
examChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
{% block pagehead %}
|
||||
<h1>
|
||||
|
|
@ -173,4 +174,181 @@
|
|||
map.setCenter([x/num,y/num])
|
||||
})
|
||||
</script>
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
{% block pagehead %}
|
||||
<h1>
|
||||
本月数据
|
||||
<small>Month Data</small>
|
||||
</h1>
|
||||
<ol class="breadcrumb">
|
||||
<li class="active"><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
<!-- Info boxes -->
|
||||
<div class="row">
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-yellow">
|
||||
<div class="inner">
|
||||
<h3>{{troublenum}}</h3>
|
||||
|
||||
<p>事故隐患</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-camera"></i>
|
||||
</div>
|
||||
<a href="{% url 'groups_trouble' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-green">
|
||||
<div class="inner">
|
||||
<h3>{{observenum}}
|
||||
<!-- <sup style="font-size: 20px">%</sup> -->
|
||||
</h3>
|
||||
|
||||
<p>行为观察</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-eye"></i>
|
||||
</div>
|
||||
<a href="{% url 'groups_observe' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-red">
|
||||
<div class="inner">
|
||||
<h3>{{missnum}}</h3>
|
||||
|
||||
<p>未遂事件</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-life-ring"></i>
|
||||
</div>
|
||||
<a href="{% url 'groups_miss' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-aqua">
|
||||
<div class="inner">
|
||||
<h3>{{trainnum}}</h3>
|
||||
|
||||
<p>教育培训</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-graduation-cap"></i>
|
||||
</div>
|
||||
<a href="{% url 'groups_train' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<!-- ./col -->
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-teal">
|
||||
<div class="inner">
|
||||
<h3>{{companynum}}</h3>
|
||||
|
||||
<p>下属公司数</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-industry"></i>
|
||||
</div>
|
||||
<a href="{% url 'groups_company' %}" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="col-lg-2 col-xs-6">
|
||||
<!-- small box -->
|
||||
<div class="small-box bg-orange">
|
||||
<div class="inner">
|
||||
<h3>{{usernum}}</h3>
|
||||
|
||||
<p>下属员工总数</p>
|
||||
</div>
|
||||
<div class="icon">
|
||||
<i class="fa fa-users"></i>
|
||||
</div>
|
||||
<a href="#" class="small-box-footer">更多分析 <i class="fa fa-arrow-circle-right"></i></a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
|
||||
<div class="row">
|
||||
|
||||
<div class="col-md-12">
|
||||
<h3>
|
||||
{{group.groupname}}
|
||||
</h3>
|
||||
<div class="box">
|
||||
<div class="box-header with-border">
|
||||
<h3 class="box-title">公司分布</h3>
|
||||
|
||||
<div class="box-tools pull-right">
|
||||
<button type="button" class="btn btn-box-tool" data-widget="collapse"><i class="fa fa-minus"></i>
|
||||
</button>
|
||||
<button type="button" class="btn btn-box-tool" data-widget="remove"><i class="fa fa-times"></i></button>
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.box-header -->
|
||||
<div class="box-body">
|
||||
<div class="row">
|
||||
<div class="col-md-12">
|
||||
<!-- <p class="text-center">
|
||||
<strong>Sales: 1 Jan, 2014 - 30 Jul, 2014</strong>
|
||||
</p> -->
|
||||
|
||||
<div id="container" style="height: 800px;width:auto">
|
||||
|
||||
</div>
|
||||
<!-- /.chart-responsive -->
|
||||
</div>
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
</div>
|
||||
<!-- ./box-body -->
|
||||
</div>
|
||||
<!-- /.box -->
|
||||
</div>
|
||||
<!-- /.col -->
|
||||
</div>
|
||||
<!-- /.row -->
|
||||
<script src="https://webapi.amap.com/maps?v=1.4.15&key=978fc7c286560aa4cb3f18ef06737f9a"></script>
|
||||
<script>
|
||||
var map = new AMap.Map('container', {
|
||||
resizeEnable: true, //是否监控地图容器尺寸变化
|
||||
zoom: 6, //初始化地图层级
|
||||
center: [116.397428, 39.90923],//初始化地图中心点
|
||||
//viewMode:'3D'//使用3D视图
|
||||
});
|
||||
$.getJSON('/groups/api/positions', function (res) {
|
||||
var x=0,y=0,num=0;
|
||||
for (var i = 0; i < res.data.length; i++) {
|
||||
let podata = res.data[i]
|
||||
if(podata.position !=null){
|
||||
let arrayposition = podata.position.location.split(',')
|
||||
x = x + parseFloat(arrayposition[0])
|
||||
y = y + parseFloat(arrayposition[1])
|
||||
num = num + 1
|
||||
let marker = new AMap.Marker({
|
||||
position: podata.position.location.split(','), // 经纬度对象,也可以是经纬度构成的一维数组[116.39, 39.9]
|
||||
label:{'content':podata.partname,'direction':'bottom'}
|
||||
// title: res.data[i].partname,
|
||||
// bubble:true,
|
||||
// clickable:true
|
||||
});
|
||||
map.add(marker);
|
||||
}
|
||||
}
|
||||
map.setCenter([x/num,y/num])
|
||||
})
|
||||
</script>
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
{% endblock %}
|
||||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}隐患统计{% endblock %}
|
||||
|
|
@ -133,3 +134,146 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}未遂事件统计{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">未遂事件统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>未遂事件统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
<div id="misschart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
miss();
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
miss();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function miss() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/missChart?code=miss&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var missChart = echarts.init(document.getElementById("misschart"));
|
||||
var missnum = [];
|
||||
var companyName = [];
|
||||
if (data.data.misslist != null) {
|
||||
$.each(data.data.misslist, function (i, item) {
|
||||
|
||||
|
||||
missnum.push(item.number);
|
||||
|
||||
companyName.push(item.usecomp__partname);
|
||||
|
||||
})
|
||||
|
||||
missChart.setOption(
|
||||
|
||||
option = {
|
||||
color: ['#dd4b39'],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
text: '本集团各公司未遂事件统计图'
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
data: ['公司未遂事件总数']
|
||||
},
|
||||
grid: {
|
||||
y2: 140
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -30,//-30度角倾斜显示
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
yAxis: {},
|
||||
series: [{
|
||||
name: '公司未遂事件总数',
|
||||
data: missnum,
|
||||
type: 'bar'
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
missChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}隐患统计{% endblock %}
|
||||
|
|
@ -130,3 +131,143 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}行为统计{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">行为观察统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>行为统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
<div id="obvchart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
observe();
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
observe();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function observe() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/observeChart?code=obv&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var obvChart = echarts.init(document.getElementById("obvchart"));
|
||||
var obvnum = [];
|
||||
var companyName = [];
|
||||
if (data.data.observelist != null) {
|
||||
$.each(data.data.observelist, function (i, item) {
|
||||
|
||||
|
||||
obvnum.push(item.number);
|
||||
|
||||
companyName.push(item.usecomp__partname);
|
||||
|
||||
})
|
||||
|
||||
obvChart.setOption(
|
||||
|
||||
option = {
|
||||
color: ['#00a65a'],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
text: '本集团各公司行为观察统计图'
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
data: ['公司行为观察总数']
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -30,//-30度角倾斜显示
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
y2: 140
|
||||
},
|
||||
yAxis: {},
|
||||
series: [{
|
||||
name: '公司行为观察总数',
|
||||
data: obvnum,
|
||||
type: 'bar'
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
obvChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}风险管控{% endblock %}
|
||||
|
|
@ -132,3 +133,180 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}风险管控{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">风险统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>风险统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
<div id="riskchart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
risk();
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
risk();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function risk() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
|
||||
var myChart = echarts.init(document.getElementById("riskchart"));
|
||||
myChart.setOption(option = {
|
||||
title: {
|
||||
text: '集团公司风险点统计图',
|
||||
},
|
||||
legend: {
|
||||
data: ['风险点', '低风险点', '一般风险点', '较大风险点', '重大风险点']
|
||||
},
|
||||
|
||||
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: [],
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value',
|
||||
},
|
||||
series: [],
|
||||
|
||||
});
|
||||
myChart.showLoading();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/riskChart?code=risk&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var datariskact = [];
|
||||
var datariskact1 = [];
|
||||
var datariskact2 = [];
|
||||
var datariskact3 = [];
|
||||
var datariskact4 = [];
|
||||
var companyName = [];
|
||||
if (data!= null) {
|
||||
$.each(data.risks, function (i, item) {
|
||||
|
||||
|
||||
datariskact.push(item.datariskact);
|
||||
datariskact1.push(item.datariskact1);
|
||||
datariskact2.push(item.datariskact2);
|
||||
datariskact3.push(item.datariskact3);
|
||||
datariskact4.push(item.datariskact4);
|
||||
companyName.push(item.companyName);
|
||||
|
||||
})
|
||||
if (data) {
|
||||
myChart.hideLoading(); //隐藏加载动画
|
||||
myChart.setOption({
|
||||
xAxis: {
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -10,//-30度角倾斜显示
|
||||
}
|
||||
},
|
||||
series: [{
|
||||
name: '风险点',
|
||||
type: 'bar',
|
||||
|
||||
data: datariskact
|
||||
}, {
|
||||
name: '低风险点',
|
||||
type: 'bar',
|
||||
stack: '风险点',
|
||||
color: 'blue',
|
||||
data: datariskact1
|
||||
},
|
||||
{
|
||||
name: '一般风险点',
|
||||
type: 'bar',
|
||||
stack: '风险点',
|
||||
color: 'yellow',
|
||||
data: datariskact2
|
||||
}, {
|
||||
name: '较大风险点',
|
||||
type: 'bar',
|
||||
stack: '风险点',
|
||||
color: 'orange',
|
||||
data: datariskact3
|
||||
}, {
|
||||
name: '重大风险点',
|
||||
type: 'bar',
|
||||
stack: '风险点',
|
||||
color: 'red',
|
||||
data:datariskact4
|
||||
}]
|
||||
});
|
||||
|
||||
}
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
|
||||
myChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}教育培训统计{% endblock %}
|
||||
|
|
@ -134,3 +135,147 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}教育培训统计{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">教育培训统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>教育培训统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
|
||||
|
||||
|
||||
<div id="trainchart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
train();
|
||||
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
|
||||
train();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
function train() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/trainChart?code=train&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var trainChart = echarts.init(document.getElementById("trainchart"));
|
||||
|
||||
var trainnum = [];
|
||||
var companyName = [];
|
||||
if (data.data.trainlist != null) {
|
||||
$.each(data.data.trainlist, function (i, item) {
|
||||
|
||||
|
||||
trainnum.push(item.number);
|
||||
|
||||
companyName.push(item.usecomp__partname);
|
||||
|
||||
})
|
||||
|
||||
trainChart.setOption(
|
||||
|
||||
option = {
|
||||
color: ['#00c0ef'],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
text: '本集团各公司教育培训统计图'
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
data: ['公司教育培训总数']
|
||||
},
|
||||
grid: {
|
||||
y2: 140
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -30,//-30度角倾斜显示
|
||||
}
|
||||
|
||||
|
||||
},
|
||||
yAxis: {},
|
||||
series: [{
|
||||
name: '公司教育培训总数',
|
||||
data: trainnum,
|
||||
type: 'bar'
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
trainChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
|
|
@ -1,3 +1,4 @@
|
|||
<<<<<<< HEAD
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}隐患统计{% endblock %}
|
||||
|
|
@ -127,3 +128,140 @@
|
|||
|
||||
</script>
|
||||
{% endblock %}
|
||||
=======
|
||||
{% extends "./base.html" %}
|
||||
|
||||
{% block title %}隐患统计{% endblock %}
|
||||
{% block pagehead %}
|
||||
|
||||
<ol class="breadcrumb">
|
||||
<li><a href="{% url 'groups_index' %}"><i class="fa fa-dashboard"></i> 主页</a></li>
|
||||
<li class="active">隐患统计</li>
|
||||
</ol>
|
||||
{% endblock %}
|
||||
{% block content %}
|
||||
{% load static %}
|
||||
<div class="callout callout-warning" style="margin-top: 20px;">
|
||||
<h3>隐患统计</h3>
|
||||
</div>
|
||||
<div style="height:600px;width:100%;background-color:#dac2a3">
|
||||
<div style="width:100%;height:100px;">
|
||||
开始日期:<input type="text" id="test">
|
||||
结束日期:<input type="text" id="test2">
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
</div>
|
||||
|
||||
<div id="troubchart" style="width:60%;height:400px;margin:auto"></div>
|
||||
</div>
|
||||
<!-- jQuery 3 -->
|
||||
<script src="{% static 'groups/bower_components/jquery/dist/jquery.min.js' %}"></script>
|
||||
<!-- Bootstrap 3.3.7 -->
|
||||
<script src="{% static 'groups/bower_components/bootstrap/dist/js/bootstrap.min.js' %}"></script>
|
||||
|
||||
<script src="{% static 'groups/time/laydate/laydate.js' %}"></script>
|
||||
<link rel="stylesheet" href="{% static 'groups/time/laydate/theme/default/laydate.css' %}">
|
||||
<!-- iCheck -->
|
||||
<script src="{% static 'groups/plugins/iCheck/icheck.min.js' %}"></script>
|
||||
<script src="{% static 'groups/bower_components/echarts.min.js' %}"></script>
|
||||
<script type="text/javascript">
|
||||
//隐患数量趋势图
|
||||
|
||||
|
||||
$(function () {
|
||||
|
||||
laydate.render({
|
||||
elem: '#test'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
laydate.render({
|
||||
elem: '#test2'
|
||||
, format: 'yyyy-MM-dd' //可任意组合
|
||||
});
|
||||
troub();
|
||||
|
||||
});
|
||||
function funTypeChange() {
|
||||
troub();
|
||||
}
|
||||
function troub() {
|
||||
|
||||
var start = $("#test").val();
|
||||
var end = $("#test2").val();
|
||||
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "/groups/api/troubleChart?code=tbpic&start=" + start + "&end=" + end, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
console.log(data.data.troublelist);
|
||||
console.log(data.num);
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
var yhChart = echarts.init(document.getElementById("troubchart"));
|
||||
var yhnum = [];
|
||||
var companyName = [];
|
||||
if (data.data.troublelist != null) {
|
||||
$.each(data.data.troublelist, function (i, item) {
|
||||
|
||||
|
||||
yhnum.push(item.number);
|
||||
|
||||
companyName.push(item.usecomp__partname);
|
||||
|
||||
})
|
||||
|
||||
yhChart.setOption(
|
||||
|
||||
option = {
|
||||
color: ['#FF7F50'],
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
text: '本集团各公司隐患统计图'
|
||||
},
|
||||
tooltip: {},
|
||||
legend: {
|
||||
data: ['公司隐患总数']
|
||||
},
|
||||
grid: {
|
||||
y2: 140
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: companyName,
|
||||
boundaryGap: [0, 0.01],
|
||||
axisLabel: {
|
||||
interval: 0,//横轴信息全部显示
|
||||
rotate: -30,//-30度角倾斜显示
|
||||
}
|
||||
},
|
||||
yAxis: {},
|
||||
series: [{
|
||||
name: '公司隐患总数',
|
||||
data: yhnum,
|
||||
type: 'bar'
|
||||
}]
|
||||
|
||||
}
|
||||
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
yhChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
|
||||
</script>
|
||||
{% endblock %}
|
||||
>>>>>>> 3bc970596107f51c6970b99f250cfccf1d7d4345
|
||||
|
|
|
|||
238
groups/views.py
238
groups/views.py
|
|
@ -1,4 +1,4 @@
|
|||
from django.http import HttpResponse,JsonResponse
|
||||
from django.http import HttpResponse, JsonResponse
|
||||
from django.shortcuts import render
|
||||
from django.shortcuts import redirect
|
||||
from .models import Group, GroupUser
|
||||
|
|
@ -8,21 +8,24 @@ from safesite.tasks import gettime
|
|||
import requests
|
||||
import json
|
||||
import time
|
||||
from datetime import datetime,date,timedelta
|
||||
from datetime import datetime, date, timedelta
|
||||
from django.core.serializers.json import DjangoJSONEncoder
|
||||
from django.db.models import Q,F,Count,Sum
|
||||
from django.db.models import Q, F, Count, Sum
|
||||
from django.forms.models import model_to_dict
|
||||
from django.http import Http404
|
||||
|
||||
|
||||
def check_login(func): # 自定义登录验证装饰器
|
||||
def warpper(request,*args,**kwargs):
|
||||
def warpper(request, *args, **kwargs):
|
||||
is_login = request.session.get('is_login', False)
|
||||
if is_login:
|
||||
return func(request,*args,**kwargs)
|
||||
return func(request, *args, **kwargs)
|
||||
else:
|
||||
return redirect('/groups/login')
|
||||
|
||||
return warpper
|
||||
|
||||
|
||||
def login(request):
|
||||
# 不允许重复登录
|
||||
if request.session.get('is_login', None):
|
||||
|
|
@ -51,47 +54,56 @@ def login(request):
|
|||
groups_form = GroupUserForm()
|
||||
return render(request, 'groups/login.html', locals())
|
||||
|
||||
|
||||
def logout(request):
|
||||
# if not request.session.get('is_login', None):
|
||||
# return redirect('/groups/login')
|
||||
request.session.flush()
|
||||
return redirect('/groups/login')
|
||||
|
||||
|
||||
import json
|
||||
from captcha.models import CaptchaStore
|
||||
from captcha.helpers import captcha_image_url
|
||||
|
||||
|
||||
def refresh_captcha(request):
|
||||
hashkey = CaptchaStore.generate_key()
|
||||
image_url = captcha_image_url(hashkey)
|
||||
return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
|
||||
|
||||
|
||||
@check_login
|
||||
def company(request):
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
for i in companys:
|
||||
i.useradmin = s_models.User.objects.get(ubelongpart=i,issuper=1).username
|
||||
i.useradmin = s_models.User.objects.get(ubelongpart=i, issuper=1).username
|
||||
return render(request, 'groups/company.html', locals())
|
||||
|
||||
|
||||
def job(request):
|
||||
return render(request, 'groups/job.html', locals())
|
||||
|
||||
|
||||
def company_user(request, cid):
|
||||
users = s_models.User.objects.filter(usecomp=cid)
|
||||
# for user in users:
|
||||
# dump(user)
|
||||
return render(request, 'groups/company_user.html', locals())
|
||||
|
||||
|
||||
def company_userdetail(request, uid):
|
||||
try:
|
||||
user = s_models.User.objects.get(pk=uid)
|
||||
except s_models.User.DoesNotExist:
|
||||
raise Http404("User does not exist")
|
||||
|
||||
#UserForm.set_usecomp(s_models.Partment.objects.filter(group__id=1))
|
||||
# UserForm.set_usecomp(s_models.Partment.objects.filter(group__id=1))
|
||||
user_form = UserForm(model_to_dict(user))
|
||||
|
||||
return render(request, 'groups/company_userdetail.html', locals())
|
||||
|
||||
|
||||
def groups_userupdate(request):
|
||||
if request.method == 'POST':
|
||||
user_form = UserForm(request.POST)
|
||||
|
|
@ -120,7 +132,7 @@ def groups_userupdate(request):
|
|||
model_user.save()
|
||||
|
||||
for i in s_models.Group.objects.filter(usecomp=usecomp):
|
||||
i.users.remove(model_user)
|
||||
i.users.remove(model_user)
|
||||
groupobj = s_models.Group.objects.filter(usecomp=usecomp, grouptype=3).first()
|
||||
groupobj.users.add(model_user)
|
||||
else:
|
||||
|
|
@ -129,6 +141,7 @@ def groups_userupdate(request):
|
|||
else:
|
||||
return redirect('/groups/company/')
|
||||
|
||||
|
||||
def company_userchange_page(request, uid):
|
||||
try:
|
||||
user = s_models.User.objects.get(pk=uid)
|
||||
|
|
@ -138,39 +151,45 @@ def company_userchange_page(request, uid):
|
|||
|
||||
return render(request, 'groups/company_userchange.html', locals())
|
||||
|
||||
|
||||
def dump(obj):
|
||||
print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
|
||||
|
||||
|
||||
@check_login
|
||||
def index(req):
|
||||
first_day,first_day_of_next_month=gettime()
|
||||
group = GroupUser.objects.get(id = req.session['user_id']).group
|
||||
first_day, first_day_of_next_month = gettime()
|
||||
group = GroupUser.objects.get(id=req.session['user_id']).group
|
||||
companys = group.members.all()
|
||||
troublenum = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys,fxsj__range=(first_day, first_day_of_next_month)).count()
|
||||
observenum = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys,looktime__range=(first_day, first_day_of_next_month)).count()
|
||||
missnum = s_models.Miss.objects.filter(deletemark=1,usecomp__in=companys,misstime__range=(first_day, first_day_of_next_month)).count()
|
||||
trainnum = s_models.Train.objects.filter(deletemark=1,usecomp__in=companys,starttime__range=(first_day, first_day_of_next_month)).count()
|
||||
troublenum = s_models.Trouble.objects.filter(deletemark=1, usecomp__in=companys,
|
||||
fxsj__range=(first_day, first_day_of_next_month)).count()
|
||||
observenum = s_models.Observe.objects.filter(deletemark=1, usecomp__in=companys,
|
||||
looktime__range=(first_day, first_day_of_next_month)).count()
|
||||
missnum = s_models.Miss.objects.filter(deletemark=1, usecomp__in=companys,
|
||||
misstime__range=(first_day, first_day_of_next_month)).count()
|
||||
trainnum = s_models.Train.objects.filter(deletemark=1, usecomp__in=companys,
|
||||
starttime__range=(first_day, first_day_of_next_month)).count()
|
||||
companynum = len(companys)
|
||||
usernum = s_models.User.objects.filter(deletemark=1,usecomp__in=companys).count()
|
||||
usernum = s_models.User.objects.filter(deletemark=1, usecomp__in=companys).count()
|
||||
return render(req, 'groups/index.html', locals())
|
||||
|
||||
|
||||
def updateposition(req):
|
||||
allcompanys = s_models.Partment.objects.filter(deletemark=1,iscompany=1)
|
||||
allcompanys = s_models.Partment.objects.filter(deletemark=1, iscompany=1)
|
||||
for i in allcompanys:
|
||||
address = i.partname
|
||||
data = getPosition(address)
|
||||
if data['status'] == '1' and int(data['count'])>0:
|
||||
if data['status'] == '1' and int(data['count']) > 0:
|
||||
i.position = data['geocodes'][0]
|
||||
i.save()
|
||||
else:
|
||||
address = i.partname.replace('公司','').replace('责任','').replace('有限','')
|
||||
address = i.partname.replace('公司', '').replace('责任', '').replace('有限', '')
|
||||
data = getPosition(address)
|
||||
if data['status'] == '1' and int(data['count'])>0:
|
||||
if data['status'] == '1' and int(data['count']) > 0:
|
||||
i.position = data['geocodes'][0]
|
||||
i.save()
|
||||
return JsonResponse({"code":1})
|
||||
return JsonResponse({"code": 1})
|
||||
|
||||
|
||||
def getPosition(address):
|
||||
url = 'http://restapi.amap.com/v3/geocode/geo'
|
||||
|
|
@ -179,101 +198,138 @@ def getPosition(address):
|
|||
json_data = json.loads(res.text)
|
||||
return json_data
|
||||
|
||||
|
||||
def apipositions(req):
|
||||
companys = GroupUser.objects.get(id = req.session['user_id']).group.members.all()
|
||||
positions = companys.values('position','partname')
|
||||
return JsonResponse({"code":1,"data":list(positions)})
|
||||
def trouble(request):#隐患排查
|
||||
companys = GroupUser.objects.get(id=req.session['user_id']).group.members.all()
|
||||
positions = companys.values('position', 'partname')
|
||||
return JsonResponse({"code": 1, "data": list(positions)})
|
||||
|
||||
|
||||
def trouble(request): # 隐患排查
|
||||
return render(request, 'groups/troublepic.html', locals())
|
||||
def observe(request):#行为观察
|
||||
|
||||
|
||||
def observe(request): # 行为观察
|
||||
return render(request, 'groups/observe.html', locals())
|
||||
def miss(request):#未遂事件
|
||||
|
||||
|
||||
def miss(request): # 未遂事件
|
||||
return render(request, 'groups/miss.html', locals())
|
||||
def risk(request):#风险管控
|
||||
|
||||
|
||||
def risk(request): # 风险管控
|
||||
return render(request, 'groups/risk.html', locals())
|
||||
def train(request):#教育培训
|
||||
|
||||
|
||||
def train(request): # 教育培训
|
||||
return render(request, 'groups/train.html', locals())
|
||||
def exam(request):#在线考试
|
||||
|
||||
|
||||
def exam(request): # 在线考试
|
||||
return render(request, 'groups/exam.html', locals())
|
||||
def troubleChart(request):#隐患统计图
|
||||
|
||||
|
||||
def troubleChart(request): # 隐患统计图
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
if code=='tbpic':
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
troublelist = s_models.Trouble.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('troubleid'))
|
||||
if start:
|
||||
troublelist = troublelist.filter(fxsj__gte=start)
|
||||
if end:
|
||||
troublelist = troublelist.filter(fxsj__lte=end)
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'troublelist':list(troublelist)}}), content_type='application/json')
|
||||
def observeChart(request):#行为观察
|
||||
if code == 'tbpic':
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
troublelist = s_models.Trouble.objects.filter(deletemark=1, usecomp__in=companys).values('usecomp__partid',
|
||||
'usecomp__partname').annotate(
|
||||
number=Count('troubleid'))
|
||||
if start:
|
||||
troublelist = troublelist.filter(fxsj__gte=start)
|
||||
if end:
|
||||
troublelist = troublelist.filter(fxsj__lte=end)
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': {'troublelist': list(troublelist)}}),
|
||||
content_type='application/json')
|
||||
|
||||
|
||||
def observeChart(request): # 行为观察
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
if code=='obv':
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
observelist = s_models.Observe.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('lookid'))
|
||||
if start:
|
||||
observelist = observelist.filter(looktime__gte=start)
|
||||
if end:
|
||||
observelist = observelist.filter(looktime__lte=end)
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'observelist':list(observelist)}}), content_type='application/json')
|
||||
|
||||
def missChart(request):#未遂事件
|
||||
if code == 'obv':
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
observelist = s_models.Observe.objects.filter(deletemark=1, usecomp__in=companys).values('usecomp__partid',
|
||||
'usecomp__partname').annotate(
|
||||
number=Count('lookid'))
|
||||
if start:
|
||||
observelist = observelist.filter(looktime__gte=start)
|
||||
if end:
|
||||
observelist = observelist.filter(looktime__lte=end)
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': {'observelist': list(observelist)}}),
|
||||
content_type='application/json')
|
||||
|
||||
|
||||
def missChart(request): # 未遂事件
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
if code=='miss':
|
||||
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
misslist = s_models.Miss.objects.filter(deletemark=1,usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('missid'))
|
||||
if start:
|
||||
misslist = misslist.filter(misstime__gte=start)
|
||||
if end:
|
||||
misslist = misslist.filter(misstime__lte=end)
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'misslist':list(misslist)}}), content_type='application/json')
|
||||
|
||||
def riskChart(request):#风险管控
|
||||
if code == 'miss':
|
||||
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
misslist = s_models.Miss.objects.filter(deletemark=1, usecomp__in=companys).values('usecomp__partid',
|
||||
'usecomp__partname').annotate(
|
||||
number=Count('missid'))
|
||||
if start:
|
||||
misslist = misslist.filter(misstime__gte=start)
|
||||
if end:
|
||||
misslist = misslist.filter(misstime__lte=end)
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': {'misslist': list(misslist)}}),
|
||||
content_type='application/json')
|
||||
|
||||
|
||||
def riskChart(request): # 风险管控
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
if code=='risk':
|
||||
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
risklist = s_models.Risk.objects.filter(usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('id'))
|
||||
if start:
|
||||
risklist = risklist.filter(createtime__gte=start)
|
||||
if end:
|
||||
risklist = risklist.filter(createtime__lte=end)
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'risklist':list(risklist)}}), content_type='application/json')
|
||||
def trainChart(request):#教育培训
|
||||
if code == 'risk':
|
||||
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
risklist = s_models.Risk.objects.filter(usecomp__in=companys).values('usecomp__partid',
|
||||
'usecomp__partname').annotate(
|
||||
number=Count('id'))
|
||||
if start:
|
||||
risklist = risklist.filter(createtime__gte=start)
|
||||
if end:
|
||||
risklist = risklist.filter(createtime__lte=end)
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': {'risklist': list(risklist)}}),
|
||||
content_type='application/json')
|
||||
|
||||
|
||||
def trainChart(request): # 教育培训
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
if code=='train':
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
trainlist = s_models.Train.objects.filter(usecomp__in=companys).values('usecomp__partid','usecomp__partname').annotate(number = Count('trainid'))
|
||||
if start:
|
||||
trainlist = trainlist.filter(starttime__gte=start)
|
||||
if end:
|
||||
trainlist = trainlist.filter(starttime__lte=end)
|
||||
return HttpResponse(json.dumps({'code':1,'data':{'trainlist':list(trainlist)}}), content_type='application/json')
|
||||
|
||||
def examChart(request):#在线考试
|
||||
if code == 'train':
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
trainlist = s_models.Train.objects.filter(usecomp__in=companys).values('usecomp__partid',
|
||||
'usecomp__partname').annotate(
|
||||
number=Count('trainid'))
|
||||
if start:
|
||||
trainlist = trainlist.filter(starttime__gte=start)
|
||||
if end:
|
||||
trainlist = trainlist.filter(starttime__lte=end)
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': {'trainlist': list(trainlist)}}),
|
||||
content_type='application/json')
|
||||
|
||||
|
||||
def examChart(request): # 在线考试
|
||||
code = request.GET.get('code')
|
||||
start = request.GET.get('start')
|
||||
end = request.GET.get('end')
|
||||
examjson = []
|
||||
if code=='exam':
|
||||
companys = GroupUser.objects.get(id = request.session['user_id']).group.members.all()
|
||||
|
||||
for i in companys:
|
||||
examlist = s_models.ExamTest.objects.filter(usecomps__contains=','+i+',').count()
|
||||
if start:
|
||||
if code == 'exam':
|
||||
companys = GroupUser.objects.get(id=request.session['user_id']).group.members.all()
|
||||
|
||||
for i in companys:
|
||||
examlist = s_models.ExamTest.objects.filter(usecomps__contains=',' + i + ',').count()
|
||||
if start:
|
||||
examlist = examlist.filter(starttime__gte=start)
|
||||
if end:
|
||||
if end:
|
||||
examlist = examlist.filter(starttime__lte=end)
|
||||
examjson.append({'companyName':i.Partment,'number':Partment})
|
||||
return HttpResponse(json.dumps({'code':1,'data':examjson}), content_type='application/json')
|
||||
|
||||
examjson.append({'companyName': i.Partment, 'number': Partment})
|
||||
return HttpResponse(json.dumps({'code': 1, 'data': examjson}), content_type='application/json')
|
||||
|
||||
|
|
|
|||
|
|
@ -10,7 +10,7 @@ For the full list of settings and their values, see
|
|||
https://docs.djangoproject.com/en/1.11/ref/settings/
|
||||
"""
|
||||
|
||||
import os
|
||||
import os,time
|
||||
import psycopg2.extensions
|
||||
|
||||
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
|
||||
|
|
@ -146,5 +146,82 @@ CELERY_ENABLE_UTC=True
|
|||
|
||||
##配置session
|
||||
SESSION_EXPIRE_AT_BROWSER_CLOSE = True
|
||||
SESSION_COOKIE_AGE = 1800
|
||||
SESSION_SAVE_EVERY_REQUEST = True
|
||||
|
||||
#日志配置
|
||||
# 创建日志的路径
|
||||
LOG_PATH = os.path.join(BASE_DIR, 'log')
|
||||
# 如果地址不存在,则自动创建log文件夹
|
||||
if not os.path.join(LOG_PATH):
|
||||
os.mkdir(LOG_PATH)
|
||||
LOGGING = {
|
||||
'version': 1,
|
||||
'disable_existing_loggers': True,
|
||||
'formatters': {
|
||||
# 日志格式
|
||||
'standard': {
|
||||
'format': '[%(asctime)s] [%(filename)s:%(lineno)d] [%(module)s:%(funcName)s] '
|
||||
'[%(levelname)s]- %(message)s'},
|
||||
'simple': { # 简单格式
|
||||
'format': '%(levelname)s %(message)s'
|
||||
},
|
||||
},
|
||||
# 过滤
|
||||
'filters': {
|
||||
},
|
||||
# 定义具体处理日志的方式
|
||||
'handlers': {
|
||||
# 默认记录所有日志
|
||||
'default': {
|
||||
'level': 'INFO',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(LOG_PATH, 'all-{}.log'.format(time.strftime('%Y-%m-%d'))),
|
||||
'maxBytes': 1024 * 1024 * 5, # 文件大小
|
||||
'backupCount': 5, # 备份数
|
||||
'formatter': 'standard', # 输出格式
|
||||
'encoding': 'utf-8', # 设置默认编码,否则打印出来汉字乱码
|
||||
},
|
||||
# 输出错误日志
|
||||
'error': {
|
||||
'level': 'ERROR',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(LOG_PATH, 'error-{}.log'.format(time.strftime('%Y-%m-%d'))),
|
||||
'maxBytes': 1024 * 1024 * 5, # 文件大小
|
||||
'backupCount': 5, # 备份数
|
||||
'formatter': 'standard', # 输出格式
|
||||
'encoding': 'utf-8', # 设置默认编码
|
||||
},
|
||||
# 控制台输出
|
||||
'console': {
|
||||
'level': 'DEBUG',
|
||||
'class': 'logging.StreamHandler',
|
||||
'formatter': 'standard'
|
||||
},
|
||||
# 输出info日志
|
||||
'info': {
|
||||
'level': 'INFO',
|
||||
'class': 'logging.handlers.RotatingFileHandler',
|
||||
'filename': os.path.join(LOG_PATH, 'info-{}.log'.format(time.strftime('%Y-%m-%d'))),
|
||||
'maxBytes': 1024 * 1024 * 5,
|
||||
'backupCount': 5,
|
||||
'formatter': 'standard',
|
||||
'encoding': 'utf-8', # 设置默认编码
|
||||
},
|
||||
},
|
||||
# 配置用哪几种 handlers 来处理日志
|
||||
'loggers': {
|
||||
# 类型 为 django 处理所有类型的日志, 默认调用
|
||||
'django': {
|
||||
'handlers': ['default', 'console'],
|
||||
'level': 'INFO',
|
||||
'propagate': False
|
||||
},
|
||||
# log 调用时需要当作参数传入
|
||||
'log': {
|
||||
'handlers': ['error', 'info', 'console', 'default'],
|
||||
'level': 'INFO',
|
||||
'propagate': True
|
||||
},
|
||||
}
|
||||
}
|
||||
|
|
@ -268,7 +268,7 @@ def drusers(companyid,path):
|
|||
wb = load_workbook(path)
|
||||
sheet = wb.worksheets[0]
|
||||
partdict = {}
|
||||
groupdict = {}
|
||||
# groupdict = {}
|
||||
userdict = {}
|
||||
parts = Partment.objects.filter(partlink__contains=',' + companyid + ',')|Partment.objects.filter(partid=companyid) #获取所有部门
|
||||
for i in parts:
|
||||
|
|
|
|||
|
|
@ -101,15 +101,15 @@ canvas{
|
|||
}
|
||||
|
||||
.login{z-index: 2;position:absolute;width: 350px;border-radius: 5px;height: 500px;box-shadow: 0px 0px 5px #333333;background:white;top: 50%;left: 50%;margin-top: -250px;margin-left: -175px;transition: all 1s;-moz-transition: all 1s; /* Firefox 4 */-webkit-transition: all 1s; /* Safari 和 Chrome */-o-transition: all 1s; /* Opera */}
|
||||
.login-top{font-size: 24px;margin-top: 100px;padding-left: 40px;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
|
||||
.login-top{font-size: 24px;margin-top: 100px;text-align: center;;box-sizing: border-box;color: #333333;margin-bottom: 50px;font-family:"微软雅黑";font-weight:bold;color:dodgerblue}
|
||||
.login-center{width: 100%;box-sizing: border-box;padding: 0 40px;margin-bottom: 30px;}
|
||||
.login-center-img{width: 20px;height: 20px;float: left;margin-top: 5px;}
|
||||
.login-center-img>img{width: 100%;}
|
||||
.login-center-input{float: left;width: 230px;margin-left: 15px;height: 30px;position: relative;}
|
||||
.login-center-input{float: left;width: 80%;margin-left: 15px;height: 30px;position: relative;}
|
||||
.login-center-input input{z-index: 2;transition: all 0.5s;padding-left: 10px;color: #333333;width: 100%;height: 30px;border: 0;border-bottom: 1px solid #cccccc;border-top: 1px solid #ffffff;border-left: 1px solid #ffffff;border-right: 1px solid #ffffff;box-sizing: border-box;outline: none;position: relative;}
|
||||
.login-center-input input:focus{border: 1px solid dodgerblue;}
|
||||
.login-center-input-text{background: white;padding: 0 5px;position: absolute;z-index: 0;opacity: 0;height: 20px;top: 50%;margin-top: -10px;font-size: 14px;left: 5px;color: dodgerblue;line-height: 20px;transition: all 0.5s;-moz-transition: all 0.5s; /* Firefox 4 */-webkit-transition: all 0.5s; /* Safari 和 Chrome */-o-transition: all 0.5s; /* Opera */}
|
||||
.login-center-input input:focus~.login-center-input-text{top: 0;z-index: 3;opacity: 1;margin-top: -15px;}
|
||||
.login.active{-webkit-animation: login-small 0.8s ; animation: login-small 0.8s ;animation-fill-mode:forwards;-webkit-animation-fill-mode:forwards}
|
||||
.login-button{cursor: pointer;width: 250px;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;border-radius: 5px;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}
|
||||
.login-button{cursor: pointer;width: 80%;text-align: center;height: 40px;line-height: 40px;background-color: dodgerblue;margin: 0 auto;margin-top: 50px;color: white;font-size: 18px}
|
||||
|
||||
|
|
|
|||
|
|
@ -526,7 +526,7 @@ function jsonSort(jsonObj) {
|
|||
}
|
||||
return str.substr(0, str.length - 1)
|
||||
}
|
||||
//map定时显示,每分钟请求一次
|
||||
//map定时显示,每分钟请求一次,如果存在map
|
||||
function update() {
|
||||
if ($('#mapshowinput').length) {
|
||||
source.clear()
|
||||
|
|
@ -571,4 +571,15 @@ function update() {
|
|||
})
|
||||
}
|
||||
}
|
||||
var t1 = window.setInterval(update, 1000 * 60)
|
||||
function checksession(){
|
||||
$.get('api/check_session',function(res){
|
||||
if(res.code==1){
|
||||
}else{
|
||||
$.messager.alert('','长时间未操作,请重新登陆!','warning',function(){
|
||||
window.location.reload(true)
|
||||
});
|
||||
}
|
||||
})
|
||||
}
|
||||
var t1 = window.setInterval(update, 1000 * 60)
|
||||
var t2 = window.setInterval(checksession,1000*60*31)
|
||||
|
|
@ -0,0 +1,268 @@
|
|||
|
||||
<script>
|
||||
var now = new Date();
|
||||
$(function () {
|
||||
year = now.getFullYear();
|
||||
month = now.getMonth() + 1;
|
||||
for (var i = 0; i < 5; i++) {
|
||||
$('#year').append('<option value="' + (year - i) + '">' + (year - i) + '</option>');
|
||||
$('#years').append('<option value="' + (year - i) + '">' + (year - i) + '</option>');
|
||||
}
|
||||
$.get('api/tool?a=servertime', function (res) {
|
||||
$('#year').combobox().combobox('setValue', res.year);
|
||||
$('#years').combobox().combobox('setValue', res.year);
|
||||
$('#month').combobox().combobox('setValue', res.month);
|
||||
behaviorDate();
|
||||
trainstatistical();
|
||||
})
|
||||
|
||||
});
|
||||
|
||||
function gcpmsearch() {
|
||||
var querydata = $('#fxrpms').serializeJSON();
|
||||
$('#fxrpmtable').datagrid('load', querydata);
|
||||
}
|
||||
//培训分析柱形图
|
||||
function behaviorDate() {
|
||||
var y = $("#year").val();
|
||||
var gcChart = echarts.init(document.getElementById("piecontainer"));
|
||||
|
||||
gcChart.setOption(option = {
|
||||
title: {
|
||||
text: '培训数量趋势图',
|
||||
x: 'left'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'axis',
|
||||
axisPointer: { // 坐标轴指示器,坐标轴触发有效
|
||||
type: 'shadow' // 默认为直线,可选为:'line' | 'shadow'
|
||||
}
|
||||
},
|
||||
legend: {
|
||||
|
||||
data: []
|
||||
},
|
||||
xAxis: {
|
||||
type: 'category',
|
||||
data: ['1月', '2月', '3月', '4月', '5月', '6月', '7月','8月','9月','10月','11月','12月']
|
||||
|
||||
},
|
||||
yAxis: {
|
||||
type: 'value'
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true }
|
||||
}
|
||||
},
|
||||
grid: {
|
||||
left: '3%',
|
||||
right: '4%',
|
||||
bottom: '3%',
|
||||
containLabel: true
|
||||
},
|
||||
|
||||
|
||||
});
|
||||
gcChart.showLoading();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/trainfg?a=trainfig&year=" + y, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
console.log(data);
|
||||
if (data) {
|
||||
gcChart.hideLoading(); //隐藏加载动画
|
||||
gcChart.setOption({
|
||||
legend: { data: data.key },
|
||||
series: [{
|
||||
name: '公司级',
|
||||
type: 'bar',
|
||||
stack: '总量',
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'insideRight'
|
||||
}
|
||||
},
|
||||
data: data.companylevel
|
||||
},
|
||||
{
|
||||
name: '车间/工段级',
|
||||
type: 'bar',
|
||||
stack: '总量',
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'insideRight'
|
||||
}
|
||||
},
|
||||
data: data.workshoplevel
|
||||
},
|
||||
{
|
||||
name: '班组级',
|
||||
type: 'bar',
|
||||
stack: '总量',
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'insideRight'
|
||||
}
|
||||
},
|
||||
data: data.teamlevel
|
||||
},
|
||||
{
|
||||
name: '部门分厂级',
|
||||
type: 'bar',
|
||||
stack: '总量',
|
||||
label: {
|
||||
normal: {
|
||||
show: true,
|
||||
position: 'insideRight'
|
||||
}
|
||||
},
|
||||
data: data.departmentlevel
|
||||
}]
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
gcChart.hideLoading();
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
//培训分析扇形图
|
||||
function trainstatistical() {
|
||||
var y = $("#year").val();
|
||||
var m = $("#month").val();
|
||||
var gcChart = echarts.init(document.getElementById("piecontainer2"));
|
||||
|
||||
gcChart.setOption(option = {
|
||||
title: {
|
||||
text: '培训类型分布',
|
||||
x: 'left'
|
||||
},
|
||||
tooltip: {
|
||||
trigger: 'item',
|
||||
formatter: "{a} <br/>{b} : {c} ({d}%)"
|
||||
},
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
x: 'left',
|
||||
y: 'bottom',
|
||||
data: []
|
||||
},
|
||||
toolbox: {
|
||||
show: true,
|
||||
feature: {
|
||||
mark: { show: true },
|
||||
dataView: { show: true, readOnly: false },
|
||||
restore: { show: true },
|
||||
saveAsImage: { show: true }
|
||||
}
|
||||
},
|
||||
calculable: true,
|
||||
|
||||
});
|
||||
gcChart.showLoading();
|
||||
$.ajax({
|
||||
type: "get",
|
||||
async: true, //异步请求(同步请求将会锁住浏览器,用户其他操作必须等待请求完成才可以执行)
|
||||
url: "api/trainfg?a=traintype&year=" + y + "&month=" + m, //请求发送
|
||||
dataType: "json", //返回数据形式为json
|
||||
success: function (data) {
|
||||
//请求成功时执行该函数内容,data即为服务器返回的json对象
|
||||
console.log(data)
|
||||
if (data) {
|
||||
gcChart.hideLoading(); //隐藏加载动画
|
||||
gcChart.setOption({
|
||||
legend: {
|
||||
orient: 'vertical',
|
||||
left: 'left',
|
||||
data: ['日常培训', '相关方培训', '在岗人员培训'] },
|
||||
series: [{
|
||||
name: '培训类型',
|
||||
type: 'pie',
|
||||
radius: '55%',
|
||||
center: ['50%', '60%'],
|
||||
data: [
|
||||
{ value: data.daily, name: '日常培训' },
|
||||
{ value: data.related, name: '相关方培训' },
|
||||
{ value: data.jobuser, name: '在岗人员培训' }
|
||||
],
|
||||
itemStyle: {
|
||||
emphasis: {
|
||||
shadowBlur: 10,
|
||||
shadowOffsetX: 0,
|
||||
shadowColor: 'rgba(0, 0, 0, 0.5)'
|
||||
}
|
||||
}
|
||||
}]
|
||||
}
|
||||
);
|
||||
|
||||
}
|
||||
},
|
||||
error: function (errorMsg) {
|
||||
gcChart.hideLoading();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
function funTypeChange() {
|
||||
behaviorDate();//
|
||||
}
|
||||
function funTypeChange2() {
|
||||
trainstatistical();//
|
||||
}
|
||||
|
||||
</script>
|
||||
|
||||
|
||||
<div class="border" id="desktop" style="margin: 10px 10px 0 10px; background: #fff; overflow: auto;">
|
||||
|
||||
<div style="width:100%">
|
||||
<div style="width:80%;margin:auto">
|
||||
<select class="txtInput select3" id="year" name="year" style="width:100px;"></select><label>年</label>
|
||||
|
||||
<button class="btn btn-info" onclick="funTypeChange()"> 查询</button>
|
||||
|
||||
<div id="piecontainer" style="height:400px;width:100%">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div style="width:80%;margin:auto">
|
||||
|
||||
<select class="txtInput select3" id="month" name="month" style="width:100px;">
|
||||
<option value="1">1月</option>
|
||||
<option value="2">2月</option>
|
||||
<option value="3">3月</option>
|
||||
<option value="4">4月</option>
|
||||
<option value="5">5月</option>
|
||||
<option value="6">6月</option>
|
||||
<option value="7">7月</option>
|
||||
<option value="8">8月</option>
|
||||
<option value="9">9月</option>
|
||||
<option value="10">10月</option>
|
||||
<option value="11">11月</option>
|
||||
<option value="12">12月</option>
|
||||
</select>
|
||||
<button class="btn btn-info" onclick="funTypeChange2()"> 查询</button>
|
||||
|
||||
<div id="piecontainer2" style="height:400px;width:100%">
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
|
|
@ -88,6 +88,7 @@ urlpatterns = [
|
|||
path('html/bhr',views.bhrhtml),
|
||||
path('riskas',views.riskas),
|
||||
path('html/examhistory/<int:id>/',views.examhistory),
|
||||
path('html/trainfig',views.trainfigure),
|
||||
#html页面
|
||||
|
||||
|
||||
|
|
@ -153,7 +154,8 @@ urlpatterns = [
|
|||
path('api/report',views.apireport),
|
||||
path('api/obscount',views.observepic),
|
||||
path('api/riskas',views.apiriskas),
|
||||
|
||||
path('api/trainfg',views.trainfg),
|
||||
path('api/check_session',views.check_session),
|
||||
|
||||
#path('api/rights/group/<int:groupid>',views.rightsgroup),
|
||||
path('api/main',views.mainapi),
|
||||
|
|
|
|||
|
|
@ -27,6 +27,9 @@ import jwt
|
|||
import decimal
|
||||
from . import forms
|
||||
from .models import CompanyInfo
|
||||
from django.contrib.sessions.models import Session
|
||||
import logging
|
||||
logger = logging.getLogger('log')
|
||||
|
||||
#分页功能
|
||||
def fenye(req):
|
||||
|
|
@ -63,7 +66,7 @@ def getcompany(x):
|
|||
else:
|
||||
return a.ubelongpart.partlink.split(',')[1]
|
||||
def getparts(partid):#获取该部门及下属部门
|
||||
return Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
return Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
#转换为datagrid所用json
|
||||
def transjson(total, obj):
|
||||
a = {'total':total,'rows':list(obj),'code':1}
|
||||
|
|
@ -181,9 +184,9 @@ def noticedetail(req,id):
|
|||
def noticeedit(req,id):
|
||||
return render(req,'noticeedit.html',{'id':id})
|
||||
def suggestupdate(req,jyid):
|
||||
return render(req,'suggestupdate.html',{'jyid':jyid})
|
||||
return render(req,'suggestupdate.html',{'jyid':jyid})
|
||||
def suggestdetail(req,jyid):
|
||||
return render(req,'suggestdetail.html',{'jyid':jyid})
|
||||
return render(req,'suggestdetail.html',{'jyid':jyid})
|
||||
def suggestadd(req):
|
||||
return render(req,'suggestadd.html')
|
||||
def suggest(req):
|
||||
|
|
@ -239,6 +242,8 @@ def userhtml(req):
|
|||
return render(req,'userhtml.html')
|
||||
def bhrhtml(req):
|
||||
return render(req,'behavior.html')
|
||||
def trainfigure(req):
|
||||
return render(req,'trainfigure.html')
|
||||
def check_login(func):
|
||||
def warpper(request,*args,**kwargs):
|
||||
is_login = request.session.get('userid', None)
|
||||
|
|
@ -271,6 +276,11 @@ def check_login(func):
|
|||
# return JsonResponse({"code": 401, "message": "please login!"})
|
||||
return warpper
|
||||
|
||||
def check_session(req):
|
||||
if req.session.get('userid',None):
|
||||
return JsonResponse({"code":1})
|
||||
else:
|
||||
return JsonResponse({"code":0})
|
||||
#存储文件
|
||||
def upfile(req):
|
||||
username = User.objects.get(userid=req.session['userid']).username
|
||||
|
|
@ -309,6 +319,7 @@ def login(req):
|
|||
user_form = UserForm()
|
||||
return render(req,'login.html', locals())
|
||||
|
||||
|
||||
def index(req):
|
||||
if not req.session.get('userid', None):
|
||||
return redirect('login')
|
||||
|
|
@ -327,6 +338,7 @@ def logout(req):
|
|||
#del req.session['username']
|
||||
# if "userid" in req.session:
|
||||
# del req.session['userid']
|
||||
logger.info('method: %s user: %s 登出' % (req.method,req.session['userid']))
|
||||
req.session.flush()
|
||||
#req.session.flush()
|
||||
#req.session.delete("session_key")
|
||||
|
|
@ -553,7 +565,7 @@ def apirights(req):
|
|||
groupid = req.GET.get('groupid')
|
||||
haverights = Group.objects.get(groupid=groupid).menulink.split(',')
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
companyid = getcompany(userid)
|
||||
allrights = Group.objects.get(usecomp__partid=companyid,grouptype=0).menulink.split(',')
|
||||
menus = Menu.objects.exclude(menuid__in=[11,9]).filter(menuid__in = allrights,deletemark=1).order_by('menuid').values('menuid','menucode','parentid','url','menuname','icon').distinct()
|
||||
for i in menus:
|
||||
|
|
@ -573,7 +585,7 @@ def apirights(req):
|
|||
return JsonResponse({"code":1})
|
||||
elif a=='have':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
companyid = getcompany(userid)
|
||||
allrights = Group.objects.get(usecomp__partid=companyid,grouptype=0).menulink.split(',')
|
||||
return JsonResponse({'code':1,'rights':allrights})
|
||||
|
||||
|
|
@ -611,7 +623,7 @@ def addyh(req):
|
|||
a.yhdd = yhdd
|
||||
if 'yhqy' in yhdata:
|
||||
if yhdata['yhqy']:
|
||||
a.yhqy = Area.objects.get(id= yhdata['yhqy'])
|
||||
a.yhqy = Area.objects.get(id= yhdata['yhqy'])
|
||||
a.yhms = yhms
|
||||
a.yhtp = yhtp
|
||||
a.yhnum='YH'+time.strftime('%Y%m%d%H%M%S')
|
||||
|
|
@ -1471,7 +1483,7 @@ def grouphandle(req):
|
|||
companyid = getcompany(userid)
|
||||
a = Group.objects.filter(usecomp__partid = companyid).exclude(grouptype=0).values('groupid','groupname')
|
||||
keystr=transstr(a,'groupid','groupname')
|
||||
return HttpResponse(keystr,content_type="application/json")
|
||||
return HttpResponse(keystr,content_type="application/json")
|
||||
elif req.method == 'POST':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
userid = req.session['userid']
|
||||
|
|
@ -1544,7 +1556,7 @@ def troublehandle(req):
|
|||
a = a.filter(fxr__userid=fxr)
|
||||
elif fxbm:
|
||||
parts = Partment.objects.filter(partlink__contains=','+str(fxbm)+',')|Partment.objects.filter(partid=fxbm)
|
||||
a = a.filter(fxbm__in=parts)
|
||||
a = a.filter(fxbm__in=parts)
|
||||
if qssj:
|
||||
a = a.filter(fxsj__gte=qssj)
|
||||
if jssj:
|
||||
|
|
@ -1753,7 +1765,7 @@ def charthandle(req):
|
|||
partid = req.GET.get('part')
|
||||
else:
|
||||
partid = companyid
|
||||
parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
parts = Partment.objects.filter(Q(partid=partid) | Q(partlink__contains=',' + str(partid) + ','))
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
a = Train.objects.filter(deletemark=1,trainpart__in=parts,state=1)
|
||||
value=[]
|
||||
|
|
@ -2224,11 +2236,10 @@ def parthandle(req):
|
|||
return HttpResponse(json.dumps(b,cls=MyEncoder),content_type="application/json")
|
||||
elif req.GET.get('a')=='del':
|
||||
a = req.POST.get('partid')
|
||||
if Partment.objects.filter(partlink__contains=','+a+',') or User.objects.filter(ubelongpart=a):
|
||||
if Partment.objects.filter(partlink__contains=','+a+',').exists() or User.objects.filter(ubelongpart=a).exists():
|
||||
return JsonResponse({"code":0})
|
||||
else:
|
||||
a = Partment.objects.get(partid=a)
|
||||
a.delete()
|
||||
Partment.objects.get(partid=a).delete()
|
||||
return JsonResponse({"code":1})
|
||||
elif req.GET.get('a')=='addpart':
|
||||
if req.POST.get('partid') != '':
|
||||
|
|
@ -2699,7 +2710,7 @@ def gchandle(req):
|
|||
obj.lookpart = User.objects.get(userid=userid).ubelongpart
|
||||
if 'looktime2' in gcdata:
|
||||
if gcdata['looktime2']:
|
||||
obj.looktime2 = gcdata['looktime2']
|
||||
obj.looktime2 = gcdata['looktime2']
|
||||
if 'lookeder' in gcdata:
|
||||
obj.lookeder = gcdata['lookeder']
|
||||
if 'otherunsafe' in gcdata:
|
||||
|
|
@ -2736,7 +2747,7 @@ def gchandle(req):
|
|||
i['readtime'] = Observeto.objects.filter(observe__lookid=i['lookid'],user__userid = userid)[0].submittime
|
||||
else:
|
||||
i['read']=0
|
||||
return HttpResponse(transjson(total,a),content_type="application/json")
|
||||
return HttpResponse(transjson(total,a),content_type="application/json")
|
||||
elif a == 'listself':
|
||||
startnum,endnum=fenye(req)
|
||||
a = Observe.objects.filter(looker__userid=userid,deletemark=1).order_by('-looktime')
|
||||
|
|
@ -2825,7 +2836,7 @@ def gchandle(req):
|
|||
data = json.loads(req.body.decode('utf-8'))
|
||||
url = exportdoc2('gc',data)
|
||||
return JsonResponse({"code":1,"downloadurl":url})
|
||||
|
||||
|
||||
def observepic(req):
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
|
|
@ -2859,7 +2870,7 @@ def observepic(req):
|
|||
rtgcx=[]#人体工程学
|
||||
hjzj=[]#环境整洁
|
||||
|
||||
for month in months:
|
||||
for month in months:
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
if req.GET.get('part'):
|
||||
partid = req.GET.get('part')
|
||||
|
|
@ -2882,14 +2893,14 @@ def observepic(req):
|
|||
rtgcx.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
elif i.dicid==30:
|
||||
hjzj.append(Unsafes.objects.filter(observe__in=a,unsafedicclass=i).count())
|
||||
|
||||
|
||||
|
||||
return JsonResponse({'code':1,'months':months,'userfy':userfy,'userwz':userwz,'grfh':grfh,'gjhsb':gjhsb,'cxhbz':cxhbz,'rtgcx':rtgcx,'hjzj':hjzj,})
|
||||
elif req.GET.get('a')=='gclxbg':
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
a = Observe.objects.filter(usecomp=Partment.objects.get(partid=companyid),deletemark=1)
|
||||
|
||||
|
||||
if req.GET.get('qssj'):#开始时间
|
||||
a = a.filter(looktime__gte=req.GET.get('qssj'))
|
||||
if req.GET.get('jssj'):#结束时间
|
||||
|
|
@ -2898,13 +2909,13 @@ def observepic(req):
|
|||
gcbm = req.GET.get('fxbm')
|
||||
parts = Partment.objects.filter(partlink__contains=',' + gcbm + ',')|Partment.objects.filter(partid=gcbm)
|
||||
a = a.filter(lookpart__in=parts)
|
||||
|
||||
|
||||
total = a.count()
|
||||
objs = a.values('looker__userid','looker__name','lookpart__partname').annotate(number = Count('looker')).order_by('-number')
|
||||
return HttpResponse(transjson(total,objs),content_type="application/json")
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def dicchandle(req):
|
||||
a = req.GET.get('a')
|
||||
if a == 'tree':
|
||||
|
|
@ -3119,7 +3130,7 @@ def apicompany(req):
|
|||
Yjsetup.objects.create(monthyhavg=100,safev=50,warnv=75,alertv=100,maxv=200,yhpgqz=4,yhdjqz=4,yhsblqz=1,yhzglqz=4,pxdjqz=3,pxxgqz=4,yldjqz=3,ylxgqz=3,usecomp=y)
|
||||
Map.objects.create(name='默认地图',pic='/static/safesite/mystatic/images/snc.jpg',usecomp=y,default=1)
|
||||
return JsonResponse({'code':1,'companyid':y.partid})
|
||||
|
||||
|
||||
def drapi(req):
|
||||
a = req.GET.get('a')
|
||||
if a == 'user':
|
||||
|
|
@ -3195,13 +3206,13 @@ def drapi(req):
|
|||
return JsonResponse({"code":1})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
def apimiss(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
if a == 'add':
|
||||
if a == 'add':
|
||||
obj = Miss()
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
obj.missplace = data['missplace']
|
||||
|
|
@ -3453,7 +3464,7 @@ def apisocert(req):
|
|||
return JsonResponse({"code":1,"data":getTzzs(cardnum,realname)})
|
||||
elif a=='updateTzzs':
|
||||
updateTzzs()
|
||||
|
||||
|
||||
def guoqi(x):
|
||||
now = datetime.now()
|
||||
now1 = datetime.now() + timedelta(days=180)
|
||||
|
|
@ -3462,7 +3473,7 @@ def guoqi(x):
|
|||
elif now1 > datetime.strptime(x,'%Y-%m-%d') > now:
|
||||
return 2
|
||||
else:
|
||||
return 3
|
||||
return 3
|
||||
def apisafecert(req):
|
||||
a = req.GET.get('a')
|
||||
if a=='listall':
|
||||
|
|
@ -3630,8 +3641,8 @@ def apipartuser(req):
|
|||
userobjs = User.objects.filter(ubelongpart=req.GET.get('parentid'),deletemark=1).exclude(issuper=1)
|
||||
for i in userobjs:
|
||||
lst.append({'id':i.userid,'name':i.name,'parentId':0,'checked':False,'isPeople':True,'children':[]})
|
||||
return JsonResponse({"code":1,"data":lst})
|
||||
|
||||
return JsonResponse({"code":1,"data":lst})
|
||||
|
||||
|
||||
def apiuser(req):
|
||||
a = req.GET.get('a')
|
||||
|
|
@ -3804,7 +3815,7 @@ def apisuggest(req):
|
|||
id = req.GET.get('id')
|
||||
res = exportdoc('jy',id)
|
||||
return res
|
||||
|
||||
|
||||
elif a == 'update': #评估
|
||||
userid = req.session['userid']
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
|
|
@ -3874,7 +3885,7 @@ def apisuggest(req):
|
|||
obj.save()
|
||||
Suggestflow.objects.create(suggest=obj,user=User.objects.get(userid=userid),action='驳回处理结果')
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
@ -4029,7 +4040,7 @@ def apitool(req):
|
|||
m.append(x)
|
||||
return JsonResponse({'wxgs':m})
|
||||
|
||||
|
||||
|
||||
|
||||
def apinotice(req):
|
||||
a = req.GET.get('a')
|
||||
|
|
@ -4166,7 +4177,7 @@ def apinotice(req):
|
|||
data['reads'] = list(reads)
|
||||
data['readpeople']= readobj.exclude(read=0).count()
|
||||
data['readsnum'] = readobj.aggregate(num=Sum('read')).get('num') or 0
|
||||
|
||||
|
||||
try:
|
||||
toobj = Noticeto.objects.get(noticeid__id=id,receiver__userid = userid)
|
||||
toobj.read = int(toobj.read) + 1
|
||||
|
|
@ -4258,7 +4269,7 @@ def apioperation(req):
|
|||
m = Operzyry(oper=obj,operzyry=x)
|
||||
m.save()
|
||||
b.append(x.openid)
|
||||
|
||||
|
||||
postdict={
|
||||
'touser':'',
|
||||
'template_id':'lOuwSE67vZC3ZVFYPZvz2eb7JdFxqx7ysMFkXrYmYh0',
|
||||
|
|
@ -4484,7 +4495,7 @@ def apioperation(req):
|
|||
}
|
||||
}
|
||||
send_wechatmsg.delay(postdict)
|
||||
|
||||
|
||||
Operspxq.objects.create(oper=Operation.objects.get(zyid=zyid),jdmc=oldjdmc,spr=spruser,checked=1,spbm=spruser.ubelongpart)
|
||||
except :
|
||||
obj.zyzt['zyzt'] = '待关闭'
|
||||
|
|
@ -4733,7 +4744,8 @@ def apiquestion(req):
|
|||
elif a == 'exercise':
|
||||
data = json.loads(req.body.decode('utf-8'))
|
||||
x = Question.objects.filter(deletemark=1)
|
||||
a = (x.filter(usecomps__contains=',1,')|x.filter(usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
|
||||
#a = (x.filter(usecomps__contains=',1,')|x.filter(usecomps__contains=','+companyid+',')).exclude(nousecomps__contains=','+companyid+',')
|
||||
a = x.exclude(nousecomps__contains=','+companyid+',')
|
||||
tmlxs = data['tmlx']
|
||||
ydtms = data['ydtms']
|
||||
a = x.filter(questioncat__id__in=tmlxs).exclude(id__in=ydtms)
|
||||
|
|
@ -4852,7 +4864,7 @@ def apiexampaper(req):
|
|||
elif int(i['type']) == 3:
|
||||
ExamPaperDetail.objects.create(exampaper=obj,question=Question.objects.get(id=i['id']),score=int(pds))
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
|
||||
|
||||
def apiexamtest(req):
|
||||
a = req.GET.get('a')
|
||||
|
|
@ -5112,7 +5124,7 @@ def apiexamtestdetail(req):
|
|||
obj.testnum = obj.testnum + 1
|
||||
obj.starttime = starttime
|
||||
obj.endtime = endtime
|
||||
obj.took = took
|
||||
obj.took = took
|
||||
obj.testdetail = testdetail
|
||||
obj.rights = rights
|
||||
obj.score = score
|
||||
|
|
@ -5226,7 +5238,7 @@ def apimap(req):
|
|||
id = req.POST.get('id')
|
||||
Map.objects.filter(id=id).update(pic=req.POST.get('pic'))
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
|
||||
def apiarea(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
|
|
@ -5269,7 +5281,7 @@ def apiarea(req):
|
|||
name = data['name']
|
||||
order = data['order']
|
||||
Area.objects.filter(id=data['id']).update(name = name,order=order)
|
||||
return JsonResponse({"code":1})
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
def apimapshow(req):
|
||||
a = req.GET.get('a')
|
||||
|
|
@ -5459,7 +5471,7 @@ def apiinspect(req):
|
|||
id = req.GET.get('id')
|
||||
a = Inspect.objects.filter(id=id).values('id','state','content','creattime','equipment__num','equipment__id','equipment__name','equipment__area__name','user__name','user__ubelongpart__partname','trouble__yhzt','trouble__yhnum','trouble__yhms','trouble__troubleid')
|
||||
return JsonResponse(a[0])
|
||||
|
||||
|
||||
def apiriskact(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
|
|
@ -5568,7 +5580,7 @@ def apiriskact(req):
|
|||
RiskActTask.objects.create(riskact=obj,taskadd=tasktime,taskexpire = tasktime + timedelta(days=1),istask=1)
|
||||
elif tasktype == 3:
|
||||
RiskActTask.objects.create(riskact=obj,taskadd=tasktime,taskexpire = tasktime + timedelta(days=7),istask=1)
|
||||
return JsonResponse({"code":1})
|
||||
return JsonResponse({"code":1})
|
||||
|
||||
def apirisk(req):
|
||||
a = req.GET.get('a')
|
||||
|
|
@ -5949,7 +5961,7 @@ def apiriskcheck(req):
|
|||
startnum,endnum=fenye(req)
|
||||
objs = objs.order_by('-id')[startnum:endnum].values('id','risk__step','risk__level','risk__riskact__name','risk__riskact__area__name','risk__riskact__place','dotime','trouble__yhnum','user__ubelongpart__partname','user__name')
|
||||
return HttpResponse(transjson(total,objs),content_type="application/json")
|
||||
|
||||
|
||||
def apireport(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
|
|
@ -5988,7 +6000,7 @@ def apireport(req):
|
|||
obj.cause = data['cause']
|
||||
obj.suggest = data['suggest']
|
||||
obj.save()
|
||||
return JsonResponse({'code':1})
|
||||
return JsonResponse({'code':1})
|
||||
|
||||
|
||||
#公司信息展示
|
||||
|
|
@ -6039,4 +6051,41 @@ def refresh_captcha(request):
|
|||
return HttpResponse(json.dumps({'key': hashkey, 'image_url': image_url}), content_type='application/json')
|
||||
|
||||
def dump(obj):
|
||||
print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
|
||||
print('\n'.join(['%s:%s' % item for item in obj.__dict__.items()]))
|
||||
|
||||
|
||||
def trainfg(req):
|
||||
a = req.GET.get('a')
|
||||
userid = req.session['userid']
|
||||
companyid = getcompany(userid)
|
||||
|
||||
if a == 'trainfig':
|
||||
year = int(req.GET.get('year'))
|
||||
months = [1,2,3,4,5,6,7,8,9,10,11,12]
|
||||
companylevel=[]#公司级
|
||||
workshoplevel=[]#车间/工段级
|
||||
teamlevel=[]#班组级
|
||||
departmentlevel =[]#部门分厂级
|
||||
for month in months:
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
|
||||
a = Train.objects.filter(usecomp__partid=companyid,deletemark=1,starttime__range=(first_day, first_day_of_next_month))
|
||||
companylevel.append(a.filter(trainlevel__dicid=5).count())
|
||||
workshoplevel.append(a.filter(trainlevel__dicid=6).count())
|
||||
teamlevel.append(a.filter(trainlevel__dicid=7).count())
|
||||
departmentlevel.append(a.filter(trainlevel__dicid=42).count())
|
||||
return JsonResponse({'code':1,'companylevel':companylevel,'workshoplevel':workshoplevel,'teamlevel':teamlevel,'departmentlevel':departmentlevel})
|
||||
elif a=='traintype':
|
||||
year = int(req.GET.get('year'))
|
||||
month = int(req.GET.get('month'))
|
||||
daily=[]#日常培训
|
||||
related=[]#相关方培训
|
||||
jobuser=[]#在岗人员培训
|
||||
first_day,first_day_of_next_month = gettime(datetime(year,month,1))
|
||||
a = Train.objects.filter(usecomp__partid=companyid,deletemark=1,starttime__range=(first_day, first_day_of_next_month))
|
||||
daily.append(a.filter(traintype__dickeyid=1).count())
|
||||
related.append(a.filter(traintype__dickeyid=108).count())
|
||||
jobuser.append(a.filter(traintype__dickeyid=107).count())
|
||||
return JsonResponse({'code':1,'daily':daily,'related':related,'jobuser':jobuser})
|
||||
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue