添加报工记录代码
修复报工的排序问题
This commit is contained in:
@@ -1,14 +1,18 @@
|
||||
package com.ruoyi.oa.controller;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.List;
|
||||
import java.util.Arrays;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportCardVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportPieVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportTrendVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.validation.constraints.*;
|
||||
import cn.dev33.satoken.annotation.SaCheckPermission;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
import org.springframework.web.bind.annotation.*;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import com.ruoyi.common.annotation.RepeatSubmit;
|
||||
@@ -49,6 +53,16 @@ public class OaProjectReportController extends BaseController {
|
||||
return iOaProjectReportService.queryPageList(bo, pageQuery);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询项目报工列表
|
||||
*/
|
||||
@SaCheckPermission("oa:projectReport:list")
|
||||
@GetMapping("/report")
|
||||
public R<List<OaProjectReportVo>> clearList( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) {
|
||||
return R.ok(iOaProjectReportService.clearList(start,end));
|
||||
}
|
||||
|
||||
/**
|
||||
* 导出项目报工列表
|
||||
*/
|
||||
@@ -108,6 +122,19 @@ public class OaProjectReportController extends BaseController {
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 数据统计接口
|
||||
*/
|
||||
@GetMapping("/rank")
|
||||
public R<List<OaProjectReportVo>> getRankData(@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end
|
||||
){
|
||||
|
||||
return R.ok(iOaProjectReportService.getRankData(start,end));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 数据统计接口
|
||||
*/
|
||||
@@ -116,4 +143,39 @@ public class OaProjectReportController extends BaseController {
|
||||
|
||||
return R.ok(iOaProjectReportService.getCardData());
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/reports/trend?start=2025-06-01&end=2025-06-07
|
||||
*/
|
||||
@GetMapping("/trend")
|
||||
public R<List<ProjectReportTrendVo>> trend(
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end
|
||||
) {
|
||||
return R.ok(iOaProjectReportService.getTrend(start, end));
|
||||
}
|
||||
|
||||
/**
|
||||
* GET /api/reports/distribution
|
||||
*/
|
||||
@GetMapping("/distribution")
|
||||
public R<List<ProjectReportPieVo>> distribution(
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end
|
||||
) {
|
||||
return R.ok(iOaProjectReportService.getDistribution(start,end));
|
||||
}
|
||||
|
||||
@GetMapping("/projects")
|
||||
public R<List<OaProjectReportVo>> getProjects( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) {
|
||||
return R.ok(iOaProjectReportService.getProjects(start,end));
|
||||
}
|
||||
|
||||
|
||||
@GetMapping("/summary")
|
||||
public R<List<OaProjectReportVo>> summary( @RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate start,
|
||||
@RequestParam @DateTimeFormat(iso = DateTimeFormat.ISO.DATE) LocalDate end) {
|
||||
return R.ok(iOaProjectReportService.getSummaryData(start,end));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -58,5 +58,9 @@ public class OaApplication extends BaseEntity {
|
||||
* 备注
|
||||
*/
|
||||
private String remark;
|
||||
/**
|
||||
* 路由类型
|
||||
*/
|
||||
private String routeType;
|
||||
|
||||
}
|
||||
|
||||
@@ -58,4 +58,10 @@ public class OaProjectReport extends BaseEntity {
|
||||
*/
|
||||
private Long isTrip;
|
||||
|
||||
/**
|
||||
* 报工时间
|
||||
*/
|
||||
private Long workType;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -78,5 +78,10 @@ public class OaApplicationBo extends BaseEntity {
|
||||
*/
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 路由类型
|
||||
*/
|
||||
private String routeType;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -76,4 +76,10 @@ public class OaProjectReportBo extends BaseEntity {
|
||||
*/
|
||||
private String nickName;
|
||||
|
||||
/**
|
||||
* 报工时间
|
||||
*/
|
||||
private Long workType;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -65,5 +65,9 @@ public class OaApplicationVo {
|
||||
@ExcelProperty(value = "备注")
|
||||
private String remark;
|
||||
|
||||
/**
|
||||
* 路由类型
|
||||
*/
|
||||
private String routeType;
|
||||
|
||||
}
|
||||
|
||||
@@ -87,6 +87,46 @@ public class OaProjectReportVo {
|
||||
*/
|
||||
private Long isTrip;
|
||||
|
||||
/**
|
||||
* 报工次数
|
||||
*/
|
||||
private Long count;
|
||||
/**
|
||||
* 报工次数
|
||||
*/
|
||||
private Long reportCount;
|
||||
|
||||
/**
|
||||
* 项目剩余时间
|
||||
*/
|
||||
private Long remainTime;
|
||||
|
||||
/**
|
||||
* 项目状态
|
||||
*/
|
||||
private Long projectStatus;
|
||||
|
||||
/**
|
||||
* 报工时间
|
||||
*/
|
||||
private Date createTime;
|
||||
|
||||
/**
|
||||
* 报工时间
|
||||
*/
|
||||
private Long workType;
|
||||
|
||||
/**
|
||||
* inWorkNum
|
||||
* 国内工作时间
|
||||
*/
|
||||
private Long inWorkNum;
|
||||
|
||||
/**
|
||||
* inWorkNum
|
||||
* 国外工作时间
|
||||
*/
|
||||
private Long outWorkNum;
|
||||
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,11 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class ProjectReportPieVo {
|
||||
|
||||
private String projectName;
|
||||
private Integer value;
|
||||
}
|
||||
@@ -0,0 +1,14 @@
|
||||
package com.ruoyi.oa.domain.vo;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Data
|
||||
public class ProjectReportTrendVo {
|
||||
|
||||
private LocalDate date;
|
||||
|
||||
private Integer count;
|
||||
|
||||
}
|
||||
@@ -6,9 +6,13 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
||||
import com.ruoyi.oa.domain.OaProjectReport;
|
||||
import com.ruoyi.oa.domain.vo.OaProjectReportVo;
|
||||
import com.ruoyi.common.core.mapper.BaseMapperPlus;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportPieVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportTrendVo;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 项目报工Mapper接口
|
||||
@@ -25,4 +29,26 @@ public interface OaProjectReportMapper extends BaseMapperPlus<OaProjectReportMap
|
||||
Long countWithPending(Date date);
|
||||
|
||||
Long countWithCompleted(Date createTime);
|
||||
|
||||
/**
|
||||
* 报工趋势:按天统计报工记录数
|
||||
*/
|
||||
List<ProjectReportTrendVo> selectReportTrend(
|
||||
@Param("start")
|
||||
LocalDate start,
|
||||
@Param("end") LocalDate end
|
||||
);
|
||||
|
||||
/**
|
||||
* 项目分布:各项目报工次数分布
|
||||
*/
|
||||
List<ProjectReportPieVo> selectProjectDistribution(@Param("start") LocalDate start, @Param("end") LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> selectRankData(@Param("start") LocalDate start, @Param("end") LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> getProjects(@Param("start") LocalDate start, @Param("end") LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> getClearList(@Param("start") LocalDate start, @Param("end") LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> getSummaryData(@Param("start") LocalDate start, @Param("end") LocalDate end);
|
||||
}
|
||||
|
||||
@@ -1,12 +1,14 @@
|
||||
package com.ruoyi.oa.service;
|
||||
|
||||
import com.ruoyi.oa.domain.OaProjectReport;
|
||||
import com.ruoyi.oa.domain.vo.OaProjectReportVo;
|
||||
import com.ruoyi.oa.domain.bo.OaProjectReportBo;
|
||||
import com.ruoyi.common.core.page.TableDataInfo;
|
||||
import com.ruoyi.common.core.domain.PageQuery;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportCardVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportPieVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportTrendVo;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@@ -54,4 +56,16 @@ public interface IOaProjectReportService {
|
||||
*/
|
||||
ProjectReportCardVo getCardData();
|
||||
|
||||
public List<ProjectReportTrendVo> getTrend(LocalDate start, LocalDate end);
|
||||
|
||||
public List<ProjectReportPieVo> getDistribution(LocalDate start, LocalDate end);
|
||||
|
||||
|
||||
List<OaProjectReportVo> getRankData(LocalDate start, LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> getProjects(LocalDate start, LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> clearList(LocalDate start, LocalDate end);
|
||||
|
||||
List<OaProjectReportVo> getSummaryData(LocalDate start, LocalDate end);
|
||||
}
|
||||
|
||||
@@ -7,11 +7,12 @@ 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 com.ruoyi.oa.domain.vo.ProjectReportCardVo;
|
||||
import liquibase.pro.packaged.D;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportPieVo;
|
||||
import com.ruoyi.oa.domain.vo.ProjectReportTrendVo;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
import org.springframework.stereotype.Service;
|
||||
import com.ruoyi.oa.domain.bo.OaProjectReportBo;
|
||||
import com.ruoyi.oa.domain.vo.OaProjectReportVo;
|
||||
@@ -22,10 +23,7 @@ import com.ruoyi.oa.service.IOaProjectReportService;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.ZoneId;
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Collection;
|
||||
import java.util.*;
|
||||
|
||||
/**
|
||||
* 项目报工Service业务层处理
|
||||
@@ -71,6 +69,7 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService {
|
||||
QueryWrapper<OaProjectReport> lqw = Wrappers.query();
|
||||
lqw.eq("opr.del_flag", 0);
|
||||
lqw.eq(bo.getUserId()!=null, "opr.user_id", bo.getUserId());
|
||||
lqw.eq(bo.getWorkType()!=null, "opr.work_type", bo.getWorkType());
|
||||
|
||||
lqw.eq(bo.getProjectId() != null, "opr.project_id", bo.getProjectId());
|
||||
lqw.like(StringUtils.isNotBlank(bo.getNickName()), "su.nick_name", bo.getNickName());
|
||||
@@ -88,6 +87,7 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService {
|
||||
lqw.ge("opr.create_time", start)
|
||||
.lt("opr.create_time", end); // [start, end)
|
||||
}
|
||||
lqw.orderByDesc("opr.create_time");
|
||||
return lqw;
|
||||
}
|
||||
|
||||
@@ -176,9 +176,41 @@ public class OaProjectReportServiceImpl implements IOaProjectReportService {
|
||||
projectReportCardVo.setTodayCountChange(baseMapper.selectCount(ClearbuildQueryWrapper(oaProjectReportBo)));
|
||||
|
||||
// 查询昨日涉及项目数据量
|
||||
oaProjectReportQueryWrapper.select("COUNT(DISTINCT project_id) AS cnt");
|
||||
oaProjectReportQueryWrapper.select("DISTINCT project_id");
|
||||
projectReportCardVo.setProjectChange(baseMapper.selectCount(oaProjectReportQueryWrapper));
|
||||
projectReportCardVo.setCompletionChange(baseMapper.countWithCompleted(yesterday));
|
||||
return projectReportCardVo;
|
||||
}
|
||||
|
||||
public List<ProjectReportTrendVo> getTrend(LocalDate start, LocalDate end) {
|
||||
return baseMapper.selectReportTrend(start, end);
|
||||
}
|
||||
|
||||
public List<ProjectReportPieVo> getDistribution( LocalDate start, LocalDate end) {
|
||||
return baseMapper.selectProjectDistribution(start,end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OaProjectReportVo> getRankData(LocalDate start, LocalDate end) {
|
||||
|
||||
return baseMapper.selectRankData(start,end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OaProjectReportVo> getProjects(LocalDate start, LocalDate end) {
|
||||
return baseMapper.getProjects(start,end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OaProjectReportVo> clearList(LocalDate start, LocalDate end) {
|
||||
|
||||
return baseMapper.getClearList(start,end);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<OaProjectReportVo> getSummaryData(LocalDate start, LocalDate end) {
|
||||
|
||||
return baseMapper.getSummaryData(start,end);
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
@@ -36,6 +36,7 @@
|
||||
op.project_num,
|
||||
op.project_code,
|
||||
su.nick_name,
|
||||
opr.work_type,
|
||||
sd.dept_name
|
||||
from oa_project_report opr
|
||||
left join sys_oa_project op on opr.project_id = op.project_id
|
||||
@@ -60,6 +61,7 @@
|
||||
op.project_name,
|
||||
op.project_num,
|
||||
op.project_code,
|
||||
opr.work_type,
|
||||
su.nick_name,
|
||||
sd.dept_name
|
||||
from oa_project_report opr
|
||||
@@ -74,10 +76,11 @@
|
||||
SELECT COUNT(*)
|
||||
FROM oa_project_report
|
||||
WHERE del_flag = 0
|
||||
AND content LIKE CONCAT('%', '完成', '%')
|
||||
AND create_time >= #{createTime}
|
||||
AND DATE_FORMAT(create_time, '%Y-%m') = DATE_FORMAT(#{createTime}, '%Y-%m')
|
||||
</select>
|
||||
|
||||
|
||||
|
||||
<!-- 查询 content 中包含 “未完成” 或 “等待” 或 “待” 的记录数,按时间过滤 -->
|
||||
<select id="countWithPending" parameterType="java.util.Date" resultType="Long">
|
||||
SELECT COUNT(*)
|
||||
@@ -90,5 +93,134 @@
|
||||
)
|
||||
AND create_time >= #{createTime}
|
||||
</select>
|
||||
<!-- 按天统计报工数 -->
|
||||
<select id="selectReportTrend" resultType="com.ruoyi.oa.domain.vo.ProjectReportTrendVo">
|
||||
SELECT
|
||||
DATE(create_time) AS date,
|
||||
COUNT(*) AS count
|
||||
FROM oa_project_report r
|
||||
WHERE create_time
|
||||
AND DATE(r.create_time) BETWEEN
|
||||
DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
AND del_flag = 0
|
||||
GROUP BY DATE(create_time)
|
||||
ORDER BY DATE(create_time)
|
||||
</select>
|
||||
|
||||
<!-- 各项目报工分布 -->
|
||||
<select id="selectProjectDistribution" resultType="com.ruoyi.oa.domain.vo.ProjectReportPieVo">
|
||||
SELECT
|
||||
p.project_name AS projectName,
|
||||
COUNT(r.report_id) AS value
|
||||
FROM oa_project_report r
|
||||
JOIN sys_oa_project p ON r.project_id = p.project_id
|
||||
WHERE r.del_flag = 0
|
||||
AND DATE(r.create_time) BETWEEN
|
||||
DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
GROUP BY p.project_name
|
||||
ORDER BY value DESC
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 查询每个 user_id 的报工次数,并返回 nickName, deptName, count -->
|
||||
<select id="selectRankData"
|
||||
resultType="com.ruoyi.oa.domain.vo.OaProjectReportVo">
|
||||
SELECT
|
||||
u.nick_name AS nickName,
|
||||
d.dept_name AS deptName,
|
||||
COUNT(r.report_id) AS count
|
||||
FROM oa_project_report r
|
||||
INNER JOIN sys_user u
|
||||
ON r.user_id = u.user_id
|
||||
INNER JOIN sys_dept d
|
||||
ON u.dept_id = d.dept_id
|
||||
WHERE r.del_flag = 0
|
||||
AND DATE(r.create_time) BETWEEN
|
||||
DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
GROUP BY r.user_id
|
||||
</select>
|
||||
|
||||
|
||||
<select id="getProjects"
|
||||
parameterType="map"
|
||||
resultType="com.ruoyi.oa.domain.vo.OaProjectReportVo">
|
||||
SELECT
|
||||
opr.project_id AS projectId,
|
||||
COUNT(opr.report_id) AS reportCount,
|
||||
proj.project_name AS projectName,
|
||||
proj.project_status AS projectStatus,
|
||||
proj.project_num AS projectNum,
|
||||
opr.work_type AS workType,
|
||||
proj.project_code AS projectCode,
|
||||
TIMESTAMPDIFF(
|
||||
DAY,
|
||||
CURDATE(), -- 从今天开始
|
||||
DATE(proj.finish_time) -- 到项目结束日期(仅取日期部分)
|
||||
) AS remainTime
|
||||
FROM oa_project_report opr
|
||||
INNER JOIN sys_oa_project proj
|
||||
ON opr.project_id = proj.project_id
|
||||
WHERE opr.del_flag = 0
|
||||
AND DATE(opr.create_time)
|
||||
BETWEEN DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
GROUP BY opr.project_id,workType
|
||||
</select>
|
||||
|
||||
<select id="getClearList" resultType="com.ruoyi.oa.domain.vo.OaProjectReportVo">
|
||||
select opr.report_id,
|
||||
opr.user_id,
|
||||
is_trip,
|
||||
work_place,
|
||||
opr.project_id,
|
||||
content,
|
||||
opr.create_time,
|
||||
opr.create_by,
|
||||
opr.update_time,
|
||||
opr.update_by,
|
||||
opr.del_flag,
|
||||
opr.remark,
|
||||
op.project_name,
|
||||
op.project_num,
|
||||
op.project_code,
|
||||
su.nick_name,
|
||||
opr.work_type,
|
||||
sd.dept_name
|
||||
from oa_project_report opr
|
||||
left join sys_oa_project op on opr.project_id = op.project_id
|
||||
left join sys_user su on su.user_id = opr.user_id
|
||||
left join sys_dept sd on su.dept_id = sd.dept_id
|
||||
WHERE opr.del_flag = 0
|
||||
AND DATE(opr.create_time)
|
||||
BETWEEN DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
ORDER BY opr.create_time DESC
|
||||
LIMIT 20
|
||||
</select>
|
||||
|
||||
<select id="getSummaryData" resultType="com.ruoyi.oa.domain.vo.OaProjectReportVo">
|
||||
SELECT
|
||||
u.nick_name AS nickName,
|
||||
d.dept_name AS deptName,
|
||||
-- 国内出差次数:仅统计标记为出差且 work_type=0 的记录
|
||||
SUM(CASE WHEN r.is_trip = 1 AND r.work_type = 0 THEN 1 ELSE 0 END)
|
||||
AS inWorkNum,
|
||||
-- 国外出差次数:仅统计标记为出差且 work_type=1 的记录
|
||||
SUM(CASE WHEN r.is_trip = 1 AND r.work_type = 1 THEN 1 ELSE 0 END)
|
||||
AS outWorkNum,
|
||||
-- 报工总次数:统计所有未删除记录
|
||||
COUNT(1) AS reportCount
|
||||
FROM oa_project_report r
|
||||
JOIN sys_user u ON r.user_id = u.user_id
|
||||
LEFT JOIN sys_dept d ON u.dept_id = d.dept_id
|
||||
WHERE r.del_flag = 0
|
||||
AND DATE(r.create_time)
|
||||
BETWEEN DATE_FORMAT(#{start}, '%Y-%m-%d')
|
||||
AND DATE_FORMAT(#{end}, '%Y-%m-%d')
|
||||
GROUP BY u.user_id, u.nick_name, d.dept_name
|
||||
ORDER BY u.nick_name
|
||||
</select>
|
||||
</mapper>
|
||||
|
||||
Reference in New Issue
Block a user