更新
This commit is contained in:
parent
80aa8fd246
commit
6c05b30c1c
@ -171,4 +171,16 @@ public class RepairStatisticsController {
|
|||||||
return CommonResult.success(statisticsService.pageByCustomerOrCar(reqVO,page));
|
return CommonResult.success(statisticsService.pageByCustomerOrCar(reqVO,page));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description :员工统计
|
||||||
|
* @author xyc
|
||||||
|
* @date 16:40 2025/10/23
|
||||||
|
* @param reqVO {@link QueryBusinessReqVO}
|
||||||
|
* @return cn.iocoder.yudao.framework.common.pojo.CommonResult<?>
|
||||||
|
**/
|
||||||
|
@GetMapping("/staffStatistics")
|
||||||
|
public CommonResult<?> staffStatistics(QueryBusinessReqVO reqVO) {
|
||||||
|
return CommonResult.success(statisticsService.staffStatistics(reqVO));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -0,0 +1,33 @@
|
|||||||
|
package cn.iocoder.yudao.module.base.entity;
|
||||||
|
|
||||||
|
import lombok.Data;
|
||||||
|
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @ClassName StaffStatisticsResp
|
||||||
|
* @Description : 员工统计返回
|
||||||
|
* @Author 许
|
||||||
|
* @Date 2025/10/23 16:42
|
||||||
|
* @Version 1.0.0
|
||||||
|
*/
|
||||||
|
@Data
|
||||||
|
public class StaffStatisticsResp {
|
||||||
|
/** 用户id*/
|
||||||
|
private Long userId;
|
||||||
|
|
||||||
|
/** 用户名称 */
|
||||||
|
private String nickname;
|
||||||
|
|
||||||
|
/** 工单数量 */
|
||||||
|
private Long totalTasks;
|
||||||
|
|
||||||
|
/** 工单金额 */
|
||||||
|
private BigDecimal totalMoney;
|
||||||
|
|
||||||
|
/** 工单利润 */
|
||||||
|
private BigDecimal totalProfit;
|
||||||
|
|
||||||
|
/** 工单利润率 */
|
||||||
|
private BigDecimal totalProfitRate;
|
||||||
|
}
|
||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.base.mapper;
|
package cn.iocoder.yudao.module.base.mapper;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp;
|
||||||
import cn.iocoder.yudao.module.base.vo.*;
|
import cn.iocoder.yudao.module.base.vo.*;
|
||||||
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
|
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
@ -124,4 +125,13 @@ public interface RepairStatisticsMapper {
|
|||||||
* @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.QueryTableResp>
|
* @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.QueryTableResp>
|
||||||
**/
|
**/
|
||||||
IPage<QueryTableResp> pageByCustomerOrCar(@Param("reqVO") QueryBusinessReqVO reqVO,@Param("page") Page<QueryTableResp> page);
|
IPage<QueryTableResp> pageByCustomerOrCar(@Param("reqVO") QueryBusinessReqVO reqVO,@Param("page") Page<QueryTableResp> page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 员工统计
|
||||||
|
* @author xyc
|
||||||
|
* @date 16:45 2025/10/23
|
||||||
|
* @param reqVO {@link QueryBusinessReqVO}
|
||||||
|
* @return java.util.List<cn.iocoder.yudao.module.base.entity.StaffStatisticsResp>
|
||||||
|
**/
|
||||||
|
List<StaffStatisticsResp> staffStatistics(QueryBusinessReqVO reqVO);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.base.service;
|
package cn.iocoder.yudao.module.base.service;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp;
|
||||||
import cn.iocoder.yudao.module.base.vo.*;
|
import cn.iocoder.yudao.module.base.vo.*;
|
||||||
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
|
import cn.iocoder.yudao.module.tickets.vo.DlRepairTicketsRespVO;
|
||||||
import com.baomidou.mybatisplus.core.metadata.IPage;
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
||||||
@ -100,4 +101,13 @@ public interface RepairStatisticsService {
|
|||||||
* @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.QueryTableResp>
|
* @return com.baomidou.mybatisplus.core.metadata.IPage<cn.iocoder.yudao.module.base.vo.QueryTableResp>
|
||||||
**/
|
**/
|
||||||
IPage<QueryTableResp> pageByCustomerOrCar(QueryBusinessReqVO reqVO, Page<QueryTableResp> page);
|
IPage<QueryTableResp> pageByCustomerOrCar(QueryBusinessReqVO reqVO, Page<QueryTableResp> page);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @description : 员工统计
|
||||||
|
* @author xyc
|
||||||
|
* @date 16:44 2025/10/23
|
||||||
|
* @param reqVO {@link QueryBusinessReqVO}
|
||||||
|
* @return java.util.List<cn.iocoder.yudao.module.base.entity.StaffStatisticsResp>
|
||||||
|
**/
|
||||||
|
List<StaffStatisticsResp> staffStatistics(QueryBusinessReqVO reqVO);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,5 +1,6 @@
|
|||||||
package cn.iocoder.yudao.module.base.service.impl;
|
package cn.iocoder.yudao.module.base.service.impl;
|
||||||
|
|
||||||
|
import cn.iocoder.yudao.module.base.entity.StaffStatisticsResp;
|
||||||
import cn.iocoder.yudao.module.base.mapper.RepairStatisticsMapper;
|
import cn.iocoder.yudao.module.base.mapper.RepairStatisticsMapper;
|
||||||
import cn.iocoder.yudao.module.base.service.RepairStatisticsService;
|
import cn.iocoder.yudao.module.base.service.RepairStatisticsService;
|
||||||
import cn.iocoder.yudao.module.base.vo.*;
|
import cn.iocoder.yudao.module.base.vo.*;
|
||||||
@ -10,10 +11,7 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.springframework.validation.annotation.Validated;
|
import org.springframework.validation.annotation.Validated;
|
||||||
|
|
||||||
import javax.annotation.Resource;
|
import javax.annotation.Resource;
|
||||||
import java.util.ArrayList;
|
import java.util.*;
|
||||||
import java.util.HashMap;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.Map;
|
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -161,4 +159,17 @@ public class RepairStatisticsServiceImpl implements RepairStatisticsService {
|
|||||||
IPage<QueryTableResp> queryTableResps = statisticsMapper.pageByCustomerOrCar(reqVO,page);
|
IPage<QueryTableResp> queryTableResps = statisticsMapper.pageByCustomerOrCar(reqVO,page);
|
||||||
return queryTableResps;
|
return queryTableResps;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param reqVO {@link QueryBusinessReqVO}
|
||||||
|
* @return java.util.List<cn.iocoder.yudao.module.base.entity.StaffStatisticsResp>
|
||||||
|
* @description : 员工统计
|
||||||
|
* @author xyc
|
||||||
|
* @date 16:44 2025/10/23
|
||||||
|
**/
|
||||||
|
@Override
|
||||||
|
public List<StaffStatisticsResp> staffStatistics(QueryBusinessReqVO reqVO) {
|
||||||
|
List<StaffStatisticsResp> staffStatisticsResps = statisticsMapper.staffStatistics(reqVO);
|
||||||
|
return staffStatisticsResps;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -11,6 +11,7 @@ import org.apache.ibatis.annotations.Param;
|
|||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 针对表【dl_repair_so(采购单领料单)】的数据库操作Mapper
|
* 针对表【dl_repair_so(采购单领料单)】的数据库操作Mapper
|
||||||
@ -29,7 +30,7 @@ public interface DlRepairSoMapper extends BaseMapper<DlRepairSo> {
|
|||||||
* @param repairSoReqVO 查询条件
|
* @param repairSoReqVO 查询条件
|
||||||
* @return 采购总金额
|
* @return 采购总金额
|
||||||
**/
|
**/
|
||||||
BigDecimal getPurchaseAmount(DlRepairSoReqVO repairSoReqVO);
|
Map<String, Object> getPurchaseAmount(DlRepairSoReqVO repairSoReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据条件查询指定数量:待确认的领料单 待确认的退料单
|
* 根据条件查询指定数量:待确认的领料单 待确认的退料单
|
||||||
@ -50,14 +51,14 @@ public interface DlRepairSoMapper extends BaseMapper<DlRepairSo> {
|
|||||||
* @return java.util.List<cn.iocoder.yudao.module.tickets.vo.AppWaresGroupVO>
|
* @return java.util.List<cn.iocoder.yudao.module.tickets.vo.AppWaresGroupVO>
|
||||||
**/
|
**/
|
||||||
List<DlRepairSoiRespVO> selectByIdGroup(@Param("id")String id);
|
List<DlRepairSoiRespVO> selectByIdGroup(@Param("id")String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 根据ID查询主表及子表数据
|
* 根据ID查询主表及子表数据
|
||||||
* @param id 主表ID
|
* @param id 主表ID
|
||||||
* @return DlRepairSo 主表及子表数据
|
* @return DlRepairSo 主表及子表数据
|
||||||
*/
|
*/
|
||||||
DlRepairSo selectWithItemsById(@Param("id") String id);
|
DlRepairSo selectWithItemsById(@Param("id") String id);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 分页查询主表及子表数据
|
* 分页查询主表及子表数据
|
||||||
* @param repairSoReqVO 查询条件
|
* @param repairSoReqVO 查询条件
|
||||||
@ -65,4 +66,4 @@ public interface DlRepairSoMapper extends BaseMapper<DlRepairSo> {
|
|||||||
* @return IPage<DlRepairSo> 分页结果
|
* @return IPage<DlRepairSo> 分页结果
|
||||||
*/
|
*/
|
||||||
IPage<DlRepairSo> getRepairSoPageWithItems(@Param("map") DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
IPage<DlRepairSo> getRepairSoPageWithItems(@Param("map") DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
||||||
}
|
}
|
||||||
|
|||||||
@ -8,6 +8,7 @@ import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|||||||
import com.baomidou.mybatisplus.extension.service.IService;
|
import com.baomidou.mybatisplus.extension.service.IService;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 针对表【dl_repair_so(采购单领料单)】的数据库操作Service
|
* 针对表【dl_repair_so(采购单领料单)】的数据库操作Service
|
||||||
@ -34,7 +35,7 @@ public interface DlRepairSoService extends IService<DlRepairSo> {
|
|||||||
* @date 18:14 2024/9/14
|
* @date 18:14 2024/9/14
|
||||||
**/
|
**/
|
||||||
IPage<DlRepairSo> getRepairSoPage(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
IPage<DlRepairSo> getRepairSoPage(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购单/领料单新增分页(包含子表数据)
|
* 采购单/领料单新增分页(包含子表数据)
|
||||||
*
|
*
|
||||||
@ -45,7 +46,7 @@ public interface DlRepairSoService extends IService<DlRepairSo> {
|
|||||||
* @date 18:14 2024/9/14
|
* @date 18:14 2024/9/14
|
||||||
**/
|
**/
|
||||||
IPage<DlRepairSo> getRepairSoPageWithItems(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
IPage<DlRepairSo> getRepairSoPageWithItems(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 统计采购金额
|
* 统计采购金额
|
||||||
*
|
*
|
||||||
@ -54,7 +55,7 @@ public interface DlRepairSoService extends IService<DlRepairSo> {
|
|||||||
* @author 系统管理员
|
* @author 系统管理员
|
||||||
* @date 2024/12/10
|
* @date 2024/12/10
|
||||||
**/
|
**/
|
||||||
BigDecimal getPurchaseAmount(DlRepairSoReqVO repairSoReqVO);
|
Map<String, Object> getPurchaseAmount(DlRepairSoReqVO repairSoReqVO);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购单/领料单 作废
|
* 采购单/领料单 作废
|
||||||
|
|||||||
@ -183,7 +183,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl<DlRepairSoMapper, DlRepai
|
|||||||
public IPage<DlRepairSo> getRepairSoPage(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page) {
|
public IPage<DlRepairSo> getRepairSoPage(DlRepairSoReqVO repairSoReqVO, Page<DlRepairSo> page) {
|
||||||
return baseMapper.getRepairSoPage(repairSoReqVO, page);
|
return baseMapper.getRepairSoPage(repairSoReqVO, page);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* 采购单/领料单新增分页(包含子表数据)
|
* 采购单/领料单新增分页(包含子表数据)
|
||||||
* @param repairSoReqVO 查询对象
|
* @param repairSoReqVO 查询对象
|
||||||
@ -198,7 +198,7 @@ public class DlRepairSoServiceImpl extends ServiceImpl<DlRepairSoMapper, DlRepai
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public BigDecimal getPurchaseAmount(DlRepairSoReqVO repairSoReqVO) {
|
public Map<String, Object> getPurchaseAmount(DlRepairSoReqVO repairSoReqVO) {
|
||||||
return dlRepairSoMapper.getPurchaseAmount(repairSoReqVO);
|
return dlRepairSoMapper.getPurchaseAmount(repairSoReqVO);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -948,6 +948,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
|
|
||||||
// 进厂数(所有在范围内创建的)
|
// 进厂数(所有在范围内创建的)
|
||||||
Map<String, Long> newOrderStats = ticketsInRange.stream()
|
Map<String, Long> newOrderStats = ticketsInRange.stream()
|
||||||
|
// .filter(item -> TicketsStatusEnum.NO_WORK.getCode().equals(item.getTicketsStatus()))
|
||||||
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
.collect(Collectors.groupingBy(DlRepairTickets::getRepairType, Collectors.counting()));
|
||||||
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang"));
|
statsList.add(createStatsNode("newOrderNum", "订单(进厂数)", newOrderStats, "jinchang"));
|
||||||
|
|
||||||
@ -1694,7 +1695,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
statusList = Arrays.asList("04", "05", "07", "01", "06", "02");
|
statusList = Arrays.asList("04", "05", "07", "01", "06", "02");
|
||||||
} else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
} else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
//进厂
|
//进厂
|
||||||
statusList.add(TicketsStatusEnum.NO_WORK.getCode());
|
// statusList.add(TicketsStatusEnum.NO_WORK.getCode());
|
||||||
} else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
} else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
//已竣工
|
//已竣工
|
||||||
statusList = Arrays.asList("07", "01", "06", "02", "08");
|
statusList = Arrays.asList("07", "01", "06", "02", "08");
|
||||||
@ -2845,7 +2846,7 @@ public class DlRepairTicketsServiceImpl extends ServiceImpl<DlRepairTicketsMappe
|
|||||||
statusList = Arrays.asList("04", "05", "07", "01", "06", "02");
|
statusList = Arrays.asList("04", "05", "07", "01", "06", "02");
|
||||||
} else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
} else if ("jinchang".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
//进厂
|
//进厂
|
||||||
statusList.add(TicketsStatusEnum.NO_WORK.getCode());
|
// statusList.add(TicketsStatusEnum.NO_WORK.getCode());
|
||||||
} else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
} else if ("yijungong".equals(repairTicketsReqVO.getTicketsStatus())) {
|
||||||
//已竣工
|
//已竣工
|
||||||
statusList = Arrays.asList("07", "01", "06", "02", "08");
|
statusList = Arrays.asList("07", "01", "06", "02", "08");
|
||||||
|
|||||||
@ -219,4 +219,39 @@
|
|||||||
AND drt.car_no LIKE CONCAT('%', #{reqVO.carNo}, '%')
|
AND drt.car_no LIKE CONCAT('%', #{reqVO.carNo}, '%')
|
||||||
</if>
|
</if>
|
||||||
</select>
|
</select>
|
||||||
|
<select id="staffStatistics" resultType="cn.iocoder.yudao.module.base.entity.StaffStatisticsResp"
|
||||||
|
parameterType="cn.iocoder.yudao.module.base.vo.QueryBusinessReqVO">
|
||||||
|
SELECT
|
||||||
|
su.id AS userId,
|
||||||
|
su.username,
|
||||||
|
su.nickname,
|
||||||
|
su.user_type,
|
||||||
|
su.dept_id,
|
||||||
|
su.mobile,
|
||||||
|
su.sex,
|
||||||
|
su.avatar,
|
||||||
|
COUNT(drt.id) AS totalTasks, -- 工单数量
|
||||||
|
SUM(drt.item_money) AS totalMoney, -- 总金额
|
||||||
|
SUM(drt.item_profit) AS totalProfit, -- 总毛利
|
||||||
|
AVG(IFNULL(drt.item_profit_rate, 0)) AS averageProfitRate -- 平均毛利率
|
||||||
|
FROM
|
||||||
|
system_users su
|
||||||
|
LEFT JOIN
|
||||||
|
dl_repair_titem drt ON FIND_IN_SET(su.id, drt.repair_ids) > 0 -- 匹配维修人员
|
||||||
|
INNER JOIN
|
||||||
|
system_user_role sr ON su.id = sr.user_id AND sr.deleted = 0
|
||||||
|
INNER JOIN
|
||||||
|
system_role sr2 ON sr.role_id = sr2.id
|
||||||
|
INNER JOIN
|
||||||
|
company_staff dsc ON dsc.user_id = su.id
|
||||||
|
WHERE
|
||||||
|
su.deleted = 0
|
||||||
|
AND sr2.service_package_id = 'weixiu' -- 服务包 ID
|
||||||
|
AND dsc.deleted = 0
|
||||||
|
GROUP BY
|
||||||
|
su.id
|
||||||
|
ORDER BY
|
||||||
|
totalTasks DESC;
|
||||||
|
|
||||||
|
</select>
|
||||||
</mapper>
|
</mapper>
|
||||||
|
|||||||
@ -375,15 +375,15 @@
|
|||||||
</select>
|
</select>
|
||||||
|
|
||||||
<!-- 统计采购金额 -->
|
<!-- 统计采购金额 -->
|
||||||
<select id="getPurchaseAmount" resultType="java.math.BigDecimal">
|
<select id="getPurchaseAmount">
|
||||||
SELECT
|
SELECT
|
||||||
COALESCE(SUM(so.total_price), 0)
|
COALESCE(SUM(so.total_price), 0) AS purchaseAmount,
|
||||||
|
SUM(so.item_count) AS purchaseCount
|
||||||
FROM
|
FROM
|
||||||
dl_repair_so so
|
dl_repair_so so
|
||||||
LEFT JOIN dl_ticket_wares dtw ON so.tw_id = dtw.id
|
LEFT JOIN dl_ticket_wares dtw ON so.tw_id = dtw.id
|
||||||
WHERE
|
WHERE
|
||||||
so.deleted = '0'
|
so.deleted = '0'
|
||||||
AND so.so_type = '01' <!-- 01表示采购单 -->
|
|
||||||
<if test="soType != null and soType != ''">
|
<if test="soType != null and soType != ''">
|
||||||
and so.so_type = #{soType}
|
and so.so_type = #{soType}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
@ -726,7 +726,7 @@
|
|||||||
select drr.other_data as otherData, drt.pay_status as payType
|
select drr.other_data as otherData, drt.pay_status as payType
|
||||||
FROM dl_repair_tickets drt
|
FROM dl_repair_tickets drt
|
||||||
JOIN dl_repair_records drr ON drt.id = drr.ticket_id
|
JOIN dl_repair_records drr ON drt.id = drr.ticket_id
|
||||||
<where>drt.deleted = 0 and drr.deleted = 0 and drr.type = 'jssp'
|
<where>drt.deleted = 0 and drr.deleted = 0 and drr.type = 'jssp' and drt.pay_status != '04'
|
||||||
<if test="ew != null and ew.customSqlSegment != null and ew.customSqlSegment != ''">
|
<if test="ew != null and ew.customSqlSegment != null and ew.customSqlSegment != ''">
|
||||||
AND ${ew.sqlSegment}
|
AND ${ew.sqlSegment}
|
||||||
</if>
|
</if>
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user