feat(smartfactory): 工资表按工厂id查询
- 在 StaffMapper 中添加工资表查询- 在 StaffSalaryMapper 中添加按工厂id查询的方法 - 更新 StaffSalaryPageReqVO,添加工厂id列表字段 - 修改 StaffSalaryServiceImpl 中的查询逻辑,支持按工厂id筛选
This commit is contained in:
parent
d422522eb8
commit
ba90fd2e03
@ -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;
|
||||
}
|
@ -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)
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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,19 +261,29 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
|
||||
SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO);
|
||||
|
||||
// 获取主体薪资的合计
|
||||
List<SalarySubjectItemsVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO);
|
||||
Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream()
|
||||
.collect(Collectors.toMap(
|
||||
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()));
|
||||
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()
|
||||
.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;
|
||||
}
|
||||
|
@ -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>
|
||||
|
Loading…
Reference in New Issue
Block a user