diff --git a/ruoyi-admin/Dockerfile b/ruoyi-admin/Dockerfile index 0c635e6..f282ec9 100644 --- a/ruoyi-admin/Dockerfile +++ b/ruoyi-admin/Dockerfile @@ -18,6 +18,4 @@ ENTRYPOINT ["java", \ "-Djava.security.egd=file:/dev/./urandom", \ "-Dserver.port=${SERVER_PORT}", \ # 应用名称 如果想区分集群节点监控 改成不同的名称即可 -# "-Dskywalking.agent.service_name=ruoyi-server", \ -# "-javaagent:/ruoyi/skywalking/agent/skywalking-agent.jar", \ "-jar", "app.jar"] diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaApplicationController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaApplicationController.java new file mode 100644 index 0000000..e98ae5e --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaApplicationController.java @@ -0,0 +1,102 @@ +package com.ruoyi.oa.controller; + +import java.util.List; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +import lombok.RequiredArgsConstructor; +import javax.servlet.http.HttpServletResponse; +import javax.validation.constraints.*; +import cn.dev33.satoken.annotation.SaCheckPermission; +import org.springframework.web.bind.annotation.*; +import org.springframework.validation.annotation.Validated; +import com.ruoyi.common.annotation.RepeatSubmit; +import com.ruoyi.common.annotation.Log; +import com.ruoyi.common.core.controller.BaseController; +import com.ruoyi.common.core.domain.PageQuery; +import com.ruoyi.common.core.domain.R; +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import com.ruoyi.common.core.validate.QueryGroup; +import com.ruoyi.common.enums.BusinessType; +import com.ruoyi.common.utils.poi.ExcelUtil; +import com.ruoyi.oa.domain.vo.OaApplicationVo; +import com.ruoyi.oa.domain.bo.OaApplicationBo; +import com.ruoyi.oa.service.IOaApplicationService; +import com.ruoyi.common.core.page.TableDataInfo; + +/** + * 应用集成 + * + * @author ruoyi + * @date 2025-06-14 + */ +@Validated +@RequiredArgsConstructor +@RestController +@RequestMapping("/oa/application") +public class OaApplicationController extends BaseController { + + private final IOaApplicationService iOaApplicationService; + + /** + * 查询应用集成列表 + */ + @GetMapping("/list") + public TableDataInfo list(OaApplicationBo bo, PageQuery pageQuery) { + return iOaApplicationService.queryPageList(bo, pageQuery); + } + + /** + * 导出应用集成列表 + */ + @Log(title = "应用集成", businessType = BusinessType.EXPORT) + @PostMapping("/export") + public void export(OaApplicationBo bo, HttpServletResponse response) { + List list = iOaApplicationService.queryList(bo); + ExcelUtil.exportExcel(list, "应用集成", OaApplicationVo.class, response); + } + + /** + * 获取应用集成详细信息 + * + * @param applicationId 主键 + */ + @GetMapping("/{applicationId}") + public R getInfo(@NotNull(message = "主键不能为空") + @PathVariable Long applicationId) { + return R.ok(iOaApplicationService.queryById(applicationId)); + } + + /** + * 新增应用集成 + */ + @Log(title = "应用集成", businessType = BusinessType.INSERT) + @RepeatSubmit() + @PostMapping() + public R add(@Validated(AddGroup.class) @RequestBody OaApplicationBo bo) { + return toAjax(iOaApplicationService.insertByBo(bo)); + } + + /** + * 修改应用集成 + */ + @Log(title = "应用集成", businessType = BusinessType.UPDATE) + @RepeatSubmit() + @PutMapping() + public R edit(@Validated(EditGroup.class) @RequestBody OaApplicationBo bo) { + return toAjax(iOaApplicationService.updateByBo(bo)); + } + + /** + * 删除应用集成 + * + * @param applicationIds 主键串 + */ + @Log(title = "应用集成", businessType = BusinessType.DELETE) + @DeleteMapping("/{applicationIds}") + public R remove(@NotEmpty(message = "主键不能为空") + @PathVariable Long[] applicationIds) { + return toAjax(iOaApplicationService.deleteWithValidByIds(Arrays.asList(applicationIds), true)); + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaFeedbackController.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaFeedbackController.java index ab1a398..ed2a36b 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaFeedbackController.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/controller/OaFeedbackController.java @@ -47,6 +47,14 @@ public class OaFeedbackController extends BaseController { return iOaFeedbackService.queryPageList(bo, pageQuery); } + /** + * 查询问题反馈列表 + */ + @GetMapping("/index-list") + public TableDataInfo indexList(OaFeedbackBo bo, PageQuery pageQuery) { + return iOaFeedbackService.indexQueryList(bo, pageQuery); + } + /** * 导出问题反馈列表 */ 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 28206b9..d65e2e8 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 @@ -6,6 +6,8 @@ import java.time.temporal.ChronoUnit; import java.time.temporal.TemporalAdjusters; import java.util.*; import com.ruoyi.oa.domain.SysOaFinance; +import com.ruoyi.oa.domain.dto.BarDataDTO; +import com.ruoyi.oa.domain.dto.FinanceDetailDTO; import com.ruoyi.oa.domain.vo.SysOaProjectVo; import com.ruoyi.oa.service.ISysOaDetailService; import com.ruoyi.oa.service.ISysOaProjectService; @@ -73,10 +75,21 @@ public class SysOaFinanceController extends BaseController { return sysOaFinanceVoTableDataInfo; } + @GetMapping("/barData") - public R> pieData(SysOaFinanceBo bo) { - List sysOaFinanceList = iSysOaFinanceService.getBarData(bo); - return R.ok(sysOaFinanceList); + public R> barData( + @RequestParam(required = false) Long projectId, + @RequestParam(required = false) String financeType + ) { + return R.ok(iSysOaFinanceService.getBarData(projectId, financeType)); + } + + @GetMapping("/findFinanceList") + public R> findFinanceList( + @RequestParam(required = false) Long projectId, + @RequestParam(required = false) String financeType + ) { + return R.ok(iSysOaFinanceService.getFinanceDetails(projectId, financeType)); } 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 0417d3a..c5ca069 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 @@ -1,11 +1,15 @@ package com.ruoyi.oa.controller; +import java.time.LocalDate; +import java.time.format.DateTimeFormatter; import java.util.Date; import java.util.List; import java.util.Arrays; import com.baomidou.dynamic.datasource.annotation.DSTransactional; import com.ruoyi.oa.domain.bo.SysOaWarehouseDetailBo; +import com.ruoyi.oa.domain.dto.ProjectActivityDTO; +import com.ruoyi.oa.domain.dto.ProjectDataDTO; import com.ruoyi.oa.domain.vo.DashboardChartsVo; import com.ruoyi.oa.domain.vo.DashboardMetricsVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; @@ -192,7 +196,7 @@ public class SysOaProjectController extends BaseController { } /** - * GET /api/projects/foreign/dashboard/charts + * GET /projects/foreign/dashboard/charts * @param start yyyy/MM/dd * @param end yyyy/MM/dd */ @@ -207,7 +211,7 @@ public class SysOaProjectController extends BaseController { } /** - * GET /api/projects/foreign/expiring + * GET /projects/foreign/expiring * @param days 预警天数,默认 7 */ @GetMapping("/expiring") @@ -219,5 +223,12 @@ public class SysOaProjectController extends BaseController { return R.ok(list); } + @GetMapping("/projectData") + public R> projectData( + @RequestParam("date") @DateTimeFormat(pattern = "yyyy-MM-dd") LocalDate date + ) { + String month = date.format(DateTimeFormatter.ofPattern("yyyy-MM")); + return R.ok(iSysOaProjectService.getProjectData(month)); + } } \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java new file mode 100644 index 0000000..b7f5987 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/OaApplication.java @@ -0,0 +1,62 @@ +package com.ruoyi.oa.domain; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; +import lombok.EqualsAndHashCode; +import java.io.Serializable; +import java.util.Date; +import java.math.BigDecimal; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 应用集成对象 oa_application + * + * @author ruoyi + * @date 2025-06-14 + */ +@Data +@EqualsAndHashCode(callSuper = true) +@TableName("oa_application") +public class OaApplication extends BaseEntity { + + private static final long serialVersionUID=1L; + + /** + * 主键ID + */ + @TableId(value = "application_id") + private Long applicationId; + /** + * 应用图标 URL 或本地路径 + */ + private String icon; + /** + * 服务 IP 地址 + */ + private String ip; + /** + * 服务端口号 + */ + private Long port; + /** + * 应用名称 + */ + private String applicationName; + /** + * 应用描述 + */ + private String description; + /** + * 删除标志,0-正常,1-已删除 + */ + @TableLogic + private Integer delFlag; + /** + * 备注 + */ + private String remark; + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java new file mode 100644 index 0000000..e0d0ce9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/bo/OaApplicationBo.java @@ -0,0 +1,82 @@ +package com.ruoyi.oa.domain.bo; + +import com.ruoyi.common.core.validate.AddGroup; +import com.ruoyi.common.core.validate.EditGroup; +import lombok.Data; +import lombok.EqualsAndHashCode; +import javax.validation.constraints.*; + +import java.util.Date; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.domain.BaseEntity; + +/** + * 应用集成业务对象 oa_application + * + * @author ruoyi + * @date 2025-06-14 + */ + +@Data +@EqualsAndHashCode(callSuper = true) +public class OaApplicationBo extends BaseEntity { + + /** + * 主键ID + */ + private Long applicationId; + + /** + * 应用图标 URL 或本地路径 + */ + private String icon; + + /** + * 服务 IP 地址 + */ + private String ip; + + /** + * 服务端口号 + */ + private Long port; + + /** + * 应用名称 + */ + private String applicationName; + + /** + * 应用描述 + */ + private String description; + + /** + * 创建人 + */ + private String createBy; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新人 + */ + private String updateBy; + + /** + * 更新时间 + */ + private Date updateTime; + + /** + * 备注 + */ + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/BarDataDTO.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/BarDataDTO.java new file mode 100644 index 0000000..e00f632 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/BarDataDTO.java @@ -0,0 +1,12 @@ +package com.ruoyi.oa.domain.dto; + + +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class BarDataDTO { + private String month; + private BigDecimal totalOut; + private BigDecimal totalIn; +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/FinanceDetailDTO.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/FinanceDetailDTO.java new file mode 100644 index 0000000..ee4c24a --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/FinanceDetailDTO.java @@ -0,0 +1,13 @@ +package com.ruoyi.oa.domain.dto; + +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class FinanceDetailDTO { + private String date; // YYYY-MM-DD + private String type; // exitType + private String currency; // 'USD' or 'CNY' + private BigDecimal amount; + private Long projectId; +} \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectActivityDTO.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectActivityDTO.java new file mode 100644 index 0000000..df546d6 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectActivityDTO.java @@ -0,0 +1,14 @@ +package com.ruoyi.oa.domain.dto; + + +import lombok.Data; +import java.math.BigDecimal; +import java.time.LocalDateTime; + +@Data +public class ProjectActivityDTO { + private String projectName; + private LocalDateTime createTime; + private BigDecimal laborCost; + private String color; +} \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectDataDTO.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectDataDTO.java new file mode 100644 index 0000000..0b0f266 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/dto/ProjectDataDTO.java @@ -0,0 +1,13 @@ +package com.ruoyi.oa.domain.dto; + + +import lombok.Data; +import java.math.BigDecimal; + +@Data +public class ProjectDataDTO { + private Long projectId; + private String projectName; + private String color; + private BigDecimal totalPrice; +} \ No newline at end of file diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java new file mode 100644 index 0000000..4f4d9c9 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/domain/vo/OaApplicationVo.java @@ -0,0 +1,69 @@ +package com.ruoyi.oa.domain.vo; + +import java.util.Date; +import com.fasterxml.jackson.annotation.JsonFormat; +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 lombok.Data; +import java.util.Date; + + + +/** + * 应用集成视图对象 oa_application + * + * @author ruoyi + * @date 2025-06-14 + */ +@Data +@ExcelIgnoreUnannotated +public class OaApplicationVo { + + private static final long serialVersionUID = 1L; + + /** + * 主键ID + */ + @ExcelProperty(value = "主键ID") + private Long applicationId; + + /** + * 应用图标 URL 或本地路径 + */ + @ExcelProperty(value = "应用图标 URL 或本地路径") + private String icon; + + /** + * 服务 IP 地址 + */ + @ExcelProperty(value = "服务 IP 地址") + private String ip; + + /** + * 服务端口号 + */ + @ExcelProperty(value = "服务端口号") + private Long port; + + /** + * 应用名称 + */ + @ExcelProperty(value = "应用名称") + private String applicationName; + + /** + * 应用描述 + */ + @ExcelProperty(value = "应用描述") + private String description; + + /** + * 备注 + */ + @ExcelProperty(value = "备注") + private String remark; + + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaApplicationMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaApplicationMapper.java new file mode 100644 index 0000000..cfc93c0 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/OaApplicationMapper.java @@ -0,0 +1,15 @@ +package com.ruoyi.oa.mapper; + +import com.ruoyi.oa.domain.OaApplication; +import com.ruoyi.oa.domain.vo.OaApplicationVo; +import com.ruoyi.common.core.mapper.BaseMapperPlus; + +/** + * 应用集成Mapper接口 + * + * @author ruoyi + * @date 2025-06-14 + */ +public interface OaApplicationMapper extends BaseMapperPlus { + +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFinanceMapper.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFinanceMapper.java index 71dee9c..71dacf9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFinanceMapper.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/mapper/SysOaFinanceMapper.java @@ -8,6 +8,8 @@ import com.ruoyi.common.annotation.DataPermission; import com.ruoyi.common.core.domain.entity.SysUser; import com.ruoyi.oa.domain.SysOaFinance; import com.ruoyi.oa.domain.bo.SysOaFinanceBo; +import com.ruoyi.oa.domain.dto.BarDataDTO; +import com.ruoyi.oa.domain.dto.FinanceDetailDTO; import com.ruoyi.oa.domain.vo.SysOaFinanceVo; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; @@ -70,17 +72,21 @@ public interface SysOaFinanceMapper extends BaseMapperPlus getBarData(SysOaFinanceBo bo); +// List getBarData(SysOaFinanceBo bo); List selectByPaymentProgressId(Long progressId); - /** - * 项目资金管理,根据时间范围查询列表数据 - * @param params - * @return - */ -// List findFinanceByTimeAndProjectId(Map params); + + List getBarData( + @Param("projectId") Long projectId, + @Param("financeType") String financeType + ); + + List getFinanceDetails( + @Param("projectId") Long projectId, + @Param("financeType") String financeType + ); } 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 b03fcef..603e6f9 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,6 +7,8 @@ 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.dto.ProjectActivityDTO; +import com.ruoyi.oa.domain.dto.ProjectDataDTO; import com.ruoyi.oa.domain.vo.*; import com.ruoyi.common.core.mapper.BaseMapperPlus; import org.apache.ibatis.annotations.Param; @@ -80,6 +82,9 @@ public interface SysOaProjectMapper extends BaseMapperPlus selectExpiringForeignProjects(@Param("now") Date now, @Param("expireDays") Integer expireDays, @Param("tradeType") Long tradeType); + List getProjectData(@Param("month") String month); + List getProjectActivities(); + 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); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaApplicationService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaApplicationService.java new file mode 100644 index 0000000..e4e5581 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaApplicationService.java @@ -0,0 +1,49 @@ +package com.ruoyi.oa.service; + +import com.ruoyi.oa.domain.OaApplication; +import com.ruoyi.oa.domain.vo.OaApplicationVo; +import com.ruoyi.oa.domain.bo.OaApplicationBo; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; + +import java.util.Collection; +import java.util.List; + +/** + * 应用集成Service接口 + * + * @author ruoyi + * @date 2025-06-14 + */ +public interface IOaApplicationService { + + /** + * 查询应用集成 + */ + OaApplicationVo queryById(Long applicationId); + + /** + * 查询应用集成列表 + */ + TableDataInfo queryPageList(OaApplicationBo bo, PageQuery pageQuery); + + /** + * 查询应用集成列表 + */ + List queryList(OaApplicationBo bo); + + /** + * 新增应用集成 + */ + Boolean insertByBo(OaApplicationBo bo); + + /** + * 修改应用集成 + */ + Boolean updateByBo(OaApplicationBo bo); + + /** + * 校验并批量删除应用集成信息 + */ + Boolean deleteWithValidByIds(Collection ids, Boolean isValid); +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaFeedbackService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaFeedbackService.java index 32a5625..515471f 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaFeedbackService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/IOaFeedbackService.java @@ -51,4 +51,6 @@ public interface IOaFeedbackService { int delItem(Long feedbackId); + TableDataInfo indexQueryList(OaFeedbackBo bo, PageQuery pageQuery); + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFinanceService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFinanceService.java index e8f28e1..d2d8812 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFinanceService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaFinanceService.java @@ -1,6 +1,8 @@ package com.ruoyi.oa.service; import com.ruoyi.oa.domain.SysOaFinance; +import com.ruoyi.oa.domain.dto.BarDataDTO; +import com.ruoyi.oa.domain.dto.FinanceDetailDTO; import com.ruoyi.oa.domain.vo.SysOaFinanceVo; import com.ruoyi.oa.domain.bo.SysOaFinanceBo; import com.ruoyi.common.core.page.TableDataInfo; @@ -90,12 +92,15 @@ public interface ISysOaFinanceService { */ Boolean deleteSysOaFinanceById(Long financeId); - List getBarData(SysOaFinanceBo bo); public List getByProgressId(Long progressId); public void deleteDetail(Long financeId); + public List getBarData(Long projectId, String financeType) ; + + public List getFinanceDetails(Long projectId, String financeType); + TableDataInfo progressList(SysOaFinanceBo bo, PageQuery pageQuery); } 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 755e5b0..d84c578 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.dto.ProjectActivityDTO; +import com.ruoyi.oa.domain.dto.ProjectDataDTO; import com.ruoyi.oa.domain.vo.DashboardChartsVo; import com.ruoyi.oa.domain.vo.DashboardMetricsVo; import com.ruoyi.oa.domain.vo.SysOaOutWarehouseListVo; @@ -88,4 +90,7 @@ public interface ISysOaProjectService { DashboardChartsVo getCharts(Date start, Date end,Long tradeType); List getExpiringForeignProjects(Integer days,Long tradeType); + + List getProjectData(String month); + List getProjectActivities(); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseDetailService.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseDetailService.java index c582957..fd6d3c9 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseDetailService.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/ISysOaWarehouseDetailService.java @@ -64,4 +64,9 @@ public interface ISysOaWarehouseDetailService { TableDataInfo queryOutWarehouseByProjectId(@NotNull(message = "项目名不能为空") Long projectId); + /** + * 用于撤回车库 在上层已经恢复库存不需要再次方法中恢复 + * @param id + */ + void deleteById(Long id); } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaApplicationServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaApplicationServiceImpl.java new file mode 100644 index 0000000..c6b7112 --- /dev/null +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaApplicationServiceImpl.java @@ -0,0 +1,113 @@ +package com.ruoyi.oa.service.impl; + +import cn.hutool.core.bean.BeanUtil; +import com.ruoyi.common.utils.StringUtils; +import com.ruoyi.common.core.page.TableDataInfo; +import com.ruoyi.common.core.domain.PageQuery; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import lombok.RequiredArgsConstructor; +import org.springframework.stereotype.Service; +import com.ruoyi.oa.domain.bo.OaApplicationBo; +import com.ruoyi.oa.domain.vo.OaApplicationVo; +import com.ruoyi.oa.domain.OaApplication; +import com.ruoyi.oa.mapper.OaApplicationMapper; +import com.ruoyi.oa.service.IOaApplicationService; + +import java.util.List; +import java.util.Map; +import java.util.Collection; + +/** + * 应用集成Service业务层处理 + * + * @author ruoyi + * @date 2025-06-14 + */ +@RequiredArgsConstructor +@Service +public class OaApplicationServiceImpl implements IOaApplicationService { + + private final OaApplicationMapper baseMapper; + + /** + * 查询应用集成 + */ + @Override + public OaApplicationVo queryById(Long applicationId){ + return baseMapper.selectVoById(applicationId); + } + + /** + * 查询应用集成列表 + */ + @Override + public TableDataInfo queryPageList(OaApplicationBo bo, PageQuery pageQuery) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + Page result = baseMapper.selectVoPage(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + + /** + * 查询应用集成列表 + */ + @Override + public List queryList(OaApplicationBo bo) { + LambdaQueryWrapper lqw = buildQueryWrapper(bo); + return baseMapper.selectVoList(lqw); + } + + private LambdaQueryWrapper buildQueryWrapper(OaApplicationBo bo) { + Map params = bo.getParams(); + LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); + lqw.eq(StringUtils.isNotBlank(bo.getIcon()), OaApplication::getIcon, bo.getIcon()); + lqw.eq(StringUtils.isNotBlank(bo.getIp()), OaApplication::getIp, bo.getIp()); + lqw.eq(bo.getPort() != null, OaApplication::getPort, bo.getPort()); + lqw.like(StringUtils.isNotBlank(bo.getApplicationName()), OaApplication::getApplicationName, bo.getApplicationName()); + lqw.eq(StringUtils.isNotBlank(bo.getDescription()), OaApplication::getDescription, bo.getDescription()); + return lqw; + } + + /** + * 新增应用集成 + */ + @Override + public Boolean insertByBo(OaApplicationBo bo) { + OaApplication add = BeanUtil.toBean(bo, OaApplication.class); + validEntityBeforeSave(add); + boolean flag = baseMapper.insert(add) > 0; + if (flag) { + bo.setApplicationId(add.getApplicationId()); + } + return flag; + } + + /** + * 修改应用集成 + */ + @Override + public Boolean updateByBo(OaApplicationBo bo) { + OaApplication update = BeanUtil.toBean(bo, OaApplication.class); + validEntityBeforeSave(update); + return baseMapper.updateById(update) > 0; + } + + /** + * 保存前的数据校验 + */ + private void validEntityBeforeSave(OaApplication entity){ + //TODO 做一些数据校验,如唯一约束 + } + + /** + * 批量删除应用集成 + */ + @Override + public Boolean deleteWithValidByIds(Collection ids, Boolean isValid) { + if(isValid){ + //TODO 做一些业务上的校验,判断是否需要校验 + } + return baseMapper.deleteBatchIds(ids) > 0; + } +} diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFeedbackServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFeedbackServiceImpl.java index 54928b1..99f79d8 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFeedbackServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/OaFeedbackServiceImpl.java @@ -52,6 +52,18 @@ public class OaFeedbackServiceImpl implements IOaFeedbackService { return TableDataInfo.build(result); } + + /** + * 查询问题反馈列表 + */ + @Override + public TableDataInfo indexQueryList(OaFeedbackBo bo, PageQuery pageQuery) { + QueryWrapper lqw = buildQueryWrapper(bo); + lqw.eq("ofi.status", 0L); + val result = baseMapper.selectVoPageAndStatus(pageQuery.build(), lqw); + return TableDataInfo.build(result); + } + /** * 查询问题反馈列表 */ 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 cc25ff2..98f29d2 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 @@ -14,6 +14,8 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.ruoyi.oa.config.ContextUtil; import com.ruoyi.oa.domain.SysOaDetail; import com.ruoyi.oa.domain.bo.SysOaDetailBo; +import com.ruoyi.oa.domain.dto.BarDataDTO; +import com.ruoyi.oa.domain.dto.FinanceDetailDTO; import com.ruoyi.oa.mapper.SysOaDetailMapper; import lombok.RequiredArgsConstructor; import org.apache.ibatis.javassist.runtime.Desc; @@ -268,15 +270,14 @@ public class SysOaFinanceServiceImpl implements ISysOaFinanceService { return baseMapper.deleteById(financeId) > 0; } - /** - * 获取饼图数据 - * @param bo - * @return - */ @Override - public List getBarData(SysOaFinanceBo bo) { + public List getBarData(Long projectId, String financeType) { + return baseMapper.getBarData(projectId, financeType); + } - return baseMapper.getBarData(bo); + @Override + public List getFinanceDetails(Long projectId, String financeType) { + return baseMapper.getFinanceDetails(projectId, financeType); } /** 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 6b73ecc..2dae65d 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,6 +10,8 @@ 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.dto.ProjectActivityDTO; +import com.ruoyi.oa.domain.dto.ProjectDataDTO; import com.ruoyi.oa.domain.vo.*; import com.ruoyi.oa.service.CodeGeneratorService; import lombok.RequiredArgsConstructor; @@ -352,6 +354,16 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService { return baseMapper.selectExpiringForeignProjects(now, expireDays,tradeType); } + @Override + public List getProjectData(String month) { + return baseMapper.getProjectData(month); + } + + @Override + public List getProjectActivities() { + return baseMapper.getProjectActivities(); + } + private QueryWrapper buildOutWareQueryWrapper(SysOaWarehouseDetailBo bo) { QueryWrapper lqw = Wrappers.query(); lqw.like(StringUtils.isNotBlank(bo.getProjectName()), "sop.projec_name", bo.getProjectName()); diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java index 324410a..30389e6 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseDetailServiceImpl.java @@ -127,6 +127,7 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer lqw.eq(bo.getAmount() != null, SysOaWarehouseDetail::getAmount, bo.getAmount()); lqw.eq(bo.getWarehouseId() != null, SysOaWarehouseDetail::getWarehouseId, bo.getWarehouseId()); lqw.eq(bo.getFatherId() != null, SysOaWarehouseDetail::getFatherId, bo.getFatherId()); + lqw.eq(bo.getMasterId() != null, SysOaWarehouseDetail::getMasterId, bo.getMasterId()); return lqw; } @@ -248,8 +249,6 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer if(isValid){ //TODO 做一些业务上的校验,判断是否需要校验 } - - //需要增加的对应物料数量 LambdaQueryWrapper lqw = Wrappers.lambdaQuery(); lqw.in(SysOaWarehouseDetail::getId, ids.toArray()); @@ -282,5 +281,14 @@ public class SysOaWarehouseDetailServiceImpl implements ISysOaWarehouseDetailSer return TableDataInfo.build(sysOaWarehouseDetailVos); } + /** + * 删除detail的简单方法 + * @param id + */ + @Override + public void deleteById(Long id) { + baseMapper.deleteById(id); + } + } diff --git a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java index 6c864cc..eb60ff0 100644 --- a/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java +++ b/ruoyi-oa/src/main/java/com/ruoyi/oa/service/impl/SysOaWarehouseMasterServiceImpl.java @@ -245,9 +245,10 @@ public class SysOaWarehouseMasterServiceImpl implements ISysOaWarehouseMasterSer sysOaWarehouseVo.setInventory(newInventory); warehouseMapper.updateById(sysOaWarehouseVo); } - + warehouseDetailService.deleteById(sysOaWarehouseDetailVo.getId()); } // 全部做完之后删除此出库单 + return baseMapper.deleteById(masterId); } } diff --git a/ruoyi-oa/src/main/resources/mapper/oa/OaApplicationMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/OaApplicationMapper.xml new file mode 100644 index 0000000..258dc0b --- /dev/null +++ b/ruoyi-oa/src/main/resources/mapper/oa/OaApplicationMapper.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml index 8a0597a..2c144af 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaFinanceMapper.xml @@ -191,20 +191,56 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" and date_format(sof.finance_time,'%Y-%m-%d %H:%i:%s') >= date_format(#{beginTime},'%Y-%m-%d %H:%i:%s') and date_format(sof.finance_time,'%Y-%m-%d %H:%i:%s') <= date_format(#{endTime},'%Y-%m-%d %H:%i:%s') - - SELECT - DATE_FORMAT(a.create_time, '%Y-%m') AS month, - SUM(CASE WHEN a.finance_type = '0' THEN b.price ELSE 0 END) AS total_out, - SUM(CASE WHEN a.finance_type = '1' THEN b.price ELSE 0 END) AS total_in - FROM sys_oa_finance a - LEFT JOIN sys_oa_detail b - ON a.finance_id = b.finance_id - AND a.create_time >= DATE_FORMAT(DATE_SUB(NOW(), INTERVAL 5 MONTH), '%Y-%m-01') - AND DATE_ADD(DATE_FORMAT(NOW(), '%Y-%m-01'), INTERVAL 1 MONTH) > a.create_time - GROUP BY DATE_FORMAT(a.create_time, '%Y-%m') - ORDER BY month; + DATE_FORMAT(f.finance_time, '%Y-%m') AS month, + SUM(CASE WHEN f.finance_type = '0' THEN d.price ELSE 0 END) AS totalOut, + SUM(CASE WHEN f.finance_type = '1' THEN d.price ELSE 0 END) AS totalIn + FROM sys_oa_detail d + JOIN sys_oa_finance f ON d.finance_id = f.finance_id + + + + AND f.project_id = #{projectId} + + + AND f.finance_time BETWEEN + DATE_FORMAT(DATE_SUB(CURDATE(), INTERVAL 5 MONTH), '%Y-%m-01') + AND LAST_DAY(CURDATE()) + + GROUP BY DATE_FORMAT(f.finance_time, '%Y-%m') + ORDER BY month + + + diff --git a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml index 8ad23f0..c418761 100644 --- a/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml +++ b/ruoyi-oa/src/main/resources/mapper/oa/SysOaProjectMapper.xml @@ -597,6 +597,50 @@ + + + + +