feat(smartfactory): 工资表按工厂id查询

- 在 StaffMapper 中添加工资表查询- 在 StaffSalaryMapper 中添加按工厂id查询的方法
- 更新 StaffSalaryPageReqVO,添加工厂id列表字段
- 修改 StaffSalaryServiceImpl 中的查询逻辑,支持按工厂id筛选
This commit is contained in:
furongxin 2025-04-23 09:17:28 +08:00
parent d422522eb8
commit ba90fd2e03
5 changed files with 45 additions and 36 deletions

View File

@ -6,6 +6,8 @@ import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 厂区员工工资分页 Request VO")
@Data
@EqualsAndHashCode(callSuper = true)
@ -26,4 +28,7 @@ public class StaffSalaryPageReqVO extends PageParam {
@Schema(description = "复核状态 | 0未复核 1已复核", example = "0")
private Integer status;
@Schema(description = "工厂编码集合")
private List<Long> factoryIds;
}

View File

@ -66,6 +66,7 @@ public interface StaffMapper extends BaseMapperX<StaffDO> {
.selectAs(StaffSalaryDO::getRealAmount, StaffSalaryRespVO::getRealAmount)
.selectAs(StaffSalaryDO::getDeductionItems, StaffSalaryRespVO::getDeductionItems)
.selectAs(StaffSalaryDO::getStatus, StaffSalaryRespVO::getStatus)
.selectAs(StaffSalaryDO::getSalarySubjectItems, StaffSalaryRespVO::getSalarySubjectItems)
.selectAs(StaffSalaryDO::getCreateTime, StaffSalaryRespVO::getCreateTime);
query.leftJoin(StaffSalaryDO.class, on -> on
.eq(StaffDO::getId, StaffSalaryDO::getStaffId)

View File

@ -38,6 +38,7 @@ public interface StaffSalaryMapper extends BaseMapperX<StaffSalaryDO> {
query.eqIfPresent(StaffSalaryDO::getStaffId, reqVO.getStaffId());
query.eqIfPresent(StaffSalaryDO::getMonth, reqVO.getMonth());
query.eqIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryId());
query.inIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryIds());
query.eqIfPresent(StaffSalaryDO::getStatus, reqVO.getStatus());
query.apply(Objects.nonNull(reqVO.getWorkTypeId()), "staff.work_type_id = {0} ", reqVO.getWorkTypeId());
@ -46,5 +47,17 @@ public interface StaffSalaryMapper extends BaseMapperX<StaffSalaryDO> {
SalaryTotalVO selectSalaryTotal(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO);
List<SalarySubjectItemsVO> selectListSalarySubjectItems(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO);
default List<StaffSalaryRespVO> selectListSalarySubjectItems(StaffSalaryPageReqVO reqVO) {
MPJLambdaWrapperX<StaffSalaryDO> query = new MPJLambdaWrapperX<StaffSalaryDO>();
query.selectAs(StaffSalaryDO::getSalarySubjectItems, StaffSalaryRespVO::getSalarySubjectItems);
query.leftJoin(StaffDO.class, "staff", StaffDO::getId, StaffSalaryDO::getStaffId);
query.eqIfPresent(StaffSalaryDO::getMonth, reqVO.getMonth());
query.eqIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryId());
query.eqIfPresent(StaffSalaryDO::getStatus, reqVO.getStatus());
query.apply(Objects.nonNull(reqVO.getWorkTypeId()), "staff.work_type_id = {0} ", reqVO.getWorkTypeId());
return selectJoinList(StaffSalaryRespVO.class, query);
}
}

View File

@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.service.staffsalary;
import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.json.JsonUtils;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOALoanApi;
@ -108,7 +109,7 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
@Override
public PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO) {
if (pageReqVO.getMonth() != null) {
if (pageReqVO.getMonth() != null && pageReqVO.getStatus() == null) {
return staffMapper.selectSalaryPage(pageReqVO);
}else {
return staffSalaryMapper.selectSalaryPage(pageReqVO);
@ -260,8 +261,17 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO);
// 获取主体薪资的合计
List<SalarySubjectItemsVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO);
List<StaffSalaryRespVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO);
//直接从数据库取出来的List<Reimbursement> 实际上是List<LinkedHashMap>类型 所以不能直接遍历
//将list再次转为json串然后由json串再转为list
String json = JsonUtils.toJsonString(salarySubjectItemsVO);
salarySubjectItemsVO = JsonUtils.parseArray(json, StaffSalaryRespVO.class);
if (CollUtil.isNotEmpty(salarySubjectItemsVO)) {
Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream()
.filter(Objects::nonNull)
.map(StaffSalaryRespVO::getSalarySubjectItems)
.flatMap(List::stream)
.collect(Collectors.toMap(
SalarySubjectItemsVO::getSalarySubjectId,
vo -> new SalarySubjectItemsVO()
@ -273,6 +283,7 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
}
));
salaryTotalVO.setSalarySubjectItems(new ArrayList<>(sumMap.values()));
}
return salaryTotalVO;
}

View File

@ -31,25 +31,4 @@
AND b.work_type_id = #{pageReqVO.workTypeId}
</if>
</select>
<select id="selectListSalarySubjectItems" resultType="cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalarySubjectItemsVO">
SELECT
a.salary_subject_items
FROM
sf_staff_salary a
LEFT JOIN sf_staff b ON b.id = a.staff_id
WHERE
a.deleted = 0
<if test="pageReqVO.factoryId != null">
AND a.factory_id = #{pageReqVO.factoryId}
</if>
<if test="pageReqVO.month != null">
AND a.month = #{pageReqVO.month}
</if>
<if test="pageReqVO.status != null">
AND a.status = #{pageReqVO.status}
</if>
<if test="pageReqVO.workTypeId != null">
AND b.work_type_id = #{pageReqVO.workTypeId}
</if>
</select>
</mapper>