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 @@
-