update code

dev_xd
lijun 2024-10-15 23:22:33 +08:00
parent 181d2e9d53
commit ec14b0557b
16 changed files with 191 additions and 107 deletions

View File

@ -83,6 +83,25 @@ public class AttendanceUbiData extends BaseEntity
@Excel(name = "${comment}", readConverterExp = "$column.readConverterExp()")
private Long state;
private Long subDeptId;
private String subDeptName;
public Long getSubDeptId() {
return subDeptId;
}
public void setSubDeptId(Long subDeptId) {
this.subDeptId = subDeptId;
}
public String getSubDeptName() {
return subDeptName;
}
public void setSubDeptName(String subDeptName) {
this.subDeptName = subDeptName;
}
private String comName;
public String getComName() {

View File

@ -10,6 +10,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<result property="comName" column="comName"/>
<result property="projectName" column="projectName"/>
<result property="projectId" column="projectId" />
<result property="subDeptId" column="sub_dept_id" />
<result property="subDeptName" column="sub_dept_name" />
<result property="userId" column="userId" />
<result property="admitGuid" column="admitGuid" />
<result property="userName" column="userName" />
@ -35,27 +37,28 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<sql id="selectAttendanceUbiDataVo">
select id, comId, projectId, userId, userName, sub_dept_group, sub_dept_group_name, craft_type, craft_post,admitGuid,
eventGuid,inPhoto,outPhoto,comName,projectName,
eventGuid,inPhoto,outPhoto,comName,projectName,sub_dept_id,sub_dept_name,
inTime, outTime, deviceNo, is_del, state, remark, create_by, create_time, update_by, update_time from attendance_ubi_data
</sql>
<sql id="selectAttendanceUbiDataAllVo">
select id, comId, projectId, userId, userName, sub_dept_group, sub_dept_group_name, craft_type, craft_post,admitGuid,
eventGuid,inPhoto,outPhoto,inData,outData,comName,projectName,
eventGuid,inPhoto,outPhoto,inData,outData,comName,projectName,sub_dept_id,sub_dept_name,
inTime, outTime, deviceNo, is_del, state, remark, create_by, create_time, update_by, update_time from attendance_ubi_data
</sql> <select id="selectAttendanceUbiDataList" parameterType="AttendanceUbiData" resultMap="AttendanceUbiDataResult">
<include refid="selectAttendanceUbiDataVo"/>
<where>
<if test="comId != null "> and comId = #{comId}</if>
<if test="projectId != null "> and projectId = #{projectId}</if>
<if test="subDeptId != null "> and sub_dept_id = #{subDeptId}</if>
<if test="userId != null "> and userId = #{userId}</if>
<if test="userName != null and userName != ''"> and userName like concat('%', #{userName}, '%')</if>
<if test="subDeptGroup != null "> and sub_dept_group = #{subDeptGroup}</if>
<if test="subDeptGroupName != null and subDeptGroupName != ''"> and sub_dept_group_name like concat('%', #{subDeptGroupName}, '%')</if>
<if test="craftType != null and craftType != ''"> and craft_type = #{craftType}</if>
<if test="craftPost != null and craftPost != ''"> and craft_post = #{craftPost}</if>
<if test="inTime != null "> and inTime = #{inTime}</if>
<if test="inTime != null "> and date(inTime) = date(#{inTime})</if>
<if test="inData != null and inData != ''"> and inData = #{inData}</if>
<if test="outTime != null "> and outTime = #{outTime}</if>
<if test="outTime != null "> and date(outTime) = date(#{outTime})</if>
<if test="outData != null and outData != ''"> and outData = #{outData}</if>
<if test="deviceNo != null and deviceNo != ''"> and deviceNo = #{deviceNo}</if>
<if test="isDel != null "> and is_del = #{isDel}</if>
@ -68,6 +71,7 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<where>
<if test="comId != null "> and comId = #{comId}</if>
<if test="projectId != null "> and projectId = #{projectId}</if>
<if test="subDeptId != null "> and sub_dept_id = #{subDeptId}</if>
<if test="userId != null "> and userId = #{userId}</if>
<if test="admitGuid != null and admitGuid != ''"> and admitGuid = #{admitGuid}</if>
<if test="userName != null and userName != ''"> and userName like concat('%', #{userName}, '%')</if>
@ -99,6 +103,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="outData != null">outData,</if>
<if test="deviceNo != null">deviceNo,</if>
<if test="isDel != null">is_del,</if>
<if test="subDeptId != null">sub_dept_id,</if>
<if test="subDeptName != null">sub_dept_name,</if>
<if test="comName != null">comName,</if>
<if test="projectName != null">projectName,</if>
<if test="admitGuid != null">admitGuid,</if>
@ -127,6 +133,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="outData != null">#{outData},</if>
<if test="deviceNo != null">#{deviceNo},</if>
<if test="isDel != null">#{isDel},</if>
<if test="subDeptId != null">#{subDeptId},</if>
<if test="subDeptName != null">#{subDeptName},</if>
<if test="comName != null">#{comName},</if>
<if test="projectName != null">#{projectName},</if>
<if test="admitGuid != null">#{admitGuid},</if>
@ -159,6 +167,8 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
<if test="outData != null">outData = #{outData},</if>
<if test="deviceNo != null">deviceNo = #{deviceNo},</if>
<if test="isDel != null">is_del = #{isDel},</if>
<if test="subDeptId != null">sub_dept_id = #{subDeptId},</if>
<if test="subDeptName != null">sub_dept_name = #{subDeptName},</if>
<if test="comName != null">comName = #{comName},</if>
<if test="projectName != null">projectName = #{projectName},</if>
<if test="admitGuid != null">admitGuid = #{admitGuid},</if>

View File

@ -98,7 +98,7 @@ public class AttendanceUbiDeviceController extends BaseController
if(list.size()>1 || (list.size()==1 && !list.get(0).getId().equals(attendanceUbiDevice.getId()))){
return new AjaxResult(500,"此设备编号已存在!");
}
return toAjax(attendanceUbiDeviceService.updateAttendanceUbiDevice(attendanceUbiDevice));
return toAjax(attendanceUbiDeviceService.updateAttendanceUbiDeviceAndAnsy(attendanceUbiDevice));
}
/**

View File

@ -84,7 +84,7 @@ public class UniCallBackController {
if(StringUtils.isNotEmpty(deviceNo)){
AttendanceUbiDevice device=attendanceUbiDeviceService.selectAttendanceUbiDeviceByNo(deviceNo);
if(device!=null){
device.setOnlineState(0l);
device.setOnlineState(2l);
attendanceUbiDeviceService.updateAttendanceUbiDevice(device);
return AjaxResult.success("同步成功");
}
@ -129,6 +129,8 @@ public class UniCallBackController {
addData.setAdmitGuid(admitGuid);
addData.setComName(proUser.getComName());
addData.setProjectName(proUser.getProjectName());
addData.setSubDeptId(proUser.getSubDeptId());
addData.setSubDeptName(proUser.getSubDeptName());
addData.setComId(proUser.getComId());
addData.setUserId(proUser.getUserId());
addData.setProjectId(projectId);

View File

@ -41,8 +41,9 @@ public interface IAttendanceUbiDeviceService
* @param attendanceUbiDevice
* @return
*/
public int updateAttendanceUbiDevice(AttendanceUbiDevice attendanceUbiDevice);
public int updateAttendanceUbiDeviceAndAnsy(AttendanceUbiDevice attendanceUbiDevice);
public int updateAttendanceUbiDevice(AttendanceUbiDevice attendanceUbiDevice);
/**
*
*

View File

@ -71,6 +71,15 @@ public class AttendanceUbiDeviceServiceImpl implements IAttendanceUbiDeviceServi
return data;
}
@Override
public int updateAttendanceUbiDeviceAndAnsy(AttendanceUbiDevice attendanceUbiDevice) {
attendanceUbiDevice.setUpdateBy(SecurityContextHolder.getUserName());
attendanceUbiDevice.setUpdateTime(DateUtils.getNowDate());
int data= attendanceUbiDeviceMapper.updateAttendanceUbiDevice(attendanceUbiDevice);
uniService.syncUniDevice(attendanceUbiDevice.getId(),attendanceUbiDevice.getProjectId());
return data;
}
/**
*
*
@ -83,7 +92,6 @@ public class AttendanceUbiDeviceServiceImpl implements IAttendanceUbiDeviceServi
attendanceUbiDevice.setUpdateBy(SecurityContextHolder.getUserName());
attendanceUbiDevice.setUpdateTime(DateUtils.getNowDate());
int data= attendanceUbiDeviceMapper.updateAttendanceUbiDevice(attendanceUbiDevice);
uniService.syncUniDevice(attendanceUbiDevice.getId(),attendanceUbiDevice.getProjectId());
return data;
}

View File

@ -15,36 +15,36 @@
"url": "https://gitee.com/y_project/RuoYi-Cloud.git"
},
"dependencies": {
"@element-plus/icons-vue": "2.0.10",
"@vueup/vue-quill": "1.1.0",
"@vueuse/core": "9.5.0",
"axios": "0.27.2",
"@element-plus/icons-vue": "2.3.1",
"@rollup/plugin-commonjs": "^28.0.0",
"@vueup/vue-quill": "1.2.0",
"@vueuse/core": "10.11.0",
"axios": "0.28.1",
"bpmn-js": "^11.4.1",
"diagram-js": "^11.9.1",
"echarts": "5.4.0",
"element-plus": "2.2.27",
"echarts": "5.5.1",
"element-plus": "2.7.6",
"file-saver": "2.0.5",
"fuse.js": "6.6.2",
"highlight.js": "11.7.0",
"js-base64": "^3.7.5",
"js-cookie": "3.0.1",
"jsencrypt": "3.3.1",
"js-cookie": "3.0.5",
"jsencrypt": "3.3.2",
"nprogress": "0.2.0",
"pinia": "2.0.22",
"pinia": "2.1.7",
"ruoyi": "file:",
"vkbeautify": "^0.99.3",
"vue": "3.2.45",
"vue-cropper": "1.0.3",
"vue-router": "4.1.4"
"vue": "3.4.31",
"vue-cropper": "1.1.1",
"vue-router": "4.4.0"
},
"devDependencies": {
"@vitejs/plugin-vue": "3.1.0",
"@vue/compiler-sfc": "3.2.45",
"sass": "1.56.1",
"unplugin-auto-import": "0.11.4",
"vite": "3.2.3",
"@vitejs/plugin-vue": "5.0.5",
"sass": "1.77.5",
"unplugin-auto-import": "0.17.6",
"unplugin-vue-setup-extend-plus": "1.0.1",
"vite": "5.3.2",
"vite-plugin-compression": "0.5.1",
"vite-plugin-svg-icons": "2.0.1",
"vite-plugin-vue-setup-extend": "0.4.0"
"vite-plugin-svg-icons": "2.0.1"
}
}

View File

@ -79,10 +79,7 @@
</template>
<script setup>
import variables from '@/assets/styles/variables.module.scss'
import originElementPlus from 'element-plus/theme-chalk/index.css'
import axios from 'axios'
import { ElLoading, ElMessage } from 'element-plus'
import { useDynamicTitle } from '@/utils/dynamicTitle'
import useAppStore from '@/store/modules/app'
import useSettingsStore from '@/store/modules/settings'

View File

@ -3,8 +3,8 @@ import { createApp } from 'vue'
import Cookies from 'js-cookie'
import ElementPlus from 'element-plus'
import locale from 'element-plus/lib/locale/lang/zh-cn' // 中文语言
import locale from 'element-plus/es/locale/lang/zh-cn'
import 'element-plus/theme-chalk/index.css'
import '@/assets/styles/index.scss' // global css
import App from './App'
@ -43,8 +43,8 @@ import TreeSelect from '@/components/TreeSelect'
// 字典标签组件
import DictTag from '@/components/DictTag'
// Vue3表单组件
import VForm3 from '@/components/vform/designer.umd.js'
import '@/components/vform/designer.style.css'
import VForm3 from '@/lib/vform/designer.umd.js'
import '@/lib/vform/designer.style.css'
const app = createApp(App)

View File

@ -1,4 +1,4 @@
import { createWebHistory, createRouter } from 'vue-router'
import { createWebHashHistory, createRouter } from 'vue-router'
/* Layout */
import Layout from '@/layout'
@ -239,7 +239,7 @@ export const dynamicRoutes = [
]
const router = createRouter({
history: createWebHistory(),
history: createWebHashHistory(),
routes: constantRoutes,
scrollBehavior(to, from, savedPosition) {
if (savedPosition) {

View File

@ -81,7 +81,7 @@ service.interceptors.response.use(res => {
ElMessageBox.confirm('登录状态已过期,您可以继续留在该页面,或者重新登录', '系统提示', { confirmButtonText: '重新登录', cancelButtonText: '取消', type: 'warning' }).then(() => {
isRelogin.show = false;
useUserStore().logOut().then(() => {
location.href = '/index';
location.href = '#/index';
})
}).catch(() => {
isRelogin.show = false;

View File

@ -1,53 +1,33 @@
<template>
<div class="app-container">
<div class="app-container attendance-ubi-data">
<el-form :model="queryParams" ref="queryRef" :inline="true" v-show="showSearch" label-width="68px">
<el-form-item label="公司ID" prop="comId">
<el-input v-model="queryParams.comId" placeholder="请输入公司ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="项目" prop="projectId">
<el-select :disabled="data.currentProId != ''" v-model="queryParams.projectId" placeholder="请选择项目" clearable
@change="()=>{handleQuery();projectChange();}">
<el-option v-for="prj in data.projects" :key="prj.id" :label="prj.projectName" :value="prj.id">
</el-option>
</el-select>
</el-form-item>
<el-form-item label="项目ID" prop="projectId">
<el-input v-model="queryParams.projectId" placeholder="请输入项目ID" clearable @keyup.enter="handleQuery" />
<el-form-item label="所属单位" prop="subDeptId">
<el-select v-model="queryParams.subDeptId" placeholder="请选择所属单位" clearable @change="()=>{handleQuery();subDeptChange();}">
<el-option v-for="(it, idx) in data.subdepts" :key="it.id" :label="it.subDeptName" :value="it.id" />
</el-select>
</el-form-item>
<el-form-item label="用户ID" prop="userId">
<el-input v-model="queryParams.userId" placeholder="请输入用户ID" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="${comment}" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入${comment}" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="班组编号(外键)" prop="subDeptGroup">
<el-input v-model="queryParams.subDeptGroup" placeholder="请输入班组编号(外键)" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="班组名称" prop="subDeptGroupName">
<el-input v-model="queryParams.subDeptGroupName" placeholder="请输入班组名称" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="工种岗位" prop="craftPost">
<el-input v-model="queryParams.craftPost" placeholder="请输入工种岗位" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="进场时间" prop="inTime">
<el-date-picker clearable v-model="queryParams.inTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择进场时间">
<el-form-item label="姓名" prop="userName">
<el-input v-model="queryParams.userName" placeholder="请输入姓名" clearable @keyup.enter="handleQuery" />
</el-form-item><el-form-item label="" prop="inTime">
<el-date-picker clearable v-model="queryParams.inTime" type="date" value-format="YYYY-MM-DD" @change="handleQuery"
placeholder="请选择日期">
</el-date-picker>
</el-form-item>
<el-form-item label="离场时间" prop="outTime">
<el-date-picker clearable v-model="queryParams.outTime" type="date" value-format="YYYY-MM-DD"
placeholder="请选择离场时间">
</el-date-picker>
</el-form-item>
<el-form-item label="设备NO" prop="deviceNo">
<el-input v-model="queryParams.deviceNo" placeholder="请输入设备NO" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="${comment}" prop="isDel">
<el-input v-model="queryParams.isDel" placeholder="请输入${comment}" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item label="${comment}" prop="state">
<el-input v-model="queryParams.state" placeholder="请输入${comment}" clearable @keyup.enter="handleQuery" />
</el-form-item>
<el-form-item>
<el-button type="primary" icon="Search" @click="handleQuery"></el-button>
<el-button icon="Refresh" @click="resetQuery"></el-button>
</el-form-item>
</el-form>
<el-row :gutter="10" class="mb8">
<el-row :gutter="10" class="mb8" v-if="false">
<el-col :span="1.5">
<el-button type="primary" plain icon="Plus" @click="handleAdd"
v-hasPermi="['manage:attendanceUbiData:add']">新增</el-button>
@ -67,34 +47,44 @@
<right-toolbar v-model:showSearch="showSearch" @queryTable="getList"></right-toolbar>
</el-row>
<el-table v-loading="loading" :data="attendanceUbiDataList" @selection-change="handleSelectionChange">
<el-table-column type="selection" width="55" align="center" />
<el-table-column label="${comment}" align="center" prop="id" />
<el-table-column label="公司ID" align="center" prop="comId" />
<el-table-column label="项目ID" align="center" prop="projectId" />
<el-table-column label="用户ID" align="center" prop="userId" />
<el-table-column label="${comment}" align="center" prop="userName" />
<el-table-column label="班组编号(外键)" align="center" prop="subDeptGroup" />
<el-table-column label="班组名称" align="center" prop="subDeptGroupName" />
<el-table-column label="工种类型" align="center" prop="craftType" />
<el-table-column label="工种岗位" align="center" prop="craftPost" />
<el-table v-loading="loading" :data="attendanceUbiDataList" @selection-change="handleSelectionChange" class="data-list">
<el-table-column label="姓名" align="center" prop="userName" />
<el-table-column label="项目" align="center" prop="projectName" />
<el-table-column label="单位" align="center" prop="subDeptName" />
<el-table-column label="进场照片" align="center" prop="inPhoto">
<template #default="scope">
<el-image v-if="scope.row.inPhoto" :src="scope.row.inPhoto" style="height:80px;" :preview-teleported="true" :preview-src-list="[scope.row.inPhoto]"></el-image>
</template>
</el-table-column>
<el-table-column label="进场时间" align="center" prop="inTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.inTime)}}</span>
</template>
</el-table-column>
<el-table-column label="进场数据" align="center" prop="inData" />
<el-table-column label="离场时间" align="center" prop="outTime" width="180">
<el-table-column label="离场照片" align="center" prop="outPhoto">
<template #default="scope">
<span>{{ parseTime(scope.row.outTime, '{y}-{m}-{d} {h}:{i}:{s}') }}</span>
<el-image v-if="scope.row.outPhoto" :src="scope.row.outPhoto" style="height:80px;" :preview-teleported="true" :preview-src-list="[scope.row.outPhoto]"></el-image>
</template>
</el-table-column>
<el-table-column label="离场数据" align="center" prop="outData" />
<el-table-column label="设备NO" align="center" prop="deviceNo" />
<el-table-column label="${comment}" align="center" prop="isDel" />
<el-table-column label="${comment}" align="center" prop="state" />
<el-table-column label="${comment}" align="center" prop="remark" />
<el-table-column label="操作" align="center" class-name="small-padding fixed-width">
<el-table-column label="离场时间" align="center" prop="outTime" width="180">
<template #default="scope">
<span>{{ parseTime(scope.row.outTime) }}</span>
</template>
</el-table-column>
<el-table-column label="班组" align="center" prop="subDeptGroupName" />
<el-table-column label="工种类型" align="center" prop="craftType">
<template #default="scope">
<dict-tag :options="pro_craft_type" :value="scope.row.craftType" class="dict-tag"/>
</template>
</el-table-column>
<el-table-column label="工种岗位" align="center" prop="craftPost">
<template #default="scope">
<dict-tag :options="pro_craft_post" :value="scope.row.craftPost" class="dict-tag"/>
</template>
</el-table-column>
<el-table-column label="操作" align="center" class-name="small-padding fixed-width" v-if="false">
<template #default="scope">
<el-button link type="primary" icon="Edit" @click="handleUpdate(scope.row)"
v-hasPermi="['manage:attendanceUbiData:edit']">修改</el-button>
@ -164,9 +154,15 @@
<script setup name="AttendanceUbiData">
import { listAttendanceUbiData, getAttendanceUbiData, delAttendanceUbiData, addAttendanceUbiData, updateAttendanceUbiData } from "@/api/manage/attendanceUbiData";
import { findMyProjectList } from "@/api/publics";
import useUserStore from '@/store/modules/user'
import { listProProjectInfoSubdepts } from "@/api/manage/proProjectInfoSubdepts";
const { proxy } = getCurrentInstance();
const { pro_craft_type, pro_craft_post } = proxy.useDict( 'pro_craft_type', 'pro_craft_post');
const userStore = useUserStore()
const attendanceUbiDataList = ref([]);
const open = ref(false);
const loading = ref(true);
@ -199,11 +195,36 @@ const data = reactive({
state: null,
},
rules: {
}
},
projects:[],
subdepts:[],
currentProId: '',
});
const { queryParams, form, rules } = toRefs(data);
/*所属单位改变事件 */
function subDeptChange(){
}
/*项目改变事件 */
function projectChange(){
listProProjectInfoSubdepts({ projectId: queryParams.value.projectId, pageNum: 1, pageSize: 100 }).then(d => {
data.subdepts = d.rows || [];
});
}
/** 查询项目列表 */
function getProjectList() {
findMyProjectList({ pageNum: 1, pageSize: 100 }).then(response => {
data.projects = response.rows;
if (userStore.currentProId) {
queryParams.value.projectId = userStore.currentProId
data.currentProId = userStore.currentProId;
projectChange();
}
});
}
/** 查询考勤管理列表 */
function getList() {
loading.value = true;
@ -325,4 +346,23 @@ function handleExport() {
}
getList();
getProjectList();
</script>
<style lang="scss">
.attendance-ubi-data{
.data-list{
.dict-tag{
*{
font-family: none !important;
color:#222;
font-size: 14px;
}
.el-tag{
background: none;
border: none;
}
}
}
}
</style>

View File

@ -10,7 +10,7 @@ export default defineConfig(({ mode, command }) => {
// 部署生产环境和开发环境下的URL。
// 默认情况下vite 会假设你的应用是被部署在一个域名的根路径上
// 例如 https://www.ruoyi.vip/。如果应用被部署在一个子路径上,你就需要用这个选项指定这个子路径。例如,如果你的应用被部署在 https://www.ruoyi.vip/admin/,则设置 baseUrl 为 /admin/。
base: VITE_APP_ENV === 'production' ? '/' : '/',
base: VITE_APP_ENV === 'production' ? '/xd/' : '/xd/',
plugins: createVitePlugins(env, command === 'build'),
resolve: {
// https://cn.vitejs.dev/config/#resolve-alias
@ -61,7 +61,14 @@ export default defineConfig(({ mode, command }) => {
}
},
optimizeDeps: {
include: ['@/components/vform/designer.umd.js'] //此处路径必须跟main.js中import路径完全一致
include: ['@/lib/vform/designer.umd.js'] //此处路径必须跟main.js中import路径完全一致
},
build: {
/* 其他build生产打包配置省略 */
//...
commonjsOptions: {
include: /node_modules|lib/ //这里记得把lib目录加进来否则生产打包会报错
}
}
}
})

View File

@ -1,5 +1,5 @@
import setupExtend from 'vite-plugin-vue-setup-extend'
import setupExtend from 'unplugin-vue-setup-extend-plus/vite'
export default function createSetupExtend() {
return setupExtend()
return setupExtend({})
}