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.EqualsAndHashCode;
import lombok.ToString; import lombok.ToString;
import java.util.List;
@Schema(description = "管理后台 - 厂区员工工资分页 Request VO") @Schema(description = "管理后台 - 厂区员工工资分页 Request VO")
@Data @Data
@EqualsAndHashCode(callSuper = true) @EqualsAndHashCode(callSuper = true)
@ -26,4 +28,7 @@ public class StaffSalaryPageReqVO extends PageParam {
@Schema(description = "复核状态 | 0未复核 1已复核", example = "0") @Schema(description = "复核状态 | 0未复核 1已复核", example = "0")
private Integer status; 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::getRealAmount, StaffSalaryRespVO::getRealAmount)
.selectAs(StaffSalaryDO::getDeductionItems, StaffSalaryRespVO::getDeductionItems) .selectAs(StaffSalaryDO::getDeductionItems, StaffSalaryRespVO::getDeductionItems)
.selectAs(StaffSalaryDO::getStatus, StaffSalaryRespVO::getStatus) .selectAs(StaffSalaryDO::getStatus, StaffSalaryRespVO::getStatus)
.selectAs(StaffSalaryDO::getSalarySubjectItems, StaffSalaryRespVO::getSalarySubjectItems)
.selectAs(StaffSalaryDO::getCreateTime, StaffSalaryRespVO::getCreateTime); .selectAs(StaffSalaryDO::getCreateTime, StaffSalaryRespVO::getCreateTime);
query.leftJoin(StaffSalaryDO.class, on -> on query.leftJoin(StaffSalaryDO.class, on -> on
.eq(StaffDO::getId, StaffSalaryDO::getStaffId) .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::getStaffId, reqVO.getStaffId());
query.eqIfPresent(StaffSalaryDO::getMonth, reqVO.getMonth()); query.eqIfPresent(StaffSalaryDO::getMonth, reqVO.getMonth());
query.eqIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryId()); query.eqIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryId());
query.inIfPresent(StaffSalaryDO::getFactoryId, reqVO.getFactoryIds());
query.eqIfPresent(StaffSalaryDO::getStatus, reqVO.getStatus()); query.eqIfPresent(StaffSalaryDO::getStatus, reqVO.getStatus());
query.apply(Objects.nonNull(reqVO.getWorkTypeId()), "staff.work_type_id = {0} ", reqVO.getWorkTypeId()); 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); 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.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult; 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.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
import cn.iocoder.yudao.module.bpm.api.oa.BpmOALoanApi; import cn.iocoder.yudao.module.bpm.api.oa.BpmOALoanApi;
@ -108,7 +109,7 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
@Override @Override
public PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO) { public PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO) {
if (pageReqVO.getMonth() != null) { if (pageReqVO.getMonth() != null && pageReqVO.getStatus() == null) {
return staffMapper.selectSalaryPage(pageReqVO); return staffMapper.selectSalaryPage(pageReqVO);
}else { }else {
return staffSalaryMapper.selectSalaryPage(pageReqVO); return staffSalaryMapper.selectSalaryPage(pageReqVO);
@ -260,19 +261,29 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO); SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO);
// 获取主体薪资的合计 // 获取主体薪资的合计
List<SalarySubjectItemsVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO); List<StaffSalaryRespVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO);
Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream() //直接从数据库取出来的List<Reimbursement> 实际上是List<LinkedHashMap>类型 所以不能直接遍历
.collect(Collectors.toMap( //将list再次转为json串然后由json串再转为list
SalarySubjectItemsVO::getSalarySubjectId, String json = JsonUtils.toJsonString(salarySubjectItemsVO);
vo -> new SalarySubjectItemsVO() salarySubjectItemsVO = JsonUtils.parseArray(json, StaffSalaryRespVO.class);
.setSalarySubjectId(vo.getSalarySubjectId())
.setAmount(vo.getAmount()), if (CollUtil.isNotEmpty(salarySubjectItemsVO)) {
(vo1, vo2) -> { Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream()
vo1.setAmount(vo1.getAmount().add(vo2.getAmount())); .filter(Objects::nonNull)
return vo1; .map(StaffSalaryRespVO::getSalarySubjectItems)
} .flatMap(List::stream)
)); .collect(Collectors.toMap(
salaryTotalVO.setSalarySubjectItems(new ArrayList<>(sumMap.values())); SalarySubjectItemsVO::getSalarySubjectId,
vo -> new SalarySubjectItemsVO()
.setSalarySubjectId(vo.getSalarySubjectId())
.setAmount(vo.getAmount()),
(vo1, vo2) -> {
vo1.setAmount(vo1.getAmount().add(vo2.getAmount()));
return vo1;
}
));
salaryTotalVO.setSalarySubjectItems(new ArrayList<>(sumMap.values()));
}
return salaryTotalVO; return salaryTotalVO;
} }

View File

@ -31,25 +31,4 @@
AND b.work_type_id = #{pageReqVO.workTypeId} AND b.work_type_id = #{pageReqVO.workTypeId}
</if> </if>
</select> </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> </mapper>