From ce5e217c0c621cc292d188d30963de985843577d Mon Sep 17 00:00:00 2001 From: hdka <823267011@qq.com> Date: Sat, 7 Jun 2025 15:15:55 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BB=98=E6=AC=BE=E8=BF=9B=E5=BA=A6=E4=BB=A3?= =?UTF-8?q?=E7=A0=81=E5=90=8C=E6=AD=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/controller/SysOaProjectController.java | 56 ++++++ .../SysOaWarehouseTaskController.java | 2 +- .../ruoyi/oa/domain/SysOaWarehouseTask.java | 2 + .../ruoyi/oa/domain/bo/SysOaProjectBo.java | 2 + .../oa/domain/bo/SysOaWarehouseTaskBo.java | 5 + .../ruoyi/oa/domain/vo/DashboardChartsVo.java | 14 ++ .../oa/domain/vo/DashboardMetricsVo.java | 24 +++ .../com/ruoyi/oa/domain/vo/OaProgressVo.java | 6 + .../com/ruoyi/oa/domain/vo/StatusCountVo.java | 10 + .../ruoyi/oa/domain/vo/SysOaProjectVo.java | 5 + .../oa/domain/vo/SysOaWarehouseTaskVo.java | 5 + .../com/ruoyi/oa/domain/vo/TrendPointVo.java | 12 ++ .../ruoyi/oa/mapper/SysOaProjectMapper.java | 34 +++- .../oa/mapper/SysOaWarehouseTaskMapper.java | 5 + .../oa/service/ISysOaProjectService.java | 10 + .../service/impl/SysOaProjectServiceImpl.java | 90 ++++++++- .../service/impl/SysOaRemindServiceImpl.java | 42 ++-- .../impl/SysOaWarehouseServiceImpl.java | 7 +- .../impl/SysOaWarehouseTaskServiceImpl.java | 9 +- .../resources/mapper/oa/OaProgressMapper.xml | 91 ++++----- .../mapper/oa/SysOaProjectMapper.xml | 183 ++++++++++++++++++ 21 files changed, 515 insertions(+), 99 deletions(-) create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardChartsVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardMetricsVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/StatusCountVo.java create mode 100644 ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/TrendPointVo.java 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 8a0ca95..0417d3a 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 @@ -6,11 +6,15 @@ import java.util.Arrays; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; +import com.ruoyi.oa.domain.vo.DashboardChartsVo; +import com.ruoyi.oa.domain.vo.DashboardMetricsVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.mapper.SysOaTaskMapper; import lombok.RequiredArgsConstructor; import javax.servlet.http.HttpServletResponse; import javax.validation.constraints.*; + +import org.springframework.format.annotation.DateTimeFormat; import org.springframework.web.bind.annotation.*; import org.springframework.validation.annotation.Validated; import com.ruoyi.common.annotation.RepeatSubmit; @@ -164,4 +168,56 @@ public class SysOaProjectController extends BaseController { } + /** + * 数据报表部分 + */ + + + + + + /** + * GET /api/projects/foreign/dashboard/metrics + * @param start yyyy/MM/dd + * @param end yyyy/MM/dd + */ + @GetMapping("/metrics") + public R metrics( + @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date start, + @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date end, + @RequestParam(value="tradeType" , required = false) Long tradeType + ) { + DashboardMetricsVo vo = iSysOaProjectService.getMetrics(start, end,tradeType); + return R.ok(vo); + } + + /** + * GET /api/projects/foreign/dashboard/charts + * @param start yyyy/MM/dd + * @param end yyyy/MM/dd + */ + @GetMapping("/charts") + public R charts( + @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date start, + @RequestParam @DateTimeFormat(pattern = "yyyy/MM/dd") Date end, + @RequestParam(value="tradeType" , required = false) Long tradeType + ) { + DashboardChartsVo vo = iSysOaProjectService.getCharts(start, end,tradeType); + return R.ok(vo); + } + + /** + * GET /api/projects/foreign/expiring + * @param days 预警天数,默认 7 + */ + @GetMapping("/expiring") + public R> expiring( + @RequestParam(name = "days", defaultValue = "7") Integer days, + @RequestParam(value="tradeType" , required = false) Long tradeType + ) { + List list = iSysOaProjectService.getExpiringForeignProjects(days,tradeType); + return R.ok(list); + } + + } \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseTaskController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseTaskController.java index 8bf6568..55af2dd 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseTaskController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/SysOaWarehouseTaskController.java @@ -133,7 +133,7 @@ public class SysOaWarehouseTaskController extends BaseController { /** - * 处理单个物料入库 + * 处理批量物料入库 */ @RepeatSubmit() @PutMapping("/status-list") diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouseTask.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouseTask.java index 48bf2bb..1a32971 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouseTask.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/SysOaWarehouseTask.java @@ -79,4 +79,6 @@ public class SysOaWarehouseTask extends BaseEntity { @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; + private String unit; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java index 0a41ad4..557bf0c 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaProjectBo.java @@ -181,5 +181,7 @@ public class SysOaProjectBo extends BaseEntity { * 代号类型 */ private String projectCode; + + private String status; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseTaskBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseTaskBo.java index 9940f02..a039126 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseTaskBo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/SysOaWarehouseTaskBo.java @@ -84,4 +84,9 @@ public class SysOaWarehouseTaskBo extends BaseEntity { @JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8") @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; + + /** + * 单位 + */ + private String unit; } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardChartsVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardChartsVo.java new file mode 100644 index 0000000..b9910dd --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardChartsVo.java @@ -0,0 +1,14 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +import java.util.List; + +@Data +public class DashboardChartsVo { + + private List contractAmountTrend; // 折线图 + private List projectStatusDistribution; // 饼图 + private List monthlyContractComparison; // 柱状图 +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardMetricsVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardMetricsVo.java new file mode 100644 index 0000000..43cf0a5 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/DashboardMetricsVo.java @@ -0,0 +1,24 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class DashboardMetricsVo { + // 本月合同总额 + private BigDecimal totalFunds; + // 合同数量统计 + private Integer contractCount; + // 临期项目数量 + private Integer expiringCount; + // 月度目标完成率(0-100) + private BigDecimal completionRate; + + private BigDecimal growthFunds; + + private BigDecimal growthCount; + + private BigDecimal growthExpiring; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProgressVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProgressVo.java index fb1ef31..5927e4f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProgressVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaProgressVo.java @@ -99,6 +99,12 @@ public class OaProgressVo { */ private String contactPhone; + /** + * 父项目电话 + */ + private String parentPhone; + private String nowDepart; + // 新增统计字段 private Long progressSize; private Long finishCount; diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/StatusCountVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/StatusCountVo.java new file mode 100644 index 0000000..d99f940 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/StatusCountVo.java @@ -0,0 +1,10 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +@Data +public class StatusCountVo { + private String status; // "正常"/"进行中"/"即将到期"/"已逾期" + private Integer count; +} 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 42fd4d3..c2f531f 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 @@ -246,4 +246,9 @@ public class SysOaProjectVo { */ private String projectCode; + /** + * 项目状态 + */ + private String status; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseTaskVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseTaskVo.java index 34cb8a4..b929821 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseTaskVo.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/SysOaWarehouseTaskVo.java @@ -86,4 +86,9 @@ public class SysOaWarehouseTaskVo { @DateTimeFormat(pattern = "yyyy-MM-dd") private Date endTime; + /** + * 单位 + */ + private String unit; + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/TrendPointVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/TrendPointVo.java new file mode 100644 index 0000000..6f10054 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/TrendPointVo.java @@ -0,0 +1,12 @@ +package com.ruoyi.oa.domain.vo; + + +import lombok.Data; + +import java.math.BigDecimal; + +@Data +public class TrendPointVo { + private String month; // 如 "1月" + private BigDecimal value; // 金额或数量 +} 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 0e1d598..b03fcef 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 @@ -7,12 +7,11 @@ import com.baomidou.mybatisplus.core.toolkit.Constants; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.ruoyi.oa.domain.SysOaProject; import com.ruoyi.oa.domain.bo.SysOaProjectBo; -import com.ruoyi.oa.domain.vo.SysOaCostAllVo; -import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; -import com.ruoyi.oa.domain.vo.SysOaProjectVo; +import com.ruoyi.oa.domain.vo.*; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; +import java.math.BigDecimal; import java.util.Date; import java.util.List; import java.util.Map; @@ -57,4 +56,33 @@ public interface SysOaProjectMapper extends BaseMapperPlus selectContractAmountTrend(@Param("start") Date start, + @Param("end") Date end, @Param("tradeType") Long tradeType); + + /** 项目状态分布(示例按 finish_time 与 project_status 简单分类) */ + List selectProjectStatusDistribution(@Param("tradeType") Long tradeType); + + /** 月度合同数量对比 */ + List selectMonthlyContractComparison(@Param("start") Date start, + @Param("end") Date end, @Param("tradeType") Long tradeType); + + List selectExpiringForeignProjects(@Param("now") Date now, @Param("expireDays") Integer expireDays, @Param("tradeType") Long tradeType); + + BigDecimal selectPrevAvgTotalFunds(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType); + + BigDecimal selectPrevAvgContractCount(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType); + + BigDecimal selectPrevAvgExpiringCount(@Param("start") Date start, @Param("end") Date end, @Param("tradeType") Long tradeType); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaWarehouseTaskMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaWarehouseTaskMapper.java index cea95f5..1107b12 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaWarehouseTaskMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaWarehouseTaskMapper.java @@ -1,8 +1,13 @@ package com.ruoyi.oa.mapper; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; import com.ruoyi.oa.domain.SysOaWarehouseTask; import com.ruoyi.oa.domain.vo.SysOaWarehouseTaskVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; +import org.apache.ibatis.annotations.Param; + +import java.util.List; /** * 采购计划Mapper接口 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 4255a29..755e5b0 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 @@ -1,6 +1,8 @@ package com.ruoyi.oa.service; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; +import com.ruoyi.oa.domain.vo.DashboardChartsVo; +import com.ruoyi.oa.domain.vo.DashboardMetricsVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; import com.ruoyi.oa.domain.vo.SysOaProjectVo; import com.ruoyi.oa.domain.bo.SysOaProjectBo; @@ -78,4 +80,12 @@ public interface ISysOaProjectService { TableDataInfo listProjects(SysOaProjectBo bo, PageQuery pageQuery); TableDataInfo listWareProject(SysOaProjectBo bo, PageQuery pageQuery); + + + + DashboardMetricsVo getMetrics(Date start, Date end,Long tradeType); + + DashboardChartsVo getCharts(Date start, Date end,Long tradeType); + + List getExpiringForeignProjects(Integer days,Long tradeType); } 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 6227a8c..2268534 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 @@ -10,19 +10,18 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; -import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; -import com.ruoyi.oa.domain.vo.SysOaTaskVo; +import com.ruoyi.oa.domain.vo.*; import com.ruoyi.oa.service.CodeGeneratorService; -import liquibase.pro.packaged.A; import lombok.RequiredArgsConstructor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import com.ruoyi.oa.domain.bo.SysOaProjectBo; -import com.ruoyi.oa.domain.vo.SysOaProjectVo; import com.ruoyi.oa.domain.SysOaProject; import com.ruoyi.oa.mapper.SysOaProjectMapper; import com.ruoyi.oa.service.ISysOaProjectService; +import java.math.BigDecimal; +import java.math.RoundingMode; import java.util.*; import java.util.stream.Collectors; @@ -44,7 +43,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { // 1. 定义常量列表(最好放到某个常量类里) private static final Set VALID_PREFIXES = Collections.unmodifiableSet(new HashSet<>(Arrays.asList( - "PL", "TC", "GI", "GL", "ZAM", "CC", "CR", "STL", "SM", "TH","RJ" + "PL", "TC", "GI", "GL", "ZAM", "CC", "CR", "STL", "SM", "TH", "RJ" ))); @@ -98,7 +97,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { */ @Override public Boolean insertByBo(SysOaProjectBo bo) { - if (bo.getProjectCode()!=null){ + if (bo.getProjectCode() != null) { bo.setProjectCode(codeGeneratorService.nextCode(bo.getProjectCode())); } SysOaProject add = BeanUtil.toBean(bo, SysOaProject.class); @@ -126,6 +125,7 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { } // 2. 在你的逻辑里做判断 + /** * 保存前的数据校验 */ @@ -262,12 +262,13 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { qw.eq("sop.trade_type", bo.getTradeType()); qw.like(StringUtils.isNotBlank(bo.getProjectNum()), "sop.project_num", bo.getProjectNum()); qw.groupBy("sop.project_id"); - Page result = baseMapper.selectVoListPage(pageQuery.build(),qw); + Page result = baseMapper.selectVoListPage(pageQuery.build(), qw); return TableDataInfo.build(result); } /** * 查看存在出库的项目 + * * @param bo * @param pageQuery * @return @@ -275,12 +276,81 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { @Override public TableDataInfo listWareProject(SysOaProjectBo bo, PageQuery pageQuery) { QueryWrapper lqw = Wrappers.query(); - lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); - lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); - Page result = baseMapper.listWareProject(pageQuery.build(), lqw); + lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.project_name", bo.getProjectName()); + lqw.like(StringUtils.isNotBlank(bo.getProjectCode()), "sop.project_code", bo.getProjectCode()); + lqw.like(StringUtils.isNotBlank(bo.getProjectNum()), "sop.project_num", bo.getProjectNum()); + Page result = baseMapper.listWareProject(pageQuery.build(), lqw); return TableDataInfo.build(result); } + @Override + public DashboardMetricsVo getMetrics(Date start, Date end,Long tradeType) { + + // 本期 + BigDecimal curFunds = baseMapper.selectTotalFunds(start, end,tradeType); + Integer curCount = baseMapper.selectContractCount(start, end,tradeType); + Integer curExpire = baseMapper.selectExpiringCount(start, end,tradeType); + + // 前期平均 + BigDecimal avgFunds = baseMapper.selectPrevAvgTotalFunds(start, end,tradeType); + BigDecimal avgCount = baseMapper.selectPrevAvgContractCount(start, end,tradeType); + BigDecimal avgExpire = baseMapper.selectPrevAvgExpiringCount(start, end,tradeType); + + // 计算增长率 = (cur - avg) / avg * 100 + BigDecimal fundRate = avgFunds.compareTo(BigDecimal.ZERO) == 0 + ? BigDecimal.ZERO + : curFunds.subtract(avgFunds) + .divide(avgFunds, 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)); + + BigDecimal countRate = avgCount.compareTo(BigDecimal.ZERO) == 0 + ? BigDecimal.ZERO + : BigDecimal.valueOf(curCount).subtract(avgCount) + .divide(avgCount, 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)); + + BigDecimal expireRate = avgExpire.compareTo(BigDecimal.ZERO) == 0 + ? BigDecimal.ZERO + : BigDecimal.valueOf(curExpire).subtract(avgExpire) + .divide(avgExpire, 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)); + + // 组装 VO + DashboardMetricsVo vo = new DashboardMetricsVo(); + vo.setTotalFunds(curFunds); + vo.setGrowthFunds(fundRate); + vo.setContractCount(curCount); + vo.setGrowthCount(countRate); + vo.setExpiringCount(curExpire); + vo.setGrowthExpiring(expireRate); + + // 用本月金额 ÷ 历史平均 × 100 得到 completionRate + BigDecimal completionRate; + if (avgFunds.compareTo(BigDecimal.ZERO) > 0) { + completionRate = curFunds + .divide(avgFunds, 2, RoundingMode.HALF_UP) + .multiply(BigDecimal.valueOf(100)); + } else { + completionRate = BigDecimal.ZERO; + } + vo.setCompletionRate(completionRate); + return vo; + } + + @Override + public DashboardChartsVo getCharts(Date start, Date end,Long tradeType) { + DashboardChartsVo vo = new DashboardChartsVo(); + vo.setContractAmountTrend(baseMapper.selectContractAmountTrend(start, end,tradeType)); + vo.setProjectStatusDistribution(baseMapper.selectProjectStatusDistribution(tradeType)); + vo.setMonthlyContractComparison(baseMapper.selectMonthlyContractComparison(start, end,tradeType)); + return vo; + } + + @Override + public List getExpiringForeignProjects(Integer expireDays,Long tradeType) { + Date now = new Date(); + return baseMapper.selectExpiringForeignProjects(now, expireDays,tradeType); + } private QueryWrapper buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) { QueryWrapper lqw = Wrappers.query(); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java index 9701768..9e87912 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaRemindServiceImpl.java @@ -71,7 +71,6 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { sysOaTaskBo.setState(0L); sysOaTaskBo.setWorkerId(LoginHelper.getUserId()); List tasks = sysOaTaskService.queryListByRemain(sysOaTaskBo,pageQuery); - System.out.println(tasks); ArrayList sysOaRemindVos = new ArrayList<>(); for (SysOaTaskVo task : tasks) { SysOaRemindVo sysOaRemindVo = new SysOaRemindVo(); @@ -111,34 +110,21 @@ public class SysOaRemindServiceImpl implements ISysOaRemindService { } // 查询邻近过期进度 - OaProgressBo oaProgressBo = new OaProgressBo(); - oaProgressBo.setType(1L); - List rows1 = progressService.queryPageList(oaProgressBo, pageQuery).getRows(); - for (OaProgressVo row : rows1) { - if (row.getRemainTime()!=null && row.getStatus() !=1L && row.getRemainTime()<3L){ - SysOaRemindVo sysOaRemindVo = new SysOaRemindVo(); - sysOaRemindVo.setType("progress-project"); - sysOaRemindVo.setContent(row.getProgressName()); - sysOaRemindVo.setRemainTime(row.getRemainTime()); - sysOaRemindVo.setTaskTime(row.getEndTime()); - sysOaRemindVos.add(sysOaRemindVo); - } +// OaProgressBo oaProgressBo = new OaProgressBo(); +// oaProgressBo.setType(1L); +// List rows1 = progressService.queryPageList(oaProgressBo, pageQuery).getRows(); +// for (OaProgressVo row : rows1) { +// if (row.getRemainTime()!=null && row.getStatus() ==0L && row.getRemainTime()<3L){ +// SysOaRemindVo sysOaRemindVo = new SysOaRemindVo(); +// sysOaRemindVo.setType("progress-project"); +// sysOaRemindVo.setContent(row.getProgressName()); +// sysOaRemindVo.setRemainTime(row.getRemainTime()); +// sysOaRemindVo.setTaskTime(row.getEndTime()); +// sysOaRemindVos.add(sysOaRemindVo); +// } +// +// } - } - - // 查询邻近过期进度 - oaProgressBo.setType(2L); - List rows2 = progressService.queryPageList(oaProgressBo, pageQuery).getRows(); - for (OaProgressVo row : rows2) { - if (row.getRemainTime()!=null && row.getRemainTime()<3L){ - SysOaRemindVo sysOaRemindVo = new SysOaRemindVo(); - sysOaRemindVo.setType("progress-money"); - sysOaRemindVo.setContent(row.getProgressName()); - sysOaRemindVo.setRemainTime(row.getRemainTime()); - sysOaRemindVo.setTaskTime(row.getPayEndTime()); - sysOaRemindVos.add(sysOaRemindVo); - } - } return R.ok(sysOaRemindVos); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java index 374a5bb..49f51ce 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseServiceImpl.java @@ -172,9 +172,12 @@ public class SysOaWarehouseServiceImpl implements ISysOaWarehouseService { if (select == null) { baseMapper.insert(add); flag = add.getId(); - } else { + } else { select.setInventory(select.getInventory() + bo.getInventory()); - select.setPrice((select.getPrice() * select.getInventory() + bo.getPrice() * bo.getInventory()) / (select.getInventory() + bo.getInventory())); + if (bo.getPrice()!=null && bo.getPrice()>0) { + select.setPrice((select.getPrice() * select.getInventory() + bo.getPrice() * bo.getInventory()) / (select.getInventory() + bo.getInventory())); + } + flag = select.getId(); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java index ac84cbb..6ce3d7e 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseTaskServiceImpl.java @@ -167,7 +167,6 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService @Override public int updateToWare(SysOaWarehouseTaskBo bo) { - System.out.println(bo); // 判断是否为此物料完成状态 if (bo.getTaskStatus() == 2) { Long masterId; @@ -197,10 +196,8 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService .eq(SysOaWarehouseTask::getMasterId, bo.getMasterId()) .in(SysOaWarehouseTask::getTaskStatus, Arrays.asList(0, 1)); List sysOaWarehouseTasks = baseMapper.selectList(taskLambdaQueryWrapper); - System.out.println(sysOaWarehouseTasks); if (sysOaWarehouseTasks.isEmpty()) { SysOaWarehouseMasterVo sysOaWarehouseMasterVo = masterMapper.selectVoById(bo.getMasterId()); - System.out.println("184513807548012740712308470812"); // 如果为空代表了所有都结束了 将采购单状态置1 sysOaWarehouseMasterVo.setStatus(1L); masterMapper.updateById(BeanUtil.toBean(sysOaWarehouseMasterVo, SysOaWarehouseMaster.class)); @@ -213,7 +210,7 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService return baseMapper.updateById(task); } - private int toWareOne(Long masterId, SysOaWarehouseTaskBo bo, SysOaWarehouseDetailBo sysOaWarehouseDetailBo) { + private int toWareOne(Long masterId, SysOaWarehouseTaskBo bo , SysOaWarehouseDetailBo sysOaWarehouseDetailBo) { // 进行入库操作 (因为存在一种情况是此为全新物料是没有物料id的) SysOaWarehouse sysOaWarehouse = new SysOaWarehouse(); Long warehouseId = 0L; @@ -226,16 +223,14 @@ public class SysOaWarehouseTaskServiceImpl implements ISysOaWarehouseTaskService sysOaWarehouse.setSpecifications(bo.getSpecifications()); sysOaWarehouse.setName(bo.getName()); sysOaWarehouse.setRemark(bo.getRemark()); - sysOaWarehouse.setUnit("件"); + sysOaWarehouse.setUnit(bo.getUnit()); wareMapper.insert(sysOaWarehouse); warehouseId = sysOaWarehouse.getId(); } else { warehouseId = bo.getWarehouseId(); sysOaWarehouse = wareMapper.selectById(warehouseId); - sysOaWarehouse.setPrice((sysOaWarehouse.getPrice() * sysOaWarehouse.getInventory() + bo.getPrice() * bo.getTaskInventory()) / (sysOaWarehouse.getInventory() + bo.getTaskInventory())); sysOaWarehouse.setInventory(sysOaWarehouse.getInventory() + bo.getTaskInventory()); - System.out.println(sysOaWarehouse); wareMapper.updateById(sysOaWarehouse); } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaProgressMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaProgressMapper.xml index c31eb31..41301fd 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/OaProgressMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaProgressMapper.xml @@ -124,71 +124,66 @@ + + + + + + + + + + + + + + + + + + + + +