Compare commits

..

No commits in common. "ba90fd2e03018443566c1c5faedbb86284e99065" and "31e12935f839f0751b8a0625530a71f07f9fccd3" have entirely different histories.

23 changed files with 66 additions and 154 deletions

View File

@ -94,13 +94,4 @@ public class BpmOAExpensesController {
expensesService.refused(id, processInstanceId); expensesService.refused(id, processInstanceId);
return success(true); return success(true);
} }
@GetMapping("/oneClickPayment")
@Operation(summary = "一键支付")
@Parameter(name = "month", description = "月份", required = true, example = "2025-04")
public CommonResult<Boolean> oneClickPayment(String month) {
expensesService.oneClickPayment(month);
return success(true);
}
} }

View File

@ -42,10 +42,10 @@ public class BpmOASalaryController {
@Operation(summary = "创建请求申请") @Operation(summary = "创建请求申请")
public CommonResult<Long> createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) { public CommonResult<Long> createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) {
// if (createReqVO.getFactoryId() != null) { if (createReqVO.getFactoryId() != null) {
// DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData(); DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData();
// createReqVO.setCompanyDeptId(dto.getId()); createReqVO.setCompanyDeptId(dto.getId());
// } }
return success(salaryService.createSalary(getLoginUserId(), createReqVO)); return success(salaryService.createSalary(getLoginUserId(), createReqVO));
} }

View File

@ -30,7 +30,4 @@ public class BpmOAExpensesPageReqVO extends PageParam {
@Schema(description = "审批通过时间") @Schema(description = "审批通过时间")
private String[] endTime; private String[] endTime;
@Schema(description = "收款人姓名")
private String payeeName;
} }

View File

@ -47,7 +47,7 @@ public class BpmOAPaymentCreateReqVO {
private BigDecimal totalAmount; private BigDecimal totalAmount;
@Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED) @Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED)
private BigDecimal paymentRatio; private Integer paymentRatio;
@Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "付款金额不能为空") @NotNull(message = "付款金额不能为空")

View File

@ -68,7 +68,7 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO {
private BigDecimal totalAmount; private BigDecimal totalAmount;
@Schema(description = "付款比例 | 针对分期付款情况") @Schema(description = "付款比例 | 针对分期付款情况")
private BigDecimal paymentRatio; private Integer paymentRatio;
@Schema(description = "付款金额") @Schema(description = "付款金额")
private BigDecimal amount; private BigDecimal amount;
@ -92,10 +92,7 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO {
private Long parentId; private Long parentId;
@Schema(description = "累计付款比列") @Schema(description = "累计付款比列")
private BigDecimal ratio; private Integer ratio;
@Schema(description = "累计付款金额")
private BigDecimal paymentAmount;
@Schema(description = "上传文件") @Schema(description = "上传文件")
private List<UploadUserFile> fileItems; private List<UploadUserFile> fileItems;

View File

@ -10,7 +10,6 @@ import org.springframework.format.annotation.DateTimeFormat;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* 薪资付款申请 创建 Request VO * 薪资付款申请 创建 Request VO
@ -31,15 +30,11 @@ public class BpmOASalaryCreateReqVO {
@DateTimeFormat(pattern = "yyyy-MM") @DateTimeFormat(pattern = "yyyy-MM")
private String salaryDate; private String salaryDate;
@Schema(description = "公司类型 | 1公司 2工厂", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "公司类型不能为空")
private Integer deptType;
@Schema(description = "付款公司") @Schema(description = "付款公司")
private Long companyDeptId; private Long companyDeptId;
@Schema(description = "付款工厂的部门编号集合") @Schema(description = "付款工厂编号")
private Set<Long> factoryDeptId; private Long factoryId;
@Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED) @Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED)
@NotNull(message = "付款总额不能为空") @NotNull(message = "付款总额不能为空")

View File

@ -10,7 +10,6 @@ import org.springframework.format.annotation.DateTimeFormat;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* @author 符溶馨 * @author 符溶馨
@ -28,21 +27,12 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO {
@DateTimeFormat(pattern = "yyyy-MM") @DateTimeFormat(pattern = "yyyy-MM")
private String salaryDate; private String salaryDate;
@Schema(description = "公司类型 | 1公司 2工厂")
private Integer deptType;
@Schema(description = "付款公司") @Schema(description = "付款公司")
private Long companyDeptId; private Long companyDeptId;
@Schema(description = "付款公司名称") @Schema(description = "付款公司名称")
private String companyName; private String companyName;
@Schema(description = "付款工厂的部门编号集合")
private Set<Long> factoryDeptId;
@Schema(description = "付款工厂名称")
private String factoryName;
@Schema(description = "付款工厂") @Schema(description = "付款工厂")
private Long FactoryId; private Long FactoryId;

View File

@ -78,9 +78,9 @@ public class BpmOAPaymentDO extends BaseDO {
private Long bankId; private Long bankId;
/** /**
* 付款方式 | 1分批付款 3全额付款 4指定金额付款 * 付款方式 | 1预付款 2分期付款 3全额付款
*/ */
private BigDecimal paymentMethod; private Integer paymentMethod;
/** /**
* 付款总额 | 针对预付款分期付款情况 * 付款总额 | 针对预付款分期付款情况

View File

@ -64,11 +64,11 @@ public class BpmOAReimbursementDO extends BaseDO {
*/ */
private String bankName; private String bankName;
// /** /**
// * 报销明细数据JSON * 报销明细数据JSON
// */ */
// @TableField(typeHandler = JacksonTypeHandler.class) @TableField(typeHandler = JacksonTypeHandler.class)
// private List<Reimbursement> reimbursements; private List<Reimbursement> reimbursements;
/** /**
* 总报销金额 * 总报销金额
*/ */

View File

@ -2,7 +2,6 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa;
import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile;
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
import cn.iocoder.yudao.framework.mybatis.core.type.JsonLongSetTypeHandler;
import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.SalarySubjectItemsVO; import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.SalarySubjectItemsVO;
import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum;
import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableField;
@ -13,7 +12,6 @@ import lombok.*;
import java.math.BigDecimal; import java.math.BigDecimal;
import java.util.List; import java.util.List;
import java.util.Set;
/** /**
* OA 薪资付款 DO * OA 薪资付款 DO
@ -52,22 +50,11 @@ public class BpmOASalaryDO extends BaseDO {
*/ */
private String salaryDate; private String salaryDate;
/**
* 公司类型 | 1公司 2工厂
*/
private Integer deptType;
/** /**
* 付款公司 * 付款公司
*/ */
private Long companyDeptId; private Long companyDeptId;
/**
* 付款工厂的部门编号集合
*/
@TableField(typeHandler = JsonLongSetTypeHandler.class)
private Set<Long> factoryDeptId;
/** /**
* 付款总额 * 付款总额
*/ */

View File

@ -16,6 +16,4 @@ public interface BpmOAExpensesMapper extends BaseMapperX<BpmOAExpensesDO> {
@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); @Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO);
BpmOAExpensesTotal selectTotal(@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); BpmOAExpensesTotal selectTotal(@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO);
void oneClickPayment(@Param("month") String month);
} }

View File

@ -91,10 +91,4 @@ public interface BpmOAExpensesService {
* @param processInstanceId 流程实例编号 * @param processInstanceId 流程实例编号
*/ */
void refused(Long id, String processInstanceId); void refused(Long id, String processInstanceId);
/**
* 一键支付
* @param month 月份
*/
void oneClickPayment(String month);
} }

View File

@ -30,7 +30,6 @@ import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO;
import cn.iocoder.yudao.module.system.api.user.AdminUserApi; import cn.iocoder.yudao.module.system.api.user.AdminUserApi;
import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO; import cn.iocoder.yudao.module.system.api.user.dto.AdminUserRespDTO;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage; import com.baomidou.mybatisplus.core.metadata.IPage;
import org.flowable.engine.runtime.ProcessInstance; import org.flowable.engine.runtime.ProcessInstance;
import org.springframework.context.annotation.Lazy; import org.springframework.context.annotation.Lazy;
@ -266,10 +265,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
CommonResult<AdminUserRespDTO> user = userApi.getUser(expenses.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(expenses.getUserId());
// 获取收款人信息 // 获取收款人信息
BankRespDTO bankRespDTO = null; BankRespDTO bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData();
if (expenses.getBankId() != null) {
bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData();
}
// 获取付款公司信息 // 获取付款公司信息
FactoryInfoDTO dto = new FactoryInfoDTO(); FactoryInfoDTO dto = new FactoryInfoDTO();
@ -289,7 +285,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() : "") .setRecipientName(bankRespDTO.getNickname())
.setCompanyFactoryId(dto.getId()) .setCompanyFactoryId(dto.getId())
); );
} }
@ -315,10 +311,4 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE
// 同步更新流程实例表 // 同步更新流程实例表
processInstanceService.updateProcessInstanceResult(processInstanceId, BpmProcessInstanceResultEnum.BACK.getResult()); processInstanceService.updateProcessInstanceResult(processInstanceId, BpmProcessInstanceResultEnum.BACK.getResult());
} }
@Override
public void oneClickPayment(String month) {
expensesMapper.oneClickPayment(month);
}
} }

View File

@ -70,14 +70,12 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
.setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult());
salaryMapper.insert(salary) ; salaryMapper.insert(salary) ;
// 获取申请公司或工厂信息
DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData();
// 配置申请公司或工厂部门flag // 配置申请公司或工厂部门flag
Map<String, Object> processInstanceVariables = new HashMap<>(); Map<String, Object> processInstanceVariables = new HashMap<>();
if (createReqVO.getDeptType() == 1) { processInstanceVariables.put("company_dept_flag", dto.getFlag());
// 获取申请公司信息
DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData();
processInstanceVariables.put("company_dept_flag", dto.getFlag());
}
processInstanceVariables.put("dept_type", createReqVO.getDeptType());
// 发起 BPM 流程 // 发起 BPM 流程
String processInstanceId = processInstanceService.createProcessInstance(userId, String processInstanceId = processInstanceService.createProcessInstance(userId,
new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY)
@ -114,6 +112,9 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
// -- 插入到财务支付表中 // -- 插入到财务支付表中
CommonResult<AdminUserRespDTO> user = userApi.getUser(salaryDO.getUserId()); CommonResult<AdminUserRespDTO> user = userApi.getUser(salaryDO.getUserId());
// 从缓存中部门所属公司信息
DeptRespDTO deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData();
financialPaymentService.save(new FinancialPaymentDO() financialPaymentService.save(new FinancialPaymentDO()
.setUserId(salaryDO.getUserId()) .setUserId(salaryDO.getUserId())
.setDeptId(user.getData() == null ? null : user.getData().getDeptId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId())
@ -126,7 +127,7 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal
.setProcessInstanceName(processInstance.getName()) .setProcessInstanceName(processInstance.getName())
.setBeginTime(processInstance.getCreateTime()) .setBeginTime(processInstance.getCreateTime())
.setEndTime(processInstance.getEndTime()) .setEndTime(processInstance.getEndTime())
.setCompanyId(salaryDO.getDeptType() == 1 ? salaryDO.getCompanyDeptId() : null) .setCompanyId(deptRespDTO != null && deptRespDTO.getFactoryId() == null ? deptRespDTO.getId() : null)
); );
} }
} }

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesMapper"> <mapper namespace="cn.iocoder.yudao.module.bpm.dal.mysql.oa.BpmOAExpensesMapper">
<!-- <!--
一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。 一般情况下,尽可能使用 Mapper 进行 CRUD 增删改查即可。
无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。 无法满足的场景,例如说多表关联查询,才使用 XML 编写 SQL。
@ -49,9 +50,6 @@
<if test="pageReqVO.costSection != null"> <if test="pageReqVO.costSection != null">
AND a.cost_section = #{pageReqVO.costSection} AND a.cost_section = #{pageReqVO.costSection}
</if> </if>
<if test="pageReqVO.payeeName != null">
AND ub.nickname LIKE CONCAT('%', #{pageReqVO.payeeName}, '%')
</if>
<if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0"> <if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0">
<if test="pageReqVO.endTime[0] != null"> <if test="pageReqVO.endTime[0] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]} and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]}
@ -72,7 +70,6 @@
bpm_oa_expenses a bpm_oa_expenses a
LEFT JOIN bpm_oa_expenses_item b ON b.expenses_id = a.id LEFT JOIN bpm_oa_expenses_item b ON b.expenses_id = a.id
LEFT JOIN bpm_process_instance_ext c ON c.process_instance_id = a.process_instance_id LEFT JOIN bpm_process_instance_ext c ON c.process_instance_id = a.process_instance_id
LEFT JOIN system_bank ub ON ub.id = a.bank_id
WHERE WHERE
a.deleted = 0 a.deleted = 0
AND b.deleted = 0 AND b.deleted = 0
@ -89,9 +86,6 @@
<if test="pageReqVO.costSection != null"> <if test="pageReqVO.costSection != null">
AND b.cost_section = #{pageReqVO.costSection} AND b.cost_section = #{pageReqVO.costSection}
</if> </if>
<if test="pageReqVO.payeeName != null">
AND ub.nickname LIKE CONCAT('%', #{pageReqVO.payeeName}, '%')
</if>
<if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0"> <if test="pageReqVO.endTime != null and pageReqVO.endTime.length > 0">
<if test="pageReqVO.endTime[0] != null"> <if test="pageReqVO.endTime[0] != null">
and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]} and DATE_FORMAT(c.end_time, '%Y-%m-%d') &gt;= #{pageReqVO.endTime[0]}
@ -101,14 +95,4 @@
</if> </if>
</if> </if>
</select> </select>
<update id="oneClickPayment">
UPDATE bpm_oa_expenses e
JOIN bpm_process_instance_ext b ON e.process_instance_id = b.process_instance_id
SET e.STATUS = 1, e.amount_paid = e.total_money
WHERE
e.result = 2
AND e.STATUS != 2
AND DATE_FORMAT( b.end_time, '%Y-%m' ) = #{month}
</update>
</mapper> </mapper>

View File

@ -17,8 +17,7 @@
bank.nickname as nickname, bank.nickname as nickname,
bank.bank_no as bankNo, bank.bank_no as bankNo,
bank.bank_name as bankName, bank.bank_name as bankName,
COALESCE(SUM( b.payment_ratio ), 0) + COALESCE(a.payment_ratio,0) AS ratio, COALESCE(SUM( b.payment_ratio ), 0) + COALESCE(a.payment_ratio,0) AS ratio
COALESCE(SUM( b.amount ), 0) + COALESCE(a.amount, 0) AS paymentAmount
FROM FROM
bpm_oa_payment a bpm_oa_payment a
<if test="method != 1"> <if test="method != 1">
@ -36,6 +35,6 @@
GROUP BY GROUP BY
a.id a.id
HAVING HAVING
amount &lt; total_amount ratio &lt; 100
</select> </select>
</mapper> </mapper>

View File

@ -99,7 +99,6 @@ public class CustomerSettlementServiceImpl implements CustomerSettlementService
// 获取需创建的 结算明细 // 获取需创建的 结算明细
List<SettlementItemDO> createDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream() List<SettlementItemDO> createDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream()
.filter(item -> item.getId() == null) .filter(item -> item.getId() == null)
.map(item -> item.setSettlementId(updateReqVO.getId()))
.collect(Collectors.toList()); .collect(Collectors.toList());
// 获取需更新的 结算明细 // 获取需更新的 结算明细
List<SettlementItemDO> updateDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream() List<SettlementItemDO> updateDO = BeanUtils.toBean(updateReqVO.getSettlementItems(), SettlementItemDO.class).stream()

View File

@ -338,8 +338,7 @@ public class DeptServiceImpl implements DeptService {
.eq(DeptDO::getStatus, CommonStatusEnum.ENABLE.getStatus()) .eq(DeptDO::getStatus, CommonStatusEnum.ENABLE.getStatus())
.eq(DeptDO::getType, DeptTypeEnum.COMPANY.getValue()) .eq(DeptDO::getType, DeptTypeEnum.COMPANY.getValue())
.or() .or()
.eq(DeptDO::getType, DeptTypeEnum.HEAD_COMPANY.getValue()) .eq(DeptDO::getType, DeptTypeEnum.HEAD_COMPANY.getValue()));
.ne(DeptDO::getLevel, 0));
} }

View File

@ -6,8 +6,6 @@ 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)
@ -28,7 +26,4 @@ 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,7 +66,6 @@ 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,7 +38,6 @@ 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());
@ -47,17 +46,5 @@ public interface StaffSalaryMapper extends BaseMapperX<StaffSalaryDO> {
SalaryTotalVO selectSalaryTotal(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO); SalaryTotalVO selectSalaryTotal(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO);
default List<StaffSalaryRespVO> selectListSalarySubjectItems(StaffSalaryPageReqVO reqVO) { List<SalarySubjectItemsVO> selectListSalarySubjectItems(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO);
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,7 +2,6 @@ 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;
@ -109,7 +108,7 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
@Override @Override
public PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO) { public PageResult<StaffSalaryRespVO> getStaffSalaryPage(StaffSalaryPageReqVO pageReqVO) {
if (pageReqVO.getMonth() != null && pageReqVO.getStatus() == null) { if (pageReqVO.getMonth() != null) {
return staffMapper.selectSalaryPage(pageReqVO); return staffMapper.selectSalaryPage(pageReqVO);
}else { }else {
return staffSalaryMapper.selectSalaryPage(pageReqVO); return staffSalaryMapper.selectSalaryPage(pageReqVO);
@ -261,29 +260,19 @@ public class StaffSalaryServiceImpl implements StaffSalaryService {
SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO); SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO);
// 获取主体薪资的合计 // 获取主体薪资的合计
List<StaffSalaryRespVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO); List<SalarySubjectItemsVO> salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO);
//直接从数据库取出来的List<Reimbursement> 实际上是List<LinkedHashMap>类型 所以不能直接遍历 Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream()
//将list再次转为json串然后由json串再转为list .collect(Collectors.toMap(
String json = JsonUtils.toJsonString(salarySubjectItemsVO); SalarySubjectItemsVO::getSalarySubjectId,
salarySubjectItemsVO = JsonUtils.parseArray(json, StaffSalaryRespVO.class); vo -> new SalarySubjectItemsVO()
.setSalarySubjectId(vo.getSalarySubjectId())
if (CollUtil.isNotEmpty(salarySubjectItemsVO)) { .setAmount(vo.getAmount()),
Map<Integer, SalarySubjectItemsVO> sumMap = salarySubjectItemsVO.stream() (vo1, vo2) -> {
.filter(Objects::nonNull) vo1.setAmount(vo1.getAmount().add(vo2.getAmount()));
.map(StaffSalaryRespVO::getSalarySubjectItems) return vo1;
.flatMap(List::stream) }
.collect(Collectors.toMap( ));
SalarySubjectItemsVO::getSalarySubjectId, salaryTotalVO.setSalarySubjectItems(new ArrayList<>(sumMap.values()));
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,4 +31,25 @@
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>