From f1b88b349a9a100bf2d3cf39eadea6057dd843c3 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 10 Apr 2025 01:20:06 +0800 Subject: [PATCH 01/10] =?UTF-8?q?fix(bpm):=20=E4=BF=AE=E5=A4=8D=E6=8A=A5?= =?UTF-8?q?=E9=94=80=E5=92=8C=E5=80=9F=E6=AC=BE=E7=9B=B8=E5=85=B3=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 修改报销查询条件,使用月份格式比较时间- 更新报销和借款关联方式,使用 LEFT JOIN - 在报销流程中添加工厂 ID 变量- 优化借款查询 SQL,移除不必要的条件 --- .../bpm/service/oa/BpmOAExpensesServiceImpl.java | 1 + .../main/resources/mapper/oa/BpmOAExpensesMapper.xml | 12 ++++++------ .../src/main/resources/mapper/oa/BpmOALoanMapper.xml | 2 -- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java index 14b86f30..8d818e93 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java @@ -112,6 +112,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE String type = bpmOAExpensesItemDOS.stream().map(item -> item.getType().toString()).collect(Collectors.joining(",")); processInstanceVariables.put("type", type); processInstanceVariables.put("factoryType", expenses.getFactoryType()); + processInstanceVariables.put("factory_id", bpmOAExpensesItemDOS.get(0).getDeptId()); String processInstanceId = processInstanceService.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) .setVariables(processInstanceVariables).setBusinessKey(String.valueOf(expenses.getId()))); diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml index 77a1a869..fe28024a 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml @@ -52,10 +52,10 @@ - and c.end_time >= #{pageReqVO.endTime[0]} + and DATE_FORMAT(c.end_time, '%Y-%m') >= #{pageReqVO.endTime[0]} - and c.end_time <= #{pageReqVO.endTime[1]} + and DATE_FORMAT(c.end_time, '%Y-%m') <= #{pageReqVO.endTime[1]} ORDER BY c.end_time DESC, a.expenses_id @@ -68,8 +68,8 @@ SUM(a.total_money) - SUM(a.amount_paid) AS remainingPayable FROM bpm_oa_expenses a - JOIN bpm_oa_expenses_item b ON b.expenses_id = b.id - JOIN bpm_process_instance_ext c ON c.process_instance_id = a.process_instance_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 WHERE a.deleted = 0 AND b.deleted = 0 @@ -88,10 +88,10 @@ - and c.end_time >= #{pageReqVO.endTime[0]} + and DATE_FORMAT(c.end_time, '%Y-%m') >= #{pageReqVO.endTime[0]} - and c.end_time <= #{pageReqVO.endTime[1]} + and DATE_FORMAT(c.end_time, '%Y-%m') <= #{pageReqVO.endTime[1]} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOALoanMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOALoanMapper.xml index 2e6b4d27..71978e72 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOALoanMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOALoanMapper.xml @@ -59,7 +59,6 @@ 1 AS type FROM bpm_oa_expenses e - JOIN bpm_oa_loan l ON e.user_id = l.user_id AND l.sf_user_id = #{pageReqVO.staffId} LEFT JOIN system_users u ON e.user_id = u.id LEFT JOIN system_dept d ON u.dept_id = d.id LEFT JOIN bpm_process_instance_ext p ON e.process_instance_id = p.process_instance_id @@ -67,7 +66,6 @@ e.deleted = 0 AND e.result = 2 AND e.status = 2 - AND l.deleted = 0 AND u.deleted = 0 AND d.deleted = 0 AND p.deleted = 0 From 72254590dc2f9f0f8283ad80f62e0e9cc0f1ee6a Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 10 Apr 2025 01:20:20 +0800 Subject: [PATCH 02/10] =?UTF-8?q?feat(system):=20=E5=AE=A2=E6=88=B7?= =?UTF-8?q?=E7=BB=93=E7=AE=97=E4=BF=A1=E6=81=AF=E5=A2=9E=E5=8A=A0=E7=BB=9F?= =?UTF-8?q?=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98=E5=8C=96=E7=9B=B8?= =?UTF-8?q?=E5=85=B3=E6=95=B0=E6=8D=AE=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增客户结算信息统计接口和相关数据结构 -为 CustomerSettlementDO 和 SettlementItemDO 添加新的财务相关字段 - 优化 CustomerSettlementPageReqVO 结构,支持日期范围查询- 为 LoanMapper 添加新的查询条件,提高贷款查询的灵活性 --- .../CustomerSettlementController.java | 15 ++++--- .../vo/CustomerSettlementPageReqVO.java | 2 +- .../vo/CustomerSettlementRespVO.java | 4 ++ .../vo/CustomerSettlementSaveReqVO.java | 4 ++ .../vo/SettlementItemVO.java | 6 +++ .../customersettlement/vo/StatisticsVO.java | 26 ++++++++++++ .../admin/loan/vo/LoanPageReqVO.java | 8 ++-- .../CustomerSettlementDO.java | 6 +++ .../customersettlement/SettlementItemDO.java | 5 +++ .../CustomerSettlementMapper.java | 5 ++- .../system/dal/mysql/loan/LoanMapper.java | 4 +- .../CustomerSettlementService.java | 10 ++++- .../CustomerSettlementServiceImpl.java | 7 ++++ .../CustomerSettlementMapper.xml | 40 +++++++++++++++++++ .../LineFixedAssetsTemporaryTableMapper.xml | 12 ------ 15 files changed, 130 insertions(+), 24 deletions(-) create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/StatisticsVO.java create mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/customerSettlement/CustomerSettlementMapper.xml delete mode 100644 yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/mapper/linefixedassetstemporarytable/LineFixedAssetsTemporaryTableMapper.xml diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/CustomerSettlementController.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/CustomerSettlementController.java index c3225dca..c02383c1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/CustomerSettlementController.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/CustomerSettlementController.java @@ -9,10 +9,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.FactoryInfoApi; import cn.iocoder.yudao.module.smartfactory.api.factoryInfo.dto.FactoryInfoDTO; -import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementPageReqVO; -import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementRespVO; -import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementSaveReqVO; -import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.SettlementItemVO; +import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.*; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.CustomerSettlementDO; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.SettlementItemDO; import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO; @@ -136,7 +133,7 @@ public class CustomerSettlementController { item.setSettlementItems(BeanUtils.toBean(itemMap.get(item.getId()), SettlementItemVO.class)); } // 设置工厂名称 - item.setCustomerName(factoryMap.get(item.getCustomerId()).getName()); + item.setCustomerName(factoryMap.get(item.getCustomerId()).getShortName()); // 设置创建人名称 item.setCreatorName(userMap.get(item.getCreator()) == null ? "" : userMap.get(item.getCreator()).getNickname()); }); @@ -145,6 +142,14 @@ public class CustomerSettlementController { return success(respVO); } + @GetMapping("/total") + @Operation(summary = "获得结算统计信息") + @PreAuthorize("@ss.hasPermission('system:customer-settlement:query')") + public CommonResult getCustomerSettlementTotal(@Valid CustomerSettlementPageReqVO pageReqVO) { + + return success(customerSettlementService.getCustomerSettlementTotal(pageReqVO)); + } + @GetMapping("/export-excel") @Operation(summary = "导出客户结算信息 Excel") @PreAuthorize("@ss.hasPermission('system:customer-settlement:export')") diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementPageReqVO.java index 44e74abe..ed2aaef7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementPageReqVO.java @@ -19,7 +19,7 @@ public class CustomerSettlementPageReqVO extends PageParam { private Integer businessType; @Schema(description = "结算月份") - private String settlementMonth; + private String[] settlementMonth; @Schema(description = "结算公司id", example = "3044") private Long companyId; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementRespVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementRespVO.java index 494b30b0..34cd0e22 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementRespVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementRespVO.java @@ -6,6 +6,7 @@ import com.alibaba.excel.annotation.ExcelProperty; import io.swagger.v3.oas.annotations.media.Schema; import lombok.Data; +import java.math.BigDecimal; import java.time.LocalDateTime; import java.util.List; @@ -35,6 +36,9 @@ public class CustomerSettlementRespVO { @Schema(description = "收款明细") private List paymentItem; + @Schema(description = "收款金额") + private BigDecimal paymentAmount; + @Schema(description = "备注") private String notes; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementSaveReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementSaveReqVO.java index 776701ac..a8d5636e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementSaveReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/CustomerSettlementSaveReqVO.java @@ -6,6 +6,7 @@ import lombok.Data; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.NotNull; +import java.math.BigDecimal; import java.util.List; @Schema(description = "管理后台 - 客户结算信息新增/修改 Request VO") @@ -29,6 +30,9 @@ public class CustomerSettlementSaveReqVO { @Schema(description = "收款明细") private List paymentItem; + @Schema(description = "收款金额") + private BigDecimal paymentAmount; + @Schema(description = "备注") private String notes; diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/SettlementItemVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/SettlementItemVO.java index 3bd61763..1ef0bf1e 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/SettlementItemVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/SettlementItemVO.java @@ -27,6 +27,12 @@ public class SettlementItemVO { @Schema(description = "扣款明细") private List deductionItems; + @Schema(description = "扣款金额") + private BigDecimal deductionAmount; + @Schema(description = "结算金额") private BigDecimal settlementAmount; + + @Schema(description = "已收款金额") + private BigDecimal receivedTotal; } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/StatisticsVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/StatisticsVO.java new file mode 100644 index 00000000..65c55b93 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/customersettlement/vo/StatisticsVO.java @@ -0,0 +1,26 @@ +package cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 客户结算信息统计 Response VO") +@Data +public class StatisticsVO { + + @Schema(description = "预结算金额") + private BigDecimal preSettlementTotal; + + @Schema(description = "应结算金额") + private BigDecimal shouldSettlementTotal; + + @Schema(description = "扣款金额") + private BigDecimal deductionTotal; + + @Schema(description = "结算金额") + private BigDecimal settlementTotal; + + @Schema(description = "已收款金额") + private BigDecimal receivedTotal; +} diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/loan/vo/LoanPageReqVO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/loan/vo/LoanPageReqVO.java index 47dd2fce..4d8d8cfc 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/loan/vo/LoanPageReqVO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/controller/admin/loan/vo/LoanPageReqVO.java @@ -23,8 +23,10 @@ public class LoanPageReqVO extends PageParam { @Schema(description = "借支用户部门编号", example = "128") private Long deptId; - @Schema(description = "创建时间") - @DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND) - private LocalDateTime[] createTime; + @Schema(description = "借支类型") + private Integer loanType; + + @Schema(description = "查询方式 | 是否查询全部借支 0否 1是 为0时查询 剩余金额不为0的借支") + private Integer model = 0; } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/CustomerSettlementDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/CustomerSettlementDO.java index 0eb8d2a6..bfea20b7 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/CustomerSettlementDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/CustomerSettlementDO.java @@ -10,6 +10,7 @@ import com.baomidou.mybatisplus.annotation.TableName; import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler; import lombok.*; +import java.math.BigDecimal; import java.util.List; /** @@ -48,6 +49,11 @@ public class CustomerSettlementDO extends BaseDO { @TableField(typeHandler = JacksonTypeHandler.class) private List paymentItem; + /** + * 收款金额 + */ + private BigDecimal paymentAmount; + /** * 备注 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/SettlementItemDO.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/SettlementItemDO.java index 8b0b9409..01030fe1 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/SettlementItemDO.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/dataobject/customersettlement/SettlementItemDO.java @@ -57,6 +57,11 @@ public class SettlementItemDO extends BaseDO { @TableField(typeHandler = JacksonTypeHandler.class) private List deductionItems; + /** + * 扣款金额 + */ + private BigDecimal deductionAmount; + /** * 结算金额 */ diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/customersettlement/CustomerSettlementMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/customersettlement/CustomerSettlementMapper.java index aa4182ba..1aa94d77 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/customersettlement/CustomerSettlementMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/customersettlement/CustomerSettlementMapper.java @@ -4,8 +4,10 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementPageReqVO; +import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.StatisticsVO; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.CustomerSettlementDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; /** * 客户结算信息 Mapper @@ -18,8 +20,9 @@ public interface CustomerSettlementMapper extends BaseMapperX selectPage(CustomerSettlementPageReqVO reqVO) { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(CustomerSettlementDO::getCustomerId, reqVO.getCustomerId()) - .eqIfPresent(CustomerSettlementDO::getSettlementMonth, reqVO.getSettlementMonth()) + .betweenIfPresent(CustomerSettlementDO::getSettlementMonth, reqVO.getSettlementMonth()) .orderByDesc(CustomerSettlementDO::getId)); } + StatisticsVO selectTotal(@Param("reqVO") CustomerSettlementPageReqVO pageReqVO); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/loan/LoanMapper.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/loan/LoanMapper.java index bada070d..b22a175d 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/loan/LoanMapper.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/dal/mysql/loan/LoanMapper.java @@ -23,7 +23,9 @@ public interface LoanMapper extends BaseMapperX { return selectPage(reqVO, new LambdaQueryWrapperX() .eqIfPresent(LoanDO::getUserId, reqVO.getUserId()) .eqIfPresent(LoanDO::getDeptId, reqVO.getDeptId()) - .betweenIfPresent(LoanDO::getCreateTime, reqVO.getCreateTime()) + .eqIfPresent(LoanDO::getLoanType, reqVO.getLoanType()) + .ne(reqVO.getModel() == 0, LoanDO::getRemainingAmount, 0) + .orderByDesc(LoanDO::getRemainingAmount) .orderByDesc(LoanDO::getUserId)); } diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementService.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementService.java index ffa7f6a9..a448dee3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementService.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementService.java @@ -3,6 +3,7 @@ package cn.iocoder.yudao.module.system.service.customersettlement; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.StatisticsVO; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.CustomerSettlementDO; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.SettlementItemDO; @@ -67,7 +68,14 @@ public interface CustomerSettlementService { * 更新结算信息确认状态 * * @param id 编号 - * @param status + * @param status 状态 */ void updateConfirm(Long id, Integer status); + + /** + * 获得结算统计信息 + * @param pageReqVO 查询信息 + * @return 统计信息 + */ + StatisticsVO getCustomerSettlementTotal(CustomerSettlementPageReqVO pageReqVO); } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java index abbebddb..24f9c51b 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java +++ b/yudao-module-system/yudao-module-system-biz/src/main/java/cn/iocoder/yudao/module/system/service/customersettlement/CustomerSettlementServiceImpl.java @@ -7,6 +7,7 @@ import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.module.infra.api.file.FileApi; import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementPageReqVO; import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.CustomerSettlementSaveReqVO; +import cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo.StatisticsVO; import cn.iocoder.yudao.module.system.controller.admin.worklog.vo.upload.UploadUserFile; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.CustomerSettlementDO; import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.SettlementItemDO; @@ -162,4 +163,10 @@ public class CustomerSettlementServiceImpl implements CustomerSettlementService .setId(id) .setStatus(status)); } + + @Override + public StatisticsVO getCustomerSettlementTotal(CustomerSettlementPageReqVO pageReqVO) { + + return customerSettlementMapper.selectTotal(pageReqVO); + } } \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/customerSettlement/CustomerSettlementMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/customerSettlement/CustomerSettlementMapper.xml new file mode 100644 index 00000000..7339a9d7 --- /dev/null +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/customerSettlement/CustomerSettlementMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + \ No newline at end of file diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/mapper/linefixedassetstemporarytable/LineFixedAssetsTemporaryTableMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/mapper/linefixedassetstemporarytable/LineFixedAssetsTemporaryTableMapper.xml deleted file mode 100644 index 1b69ab4f..00000000 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/mapper/linefixedassetstemporarytable/LineFixedAssetsTemporaryTableMapper.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - \ No newline at end of file From 92b22c5c5ea82cf32e3b4a0d16473d9abca83620 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 10 Apr 2025 01:20:30 +0800 Subject: [PATCH 03/10] =?UTF-8?q?refactor(smartfactory):=20=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E5=91=98=E5=B7=A5=E8=80=83=E5=8B=A4=E8=AE=B0=E5=BD=95?= =?UTF-8?q?=E5=88=9B=E5=BB=BA=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在创建员工考勤记录时,先初始化一个空的 ArrayList,然后再使用 BeanUtils 进行转换- 这样做的目的是确保在转换前有一个干净的列表,避免潜在的数据污染问题 - 同时,这种写法也更加清晰易读,有助于代码维护 --- .../service/attendance/StaffAttendanceRecordServiceImpl.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java index f83debdf..2f070064 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java @@ -56,7 +56,8 @@ public class StaffAttendanceRecordServiceImpl implements StaffAttendanceRecordSe List createDo = new ArrayList<>(); for (StaffAttendanceRecordSaveReqVO vo : createReqVO) { - List staffAttendanceRecord = BeanUtils.toBean(vo.getRecords(), StaffAttendanceRecordDO.class); + List staffAttendanceRecord = new ArrayList<>(); + staffAttendanceRecord = BeanUtils.toBean(vo.getRecords(), StaffAttendanceRecordDO.class); // 移除status为空得数据 staffAttendanceRecord.removeIf(item -> item.getStatus() == null); From 9583966a50fa7b26fa9c6378aa2d60fbfa7b6009 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Thu, 10 Apr 2025 01:44:13 +0800 Subject: [PATCH 04/10] =?UTF-8?q?fix(bpm):=20=E4=BF=AE=E5=A4=8D=E6=8A=A5?= =?UTF-8?q?=E9=94=80=E5=8D=95=E6=97=A5=E6=9C=9F=E6=9F=A5=E8=AF=A2=E7=B2=BE?= =?UTF-8?q?=E5=BA=A6=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 将 DATE_FORMAT 函数的格式从 '%Y-%m' 修改为 '%Y-%m-%d',以提高日期查询的精度 - 此修改解决了因日期格式精度不足导致的报销单查询问题 --- .../src/main/resources/mapper/oa/BpmOAExpensesMapper.xml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml index fe28024a..52bde67d 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml @@ -52,10 +52,10 @@ - and DATE_FORMAT(c.end_time, '%Y-%m') >= #{pageReqVO.endTime[0]} + and DATE_FORMAT(c.end_time, '%Y-%m-%d') >= #{pageReqVO.endTime[0]} - and DATE_FORMAT(c.end_time, '%Y-%m') <= #{pageReqVO.endTime[1]} + and DATE_FORMAT(c.end_time, '%Y-%m-%d') <= #{pageReqVO.endTime[1]} ORDER BY c.end_time DESC, a.expenses_id @@ -88,10 +88,10 @@ - and DATE_FORMAT(c.end_time, '%Y-%m') >= #{pageReqVO.endTime[0]} + and DATE_FORMAT(c.end_time, '%Y-%m-%d') >= #{pageReqVO.endTime[0]} - and DATE_FORMAT(c.end_time, '%Y-%m') <= #{pageReqVO.endTime[1]} + and DATE_FORMAT(c.end_time, '%Y-%m-%d') <= #{pageReqVO.endTime[1]} From b3286c69d5b5456705a92802fa2a9b598bceaf35 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 12 Apr 2025 19:32:09 +0800 Subject: [PATCH 05/10] =?UTF-8?q?feat(bpm):=20=E4=BC=98=E5=8C=96=E5=80=9F?= =?UTF-8?q?=E6=AC=BE=E6=8A=A5=E9=94=80=E5=8A=9F=E8=83=BD=E5=B9=B6=E6=B7=BB?= =?UTF-8?q?=E5=8A=A0=E8=96=AA=E8=B5=84=E4=B8=BB=E4=BD=93=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=8A=9F=E8=83=BD-=20=E5=9C=A8=20BpmOALoanServiceImpl=20?= =?UTF-8?q?=E4=B8=AD=E6=B7=BB=E5=8A=A0=E4=BA=86=E5=AF=B9=E8=80=81=E6=95=B0?= =?UTF-8?q?=E6=8D=AE=E7=9A=84=E8=BF=87=E6=BB=A4=E9=80=BB=E8=BE=91=20-=20?= =?UTF-8?q?=E5=9C=A8=20BpmOASalaryCreateReqVO=E3=80=81BpmOASalaryDO=20?= =?UTF-8?q?=E5=92=8C=20BpmOASalaryRespVO=20=E4=B8=AD=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E4=BA=86=E8=96=AA=E8=B5=84=E4=B8=BB=E4=BD=93=E6=98=8E=E7=BB=86?= =?UTF-8?q?=E5=AD=97=E6=AE=B5=20-=20=E6=96=B0=E5=A2=9E=20SalarySubjectItem?= =?UTF-8?q?sVO=20=E7=B1=BB=E7=94=A8=E4=BA=8E=E8=A1=A8=E7=A4=BA=E8=96=AA?= =?UTF-8?q?=E8=B5=84=E4=B8=BB=E4=BD=93=E6=98=8E=E7=BB=86?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../oa/vo/salary/BpmOASalaryCreateReqVO.java | 3 +++ .../admin/oa/vo/salary/BpmOASalaryRespVO.java | 4 +++- .../oa/vo/salary/SalarySubjectItemsVO.java | 17 +++++++++++++++++ .../bpm/dal/dataobject/oa/BpmOASalaryDO.java | 8 ++++++++ .../bpm/service/oa/BpmOALoanServiceImpl.java | 5 +++++ 5 files changed, 36 insertions(+), 1 deletion(-) create mode 100644 yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/SalarySubjectItemsVO.java diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java index 216df6d6..1f187486 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java @@ -47,6 +47,9 @@ public class BpmOASalaryCreateReqVO { @Schema(description = "支付对象") private String paymentRecipient; + @Schema(description = "薪资主体明细") + private List salarySubjectItems; + @Schema(description = "流程实例编号") private String processInstanceId; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java index e57403e0..a0363670 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java @@ -8,7 +8,6 @@ import lombok.EqualsAndHashCode; import lombok.ToString; import org.springframework.format.annotation.DateTimeFormat; -import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.List; @@ -46,6 +45,9 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO { @Schema(description = "支付对象") private String paymentRecipient; + @Schema(description = "薪资主体明细") + private List salarySubjectItems; + @Schema(description = "流程实例编号") private String processInstanceId; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/SalarySubjectItemsVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/SalarySubjectItemsVO.java new file mode 100644 index 00000000..9493aa30 --- /dev/null +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/SalarySubjectItemsVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 薪资付款申请创建 Request VO") +@Data +public class SalarySubjectItemsVO { + + @Schema(description = "薪资主体编号") + private Integer salarySubjectId; + + @Schema(description = "金额") + private BigDecimal amount; +} diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java index 8605ba7a..66de08e5 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; +import cn.iocoder.yudao.module.bpm.controller.admin.oa.vo.salary.SalarySubjectItemsVO; import cn.iocoder.yudao.module.bpm.enums.task.BpmProcessInstanceResultEnum; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -69,6 +70,13 @@ public class BpmOASalaryDO extends BaseDO { */ private String paymentRecipient; + + /** + * 薪资主体明细 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List salarySubjectItems; + /** * 薪资付款申请的结果 * diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALoanServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALoanServiceImpl.java index ad4f4b5e..1d6cc5d9 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALoanServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOALoanServiceImpl.java @@ -203,6 +203,11 @@ public class BpmOALoanServiceImpl extends BpmOABaseService implements BpmOALoanS @Override public PageResult getReturnList(BpmOALoanPageReqVO pageReqVO) { + + // 过滤之前老数据 + if (pageReqVO.getLoanType() == null) { + return PageResult.empty(); + } IPage page = loanMapper.selectReturnList(pageReqVO, MyBatisUtils.buildPage(pageReqVO)); return new PageResult<>(page.getRecords(), page.getTotal()); } From d8fac056a81846ccc99b5ab29579fae6e03dc9fe Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 12 Apr 2025 19:32:42 +0800 Subject: [PATCH 06/10] =?UTF-8?q?refactor(yudao):=20=E4=BC=98=E5=8C=96=20L?= =?UTF-8?q?oanMapper.xml=20=E4=B8=AD=E7=9A=84=20SQL=20=E8=AF=AD=E5=8F=A5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 foreach 标签中添加 open 和 close 属性,以确保 user_id 列的值被正确包裹在括号中- 这个修改可以提高 SQL 语句的可读性和安全性,避免潜在的 SQL 注入风险 --- .../src/main/resources/mapper/loan/LoanMapper.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/loan/LoanMapper.xml b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/loan/LoanMapper.xml index 5fe07691..b71d1ea3 100644 --- a/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/loan/LoanMapper.xml +++ b/yudao-module-system/yudao-module-system-biz/src/main/resources/mapper/loan/LoanMapper.xml @@ -24,7 +24,7 @@ AND b.deleted = 0 AND a.loan_type = 1 AND a.user_id IN - + #{item} GROUP BY From 31e12935f839f0751b8a0625530a71f07f9fccd3 Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Sat, 12 Apr 2025 19:33:08 +0800 Subject: [PATCH 07/10] =?UTF-8?q?feat(smartfactory):=20=E6=96=B0=E5=A2=9E?= =?UTF-8?q?=E5=B7=A5=E8=B5=84=E7=BB=9F=E8=AE=A1=E5=8A=9F=E8=83=BD=E5=B9=B6?= =?UTF-8?q?=E4=BC=98=E5=8C=96=E5=91=98=E5=B7=A5=E4=BF=A1=E6=81=AF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 新增工资统计相关接口和页面 - 添加薪资主体明细相关功能 - 优化员工信息展示和查询 - 调整工厂名称显示为简称 --- .../StaffAttendanceRecordController.java | 132 +--------------- ...ngGroupAmountSpecificationsController.java | 25 ++- ...ndlingGroupAmountSpecificationsRespVO.java | 3 + .../admin/staff/StaffController.java | 8 + .../admin/staff/vo/StaffRespVO.java | 12 ++ .../admin/staff/vo/StaffSalaryUpdateVO.java | 20 +++ .../admin/staff/vo/StaffSaveReqVO.java | 12 ++ .../staffsalary/StaffSalaryController.java | 9 ++ .../staffsalary/vo/SalarySubjectItemsVO.java | 17 ++ .../admin/staffsalary/vo/SalaryTotalVO.java | 18 +++ .../staffsalary/vo/StaffSalaryRespVO.java | 3 + .../staffsalary/vo/StaffSalarySaveReqVO.java | 3 + .../dal/dataobject/staff/StaffDO.java | 20 +++ .../dataobject/staffsalary/StaffSalaryDO.java | 6 + .../dal/mysql/staff/StaffMapper.java | 2 +- .../mysql/staffsalary/StaffSalaryMapper.java | 10 +- .../StaffAttendanceRecordService.java | 5 + .../StaffAttendanceRecordServiceImpl.java | 146 +++++++++++++++++- .../service/staff/StaffService.java | 11 +- .../service/staff/StaffServiceImpl.java | 17 +- .../staffsalary/StaffSalaryService.java | 8 + .../staffsalary/StaffSalaryServiceImpl.java | 64 ++++++-- .../mapper/staffsalary/StaffSalaryMapper.xml | 55 +++++++ 23 files changed, 451 insertions(+), 155 deletions(-) create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSalaryUpdateVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalarySubjectItemsVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalaryTotalVO.java create mode 100644 zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/staffsalary/StaffSalaryMapper.xml diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/attendance/StaffAttendanceRecordController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/attendance/StaffAttendanceRecordController.java index 18c80bc7..4267ba1c 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/attendance/StaffAttendanceRecordController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/attendance/StaffAttendanceRecordController.java @@ -26,9 +26,9 @@ import javax.annotation.Resource; import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; -import java.time.LocalDate; -import java.time.format.DateTimeFormatter; -import java.util.*; +import java.util.Collections; +import java.util.List; +import java.util.Map; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; @@ -154,7 +154,7 @@ public class StaffAttendanceRecordController { Map staffMap = convertMap(staffDOS, StaffDO::getId); if (CollUtil.isNotEmpty(recordDOS)) { - List recordRespVO = convertRecord(reqVO, recordDOS, otherRecordDOS); + List recordRespVO = staffAttendanceRecordService.convertRecord(reqVO, recordDOS, otherRecordDOS); // 筛选掉已经存在的员工 List staffIds = staffDOS.stream() @@ -215,128 +215,6 @@ public class StaffAttendanceRecordController { } } - private List convertRecord(StaffAttendanceRecordReqVO reqVO, - List recordDOS, - List otherRecordDOS) { - - // 根据考勤类型 生成对应得日期数据 - List punchTimeList = new ArrayList<>(); - - // 获取所选月份的第一天 - LocalDate now = LocalDate.parse(reqVO.getMonth() + "-01", DateTimeFormatter.ISO_LOCAL_DATE); - if (reqVO.getType() == 1) { - - // 获取上月26日日期 - LocalDate beginDate = now.minusMonths(1).withDayOfMonth(26); - // 本月25日日期 - LocalDate lastMonthEnd = now.withDayOfMonth(25); - - while (!beginDate.isAfter(lastMonthEnd)) { - AttendanceRecordVO attendanceRecordVO = new AttendanceRecordVO() - .setPunchTime(beginDate); - punchTimeList.add(attendanceRecordVO); - - beginDate = beginDate.plusDays(1); - } - } - if (reqVO.getType() == 2) { - // 获取所选月份的第一天 - LocalDate firstDayOfMonth = LocalDate.parse(reqVO.getMonth() + "-01", DateTimeFormatter.ISO_LOCAL_DATE); - - // 生成当月每一天的 LocalDate - for (int i = 0; i < firstDayOfMonth.lengthOfMonth(); i++) { - AttendanceRecordVO attendanceRecordVO = new AttendanceRecordVO() - .setPunchTime(firstDayOfMonth.plusDays(i)); - punchTimeList.add(attendanceRecordVO); - } - } - // 获取员工信息 - List staffDOS = staffService.getList(convertSet(recordDOS, StaffAttendanceRecordDO::getStaffId)); - Map staffMap = convertMap(staffDOS, StaffDO::getId); - - // 获取厂区信息 - Set factoryIds = convertSet(recordDOS, StaffAttendanceRecordDO::getFactoryId); - factoryIds.addAll(convertList(otherRecordDOS, StaffAttendanceRecordDO::getFactoryId)); - List factoryDOS = factoryInfoService.getFactoryList(factoryIds); - Map factoryMap = convertMap(factoryDOS, FactoryInfoDO::getId); - - // 根据用户 分组打卡记录 - Map> recordMap = convertMultiMap(recordDOS, StaffAttendanceRecordDO::getStaffId); - - // 重组数据 - List respVOs = new ArrayList<>(); - for (Map.Entry> entry : recordMap.entrySet()) { - - if (!staffMap.containsKey(entry.getKey())) { - continue; - } - - // 设置所选厂区 员工得考勤信息 - StaffAttendanceRecordRespVO respVO = new StaffAttendanceRecordRespVO( - entry.getKey(), - reqVO.getFactoryId(), - reqVO.getType(), - reqVO.getMonth()); - - Map records = entry.getValue().stream() - .filter(record -> record.getFactoryId().equals(reqVO.getFactoryId())) // 筛选同一个工厂打卡数据 - .map(item -> BeanUtils.toBean(item, AttendanceRecordVO.class)) - .collect(Collectors.toMap(AttendanceRecordVO::getPunchTime, value -> value)); - // 设置打卡数据 - respVO.setRecords(punchTimeList.stream() - .peek(record -> { - if (records.containsKey(record.getPunchTime())) { - record.setStatus(records.get(record.getPunchTime()).getStatus()); - }}) - .collect(Collectors.toList())); - // 设置员工名称 - respVO.setStaffName(staffMap.get(entry.getKey()).getNickName()); - // 设置工种 - respVO.setWorkTypeId(staffMap.get(entry.getKey()).getWorkTypeId()); - // 设置厂区名称 - respVO.setFactoryName(factoryMap.get(reqVO.getFactoryId()) != null ? factoryMap.get(reqVO.getFactoryId()).getName() : null); - - if (CollUtil.isNotEmpty(otherRecordDOS)) { - // 获得该员工 在其他工厂的考勤记录 - Map> factoryRecordMap = convertMultiMap(otherRecordDOS, StaffAttendanceRecordDO::getFactoryId); - - List childRespVO = otherRecordDOS.stream() - .map(recordDO -> new StaffAttendanceRecordRespVO( - recordDO.getStaffId(), - recordDO.getFactoryId(), - recordDO.getType(), - recordDO.getMonth())) - .distinct() - .collect(Collectors.toList()); - - childRespVO.forEach(vo -> { - if (!staffMap.containsKey(vo.getStaffId())) { - return; - } - // 设置员工名称 - vo.setStaffName(staffMap.get(vo.getStaffId()).getNickName()); - // 设置工种 - vo.setWorkTypeId(staffMap.get(vo.getStaffId()).getWorkTypeId()); - // 设置厂区名称 - vo.setFactoryName(factoryMap.get(vo.getFactoryId()) != null ? factoryMap.get(vo.getFactoryId()).getName() : null); - - if (factoryRecordMap.containsKey(vo.getFactoryId())) { - - // 设置打卡记录 - vo.setRecords(BeanUtils.toBean(factoryRecordMap.get(vo.getFactoryId()), AttendanceRecordVO.class)); - } - }); - // 插入其他考勤记录 - respVO.setChildRecords(childRespVO); - } - - // 插入集合 - respVOs.add(respVO); - } - - return respVOs; - } - @GetMapping("/export-excel") @Operation(summary = "导出厂区员工考勤记录 Excel") @PreAuthorize("@ss.hasPermission('smartfactory:staff-attendance-record:export')") @@ -347,7 +225,7 @@ public class StaffAttendanceRecordController { List recordDOS = staffAttendanceRecordService.getStaffAttendanceRecordList(reqVO); // 导出 Excel ExcelUtils.write(response, "厂区员工考勤记录.xls", "数据", StaffAttendanceRecordRespVO.class, - convertRecord(reqVO, recordDOS, null)); + staffAttendanceRecordService.convertRecord(reqVO, recordDOS, null)); } @PutMapping("/review") diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/HandlingGroupAmountSpecificationsController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/HandlingGroupAmountSpecificationsController.java index 502339ac..8dd8880e 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/HandlingGroupAmountSpecificationsController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/HandlingGroupAmountSpecificationsController.java @@ -1,5 +1,6 @@ package cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamountspecifications; +import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.pojo.CommonResult; import cn.iocoder.yudao.framework.common.pojo.PageParam; import cn.iocoder.yudao.framework.common.pojo.PageResult; @@ -12,6 +13,8 @@ import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamount import cn.iocoder.yudao.module.smartfactory.controller.admin.handlinggroupamountspecifications.vo.HandlingGroupAmountSpecificationsSaveReqVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.handlinggroupamountspecifications.HandlingGroupAmountSpecificationsDO; import cn.iocoder.yudao.module.smartfactory.service.handlinggroupamountspecifications.HandlingGroupAmountSpecificationsService; +import cn.iocoder.yudao.module.system.api.dept.DeptApi; +import cn.iocoder.yudao.module.system.api.dept.dto.DeptRespDTO; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.tags.Tag; @@ -24,8 +27,12 @@ import javax.servlet.http.HttpServletResponse; import javax.validation.Valid; import java.io.IOException; import java.util.List; +import java.util.Map; +import java.util.Set; import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet; import static cn.iocoder.yudao.framework.operatelog.core.enums.OperateTypeEnum.EXPORT; @Tag(name = "管理后台 - 搬运组工资规格关联") @@ -37,6 +44,9 @@ public class HandlingGroupAmountSpecificationsController { @Resource private HandlingGroupAmountSpecificationsService handlingGroupAmountSpecificationsService; + @Resource + private DeptApi deptApi; + @PostMapping("/batchCreate") @Operation(summary = "创建搬运组工资规格关联") @PreAuthorize("@ss.hasPermission('smartfactory:handling-group-amount-specifications:create')") @@ -77,7 +87,20 @@ public class HandlingGroupAmountSpecificationsController { @PreAuthorize("@ss.hasPermission('smartfactory:handling-group-amount-specifications:query')") public CommonResult> getHandlingGroupAmountSpecificationsPage(@Valid HandlingGroupAmountSpecificationsPageReqVO pageReqVO) { PageResult pageResult = handlingGroupAmountSpecificationsService.getHandlingGroupAmountSpecificationsPage(pageReqVO); - return success(BeanUtils.toBean(pageResult, HandlingGroupAmountSpecificationsRespVO.class)); + PageResult result = BeanUtils.toBean(pageResult, HandlingGroupAmountSpecificationsRespVO.class); + if (CollUtil.isNotEmpty(result.getList())) { + + // 获取工厂信息 + Set factoryIds = convertSet(result.getList(), HandlingGroupAmountSpecificationsRespVO::getFactoryId); + Map factoryMap = convertMap(deptApi.getDeptList(factoryIds).getCheckedData(), DeptRespDTO::getId); + + result.getList().forEach(data -> { + // 设置工厂名称 + data.setFactoryName(factoryMap.get(data.getFactoryId()) != null ? factoryMap.get(data.getFactoryId()).getName() : null); + }); + } + + return success(result); } @GetMapping("/export-excel") diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/vo/HandlingGroupAmountSpecificationsRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/vo/HandlingGroupAmountSpecificationsRespVO.java index 55db8b15..2fcde91f 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/vo/HandlingGroupAmountSpecificationsRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/handlinggroupamountspecifications/vo/HandlingGroupAmountSpecificationsRespVO.java @@ -20,6 +20,9 @@ public class HandlingGroupAmountSpecificationsRespVO { @Schema(description = "工厂id", example = "23178") private Long factoryId; + @Schema(description = "工厂名称", example = "23178") + private String factoryName; + @Schema(description = "搬运规格id", example = "23178") @ExcelProperty("搬运规格id") private Long handlingSpecificationsId; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java index 157d42f7..6f6d742c 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/StaffController.java @@ -74,6 +74,14 @@ public class StaffController { return success(true); } + @PutMapping("/update-salary") + @Operation(summary = "更新员工") + @PreAuthorize("@ss.hasPermission('factory:staff:update')") + public CommonResult updateStaffSalary(@RequestBody StaffSalaryUpdateVO updateReqVO) { + staffService.updateStaffSalary(updateReqVO); + return success(true); + } + @DeleteMapping("/delete") @Operation(summary = "删除员工") @Parameter(name = "id", description = "编号", required = true) diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffRespVO.java index cc1f3e7f..fa9fe680 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffRespVO.java @@ -49,9 +49,21 @@ public class StaffRespVO { @ExcelProperty("身份证号") private String idCard; + @Schema(description = "银行卡名称") + private String bankName; + + @Schema(description = "银行卡号") + private String bankNo; + + @Schema(description = "薪资主体 | 字典值 sf_staff_salary_subject") + private Integer salarySubject; + @Schema(description = "0离职 1在职 2工伤") private Integer status; + @Schema(description = "备注") + private String notes; + @Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED) private LocalDateTime createTime; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSalaryUpdateVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSalaryUpdateVO.java new file mode 100644 index 00000000..06a09e91 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSalaryUpdateVO.java @@ -0,0 +1,20 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 员工更新 Request VO") +@Data +public class StaffSalaryUpdateVO { + + @Schema(description = "主键id") + private Long id; + + @Schema(description = "薪资") + private BigDecimal salary; + + @Schema(description = "薪资主体 | 字典值 sf_staff_salary_subject") + private Integer salarySubject; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSaveReqVO.java index a16ce756..df0255a6 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSaveReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staff/vo/StaffSaveReqVO.java @@ -43,9 +43,21 @@ public class StaffSaveReqVO { @IdCard private String idCard; + @Schema(description = "银行卡名称") + private String bankName; + + @Schema(description = "银行卡号") + private String bankNo; + @Schema(description = "薪资") private BigDecimal salary; + @Schema(description = "薪资主体 | 字典值 sf_staff_salary_subject") + private Integer salarySubject; + + @Schema(description = "备注") + private String notes; + @Schema(description = "0离职 1在职 2工伤") private Integer status; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/StaffSalaryController.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/StaffSalaryController.java index 05344bd3..d3627c2c 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/StaffSalaryController.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/StaffSalaryController.java @@ -6,6 +6,7 @@ import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils; import cn.iocoder.yudao.framework.operatelog.core.annotations.OperateLog; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalaryTotalVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalarySaveReqVO; @@ -86,6 +87,14 @@ public class StaffSalaryController { return success(pageResult); } + @GetMapping("/total") + @Operation(summary = "获取工资统计") + @PreAuthorize("@ss.hasPermission('smartfactory:staff-salary:query')") + public CommonResult getStaffSalaryTotal(@Valid StaffSalaryPageReqVO pageReqVO) { + + return success(staffSalaryService.getStaffSalaryTotal(pageReqVO)); + } + @GetMapping("/export-excel") @Operation(summary = "导出厂区员工工资 Excel") @PreAuthorize("@ss.hasPermission('smartfactory:staff-salary:export')") diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalarySubjectItemsVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalarySubjectItemsVO.java new file mode 100644 index 00000000..123a6a02 --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalarySubjectItemsVO.java @@ -0,0 +1,17 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; + +@Schema(description = "管理后台 - 薪资主体明细 Response VO") +@Data +public class SalarySubjectItemsVO { + + @Schema(description = "薪资主体编号") + private Integer salarySubjectId; + + @Schema(description = "金额") + private BigDecimal amount; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalaryTotalVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalaryTotalVO.java new file mode 100644 index 00000000..5e5fc86b --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/SalaryTotalVO.java @@ -0,0 +1,18 @@ +package cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo; + +import io.swagger.v3.oas.annotations.media.Schema; +import lombok.Data; + +import java.math.BigDecimal; +import java.util.List; + +@Schema(description = "管理后台 - 薪资统计信息 Response VO") +@Data +public class SalaryTotalVO { + + @Schema(description = "实发金额总计") + private BigDecimal realAmountTotal; + + @Schema(description = "薪资主体明细总计") + private List salarySubjectItems; +} diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalaryRespVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalaryRespVO.java index e303bd5c..8d2c1083 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalaryRespVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalaryRespVO.java @@ -66,6 +66,9 @@ public class StaffSalaryRespVO { @Schema(description = "扣款明细") private List deductionItems; + @Schema(description = "薪资主体明细") + private List salarySubjectItems; + @Schema(description = "复核状态 | 0未复核 1已复核") private Integer status; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalarySaveReqVO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalarySaveReqVO.java index b089ef91..e203cdec 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalarySaveReqVO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/controller/admin/staffsalary/vo/StaffSalarySaveReqVO.java @@ -45,6 +45,9 @@ public class StaffSalarySaveReqVO { @Schema(description = "扣款明细") private List deductionItems; + @Schema(description = "薪资主体明细") + private List salarySubjectItems; + @Schema(description = "复核状态 | 0未复核 1已复核", requiredMode = Schema.RequiredMode.NOT_REQUIRED, example = "0") private Integer status; diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staff/StaffDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staff/StaffDO.java index 95f9f8ab..384161a7 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staff/StaffDO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staff/StaffDO.java @@ -68,11 +68,31 @@ public class StaffDO extends BaseDO { */ private String idCard; + /** + * 银行名称 + */ + private String bankName; + + /** + * 银行卡号 + */ + private String bankNo; + /** * 工资 */ private BigDecimal salary; + /** + * 薪资主体 | 字典值 sf_staff_salary_subject + */ + private Integer salarySubject; + + /** + * 备注 + */ + private String notes; + /** * 0离职 1在职 2工伤 */ diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staffsalary/StaffSalaryDO.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staffsalary/StaffSalaryDO.java index 6b0d1811..27ee2310 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staffsalary/StaffSalaryDO.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/dataobject/staffsalary/StaffSalaryDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.dal.dataobject.staffsalary; import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.DeductionItemsVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalarySubjectItemsVO; import com.baomidou.mybatisplus.annotation.KeySequence; import com.baomidou.mybatisplus.annotation.TableField; import com.baomidou.mybatisplus.annotation.TableId; @@ -69,6 +70,11 @@ public class StaffSalaryDO extends BaseDO { */ @TableField(typeHandler = JacksonTypeHandler.class) private List deductionItems; + /** + * 薪资主体明细 + */ + @TableField(typeHandler = JacksonTypeHandler.class) + private List salarySubjectItems; /** * 复核状态 | 0未复核 1已复核 */ diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staff/StaffMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staff/StaffMapper.java index 2457757c..8a98ba60 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staff/StaffMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staff/StaffMapper.java @@ -54,7 +54,7 @@ public interface StaffMapper extends BaseMapperX { .selectAs(StaffDO::getId, StaffSalaryRespVO::getStaffId) .selectAs(StaffDO::getNickName, StaffSalaryRespVO::getStaffName) .selectAs(StaffDO::getFactoryId, StaffSalaryRespVO::getFactoryId) - .selectAs(FactoryInfoDO::getName, StaffSalaryRespVO::getFactoryName) + .selectAs(FactoryInfoDO::getShortName, StaffSalaryRespVO::getFactoryName) .selectAs(StaffDO::getWorkTypeId, StaffSalaryRespVO::getWorkTypeId) .selectAs(StaffSalaryDO::getMonth, StaffSalaryRespVO::getMonth) .selectAs(StaffDO::getSalary, StaffSalaryRespVO::getSalary) diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staffsalary/StaffSalaryMapper.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staffsalary/StaffSalaryMapper.java index adec9565..4faa5cea 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staffsalary/StaffSalaryMapper.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/dal/mysql/staffsalary/StaffSalaryMapper.java @@ -3,13 +3,17 @@ package cn.iocoder.yudao.module.smartfactory.dal.mysql.staffsalary; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX; import cn.iocoder.yudao.framework.mybatis.core.query.MPJLambdaWrapperX; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalarySubjectItemsVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalaryTotalVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryRespVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staff.StaffDO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staffsalary.StaffSalaryDO; import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import java.util.List; import java.util.Objects; /** @@ -26,7 +30,7 @@ public interface StaffSalaryMapper extends BaseMapperX { .selectAll(StaffSalaryDO.class) .selectAs(StaffDO::getNickName, StaffSalaryRespVO::getStaffName) .selectAs(StaffDO::getWorkTypeId, StaffSalaryRespVO::getWorkTypeId) - .selectAs(FactoryInfoDO::getName, StaffSalaryRespVO::getFactoryName) + .selectAs(FactoryInfoDO::getShortName, StaffSalaryRespVO::getFactoryName) .selectAs(StaffDO::getSalary, StaffSalaryRespVO::getSalary); query.leftJoin(StaffDO.class, "staff", StaffDO::getId, StaffSalaryDO::getStaffId); @@ -39,4 +43,8 @@ public interface StaffSalaryMapper extends BaseMapperX { return selectJoinPage(reqVO, StaffSalaryRespVO.class, query); } + + SalaryTotalVO selectSalaryTotal(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO); + + List selectListSalarySubjectItems(@Param("pageReqVO") StaffSalaryPageReqVO pageReqVO); } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordService.java index b9dfb6d1..2518bd1f 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.smartfactory.service.attendance; import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordSaveReqVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.attendance.StaffAttendanceRecordDO; @@ -88,4 +89,8 @@ public interface StaffAttendanceRecordService { * @return 是否已审核 */ Integer getIsReview(Long factoryId, String month); + + List convertRecord(StaffAttendanceRecordReqVO reqVO, + List recordDOS, + List otherRecordDOS); } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java index 2f070064..8d03329a 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/attendance/StaffAttendanceRecordServiceImpl.java @@ -3,16 +3,19 @@ package cn.iocoder.yudao.module.smartfactory.service.attendance; import cn.hutool.core.collection.CollUtil; import cn.iocoder.yudao.framework.common.util.object.BeanUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; +import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.AttendanceRecordVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.attendance.vo.StaffAttendanceRecordSaveReqVO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.attendance.SfAttendanceReviewDO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.attendance.StaffAttendanceRecordDO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.factoryinfo.FactoryInfoDO; +import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staff.StaffDO; import cn.iocoder.yudao.module.smartfactory.dal.mysql.attendance.SfAttendanceReviewMapper; import cn.iocoder.yudao.module.smartfactory.dal.mysql.attendance.StaffAttendanceRecordMapper; +import cn.iocoder.yudao.module.smartfactory.service.factoryinfo.FactoryInfoService; +import cn.iocoder.yudao.module.smartfactory.service.staff.StaffService; import cn.iocoder.yudao.module.smartfactory.service.staffsalary.StaffSalaryService; -import cn.iocoder.yudao.module.smartfactory.framework.job.staffSalary.StaffSalaryJob; -import cn.iocoder.yudao.module.smartfactory.service.staffsalary.StaffSalaryService; -import org.springframework.data.redis.connection.stream.ObjectRecord; import org.springframework.stereotype.Service; import org.springframework.validation.annotation.Validated; @@ -21,9 +24,12 @@ import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Set; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; +import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.*; import static cn.iocoder.yudao.module.smartfactory.enums.ErrorCodeConstants.STAFF_ATTENDANCE_RECORD_NOT_EXISTS; /** @@ -44,6 +50,12 @@ public class StaffAttendanceRecordServiceImpl implements StaffAttendanceRecordSe @Resource private SfAttendanceReviewMapper attendanceReviewMapper; + @Resource + private StaffService staffService; + + @Resource + private FactoryInfoService factoryInfoService; + @Override public void createStaffAttendanceRecord(List createReqVO) { @@ -56,8 +68,7 @@ public class StaffAttendanceRecordServiceImpl implements StaffAttendanceRecordSe List createDo = new ArrayList<>(); for (StaffAttendanceRecordSaveReqVO vo : createReqVO) { - List staffAttendanceRecord = new ArrayList<>(); - staffAttendanceRecord = BeanUtils.toBean(vo.getRecords(), StaffAttendanceRecordDO.class); + List staffAttendanceRecord = BeanUtils.toBean(vo.getRecords(), StaffAttendanceRecordDO.class); // 移除status为空得数据 staffAttendanceRecord.removeIf(item -> item.getStatus() == null); @@ -200,4 +211,129 @@ public class StaffAttendanceRecordServiceImpl implements StaffAttendanceRecordSe .eq(SfAttendanceReviewDO::getMonth, month)); return attendanceReviewDO != null ? attendanceReviewDO.getStatus() : 0; } + + @Override + public List convertRecord(StaffAttendanceRecordReqVO reqVO, + List recordDOS, + List otherRecordDOS) { + // 根据考勤类型 生成对应得日期数据 + List punchTimeList = new ArrayList<>(); + + // 获取所选月份的第一天 + LocalDate now = LocalDate.parse(reqVO.getMonth() + "-01", DateTimeFormatter.ISO_LOCAL_DATE); + if (reqVO.getType() == 1) { + + // 获取上月26日日期 + LocalDate beginDate = now.minusMonths(1).withDayOfMonth(26); + // 本月25日日期 + LocalDate lastMonthEnd = now.withDayOfMonth(25); + + while (!beginDate.isAfter(lastMonthEnd)) { + AttendanceRecordVO attendanceRecordVO = new AttendanceRecordVO() + .setPunchTime(beginDate); + punchTimeList.add(attendanceRecordVO); + + beginDate = beginDate.plusDays(1); + } + } + if (reqVO.getType() == 2) { + // 获取所选月份的第一天 + LocalDate firstDayOfMonth = LocalDate.parse(reqVO.getMonth() + "-01", DateTimeFormatter.ISO_LOCAL_DATE); + + // 生成当月每一天的 LocalDate + for (int i = 0; i < firstDayOfMonth.lengthOfMonth(); i++) { + AttendanceRecordVO attendanceRecordVO = new AttendanceRecordVO() + .setPunchTime(firstDayOfMonth.plusDays(i)); + punchTimeList.add(attendanceRecordVO); + } + } + // 获取员工信息 + List staffDOS = staffService.getList(convertSet(recordDOS, StaffAttendanceRecordDO::getStaffId)); + Map staffMap = convertMap(staffDOS, StaffDO::getId); + + // 获取厂区信息 + Set factoryIds = convertSet(recordDOS, StaffAttendanceRecordDO::getFactoryId); + factoryIds.addAll(convertList(otherRecordDOS, StaffAttendanceRecordDO::getFactoryId)); + List factoryDOS = factoryInfoService.getFactoryList(factoryIds); + Map factoryMap = convertMap(factoryDOS, FactoryInfoDO::getId); + + // 根据用户 分组打卡记录 + Map> recordMap = convertMultiMap(recordDOS, StaffAttendanceRecordDO::getStaffId); + + // 重组数据 + List respVOs = new ArrayList<>(); + for (Map.Entry> entry : recordMap.entrySet()) { + + if (!staffMap.containsKey(entry.getKey())) { + continue; + } + + // 设置所选厂区 员工得考勤信息 + StaffAttendanceRecordRespVO respVO = new StaffAttendanceRecordRespVO( + entry.getKey(), + reqVO.getFactoryId(), + reqVO.getType(), + reqVO.getMonth()); + + Map records = entry.getValue().stream() + .filter(record -> record.getFactoryId().equals(reqVO.getFactoryId())) // 筛选同一个工厂打卡数据 + .map(item -> BeanUtils.toBean(item, AttendanceRecordVO.class)) + .collect(Collectors.toMap(AttendanceRecordVO::getPunchTime, value -> value)); + // 设置打卡数据 + List recordVOS = punchTimeList.stream() + .map(record -> { + AttendanceRecordVO recordVO = BeanUtils.toBean(record, AttendanceRecordVO.class); + if (records.containsKey(record.getPunchTime())) { + recordVO.setStatus(records.get(record.getPunchTime()).getStatus()); + } + return recordVO; + }).collect(Collectors.toList()); + respVO.setRecords(recordVOS); + // 设置员工名称 + respVO.setStaffName(staffMap.get(entry.getKey()).getNickName()); + // 设置工种 + respVO.setWorkTypeId(staffMap.get(entry.getKey()).getWorkTypeId()); + // 设置厂区名称 + respVO.setFactoryName(factoryMap.get(reqVO.getFactoryId()) != null ? factoryMap.get(reqVO.getFactoryId()).getName() : null); + + if (CollUtil.isNotEmpty(otherRecordDOS)) { + // 获得该员工 在其他工厂的考勤记录 + Map> factoryRecordMap = convertMultiMap(otherRecordDOS, StaffAttendanceRecordDO::getFactoryId); + + List childRespVO = otherRecordDOS.stream() + .map(recordDO -> new StaffAttendanceRecordRespVO( + recordDO.getStaffId(), + recordDO.getFactoryId(), + recordDO.getType(), + recordDO.getMonth())) + .distinct() + .collect(Collectors.toList()); + + childRespVO.forEach(vo -> { + if (!staffMap.containsKey(vo.getStaffId())) { + return; + } + // 设置员工名称 + vo.setStaffName(staffMap.get(vo.getStaffId()).getNickName()); + // 设置工种 + vo.setWorkTypeId(staffMap.get(vo.getStaffId()).getWorkTypeId()); + // 设置厂区名称 + vo.setFactoryName(factoryMap.get(vo.getFactoryId()) != null ? factoryMap.get(vo.getFactoryId()).getName() : null); + + if (factoryRecordMap.containsKey(vo.getFactoryId())) { + + // 设置打卡记录 + vo.setRecords(BeanUtils.toBean(factoryRecordMap.get(vo.getFactoryId()), AttendanceRecordVO.class)); + } + }); + // 插入其他考勤记录 + respVO.setChildRecords(childRespVO); + } + + // 插入集合 + respVOs.add(respVO); + } + + return respVOs; + } } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffService.java index 2f994148..098ed76b 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffService.java @@ -2,10 +2,7 @@ package cn.iocoder.yudao.module.smartfactory.service.staff; import cn.iocoder.yudao.framework.common.pojo.PageResult; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.StaffDataRespVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffImportExcelVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffImportRespVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffPageReqVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.*; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staff.StaffDO; import javax.validation.Valid; @@ -132,4 +129,10 @@ public interface StaffService { * @return 员工信息 */ StaffDO getStaffByUserId(Long userId); + + /** + * 更新员工工资 + * @param updateReqVO 更新信息 + */ + void updateStaffSalary(StaffSalaryUpdateVO updateReqVO); } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java index 660f4091..f8bbd4f3 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staff/StaffServiceImpl.java @@ -11,10 +11,7 @@ import cn.iocoder.yudao.framework.datapermission.core.util.DataPermissionUtils; import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX; import cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils; import cn.iocoder.yudao.module.smartfactory.controller.admin.screendata.factory.vo.StaffDataRespVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffImportExcelVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffImportRespVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffPageReqVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.StaffSaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staff.vo.*; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staff.StaffDO; import cn.iocoder.yudao.module.smartfactory.dal.mysql.staff.StaffMapper; import cn.iocoder.yudao.module.system.api.dept.DeptApi; @@ -288,4 +285,16 @@ public class StaffServiceImpl implements StaffService { return staffMapper.selectStaffByUserId(userId); } + + @Override + public void updateStaffSalary(StaffSalaryUpdateVO updateReqVO) { + + if (staffMapper.selectById(updateReqVO.getId()) == null) { + throw exception(STAFF_NOT_EXISTS); + } + + // 更新 + StaffDO updateObj = BeanUtils.toBean(updateReqVO, StaffDO.class); + staffMapper.updateById(updateObj); + } } diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryService.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryService.java index 5f1e1d7f..c8013edb 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryService.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryService.java @@ -1,6 +1,7 @@ package cn.iocoder.yudao.module.smartfactory.service.staffsalary; import cn.iocoder.yudao.framework.common.pojo.PageResult; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.SalaryTotalVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryPageReqVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryRespVO; import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalarySaveReqVO; @@ -65,4 +66,11 @@ public interface StaffSalaryService { * @param vo 考勤信息 */ void calculateSalary(List vo); + + /** + * 获取工资统计 + * @param pageReqVO 查询信息 + * @return 统计信息 + */ + SalaryTotalVO getStaffSalaryTotal(StaffSalaryPageReqVO pageReqVO); } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryServiceImpl.java b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryServiceImpl.java index 87733da5..788eb120 100644 --- a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryServiceImpl.java +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/java/cn/iocoder/yudao/module/smartfactory/service/staffsalary/StaffSalaryServiceImpl.java @@ -6,9 +6,7 @@ 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; import cn.iocoder.yudao.module.bpm.api.oa.vo.loan.BpmOALoanSumDTO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryPageReqVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalaryRespVO; -import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.StaffSalarySaveReqVO; +import cn.iocoder.yudao.module.smartfactory.controller.admin.staffsalary.vo.*; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.attendance.StaffAttendanceRecordDO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staff.StaffDO; import cn.iocoder.yudao.module.smartfactory.dal.dataobject.staffsalary.StaffSalaryDO; @@ -26,10 +24,7 @@ import java.math.RoundingMode; import java.time.LocalDate; import java.time.format.DateTimeFormatter; import java.time.temporal.ChronoUnit; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception; @@ -193,6 +188,10 @@ public class StaffSalaryServiceImpl implements StaffSalaryService { List salaryDOS = new ArrayList<>(); for (Map.Entry> entry : recordMap.entrySet()) { Long staffId = entry.getKey(); + StaffDO staffDO = staffMap.get(staffId); + if (staffDO == null) { + continue; + } // 获取该员工的上班考勤记录 List items = entry.getValue().stream() .filter(item -> item.getStatus() == 1) @@ -211,21 +210,38 @@ public class StaffSalaryServiceImpl implements StaffSalaryService { long days = ChronoUnit.DAYS.between(date[0], date[1]); int workDays = (int) days + 1; + // 设置扣款明细 默认扣除保险 50元 + salaryDO.setDeductionItems(Collections.singletonList( + new DeductionItemsVO() + .setKey("insurance") + .setValue("50") + )); + // 计算应发工资 - if (staffMap.get(staffId).getSalary() != null) { // 没有录入基本薪资时,不做计算 + BigDecimal salary = staffDO.getSalary(); + if (salary != null) { // 没有录入基本薪资时,不做计算 if (salaryDO.getAttendanceDays() == workDays) { // 设置应发工资 - salaryDO.setPayableAmount(staffMap.get(staffId).getSalary()); + salaryDO.setPayableAmount(salary); // 设置实发工资 - salaryDO.setRealAmount(staffMap.get(staffId).getSalary()); + salaryDO.setRealAmount(salary.subtract(BigDecimal.valueOf(50))); } else { - BigDecimal payableAmount = staffMap.get(staffId).getSalary().divide(BigDecimal.valueOf(workDays), RoundingMode.HALF_UP) + BigDecimal payableAmount = salary.divide(BigDecimal.valueOf(workDays), 0, RoundingMode.DOWN) .multiply(BigDecimal.valueOf(salaryDO.getAttendanceDays())); // 设置应发工资 salaryDO.setPayableAmount(payableAmount); // 设置实发工资 - salaryDO.setRealAmount(payableAmount); + salaryDO.setRealAmount(payableAmount.subtract(BigDecimal.valueOf(50))); + } + + // 设置薪资主体数据 + if (staffDO.getSalarySubject() != null) { + salaryDO.setSalarySubjectItems(Collections.singletonList( + new SalarySubjectItemsVO() + .setSalarySubjectId(staffDO.getSalarySubject()) + .setAmount(salaryDO.getPayableAmount()) + )); } } @@ -236,4 +252,28 @@ public class StaffSalaryServiceImpl implements StaffSalaryService { // 插入工资记录 staffSalaryMapper.insertBatch(salaryDOS); } + + @Override + public SalaryTotalVO getStaffSalaryTotal(StaffSalaryPageReqVO pageReqVO) { + + // 获取实发工资的合计 + SalaryTotalVO salaryTotalVO = staffSalaryMapper.selectSalaryTotal(pageReqVO); + + // 获取主体薪资的合计 + List salarySubjectItemsVO = staffSalaryMapper.selectListSalarySubjectItems(pageReqVO); + Map 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())); + + return salaryTotalVO; + } } \ No newline at end of file diff --git a/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/staffsalary/StaffSalaryMapper.xml b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/staffsalary/StaffSalaryMapper.xml new file mode 100644 index 00000000..c644b4be --- /dev/null +++ b/zn-module-smartfactory/zn-module-smartfactory-biz/src/main/resources/mapper/staffsalary/StaffSalaryMapper.xml @@ -0,0 +1,55 @@ + + + + + + + + + + From cb7c1fd4848f583ee0f4c351553773f1cfd3dbed Mon Sep 17 00:00:00 2001 From: furongxin <419481438@qq.com> Date: Wed, 23 Apr 2025 09:15:13 +0800 Subject: [PATCH 08/10] =?UTF-8?q?feat(bpm):=20=E6=B7=BB=E5=8A=A0=E4=B8=80?= =?UTF-8?q?=E9=94=AE=E6=94=AF=E4=BB=98=E5=8A=9F=E8=83=BD=E5=B9=B6=E4=BC=98?= =?UTF-8?q?=E5=8C=96=E7=9B=B8=E5=85=B3=E6=A8=A1=E5=9D=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在 BpmOAExpensesController 中添加 oneClickPayment 接口 - 在 BpmOAExpensesMapper 和 XML 中实现 oneClickPayment 方法 - 更新 BpmOAExpensesService接口并实现一键支付逻辑- 优化 BpmOAPayment 相关实体和查询 - 调整 BpmOASalary 相关实体和逻辑 --- .../admin/oa/BpmOAExpensesController.java | 9 +++++++++ .../admin/oa/BpmOASalaryController.java | 8 ++++---- .../oa/vo/expenses/BpmOAExpensesPageReqVO.java | 3 +++ .../oa/vo/payment/BpmOAPaymentCreateReqVO.java | 2 +- .../oa/vo/payment/BpmOAPaymentRespVO.java | 7 +++++-- .../oa/vo/salary/BpmOASalaryCreateReqVO.java | 9 +++++++-- .../admin/oa/vo/salary/BpmOASalaryRespVO.java | 10 ++++++++++ .../bpm/dal/dataobject/oa/BpmOAPaymentDO.java | 4 ++-- .../dataobject/oa/BpmOAReimbursementDO.java | 10 +++++----- .../bpm/dal/dataobject/oa/BpmOASalaryDO.java | 13 +++++++++++++ .../bpm/dal/mysql/oa/BpmOAExpensesMapper.java | 2 ++ .../bpm/service/oa/BpmOAExpensesService.java | 6 ++++++ .../service/oa/BpmOAExpensesServiceImpl.java | 14 ++++++++++++-- .../bpm/service/oa/BpmOASalaryServiceImpl.java | 15 +++++++-------- .../mapper/oa/BpmOAExpensesMapper.xml | 18 +++++++++++++++++- .../resources/mapper/oa/BpmOAPaymentMapper.xml | 5 +++-- 16 files changed, 106 insertions(+), 29 deletions(-) diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java index 75ad37e7..8e63d99f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOAExpensesController.java @@ -94,4 +94,13 @@ public class BpmOAExpensesController { expensesService.refused(id, processInstanceId); return success(true); } + + @GetMapping("/oneClickPayment") + @Operation(summary = "一键支付") + @Parameter(name = "month", description = "月份", required = true, example = "2025-04") + public CommonResult oneClickPayment(String month) { + + expensesService.oneClickPayment(month); + return success(true); + } } \ No newline at end of file diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASalaryController.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASalaryController.java index 7bbb3207..55f2b703 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASalaryController.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/BpmOASalaryController.java @@ -42,10 +42,10 @@ public class BpmOASalaryController { @Operation(summary = "创建请求申请") public CommonResult createSalary(@Valid @RequestBody BpmOASalaryCreateReqVO createReqVO) { - if (createReqVO.getFactoryId() != null) { - DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData(); - createReqVO.setCompanyDeptId(dto.getId()); - } +// if (createReqVO.getFactoryId() != null) { +// DeptRespDTO dto = deptApi.getDeptByFactoryId(createReqVO.getFactoryId()).getCheckedData(); +// createReqVO.setCompanyDeptId(dto.getId()); +// } return success(salaryService.createSalary(getLoginUserId(), createReqVO)); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java index dcf133ec..2cd32c4a 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/expenses/BpmOAExpensesPageReqVO.java @@ -30,4 +30,7 @@ public class BpmOAExpensesPageReqVO extends PageParam { @Schema(description = "审批通过时间") private String[] endTime; + + @Schema(description = "收款人姓名") + private String payeeName; } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentCreateReqVO.java index 9a417e32..d2eefedb 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentCreateReqVO.java @@ -47,7 +47,7 @@ public class BpmOAPaymentCreateReqVO { private BigDecimal totalAmount; @Schema(description = "付款比例 | 针对分期付款情况", requiredMode = Schema.RequiredMode.NOT_REQUIRED) - private Integer paymentRatio; + private BigDecimal paymentRatio; @Schema(description = "付款金额", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "付款金额不能为空") diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentRespVO.java index 8e59d39d..69dd10a1 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/payment/BpmOAPaymentRespVO.java @@ -68,7 +68,7 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO { private BigDecimal totalAmount; @Schema(description = "付款比例 | 针对分期付款情况") - private Integer paymentRatio; + private BigDecimal paymentRatio; @Schema(description = "付款金额") private BigDecimal amount; @@ -92,7 +92,10 @@ public class BpmOAPaymentRespVO extends BpmOABaseRespVO { private Long parentId; @Schema(description = "累计付款比列") - private Integer ratio; + private BigDecimal ratio; + + @Schema(description = "累计付款金额") + private BigDecimal paymentAmount; @Schema(description = "上传文件") private List fileItems; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java index 1f187486..cf486d5f 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryCreateReqVO.java @@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import javax.validation.constraints.NotNull; import java.math.BigDecimal; import java.util.List; +import java.util.Set; /** * 薪资付款申请 创建 Request VO @@ -30,11 +31,15 @@ public class BpmOASalaryCreateReqVO { @DateTimeFormat(pattern = "yyyy-MM") private String salaryDate; + @Schema(description = "公司类型 | 1公司 2工厂", requiredMode = Schema.RequiredMode.REQUIRED) + @NotNull(message = "公司类型不能为空") + private Integer deptType; + @Schema(description = "付款公司") private Long companyDeptId; - @Schema(description = "付款工厂编号") - private Long factoryId; + @Schema(description = "付款工厂的部门编号集合") + private Set factoryDeptId; @Schema(description = "付款总额", requiredMode = Schema.RequiredMode.REQUIRED) @NotNull(message = "付款总额不能为空") diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java index a0363670..fb8a5bfb 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/controller/admin/oa/vo/salary/BpmOASalaryRespVO.java @@ -10,6 +10,7 @@ import org.springframework.format.annotation.DateTimeFormat; import java.math.BigDecimal; import java.util.List; +import java.util.Set; /** * @author 符溶馨 @@ -27,12 +28,21 @@ public class BpmOASalaryRespVO extends BpmOABaseRespVO { @DateTimeFormat(pattern = "yyyy-MM") private String salaryDate; + @Schema(description = "公司类型 | 1公司 2工厂") + private Integer deptType; + @Schema(description = "付款公司") private Long companyDeptId; @Schema(description = "付款公司名称") private String companyName; + @Schema(description = "付款工厂的部门编号集合") + private Set factoryDeptId; + + @Schema(description = "付款工厂名称") + private String factoryName; + @Schema(description = "付款工厂") private Long FactoryId; diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAPaymentDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAPaymentDO.java index 3459fc56..1bf31fc2 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAPaymentDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAPaymentDO.java @@ -78,9 +78,9 @@ public class BpmOAPaymentDO extends BaseDO { private Long bankId; /** - * 付款方式 | 1预付款 2分期付款 3全额付款 + * 付款方式 | 1分批付款 3全额付款 4指定金额付款 */ - private Integer paymentMethod; + private BigDecimal paymentMethod; /** * 付款总额 | 针对预付款、分期付款情况 diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java index 311bea39..169d164e 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOAReimbursementDO.java @@ -64,11 +64,11 @@ public class BpmOAReimbursementDO extends BaseDO { */ private String bankName; - /** - * 报销明细数据JSON - */ - @TableField(typeHandler = JacksonTypeHandler.class) - private List reimbursements; +// /** +// * 报销明细数据JSON +// */ +// @TableField(typeHandler = JacksonTypeHandler.class) +// private List reimbursements; /** * 总报销金额 */ diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java index 66de08e5..2373e054 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/dataobject/oa/BpmOASalaryDO.java @@ -2,6 +2,7 @@ package cn.iocoder.yudao.module.bpm.dal.dataobject.oa; import cn.iocoder.yudao.framework.common.pojo.UploadUserFile; 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.enums.task.BpmProcessInstanceResultEnum; import com.baomidou.mybatisplus.annotation.TableField; @@ -12,6 +13,7 @@ import lombok.*; import java.math.BigDecimal; import java.util.List; +import java.util.Set; /** * OA 薪资付款 DO @@ -50,11 +52,22 @@ public class BpmOASalaryDO extends BaseDO { */ private String salaryDate; + /** + * 公司类型 | 1公司 2工厂 + */ + private Integer deptType; + /** * 付款公司 */ private Long companyDeptId; + /** + * 付款工厂的部门编号集合 + */ + @TableField(typeHandler = JsonLongSetTypeHandler.class) + private Set factoryDeptId; + /** * 付款总额 */ diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java index c134da90..783b4715 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/dal/mysql/oa/BpmOAExpensesMapper.java @@ -16,4 +16,6 @@ public interface BpmOAExpensesMapper extends BaseMapperX { @Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); BpmOAExpensesTotal selectTotal(@Param("pageReqVO") BpmOAExpensesPageReqVO pageReqVO); + + void oneClickPayment(@Param("month") String month); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java index 5dd68001..fec338e8 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesService.java @@ -91,4 +91,10 @@ public interface BpmOAExpensesService { * @param processInstanceId 流程实例编号 */ void refused(Long id, String processInstanceId); + + /** + * 一键支付 + * @param month 月份 + */ + void oneClickPayment(String month); } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java index 8d818e93..2af77d48 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOAExpensesServiceImpl.java @@ -30,6 +30,7 @@ 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.dto.AdminUserRespDTO; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; import com.baomidou.mybatisplus.core.metadata.IPage; import org.flowable.engine.runtime.ProcessInstance; import org.springframework.context.annotation.Lazy; @@ -265,7 +266,10 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE CommonResult user = userApi.getUser(expenses.getUserId()); // 获取收款人信息 - BankRespDTO bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData(); + BankRespDTO bankRespDTO = null; + if (expenses.getBankId() != null) { + bankRespDTO = bankApi.getBank(expenses.getBankId()).getCheckedData(); + } // 获取付款公司信息 FactoryInfoDTO dto = new FactoryInfoDTO(); @@ -285,7 +289,7 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE .setProcessInstanceName(processInstance.getName()) .setBeginTime(processInstance.getCreateTime()) .setEndTime(processInstance.getEndTime()) - .setRecipientName(bankRespDTO.getNickname()) + .setRecipientName(bankRespDTO != null ? bankRespDTO.getNickname() : "") .setCompanyFactoryId(dto.getId()) ); } @@ -311,4 +315,10 @@ public class BpmOAExpensesServiceImpl extends BpmOABaseService implements BpmOAE // 同步更新流程实例表 processInstanceService.updateProcessInstanceResult(processInstanceId, BpmProcessInstanceResultEnum.BACK.getResult()); } + + @Override + public void oneClickPayment(String month) { + + expensesMapper.oneClickPayment(month); + } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java index dc01c89c..a8364013 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/java/cn/iocoder/yudao/module/bpm/service/oa/BpmOASalaryServiceImpl.java @@ -70,12 +70,14 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal .setResult(BpmProcessInstanceResultEnum.PROCESS.getResult()); salaryMapper.insert(salary) ; - // 获取申请公司或工厂信息 - DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData(); - // 配置申请公司或工厂部门flag Map processInstanceVariables = new HashMap<>(); - processInstanceVariables.put("company_dept_flag", dto.getFlag()); + if (createReqVO.getDeptType() == 1) { + // 获取申请公司信息 + DeptRespDTO dto = deptApi.getDept(salary.getCompanyDeptId()).getCheckedData(); + processInstanceVariables.put("company_dept_flag", dto.getFlag()); + } + processInstanceVariables.put("dept_type", createReqVO.getDeptType()); // 发起 BPM 流程 String processInstanceId = processInstanceService.createProcessInstance(userId, new BpmProcessInstanceCreateReqDTO().setProcessDefinitionKey(PROCESS_KEY) @@ -112,9 +114,6 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal // -- 插入到财务支付表中 CommonResult user = userApi.getUser(salaryDO.getUserId()); - // 从缓存中部门所属公司信息 - DeptRespDTO deptRespDTO = deptApi.getDept(salaryDO.getCompanyDeptId()).getCheckedData(); - financialPaymentService.save(new FinancialPaymentDO() .setUserId(salaryDO.getUserId()) .setDeptId(user.getData() == null ? null : user.getData().getDeptId()) @@ -127,7 +126,7 @@ public class BpmOASalaryServiceImpl extends BpmOABaseService implements BpmOASal .setProcessInstanceName(processInstance.getName()) .setBeginTime(processInstance.getCreateTime()) .setEndTime(processInstance.getEndTime()) - .setCompanyId(deptRespDTO != null && deptRespDTO.getFactoryId() == null ? deptRespDTO.getId() : null) + .setCompanyId(salaryDO.getDeptType() == 1 ? salaryDO.getCompanyDeptId() : null) ); } } diff --git a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml index 52bde67d..ff1f1ca1 100644 --- a/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml +++ b/yudao-module-bpm/yudao-module-bpm-biz/src/main/resources/mapper/oa/BpmOAExpensesMapper.xml @@ -1,7 +1,6 @@ -