联特cbs对接
This commit is contained in:
parent
cc510db3cc
commit
4c05906f03
|
|
@ -0,0 +1,43 @@
|
|||
CREATE TABLE hrsa_salary_cbs (
|
||||
id bigint NOT NULL,
|
||||
salary_month date NOT NULL,
|
||||
salary_accounting_id bigint NOT NULL DEFAULT 0 ,
|
||||
salary_sob_id bigint NOT NULL,
|
||||
last_push_time datetime NULL,
|
||||
creator bigint NOT NULL DEFAULT 0,
|
||||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
delete_type int NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
);
|
||||
|
||||
CREATE TABLE hrsa_salary_cbs_info (
|
||||
id bigint NOT NULL,
|
||||
salary_cbs_id bigint NOT NULL,
|
||||
employee_id bigint NOT NULL DEFAULT 0 ,
|
||||
push_status int NOT NULL DEFAULT 0,
|
||||
push_time datetime NULL DEFAULT NULL,
|
||||
creator bigint NOT NULL DEFAULT 0,
|
||||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ,
|
||||
update_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
|
||||
delete_type int NOT NULL DEFAULT 0,
|
||||
employee_type int NULL DEFAULT NULL,
|
||||
push_value varchar(255) NULL DEFAULT NULL,
|
||||
reference_num varchar(1000) NULL DEFAULT NULL,
|
||||
bus_num varchar(500) NULL DEFAULT NULL,
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
);
|
||||
|
||||
|
||||
CREATE TABLE hrsa_salary_cbs_push (
|
||||
id bigint NOT NULL,
|
||||
salary_cbs_id varchar(3000) NULL DEFAULT NULL,
|
||||
totalEmp varchar(255) NULL DEFAULT '0',
|
||||
totalValue varchar(255) NULL DEFAULT NULL,
|
||||
reference_num varchar(500) NULL DEFAULT NULL,
|
||||
creator bigint NOT NULL DEFAULT 0,
|
||||
return_value varchar(5000) NULL DEFAULT NULL,
|
||||
create_time datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
delete_type int NOT NULL DEFAULT 0,
|
||||
PRIMARY KEY (id) USING BTREE
|
||||
);
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
package com.api.salary.web;
|
||||
|
||||
|
||||
import javax.ws.rs.Path;
|
||||
|
||||
@Path("/bs/hrmsalary/cbs")
|
||||
public class SalaryCBSController extends com.engine.salary.web.SalaryCBSController{
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,127 @@
|
|||
package com.engine.salary.action;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.common.LocalDateRange;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.enums.salaryaccounting.CbsPushStatusEnum;
|
||||
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
|
||||
import com.engine.salary.service.SalaryAcctRecordService;
|
||||
import com.engine.salary.service.SalaryCbsInfoService;
|
||||
import com.engine.salary.service.SalaryCbsService;
|
||||
import com.engine.salary.service.impl.SalaryAcctRecordServiceImpl;
|
||||
import com.engine.salary.service.impl.SalaryCbsInfoServiceImpl;
|
||||
import com.engine.salary.service.impl.SalaryCbsServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.general.Util;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.workflow.action.Action;
|
||||
import weaver.soa.workflow.request.Cell;
|
||||
import weaver.soa.workflow.request.Property;
|
||||
import weaver.soa.workflow.request.RequestInfo;
|
||||
import weaver.soa.workflow.request.Row;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @ClassName LtChangeCbsPushStatusAction
|
||||
* @author Harryxzy
|
||||
* @date 2025/5/12 11:04
|
||||
* @description 联特修改cbs推送数据的
|
||||
*/
|
||||
@Slf4j
|
||||
public class LtChangeCbsPushStatusAction implements Action {
|
||||
|
||||
|
||||
|
||||
|
||||
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
|
||||
}
|
||||
private SalaryCbsService getSalaryCbsService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsInfoService getSalaryCbsInfoService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsInfoServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private String tableName;
|
||||
|
||||
|
||||
public String getTableName() {
|
||||
return tableName;
|
||||
}
|
||||
|
||||
public void setTableName(String tableName) {
|
||||
this.tableName = tableName;
|
||||
}
|
||||
|
||||
|
||||
|
||||
@Override
|
||||
public String execute(RequestInfo requestInfo) {
|
||||
try {
|
||||
|
||||
Property[] properties = requestInfo.getMainTableInfo().getProperty();
|
||||
Map<String, String> fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName,
|
||||
property -> Util.null2String(property.getValue())));
|
||||
|
||||
User user = new User();
|
||||
user.setUid(1);
|
||||
// 获取薪资所属月
|
||||
String salaryMonthStr = fieldMap.get("xzszy");
|
||||
Date salaryMonth = SalaryDateUtil.dateStrToLocalYearMonth(salaryMonthStr);
|
||||
if (salaryMonth == null) {
|
||||
log.error("薪资所属月格式错误 requestId:{} value:{}", requestInfo.getRequestid(), salaryMonthStr);
|
||||
requestInfo.getRequestManager().setMessage("薪资所属月格式错误,yyyy-MM");
|
||||
return FAILURE_AND_CONTINUE;
|
||||
}
|
||||
// 获取薪资核算记录
|
||||
LocalDateRange salaryMonthRange = new LocalDateRange().setFromDate(salaryMonth).setEndDate(salaryMonth);
|
||||
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalaryMonth(salaryMonthRange);
|
||||
List<Long> salaryAcctRecordIds = salaryAcctRecordPOS.stream()
|
||||
.filter(po -> po.getStatus().equals(SalaryAcctRecordStatusEnum.PUSHED.getValue()))
|
||||
.map(SalaryAcctRecordPO::getId)
|
||||
.collect(Collectors.toList());
|
||||
// 获取cbs推送记录
|
||||
List<SalaryCbsPO> salaryCbsPOS = getSalaryCbsService(user).listBySalaryAcctRecordIds(salaryAcctRecordIds);
|
||||
List<Long> cbsIdList = salaryCbsPOS.stream().map(SalaryCbsPO::getId).collect(Collectors.toList());
|
||||
|
||||
// 获取需要变更的人员id
|
||||
List<Long> needChangeEmpIds = new ArrayList<>();
|
||||
Row[] rows = requestInfo.getDetailTableInfo().getDetailTable(0).getRow();
|
||||
if (rows == null || rows.length == 0) {
|
||||
log.error("联特工资卡信息变更跳过,明细表为空");
|
||||
// 不执行action
|
||||
return SUCCESS;
|
||||
}
|
||||
|
||||
for (Row r : rows) {
|
||||
Cell[] c = r.getCell();// 每行数据再按列存储
|
||||
// 指定列
|
||||
HashMap<String, String> rowMap = new HashMap<>();
|
||||
for (Cell c1 : c) {
|
||||
String name = c1.getName();// 明细字段名称
|
||||
if (name.equals("ygxm") && NumberUtils.isCreatable(c1.getValue())) {
|
||||
needChangeEmpIds.add(Long.valueOf(c1.getValue()));
|
||||
}
|
||||
}
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(cbsIdList)) {
|
||||
// 修改状态
|
||||
getSalaryCbsInfoService(user).updatePushStatusByCbsIdsAndEmpIds(cbsIdList, needChangeEmpIds, CbsPushStatusEnum.NOT_PUSHED.getValue());
|
||||
}
|
||||
|
||||
} catch (Exception e) {
|
||||
log.error("联特工资卡信息变更出错", e);
|
||||
requestInfo.getRequestManager().setMessage(e.getMessage());
|
||||
return FAILURE_AND_CONTINUE;
|
||||
}
|
||||
return SUCCESS;
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName PaymentApplyAgentDTO
|
||||
* @date 2025/05/08 13:28
|
||||
* @description 代发明细信息
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PaymentApplyAgentDTO {
|
||||
|
||||
// 每笔明细的金额 Y
|
||||
private String dtlAmount;
|
||||
|
||||
// 是否跨行 N Y:跨行、N:同行
|
||||
private String dtlBankFlag;
|
||||
|
||||
// 联行号 同行时可不传联行号,跨行必传
|
||||
private String dtlCnapsCode;
|
||||
|
||||
private String dtlExtend1;
|
||||
private String dtlExtend2;
|
||||
private String dtlExtend3;
|
||||
private String dtlExtend4;
|
||||
private String dtlExtend5;
|
||||
private String dtlExtend6;
|
||||
|
||||
// 明细用途 N
|
||||
private String dtlPurpose;
|
||||
|
||||
// 明细摘要 N
|
||||
private String dtlRemark;
|
||||
|
||||
// 收款账号 Y
|
||||
private String dtlRevAccount;
|
||||
|
||||
// 收款账号银行号|地区码 N
|
||||
private String dtlRevBankArea;
|
||||
|
||||
// 收款开户地 N
|
||||
private String dtlRevBankCity;
|
||||
|
||||
// 收款开户行 N
|
||||
private String dtlRevBankName;
|
||||
|
||||
// 收款账户名称 N
|
||||
private String dtlRevName;
|
||||
|
||||
// 明细序号N
|
||||
private String dtlSeqNum;
|
||||
}
|
||||
|
|
@ -0,0 +1,25 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName PaymentApplyAgentRequest
|
||||
* @date 2025/05/08 13:50
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PaymentApplyAgentRequest {
|
||||
|
||||
private PaymentApplySubmitReqDTO paymentApplySubmitReqDTO;
|
||||
|
||||
private List<PaymentApplyAgentDTO> paymentApplyAgentDTO;
|
||||
}
|
||||
|
|
@ -0,0 +1,100 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName PaymentApplySubmitReqDTO
|
||||
* @date 2025/05/08 13:39
|
||||
* @description 概要信息
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class PaymentApplySubmitReqDTO {
|
||||
|
||||
// 代发总金额 Y
|
||||
private String amount;
|
||||
|
||||
// 自动匹配预算计划流水号 N
|
||||
private String autoMatchPlanNumber;
|
||||
|
||||
|
||||
private String bankExtend1;
|
||||
private String bankExtend2;
|
||||
private String bankExtend3;
|
||||
private String bankExtend4;
|
||||
private String bankExtend5;
|
||||
private String bankExtend6;
|
||||
private String bankExtend7;
|
||||
private String bankExtend8;
|
||||
|
||||
// 业务类型 Y
|
||||
private String busType;
|
||||
|
||||
// 同城标志 N
|
||||
private String cityFlag;
|
||||
|
||||
// 币种 Y
|
||||
private String currency;
|
||||
|
||||
// 预算明细项id N
|
||||
private String detailId;
|
||||
|
||||
// 客户备用字段1 N
|
||||
private String erpExtend1;
|
||||
|
||||
// 客户备用字段2 N
|
||||
private String erpExtend2;
|
||||
|
||||
// 客户备用字段3 N
|
||||
private String erpExtend3;
|
||||
|
||||
// 付款账号 Y
|
||||
private String payAccount;
|
||||
|
||||
// 结算方式 N
|
||||
private String payType;
|
||||
|
||||
// 公私标志 N
|
||||
private String personalFlag;
|
||||
|
||||
// 计划类别 N
|
||||
private String planCategory;
|
||||
|
||||
// 计划周期 N
|
||||
private String planCycle;
|
||||
|
||||
// 预算项编号 N
|
||||
private String planItemCode;
|
||||
|
||||
// 计划流水号 N
|
||||
private String planNumber;
|
||||
|
||||
// 资金预算所属单位编码 N
|
||||
private String planUnitCode;
|
||||
|
||||
// 该笔支付用途 Y
|
||||
private String purpose;
|
||||
|
||||
// 是否实时 N
|
||||
private String realTimeTag;
|
||||
|
||||
// 业务参考号 Y
|
||||
private String referenceNum;
|
||||
|
||||
// 预算分列序号 N
|
||||
private String separateSerial;
|
||||
|
||||
// 该笔支付备注 N
|
||||
private String summary;
|
||||
|
||||
// 加急标志 N
|
||||
private String urgentTag;
|
||||
|
||||
private String expectTime;
|
||||
}
|
||||
|
|
@ -0,0 +1,38 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.YearMonth;
|
||||
|
||||
/**
|
||||
* @ClassName SalaryCBSBaseInfoDTO
|
||||
* @author Harryxzy
|
||||
* @date 2025/5/7 18:01
|
||||
* @description cbs基本信息
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCBSBaseInfoDTO {
|
||||
|
||||
// 已推送")
|
||||
private Integer pushNum;
|
||||
|
||||
// 总数")
|
||||
private Integer pushTotal;
|
||||
|
||||
|
||||
// 薪资所属月")
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private YearMonth salaryMonth;
|
||||
|
||||
// 薪资账套的周期")
|
||||
private SalarySobCycleDTO salarySobCycle;
|
||||
}
|
||||
|
|
@ -0,0 +1,77 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import com.engine.salary.annotation.I18n;
|
||||
import com.engine.salary.annotation.TableTitle;
|
||||
import com.engine.salary.enums.datacollection.DataCollectionEmployeeTypeEnum;
|
||||
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
|
||||
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCBSInfoListDTO {
|
||||
|
||||
@JsonSerialize(using = ToStringSerializer.class)
|
||||
private Long id;
|
||||
|
||||
private Long employeeId;
|
||||
|
||||
@TableTitle(title = "姓名", dataIndex = "username", key = "username")
|
||||
@I18n
|
||||
private String username;
|
||||
|
||||
|
||||
@TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgent", key = "taxAgent")
|
||||
private String taxAgent;
|
||||
private Long taxAgentId;
|
||||
|
||||
|
||||
@TableTitle(title = "部门", dataIndex = "department", key = "department")
|
||||
@I18n
|
||||
private String department;
|
||||
|
||||
|
||||
@TableTitle(title = "手机号", dataIndex = "mobile", key = "mobile")
|
||||
private String mobile;
|
||||
|
||||
|
||||
@TableTitle(title = "工号", dataIndex = "jobNum", key = "jobNum")
|
||||
private String jobNum;
|
||||
|
||||
|
||||
private int pushStatus;
|
||||
|
||||
@TableTitle(title = "推送状态", dataIndex = "pushStatusVal", key = "pushStatusVal")
|
||||
private String pushStatusVal;
|
||||
|
||||
|
||||
private Long salaryAcctRecordId;
|
||||
|
||||
@TableTitle(title = "工资卡开户名", dataIndex = "gzkkhm", key = "gzkkhm")
|
||||
private String gzkkhm;
|
||||
|
||||
@TableTitle(title = "工资卡账号", dataIndex = "gzkzh", key = "gzkzh")
|
||||
private String gzkzh;
|
||||
|
||||
@TableTitle(title = "工资卡开户行", dataIndex = "gzkkhh", key = "gzkkhh")
|
||||
private String gzkkhh;
|
||||
|
||||
@TableTitle(title = "工资卡开户行支行编码", dataIndex = "gzkkhzhbm", key = "gzkkhzhbm")
|
||||
private String gzkkhzhbm;
|
||||
|
||||
|
||||
/**
|
||||
* 人员类型,0或null组织架构,1非系统人员
|
||||
*
|
||||
* @see DataCollectionEmployeeTypeEnum
|
||||
*/
|
||||
private Integer employeeType;
|
||||
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,73 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import com.engine.salary.annotation.Auth;
|
||||
import com.engine.salary.enums.auth.AuthCheckTypeEnum;
|
||||
import com.fasterxml.jackson.annotation.JsonFormat;
|
||||
import com.fasterxml.jackson.annotation.JsonIgnore;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.Set;
|
||||
|
||||
/**
|
||||
* @Description: cbs推送列表
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Auth(page = "salaryCBSPushLst", checkType = AuthCheckTypeEnum.EMP)
|
||||
public class SalaryCBSPushListDTO {
|
||||
|
||||
// 主键id
|
||||
private Long id;
|
||||
|
||||
|
||||
|
||||
// 薪资所属月
|
||||
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
|
||||
private Date salaryYearMonth;
|
||||
|
||||
/**
|
||||
* 薪资账套id
|
||||
*/
|
||||
@JsonIgnore
|
||||
private Long salarySobId;
|
||||
|
||||
|
||||
// 薪资账套
|
||||
private String salarySob;
|
||||
|
||||
// 核算次数
|
||||
private String acctTimes;
|
||||
|
||||
|
||||
/**
|
||||
* 已推送数量
|
||||
*/
|
||||
private Integer pushNum;
|
||||
|
||||
/**
|
||||
* 推送总数
|
||||
*/
|
||||
private Integer pushTotal;
|
||||
|
||||
private String pushSituation;
|
||||
|
||||
/**
|
||||
* 最后推送时间
|
||||
*
|
||||
*/
|
||||
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
|
||||
private Date lastPushTime;
|
||||
|
||||
/**
|
||||
* 薪资核算ID
|
||||
*/
|
||||
private Long salaryAcctId;
|
||||
|
||||
private Set<String> opts;
|
||||
}
|
||||
|
|
@ -0,0 +1,36 @@
|
|||
package com.engine.salary.entity.cbs.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCardInfo
|
||||
* @date 2025/05/08 10:00
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCardInfo {
|
||||
|
||||
private Long employeeId;
|
||||
|
||||
// 工资卡开户名
|
||||
private String gzkkhm;
|
||||
|
||||
// 工资卡账号
|
||||
private String gzkzh;
|
||||
|
||||
// 工资卡开户行
|
||||
private String gzkkhh;
|
||||
|
||||
// 工资卡开户行支行编码
|
||||
private String gzkkhzhbm;
|
||||
|
||||
// 是否是中国银行 0 是, 1否
|
||||
private Integer sfszgyh;
|
||||
}
|
||||
|
|
@ -0,0 +1,29 @@
|
|||
package com.engine.salary.entity.cbs.param;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class CBSPushParam {
|
||||
|
||||
// 主键id
|
||||
private List<Long> ids;
|
||||
|
||||
// cbsId
|
||||
private List<Long> salaryCbsIds;
|
||||
|
||||
private boolean isConfirm;
|
||||
|
||||
// 工资卡开户行
|
||||
private String gzkkhh;
|
||||
|
||||
// 姓名
|
||||
private String username;
|
||||
}
|
||||
|
|
@ -0,0 +1,92 @@
|
|||
package com.engine.salary.entity.cbs.param;
|
||||
|
||||
import com.engine.salary.common.BaseQueryParam;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.time.LocalDate;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCBSInfoQueryParam extends BaseQueryParam {
|
||||
|
||||
// 主键id")
|
||||
private Collection<Long> ids;
|
||||
|
||||
// cbsId")
|
||||
private Long salaryCbsId;
|
||||
|
||||
/**
|
||||
* 工资核算id
|
||||
*/
|
||||
// @JsonIgnore
|
||||
private Long salaryAccountingId;
|
||||
|
||||
// 关键字(姓名)")
|
||||
private String keyword;
|
||||
|
||||
// 姓名")
|
||||
private String username;
|
||||
private Long userId;
|
||||
|
||||
// 个税扣缴义务人的主键id")
|
||||
private Long taxAgentId;
|
||||
|
||||
// 部门id")
|
||||
private List<Long> departmentIds;
|
||||
|
||||
// 分部id
|
||||
private List<Long> subCompanyIds;
|
||||
|
||||
// 岗位id")
|
||||
private List<Long> positionIds;
|
||||
|
||||
// 状态")
|
||||
private String userstatus;
|
||||
|
||||
// 入职日期")
|
||||
private List<LocalDate> hiredate;
|
||||
|
||||
// 推送状态")
|
||||
private String pushStatus;
|
||||
|
||||
/**
|
||||
* true= [已推送]
|
||||
* false= [未推送]
|
||||
*/
|
||||
private Boolean isPushed;
|
||||
|
||||
/**
|
||||
* 推送状态
|
||||
*/
|
||||
// @JsonIgnore
|
||||
private Integer pushStatusVal;
|
||||
|
||||
/**
|
||||
* 发送状态
|
||||
*/
|
||||
// @JsonIgnore
|
||||
private List<Integer> sendStatuss;
|
||||
|
||||
private String departmentIdStr;
|
||||
|
||||
private String subCompanyIdStr;
|
||||
|
||||
private String gzkkhh;
|
||||
|
||||
|
||||
public static String checkParam(SalaryCBSInfoQueryParam saveParam) {
|
||||
if (saveParam.getSalaryCbsId() == null) {
|
||||
throw new SalaryRunTimeException("cbs推送Id必传");
|
||||
}
|
||||
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,72 @@
|
|||
package com.engine.salary.entity.cbs.po;
|
||||
|
||||
import com.engine.salary.annotation.Encrypt;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsInfoPO
|
||||
* @date 2025/05/07 14:59
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCbsInfoPO {
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long creator;
|
||||
/**
|
||||
* 是否已删除。0:未删除、1:已删除
|
||||
*/
|
||||
private Integer deleteType;
|
||||
/**
|
||||
* 人员表的主键id
|
||||
*/
|
||||
private Long employeeId;
|
||||
private Integer employeeType;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 推送状态。0:未推送、1:已推送
|
||||
*/
|
||||
private Integer pushStatus;
|
||||
private Date pushTime;
|
||||
/**
|
||||
* 实发金额
|
||||
*/
|
||||
@Encrypt
|
||||
private String pushValue;
|
||||
/**
|
||||
* 业务参考号
|
||||
*/
|
||||
private String referenceNum;
|
||||
/**
|
||||
* cbs主表id
|
||||
*/
|
||||
private Long salaryCbsId;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
private String busNum;
|
||||
|
||||
//主键id集合
|
||||
private Collection<Long> ids;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,59 @@
|
|||
package com.engine.salary.entity.cbs.po;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsPO
|
||||
* @date 2025/05/07 14:58
|
||||
* @description
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCbsPO {
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long creator;
|
||||
/**
|
||||
* 是否已删除。0:未删除、1:已删除
|
||||
*/
|
||||
private Integer deleteType;
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
private Long id;
|
||||
/**
|
||||
* 最后推送时间
|
||||
*/
|
||||
private Date lastPushTime;
|
||||
/**
|
||||
* 薪资核算id
|
||||
*/
|
||||
private Long salaryAccountingId;
|
||||
private Date salaryMonth;
|
||||
/**
|
||||
* 薪资账套id
|
||||
*/
|
||||
private Long salarySobId;
|
||||
/**
|
||||
* 更新时间
|
||||
*/
|
||||
private Date updateTime;
|
||||
|
||||
//主键id集合
|
||||
private Collection<Long> ids;
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package com.engine.salary.entity.cbs.po;
|
||||
|
||||
import com.engine.salary.annotation.Encrypt;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.Date;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsPushPO
|
||||
* @date 2025/05/09 11:24
|
||||
* @description 推送日志
|
||||
*/
|
||||
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryCbsPushPO {
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
private Long id;
|
||||
private String salaryCbsId;
|
||||
private String totalEmp;
|
||||
|
||||
@Encrypt
|
||||
private String totalValue;
|
||||
private String referenceNum;
|
||||
/**
|
||||
* 创建人
|
||||
*/
|
||||
private Long creator;
|
||||
|
||||
|
||||
private String returnValue;
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
private Date createTime;
|
||||
/**
|
||||
* 是否已删除。0:未删除、1:已删除
|
||||
*/
|
||||
private Integer deleteType;
|
||||
|
||||
//主键id集合
|
||||
private Collection<Long> ids;
|
||||
}
|
||||
|
|
@ -0,0 +1,55 @@
|
|||
package com.engine.salary.enums.salaryaccounting;
|
||||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* cbs推送的状态
|
||||
* <p>Copyright: Copyright (c) 2025</p>
|
||||
* <p>Company: 泛微软件</p>
|
||||
*
|
||||
* @author xzy
|
||||
* @version 1.0
|
||||
**/
|
||||
public enum CbsPushStatusEnum implements BaseEnum<Integer> {
|
||||
|
||||
NOT_PUSHED(0, "未推送", 0),
|
||||
PUSHED(1, "已推送", 0);
|
||||
|
||||
private int value;
|
||||
|
||||
private String defaultLabel;
|
||||
|
||||
private int labelId;
|
||||
|
||||
CbsPushStatusEnum(int value, String defaultLabel, int labelId) {
|
||||
this.value = value;
|
||||
this.defaultLabel = defaultLabel;
|
||||
this.labelId = labelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultLabel() {
|
||||
return defaultLabel;
|
||||
}
|
||||
|
||||
public static CbsPushStatusEnum parseByValue(Integer value) {
|
||||
for (CbsPushStatusEnum salaryAcctRecordStatusEnum : CbsPushStatusEnum.values()) {
|
||||
if (Objects.equals(salaryAcctRecordStatusEnum.getValue(), value)) {
|
||||
return salaryAcctRecordStatusEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -17,6 +17,7 @@ public enum SalaryAcctRecordStatusEnum implements BaseEnum<Integer> {
|
|||
NOT_ARCHIVED(1, "未归档", 91870),
|
||||
ARCHIVED(2, "已归档", 91862),
|
||||
DECLARED(3, "已申报", 100119),
|
||||
PUSHED(4, "已推送", 0),
|
||||
;
|
||||
|
||||
private int value;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,75 @@
|
|||
package com.engine.salary.mapper.cbs;
|
||||
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO;
|
||||
import com.engine.salary.entity.cbs.param.SalaryCBSInfoQueryParam;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface SalaryCbsInfoMapper {
|
||||
|
||||
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsInfoPO> listAll();
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsInfoPO> listSome(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsInfoPO getById(Long id);
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbsInfo 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
List<SalaryCbsInfoPO> listByCbsIds(@Param("cbsIds") List<Long> cbdIds);
|
||||
|
||||
List<SalaryCBSInfoListDTO> list(@Param("param")SalaryCBSInfoQueryParam queryParam);
|
||||
|
||||
List<SalaryCbsInfoPO> listByCbsIdAndIds(@Param("cbsIds")List<Long> salaryCbsIds, @Param("ids")List<Long> part);
|
||||
|
||||
void updatePushStatusByCbsIdsAndEmpIds(@Param("cbsIds")List<Long> cbsIdList, @Param("empIds")List<Long> part, @Param("pushStatus")Integer value);
|
||||
}
|
||||
|
|
@ -0,0 +1,553 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.engine.salary.mapper.cbs.SalaryCbsInfoMapper">
|
||||
<resultMap id="BaseResultMap" type="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
<result column="create_time" property="createTime" />
|
||||
<result column="creator" property="creator" />
|
||||
<result column="delete_type" property="deleteType" />
|
||||
<result column="employee_id" property="employeeId" />
|
||||
<result column="employee_type" property="employeeType" />
|
||||
<result column="id" property="id" />
|
||||
<result column="push_status" property="pushStatus" />
|
||||
<result column="push_time" property="pushTime" />
|
||||
<result column="push_value" property="pushValue" />
|
||||
<result column="reference_num" property="referenceNum" />
|
||||
<result column="salary_cbs_id" property="salaryCbsId" />
|
||||
<result column="update_time" property="updateTime" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 表字段 -->
|
||||
<sql id="baseColumns">
|
||||
t.create_time
|
||||
, t.creator
|
||||
, t.delete_type
|
||||
, t.employee_id
|
||||
, t.employee_type
|
||||
, t.id
|
||||
, t.push_status
|
||||
, t.push_time
|
||||
, t.push_value
|
||||
, t.reference_num
|
||||
, t.salary_cbs_id
|
||||
, t.update_time
|
||||
</sql>
|
||||
|
||||
<!-- 查询全部 -->
|
||||
<select id="listAll" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_info t
|
||||
WHERE delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 根据主键获取单条记录 -->
|
||||
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_info t
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 条件查询 -->
|
||||
<select id="listSome" resultMap="BaseResultMap" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_info t
|
||||
WHERE delete_type = 0
|
||||
<if test="createTime != null">
|
||||
AND create_time = #{createTime}
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
AND creator = #{creator}
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
AND delete_type = #{deleteType}
|
||||
</if>
|
||||
<if test="employeeId != null">
|
||||
AND employee_id = #{employeeId}
|
||||
</if>
|
||||
<if test="employeeType != null">
|
||||
AND employee_type = #{employeeType}
|
||||
</if>
|
||||
<if test="id != null">
|
||||
AND id = #{id}
|
||||
</if>
|
||||
<if test="pushStatus != null">
|
||||
AND push_status = #{pushStatus}
|
||||
</if>
|
||||
<if test="pushTime != null">
|
||||
AND push_time = #{pushTime}
|
||||
</if>
|
||||
<if test="pushValue != null">
|
||||
AND push_value = #{pushValue}
|
||||
</if>
|
||||
<if test="referenceNum != null">
|
||||
AND reference_num = #{referenceNum}
|
||||
</if>
|
||||
<if test="salaryCbsId != null">
|
||||
AND salary_cbs_id = #{salaryCbsId}
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
AND update_time = #{updateTime}
|
||||
</if>
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
|
||||
<select id="listByCbsIds" resultType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_info t
|
||||
WHERE delete_type = 0
|
||||
<if test="cbsIds != null and cbsIds.size()>0">
|
||||
AND salary_cbs_id IN
|
||||
<foreach collection="cbsIds" open="(" item="cbsId" separator="," close=")">
|
||||
#{cbsId}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
|
||||
|
||||
<sql id="salaryCbsInfoColumn">
|
||||
t1.id,
|
||||
e.lastname as username,
|
||||
d.departmentname AS department,
|
||||
e.mobile,
|
||||
e.workcode as jobNum,
|
||||
t1.push_status,
|
||||
t1.employee_id,
|
||||
t1.employee_type,
|
||||
e.email
|
||||
</sql>
|
||||
|
||||
<sql id="paramSql">
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND t1.id IN
|
||||
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.salaryCbsId != null">
|
||||
AND t1.salary_cbs_id = #{param.salaryCbsId}
|
||||
</if>
|
||||
<!-- 关键字 -->
|
||||
<if test="param.keyword != null and param.keyword != ''">
|
||||
AND e.lastname like CONCAT('%',#{param.keyword},'%')
|
||||
</if>
|
||||
<!-- 姓名 -->
|
||||
<if test="param.username != null and param.username != ''">
|
||||
AND e.lastname like CONCAT('%',#{param.username},'%')
|
||||
</if>
|
||||
<if test="param.userId != null">
|
||||
AND e.id = #{param.userId}
|
||||
</if>
|
||||
|
||||
<!-- 部门 -->
|
||||
<if test="param.departmentIds != null and param.departmentIds.size()>0">
|
||||
AND d.id IN
|
||||
<foreach collection="param.departmentIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<!-- 岗位 -->
|
||||
<if test="param.positionIds != null and param.positionIds.size()>0">
|
||||
AND e.jobtitle IN
|
||||
<foreach collection="param.positionIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
<!-- 状态 -->
|
||||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
<!-- 入职日期 -->
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.hiredate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
</if>
|
||||
</sql>
|
||||
<sql id="paramSql" databaseId="oracle">
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND t1.id IN
|
||||
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.salaryCbsId != null">
|
||||
AND t1.salary_cbs_id = #{param.salaryCbsId}
|
||||
</if>
|
||||
|
||||
<if test="param.keyword != null and param.keyword != ''">
|
||||
AND e.lastname like '%'||#{param.keyword}||'%'
|
||||
</if>
|
||||
|
||||
<if test="param.username != null and param.username != ''">
|
||||
AND e.lastname like '%'||#{param.username}||'%'
|
||||
</if>
|
||||
|
||||
<if test="param.userId != null">
|
||||
AND e.id = #{param.userId}
|
||||
</if>
|
||||
|
||||
|
||||
<if test="param.departmentIds != null and param.departmentIds.size()>0">
|
||||
AND d.id IN
|
||||
<foreach collection="param.departmentIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.positionIds != null and param.positionIds.size()>0">
|
||||
AND e.jobtitle IN
|
||||
<foreach collection="param.positionIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.hiredate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
</if>
|
||||
</sql>
|
||||
<sql id="paramSql" databaseId="sqlserver">
|
||||
<if test="param.ids != null and param.ids.size()>0">
|
||||
AND t1.id IN
|
||||
<foreach collection="param.ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.salaryCbsId != null">
|
||||
AND t1.salary_cbs_id = #{param.salaryCbsId}
|
||||
</if>
|
||||
|
||||
<if test="param.keyword != null and param.keyword != ''">
|
||||
AND e.lastname like '%'+#{param.keyword}+'%'
|
||||
</if>
|
||||
|
||||
<if test="param.username != null and param.username != ''">
|
||||
AND e.lastname like '%'+#{param.username}+'%'
|
||||
</if>
|
||||
|
||||
<if test="param.userId != null">
|
||||
AND e.id = #{param.userId}
|
||||
</if>
|
||||
|
||||
|
||||
<if test="param.departmentIds != null and param.departmentIds.size()>0">
|
||||
AND d.id IN
|
||||
<foreach collection="param.departmentIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.positionIds != null and param.positionIds.size()>0">
|
||||
AND e.jobtitle IN
|
||||
<foreach collection="param.positionIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
|
||||
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.hiredate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
</if>
|
||||
</sql>
|
||||
|
||||
|
||||
<select id="list" resultType="com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO">
|
||||
SELECT
|
||||
<include refid="salaryCbsInfoColumn"/>
|
||||
FROM
|
||||
hrsa_salary_cbs_info t1
|
||||
LEFT JOIN hrmresource e ON e.id = t1.employee_id
|
||||
LEFT JOIN hrmdepartment d ON d.id = e.DEPARTMENTID
|
||||
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
|
||||
WHERE
|
||||
t1.delete_type = 0
|
||||
<!-- 发送状态 -->
|
||||
<if test="param.pushStatusVal != null">
|
||||
AND t1.push_status = #{param.pushStatusVal}
|
||||
</if>
|
||||
|
||||
<!-- 分部 -->
|
||||
<if test="param.subCompanyIds != null and param.subCompanyIds.size()>0">
|
||||
AND e.subcompanyid1 IN
|
||||
<foreach collection="param.subCompanyIds" open="(" item="subCompanyId" separator="," close=")">
|
||||
#{subCompanyId}
|
||||
</foreach>
|
||||
</if>
|
||||
<include refid="paramSql"/>
|
||||
<!-- 排序 -->
|
||||
<if test="param.orderRule != null">
|
||||
ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc}
|
||||
</if>
|
||||
</select>
|
||||
<select id="list" resultType="com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO" databaseId="oracle">
|
||||
SELECT
|
||||
<include refid="salaryCbsInfoColumn"/>
|
||||
FROM
|
||||
hrsa_salary_cbs_info t1
|
||||
LEFT JOIN hrmresource e ON e.id = t1.employee_id
|
||||
LEFT JOIN hrmdepartment d ON d.id = e.DEPARTMENTID
|
||||
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
|
||||
WHERE
|
||||
t1.delete_type = 0
|
||||
|
||||
<!-- 发送状态 -->
|
||||
<if test="param.pushStatusVal != null">
|
||||
AND t1.push_status = #{param.pushStatusVal}
|
||||
</if>
|
||||
|
||||
<!-- 分部 -->
|
||||
<if test="param.subCompanyIds != null and param.subCompanyIds.size()>0">
|
||||
AND e.subcompanyid1 IN
|
||||
<foreach collection="param.subCompanyIds" open="(" item="subCompanyId" separator="," close=")">
|
||||
#{subCompanyId}
|
||||
</foreach>
|
||||
</if>
|
||||
<include refid="paramSql"/>
|
||||
<!-- 排序 -->
|
||||
<if test="param.orderRule != null">
|
||||
ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc}
|
||||
</if>
|
||||
</select>
|
||||
<select id="list" resultType="com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO" databaseId="sqlserver">
|
||||
SELECT
|
||||
<include refid="salaryCbsInfoColumn"/>
|
||||
FROM
|
||||
hrsa_salary_cbs_info t1
|
||||
LEFT JOIN hrmresource e ON e.id = t1.employee_id
|
||||
LEFT JOIN hrmdepartment d ON d.id = e.DEPARTMENTID
|
||||
LEFT JOIN hrmsubcompany c ON c.id = e.subcompanyid1
|
||||
WHERE
|
||||
t1.delete_type = 0
|
||||
|
||||
<!-- 发送状态 -->
|
||||
<if test="param.pushStatusVal != null">
|
||||
AND t1.push_status = #{param.pushStatusVal}
|
||||
</if>
|
||||
|
||||
<!-- 分部 -->
|
||||
<if test="param.subCompanyIds != null and param.subCompanyIds.size()>0">
|
||||
AND e.subcompanyid1 IN
|
||||
<foreach collection="param.subCompanyIds" open="(" item="subCompanyId" separator="," close=")">
|
||||
#{subCompanyId}
|
||||
</foreach>
|
||||
</if>
|
||||
<include refid="paramSql"/>
|
||||
<!-- 排序 -->
|
||||
<if test="param.orderRule != null">
|
||||
ORDER BY ${param.orderRule.orderRule} ${param.orderRule.ascOrDesc}
|
||||
</if>
|
||||
</select>
|
||||
<select id="listByCbsIdAndIds" resultType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_info t
|
||||
WHERE delete_type = 0
|
||||
|
||||
<if test="cbsIds != null and cbsIds.size()>0">
|
||||
AND salary_cbs_id IN
|
||||
<foreach collection="cbsIds" open="(" item="cbsId" separator="," close=")">
|
||||
#{cbsId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 插入不为NULL的字段 -->
|
||||
<insert id="insertIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
INSERT INTO hrsa_salary_cbs_info
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
creator,
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
delete_type,
|
||||
</if>
|
||||
<if test="employeeId != null">
|
||||
employee_id,
|
||||
</if>
|
||||
<if test="employeeType != null">
|
||||
employee_type,
|
||||
</if>
|
||||
<if test="id != null">
|
||||
id,
|
||||
</if>
|
||||
<if test="pushStatus != null">
|
||||
push_status,
|
||||
</if>
|
||||
<if test="pushTime != null">
|
||||
push_time,
|
||||
</if>
|
||||
<if test="pushValue != null">
|
||||
push_value,
|
||||
</if>
|
||||
<if test="referenceNum != null">
|
||||
reference_num,
|
||||
</if>
|
||||
<if test="salaryCbsId != null">
|
||||
salary_cbs_id,
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
update_time,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
|
||||
<if test="createTime != null" >
|
||||
#{createTime},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
#{creator},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
#{deleteType},
|
||||
</if>
|
||||
<if test="employeeId != null" >
|
||||
#{employeeId},
|
||||
</if>
|
||||
<if test="employeeType != null" >
|
||||
#{employeeType},
|
||||
</if>
|
||||
<if test="id != null" >
|
||||
#{id},
|
||||
</if>
|
||||
<if test="pushStatus != null" >
|
||||
#{pushStatus},
|
||||
</if>
|
||||
<if test="pushTime != null" >
|
||||
#{pushTime},
|
||||
</if>
|
||||
<if test="pushValue != null" >
|
||||
#{pushValue},
|
||||
</if>
|
||||
<if test="referenceNum != null" >
|
||||
#{referenceNum},
|
||||
</if>
|
||||
<if test="salaryCbsId != null" >
|
||||
#{salaryCbsId},
|
||||
</if>
|
||||
<if test="updateTime != null" >
|
||||
#{updateTime},
|
||||
</if>
|
||||
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<!-- 更新,更新全部字段 -->
|
||||
<update id="update" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
UPDATE hrsa_salary_cbs_info
|
||||
<set>
|
||||
create_time=#{createTime},
|
||||
creator=#{creator},
|
||||
delete_type=#{deleteType},
|
||||
employee_id=#{employeeId},
|
||||
employee_type=#{employeeType},
|
||||
push_status=#{pushStatus},
|
||||
push_time=#{pushTime},
|
||||
push_value=#{pushValue},
|
||||
reference_num=#{referenceNum},
|
||||
salary_cbs_id=#{salaryCbsId},
|
||||
update_time=#{updateTime},
|
||||
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 更新不为NULL的字段 -->
|
||||
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
UPDATE hrsa_salary_cbs_info
|
||||
<set>
|
||||
<if test="createTime != null" >
|
||||
create_time=#{createTime},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
creator=#{creator},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
delete_type=#{deleteType},
|
||||
</if>
|
||||
<if test="employeeId != null" >
|
||||
employee_id=#{employeeId},
|
||||
</if>
|
||||
<if test="employeeType != null" >
|
||||
employee_type=#{employeeType},
|
||||
</if>
|
||||
<if test="pushStatus != null" >
|
||||
push_status=#{pushStatus},
|
||||
</if>
|
||||
<if test="pushTime != null" >
|
||||
push_time=#{pushTime},
|
||||
</if>
|
||||
<if test="pushValue != null" >
|
||||
push_value=#{pushValue},
|
||||
</if>
|
||||
<if test="referenceNum != null" >
|
||||
reference_num=#{referenceNum},
|
||||
</if>
|
||||
<if test="salaryCbsId != null" >
|
||||
salary_cbs_id=#{salaryCbsId},
|
||||
</if>
|
||||
<if test="updateTime != null" >
|
||||
update_time=#{updateTime},
|
||||
</if>
|
||||
<if test="busNum != null" >
|
||||
bus_num=#{busNum},
|
||||
</if>
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
<update id="updatePushStatusByCbsIdsAndEmpIds">
|
||||
UPDATE hrsa_salary_cbs_info
|
||||
SET push_status=#{pushStatus}
|
||||
WHERE delete_type=0
|
||||
<if test="cbsIds != null and cbsIds.size()>0">
|
||||
AND salary_cbs_id IN
|
||||
<foreach collection="cbsIds" open="(" item="cbsId" separator="," close=")">
|
||||
#{cbsId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="empIds != null and empIds.size()>0">
|
||||
AND employee_id IN
|
||||
<foreach collection="empIds" open="(" item="empId" separator="," close=")">
|
||||
#{empId}
|
||||
</foreach>
|
||||
</if>
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 根据主键删除记录 -->
|
||||
<delete id="delete" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsInfoPO">
|
||||
UPDATE hrsa_salary_cbs_info
|
||||
SET delete_type=1
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</delete>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,76 @@
|
|||
package com.engine.salary.mapper.cbs;
|
||||
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSPushListDTO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendQueryParam;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsMapper
|
||||
* @date 2025/05/07 15:02
|
||||
* @description
|
||||
*/
|
||||
public interface SalaryCbsMapper {
|
||||
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPO> listAll();
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPO> listSome(SalaryCbsPO salaryCbs);
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsPO getById(Long id);
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbs 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbs 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbs 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbs 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsPO salaryCbs);
|
||||
|
||||
List<SalaryCBSPushListDTO> list(@Param("param") SalarySendQueryParam queryParam);
|
||||
|
||||
List<SalaryCbsPO> listBySalaryAcctRecordIds(@Param("salaryAcctRecordIds") List<Long> salaryAcctRecordIds);
|
||||
}
|
||||
|
|
@ -0,0 +1,257 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.engine.salary.mapper.cbs.SalaryCbsMapper">
|
||||
<resultMap id="BaseResultMap" type="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
<result column="create_time" property="createTime" />
|
||||
<result column="creator" property="creator" />
|
||||
<result column="delete_type" property="deleteType" />
|
||||
<result column="id" property="id" />
|
||||
<result column="last_push_time" property="lastPushTime" />
|
||||
<result column="salary_accounting_id" property="salaryAccountingId" />
|
||||
<result column="salary_month" property="salaryMonth" />
|
||||
<result column="salary_sob_id" property="salarySobId" />
|
||||
<result column="update_time" property="updateTime" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 表字段 -->
|
||||
<sql id="baseColumns">
|
||||
t.create_time
|
||||
, t.creator
|
||||
, t.delete_type
|
||||
, t.id
|
||||
, t.last_push_time
|
||||
, t.salary_accounting_id
|
||||
, t.salary_month
|
||||
, t.salary_sob_id
|
||||
, t.update_time
|
||||
</sql>
|
||||
|
||||
<!-- 查询全部 -->
|
||||
<select id="listAll" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs t
|
||||
WHERE delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 根据主键获取单条记录 -->
|
||||
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs t
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 条件查询 -->
|
||||
<select id="listSome" resultMap="BaseResultMap" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs t
|
||||
WHERE delete_type = 0
|
||||
<if test="createTime != null">
|
||||
AND create_time = #{createTime}
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
AND creator = #{creator}
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
AND delete_type = #{deleteType}
|
||||
</if>
|
||||
<if test="id != null">
|
||||
AND id = #{id}
|
||||
</if>
|
||||
<if test="lastPushTime != null">
|
||||
AND last_push_time = #{lastPushTime}
|
||||
</if>
|
||||
<if test="salaryAccountingId != null">
|
||||
AND salary_accounting_id = #{salaryAccountingId}
|
||||
</if>
|
||||
<if test="salaryMonth != null">
|
||||
AND salary_month = #{salaryMonth}
|
||||
</if>
|
||||
<if test="salarySobId != null">
|
||||
AND salary_sob_id = #{salarySobId}
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
AND update_time = #{updateTime}
|
||||
</if>
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
|
||||
<select id="list" resultType="com.engine.salary.entity.cbs.dto.SalaryCBSPushListDTO">
|
||||
SELECT
|
||||
t1.id,
|
||||
t1.salary_accounting_id AS salaryAcctId,
|
||||
t2.salary_month AS salaryYearMonth,
|
||||
t3.name AS salarySob,
|
||||
t3.id AS salarySobId,
|
||||
t1.last_push_time AS lastPushTime,
|
||||
t2.acct_times AS acctTimes,
|
||||
t2.back_calc_status AS salaryAcctRecordType
|
||||
FROM
|
||||
hrsa_salary_cbs t1
|
||||
LEFT JOIN hrsa_salary_acct_record t2 ON t2.id = t1.salary_accounting_id
|
||||
LEFT JOIN hrsa_salary_sob t3 ON t3.id = t2.salary_sob_id
|
||||
WHERE
|
||||
t1.delete_type = 0
|
||||
AND t2.delete_type = 0
|
||||
<!-- 薪资所属月 -->
|
||||
<if test="param.salaryMonthDate != null">
|
||||
<if test="param.salaryMonthDate.size() == 1">
|
||||
AND t2.salary_month = #{param.salaryMonthDate[0]}
|
||||
</if>
|
||||
<if test="param.salaryMonthDate.size() == 2">
|
||||
AND (t2.salary_month BETWEEN #{param.salaryMonthDate[0]} AND #{param.salaryMonthDate[1]})
|
||||
</if>
|
||||
</if>
|
||||
<if test="param.salarySobIds != null and param.salarySobIds.size() > 0">
|
||||
AND t3.id IN
|
||||
<foreach collection="param.salarySobIds" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY t1.id DESC
|
||||
</select>
|
||||
<select id="listBySalaryAcctRecordIds" resultType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs t
|
||||
WHERE delete_type = 0
|
||||
<if test="salaryAcctRecordIds != null and salaryAcctRecordIds.size() > 0">
|
||||
AND salary_accounting_id IN
|
||||
<foreach collection="salaryAcctRecordIds" open="(" item="salaryAcctRecordId" separator="," close=")">
|
||||
#{salaryAcctRecordId}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 插入不为NULL的字段 -->
|
||||
<insert id="insertIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
INSERT INTO hrsa_salary_cbs
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
creator,
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
delete_type,
|
||||
</if>
|
||||
<if test="id != null">
|
||||
id,
|
||||
</if>
|
||||
<if test="lastPushTime != null">
|
||||
last_push_time,
|
||||
</if>
|
||||
<if test="salaryAccountingId != null">
|
||||
salary_accounting_id,
|
||||
</if>
|
||||
<if test="salaryMonth != null">
|
||||
salary_month,
|
||||
</if>
|
||||
<if test="salarySobId != null">
|
||||
salary_sob_id,
|
||||
</if>
|
||||
<if test="updateTime != null">
|
||||
update_time,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
|
||||
<if test="createTime != null" >
|
||||
#{createTime},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
#{creator},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
#{deleteType},
|
||||
</if>
|
||||
<if test="id != null" >
|
||||
#{id},
|
||||
</if>
|
||||
<if test="lastPushTime != null" >
|
||||
#{lastPushTime},
|
||||
</if>
|
||||
<if test="salaryAccountingId != null" >
|
||||
#{salaryAccountingId},
|
||||
</if>
|
||||
<if test="salaryMonth != null" >
|
||||
#{salaryMonth},
|
||||
</if>
|
||||
<if test="salarySobId != null" >
|
||||
#{salarySobId},
|
||||
</if>
|
||||
<if test="updateTime != null" >
|
||||
#{updateTime},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<!-- 更新,更新全部字段 -->
|
||||
<update id="update" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
UPDATE hrsa_salary_cbs
|
||||
<set>
|
||||
create_time=#{createTime},
|
||||
creator=#{creator},
|
||||
delete_type=#{deleteType},
|
||||
last_push_time=#{lastPushTime},
|
||||
salary_accounting_id=#{salaryAccountingId},
|
||||
salary_month=#{salaryMonth},
|
||||
salary_sob_id=#{salarySobId},
|
||||
update_time=#{updateTime},
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 更新不为NULL的字段 -->
|
||||
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
UPDATE hrsa_salary_cbs
|
||||
<set>
|
||||
<if test="createTime != null" >
|
||||
create_time=#{createTime},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
creator=#{creator},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
delete_type=#{deleteType},
|
||||
</if>
|
||||
<if test="lastPushTime != null" >
|
||||
last_push_time=#{lastPushTime},
|
||||
</if>
|
||||
<if test="salaryAccountingId != null" >
|
||||
salary_accounting_id=#{salaryAccountingId},
|
||||
</if>
|
||||
<if test="salaryMonth != null" >
|
||||
salary_month=#{salaryMonth},
|
||||
</if>
|
||||
<if test="salarySobId != null" >
|
||||
salary_sob_id=#{salarySobId},
|
||||
</if>
|
||||
<if test="updateTime != null" >
|
||||
update_time=#{updateTime},
|
||||
</if>
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 根据主键删除记录 -->
|
||||
<delete id="delete" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPO">
|
||||
UPDATE hrsa_salary_cbs
|
||||
SET delete_type=1
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</delete>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -0,0 +1,68 @@
|
|||
package com.engine.salary.mapper.cbs;
|
||||
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPushPO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsPushMapper
|
||||
* @date 2025/05/09 11:28
|
||||
* @description
|
||||
*/
|
||||
public interface SalaryCbsPushMapper {
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPushPO> listAll();
|
||||
|
||||
/**
|
||||
* 条件查询
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPushPO> listSome(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsPushPO getById(Long id);
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbsPush 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbsPush 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbsPush 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbsPush 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsPushPO salaryCbsPush);
|
||||
}
|
||||
|
|
@ -0,0 +1,210 @@
|
|||
<?xml version="1.0" encoding="UTF-8" ?>
|
||||
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
|
||||
<mapper namespace="com.engine.salary.mapper.cbs.SalaryCbsPushMapper">
|
||||
<resultMap id="BaseResultMap" type="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
<result column="id" property="id" />
|
||||
<result column="salary_cbs_id" property="salaryCbsId" />
|
||||
<result column="totalEmp" property="totalEmp" />
|
||||
<result column="totalValue" property="totalValue" />
|
||||
<result column="reference_num" property="referenceNum" />
|
||||
<result column="creator" property="creator" />
|
||||
<result column="return_value" property="returnValue" />
|
||||
<result column="create_time" property="createTime" />
|
||||
<result column="delete_type" property="deleteType" />
|
||||
</resultMap>
|
||||
|
||||
<!-- 表字段 -->
|
||||
<sql id="baseColumns">
|
||||
t.id
|
||||
, t.salary_cbs_id
|
||||
, t.totalEmp
|
||||
, t.totalValue
|
||||
, t.reference_num
|
||||
, t.creator
|
||||
, t.return_value
|
||||
, t.create_time
|
||||
, t.delete_type
|
||||
</sql>
|
||||
|
||||
<!-- 查询全部 -->
|
||||
<select id="listAll" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_push t
|
||||
WHERE delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 根据主键获取单条记录 -->
|
||||
<select id="getById" resultMap="BaseResultMap" parameterType="Long">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_push t
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</select>
|
||||
|
||||
<!-- 条件查询 -->
|
||||
<select id="listSome" resultMap="BaseResultMap" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_cbs_push t
|
||||
WHERE delete_type = 0
|
||||
<if test="id != null">
|
||||
AND id = #{id}
|
||||
</if>
|
||||
<if test="salaryCbsId != null">
|
||||
AND salary_cbs_id = #{salaryCbsId}
|
||||
</if>
|
||||
<if test="totalEmp != null">
|
||||
AND totalEmp = #{totalEmp}
|
||||
</if>
|
||||
<if test="totalValue != null">
|
||||
AND totalValue = #{totalValue}
|
||||
</if>
|
||||
<if test="referenceNum != null">
|
||||
AND reference_num = #{referenceNum}
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
AND creator = #{creator}
|
||||
</if>
|
||||
<if test="returnValue != null">
|
||||
AND return_value = #{returnValue}
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
AND create_time = #{createTime}
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
AND delete_type = #{deleteType}
|
||||
</if>
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 插入不为NULL的字段 -->
|
||||
<insert id="insertIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
INSERT INTO hrsa_salary_cbs_push
|
||||
<trim prefix="(" suffix=")" suffixOverrides=",">
|
||||
|
||||
<if test="id != null">
|
||||
id,
|
||||
</if>
|
||||
<if test="salaryCbsId != null">
|
||||
salary_cbs_id,
|
||||
</if>
|
||||
<if test="totalEmp != null">
|
||||
totalEmp,
|
||||
</if>
|
||||
<if test="totalValue != null">
|
||||
totalValue,
|
||||
</if>
|
||||
<if test="referenceNum != null">
|
||||
reference_num,
|
||||
</if>
|
||||
<if test="creator != null">
|
||||
creator,
|
||||
</if>
|
||||
<if test="returnValue != null">
|
||||
return_value,
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
<if test="deleteType != null">
|
||||
delete_type,
|
||||
</if>
|
||||
</trim>
|
||||
<trim prefix="VALUES (" suffix=")" suffixOverrides=",">
|
||||
<if test="id != null" >
|
||||
#{id},
|
||||
</if>
|
||||
<if test="salaryCbsId != null" >
|
||||
#{salaryCbsId},
|
||||
</if>
|
||||
<if test="totalEmp != null" >
|
||||
#{totalEmp},
|
||||
</if>
|
||||
<if test="totalValue != null" >
|
||||
#{totalValue},
|
||||
</if>
|
||||
<if test="referenceNum != null" >
|
||||
#{referenceNum},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
#{creator},
|
||||
</if>
|
||||
<if test="returnValue != null" >
|
||||
#{returnValue},
|
||||
</if>
|
||||
<if test="createTime != null" >
|
||||
#{createTime},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
#{deleteType},
|
||||
</if>
|
||||
</trim>
|
||||
</insert>
|
||||
|
||||
<!-- 更新,更新全部字段 -->
|
||||
<update id="update" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
UPDATE hrsa_salary_cbs_push
|
||||
<set>
|
||||
salary_cbs_id=#{salaryCbsId},
|
||||
totalEmp=#{totalEmp},
|
||||
totalValue=#{totalValue},
|
||||
reference_num=#{referenceNum},
|
||||
creator=#{creator},
|
||||
return_value=#{returnValue},
|
||||
create_time=#{createTime},
|
||||
delete_type=#{deleteType},
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 更新不为NULL的字段 -->
|
||||
<update id="updateIgnoreNull" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
UPDATE hrsa_salary_cbs_push
|
||||
<set>
|
||||
<if test="salaryCbsId != null" >
|
||||
salary_cbs_id=#{salaryCbsId},
|
||||
</if>
|
||||
<if test="totalEmp != null" >
|
||||
totalEmp=#{totalEmp},
|
||||
</if>
|
||||
<if test="totalValue != null" >
|
||||
totalValue=#{totalValue},
|
||||
</if>
|
||||
<if test="referenceNum != null" >
|
||||
reference_num=#{referenceNum},
|
||||
</if>
|
||||
<if test="creator != null" >
|
||||
creator=#{creator},
|
||||
</if>
|
||||
<if test="returnValue != null" >
|
||||
return_value=#{returnValue},
|
||||
</if>
|
||||
<if test="createTime != null" >
|
||||
create_time=#{createTime},
|
||||
</if>
|
||||
<if test="deleteType != null" >
|
||||
delete_type=#{deleteType},
|
||||
</if>
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
|
||||
|
||||
<!-- 根据主键删除记录 -->
|
||||
<delete id="delete" parameterType="com.engine.salary.entity.cbs.po.SalaryCbsPushPO">
|
||||
UPDATE hrsa_salary_cbs_push
|
||||
SET delete_type=1
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</delete>
|
||||
|
||||
|
||||
</mapper>
|
||||
|
|
@ -227,4 +227,9 @@ public interface SalaryAcctRecordService {
|
|||
*/
|
||||
List<SalaryAcctTaxAgentPO> listBySalaryAcctRecordIds(Collection<Long> salaryAcctRecordIds);
|
||||
|
||||
/**
|
||||
* 联特 生成CBS推送记录
|
||||
* @param ids
|
||||
*/
|
||||
void generateCBSPushList(List<Long> ids);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,74 @@
|
|||
package com.engine.salary.service;
|
||||
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO;
|
||||
import com.engine.salary.entity.cbs.param.CBSPushParam;
|
||||
import com.engine.salary.entity.cbs.param.SalaryCBSInfoQueryParam;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsInfoService
|
||||
* @date 2025/05/07 15:06
|
||||
* @description
|
||||
*/
|
||||
public interface SalaryCbsInfoService {
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsInfoPO> listAll();
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsInfoPO getById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbsInfo 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsInfoPO salaryCbsInfo);
|
||||
|
||||
List<SalaryCbsInfoPO> listByCbsIds(List<Long> cbsIdList);
|
||||
|
||||
PageInfo<SalaryCBSInfoListDTO> salaryCbsInfoListPage(SalaryCBSInfoQueryParam queryParam);
|
||||
|
||||
String pushDataToCBS(CBSPushParam cbsPushParam);
|
||||
|
||||
void updatePushStatusByCbsIdsAndEmpIds(List<Long> cbsIdList, List<Long> needChangeEmpIds, Integer value);
|
||||
}
|
||||
|
|
@ -0,0 +1,64 @@
|
|||
package com.engine.salary.service;
|
||||
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPushPO;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsPushService
|
||||
* @date 2025/05/09 11:36
|
||||
* @description 推送日志
|
||||
*/
|
||||
public interface SalaryCbsPushService {
|
||||
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPushPO> listAll();
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsPushPO getById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbsPush 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbsPush 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbsPush 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbsPush 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsPushPO salaryCbsPush);
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,86 @@
|
|||
package com.engine.salary.service;
|
||||
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSBaseInfoDTO;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSPushListDTO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendQueryParam;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsService
|
||||
* @date 2025/05/07 15:05
|
||||
* @description
|
||||
*/
|
||||
public interface SalaryCbsService {
|
||||
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
List<SalaryCbsPO> listAll();
|
||||
|
||||
List<SalaryCbsPO> listSome(SalaryCbsPO salaryCbs);
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
SalaryCbsPO getById(Long id);
|
||||
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbs 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int insertIgnoreNull(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbs 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int update(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbs 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int updateIgnoreNull(SalaryCbsPO salaryCbs);
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbs 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SalaryCbsPO salaryCbs);
|
||||
|
||||
List<SalaryCbsPO> listBySalaryAcctRecordId(Long salaryAcctRecordId);
|
||||
|
||||
List<SalaryCbsPO> listBySalaryAcctRecordIds(List<Long> salaryAcctRecordIds);
|
||||
|
||||
/**
|
||||
* 生成cbs推送列表
|
||||
* @param salaryAcctRecordPO
|
||||
*/
|
||||
|
||||
void generatePushList(SalaryAcctRecordPO salaryAcctRecordPO, Map<Long, Long> sobItemMap);
|
||||
|
||||
List<SalaryCBSPushListDTO> list(SalarySendQueryParam queryParam);
|
||||
|
||||
SalaryCBSBaseInfoDTO getBaseInfo(Long id);
|
||||
|
||||
}
|
||||
|
|
@ -48,6 +48,7 @@ import com.google.common.collect.Sets;
|
|||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.User;
|
||||
|
||||
|
|
@ -145,6 +146,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
|
|||
return ServiceUtil.getService(PushServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsService getSalaryCbsService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public SalaryAcctRecordPO getById(Long id) {
|
||||
|
|
@ -731,8 +736,8 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
|
|||
salaryAcctRecordPO.setUpdateTime(new Date());
|
||||
getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO);
|
||||
|
||||
// 生成工资单
|
||||
getSalarySendService(user).generateSalaryBill(salaryAcctRecordId);
|
||||
// 生成工资单 联特 放在cbd推送中生成
|
||||
// getSalarySendService(user).generateSalaryBill(salaryAcctRecordId);
|
||||
|
||||
//删除报表缓存
|
||||
getSalaryStatisticsReportService(user).removeReportCache();
|
||||
|
|
@ -762,6 +767,10 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
|
|||
if (Objects.isNull(salaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
|
||||
if (salaryAcctRecordPO.getStatus().equals(SalaryAcctRecordStatusEnum.PUSHED.getValue())) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "薪资核算记录已为已推送状态,不能重新核算"));
|
||||
}
|
||||
// 重新核算
|
||||
reCalcOrBackCalc(salaryAcctRecordPO, true);
|
||||
|
||||
|
|
@ -1012,4 +1021,59 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
|
|||
public void updateDate(Long id, Date updateTime) {
|
||||
getSalaryAcctRecordMapper().updateDate(id, updateTime);
|
||||
}
|
||||
|
||||
/**
|
||||
* 联特 生成CBS推送记录
|
||||
* @param ids
|
||||
*/
|
||||
@Override
|
||||
public void generateCBSPushList(List<Long> ids) {
|
||||
if (CollectionUtils.isEmpty(ids)) {
|
||||
return;
|
||||
}
|
||||
// 查询薪资核算记录
|
||||
List<SalaryAcctRecordPO> salaryAcctRecordList = listByIds(ids);
|
||||
if (CollectionUtils.isEmpty(salaryAcctRecordList)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
|
||||
}
|
||||
|
||||
Optional<SalaryAcctRecordPO> notArchived = salaryAcctRecordList.stream().filter(salaryAcctRecordPO -> salaryAcctRecordPO.getStatus().equals(SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())).findFirst();
|
||||
if (notArchived.isPresent()) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "核算记录尚未归档,请先归档"));
|
||||
}
|
||||
|
||||
// 查询账套对应的薪资项目id
|
||||
Map<Long, Long> sobItemMap = new HashMap<>();
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.execute("select xzzt,xzxm from uf_cbsztxzxmys");
|
||||
while (rs.next()) {
|
||||
String xzzt = rs.getString("xzzt");
|
||||
Long itemId = NumberUtils.isCreatable(rs.getString("xzxm")) ? Long.valueOf(rs.getString("xzxm")) : 0L;
|
||||
if (StringUtils.isBlank(xzzt) || !NumberUtils.isCreatable(xzzt)) {
|
||||
sobItemMap.put(0L,itemId);
|
||||
} else {
|
||||
sobItemMap.put(Long.valueOf(xzzt), itemId);
|
||||
}
|
||||
}
|
||||
|
||||
for (SalaryAcctRecordPO salaryAcctRecordPO : salaryAcctRecordList) {
|
||||
if (salaryAcctRecordPO.getStatus().equals(SalaryAcctRecordStatusEnum.PUSHED.getValue())) {
|
||||
continue;
|
||||
}
|
||||
// 生成cbs推送数据
|
||||
getSalaryCbsService(user).generatePushList(salaryAcctRecordPO, sobItemMap);
|
||||
|
||||
// 获取是否已经生成工资单
|
||||
List<SalarySendPO> salarySendPOS = getSalarySendService(user).listSome(SalarySendPO.builder().salaryAccountingId(salaryAcctRecordPO.getId()).build());
|
||||
if (CollectionUtils.isEmpty(salarySendPOS)) {
|
||||
// 生成工资单
|
||||
getSalarySendService(user).generateSalaryBill(salaryAcctRecordPO.getId());
|
||||
}
|
||||
|
||||
// 更新薪资核算记录的状态
|
||||
salaryAcctRecordPO.setStatus(SalaryAcctRecordStatusEnum.PUSHED.getValue());
|
||||
salaryAcctRecordPO.setUpdateTime(new Date());
|
||||
getSalaryAcctRecordMapper().updateIgnoreNull(salaryAcctRecordPO);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@ import com.engine.salary.biz.SalarySendInfoBiz;
|
|||
import com.engine.salary.cache.SalaryCacheKey;
|
||||
import com.engine.salary.config.SalaryElogConfig;
|
||||
import com.engine.salary.constant.HrmSalaryPayrollConf;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.progress.ProgressDTO;
|
||||
import com.engine.salary.entity.salaryBill.bo.SalaryBillBO;
|
||||
import com.engine.salary.entity.salaryBill.bo.SalaryTemplateBO;
|
||||
|
|
@ -119,6 +121,15 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
|
|||
return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsService getSalaryCbsService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
private SalaryCbsInfoService getSalaryCbsInfoService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsInfoServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
private SalarySendInfoBiz salarySendInfoMapper = new SalarySendInfoBiz();
|
||||
private SalarySendBiz mapper = new SalarySendBiz();
|
||||
|
|
@ -177,6 +188,27 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
|
|||
throw new SalaryRunTimeException("工资发放范围内没有匹配员工");
|
||||
}
|
||||
}
|
||||
|
||||
// 校验cbs是否已经推送
|
||||
List<Long> salaryCbsIdList = getSalaryCbsService(user).listBySalaryAcctRecordId(salarySend.getSalaryAccountingId()).stream().map(SalaryCbsPO::getId).collect(Collectors.toList());
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoList = getSalaryCbsInfoService(user).listByCbsIds(salaryCbsIdList);
|
||||
if (CollectionUtils.isEmpty(salaryCbsInfoList)) {
|
||||
throw new SalaryRunTimeException("cbs数据暂不存在");
|
||||
}
|
||||
List<Long> pushedEmpIds = salaryCbsInfoList.stream()
|
||||
.filter(salaryCbsInfoPO -> salaryCbsInfoPO.getPushStatus() != null && salaryCbsInfoPO.getPushStatus().equals(NumberUtils.INTEGER_ONE))
|
||||
.map(SalaryCbsInfoPO::getEmployeeId)
|
||||
.collect(Collectors.toList());
|
||||
List<List<Long>> partition = Lists.partition(ids, 500);
|
||||
List<SalarySendInfoListDTO> sendInfoList = new ArrayList<>();
|
||||
for (List<Long> idsPart : partition) {
|
||||
sendInfoList.addAll(getSalarySendInfoMapper().list(SalarySendInfoQueryParam.builder().ids(idsPart).build()));
|
||||
}
|
||||
Optional<SalarySendInfoListDTO> optional = sendInfoList.stream().filter(info -> !pushedEmpIds.contains(info.getEmployeeId())).findFirst();
|
||||
if (optional.isPresent()) {
|
||||
throw new SalaryRunTimeException("cbs数据暂未推送,请先推送cbs数据");
|
||||
}
|
||||
|
||||
// 初始化进度
|
||||
ProgressDTO initProgress = ProgressDTO.builder()
|
||||
.title(SalaryI18nUtil.getI18nLabel(136097, "发送中"))
|
||||
|
|
|
|||
|
|
@ -0,0 +1,518 @@
|
|||
package com.engine.salary.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONObject;
|
||||
import com.alibaba.fastjson.TypeReference;
|
||||
import com.api.formmode.mybatis.util.SqlProxyHandle;
|
||||
import com.engine.common.service.HrmCommonService;
|
||||
import com.engine.common.service.impl.HrmCommonServiceImpl;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.encrypt.EncryptUtil;
|
||||
import com.engine.salary.entity.cbs.dto.*;
|
||||
import com.engine.salary.entity.cbs.param.CBSPushParam;
|
||||
import com.engine.salary.entity.cbs.param.SalaryCBSInfoQueryParam;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPushPO;
|
||||
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||||
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
|
||||
import com.engine.salary.enums.salaryaccounting.CbsPushStatusEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.cbs.SalaryCbsInfoMapper;
|
||||
import com.engine.salary.mapper.cbs.SalaryCbsMapper;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.sys.entity.vo.OrderRuleVO;
|
||||
import com.engine.salary.sys.service.SalarySysConfService;
|
||||
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import com.engine.salary.util.SalaryTokenUtil;
|
||||
import com.engine.salary.util.db.IdGenerator;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import com.mzlion.core.lang.CollectionUtils;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.conn.RecordSet;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.User;
|
||||
import weaver.wechat.util.Utils;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsInfoService
|
||||
* @date 2025/05/07 15:07
|
||||
* @description
|
||||
*/
|
||||
@Slf4j
|
||||
public class SalaryCbsInfoServiceImpl extends Service implements com.engine.salary.service.SalaryCbsInfoService {
|
||||
|
||||
private EncryptUtil encryptUtil = new EncryptUtil();
|
||||
|
||||
private SalaryCbsInfoMapper getSalaryCbsInfoMapper() {
|
||||
return SqlProxyHandle.getProxy(SalaryCbsInfoMapper.class);
|
||||
}
|
||||
|
||||
private SalaryCbsMapper getSalaryCbsMapper() {
|
||||
return SqlProxyHandle.getProxy(SalaryCbsMapper.class);
|
||||
}
|
||||
|
||||
private SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsService getSalaryCbsService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private ExtEmpService getExtEmpService(User user) {
|
||||
return ServiceUtil.getService(ExtEmpServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySobService getSalarySobService(User user) {
|
||||
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private TaxAgentService getTaxAgentService(User user) {
|
||||
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsPushService getSalaryCbsPushService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsPushServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryEmployeeService getSalaryEmployeeService(User user) {
|
||||
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 查询所有记录
|
||||
*
|
||||
* @return 返回集合,没有返回空List
|
||||
*/
|
||||
@Override
|
||||
public List<SalaryCbsInfoPO> listAll() {
|
||||
List<SalaryCbsInfoPO> resultList = getSalaryCbsInfoMapper().listAll();
|
||||
// 解密
|
||||
encryptUtil.decryptList(resultList, SalaryCbsInfoPO.class);
|
||||
return resultList;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 根据主键查询
|
||||
*
|
||||
* @param id 主键
|
||||
* @return 返回记录,没有返回null
|
||||
*/
|
||||
@Override
|
||||
public SalaryCbsInfoPO getById(Long id) {
|
||||
SalaryCbsInfoPO salaryCbsInfoPO = getSalaryCbsInfoMapper().getById(id);
|
||||
// 解密
|
||||
encryptUtil.decrypt(salaryCbsInfoPO, SalaryCbsInfoPO.class);
|
||||
return salaryCbsInfoPO;
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 新增,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 新增的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
@Override
|
||||
public int insertIgnoreNull(SalaryCbsInfoPO salaryCbsInfo) {
|
||||
// 加密
|
||||
encryptUtil.encrypt(salaryCbsInfo, SalaryCbsInfoPO.class);
|
||||
return getSalaryCbsInfoMapper().insertIgnoreNull(salaryCbsInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改,修改所有字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
@Override
|
||||
public int update(SalaryCbsInfoPO salaryCbsInfo) {
|
||||
// 加密
|
||||
encryptUtil.encrypt(salaryCbsInfo, SalaryCbsInfoPO.class);
|
||||
return getSalaryCbsInfoMapper().update(salaryCbsInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 修改,忽略null字段
|
||||
*
|
||||
* @param salaryCbsInfo 修改的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
@Override
|
||||
public int updateIgnoreNull(SalaryCbsInfoPO salaryCbsInfo) {
|
||||
// 加密
|
||||
encryptUtil.encrypt(salaryCbsInfo, SalaryCbsInfoPO.class);
|
||||
return getSalaryCbsInfoMapper().updateIgnoreNull(salaryCbsInfo);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除记录
|
||||
*
|
||||
* @param salaryCbsInfo 待删除的记录
|
||||
* @return 返回影响行数
|
||||
*/
|
||||
@Override
|
||||
public int delete(SalaryCbsInfoPO salaryCbsInfo) {
|
||||
return getSalaryCbsInfoMapper().delete(salaryCbsInfo);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsInfoPO> listByCbsIds(List<Long> cbsIdList) {
|
||||
if (CollectionUtils.isEmpty(cbsIdList)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<List<Long>> partition = Lists.partition(cbsIdList, 1000);
|
||||
List<SalaryCbsInfoPO> resultList = new ArrayList<>();
|
||||
partition.forEach(part -> {
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoList = getSalaryCbsInfoMapper().listByCbsIds(part);
|
||||
encryptUtil.decryptList(salaryCbsInfoList, SalaryCbsInfoPO.class);
|
||||
resultList.addAll(salaryCbsInfoList);
|
||||
});
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageInfo<SalaryCBSInfoListDTO> salaryCbsInfoListPage(SalaryCBSInfoQueryParam queryParam) {
|
||||
//排序配置
|
||||
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
|
||||
queryParam.setOrderRule(orderRule);
|
||||
|
||||
List<SalaryCBSInfoListDTO> page = getSalaryCbsInfoMapper().list(queryParam);
|
||||
if (StringUtils.isNotBlank(queryParam.getGzkkhh())){
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String gzkkhhField = baseBean.getPropValue("ltSalary", "gzkkhh_field");
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.execute("select id,"+gzkkhhField+ " from cus_fielddata " +
|
||||
"where SCOPE='HrmCustomFieldByInfoType' and scopeid=3 and "+gzkkhhField+" = '" +queryParam.getGzkkhh()+ "'");
|
||||
List<Long> empIdsByGzkkhh = new ArrayList<>();
|
||||
while (rs.next()) {
|
||||
empIdsByGzkkhh.add(Long.valueOf(rs.getInt("id")));
|
||||
}
|
||||
page = page.stream().filter(dto -> empIdsByGzkkhh.contains(dto.getEmployeeId())).collect(Collectors.toList());
|
||||
}
|
||||
SalaryI18nUtil.i18nList(page);
|
||||
PageInfo<SalaryCBSInfoListDTO> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
|
||||
page, SalaryCBSInfoListDTO.class);
|
||||
SalaryCbsPO salaryCbsPO = getSalaryCbsService(user).getById(queryParam.getSalaryCbsId());
|
||||
if (salaryCbsPO == null) {
|
||||
throw new SalaryRunTimeException("cbs推送不存在或已被删除");
|
||||
}
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(salaryCbsPO.getSalaryAccountingId());
|
||||
if (salaryAcctRecordPO == null) {
|
||||
throw new SalaryRunTimeException("核算记录不存在或已被删除");
|
||||
}
|
||||
Long salarySobId = salaryAcctRecordPO.getSalarySobId();
|
||||
SalarySobPO salarySobPO = getSalarySobService(user).getById(salarySobId);
|
||||
TaxAgentPO taxAgentPO = getTaxAgentService(user).getById(salarySobPO.getTaxAgentId());
|
||||
|
||||
List<SalaryCBSInfoListDTO> list = pageInfo.getList();
|
||||
|
||||
List<DataCollectionEmployee> employeeList = getExtEmpService(user).listEmployee();
|
||||
Map<Long, DataCollectionEmployee> employeeMap = SalaryEntityUtil.convert2Map(employeeList, DataCollectionEmployee::getEmployeeId);
|
||||
|
||||
// 获取工资卡开户名,工资卡账号,工资卡开户行,工资卡开户行支行编码 数据
|
||||
List<Long> empIds = list.stream().map(SalaryCBSInfoListDTO::getEmployeeId).collect(Collectors.toList());
|
||||
List<SalaryCardInfo> salaryCardInfo = getSalaryCardInfo(empIds);
|
||||
Map<Long, SalaryCardInfo> salaryCardInfoMap = SalaryEntityUtil.convert2Map(salaryCardInfo, SalaryCardInfo::getEmployeeId);
|
||||
|
||||
list.forEach(dto -> {
|
||||
if (dto.getEmployeeType() != null && Objects.equals(dto.getEmployeeType(), 1)) {
|
||||
DataCollectionEmployee employee = employeeMap.get(dto.getEmployeeId());
|
||||
if (employee != null) {
|
||||
dto.setUsername(employee.getUsername());
|
||||
dto.setDepartment(employee.getDepartmentName());
|
||||
dto.setMobile(employee.getMobile());
|
||||
dto.setJobNum(employee.getWorkcode());
|
||||
}
|
||||
}
|
||||
// 个税扣缴义务人
|
||||
dto.setTaxAgentId(taxAgentPO.getId());
|
||||
dto.setTaxAgent(taxAgentPO.getName());
|
||||
// 工资卡开户名,工资卡账号,工资卡开户行,工资卡开户行支行编码
|
||||
SalaryCardInfo cardInfo = salaryCardInfoMap.get(dto.getEmployeeId());
|
||||
if (cardInfo != null) {
|
||||
dto.setGzkkhm(cardInfo.getGzkkhm());
|
||||
dto.setGzkzh(cardInfo.getGzkzh());
|
||||
dto.setGzkkhh(cardInfo.getGzkkhh());
|
||||
dto.setGzkkhzhbm(cardInfo.getGzkkhzhbm());
|
||||
}
|
||||
dto.setPushStatusVal(CbsPushStatusEnum.parseByValue(dto.getPushStatus()).getDefaultLabel());
|
||||
});
|
||||
pageInfo.setList(list);
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取联特工资卡信息
|
||||
* @param empIds
|
||||
* @return
|
||||
*/
|
||||
private List<SalaryCardInfo> getSalaryCardInfo(List<Long> empIds) {
|
||||
List<SalaryCardInfo> resultList = new ArrayList<>();
|
||||
if (CollectionUtils.isEmpty(empIds)) {
|
||||
return resultList;
|
||||
}
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String gzkkhmField = baseBean.getPropValue("ltSalary", "gzkkhm_field");
|
||||
String gzkzhField = baseBean.getPropValue("ltSalary", "gzkzh_field");
|
||||
String gzkkhhField = baseBean.getPropValue("ltSalary", "gzkkhh_field");
|
||||
String gzkkhhzhbmField = baseBean.getPropValue("ltSalary", "gzkkhhzhbm_field");
|
||||
String sfszgyhField = baseBean.getPropValue("ltSalary", "sfszgyh_field");
|
||||
RecordSet rs = new RecordSet();
|
||||
List<List<Long>> partition = Lists.partition(empIds, 500);
|
||||
partition.forEach(part -> {
|
||||
String empIdStr = StringUtils.join(part, ",");
|
||||
rs.execute("select id,"+gzkkhmField+","+gzkzhField+","+gzkkhhField+","+gzkkhhzhbmField+","+ sfszgyhField+ " from cus_fielddata " +
|
||||
"where SCOPE='HrmCustomFieldByInfoType' and scopeid=3 and id in (" +empIdStr+ ")");
|
||||
while (rs.next()) {
|
||||
SalaryCardInfo build = SalaryCardInfo.builder()
|
||||
.employeeId(Long.valueOf(rs.getInt("id")))
|
||||
.gzkkhm(rs.getString(gzkkhmField))
|
||||
.gzkzh(rs.getString(gzkzhField))
|
||||
.gzkkhh(rs.getString(gzkkhhField))
|
||||
.gzkkhzhbm(rs.getString(gzkkhhzhbmField))
|
||||
.build();
|
||||
Integer sfszgyh = NumberUtils.isCreatable(rs.getString(sfszgyhField)) ? Integer.valueOf(rs.getString(sfszgyhField)) : new Integer("0");
|
||||
build.setSfszgyh(sfszgyh);
|
||||
resultList.add(build);
|
||||
}
|
||||
});
|
||||
return resultList;
|
||||
}
|
||||
|
||||
/**
|
||||
* 单条推送
|
||||
* @param cbsPushParam
|
||||
* @return
|
||||
*/
|
||||
@Override
|
||||
public String pushDataToCBS(CBSPushParam cbsPushParam) {
|
||||
HrmCommonService hcs = new HrmCommonServiceImpl();
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String roleId = baseBean.getPropValue("ltSalary", "cbs_role_ie");
|
||||
List<Long> userIdList = hcs.getRoleMembers(new Integer(roleId),"0").stream().map(userId -> new Long(userId.toString())).collect(Collectors.toList());
|
||||
if (!userIdList.contains(Long.valueOf(user.getUID()))) {
|
||||
throw new SalaryRunTimeException("无权限");
|
||||
}
|
||||
|
||||
if (CollectionUtils.isEmpty(cbsPushParam.getIds()) && CollectionUtils.isEmpty(cbsPushParam.getSalaryCbsIds())) {
|
||||
throw new SalaryRunTimeException("请选择需要推送至CBS的数据");
|
||||
}
|
||||
List<SalaryCbsInfoPO> infoList = listByCbsIdsAndIds(cbsPushParam.getSalaryCbsIds(), cbsPushParam.getIds());
|
||||
// if (StringUtils.isNotBlank(cbsPushParam.getGzkkhh())){
|
||||
// String gzkkhhField = baseBean.getPropValue("ltSalary", "gzkkhh_field");
|
||||
// RecordSet rs = new RecordSet();
|
||||
// rs.execute("select id,"+gzkkhhField+ " from cus_fielddata " +
|
||||
// "where SCOPE='HrmCustomFieldByInfoType' and scopeid=3 and "+gzkkhhField+" = '" +cbsPushParam.getGzkkhh()+ "'");
|
||||
// List<Long> empIdsByGzkkhh = new ArrayList<>();
|
||||
// while (rs.next()) {
|
||||
// empIdsByGzkkhh.add(Long.valueOf(rs.getInt("id")));
|
||||
// }
|
||||
// infoList = infoList.stream().filter(po -> empIdsByGzkkhh.contains(po.getEmployeeId())).collect(Collectors.toList());
|
||||
// }
|
||||
// 过滤未推送的
|
||||
infoList = infoList.stream().filter(info -> info.getPushStatus().equals(CbsPushStatusEnum.NOT_PUSHED.getValue())).collect(Collectors.toList());
|
||||
if (CollectionUtils.isEmpty(infoList)) {
|
||||
throw new SalaryRunTimeException("无推送数据");
|
||||
}
|
||||
|
||||
// 获取这些员工的银行卡信息
|
||||
List<Long> empIds = infoList.stream().map(SalaryCbsInfoPO::getEmployeeId).collect(Collectors.toList());
|
||||
List<SalaryCardInfo> salaryCardInfo = getSalaryCardInfo(empIds);
|
||||
Map<Long, SalaryCardInfo> salaryCardInfoMap = SalaryEntityUtil.convert2Map(salaryCardInfo, SalaryCardInfo::getEmployeeId);
|
||||
|
||||
// 获取建模配置的cbs传参信息
|
||||
Map<String, String> cbsConfigMap = getAllCbsParamConfigMap();
|
||||
|
||||
// 封装明细信息
|
||||
List<PaymentApplyAgentDTO> paymentApplyAgentDTO = new ArrayList<>();
|
||||
BigDecimal sumVal = new BigDecimal("0");
|
||||
int i =1;
|
||||
for (SalaryCbsInfoPO infoPO: infoList) {
|
||||
BigDecimal value = NumberUtils.isCreatable(infoPO.getPushValue()) ? new BigDecimal(infoPO.getPushValue()) : new BigDecimal("0");
|
||||
sumVal = sumVal.add(value);
|
||||
SalaryCardInfo carInfo = salaryCardInfoMap.getOrDefault(infoPO.getEmployeeId(), SalaryCardInfo.builder().build());
|
||||
paymentApplyAgentDTO.add(PaymentApplyAgentDTO.builder()
|
||||
.dtlAmount(infoPO.getPushValue())
|
||||
.dtlRevAccount(carInfo.getGzkzh())
|
||||
.dtlRevName(carInfo.getGzkkhm())
|
||||
.dtlRevBankName(carInfo.getGzkkhh())
|
||||
.dtlCnapsCode(carInfo.getGzkkhzhbm())
|
||||
.dtlBankFlag(carInfo.getSfszgyh() != null && carInfo.getSfszgyh().equals(NumberUtils.INTEGER_ONE) ? "Y" : "N")
|
||||
.dtlPurpose(cbsConfigMap.getOrDefault("dtlPurpose", ""))
|
||||
.dtlRemark(cbsConfigMap.getOrDefault("dtlRemark", ""))
|
||||
.dtlSeqNum(String.valueOf(i++))
|
||||
.build());
|
||||
}
|
||||
|
||||
long referenceNum = IdGenerator.generate();
|
||||
// 封装概要信息
|
||||
PaymentApplySubmitReqDTO paymentApplySubmitReqDTO = PaymentApplySubmitReqDTO.builder()
|
||||
.referenceNum(String.valueOf(referenceNum))
|
||||
.busType(cbsConfigMap.getOrDefault("busType", ""))
|
||||
.amount(sumVal.toString())
|
||||
.currency(cbsConfigMap.getOrDefault("currency", ""))
|
||||
.payAccount(cbsConfigMap.getOrDefault("payAccount", ""))
|
||||
.purpose(cbsConfigMap.getOrDefault("purpose", ""))
|
||||
.bankExtend5(cbsConfigMap.getOrDefault("bankExtend5", ""))
|
||||
.summary(cbsConfigMap.getOrDefault("summary", ""))
|
||||
.expectTime(cbsConfigMap.getOrDefault("expectTime", ""))
|
||||
.personalFlag(cbsConfigMap.getOrDefault("personalFlag", ""))
|
||||
.urgentTag(cbsConfigMap.getOrDefault("urgentTag", ""))
|
||||
.realTimeTag(cbsConfigMap.getOrDefault("realTimeTag", ""))
|
||||
.cityFlag(cbsConfigMap.getOrDefault("cityFlag", ""))
|
||||
.bankExtend1(cbsConfigMap.getOrDefault("bankExtend1", ""))
|
||||
.bankExtend2(cbsConfigMap.getOrDefault("bankExtend2", ""))
|
||||
.bankExtend3(cbsConfigMap.getOrDefault("bankExtend3", ""))
|
||||
.bankExtend4(cbsConfigMap.getOrDefault("bankExtend4", ""))
|
||||
.bankExtend6(cbsConfigMap.getOrDefault("bankExtend6", ""))
|
||||
.bankExtend7(cbsConfigMap.getOrDefault("bankExtend7", ""))
|
||||
.bankExtend8(cbsConfigMap.getOrDefault("bankExtend8", ""))
|
||||
.erpExtend1(cbsConfigMap.getOrDefault("erpExtend1", ""))
|
||||
.erpExtend2(cbsConfigMap.getOrDefault("erpExtend2", ""))
|
||||
.erpExtend3(cbsConfigMap.getOrDefault("erpExtend3", ""))
|
||||
.planNumber(cbsConfigMap.getOrDefault("planNumber", ""))
|
||||
.planItemCode(cbsConfigMap.getOrDefault("planItemCode", ""))
|
||||
.payType(cbsConfigMap.getOrDefault("payType", ""))
|
||||
.separateSerial(cbsConfigMap.getOrDefault("separateSerial", ""))
|
||||
.detailId(cbsConfigMap.getOrDefault("detailId", ""))
|
||||
.planCycle(cbsConfigMap.getOrDefault("planCycle", ""))
|
||||
.planCategory(cbsConfigMap.getOrDefault("planCategory", ""))
|
||||
.planUnitCode(cbsConfigMap.getOrDefault("planUnitCode", ""))
|
||||
.autoMatchPlanNumber(cbsConfigMap.getOrDefault("autoMatchPlanNumber", ""))
|
||||
.build();
|
||||
PaymentApplyAgentRequest requestParam = PaymentApplyAgentRequest.builder().paymentApplyAgentDTO(paymentApplyAgentDTO).paymentApplySubmitReqDTO(paymentApplySubmitReqDTO).build();
|
||||
String requestParamStr = JSON.toJSONString(requestParam);
|
||||
|
||||
if (cbsPushParam.isConfirm()) {
|
||||
String pushResult ="";
|
||||
try {
|
||||
String ip = baseBean.getPropValue("ltSalary", "CBS_IP");
|
||||
pushResult = SalaryTokenUtil.post4lt(ip + "/cbs/payment-apply-agent", requestParamStr, null);
|
||||
// String pushResult = "{\"success\":true,\"msg\":\"成功\",\"code\":200,\"data\":{\"successed\":true,\"busNum\":\"PA00034825050800003\",\"referenceNum\":\"1746686675613\",\"freezeFlowNum\":null,\"errorMsg\":null,\"errorCode\":null,\"recordNum\":1}}";
|
||||
List<Long> cbsIdList = infoList.stream().map(SalaryCbsInfoPO::getSalaryCbsId).distinct().collect(Collectors.toList());
|
||||
getSalaryCbsPushService(user).insertIgnoreNull(SalaryCbsPushPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.salaryCbsId(StringUtils.join(cbsIdList, ","))
|
||||
.totalEmp(String.valueOf(infoList.size()))
|
||||
.totalValue(sumVal.toString())
|
||||
.referenceNum(String.valueOf(referenceNum))
|
||||
.creator(Long.valueOf(user.getUID()))
|
||||
.returnValue(pushResult)
|
||||
.createTime(new Date())
|
||||
.deleteType(NumberUtils.INTEGER_ZERO)
|
||||
.build());
|
||||
Map<String, Object> pushResultMap = JSONObject.parseObject(pushResult, new TypeReference<Map<String, Object>>() {});
|
||||
Map<String, Object> dataMap = (Map<String, Object>)pushResultMap.get("data");
|
||||
Boolean successed = (Boolean) dataMap.get("successed");
|
||||
if (successed != null && successed.equals(true)) {
|
||||
String busNum = Utils.null2String(dataMap.get("busNum"));
|
||||
// 推送成功,更新记录
|
||||
updatePushStatus(infoList, busNum, referenceNum, CbsPushStatusEnum.PUSHED.getValue());
|
||||
} else {
|
||||
String errorMsg = Utils.null2String(dataMap.get("errorMsg"));
|
||||
log.error("cbs推送出错1" + pushResult);
|
||||
throw new SalaryRunTimeException("cbs推送出错:" + errorMsg);
|
||||
}
|
||||
} catch (SalaryRunTimeException e) {
|
||||
log.error("cbs推送出错2" + pushResult);
|
||||
throw new RuntimeException("cbs推送出错:" + e);
|
||||
}
|
||||
} else {
|
||||
// 弹出提示框
|
||||
return "共计"+infoList.size()+"人,合计"+sumVal.toString()+"元";
|
||||
}
|
||||
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 推送成功,更新数据库状态
|
||||
* @param infoList
|
||||
* @param busNum
|
||||
* @param referenceNum
|
||||
*/
|
||||
private void updatePushStatus(List<SalaryCbsInfoPO> infoList, String busNum, long referenceNum, Integer pushStatus) {
|
||||
if (CollectionUtils.isEmpty(infoList)) {
|
||||
return;
|
||||
}
|
||||
for (SalaryCbsInfoPO infoPO : infoList) {
|
||||
SalaryCbsInfoPO po = SalaryCbsInfoPO.builder().id(infoPO.getId()).referenceNum(String.valueOf(referenceNum)).busNum(busNum).pushStatus(pushStatus).build();
|
||||
updateIgnoreNull(po);
|
||||
}
|
||||
if (CollectionUtils.isNotEmpty(infoList)) {
|
||||
List<Long> salaryCbsIds = infoList.stream().map(SalaryCbsInfoPO::getSalaryCbsId).distinct().collect(Collectors.toList());
|
||||
for (Long salaryCbsId : salaryCbsIds) {
|
||||
getSalaryCbsMapper().updateIgnoreNull(SalaryCbsPO.builder().id(salaryCbsId).lastPushTime(new Date()).updateTime(new Date()).build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 获取建模配置的cbs传参信息
|
||||
* @return
|
||||
*/
|
||||
private Map<String, String> getAllCbsParamConfigMap() {
|
||||
RecordSet rs = new RecordSet();
|
||||
rs.execute(" select mc,cckey,ccvalue from uf_cbscspz");
|
||||
Map<String, String> resultMap = new HashMap<>();
|
||||
while (rs.next()) {
|
||||
if (StringUtils.isNotBlank(rs.getString("ccvalue"))) {
|
||||
resultMap.put(rs.getString("cckey"), rs.getString("ccvalue"));
|
||||
}
|
||||
}
|
||||
return resultMap;
|
||||
}
|
||||
|
||||
private List<SalaryCbsInfoPO> listByCbsIdsAndIds(List<Long> salaryCbsIds, List<Long> ids) {
|
||||
List<SalaryCbsInfoPO> resultList = new ArrayList<>();
|
||||
if (CollectionUtils.isEmpty(salaryCbsIds) && CollectionUtils.isEmpty(ids)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
if (CollectionUtils.isEmpty(ids)) {
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoPOS = getSalaryCbsInfoMapper().listByCbsIdAndIds(salaryCbsIds, ids);
|
||||
encryptUtil.decryptList(salaryCbsInfoPOS, SalaryCbsInfoPO.class);
|
||||
resultList.addAll(salaryCbsInfoPOS);
|
||||
} else {
|
||||
List<List<Long>> partition = Lists.partition(ids, 1000);
|
||||
partition.forEach(part -> {
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoPOS = getSalaryCbsInfoMapper().listByCbsIdAndIds(salaryCbsIds, part);
|
||||
encryptUtil.decryptList(salaryCbsInfoPOS, SalaryCbsInfoPO.class);
|
||||
resultList.addAll(salaryCbsInfoPOS);
|
||||
});
|
||||
}
|
||||
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void updatePushStatusByCbsIdsAndEmpIds(List<Long> cbsIdList, List<Long> needChangeEmpIds, Integer value) {
|
||||
if (CollectionUtils.isEmpty(cbsIdList) || CollectionUtils.isEmpty(needChangeEmpIds)) {
|
||||
return;
|
||||
}
|
||||
List<List<Long>> partition = Lists.partition(needChangeEmpIds, 500);
|
||||
partition.forEach(part -> getSalaryCbsInfoMapper().updatePushStatusByCbsIdsAndEmpIds(cbsIdList, part, value));
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,61 @@
|
|||
package com.engine.salary.service.impl;
|
||||
|
||||
import com.api.formmode.mybatis.util.SqlProxyHandle;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.encrypt.EncryptUtil;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPushPO;
|
||||
import com.engine.salary.mapper.cbs.SalaryCbsPushMapper;
|
||||
import com.engine.salary.service.SalaryCbsPushService;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsPushServiceImpl
|
||||
* @date 2025/05/09 11:38
|
||||
* @description
|
||||
*/
|
||||
public class SalaryCbsPushServiceImpl extends Service implements SalaryCbsPushService {
|
||||
|
||||
private EncryptUtil encryptUtil = new EncryptUtil();
|
||||
|
||||
private SalaryCbsPushMapper getSalaryCbsPushMapper() {
|
||||
return SqlProxyHandle.getProxy(SalaryCbsPushMapper.class);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsPushPO> listAll() {
|
||||
return getSalaryCbsPushMapper().listAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryCbsPushPO getById(Long id) {
|
||||
if (id == null) {
|
||||
return null;
|
||||
}
|
||||
return getSalaryCbsPushMapper().getById(id);
|
||||
}
|
||||
@Override
|
||||
public int insertIgnoreNull(SalaryCbsPushPO salaryCbsPush) {
|
||||
encryptUtil.encrypt(salaryCbsPush, SalaryCbsPushPO.class);
|
||||
return getSalaryCbsPushMapper().insertIgnoreNull(salaryCbsPush);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(SalaryCbsPushPO salaryCbsPush) {
|
||||
return getSalaryCbsPushMapper().update(salaryCbsPush);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateIgnoreNull(SalaryCbsPushPO salaryCbsPush) {
|
||||
return getSalaryCbsPushMapper().update(salaryCbsPush);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(SalaryCbsPushPO salaryCbsPush) {
|
||||
if (salaryCbsPush == null) {
|
||||
return 0;
|
||||
}
|
||||
return getSalaryCbsPushMapper().delete(salaryCbsPush);
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,221 @@
|
|||
package com.engine.salary.service.impl;
|
||||
|
||||
import com.api.formmode.mybatis.util.SqlProxyHandle;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSBaseInfoDTO;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSPushListDTO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsPO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendQueryParam;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
|
||||
import com.engine.salary.enums.salaryaccounting.CbsPushStatusEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.cbs.SalaryCbsMapper;
|
||||
import com.engine.salary.service.SalaryAcctEmployeeService;
|
||||
import com.engine.salary.service.SalaryAcctRecordService;
|
||||
import com.engine.salary.service.SalaryAcctResultService;
|
||||
import com.engine.salary.service.SalaryCbsService;
|
||||
import com.engine.salary.service.auth.AuthService;
|
||||
import com.engine.salary.service.auth.AuthServiceImpl;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import com.engine.salary.util.db.IdGenerator;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.hrm.User;
|
||||
import weaver.wechat.util.Utils;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryCbsServiceImpl
|
||||
* @date 2025/05/07 15:19
|
||||
* @description
|
||||
*/
|
||||
public class SalaryCbsServiceImpl extends Service implements SalaryCbsService {
|
||||
|
||||
private SalaryCbsMapper getSalaryCbsMapper() {
|
||||
return SqlProxyHandle.getProxy(SalaryCbsMapper.class);
|
||||
}
|
||||
|
||||
private SalaryAcctResultService getSalaryAcctResultService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctResultServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctEmployeeService getSalaryAcctEmployeeService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctEmployeeServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsInfoServiceImpl getSalaryCbsInfoService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsInfoServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
|
||||
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
public AuthService getAuthService(User user) {
|
||||
return ServiceUtil.getService(AuthServiceImpl.class, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsPO> listAll() {
|
||||
return getSalaryCbsMapper().listAll();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsPO> listSome(SalaryCbsPO salaryCbs) {
|
||||
return getSalaryCbsMapper().listSome(salaryCbs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryCbsPO getById(Long id) {
|
||||
if (id == null) {
|
||||
return null;
|
||||
}
|
||||
return getSalaryCbsMapper().getById(id);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public int insertIgnoreNull(SalaryCbsPO salaryCbs) {
|
||||
return getSalaryCbsMapper().insertIgnoreNull(salaryCbs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int update(SalaryCbsPO salaryCbs) {
|
||||
return getSalaryCbsMapper().update(salaryCbs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int updateIgnoreNull(SalaryCbsPO salaryCbs) {
|
||||
return getSalaryCbsMapper().updateIgnoreNull(salaryCbs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public int delete(SalaryCbsPO salaryCbs) {
|
||||
return getSalaryCbsMapper().delete(salaryCbs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsPO> listBySalaryAcctRecordId(Long salaryAcctRecordId) {
|
||||
if (salaryAcctRecordId == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return listSome(SalaryCbsPO.builder().salaryAccountingId(salaryAcctRecordId).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCbsPO> listBySalaryAcctRecordIds(List<Long> salaryAcctRecordIds) {
|
||||
if (CollectionUtils.isEmpty(salaryAcctRecordIds)) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
List<SalaryCbsPO> resultList = new ArrayList<>();
|
||||
List<List<Long>> partition = Lists.partition(salaryAcctRecordIds, 500);
|
||||
partition.forEach(part -> {
|
||||
resultList.addAll(getSalaryCbsMapper().listBySalaryAcctRecordIds(part));
|
||||
});
|
||||
return resultList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void generatePushList(SalaryAcctRecordPO salaryAcctRecordPO, Map<Long, Long> sobItemMap) {
|
||||
if (salaryAcctRecordPO == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
// 查询是否已有生成的cbs推送列表数据
|
||||
List<SalaryCbsPO> salaryCbsPOS = listBySalaryAcctRecordId(salaryAcctRecordPO.getId());
|
||||
if (CollectionUtils.isNotEmpty(salaryCbsPOS)) {
|
||||
throw new SalaryRunTimeException("已生成cbs数据,请联系管理员删除");
|
||||
}
|
||||
// 查询账套对应的薪资项目id
|
||||
Long salarySobId = salaryAcctRecordPO.getSalarySobId();
|
||||
Long salaryItemId = null;
|
||||
if (sobItemMap.containsKey(salarySobId)) {
|
||||
salaryItemId = sobItemMap.get(salarySobId);
|
||||
} else {
|
||||
salaryItemId = sobItemMap.get(0L);
|
||||
}
|
||||
|
||||
if (salaryItemId == null) {
|
||||
throw new SalaryRunTimeException("请先设置cbs账套薪资项目映射");
|
||||
}
|
||||
// 查询薪资核算人员
|
||||
List<SalaryAcctEmployeePO> salaryAcctEmployeeList = getSalaryAcctEmployeeService(user).listBySalaryAcctRecordId(salaryAcctRecordPO.getId());
|
||||
List<Long> salaryAcctEmpIdList = salaryAcctEmployeeList.stream().map(SalaryAcctEmployeePO::getId).collect(Collectors.toList());
|
||||
// 查询薪资核算结果
|
||||
Map<Long, String> resultMap = new HashMap<>();
|
||||
if (CollectionUtils.isNotEmpty(salaryAcctEmpIdList)) {
|
||||
List<SalaryAcctResultPO> acctResultList = getSalaryAcctResultService(user).listByAcctEmployeeIdsAndSalaryItemIds(salaryAcctEmpIdList, Collections.singletonList(salaryItemId));
|
||||
resultMap = SalaryEntityUtil.convert2Map(acctResultList, SalaryAcctResultPO::getSalaryAcctEmpId, SalaryAcctResultPO::getResultValue);
|
||||
}
|
||||
|
||||
// 封装推送主表数据
|
||||
Date now = new Date();
|
||||
Long creator = Long.valueOf(user.getUID());
|
||||
long mainId = IdGenerator.generate();
|
||||
SalaryCbsPO build = SalaryCbsPO.builder()
|
||||
.id(mainId)
|
||||
.salaryMonth(salaryAcctRecordPO.getSalaryMonth())
|
||||
.salaryAccountingId(salaryAcctRecordPO.getId())
|
||||
.salarySobId(salarySobId)
|
||||
.creator(creator)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(NumberUtils.INTEGER_ZERO)
|
||||
.build();
|
||||
insertIgnoreNull(build);
|
||||
// 封装推送列表数据
|
||||
for (SalaryAcctEmployeePO salaryAcctEmployeePO : salaryAcctEmployeeList) {
|
||||
String value = Utils.null2String(resultMap.get(salaryAcctEmployeePO.getId()));
|
||||
SalaryCbsInfoPO infoPO = SalaryCbsInfoPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.salaryCbsId(mainId)
|
||||
.employeeId(salaryAcctEmployeePO.getEmployeeId())
|
||||
.employeeType(salaryAcctEmployeePO.getEmployeeType())
|
||||
.pushStatus(CbsPushStatusEnum.NOT_PUSHED.getValue())
|
||||
.creator(creator)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(NumberUtils.INTEGER_ZERO)
|
||||
.pushValue(value)
|
||||
.build();
|
||||
getSalaryCbsInfoService(user).insertIgnoreNull(infoPO);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryCBSPushListDTO> list(SalarySendQueryParam queryParam) {
|
||||
List<SalaryCBSPushListDTO> list = getSalaryCbsMapper().list(queryParam);
|
||||
return list;
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryCBSBaseInfoDTO getBaseInfo(Long id) {
|
||||
SalaryCbsPO SalaryCbs = getById(id);
|
||||
if (SalaryCbs == null) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0, "cbs推送信息不存在"));
|
||||
}
|
||||
Long salaryAcctId = SalaryCbs.getSalaryAccountingId();
|
||||
SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctId);
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoList = getSalaryCbsInfoService(user).listByCbsIds(Collections.singletonList(id));
|
||||
int pushNum = salaryCbsInfoList.stream().filter(salaryCbsInfoPO -> salaryCbsInfoPO.getPushStatus().equals(CbsPushStatusEnum.PUSHED.getValue())).collect(Collectors.toList()).size();
|
||||
|
||||
return SalaryCBSBaseInfoDTO.builder()
|
||||
.salaryMonth(salarySobCycleDTO.getSalaryMonth())
|
||||
.salarySobCycle(salarySobCycleDTO)
|
||||
.pushTotal(salaryCbsInfoList.size())
|
||||
.pushNum(pushNum)
|
||||
.build();
|
||||
}
|
||||
}
|
||||
|
|
@ -233,6 +233,66 @@ public class SalaryTokenUtil {
|
|||
return null;
|
||||
}
|
||||
|
||||
public static String post4lt(String path, String param, Map<String, String> data) {
|
||||
try {
|
||||
String str = "";
|
||||
// if (params != null) {
|
||||
// StringBuilder stringBuilder = new StringBuilder("?");
|
||||
// for (Map.Entry<String, String> entry : params.entrySet()) {
|
||||
// stringBuilder.append(entry.getKey()).append("=").append(entry.getValue()).append("&");
|
||||
// }
|
||||
// if (stringBuilder.length() > 1)
|
||||
// path += stringBuilder.substring(0, stringBuilder.length() - 1);
|
||||
// }
|
||||
URL url = new URL(path);
|
||||
//打开和url之间的连接
|
||||
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
|
||||
// PrintWriter out = null;
|
||||
// 请求参数 编码为 utf-8
|
||||
//请求方式
|
||||
conn.setRequestMethod("POST");
|
||||
//设置通用的请求属性
|
||||
conn.setRequestProperty("accept", "*/*");
|
||||
conn.setRequestProperty("connection", "Keep-Alive");
|
||||
conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
|
||||
conn.setRequestProperty("Content-Type", "application/json");
|
||||
if (data != null) {
|
||||
for (Map.Entry<String, String> entry : data.entrySet()) {
|
||||
conn.setRequestProperty(entry.getKey(), entry.getValue());
|
||||
}
|
||||
}
|
||||
//设置是否向httpUrlConnection输出,设置是否从httpUrlConnection读入,此外发送post请求必须设置这两个
|
||||
//最常用的Http请求无非是get和post,get请求可以获取静态页面,也可以把参数放在URL字串后面,传递给servlet,
|
||||
//post与get的 不同之处在于post的参数不是放在URL字串里面,而是放在http请求的正文内。
|
||||
conn.setDoOutput(true);
|
||||
conn.setDoInput(true);
|
||||
OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream(), "utf-8");
|
||||
if (StringUtils.isNotBlank(param)) {
|
||||
out.write(param);
|
||||
}
|
||||
//缓冲数据
|
||||
out.flush();
|
||||
out.close();
|
||||
//获取URLConnection对象对应的输入流
|
||||
InputStream is = conn.getInputStream();
|
||||
//构造一个字符流缓存
|
||||
BufferedReader br = new BufferedReader(new InputStreamReader(is, "utf-8"));
|
||||
String result = "";
|
||||
while ((str = br.readLine()) != null) {
|
||||
result = str;
|
||||
}
|
||||
//关闭流
|
||||
is.close();
|
||||
//断开连接,最好写上,disconnect是在底层tcp socket链接空闲时才切断。如果正在被其他线程使用就不切断。
|
||||
//固定多线程的话,如果不disconnect,链接会增多,直到收发不出信息。写上disconnect后正常一些。
|
||||
conn.disconnect();
|
||||
return result;
|
||||
} catch (Exception e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* 将Map转换成字符串参数,用于POST GET 请求
|
||||
*
|
||||
|
|
|
|||
|
|
@ -133,6 +133,15 @@ public class SalaryAcctController {
|
|||
return new ResponseResult<Long, Long>(user).run(getSalaryAcctRecordWrapper(user)::file, id);
|
||||
}
|
||||
|
||||
// 联特 生成CBS推送记录
|
||||
@POST
|
||||
@Path("/generateCBSPushList")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String generateCBSPushList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody List<Long> ids) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<List<Long>, Long>(user).run(getSalaryAcctRecordWrapper(user)::generateCBSPushList, ids);
|
||||
}
|
||||
|
||||
//重新核算
|
||||
@POST
|
||||
@Path("/reAccounting")
|
||||
|
|
|
|||
|
|
@ -0,0 +1,276 @@
|
|||
package com.engine.salary.web;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSBaseInfoDTO;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO;
|
||||
import com.engine.salary.entity.cbs.param.CBSPushParam;
|
||||
import com.engine.salary.entity.cbs.param.SalaryCBSInfoQueryParam;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendQueryParam;
|
||||
import com.engine.salary.service.HrmSecondaryPwdSetService;
|
||||
import com.engine.salary.service.impl.HrmSecondaryPwdSetServiceImpl;
|
||||
import com.engine.salary.util.ResponseResult;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.wrapper.SalaryBillBaseSetWrapper;
|
||||
import com.engine.salary.wrapper.SalaryCBSWrapper;
|
||||
import com.engine.salary.wrapper.SalarySendWrapper;
|
||||
import com.engine.salary.wrapper.SalaryTemplateWrapper;
|
||||
import io.swagger.v3.oas.annotations.parameters.RequestBody;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import javax.ws.rs.*;
|
||||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Arrays;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
|
||||
@Slf4j
|
||||
public class SalaryCBSController {
|
||||
private final Boolean isLog = "true".equals(new BaseBean().getPropValue("hrmSalary", "log"));
|
||||
|
||||
private SalaryTemplateWrapper getSalaryTemplateWrapper(User user) {
|
||||
return ServiceUtil.getService(SalaryTemplateWrapper.class, user);
|
||||
}
|
||||
|
||||
private SalarySendWrapper getSalarySendWrapper(User user) {
|
||||
return ServiceUtil.getService(SalarySendWrapper.class, user);
|
||||
}
|
||||
|
||||
private SalaryBillBaseSetWrapper getSalaryBillBaseSetWrapper(User user) {
|
||||
return ServiceUtil.getService(SalaryBillBaseSetWrapper.class, user);
|
||||
}
|
||||
|
||||
private HrmSecondaryPwdSetService getService(User user) {
|
||||
return (HrmSecondaryPwdSetService) ServiceUtil.getService(HrmSecondaryPwdSetServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
//------------------------------------------------------------------
|
||||
|
||||
private SalaryCBSWrapper getSalaryCBSWrapper(User user) {
|
||||
return ServiceUtil.getService(SalaryCBSWrapper.class, user);
|
||||
}
|
||||
/**
|
||||
* CBS推送列表
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/push/list")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendQueryParam queryParam) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalarySendQueryParam, Map<String, Object>>(user).run(getSalaryCBSWrapper(user)::list, queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* cbs推送基本信息
|
||||
*
|
||||
* @return
|
||||
*/
|
||||
@GET
|
||||
@Path("/push/getBaseInfo")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String getBaseInfo(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<Long, SalaryCBSBaseInfoDTO>(user).run(getSalaryCBSWrapper(user)::getBaseInfo, id);
|
||||
}
|
||||
|
||||
/**
|
||||
* cbs推送信息明细列表
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/push/infoList")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String pushInfoList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryCBSInfoQueryParam queryParam) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
if (StringUtils.isNotBlank(queryParam.getDepartmentIdStr())) {
|
||||
queryParam.setDepartmentIds(Arrays.stream(StringUtils.split(queryParam.getDepartmentIdStr(), ",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
if (StringUtils.isNotBlank(queryParam.getSubCompanyIdStr())) {
|
||||
queryParam.setSubCompanyIds(Arrays.stream(StringUtils.split(queryParam.getSubCompanyIdStr(), ",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
return new ResponseResult<SalaryCBSInfoQueryParam, PageInfo<SalaryCBSInfoListDTO>>(user).run(getSalaryCBSWrapper(user)::infoList, queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* cbs推送数据
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/push/pushDataToCBS")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String pushDataToCBS(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody CBSPushParam queryParam) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<CBSPushParam, String>(user).run(getSalaryCBSWrapper(user)::pushDataToCBS, queryParam);
|
||||
}
|
||||
|
||||
/******** 工资单发放 start ***********************************************************************************************/
|
||||
|
||||
|
||||
|
||||
// /**
|
||||
// * 工资单发放信息列表的高级搜索
|
||||
// *
|
||||
// * @return
|
||||
// */
|
||||
// @GET
|
||||
// @Path("/send/getInfoSearchCondition")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String getInfoSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
// return new ResponseResult<>(user).run(getSalarySendWrapper(user)::getInfoSearchCondition);
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
//
|
||||
// /**
|
||||
// * 导出-工资单发放信息列表
|
||||
// *
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/exportInfoList")
|
||||
// @Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
// public Response exportInfoList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendInfoQueryParam queryParam) {
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
//
|
||||
// XSSFWorkbook workbook = getSalarySendWrapper(user).exportInfoList(queryParam);
|
||||
//
|
||||
// String fileName = "工资单发放信息" + LocalDate.now();
|
||||
// try {
|
||||
// fileName = URLEncoder.encode(fileName + ".xlsx", "UTF-8");
|
||||
// } catch (UnsupportedEncodingException e) {
|
||||
// e.printStackTrace();
|
||||
// }
|
||||
//
|
||||
// StreamingOutput output = outputStream -> {
|
||||
// workbook.write(outputStream);
|
||||
// outputStream.flush();
|
||||
// };
|
||||
//
|
||||
// response.setContentType("application/octet-stream");
|
||||
// return Response.ok(output).header("Content-disposition", "attachment;filename=" + fileName).header("Cache-Control", "no-cache").build();
|
||||
// }
|
||||
|
||||
|
||||
// /**
|
||||
// * 工资单批量发放信息列表
|
||||
// *
|
||||
// * @param queryParam
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/batchSendInfoList")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String batchSendInfoList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendInfoQueryParam queryParam) {
|
||||
// // 包含未发送、已撤回
|
||||
// queryParam.setSendStatuss(Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()));
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
// return new ResponseResult<SalarySendInfoQueryParam, PageInfo<SalarySendInfoListDTO>>(user).run(getSalarySendWrapper(user)::infoList, queryParam);
|
||||
//
|
||||
// // WeaTable<SalarySendInfoListDTO> weaTable = salarySendWrapper.infoList(queryParam, UserContext.getCurrentEmployeeId(), TenantContext.getCurrentTenantKey());
|
||||
// // weaTable.setOperatesPermission(new LinkedList<>());
|
||||
// // weaTable.setOperates(new LinkedList<>());
|
||||
// // return WeaResult.success(weaTable);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 工资单批量撤回信息列表
|
||||
// *
|
||||
// * @param queryParam
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/batchWithdrawInfoList")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String batchWithdrawInfoList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendInfoQueryParam queryParam) {
|
||||
// // 包含已发送
|
||||
// queryParam.setSendStatuss(Arrays.asList(SalarySendStatusEnum.ALREADYSEND.getValue()));
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
//
|
||||
// return new ResponseResult<SalarySendInfoQueryParam, PageInfo<SalarySendInfoListDTO>>(user).run(getSalarySendWrapper(user)::infoList, queryParam);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 工资单发放
|
||||
// *
|
||||
// * @param queryParam
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/grant")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String grant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendGrantParam queryParam) {
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
// return new ResponseResult<SalarySendGrantParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::grant, queryParam);
|
||||
// }
|
||||
//
|
||||
//
|
||||
// /**
|
||||
// * 工资单发放详情列表的高级搜索
|
||||
// *
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/getDetailSearchCondition")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String getDetailSearchCondition(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
// return new ResponseResult<Object, Map<String, Object>>(user).run(getSalarySendWrapper(user)::getDetailSearchCondition);
|
||||
// }
|
||||
//
|
||||
// /**
|
||||
// * 工资单发放详情列表
|
||||
// *
|
||||
// * @param queryParam
|
||||
// * @return
|
||||
// */
|
||||
// @POST
|
||||
// @Path("/send/detailList")
|
||||
// @Produces(MediaType.APPLICATION_JSON)
|
||||
// public String detailList(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendDetailListQueryParam queryParam) {
|
||||
// User user = HrmUserVarify.getUser(request, response);
|
||||
// // 处理入参复用方法
|
||||
// SalarySendDetailQueryParam detailQueryParam = SalarySendDetailQueryParam.builder()
|
||||
// .userId(queryParam.getUserId())
|
||||
// .departmentIds(CollectionUtils.isEmpty(queryParam.getDepartmentIds()) ? null : queryParam.getDepartmentIds())
|
||||
// .salarySendId(queryParam.getSalarySendId())
|
||||
// .mergeCountTax(queryParam.getMergeCountTax())
|
||||
// .positionIds(SalaryEntityUtil.isNullOrEmpty(queryParam.getPosition()) ? null : Collections.singletonList(queryParam.getPosition()))
|
||||
// .taxAgentId(queryParam.getTaxAgent())
|
||||
// .username(queryParam.getUsername())
|
||||
// .userstatus(queryParam.getUserstatus()).build();
|
||||
// detailQueryParam.setCurrent(queryParam.getCurrent());
|
||||
// detailQueryParam.setPageSize(queryParam.getPageSize());
|
||||
//
|
||||
// if (StringUtils.isNotBlank(queryParam.getSubCompanyIdStr())) {
|
||||
// detailQueryParam.setSubCompanyIds(Arrays.asList(StringUtils.split(queryParam.getSubCompanyIdStr(), ",")).stream().map(Long::new).collect(Collectors.toList()));
|
||||
// }
|
||||
// if (StringUtils.isNotBlank(queryParam.getDepartmentIdStr())) {
|
||||
// detailQueryParam.setDepartmentIds(Arrays.asList(StringUtils.split(queryParam.getDepartmentIdStr(), ",")).stream().map(Long::new).collect(Collectors.toList()));
|
||||
// }
|
||||
// return new ResponseResult<SalarySendDetailQueryParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::detailList, detailQueryParam);
|
||||
// }
|
||||
|
||||
|
||||
/******** 工资单发放 end ***********************************************************************************************/
|
||||
|
||||
}
|
||||
|
|
@ -380,4 +380,12 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
|
|||
public void updateSobConfig(Long id) {
|
||||
getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id);
|
||||
}
|
||||
|
||||
/**
|
||||
* 联特 生成CBS推送记录
|
||||
* @param ids
|
||||
*/
|
||||
public void generateCBSPushList(List<Long> ids) {
|
||||
getSalaryAcctRecordService(user).generateCBSPushList(ids);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,134 @@
|
|||
package com.engine.salary.wrapper;
|
||||
|
||||
import com.cloudstore.eccom.pc.table.WeaTableColumn;
|
||||
import com.engine.common.service.HrmCommonService;
|
||||
import com.engine.common.service.impl.HrmCommonServiceImpl;
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSBaseInfoDTO;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSInfoListDTO;
|
||||
import com.engine.salary.entity.cbs.dto.SalaryCBSPushListDTO;
|
||||
import com.engine.salary.entity.cbs.param.CBSPushParam;
|
||||
import com.engine.salary.entity.cbs.param.SalaryCBSInfoQueryParam;
|
||||
import com.engine.salary.entity.cbs.po.SalaryCbsInfoPO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendQueryParam;
|
||||
import com.engine.salary.enums.salaryaccounting.CbsPushStatusEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.service.SalaryCbsInfoService;
|
||||
import com.engine.salary.service.SalaryCbsService;
|
||||
import com.engine.salary.service.SalarySendService;
|
||||
import com.engine.salary.service.impl.SalaryCbsInfoServiceImpl;
|
||||
import com.engine.salary.service.impl.SalaryCbsServiceImpl;
|
||||
import com.engine.salary.service.impl.SalarySendServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.general.BaseBean;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* 工资单发放
|
||||
* <p>Copyright: Copyright (c) 2022</p>
|
||||
* <p>Company: 泛微软件</p>
|
||||
*
|
||||
* @author qiantao
|
||||
* @version 1.0
|
||||
**/
|
||||
public class SalaryCBSWrapper extends Service {
|
||||
|
||||
private SalarySendService getSalarySendService(User user) {
|
||||
return ServiceUtil.getService(SalarySendServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsService getSalaryCbsService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryCbsInfoService getSalaryCbsInfoService(User user) {
|
||||
return ServiceUtil.getService(SalaryCbsInfoServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* cbs推送列表
|
||||
*
|
||||
* @param queryParam
|
||||
* @return
|
||||
*/
|
||||
public Map<String, Object> list(SalarySendQueryParam queryParam) {
|
||||
|
||||
if (CollectionUtils.isEmpty(queryParam.getSalaryYearMonth())) {
|
||||
throw new SalaryRunTimeException("请选择月份");
|
||||
}
|
||||
|
||||
HrmCommonService hcs = new HrmCommonServiceImpl();
|
||||
BaseBean baseBean = new BaseBean();
|
||||
String roleId = baseBean.getPropValue("ltSalary", "cbs_role_ie");
|
||||
List<Long> userIdList = hcs.getRoleMembers(new Integer(roleId),"0").stream().map(userId -> new Long(userId.toString())).collect(Collectors.toList());
|
||||
if (!userIdList.contains(Long.valueOf(user.getUID()))) {
|
||||
return new HashMap<>();
|
||||
}
|
||||
Map<String, Object> datas = new HashMap<>(16);
|
||||
queryParam.setSalaryMonth(queryParam.getSalaryYearMonth().stream().map(e -> e + "-01 00:00:00").collect(Collectors.toList()));
|
||||
queryParam.setSalaryMonthDate(queryParam.getSalaryYearMonth().stream().map(e -> e + "-01 00:00:00").map(SalaryDateUtil::dateStrToLocalTime).collect(Collectors.toList()));
|
||||
|
||||
List<SalaryCBSPushListDTO> list = getSalaryCbsService(user).list(queryParam);
|
||||
PageInfo<SalaryCBSPushListDTO> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
|
||||
list, SalaryCBSPushListDTO.class);
|
||||
List<SalaryCBSPushListDTO> pageList = pageInfo.getList();
|
||||
|
||||
// 封装总数和已发
|
||||
List<Long> cbsIdList = pageList.stream().map(SalaryCBSPushListDTO::getId).collect(Collectors.toList());
|
||||
List<SalaryCbsInfoPO> pushInfoList = getSalaryCbsInfoService(user).listByCbsIds(cbsIdList);
|
||||
Map<Long, List<SalaryCbsInfoPO>> pushInfoMapGroupByCbsId = SalaryEntityUtil.group2Map(pushInfoList, SalaryCbsInfoPO::getSalaryCbsId);
|
||||
|
||||
|
||||
pageList.forEach(e -> {
|
||||
List<SalaryCbsInfoPO> salaryCbsInfoList = pushInfoMapGroupByCbsId.get(e.getId());
|
||||
int total = CollectionUtils.isEmpty(salaryCbsInfoList) ? 0 : salaryCbsInfoList.size();
|
||||
// 推送总数
|
||||
e.setPushTotal(total);
|
||||
int pushNum = total == 0 ? 0 : salaryCbsInfoList.stream().filter(info -> info.getPushStatus().equals(CbsPushStatusEnum.PUSHED.getValue())).collect(Collectors.toList()).size();
|
||||
// 已推送数
|
||||
e.setPushNum(pushNum);
|
||||
e.setPushSituation(pushNum + "/" + total);
|
||||
});
|
||||
|
||||
List<WeaTableColumn> columns = new ArrayList<>();
|
||||
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "薪资所属月"), "salaryYearMonth"));
|
||||
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "薪资账套"), "salarySob"));
|
||||
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "次数"), "acctTimes"));
|
||||
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "已推送"), "pushSituation"));
|
||||
columns.add(new WeaTableColumn("100px", SalaryI18nUtil.getI18nLabel(0, "最后推送时间"), "lastPushTime"));
|
||||
|
||||
datas.put("pageInfo", pageInfo);
|
||||
datas.put("columns", columns);
|
||||
return datas;
|
||||
}
|
||||
|
||||
public SalaryCBSBaseInfoDTO getBaseInfo(Long id) {
|
||||
return getSalaryCbsService(user).getBaseInfo(id);
|
||||
}
|
||||
|
||||
public PageInfo<SalaryCBSInfoListDTO> infoList(SalaryCBSInfoQueryParam queryParam) {
|
||||
SalaryCBSInfoQueryParam.checkParam(queryParam);
|
||||
// 推送状态
|
||||
if (StringUtils.isNotBlank(queryParam.getPushStatus())) {
|
||||
queryParam.setPushStatusVal(Integer.valueOf(queryParam.getPushStatus()));
|
||||
}
|
||||
|
||||
PageInfo<SalaryCBSInfoListDTO> pageInfo = getSalaryCbsInfoService(user).salaryCbsInfoListPage(queryParam);
|
||||
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
public String pushDataToCBS(CBSPushParam cbsPushParam) {
|
||||
return getSalaryCbsInfoService(user).pushDataToCBS(cbsPushParam);
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue