From 5cbeeee3a13a404ee8edd8c7f4bc73028fd16cb3 Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Mon, 16 Dec 2024 11:27:43 +0800 Subject: [PATCH] =?UTF-8?q?oa=E4=BA=8C=E6=9C=9F=E5=86=85=E5=AE=B9=E6=9B=B4?= =?UTF-8?q?=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/main/resources/application.yml | 2 +- .../oa/controller/SysOaFinanceController.java | 2 + .../oa/controller/SysOaProjectController.java | 11 + .../com/ruoyi/oa/domain/bo/SysOaFileBo.java | 9 + .../com/ruoyi/oa/domain/vo/SysOaFileVo.java | 5 +- .../ruoyi/oa/domain/vo/SysOaProjectVo.java | 5 + .../ruoyi/oa/mapper/SysOaProjectMapper.java | 6 + .../oa/service/ISysOaProjectService.java | 7 + .../oa/service/impl/SysOaFileServiceImpl.java | 1 + .../service/impl/SysOaFinanceServiceImpl.java | 1 + .../service/impl/SysOaProjectServiceImpl.java | 32 +++ .../mapper/oa/SysOaFinanceMapper.xml | 3 + .../mapper/oa/SysOaProjectMapper.xml | 10 +- ruoyi-ui/src/api/oa/project.js | 7 + ruoyi-ui/src/views/dashboard/BarChart.vue | 154 ++++++++----- ruoyi-ui/src/views/index.vue | 2 - ruoyi-ui/src/views/oa/attendance/index.vue | 124 ++++++----- ruoyi-ui/src/views/oa/finance/index.vue | 209 ++++++++++++++++-- ruoyi-ui/src/views/oa/oaFile/index.vue | 88 ++++---- 19 files changed, 490 insertions(+), 188 deletions(-) diff --git a/ruoyi-admin/src/main/resources/application.yml b/ruoyi-admin/src/main/resources/application.yml index 134cf4b..ac2e67d 100644 --- a/ruoyi-admin/src/main/resources/application.yml +++ b/ruoyi-admin/src/main/resources/application.yml @@ -13,7 +13,7 @@ ruoyi: # 缓存懒加载 cacheLazy: false # 文件路径 - profile: D:/code/java_work/fad_ad/uploadPath + profile: /home/wy/oa/uploadPath captcha: # 页面 <参数设置> 可开启关闭 验证码校验 diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFinanceController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFinanceController.java index 99d2bb2..682da2b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFinanceController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaFinanceController.java @@ -146,6 +146,7 @@ public class SysOaFinanceController extends BaseController { outMap.put("financeType", '0'); outMap.put("beginTime", firstDay); outMap.put("endTime", lastDay); + outMap.put("payType",bo.getPayType()); BigDecimal financeOutReduce = iSysOaFinanceService.findFinanceByTime(bo, outMap); //收入 @@ -153,6 +154,7 @@ public class SysOaFinanceController extends BaseController { comeMap.put("financeType", '1'); comeMap.put("beginTime", firstDay); comeMap.put("endTime", lastDay); + comeMap.put("payType",bo.getPayType()); BigDecimal financeComeReduce = iSysOaFinanceService.findFinanceByTime(bo, comeMap); //收入减支出 BigDecimal subtract = financeComeReduce.subtract(financeOutReduce); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java index 1be7531..1bcda63 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaProjectController.java @@ -77,6 +77,17 @@ public class SysOaProjectController extends BaseController { return R.ok(iSysOaProjectService.queryById(projectId)); } + /** + * 获取项目管理详细信息 + * + * @param projectId 主键 + */ + @GetMapping("/projectDataByMonth") + public R> getProjectDataByMonth() { + return R.ok(iSysOaProjectService.getProjectDataByMonth()); + } + + /** * 新增项目管理 */ diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java index 7446a1d..ab8731e 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaFileBo.java @@ -1,5 +1,6 @@ package com.ruoyi.oa.domain.bo; +import com.fasterxml.jackson.annotation.JsonFormat; import com.ruoyi.common.core.validate.AddGroup; import com.ruoyi.common.core.validate.EditGroup; import lombok.Data; @@ -9,6 +10,7 @@ import javax.validation.constraints.*; import java.util.Date; import com.ruoyi.common.core.domain.BaseEntity; +import org.springframework.format.annotation.DateTimeFormat; /** * 文件存储业务对象 sys_oa_file @@ -46,4 +48,11 @@ public class SysOaFileBo extends BaseEntity { private String remark; + /** + * 查询月份 + */ + private String queryCreateTime; + + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java index b8f72ea..eda57ea 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaFileVo.java @@ -4,6 +4,7 @@ import com.alibaba.excel.annotation.ExcelIgnoreUnannotated; import com.alibaba.excel.annotation.ExcelProperty; import com.ruoyi.common.annotation.ExcelDictFormat; import com.ruoyi.common.convert.ExcelDictConvert; +import com.ruoyi.common.core.domain.BaseEntity; import lombok.Data; import java.util.Date; @@ -17,7 +18,7 @@ import java.util.Date; */ @Data @ExcelIgnoreUnannotated -public class SysOaFileVo { +public class SysOaFileVo extends BaseEntity { private static final long serialVersionUID = 1L; @@ -36,7 +37,7 @@ public class SysOaFileVo { /** * 文件类型0打卡1出入库 */ - @ExcelProperty(value = "文件类型0打卡1出入库", converter = ExcelDictConvert.class) + @ExcelProperty(value = "文件类型", converter = ExcelDictConvert.class) @ExcelDictFormat(dictType = "file_status") private Long status; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java index 49dd977..f74f668 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaProjectVo.java @@ -191,4 +191,9 @@ public class SysOaProjectVo { * 此项目数量 用户报工功能 */ private Long count; + + /** + * 人力资源成本 + */ + private Double laborCost; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java index 6e3b169..268acdc 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaProjectMapper.java @@ -12,6 +12,9 @@ import com.ruoyi.oa.domain.vo.SysOaProjectVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; +import java.util.Date; +import java.util.List; + /** * 项目管理Mapper接口 * @@ -23,4 +26,7 @@ public interface SysOaProjectMapper extends BaseMapperPlus selectPageOutList(@Param("page") Page page,@Param(Constants.WRAPPER) Wrapper queryWrapper); + List getProjectDataByMonth(@Param("firstDay") Date firstDay, @Param("lastDay") Date lastDay); + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java index 1262e21..d11814d 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaProjectService.java @@ -51,4 +51,11 @@ public interface ISysOaProjectService { TableDataInfo queryOutWarePageList(SysOaOutWarehouseBo bo, PageQuery pageQuery); + /** + * 获取每个项目当月的人力资源成本(人天) + * @return + */ + List getProjectDataByMonth(); + + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java index 46add5c..b8e5de6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFileServiceImpl.java @@ -63,6 +63,7 @@ public class SysOaFileServiceImpl implements ISysOaFileService { LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.eq(StringUtils.isNotBlank(bo.getFileUrl()), SysOaFile::getFileUrl, bo.getFileUrl()); lqw.eq(bo.getStatus() != null, SysOaFile::getStatus, bo.getStatus()); + lqw.like(bo.getQueryCreateTime() != null, SysOaFile::getCreateTime, bo.getQueryCreateTime()); return lqw; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFinanceServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFinanceServiceImpl.java index b234754..8d533db 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFinanceServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaFinanceServiceImpl.java @@ -91,6 +91,7 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService { paramsMap.put("financeType", params.get("financeType")); paramsMap.put("beginTime", params.get("beginTime")); paramsMap.put("endTime", params.get("endTime")); + paramsMap.put("payType", params.get("payType")); List financeByTime = baseMapper.findFinanceByTime(paramsMap); //遍历子表,将价格遍历为数组并用map方法求和,该方法类型使用map比较妥当 ArrayList objects = new ArrayList<>(); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java index b0e21fe..93f4922 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaProjectServiceImpl.java @@ -2,6 +2,7 @@ package com.ruoyi.oa.service.impl; import cn.hutool.core.bean.BeanUtil; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.ruoyi.common.utils.DateUtils; import com.ruoyi.common.utils.StringUtils; import com.ruoyi.common.core.page.TableDataInfo; import com.ruoyi.common.core.domain.PageQuery; @@ -127,6 +128,18 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { return TableDataInfo.build(page); } + /** + * 获取当月每个项目的人力资源成本 + * @return + */ + @Override + public List getProjectDataByMonth() { + Date date = new Date(); + + List projectVos = baseMapper.getProjectDataByMonth(getFirstDay(date),getLastDay(date)); + return projectVos; + } + private QueryWrapper buildOutWareQueryWrapper(SysOaOutWarehouseBo bo) { QueryWrapper lqw = Wrappers.query(); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); @@ -134,4 +147,23 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { lqw.orderByDesc("sop.create_time"); return lqw; } + + + + private Date getFirstDay(Date time){ + String firstDay = DateUtils.parseDateToStr("yyyy-MM-01", time); + return DateUtils.parseDate(firstDay); + } + + private Date getLastDay(Date time){ + String format = "yyyy-MM-"; + // 计算某月的天数 + Calendar calendar = Calendar.getInstance(); + calendar.setTime(time); + String dateLength = String.valueOf(calendar.getActualMaximum(Calendar.DAY_OF_MONTH)); + // 将字符串拼接 + format +=dateLength; + + return DateUtils.parseDate(DateUtils.parseDateToStr(format, time)); + } } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml index d6d7250..d0e3804 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml @@ -105,6 +105,9 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" - + diff --git a/ruoyi-ui/src/api/oa/project.js b/ruoyi-ui/src/api/oa/project.js index 13b4f05..ac41c82 100644 --- a/ruoyi-ui/src/api/oa/project.js +++ b/ruoyi-ui/src/api/oa/project.js @@ -16,6 +16,13 @@ export function getProject(projectId) { method: 'get' }) } +// 查询项目管理详细 +export function projectData() { + return request({ + url: '/oa/project/projectDataByMonth', + method: 'get' + }) +} // 新增项目管理 export function addProject(data) { diff --git a/ruoyi-ui/src/views/dashboard/BarChart.vue b/ruoyi-ui/src/views/dashboard/BarChart.vue index 88e7ef6..a4b50fd 100644 --- a/ruoyi-ui/src/views/dashboard/BarChart.vue +++ b/ruoyi-ui/src/views/dashboard/BarChart.vue @@ -1,102 +1,134 @@ diff --git a/ruoyi-ui/src/views/index.vue b/ruoyi-ui/src/views/index.vue index 502a4ff..421fd38 100644 --- a/ruoyi-ui/src/views/index.vue +++ b/ruoyi-ui/src/views/index.vue @@ -141,8 +141,6 @@ export default { this.getListNotice() }, methods: { - - /** 查缓存询信息 */ getList() { getCache().then((response) => { diff --git a/ruoyi-ui/src/views/oa/attendance/index.vue b/ruoyi-ui/src/views/oa/attendance/index.vue index af0c0b3..69920cc 100644 --- a/ruoyi-ui/src/views/oa/attendance/index.vue +++ b/ruoyi-ui/src/views/oa/attendance/index.vue @@ -30,11 +30,14 @@ {{ item.nickName }} - {{item.attendances.length>0 && item.attendances.findIndex(i=>i.attendanceDay === index2+1) >-1 && item.attendances[item.attendances.findIndex(i=>i.attendanceDay === index2+1)].projectId===0?'出差':''}} + > + {{ item.attendances.length > 0 && item.attendances.findIndex(i => i.attendanceDay === index2 + 1) > -1 && item.attendances[item.attendances.findIndex(i => i.attendanceDay === index2 + 1)].projectId === 0 ? '出差' : '' }} + @@ -48,19 +51,19 @@ 取消操作 出差 - +
项目列表
-
- - {{ item.projectName }} - - -
+
+ + {{ item.projectName }} + + +
@@ -99,8 +102,6 @@ - - 计算月份: @@ -119,47 +120,52 @@ + + - + + + + - - - - + + + + + + + + - - - - @@ -219,7 +225,7 @@ label="项目名" width="180"> { @@ -350,8 +362,14 @@ export default { methods: { + // 获取条形图数据 + getProjectData(){ + projectData().then(res => { + this.projects = res.data; + }) + }, // 出差标记 - toTravel(){ + toTravel() { if (!this.selectAll) { this.form = { projectId: 0, diff --git a/ruoyi-ui/src/views/oa/finance/index.vue b/ruoyi-ui/src/views/oa/finance/index.vue index c1c46d3..9f34a86 100644 --- a/ruoyi-ui/src/views/oa/finance/index.vue +++ b/ruoyi-ui/src/views/oa/finance/index.vue @@ -296,26 +296,156 @@ - +
+
+
+ 日期检索: + + +
+ 收入: + ¥ {{ checkByTime.income }} 元 + 支出: + ¥ {{ checkByTime.out }} 元 + 核算: + ¥{{ checkByTime.check }}元 +
+ +
+
+ + +
+ 本月核算情况 +
+
+ + +
+

本月收入

+

¥ {{ monthCheck.income }} 元

+
+
+ + +
+

本月支出

+

¥ {{ monthCheck.out }} 元

+
+
+ + + +
+

本月核算

+

¥ {{ monthCheck.check }} 元

+
+
+ + +
+ + +
+ + +
+ +
+ 本年核算情况 +
+
+ + +
+

本月收入

+

¥ {{ yearCheck.income }} 元

+
+
+ +
+

本月支出

+

¥ {{ yearCheck.out }} 元

+
+
+ +
+

本月核算

+

¥ {{ yearCheck.check }} 元

+
+
+
+
+
+ + + +
+ + + + + + + + + + +
+
+ +
+ + +
+ + + +
+
+
+ 支付类型: + + + +
+ 收入: + ¥ {{ checkByTime.income }} 元 + 支出: + ¥ {{ checkByTime.out }} 元 + 核算: + ¥{{ checkByTime.check }}元 +
- 按日期检索: - - - 收入: - ¥ {{ checkByTime.income }} 元 - 支出: - ¥ {{ checkByTime.out }} 元 - 核算: - ¥{{ checkByTime.check }}元
@@ -629,6 +759,8 @@ export default { dicts: ['sys_pay_type'], data() { return { + // 支付类型 + payType:0, // 按钮loading buttonLoading: false, // 遮罩层 @@ -745,6 +877,12 @@ export default { }, methods: { + // 获取核算信息通过支付类型 + getFinanceDateByPayType(){ + this.getPayTypeBlur() + this.currentBlur() + this.currentBlurList() + }, updateBigPrice(index, row) { @@ -809,7 +947,6 @@ export default { getListFinance(type) { - this.loading = true; /*let data = { financeType: type, @@ -860,6 +997,7 @@ export default { //tabs选项卡 handleClick(tab, event) { this.nowTab = tab.index + this.payType=0 if (tab.index == '0') { this.getListFinance('1'); } @@ -870,6 +1008,10 @@ export default { this.currentBlur() this.currentBlurList() } + if (tab.index == '3') { + this.currentBlur() + this.currentBlurList() + } }, // 表单重置 reset() { @@ -1168,13 +1310,30 @@ export default { let endTime = e.displayValue[1] + ' 23:59:59' let dataCome = { beginTime: beginTime, - endTime: endTime + endTime: endTime, + payType: this.payType, } findFinance(dataCome).then(res => { this.checkByTime = res.data; + }) }, + getPayTypeBlur(){ + let now = new Date() + var nowMonth = new Date(now.getFullYear(), now.getMonth(), 1); // 获取本月第一天的日期时间(时间为0:0:0) + var monthEnd = new Date(now.getFullYear(), now.getMonth() + 1, 0, 23, 59, 59); // 获取本月最后一天的日期时间(时间为23:59:59) + //本月收入参数 + let dataCome = { + beginTime: Vue.prototype.parseTime(nowMonth, '{y}-{m}-{d} {h}:{i}:{s}'), + endTime: Vue.prototype.parseTime(monthEnd, '{y}-{m}-{d} {h}:{i}:{s}'), + payType: this.payType, + } + findFinance(dataCome).then(res => { + this.checkByTime = res.data; + + }) + }, /** * 本年本月核算情况 */ @@ -1187,6 +1346,7 @@ export default { let dataCome = { beginTime: Vue.prototype.parseTime(nowMonth, '{y}-{m}-{d} {h}:{i}:{s}'), endTime: Vue.prototype.parseTime(monthEnd, '{y}-{m}-{d} {h}:{i}:{s}'), + payType: this.payType, } //本月核算 findFinance(dataCome).then(res => { @@ -1206,13 +1366,12 @@ export default { let yearDataCome = { beginTime: Vue.prototype.parseTime(startDate, '{y}-{m}-{d} {h}:{i}:{s}'), endTime: Vue.prototype.parseTime(endDate, '{y}-{m}-{d} {h}:{i}:{s}'), + payType: this.payType, } //本年核算 findFinance(yearDataCome).then(res => { this.yearCheck = res.data; }) - - }, /** * 最近六个月核算情况,如果显示更多月份,请修改控制器:int[] integers = {0,1, 2, 3, 4, 5}; @@ -1410,14 +1569,18 @@ export default { } .tip-top .sp1 { - margin-left: 100px; + white-space: nowrap; font-size: 18px; + overflow: hidden; color: #999999; + text-overflow: ellipsis; } .tip-top .sp2 { - margin-right: 100px; - font-size: 32px; + + font-size: 16px; + + } .date-col { diff --git a/ruoyi-ui/src/views/oa/oaFile/index.vue b/ruoyi-ui/src/views/oa/oaFile/index.vue index 444b76f..1018f5d 100644 --- a/ruoyi-ui/src/views/oa/oaFile/index.vue +++ b/ruoyi-ui/src/views/oa/oaFile/index.vue @@ -1,15 +1,13 @@