盈亏排序

This commit is contained in:
2025-06-20 15:13:10 +08:00
parent 213488feb6
commit f5875180a4
6 changed files with 95 additions and 9 deletions

View File

@@ -10,9 +10,7 @@ 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;
import com.ruoyi.oa.domain.vo.*;
import com.ruoyi.oa.mapper.SysOaTaskMapper;
import lombok.RequiredArgsConstructor;
import javax.servlet.http.HttpServletResponse;
@@ -30,7 +28,6 @@ import com.ruoyi.common.core.validate.AddGroup;
import com.ruoyi.common.core.validate.EditGroup;
import com.ruoyi.common.enums.BusinessType;
import com.ruoyi.common.utils.poi.ExcelUtil;
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
import com.ruoyi.oa.service.ISysOaProjectService;
import com.ruoyi.common.core.page.TableDataInfo;
@@ -230,5 +227,20 @@ public class SysOaProjectController extends BaseController {
String month = date.format(DateTimeFormatter.ofPattern("yyyy-MM"));
return R.ok(iSysOaProjectService.getProjectData(month));
}
/**
* 项目盈亏数据
*/
@GetMapping("/projectProfit")
public TableDataInfo<ProjectProfitLossVO> projectProfit(
@RequestParam(required = false, defaultValue = "profit_loss") String sortField,
@RequestParam(required = false, defaultValue = "desc") String sortOrder,
PageQuery pageQuery
) {
// 这里PageQuery会自动带上orderByColumn和isAsc
pageQuery.setOrderByColumn(sortField);
pageQuery.setIsAsc(sortOrder);
return iSysOaProjectService.getProjectProfitLossList(sortField, sortOrder, pageQuery);
}
}

View File

@@ -0,0 +1,21 @@
package com.ruoyi.oa.domain.vo;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class ProjectProfitLossVO {
private Long projectId;
private String projectName;
private String projectNum;
private Date beginTime;
private String projectStatus;
private BigDecimal contractAmount;
private BigDecimal warehouseCost;
private BigDecimal hrCost;
private BigDecimal profitLoss;
// ...其他字段
// getter/setter
}

View File

@@ -25,6 +25,7 @@ import java.util.Map;
* @date 2024-01-11
*/
public interface SysOaProjectMapper extends BaseMapperPlus<SysOaProjectMapper, SysOaProject, SysOaProjectVo> {
Page<ProjectProfitLossVO> selectProfitLossPage(@Param("page") Page<ProjectProfitLossVO> page, @Param("ew") Wrapper<SysOaProject> wrapper);
Page<SysOaOutWarehouseListVo> selectPageOutList(@Param("page") Page<SysOaOutWarehouseListVo> page,@Param(Constants.WRAPPER) Wrapper<SysOaProject> queryWrapper);

View File

@@ -3,10 +3,7 @@ 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;
import com.ruoyi.oa.domain.vo.SysOaProjectVo;
import com.ruoyi.oa.domain.vo.*;
import com.ruoyi.oa.domain.bo.SysOaProjectBo;
import com.ruoyi.common.core.page.TableDataInfo;
import com.ruoyi.common.core.domain.PageQuery;
@@ -22,7 +19,10 @@ import java.util.List;
* @date 2024-01-11
*/
public interface ISysOaProjectService {
/**
* 项目盈亏排序
*/
TableDataInfo<ProjectProfitLossVO> getProjectProfitLossList(String sortField, String sortOrder, PageQuery pageQuery);
/**
* 查询项目管理
*/

View File

@@ -49,6 +49,22 @@ public class SysOaProjectServiceImpl implements ISysOaProjectService {
)));
@Override
public TableDataInfo<ProjectProfitLossVO> getProjectProfitLossList(String sortField, String sortOrder, PageQuery pageQuery) {
// 1. 构建分页对象
Page<ProjectProfitLossVO> page = pageQuery.build();
// 2. 构建查询条件可根据bo添加筛选
QueryWrapper<SysOaProject> wrapper = new QueryWrapper<>();
// 3. 调用自定义Mapper方法
Page<ProjectProfitLossVO> result = baseMapper.selectProfitLossPage(page, wrapper);
// 4. 返回分页数据
return TableDataInfo.build(result);
}
/**
* 查询项目管理
*/

View File

@@ -813,5 +813,41 @@
ORDER BY
TIMESTAMPDIFF(DAY, NOW(), p.finish_time) ASC
</select>
<select id="selectProfitLossPage" resultType="com.ruoyi.oa.domain.vo.ProjectProfitLossVO">
SELECT
p.project_id,
p.project_name,
p.project_num,
p.begin_time,
p.project_status,
p.funds AS contract_amount,
COALESCE(wd.total_warehouse_cost, 0) AS warehouse_cost,
COALESCE(hr.total_hr_cost, 0) AS hr_cost,
(p.funds - COALESCE(wd.total_warehouse_cost, 0) - COALESCE(hr.total_hr_cost, 0)) AS profit_loss
FROM sys_oa_project p
LEFT JOIN (
SELECT
project_id,
SUM(amount * sign_price) AS total_warehouse_cost
FROM sys_oa_warehouse_detail
WHERE del_flag = 0
GROUP BY project_id
) wd ON p.project_id = wd.project_id
LEFT JOIN (
SELECT
a.project_id,
SUM(
CASE
WHEN a.hour > 0 THEN a.hour * u.labor_cost
ELSE a.day_length * 8 * u.labor_cost
END
) AS total_hr_cost
FROM sys_oa_attendance a
JOIN sys_user u ON a.user_id = u.user_id
WHERE a.del_flag = 0
GROUP BY a.project_id
) hr ON p.project_id = hr.project_id
${ew.customSqlSegment}
</select>
</mapper>