Merge remote-tracking branch 'remotes/origin/release/2.9.2.2307.02' into feature/230701-薪资核算-导出功能可选择字段导出
This commit is contained in:
commit
4b503513f2
|
|
@ -173,6 +173,9 @@ delete from hrsa_statreportlogs_detail where 1=1
|
|||
delete from hrsa_statreportlogs where 1=1
|
||||
;
|
||||
|
||||
delete from hrsa_salary_bill_watermark where 1=1
|
||||
;
|
||||
|
||||
-- INSERT INTO hrsa_tax_agent_base(id, devolution_status, create_time, update_time, creator, delete_type, tenant_key) VALUES (1653303537239, 0, '2022-05-23 18:58:53', '2022-05-23 19:12:12', 1, 0, 'all_teams');
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,16 @@
|
|||
alter table hrsa_salary_template
|
||||
add auto_send_cycle_type NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_day_of_month varchar2(200) NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_time_of_day varchar2(200) NULL;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
alter table hrsa_salary_send_info
|
||||
add bill_read_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add bill_confirm_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add send_employee_id NUMBER(38,0) NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add ack_feedback_status NUMBER NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_ack_days NUMBER NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add feedback_url VARCHAR2(500) NULL;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,16 @@
|
|||
alter table hrsa_salary_template
|
||||
add auto_send_cycle_type NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_day_of_month varchar2(200) NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_time_of_day varchar2(200) NULL;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,24 @@
|
|||
alter table hrsa_salary_send_info
|
||||
add bill_read_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add bill_confirm_status NUMBER null;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add send_employee_id NUMBER(38,0) NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add ack_feedback_status NUMBER NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_ack_days NUMBER NULL;
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add feedback_url VARCHAR2(500) NULL;
|
||||
/
|
||||
|
||||
|
|
@ -0,0 +1,5 @@
|
|||
ALTER TABLE hrsa_salary_template
|
||||
ADD COLUMN auto_send_status int NULL,
|
||||
ADD COLUMN auto_send_cycle_type int NULL,
|
||||
ADD COLUMN auto_send_day_of_month varchar(200) NULL,
|
||||
ADD COLUMN auto_send_time_of_day varchar(50) NULL;
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
ALTER TABLE hrsa_salary_send_info
|
||||
ADD COLUMN bill_read_status int NULL,
|
||||
ADD COLUMN bill_confirm_status int NULL,
|
||||
ADD COLUMN send_employee_id BIGINT NULL;
|
||||
|
||||
ALTER TABLE hrsa_salary_template
|
||||
ADD COLUMN ack_feedback_status int NULL,
|
||||
ADD COLUMN auto_ack_days int NULL,
|
||||
ADD COLUMN feedback_url varchar(500) NULL;
|
||||
|
|
@ -0,0 +1,15 @@
|
|||
alter table hrsa_salary_template
|
||||
add auto_send_cycle_type NUMBER null
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_status NUMBER null
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_day_of_month varchar2(200) NULL
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_send_time_of_day varchar2(200) NULL
|
||||
/
|
||||
|
|
@ -0,0 +1,23 @@
|
|||
alter table hrsa_salary_send_info
|
||||
add bill_read_status NUMBER null
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add bill_confirm_status NUMBER null
|
||||
/
|
||||
|
||||
alter table hrsa_salary_send_info
|
||||
add send_employee_id NUMBER(38,0) NULL
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add ack_feedback_status NUMBER NULL
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add auto_ack_days NUMBER NULL
|
||||
/
|
||||
|
||||
alter table hrsa_salary_template
|
||||
add feedback_url VARCHAR2(500) NULL
|
||||
/
|
||||
|
|
@ -0,0 +1,9 @@
|
|||
ALTER TABLE hrsa_salary_send_info
|
||||
ADD COLUMN bill_read_status int NULL,
|
||||
ADD COLUMN bill_confirm_status int NULL,
|
||||
ADD COLUMN send_employee_id BIGINT NULL;
|
||||
|
||||
ALTER TABLE hrsa_salary_template
|
||||
ADD COLUMN ack_feedback_status int NULL,
|
||||
ADD COLUMN auto_ack_days int NULL,
|
||||
ADD COLUMN feedback_url varchar(500) NULL;
|
||||
|
|
@ -0,0 +1,6 @@
|
|||
ALTER TABLE hrsa_salary_template
|
||||
ADD auto_send_status int NULL,
|
||||
auto_send_cycle_type int NULL,
|
||||
auto_send_day_of_month varchar(200) NULL,
|
||||
auto_send_time_of_day varchar(50) NULL
|
||||
GO
|
||||
|
|
@ -0,0 +1,11 @@
|
|||
ALTER TABLE hrsa_salary_send_info
|
||||
ADD bill_read_status int NULL,
|
||||
bill_confirm_status int NULL,
|
||||
send_employee_id BIGINT NULL
|
||||
GO
|
||||
|
||||
ALTER TABLE hrsa_salary_template
|
||||
ADD ack_feedback_status int NULL,
|
||||
auto_ack_days int NULL,
|
||||
feedback_url varchar(500) NULL
|
||||
GO
|
||||
|
|
@ -18,30 +18,33 @@ public class InitListener implements AbstractResourceModelListener {
|
|||
BaseBean bb = new BaseBean();
|
||||
String cId = new License().getCId();
|
||||
String defaultCloseNonStandard149 = bb.getPropValue("hrmSalary", "defaultCloseNonStandard149");
|
||||
if(StringUtils.isNotBlank(cId) && "true".equals(defaultCloseNonStandard149)) {
|
||||
if (StringUtils.isNotBlank(cId) && "true".equals(defaultCloseNonStandard149)) {
|
||||
if (cId.length() > 7) {
|
||||
cId = cId.substring(cId.length() - 7);
|
||||
}
|
||||
int cid = Integer.parseInt(cId);
|
||||
if(!hasMenuInfo(cid, "left", menuid)) {
|
||||
if (!hasMenuInfo(cid, "left", menuid)) {
|
||||
bb.writeLog("149新薪酬管理 添加默认菜单控制");
|
||||
insertMenuInfo(cid, "left", menuid);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void insertMenuInfo(int cid,String type,int id){
|
||||
private void insertMenuInfo(int cid, String type, int id) {
|
||||
RecordSet rs = new RecordSet();
|
||||
BaseBean bb = new BaseBean();
|
||||
bb.writeLog("FunctionUpgradeUtil.getMenuId(cid,id):" + FunctionUpgradeUtil.getMenuId(cid,id));
|
||||
String sql ="INSERT INTO menucontrollist (type,menuid,isopen) VALUES('"+type+"','"+FunctionUpgradeUtil.getMenuId(cid,id)+"','"+FunctionUpgradeUtil.getMenuStatus(id,-1,cid)+"')";
|
||||
bb.writeLog("FunctionUpgradeUtil.getMenuId(cid,id):" + FunctionUpgradeUtil.getMenuId(cid, id));
|
||||
String sql = "INSERT INTO menucontrollist (type,menuid,isopen) VALUES('" + type + "','" + FunctionUpgradeUtil.getMenuId(cid, id) + "','" + FunctionUpgradeUtil.getMenuStatus(id, -1, cid) + "')";
|
||||
rs.execute(sql);
|
||||
}
|
||||
|
||||
private boolean hasMenuInfo(int cid, String type, int id) {
|
||||
RecordSet rs = new RecordSet();
|
||||
String sql = "select count(1) as count from menucontrollist where type = ? and menuid = ?";
|
||||
rs.executeQuery(sql,type, FunctionUpgradeUtil.getMenuId(cid,id));
|
||||
if(rs.next()) {
|
||||
rs.executeQuery(sql, type, FunctionUpgradeUtil.getMenuId(cid, id));
|
||||
if (rs.next()) {
|
||||
int count = rs.getInt("count");
|
||||
if(count > 0) {
|
||||
if (count > 0) {
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -928,6 +928,10 @@ public class SIArchivesBiz {
|
|||
request.setPositions(Arrays.stream(param.getPositionsStr().split(",")).map(BigDecimal::new).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
if (StringUtils.isNotBlank(param.getStatusesStr())) {
|
||||
request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
request.setNeedAuth(param.getNeedAuth());
|
||||
request.setTaxAgentEmployeeIds(param.getTaxAgentEmployeeIds());
|
||||
request.setTaxAgentIds(param.getTaxAgentIds());
|
||||
|
|
@ -937,7 +941,7 @@ public class SIArchivesBiz {
|
|||
long startNum = (current - 1) * pageSize;
|
||||
param.setStartNum(startNum);
|
||||
param.setPageSize(pageSize);
|
||||
request.setStatuses(param.getStatuses());
|
||||
// request.setStatuses(param.getStatuses());
|
||||
request.setKeyword(param.getUserName());
|
||||
|
||||
request.setSiSchemeId(param.getSiSchemeId());
|
||||
|
|
@ -1393,8 +1397,9 @@ public class SIArchivesBiz {
|
|||
conditionItems.add(departmentIds);
|
||||
|
||||
|
||||
SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statuses");
|
||||
SearchConditionItem statuses = conditionFactory.createCondition(ConditionType.SELECT, 502327, "statusesStr");
|
||||
statuses.setInputType("select");
|
||||
statuses.setMultiple(true);
|
||||
statuses.setOptions(userStatusOptions);
|
||||
statuses.setColSpan(2);
|
||||
statuses.setFieldcol(16);
|
||||
|
|
|
|||
|
|
@ -38,4 +38,14 @@ public class SysSalaryItemBiz {
|
|||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
|
||||
public SysSalaryItemPO selectOneByName(String name) {
|
||||
SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession();
|
||||
try {
|
||||
SysSalaryItemMapper mapper = sqlSession.getMapper(SysSalaryItemMapper.class);
|
||||
return mapper.selectOneByName(name);
|
||||
} finally {
|
||||
sqlSession.close();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -62,7 +62,7 @@ public class SalaryTemplateBO {
|
|||
.salarySobId(saveParam.getSalarySobId())
|
||||
.description(saveParam.getDescription())
|
||||
.emailStatus(saveParam.getEmailStatus()?1:0)
|
||||
.sendEmailId(saveParam.getEmailStatus()?saveParam.getSendEmail():0L)
|
||||
// .sendEmailId(saveParam.getEmailStatus()?saveParam.getSendEmail():0L)
|
||||
.msgStatus(saveParam.getMsgStatus()?1:0)
|
||||
.theme(saveParam.getTheme())
|
||||
.background(saveParam.getBackground())
|
||||
|
|
@ -74,6 +74,12 @@ public class SalaryTemplateBO {
|
|||
.replenishName(saveParam.getReplenishName())
|
||||
.replenishRule(saveParam.getReplenishRule())
|
||||
.replenishSalaryItemSetting((saveParam.getSalaryItemSetting() != null ? JsonUtil.toJsonString(saveParam.getReplenishSalaryItemSetting()) : ""))
|
||||
.autoSendStatus(saveParam.getAutoSendStatus()?1:0)
|
||||
.autoSendDayOfMonth(saveParam.getAutoSendDayOfMonth())
|
||||
.autoSendTimeOfDay(saveParam.getAutoSendTimeOfDay())
|
||||
.ackFeedbackStatus(saveParam.getAckFeedbackStatus()?1:0)
|
||||
.autoAckDays(saveParam.getAutoAckDays())
|
||||
.feedbackUrl(saveParam.getFeedbackUrl())
|
||||
.createTime(new Date())
|
||||
.updateTime(new Date())
|
||||
.creator(employeeId)
|
||||
|
|
|
|||
|
|
@ -29,10 +29,7 @@ public class SalaryBaseSetFormDTO {
|
|||
// 水印设置
|
||||
private Object watermarkSetting;
|
||||
|
||||
// 签名确认
|
||||
private Boolean ackStatus;
|
||||
|
||||
// 员工反馈
|
||||
private Boolean feedbackStatus;
|
||||
// 工资单反馈设置
|
||||
private SalaryBillAckFeedbackDTO ackFeedbackSetting;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -0,0 +1,35 @@
|
|||
package com.engine.salary.entity.salaryBill.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName SalaryBillAckFeedbackDTO
|
||||
* @date 2023/07/12 13:46
|
||||
* @description 工资单确认和反馈DTO
|
||||
*/
|
||||
@Data
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class SalaryBillAckFeedbackDTO {
|
||||
|
||||
/**
|
||||
* 工资单确认反馈是否开启。0:否,1:是
|
||||
*/
|
||||
private String ackStatus;
|
||||
|
||||
/**
|
||||
* 反馈地址
|
||||
*/
|
||||
private String feedBackUrl;
|
||||
|
||||
/**
|
||||
* 超时自动确认天数
|
||||
*/
|
||||
private Integer autoAckDays;
|
||||
|
||||
}
|
||||
|
|
@ -48,6 +48,12 @@ public class SalarySendInfoListDTO {
|
|||
@TableTitle(title = "发送状态", dataIndex = "sendStatus", key = "sendStatus")
|
||||
private String sendStatus;
|
||||
|
||||
@TableTitle(title = "查看状态", dataIndex = "billReadStatus", key = "billReadStatus")
|
||||
private String billReadStatus;
|
||||
|
||||
@TableTitle(title = "确认状态", dataIndex = "billConfirmStatus", key = "billConfirmStatus")
|
||||
private String billConfirmStatus;
|
||||
|
||||
private String email;
|
||||
private Long salaryAcctRecordId;
|
||||
/**
|
||||
|
|
@ -55,5 +61,10 @@ public class SalarySendInfoListDTO {
|
|||
*/
|
||||
private Integer salaryAcctType;
|
||||
|
||||
/**
|
||||
* 该模板是否开启了工资单反馈确认
|
||||
*/
|
||||
private boolean needAck;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -141,5 +141,10 @@ public class SalarySendListDTO {
|
|||
*/
|
||||
// private Integer haveBackCalc;
|
||||
|
||||
/**
|
||||
* 工资单确认反馈状态
|
||||
*/
|
||||
private Integer ackFeedbackStatus;
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,4 +54,32 @@ public class SalaryTemplateBaseSetDTO {
|
|||
|
||||
//消息中心")
|
||||
private Boolean msgStatus;
|
||||
|
||||
// 是否启用工资单定时发送
|
||||
private Boolean autoSendStatus;
|
||||
|
||||
// 自动发送工资单周期1:本月、2:上月
|
||||
private Integer autoSendCycleType;
|
||||
|
||||
// 每月几号自动发送工资单
|
||||
private String autoSendDayOfMonth;
|
||||
|
||||
// 发送时间
|
||||
private String autoSendTimeOfDay;
|
||||
|
||||
/**
|
||||
* 工资单确认反馈状态
|
||||
*/
|
||||
private Boolean ackFeedbackStatus;
|
||||
|
||||
/**
|
||||
* 自动确认超时天数
|
||||
*/
|
||||
private Integer autoAckDays;
|
||||
|
||||
/**
|
||||
* 反馈流程地址
|
||||
*
|
||||
*/
|
||||
private String feedbackUrl;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,4 +54,5 @@ public class SalaryTemplateShowSetDTO {
|
|||
|
||||
// 薪资项为0时不显示")
|
||||
private Boolean salaryItemZeroStatus;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.engine.salary.entity.salaryBill.param;
|
||||
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO;
|
||||
import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.util.SalaryI18nUtil;
|
||||
|
|
@ -7,6 +8,7 @@ import lombok.AllArgsConstructor;
|
|||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
|
|
@ -32,11 +34,8 @@ public class SalaryBaseSetSaveParam {
|
|||
// 自定义设置内容")
|
||||
private Map<String, Object> wmSetting;
|
||||
|
||||
// 是否启用确认")
|
||||
private Boolean ackStatus;
|
||||
|
||||
// 是否启用反馈")
|
||||
private Boolean feedbackStatus;
|
||||
// 工资单确认反馈设置
|
||||
private SalaryBillAckFeedbackDTO ackFeedbackSetting;
|
||||
|
||||
public static void checkParam(SalaryBaseSetSaveParam saveParam) {
|
||||
if (Objects.isNull(saveParam.getWatermarkStatus())) {
|
||||
|
|
@ -51,14 +50,10 @@ public class SalaryBaseSetSaveParam {
|
|||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(220419, "自定义水印的设置内容必传"));
|
||||
}
|
||||
}
|
||||
if (Objects.isNull(saveParam.getAckFeedbackSetting()) || StringUtils.isBlank(saveParam.getAckFeedbackSetting().getAckStatus())) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(220418, "工资单确认反馈信息必传"));
|
||||
}
|
||||
|
||||
// if (Objects.isNull(saveParam.getAckStatus())) {
|
||||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 222645, "是否启用确认必传"));
|
||||
// }
|
||||
//
|
||||
// if (Objects.isNull(saveParam.getFeedbackStatus())) {
|
||||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(tenantKey, employeeId, 222646, "是否启用反馈必传"));
|
||||
// }
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import org.apache.commons.collections4.CollectionUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @Description: 工资单模板
|
||||
|
|
@ -62,6 +63,18 @@ public class SalaryTemplateSaveParam {
|
|||
// 薪资项为0时不显示开启状态。false:关、true:开
|
||||
private Boolean salaryItemZeroStatus;
|
||||
|
||||
// 是否启用工资单定时发送。0:未启用、1:已启用
|
||||
private Boolean autoSendStatus;
|
||||
|
||||
// 自动发送工资单周期1:本月、2:上月
|
||||
private Integer autoSendCycleType;
|
||||
|
||||
// 每月几号自动发送工资单
|
||||
private String autoSendDayOfMonth;
|
||||
|
||||
// 自动发放时间
|
||||
private String autoSendTimeOfDay;
|
||||
|
||||
// 薪资项目设置
|
||||
private List<SalaryTemplateSalaryItemSetListDTO> salaryItemSetting;
|
||||
|
||||
|
|
@ -75,6 +88,22 @@ public class SalaryTemplateSaveParam {
|
|||
// 补发薪资项目设置
|
||||
private List<SalaryTemplateSalaryItemSetListDTO> replenishSalaryItemSetting;
|
||||
|
||||
/**
|
||||
* 工资单确认反馈状态
|
||||
*/
|
||||
private Boolean ackFeedbackStatus;
|
||||
|
||||
/**
|
||||
* 自动确认超时天数
|
||||
*/
|
||||
private Integer autoAckDays;
|
||||
|
||||
/**
|
||||
* 反馈流程地址
|
||||
*
|
||||
*/
|
||||
private String feedbackUrl;
|
||||
|
||||
public static void checkParam(SalaryTemplateSaveParam saveParam) {
|
||||
if (saveParam.getSalarySobId() == null) {
|
||||
throw new SalaryRunTimeException("薪资账套表的主键id必传;");
|
||||
|
|
@ -101,9 +130,9 @@ public class SalaryTemplateSaveParam {
|
|||
}
|
||||
|
||||
|
||||
if (saveParam.getEmailStatus() && saveParam.getSendEmail() == null) {
|
||||
throw new SalaryRunTimeException("开启邮箱后,发送地址必选;");
|
||||
}
|
||||
// if (saveParam.getEmailStatus() && saveParam.getSendEmail() == null) {
|
||||
// throw new SalaryRunTimeException("开启邮箱后,发送地址必选;");
|
||||
// }
|
||||
|
||||
if (StringUtils.isNotEmpty(saveParam.getTextContent()) && saveParam.getTextContentPosition() == null) {
|
||||
throw new SalaryRunTimeException("文本内容不为空时,文本内容位置必选;");
|
||||
|
|
@ -116,5 +145,18 @@ public class SalaryTemplateSaveParam {
|
|||
if (CollectionUtils.isEmpty(saveParam.getReplenishSalaryItemSetting())) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "补发工资单模板的薪资项目设置不能为空"));
|
||||
}
|
||||
|
||||
if (Objects.isNull(saveParam.getAutoSendStatus())) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "是否启用自动发放不能为空"));
|
||||
}
|
||||
|
||||
if (saveParam.getAutoSendStatus() == Boolean.TRUE) {
|
||||
if(StringUtils.isBlank(saveParam.getAutoSendDayOfMonth()))
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放日期不能为空"));
|
||||
if(Objects.isNull(saveParam.getAutoSendCycleType()))
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放周期不能为空"));
|
||||
if(StringUtils.isBlank(saveParam.getAutoSendTimeOfDay()))
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(140509, "自动发放时间不能为空"));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,6 +52,21 @@ public class SalarySendInfoPO {
|
|||
*/
|
||||
private Integer sendStatus;
|
||||
|
||||
/**
|
||||
* 查看状态。0:未查看、1:已查看
|
||||
*/
|
||||
private Integer billReadStatus;
|
||||
|
||||
/**
|
||||
* 确认状态 0:未确认、1:已确认
|
||||
*/
|
||||
private Integer billConfirmStatus;
|
||||
|
||||
/**
|
||||
* 操作发送工资单人员id
|
||||
*/
|
||||
private Long sendEmployeeId;
|
||||
|
||||
/**
|
||||
* 发送时间
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -124,6 +124,27 @@ public class SalaryTemplatePO {
|
|||
*/
|
||||
private String replenishSalaryItemSetting;
|
||||
|
||||
|
||||
/**
|
||||
* 是否启用工资单定时发送。0:未启用、1:已启用
|
||||
*/
|
||||
private Integer autoSendStatus;
|
||||
|
||||
/**
|
||||
* 自动发送工资单周期1:本月、2:上月
|
||||
*/
|
||||
private Integer autoSendCycleType;
|
||||
|
||||
/**
|
||||
* 每月几号自动发送工资单
|
||||
*/
|
||||
private String autoSendDayOfMonth;
|
||||
|
||||
/**
|
||||
* 自动发放时间
|
||||
*/
|
||||
private String autoSendTimeOfDay;
|
||||
|
||||
/**
|
||||
* 创建时间
|
||||
*/
|
||||
|
|
@ -149,5 +170,23 @@ public class SalaryTemplatePO {
|
|||
*/
|
||||
private String tenantKey;
|
||||
|
||||
/**
|
||||
* 工资单确认反馈状态
|
||||
*/
|
||||
private Integer ackFeedbackStatus;
|
||||
|
||||
/**
|
||||
* 自动确认超时天数
|
||||
*/
|
||||
private Integer autoAckDays;
|
||||
|
||||
/**
|
||||
* 反馈流程地址
|
||||
*
|
||||
*/
|
||||
private String feedbackUrl;
|
||||
|
||||
|
||||
|
||||
private Collection<Long> salarySobIds;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
|
|||
import com.engine.salary.entity.salarysob.po.SalarySobAdjustRulePO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.experimental.Accessors;
|
||||
|
|
@ -119,6 +120,11 @@ public class SalaryAcctCalculateBO {
|
|||
*/
|
||||
private BlockingDeque<Result> results;
|
||||
|
||||
/**
|
||||
* 系统算税启用状态
|
||||
*/
|
||||
private TaxDeclarationFunctionEnum taxDeclarationFunction;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
public static class Result {
|
||||
|
|
|
|||
|
|
@ -64,16 +64,16 @@ public class SalaryAcctRecordBO {
|
|||
if (SalaryAcctRecordStatusEnum.NOT_ARCHIVED == salaryAcctRecordStatusEnum) {
|
||||
btnList.add(new WeaTableOperate("核算", null, "0"));
|
||||
if(!Objects.equals(salaryAcctRecordPO.getBackCalcStatus(),NumberUtils.INTEGER_ONE)){
|
||||
btnList.add(new WeaTableOperate("删除", null, "0"));
|
||||
btnList.add(new WeaTableOperate("删除", null, "1"));
|
||||
}
|
||||
btnList.add(new WeaTableOperate("归档", null, "0"));
|
||||
btnList.add(new WeaTableOperate("归档", null, "2"));
|
||||
} else if (SalaryAcctRecordStatusEnum.ARCHIVED == salaryAcctRecordStatusEnum && ( salarySendMap.get(salaryAcctRecordPO.getId()) ==Boolean.TRUE ) ){
|
||||
btnList.add(new WeaTableOperate("查看", null, "0"));
|
||||
btnList.add(new WeaTableOperate("重新核算", null, "0"));
|
||||
btnList.add(new WeaTableOperate("回算", null, "0"));
|
||||
btnList.add(new WeaTableOperate("查看", null, "3"));
|
||||
btnList.add(new WeaTableOperate("重新核算", null, "4"));
|
||||
btnList.add(new WeaTableOperate("回算", null, "5"));
|
||||
} else {
|
||||
btnList.add(new WeaTableOperate("查看", null, "0"));
|
||||
btnList.add(new WeaTableOperate("重新核算", null, "0"));
|
||||
btnList.add(new WeaTableOperate("查看", null, "3"));
|
||||
btnList.add(new WeaTableOperate("重新核算", null, "4"));
|
||||
}
|
||||
return SalaryAcctRecordListDTO.builder()
|
||||
.id(salaryAcctRecordPO.getId())
|
||||
|
|
|
|||
|
|
@ -50,6 +50,8 @@ public class SalaryAcctEmployeeQueryParam extends BaseQueryParam {
|
|||
*/
|
||||
|
||||
private SalaryEmployeeStatusEnum status;
|
||||
//状态(多选)
|
||||
private List<String> statuses;
|
||||
|
||||
//离职日期")
|
||||
private LocalDateRange dismissDate;
|
||||
|
|
|
|||
|
|
@ -10,6 +10,7 @@ import lombok.Data;
|
|||
import lombok.NoArgsConstructor;
|
||||
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
|
||||
/**
|
||||
* 薪资核算结果查询参数
|
||||
|
|
@ -46,6 +47,8 @@ public class SalaryAcctResultQueryParam extends BaseQueryParam {
|
|||
|
||||
//状态
|
||||
private SalaryEmployeeStatusEnum status;
|
||||
//状态(多选)
|
||||
private List<String> statuses;
|
||||
|
||||
//离职日期
|
||||
private LocalDateRange dismissDate;
|
||||
|
|
|
|||
|
|
@ -48,6 +48,8 @@ public class SalaryArchiveQueryParam extends BaseQueryParam {
|
|||
|
||||
//状态
|
||||
private String userstatus;
|
||||
//状态(多选)
|
||||
private List<String> statuses;
|
||||
|
||||
//入职日期
|
||||
private List<String> hiredate;
|
||||
|
|
|
|||
|
|
@ -134,7 +134,7 @@ public class SalarySobItemAggregateBO {
|
|||
.taxDeclarationColumn(SalaryItemBO.buildTaxDeclarationColumn(salaryItemPO.getCode()))
|
||||
.sortedIndex(salarySobItemPO.getSortedIndex())
|
||||
.canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1))
|
||||
.canDelete(salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1))
|
||||
.canDelete(openFormulaForcedEditing || salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1))
|
||||
.build());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -54,8 +54,8 @@ public class InsuranceAccountBO {
|
|||
.id(e.getId())
|
||||
.accountant(e.getAccountant())
|
||||
.billMonth(e.getBillMonth())
|
||||
.billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel())
|
||||
// .billStatus(e.getBillStatus().toString())
|
||||
// .billStatus(queryLabelId(e.getBillStatus()).getDefaultLabel())
|
||||
.billStatus(e.getBillStatus().toString())
|
||||
.fundNum(e.getFundNum())
|
||||
.fundPay(SalaryEntityUtil.thousandthConvert(e.getFundPay()))
|
||||
.lastTime(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(e.getUpdateTime()))
|
||||
|
|
|
|||
|
|
@ -38,6 +38,7 @@ public class InsuranceArchivesListParam extends BaseQueryParam {
|
|||
|
||||
//状态(多线)")
|
||||
private List<String> statuses;
|
||||
private String statusesStr;
|
||||
|
||||
//岗位(多选)")
|
||||
private List<BigDecimal> positions;
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
package com.engine.salary.enums.salarybill;
|
||||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @ClassName BillConfimStatusEnum
|
||||
* @author Harryxzy
|
||||
* @date 2023/7/10 17:03
|
||||
* @description 工资单确认
|
||||
*/
|
||||
public enum BillConfimStatusEnum implements BaseEnum<Integer> {
|
||||
|
||||
UNCONFIRMED(0, "未确认", 93286),
|
||||
CONFIRMED(1, "已确认", 93212),
|
||||
FEEDBACK(2, "已反馈", 0);
|
||||
|
||||
private final int value;
|
||||
|
||||
private final String defaultLabel;
|
||||
|
||||
private final int labelId;
|
||||
|
||||
BillConfimStatusEnum(int value, String defaultLabel, int labelId) {
|
||||
this.value = value;
|
||||
this.defaultLabel = defaultLabel;
|
||||
this.labelId = labelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultLabel() {
|
||||
return defaultLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static String getDefaultLabelByValue(Integer value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
}
|
||||
BillConfimStatusEnum[] enumAry = BillConfimStatusEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (enumAry[i].getValue().equals(value)) {
|
||||
return enumAry[i].getDefaultLabel();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String getNameByValue(Integer value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
}
|
||||
BillConfimStatusEnum[] enumAry = BillConfimStatusEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (enumAry[i].getValue().equals(value)) {
|
||||
return enumAry[i].name();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,70 @@
|
|||
package com.engine.salary.enums.salarybill;
|
||||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
/**
|
||||
* @ClassName BillReadStatusEnum
|
||||
* @author Harryxzy
|
||||
* @date 2023/7/10 17:13
|
||||
* @description 工资单查看
|
||||
*/
|
||||
public enum BillReadStatusEnum implements BaseEnum<Integer> {
|
||||
|
||||
UNREAD(0, "未查看", 93286),
|
||||
READED(1, "已查看", 93212);
|
||||
|
||||
private int value;
|
||||
|
||||
private String defaultLabel;
|
||||
|
||||
private int labelId;
|
||||
|
||||
BillReadStatusEnum(int value, String defaultLabel, int labelId) {
|
||||
this.value = value;
|
||||
this.defaultLabel = defaultLabel;
|
||||
this.labelId = labelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultLabel() {
|
||||
return defaultLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static String getDefaultLabelByValue(Integer value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
}
|
||||
BillReadStatusEnum[] enumAry = BillReadStatusEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (Integer.valueOf(enumAry[i].getValue()).equals(value)) {
|
||||
return enumAry[i].getDefaultLabel();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
|
||||
public static String getNameByValue(Integer value) {
|
||||
if (value == null) {
|
||||
return "";
|
||||
}
|
||||
BillReadStatusEnum[] enumAry = BillReadStatusEnum.values();
|
||||
for(int i = 0; i < Arrays.asList(enumAry).size(); i++){
|
||||
if (Integer.valueOf(enumAry[i].getValue()).equals(value)) {
|
||||
return enumAry[i].name();
|
||||
}
|
||||
}
|
||||
return "";
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,54 @@
|
|||
package com.engine.salary.enums.salarysend;
|
||||
|
||||
|
||||
import com.engine.salary.enums.BaseEnum;
|
||||
|
||||
import java.util.Objects;
|
||||
|
||||
/**
|
||||
* @ClassName SalaryAutoSendCycleTypeEnum
|
||||
* @author Harryxzy
|
||||
* @date 2023/7/4 17:30
|
||||
* @description 自动发送工资单周期
|
||||
*/
|
||||
public enum SalaryAutoSendCycleTypeEnum implements BaseEnum<Integer> {
|
||||
|
||||
THIS_MONTH(1, "本月", 86072),
|
||||
NEXT_MONTH(2, "下月", 86073);
|
||||
|
||||
private int value;
|
||||
|
||||
private String defaultLabel;
|
||||
|
||||
private int labelId;
|
||||
|
||||
SalaryAutoSendCycleTypeEnum(int value, String defaultLabel, int labelId) {
|
||||
this.value = value;
|
||||
this.defaultLabel = defaultLabel;
|
||||
this.labelId = labelId;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getValue() {
|
||||
return value;
|
||||
}
|
||||
|
||||
@Override
|
||||
public String getDefaultLabel() {
|
||||
return defaultLabel;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Integer getLabelId() {
|
||||
return labelId;
|
||||
}
|
||||
|
||||
public static SalaryAutoSendCycleTypeEnum parseByValue(int value) {
|
||||
for (SalaryAutoSendCycleTypeEnum salaryCycleTypeEnum : SalaryAutoSendCycleTypeEnum.values()) {
|
||||
if (Objects.equals(salaryCycleTypeEnum.getValue(), value)) {
|
||||
return salaryCycleTypeEnum;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
|
@ -22,6 +22,9 @@ import com.engine.salary.exception.SalaryRunTimeException;
|
|||
import com.engine.salary.mapper.salaryacct.SalaryAcctResultMapper;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.service.impl.*;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
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.db.MapperProxyFactory;
|
||||
|
|
@ -140,6 +143,11 @@ public class SalaryAcctManager extends Service {
|
|||
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
|
||||
/**
|
||||
* 补充核算
|
||||
|
|
@ -307,6 +315,8 @@ public class SalaryAcctManager extends Service {
|
|||
BlockingDeque<SalaryAcctCalculateBO.Result> calculateResults = new LinkedBlockingDeque<>(partition.size());
|
||||
// 12.3、生成本次运算的key
|
||||
String calculateKey = UUID.randomUUID().toString();
|
||||
// 12.4、是否采用系统算税
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration();
|
||||
// 12.4、多线程运算,运算结果存放在临时表中
|
||||
for (List<SalaryAcctEmployeePO> acctEmployeePOS : partition) {
|
||||
SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO()
|
||||
|
|
@ -327,7 +337,8 @@ public class SalaryAcctManager extends Service {
|
|||
.setIssuedFieldIds(issuedFieldIds)
|
||||
.setChildMonitor(childMonitor)
|
||||
.setResults(calculateResults)
|
||||
.setCalculateKey(calculateKey);
|
||||
.setCalculateKey(calculateKey)
|
||||
.setTaxDeclarationFunction(taxDeclarationFunction);
|
||||
List<SalarySobBackItemPO> finalSalarySobBackItems = salarySobBackItems;
|
||||
LocalRunnable localRunnable = new LocalRunnable() {
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -122,4 +122,6 @@ public interface SalaryArchiveMapper {
|
|||
void deletePendingTodo(@Param("ids") Collection<Long> ids);
|
||||
|
||||
void deleteSuspendTodo(@Param("ids") Collection<Long> ids);
|
||||
|
||||
void deleteByIds(@Param("ids")Collection<Long> deleteIds);
|
||||
}
|
||||
|
|
@ -154,6 +154,12 @@
|
|||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND e.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userstatus" separator="," close=")">
|
||||
#{userstatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<!-- 入职日期 -->
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
|
|
@ -229,7 +235,12 @@
|
|||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND e.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userstatus" separator="," close=")">
|
||||
#{userstatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
</if>
|
||||
|
|
@ -305,7 +316,12 @@
|
|||
<if test="param.userstatus != null and param.userstatus != ''">
|
||||
AND e.status = #{param.userstatus}
|
||||
</if>
|
||||
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND e.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userstatus" separator="," close=")">
|
||||
#{userstatus}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.hiredate != null and param.hiredate.size() == 2">
|
||||
AND (e.companystartdate BETWEEN #{param.hiredate[0]} AND #{param.hiredate[1]})
|
||||
</if>
|
||||
|
|
@ -487,6 +503,16 @@
|
|||
</foreach>
|
||||
</delete>
|
||||
|
||||
<delete id="deleteByIds">
|
||||
UPDATE hrsa_salary_archive
|
||||
SET delete_type=1
|
||||
WHERE delete_type = 0
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</delete>
|
||||
|
||||
<select id="listSome" resultType="com.engine.salary.entity.salaryarchive.po.SalaryArchivePO">
|
||||
SELECT
|
||||
<include refid="baseColumns"/>
|
||||
|
|
|
|||
|
|
@ -497,6 +497,7 @@
|
|||
or (param.subcompanyIds != null and param.subcompanyIds.size()>0)
|
||||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -528,6 +529,12 @@
|
|||
#{positionId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND em.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
|
||||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
@ -579,8 +586,10 @@
|
|||
</if>
|
||||
<if test="(param.employeeName != null and param.employeeName != '')
|
||||
or (param.workcode != null and param.workcode != '')
|
||||
or (param.subcompanyIds != null and param.subcompanyIds.size()>0)
|
||||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -592,6 +601,12 @@
|
|||
<if test="param.workcode != null and param.workcode != ''">
|
||||
AND em.workcode like '%'||#{param.workcode}||'%'
|
||||
</if>
|
||||
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
|
||||
AND em.subcompanyid1 IN
|
||||
<foreach collection="param.subcompanyIds" open="(" item="subcompanyId" separator="," close=")">
|
||||
#{subcompanyId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.departmentIds != null and param.departmentIds.size()>0">
|
||||
AND em.departmentid IN
|
||||
<foreach collection="param.departmentIds" open="(" item="departmentId" separator="," close=")">
|
||||
|
|
@ -604,6 +619,12 @@
|
|||
#{positionId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND em.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
|
||||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
@ -655,8 +676,10 @@
|
|||
</if>
|
||||
<if test="(param.employeeName != null and param.employeeName != '')
|
||||
or (param.workcode != null and param.workcode != '')
|
||||
or (param.subcompanyIds != null and param.subcompanyIds.size()>0)
|
||||
or (param.departmentIds != null and param.departmentIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.positionIds != null and param.positionIds.size()>0)
|
||||
or (param.statuses != null and param.statuses.size()>0)
|
||||
or (param.status != null and param.status.toString != 'ALL')">
|
||||
AND t.employee_id IN
|
||||
(
|
||||
|
|
@ -668,6 +691,12 @@
|
|||
<if test="param.workcode != null and param.workcode != ''">
|
||||
AND em.workcode like '%'+#{param.workcode}+'%'
|
||||
</if>
|
||||
<if test="param.subcompanyIds != null and param.subcompanyIds.size()>0">
|
||||
AND em.subcompanyid1 IN
|
||||
<foreach collection="param.subcompanyIds" open="(" item="subcompanyId" separator="," close=")">
|
||||
#{subcompanyId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.departmentIds != null and param.departmentIds.size()>0">
|
||||
AND em.departmentid IN
|
||||
<foreach collection="param.departmentIds" open="(" item="departmentId" separator="," close=")">
|
||||
|
|
@ -680,6 +709,12 @@
|
|||
#{positionId}
|
||||
</foreach>
|
||||
</if>
|
||||
<if test="param.statuses != null and param.statuses.size()>0">
|
||||
AND em.status IN
|
||||
<foreach collection="param.statuses" open="(" item="userStatus" separator="," close=")">
|
||||
#{userStatus}
|
||||
</foreach>
|
||||
</if>
|
||||
-- 在职
|
||||
<if test="param.status != null and param.status.toString == 'NORMAL'">
|
||||
AND em.status in (0,1,2,3)
|
||||
|
|
|
|||
|
|
@ -99,4 +99,19 @@ public interface SalarySendInfoMapper {
|
|||
void updateIgnoreNull(SalarySendInfoPO po);
|
||||
|
||||
void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection<Long> ids);
|
||||
|
||||
List<SalarySendInfoPO> getNeedSendInfoList(@Param("salarySendIds") List<Long> salarySendIds);
|
||||
|
||||
/**
|
||||
* 自动确认工资单
|
||||
* @param needAutoIds
|
||||
*/
|
||||
void autoConfirmSalaryBill(@Param("ids") List<Long> needAutoIds);
|
||||
|
||||
/**
|
||||
* 根据薪资账套id获取已发送,确认状态为未确认的工资单
|
||||
* @param salarySobIds
|
||||
* @return
|
||||
*/
|
||||
List<SalarySendInfoPO> listUnConfirmedSendInfo(@Param("salarySobIds") List<Long> salarySobIds);
|
||||
}
|
||||
|
|
@ -36,6 +36,9 @@
|
|||
, t.delete_type
|
||||
, t.tenant_key
|
||||
, t.salary_acct_type
|
||||
, t.bill_read_status
|
||||
, t.bill_confirm_status
|
||||
, t.send_employee_id
|
||||
</sql>
|
||||
<update id="deleteBySalaryAcctRecordIds">
|
||||
update hrsa_salary_send_info
|
||||
|
|
@ -168,6 +171,8 @@
|
|||
t1.send_status,
|
||||
t1.employee_id,
|
||||
t1.salary_month,
|
||||
t1.bill_read_status as billReadStatus,
|
||||
t1.bill_confirm_status as billConfirmStatus,
|
||||
e.email
|
||||
</sql>
|
||||
|
||||
|
|
@ -609,7 +614,16 @@
|
|||
delete_type = #{po.deleteType},
|
||||
</if>
|
||||
<if test="po.salaryTemplate != null">
|
||||
salary_template = #{po.salaryTemplate}
|
||||
salary_template = #{po.salaryTemplate},
|
||||
</if>
|
||||
<if test="po.billReadStatus != null">
|
||||
bill_read_status = #{po.billReadStatus},
|
||||
</if>
|
||||
<if test="po.billConfirmStatus != null">
|
||||
bill_confirm_status = #{po.billConfirmStatus},
|
||||
</if>
|
||||
<if test="po.sendEmployeeId != null">
|
||||
send_employee_id = #{po.sendEmployeeId}
|
||||
</if>
|
||||
</set>
|
||||
|
||||
|
|
@ -682,8 +696,41 @@
|
|||
<if test="tenantKey != null and tenantKey != ''">
|
||||
AND tenant_key = #{tenantKey}
|
||||
</if>
|
||||
<if test="billConfirmStatus != null and billConfirmStatus != ''">
|
||||
AND bill_confirm_status = #{billConfirmStatus}
|
||||
</if>
|
||||
<if test="billReadStatus != null and billReadStatus != ''">
|
||||
AND bill_read_status = #{billReadStatus}
|
||||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
<select id="getNeedSendInfoList" resultType="com.engine.salary.entity.salaryBill.po.SalarySendInfoPO">
|
||||
select id,salary_send_id
|
||||
from hrsa_salary_send_info a
|
||||
where a.delete_type=0
|
||||
and a.send_status in (0,2)
|
||||
and (a.salary_acct_type!=1 or a.salary_acct_type is null)
|
||||
<if test="salarySendIds != null and salarySendIds.size() > 0">
|
||||
AND a.salary_send_id IN
|
||||
<foreach collection="salarySendIds" open="(" item="salarySendId" separator="," close=")">
|
||||
#{salarySendId}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
<select id="listUnConfirmedSendInfo" resultType="com.engine.salary.entity.salaryBill.po.SalarySendInfoPO">
|
||||
SELECT
|
||||
<include refid="baseColumns" />
|
||||
FROM hrsa_salary_send_info t
|
||||
LEFT JOIN hrsa_salary_send s
|
||||
ON t.salary_send_id = s.id
|
||||
WHERE t.delete_type = 0
|
||||
AND t.send_status = 1
|
||||
AND s.salary_sob_id IN
|
||||
<foreach collection="salarySobIds" separator="," item="salarySobId" open="(" close=")">
|
||||
#{salarySobId}
|
||||
</foreach>
|
||||
AND (t.bill_confirm_status = 0 or bill_confirm_status is null)
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 更新不为NULL的字段 -->
|
||||
|
|
@ -696,9 +743,6 @@
|
|||
<if test="salaryMonth != null">
|
||||
salary_month=#{salaryMonth},
|
||||
</if>
|
||||
<if test="useType != null">
|
||||
use_type=#{useType},
|
||||
</if>
|
||||
<if test="salaryAcctRecordId != null">
|
||||
salary_acct_record_id=#{salaryAcctRecordId},
|
||||
</if>
|
||||
|
|
@ -732,8 +776,27 @@
|
|||
<if test="tenantKey != null">
|
||||
tenant_key=#{tenantKey},
|
||||
</if>
|
||||
<if test="billReadStatus != null">
|
||||
bill_read_status=#{billReadStatus},
|
||||
</if>
|
||||
<if test="billConfirmStatus != null">
|
||||
bill_confirm_status=#{billConfirmStatus},
|
||||
</if>
|
||||
</set>
|
||||
WHERE id = #{id} AND delete_type = 0
|
||||
</update>
|
||||
<update id="autoConfirmSalaryBill">
|
||||
UPDATE hrsa_salary_send_info
|
||||
set
|
||||
bill_confirm_status = 1
|
||||
where
|
||||
delete_type = 0
|
||||
<if test="ids != null and ids.size() > 0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</update>
|
||||
|
||||
</mapper>
|
||||
|
|
|
|||
|
|
@ -63,4 +63,8 @@ public interface SalarySendMapper {
|
|||
void batchHandleSalaryAcctTypeHistory();
|
||||
|
||||
void deleteBySalaryAcctRecordIds(@Param("salaryAcctRecordId") Collection<Long> ids);
|
||||
|
||||
List<SalarySendPO> getNeedSendListBySalarySobIds(@Param("salarySobIds")List<Long> salarySobIds);
|
||||
|
||||
List<SalarySendPO> getByIds(@Param("ids") List<Long> salarySendId);
|
||||
}
|
||||
|
|
@ -236,6 +236,34 @@
|
|||
</if>
|
||||
ORDER BY id DESC
|
||||
</select>
|
||||
<select id="getNeedSendListBySalarySobIds"
|
||||
resultType="com.engine.salary.entity.salaryBill.po.SalarySendPO">
|
||||
select
|
||||
<include refid="salarySendPOColumn" />
|
||||
from hrsa_salary_send
|
||||
where
|
||||
delete_type=0 and send_total != send_num
|
||||
and (salary_acct_type = 0 or salary_acct_type is null )
|
||||
and (send_status = 0 or send_status is null)
|
||||
<if test="salarySobIds != null and salarySobIds.size() > 0">
|
||||
AND salary_sob_id IN
|
||||
<foreach collection="salarySobIds" open="(" item="salarySobId" separator="," close=")">
|
||||
#{salarySobId}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
<select id="getByIds" resultType="com.engine.salary.entity.salaryBill.po.SalarySendPO">
|
||||
SELECT
|
||||
<include refid="salarySendPOColumn" />
|
||||
FROM hrsa_salary_send t
|
||||
WHERE delete_type = 0
|
||||
<if test="ids != null and ids.size() > 0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
|
||||
<!-- 插入不为NULL的字段 -->
|
||||
|
|
|
|||
|
|
@ -48,9 +48,16 @@
|
|||
, t.salary_item_null_status
|
||||
, t.salary_item_zero_status
|
||||
, t.salary_item_setting
|
||||
, replenish_name
|
||||
, replenish_rule
|
||||
, replenish_salary_item_setting
|
||||
, t.replenish_name
|
||||
, t.replenish_rule
|
||||
, t.replenish_salary_item_setting
|
||||
, t.auto_send_status
|
||||
, t.auto_send_cycle_type
|
||||
, t.auto_send_day_of_month
|
||||
, t.auto_send_time_of_day
|
||||
, t.ack_feedback_status
|
||||
, t.auto_ack_days
|
||||
, t.feedback_url
|
||||
, t.create_time
|
||||
, t.update_time
|
||||
, t.creator
|
||||
|
|
@ -76,6 +83,13 @@
|
|||
replenish_name,
|
||||
replenish_rule,
|
||||
replenish_salary_item_setting,
|
||||
auto_send_status,
|
||||
auto_send_cycle_type,
|
||||
auto_send_day_of_month,
|
||||
auto_send_time_of_day,
|
||||
ack_feedback_status,
|
||||
auto_ack_days,
|
||||
feedback_url,
|
||||
create_time,
|
||||
update_time,
|
||||
creator,
|
||||
|
|
@ -310,6 +324,12 @@
|
|||
<if test="deleteType != null and deleteType != ''">
|
||||
AND delete_type = #{deleteType}
|
||||
</if>
|
||||
<if test="autoSendStatus != null and autoSendStatus != ''">
|
||||
AND auto_send_status = #{autoSendStatus}
|
||||
</if>
|
||||
<if test="ackFeedbackStatus != null and ackFeedbackStatus != ''">
|
||||
AND ack_feedback_status = #{ackFeedbackStatus}
|
||||
</if>
|
||||
<if test="salarySobIds != null and salarySobIds.size() > 0">
|
||||
AND salary_sob_id IN
|
||||
<foreach collection="salarySobIds" open="(" item="id" separator="," close=")">
|
||||
|
|
@ -490,6 +510,27 @@
|
|||
<if test="replenishSalaryItemSetting != null">
|
||||
replenish_salary_item_setting=#{replenishSalaryItemSetting},
|
||||
</if>
|
||||
<if test="autoSendStatus != null">
|
||||
auto_send_status=#{autoSendStatus},
|
||||
</if>
|
||||
<if test="autoSendCycleType != null">
|
||||
auto_send_cycle_type=#{autoSendCycleType},
|
||||
</if>
|
||||
<if test="autoSendDayOfMonth != null">
|
||||
auto_send_day_of_month=#{autoSendDayOfMonth},
|
||||
</if>
|
||||
<if test="autoSendTimeOfDay != null">
|
||||
auto_send_time_of_day=#{autoSendTimeOfDay},
|
||||
</if>
|
||||
<if test="ackFeedbackStatus!= null">
|
||||
ack_feedback_status=#{ackFeedbackStatus},
|
||||
</if>
|
||||
<if test="autoAckDays != null">
|
||||
auto_ack_days=#{autoAckDays},
|
||||
</if>
|
||||
<if test="feedbackUrl != null">
|
||||
feedback_url=#{feedbackUrl},
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
create_time=#{createTime},
|
||||
</if>
|
||||
|
|
@ -568,6 +609,27 @@
|
|||
<if test="replenishSalaryItemSetting != null">
|
||||
replenish_salary_item_setting,
|
||||
</if>
|
||||
<if test="autoSendStatus != null">
|
||||
auto_send_status,
|
||||
</if>
|
||||
<if test="autoSendCycleType != null">
|
||||
auto_send_cycle_type,
|
||||
</if>
|
||||
<if test="autoSendDayOfMonth != null">
|
||||
auto_send_day_of_month,
|
||||
</if>
|
||||
<if test="autoSendTimeOfDay != null">
|
||||
auto_send_time_of_day,
|
||||
</if>
|
||||
<if test="ackFeedbackStatus != null">
|
||||
ack_feedback_status,
|
||||
</if>
|
||||
<if test="autoAckDays != null">
|
||||
auto_ack_days,
|
||||
</if>
|
||||
<if test="feedbackUrl != null">
|
||||
feedback_url,
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
|
|
@ -642,6 +704,27 @@
|
|||
<if test="replenishSalaryItemSetting != null">
|
||||
#{replenishSalaryItemSetting},
|
||||
</if>
|
||||
<if test="autoSendStatus != null">
|
||||
#{autoSendStatus},
|
||||
</if>
|
||||
<if test="autoSendCycleType != null">
|
||||
#{autoSendCycleType},
|
||||
</if>
|
||||
<if test="autoSendDayOfMonth != null">
|
||||
#{autoSendDayOfMonth},
|
||||
</if>
|
||||
<if test="autoSendTimeOfDay != null">
|
||||
#{autoSendTimeOfDay},
|
||||
</if>
|
||||
<if test="ackFeedbackStatus != null">
|
||||
#{ackFeedbackStatus},
|
||||
</if>
|
||||
<if test="autoAckDays != null">
|
||||
#{autoAckDays},
|
||||
</if>
|
||||
<if test="feedbackUrl != null">
|
||||
#{feedbackUrl},
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
#{createTime},
|
||||
</if>
|
||||
|
|
@ -726,6 +809,27 @@
|
|||
<if test="replenishSalaryItemSetting != null">
|
||||
replenish_salary_item_setting,
|
||||
</if>
|
||||
<if test="autoSendStatus != null">
|
||||
auto_send_status,
|
||||
</if>
|
||||
<if test="autoSendCycleType != null">
|
||||
auto_send_cycle_type,
|
||||
</if>
|
||||
<if test="autoSendDayOfMonth != null">
|
||||
auto_send_day_of_month,
|
||||
</if>
|
||||
<if test="autoSendTimeOfDay != null">
|
||||
auto_send_time_of_day,
|
||||
</if>
|
||||
<if test="ackFeedbackStatus != null">
|
||||
ack_feedback_status,
|
||||
</if>
|
||||
<if test="autoAckDays != null">
|
||||
auto_ack_days,
|
||||
</if>
|
||||
<if test="feedbackUrl != null">
|
||||
feedback_url,
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
create_time,
|
||||
</if>
|
||||
|
|
@ -800,6 +904,27 @@
|
|||
<if test="replenishSalaryItemSetting != null">
|
||||
#{replenishSalaryItemSetting},
|
||||
</if>
|
||||
<if test="autoSendStatus != null">
|
||||
#{autoSendStatus},
|
||||
</if>
|
||||
<if test="autoSendCycleType != null">
|
||||
#{autoSendCycleType},
|
||||
</if>
|
||||
<if test="autoSendDayOfMonth != null">
|
||||
#{autoSendDayOfMonth},
|
||||
</if>
|
||||
<if test="autoSendTimeOfDay != null">
|
||||
#{autoSendTimeOfDay},
|
||||
</if>
|
||||
<if test="ackFeedbackStatus != null">
|
||||
#{ackFeedbackStatus},
|
||||
</if>
|
||||
<if test="autoAckDays != null">
|
||||
#{autoAckDays},
|
||||
</if>
|
||||
<if test="feedbackUrl != null">
|
||||
#{feedbackUrl},
|
||||
</if>
|
||||
<if test="createTime != null">
|
||||
#{createTime},
|
||||
</if>
|
||||
|
|
|
|||
|
|
@ -1,7 +1,6 @@
|
|||
package com.engine.salary.mapper.salaryitem;
|
||||
|
||||
import com.engine.salary.entity.salaryitem.po.SysSalaryItemPO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
|
@ -62,5 +61,6 @@ public interface SysSalaryItemMapper {
|
|||
* @return 返回影响行数
|
||||
*/
|
||||
int delete(SysSalaryItemPO SysSalaryItemPO);
|
||||
|
||||
|
||||
SysSalaryItemPO selectOneByName(String name);
|
||||
}
|
||||
|
|
@ -609,5 +609,12 @@
|
|||
AND delete_type = 0
|
||||
</delete>
|
||||
|
||||
<!-- 根据主键获取单条记录 -->
|
||||
<select id="selectOneByName" resultMap="BaseResultMap">
|
||||
SELECT
|
||||
<include refid="baseColumns"/>
|
||||
FROM hrsa_sys_salary_item t
|
||||
WHERE name = #{name} AND delete_type = 0
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
@ -2,7 +2,6 @@ package com.engine.salary.mapper.siarchives;
|
|||
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -80,4 +79,10 @@ public interface FundSchemeMapper {
|
|||
* @param ids
|
||||
*/
|
||||
void batchUpdateEndTimeToNull(@Param("ids")List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据id删除
|
||||
* @param fundArchiveDelIds
|
||||
*/
|
||||
void deleteByIds(@Param("ids")List<Long> fundArchiveDelIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -105,6 +105,19 @@
|
|||
|
||||
</delete>
|
||||
|
||||
<delete id="deleteByIds">
|
||||
UPDATE hrsa_fund_archives
|
||||
SET delete_type = 1
|
||||
WHERE delete_type = 0
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
|
||||
</delete>
|
||||
|
||||
<!-- 根据人员id和个税扣缴义务人删除档案 -->
|
||||
<update id="deleteByEmployeeIdAndPayOrg" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO">
|
||||
UPDATE hrsa_fund_archives
|
||||
|
|
|
|||
|
|
@ -107,4 +107,10 @@ public interface InsuranceBaseInfoMapper {
|
|||
* @param insuranceArchivesBaseInfoPOS
|
||||
*/
|
||||
void batchUpdate(@Param("collection") Collection<InsuranceArchivesBaseInfoPO> insuranceArchivesBaseInfoPOS);
|
||||
|
||||
/**
|
||||
* 根据id删除
|
||||
* @param archiveDelIds
|
||||
*/
|
||||
void deleteByIds(@Param("ids")List<Long> archiveDelIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,6 +174,18 @@
|
|||
</if>
|
||||
</delete>
|
||||
|
||||
<delete id="deleteByIds">
|
||||
UPDATE hrsa_insurance_base_info
|
||||
SET delete_type = 1
|
||||
WHERE delete_type = 0
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
<!-- 根据人员id和个税扣缴义务人删除档案 -->
|
||||
<update id="deleteByEmployeeIdAndPayOrg" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesBaseInfoPO">
|
||||
UPDATE hrsa_insurance_base_info
|
||||
|
|
|
|||
|
|
@ -1,9 +1,7 @@
|
|||
package com.engine.salary.mapper.siarchives;
|
||||
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesFundSchemePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -73,4 +71,10 @@ public interface OtherSchemeMapper {
|
|||
* @param ids
|
||||
*/
|
||||
void batchUpdateEndTimeToNull(@Param("ids")List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据id删除
|
||||
* @param otherArchiveDelIds
|
||||
*/
|
||||
void deleteByIds(@Param("ids") List<Long> otherArchiveDelIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -92,6 +92,18 @@
|
|||
|
||||
</delete>
|
||||
|
||||
<delete id="deleteByIds">
|
||||
UPDATE hrsa_other_archives
|
||||
SET delete_type = 1
|
||||
WHERE delete_type = 0
|
||||
AND id IN
|
||||
<if test="ids != null and ids.size()>0">
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
<!-- 根据人员id和个税扣缴义务人删除档案 -->
|
||||
<update id="deleteByEmployeeIdAndPayOrg" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesOtherSchemePO">
|
||||
UPDATE hrsa_other_archives
|
||||
|
|
|
|||
|
|
@ -3,7 +3,6 @@ package com.engine.salary.mapper.siarchives;
|
|||
import com.engine.salary.entity.siarchives.param.InsuranceArchivesListParam;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesEmployeePO;
|
||||
import com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO;
|
||||
import com.engine.salary.entity.sischeme.po.InsuranceSchemeDetailPO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Collection;
|
||||
|
|
@ -108,4 +107,10 @@ public interface SocialSchemeMapper {
|
|||
* @param ids
|
||||
*/
|
||||
void batchUpdateEndTimeToNull(@Param("ids")List<Long> ids);
|
||||
|
||||
/**
|
||||
* 根据id删除
|
||||
* @param socialArchiveDelIds
|
||||
*/
|
||||
void deleteByIds(@Param("ids")List<Long> socialArchiveDelIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -101,6 +101,18 @@
|
|||
</if>
|
||||
</delete>
|
||||
|
||||
<delete id="deleteByIds">
|
||||
UPDATE hrsa_social_archives
|
||||
SET delete_type = 1
|
||||
WHERE delete_type = 0
|
||||
<if test="ids != null and ids.size()>0">
|
||||
AND id IN
|
||||
<foreach collection="ids" open="(" item="id" separator="," close=")">
|
||||
#{id}
|
||||
</foreach>
|
||||
</if>
|
||||
</delete>
|
||||
|
||||
<!-- 根据人员id和个税扣缴义务人删除档案 -->
|
||||
<update id="deleteByEmployeeIdAndPayOrg" parameterType="com.engine.salary.entity.siarchives.po.InsuranceArchivesSocialSchemePO">
|
||||
UPDATE hrsa_social_archives
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.engine.salary.mapper.sys;
|
||||
|
||||
import com.engine.salary.sys.entity.po.SalarySysConfPO;
|
||||
import org.apache.ibatis.annotations.Param;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
|
|
@ -73,4 +74,6 @@ public interface SalarySysConfMapper {
|
|||
* @date 2022/11/9 21:09
|
||||
*/
|
||||
Date getTaxDeclarationRebootDate();
|
||||
|
||||
List<SalarySysConfPO> getListByCodes(@Param("codes") List<String> codes);
|
||||
}
|
||||
|
|
@ -237,4 +237,17 @@
|
|||
select update_time from HRSA_SALARY_SYS_CONF WHERE conf_key = 'taxDeclarationFunction'
|
||||
</select>
|
||||
|
||||
<select id="getListByCodes" resultType="com.engine.salary.sys.entity.po.SalarySysConfPO">
|
||||
SELECT
|
||||
<include refid="baseColumns"/>
|
||||
FROM hrsa_salary_sys_conf t
|
||||
WHERE delete_type = 0
|
||||
<if test="codes != null and codes.size()>0">
|
||||
and conf_key IN
|
||||
<foreach collection="codes" open="(" close=")" item="code" separator=",">
|
||||
#{code}
|
||||
</foreach>
|
||||
</if>
|
||||
</select>
|
||||
|
||||
</mapper>
|
||||
|
|
@ -95,4 +95,10 @@ public interface SIArchivesService {
|
|||
* 处理福利档案增量数据
|
||||
*/
|
||||
void handleChangeData(long currentEmployeeId);
|
||||
|
||||
/**
|
||||
* 删除档案
|
||||
* @param longs
|
||||
*/
|
||||
void deleteArchive(Collection<Long> longs);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -225,4 +225,10 @@ public interface SalaryArchiveService {
|
|||
* @param currentEmployeeId
|
||||
*/
|
||||
void handleChangeData(Long currentEmployeeId);
|
||||
|
||||
/**
|
||||
* 删除薪资档案
|
||||
* @param salaryArchiveIds
|
||||
*/
|
||||
void deleteSalaryArchive(Collection<Long> salaryArchiveIds);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.engine.salary.service;
|
||||
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam;
|
||||
|
||||
|
|
@ -28,7 +29,7 @@ public interface SalaryBillBaseSetService {
|
|||
// SalaryBillAckFeedbackDTO getAckFeedbackSetting();
|
||||
|
||||
/**
|
||||
* 保存工资单水印设置
|
||||
* 保存工资单模板基础设置
|
||||
*
|
||||
* @param saveParam
|
||||
* @return
|
||||
|
|
@ -41,4 +42,10 @@ public interface SalaryBillBaseSetService {
|
|||
* @return
|
||||
*/
|
||||
String previewWaterMark(Map<String, Object> wmSetting);
|
||||
|
||||
/**
|
||||
* 获取默认工资单确认反馈设置
|
||||
* @return
|
||||
*/
|
||||
SalaryBillAckFeedbackDTO getDefaultAckFeedbackSetting();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,6 +30,18 @@ public interface SalaryBillService {
|
|||
*/
|
||||
List<Map<String, Object>> getSendInfoList(Long sendId, List<Long> ids);
|
||||
|
||||
/**
|
||||
* 确认工资单
|
||||
* @param salaryInfoId
|
||||
*/
|
||||
void confirmSalaryBill(Long salaryInfoId);
|
||||
|
||||
/**
|
||||
* 工资单反馈
|
||||
* @param salaryInfoId
|
||||
*/
|
||||
void feedBackSalaryBill(Long salaryInfoId);
|
||||
|
||||
/**
|
||||
* 工资单撤回
|
||||
*
|
||||
|
|
|
|||
|
|
@ -2,6 +2,7 @@ package com.engine.salary.service;
|
|||
|
||||
import com.engine.salary.entity.salaryBill.dto.*;
|
||||
import com.engine.salary.entity.salaryBill.param.*;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
|
||||
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
|
||||
|
|
@ -187,4 +188,32 @@ public interface SalarySendService {
|
|||
* @param param
|
||||
*/
|
||||
Boolean checkMobileCode(SMSCodeCheckParam param);
|
||||
|
||||
/**
|
||||
* 获取工资单id下需要发放的工资单明细
|
||||
* @return
|
||||
*/
|
||||
List<SalarySendInfoPO> getNeedSendInfoList(List<Long> salarySendIds);
|
||||
|
||||
/**
|
||||
* 获取这些模板下未发放完的工资单
|
||||
* @param salarySobIds
|
||||
* @return
|
||||
*/
|
||||
List<SalarySendPO> getNeedSendListBySalarySobIds(List<Long> salarySobIds);
|
||||
|
||||
/**
|
||||
* 获取所有为确认的工资单
|
||||
* @return
|
||||
* @return
|
||||
*/
|
||||
List<SalarySendInfoPO> listUnConfirmedSendInfo(List<Long> salarySobIds);
|
||||
|
||||
/**
|
||||
* 自动确认工资单
|
||||
* @param needAutoIds
|
||||
*/
|
||||
void autoConfirmSalaryBill(List<Long> needAutoIds);
|
||||
|
||||
List<SalarySendPO> getByIds(List<Long> salarySendId);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -84,13 +84,21 @@ public interface SalaryTemplateService {
|
|||
List<Map<String, Object>> selectSalarySobList();
|
||||
|
||||
/**
|
||||
* 获取薪资项目设置
|
||||
* 获取薪资项目设置(不包含已隐藏的薪资项目、分类)
|
||||
*
|
||||
* @param salarySobId
|
||||
* @return
|
||||
*/
|
||||
List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSet(Long salarySobId, boolean isReplenish);
|
||||
|
||||
/**
|
||||
* 获取薪资项目设置(包含已隐藏的薪资项目、分类)
|
||||
*
|
||||
* @param salarySobId
|
||||
* @return
|
||||
*/
|
||||
List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish);
|
||||
|
||||
/**
|
||||
* 获取默认工资单模板
|
||||
*
|
||||
|
|
@ -112,4 +120,15 @@ public interface SalaryTemplateService {
|
|||
* @return
|
||||
*/
|
||||
PageInfo<SalaryTemplateListDTO> listPage(SalaryTemplateQueryParam queryParam);
|
||||
|
||||
/**
|
||||
* 获取所有设置了定时发送的默认工资单模板
|
||||
*/
|
||||
List<SalaryTemplatePO> getAutoSendTemplate();
|
||||
|
||||
/**
|
||||
* 获取所有开启了工资单确认反馈的默认工资单模板
|
||||
* @return
|
||||
*/
|
||||
List<SalaryTemplatePO> listNeedAckDefaultTemplate();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -637,11 +637,11 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction
|
|||
@Override
|
||||
public String autoAddAll(Date yearMonth, Boolean isAdmin) {
|
||||
String cacheKey = "addUpDeduction_autoAddAll_processing";
|
||||
Object objVal = Util_DataCache.getObjVal( cacheKey);
|
||||
if(objVal != null){
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "一键累计过于频繁,请稍后再试"));
|
||||
}
|
||||
try {
|
||||
Object objVal = Util_DataCache.getObjVal( cacheKey);
|
||||
if(objVal != null){
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(135788, "一键累计过于频繁,请稍后再试"));
|
||||
}
|
||||
Util_DataCache.setObjVal(cacheKey,true );
|
||||
//如果是定时任务直接查询所有,isAdmin传true
|
||||
boolean isChief = Boolean.TRUE.equals(isAdmin)
|
||||
|
|
@ -717,14 +717,15 @@ public class AddUpDeductionServiceImpl extends Service implements AddUpDeduction
|
|||
AddUpDeduction oldInfo = Optional.ofNullable(currentEmpInfo.get(employeeId))
|
||||
.flatMap(c -> c.stream().findFirst())
|
||||
.orElse(null);
|
||||
Date now = new Date();
|
||||
if (oldInfo == null) {
|
||||
addUpDeduction.setCreateTime(yearMonth);
|
||||
addUpDeduction.setUpdateTime(yearMonth);
|
||||
addUpDeduction.setCreateTime(now);
|
||||
addUpDeduction.setUpdateTime(now);
|
||||
insertList.add(encryptUtil.encrypt(addUpDeduction, AddUpDeduction.class));
|
||||
} else {
|
||||
addUpDeduction.setId(oldInfo.getId());
|
||||
addUpDeduction.setCreateTime(oldInfo.getCreateTime());
|
||||
addUpDeduction.setUpdateTime(yearMonth);
|
||||
addUpDeduction.setUpdateTime(now);
|
||||
updateList.add(encryptUtil.encrypt(addUpDeduction, AddUpDeduction.class));
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -27,6 +27,8 @@ import com.engine.salary.mapper.siarchives.SocialSchemeMapper;
|
|||
import com.engine.salary.service.SIArchivesService;
|
||||
import com.engine.salary.service.TaxAgentEmpChangeService;
|
||||
import com.engine.salary.service.TaxAgentService;
|
||||
import com.engine.salary.sys.constant.SalarySysConstant;
|
||||
import com.engine.salary.sys.entity.po.SalarySysConfPO;
|
||||
import com.engine.salary.sys.entity.vo.OrderRuleVO;
|
||||
import com.engine.salary.sys.service.SalarySysConfService;
|
||||
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
|
||||
|
|
@ -349,6 +351,56 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
|
|||
log.info("各操作计时 {}", sw.prettyPrint());
|
||||
Util_DataCache.setObjVal("welfareChangeSign", "0");
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除档案
|
||||
* @param archiveIds
|
||||
*/
|
||||
@Override
|
||||
public void deleteArchive(Collection<Long> archiveIds) {
|
||||
if(CollectionUtils.isEmpty(archiveIds)){
|
||||
throw new SalaryRunTimeException("社保福利档案参数为空!");
|
||||
}
|
||||
SalarySysConfPO canDelete = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ARCHIVE_DELETE);
|
||||
if(Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(),"0") ){
|
||||
throw new SalaryRunTimeException("不允许删除社保福利档案,请先开启删除档案规则配置!");
|
||||
}
|
||||
List<InsuranceArchivesBaseInfoPO> insuranceArchivesList = getInsuranceBaseInfoMapper().listByIds(archiveIds);
|
||||
|
||||
//查询当前登录人员管理的个税扣缴义务人
|
||||
List<Long> canDeleteTaxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID())
|
||||
.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||||
boolean err = insuranceArchivesList.stream().anyMatch(po -> !canDeleteTaxAgentIds.contains(po.getPaymentOrganization()));
|
||||
|
||||
if (CollectionUtils.isEmpty(insuranceArchivesList) || err) {
|
||||
throw new SalaryRunTimeException("社保档案不存在,或没有权限删除该社保案!");
|
||||
}
|
||||
|
||||
Optional<InsuranceArchivesBaseInfoPO> fixedList = insuranceArchivesList.stream().filter(archive -> !StringUtils.equals(archive.getRunStatus(), EmployeeStatusEnum.STAY_ADD.getValue())
|
||||
&& !StringUtils.equals(archive.getRunStatus(), EmployeeStatusEnum.STOP_PAYMENT_FROM_ADD.getValue())).findFirst();
|
||||
if(fixedList.isPresent()){
|
||||
throw new SalaryRunTimeException("在缴员工、待减员、停止缴纳-来自待减员,无法删除薪资档案!");
|
||||
}
|
||||
List<Long> archiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getId).collect(Collectors.toList());
|
||||
List<Long> socialArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getSocialArchivesId).collect(Collectors.toList());
|
||||
List<Long> fundArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getFundArchivesId).collect(Collectors.toList());
|
||||
List<Long> otherArchiveDelIds = insuranceArchivesList.stream().map(InsuranceArchivesBaseInfoPO::getOtherArchivesId).collect(Collectors.toList());
|
||||
|
||||
// 删除社保档案主表及3张明细表数据
|
||||
if(CollectionUtils.isNotEmpty(archiveDelIds)){
|
||||
getInsuranceBaseInfoMapper().deleteByIds(archiveDelIds);
|
||||
}
|
||||
if(CollectionUtils.isNotEmpty(socialArchiveDelIds)){
|
||||
getSocialSchemeMapper().deleteByIds(socialArchiveDelIds);
|
||||
}
|
||||
if(CollectionUtils.isNotEmpty(fundArchiveDelIds)){
|
||||
getFundSchemeMapper().deleteByIds(fundArchiveDelIds);
|
||||
}
|
||||
if(CollectionUtils.isNotEmpty(otherArchiveDelIds)){
|
||||
getOtherSchemeMapper().deleteByIds(otherArchiveDelIds);
|
||||
}
|
||||
}
|
||||
|
||||
//新增社保、公积金、其他福利档案、福利档案基础信息
|
||||
private List<InsuranceArchivesBaseInfoPO> addNewInsuranceBaseInfo(List<InsuranceArchivesBaseInfoPO> baseInfoPOList, Long currentEmployeeId) {
|
||||
List<InsuranceArchivesSocialSchemePO> socialList = new ArrayList<>();
|
||||
|
|
@ -488,7 +540,10 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
|
|||
param.setDimissionDateEnd(param.getDimissionDate()[1]);
|
||||
}
|
||||
if (Objects.equals("fromQuickSearch", param.getDataSource())) {
|
||||
request.setStatuses(param.getStatuses());
|
||||
// request.setStatuses(param.getStatuses());
|
||||
if (StringUtils.isNotBlank(param.getStatusesStr())) {
|
||||
request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList()));
|
||||
}
|
||||
request.setKeyword(param.getUserName());
|
||||
} else {
|
||||
request = param;
|
||||
|
|
|
|||
|
|
@ -31,6 +31,7 @@ import com.engine.salary.util.page.PageInfo;
|
|||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang.StringUtils;
|
||||
import org.apache.ibatis.session.SqlSession;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import weaver.conn.mybatis.MyBatisFactory;
|
||||
|
|
@ -103,7 +104,9 @@ public class SIImportServiceImpl extends Service implements SIImportService {
|
|||
param.setDimissionDateEnd(param.getDimissionDate()[1]);
|
||||
}
|
||||
if (Objects.equals("fromQuickSearch", param.getDataSource())) {
|
||||
request.setStatuses(param.getStatuses());
|
||||
if (StringUtils.isNotBlank(param.getStatusesStr())) {
|
||||
request.setStatuses(Arrays.stream(param.getStatusesStr().split(",")).map(String::new).collect(Collectors.toList()));
|
||||
}
|
||||
request.setKeyword(param.getUserName());
|
||||
request.setStartNum(param.getStartNum());
|
||||
request.setPageSize(param.getPageSize());
|
||||
|
|
|
|||
|
|
@ -25,6 +25,7 @@ import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
|
|||
import com.engine.salary.enums.salaryformula.SalaryFormulaReferenceEnum;
|
||||
import com.engine.salary.formlua.entity.standard.ExcelResult;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
|
|
@ -309,7 +310,7 @@ public class SalaryAcctCalculateServiceImpl extends Service implements SalaryAcc
|
|||
*/
|
||||
private String handleConsolidatedTax(String resultValue, SalaryItemPO salaryItemPO, SalaryAcctCalculateBO salaryAcctCalculateBO, List<SalaryAcctEmployeePO> otherSalaryAcctEmployeePOS, List<SalaryAcctResultPO> otherSalaryAcctResultPOS) {
|
||||
// 如果相同税款所属期内没有其他薪资核算人员,就不存在合并计税
|
||||
if (CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS) || CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) {
|
||||
if (salaryAcctCalculateBO.getTaxDeclarationFunction() == TaxDeclarationFunctionEnum.CLOSURE || CollectionUtils.isEmpty(otherSalaryAcctEmployeePOS) || CollectionUtils.isEmpty(otherSalaryAcctResultPOS)) {
|
||||
return resultValue;
|
||||
}
|
||||
// 相同税款所属期内其他薪资核算记录
|
||||
|
|
|
|||
|
|
@ -329,32 +329,32 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
|
|||
// 获取个税申报功能状态
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration();
|
||||
|
||||
if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.CLOSURE.getValue())) {
|
||||
// 关闭了个税申报功能
|
||||
// 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算
|
||||
SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream()
|
||||
.filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())
|
||||
&& e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1))))
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算")
|
||||
.replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString())
|
||||
.replace("{1}", salarySobCycleDTO.getTaxCycle().toString()));
|
||||
}
|
||||
// 如果有某个月(薪资所属期)已经归档了,不可以新建之前月份的薪资核算
|
||||
SalaryAcctRecordPO havaSalaryAcctRecordPO = salaryAcctRecords.stream()
|
||||
.filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue())
|
||||
&& e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1))))
|
||||
.findAny()
|
||||
.orElse(null);
|
||||
if (Objects.nonNull(havaSalaryAcctRecordPO)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98755, "薪资所属期{0}的薪资核算结果已经归档,不能新建薪资所属期{1}的薪资核算")
|
||||
.replace("{0}", SalaryDateUtil.localDate2YearMonth(havaSalaryAcctRecordPO.getSalaryMonth()).toString())
|
||||
.replace("{1}", salarySobCycleDTO.getSalaryMonth().toString()));
|
||||
}
|
||||
|
||||
}
|
||||
// if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.CLOSURE.getValue())) {
|
||||
// // 关闭了个税申报功能
|
||||
// // 如果某个月(薪资所属期)还未归档,不可以新建之后月份的薪资核算
|
||||
// SalaryAcctRecordPO notArchivedSalaryAcctRecordPO = salaryAcctRecords.stream()
|
||||
// .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.NOT_ARCHIVED.getValue())
|
||||
// && e.getSalaryMonth().before(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1))))
|
||||
// .findAny()
|
||||
// .orElse(null);
|
||||
// if (Objects.nonNull(notArchivedSalaryAcctRecordPO)) {
|
||||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98754, "薪资所属期{0}的薪资核算结果还未归档,不能新建薪资所属期{1}的薪资核算")
|
||||
// .replace("{0}", SalaryDateUtil.localDate2YearMonth(notArchivedSalaryAcctRecordPO.getTaxCycle()).toString())
|
||||
// .replace("{1}", salarySobCycleDTO.getTaxCycle().toString()));
|
||||
// }
|
||||
// // 如果有某个月(薪资所属期)已经归档了,不可以新建之前月份的薪资核算
|
||||
// SalaryAcctRecordPO havaSalaryAcctRecordPO = salaryAcctRecords.stream()
|
||||
// .filter(e -> Objects.equals(e.getStatus(), SalaryAcctRecordStatusEnum.ARCHIVED.getValue())
|
||||
// && e.getTaxCycle().after(SalaryDateUtil.localDateToDate(salarySobCycleDTO.getSalaryMonth().atDay(1))))
|
||||
// .findAny()
|
||||
// .orElse(null);
|
||||
// if (Objects.nonNull(havaSalaryAcctRecordPO)) {
|
||||
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98755, "薪资所属期{0}的薪资核算结果已经归档,不能新建薪资所属期{1}的薪资核算")
|
||||
// .replace("{0}", SalaryDateUtil.localDate2YearMonth(havaSalaryAcctRecordPO.getSalaryMonth()).toString())
|
||||
// .replace("{1}", salarySobCycleDTO.getSalaryMonth().toString()));
|
||||
// }
|
||||
//
|
||||
// }
|
||||
if (taxDeclarationFunctionEnum.getValue().equals(TaxDeclarationFunctionEnum.OPEN.getValue())) {
|
||||
// 开启了个税申报功能
|
||||
// 如果某个月(税款所属期)已经归档了,不可以新建之前月份的薪资核算
|
||||
|
|
|
|||
|
|
@ -35,6 +35,7 @@ import com.engine.salary.report.service.impl.SalaryStatisticsReportServiceImpl;
|
|||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.sys.constant.SalarySysConstant;
|
||||
import com.engine.salary.sys.entity.po.SalarySysConfPO;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
import com.engine.salary.sys.service.SalarySysConfService;
|
||||
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
|
|
@ -754,7 +755,9 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
BlockingDeque<SalaryAcctCalculateBO.Result> calculateResults = new LinkedBlockingDeque<>(partition.size());
|
||||
// 12.3、生成本次运算的key
|
||||
String calculateKey = UUID.randomUUID().toString();
|
||||
// 12.4、多线程运算,运算结果存放在临时表中
|
||||
// 12.4、是否采用系统算税
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunction = getSalarySysConfService(user).getTaxDeclaration();
|
||||
// 12.5、多线程运算,运算结果存放在临时表中
|
||||
for (List<SalaryAcctEmployeePO> acctEmployeePOS : partition) {
|
||||
SalaryAcctCalculateBO salaryAcctCalculateBO = new SalaryAcctCalculateBO()
|
||||
.setSalaryAcctRecordPO(salaryAcctRecordPO)
|
||||
|
|
@ -774,7 +777,8 @@ public class SalaryAcctResultServiceImpl extends Service implements SalaryAcctRe
|
|||
.setIssuedFieldIds(issuedFieldIds)
|
||||
.setChildMonitor(childMonitor)
|
||||
.setResults(calculateResults)
|
||||
.setCalculateKey(calculateKey);
|
||||
.setCalculateKey(calculateKey)
|
||||
.setTaxDeclarationFunction(taxDeclarationFunction);
|
||||
List<SalarySobBackItemPO> finalSalarySobBackItems = salarySobBackItems;
|
||||
LocalRunnable localRunnable = new LocalRunnable() {
|
||||
@Override
|
||||
|
|
|
|||
|
|
@ -388,8 +388,8 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch
|
|||
// 4.注释
|
||||
List<ExcelComment> excelComments = Lists.newArrayList();
|
||||
String requireI18n = SalaryI18nUtil.getI18nLabel(100344, "必填");
|
||||
excelComments.add(new ExcelComment(0, 0, 3, 2, requireI18n));
|
||||
excelComments.add(new ExcelComment(1, 0, 4, 2, requireI18n));
|
||||
excelComments.add(new ExcelComment(0, 0, 1, 2, requireI18n));
|
||||
excelComments.add(new ExcelComment(1, 0, 2, 2, requireI18n));
|
||||
//收入所得项目
|
||||
// List<String> incomeCategoryOptions = Arrays.stream(IncomeCategoryEnum.values()).map(e ->
|
||||
// SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel())
|
||||
|
|
@ -399,16 +399,16 @@ public class SalaryArchiveExcelServiceImpl extends Service implements SalaryArch
|
|||
// SalaryArchiveExcelBO.createExcelComment(excelComments, requireI18n + ',' + SalaryI18nUtil.getI18nLabel(127641, "多个账套之间用,分隔"), 0, 0, 3, 3);
|
||||
// int i = enableHr ? 10 : 9;
|
||||
if (isPendingList) {
|
||||
excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
// excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
} else if (isFixedList) {
|
||||
if (isInit) {
|
||||
excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(6, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(7, 0, 10, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(7, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(8, 0, 10, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
} else if (isSalaryItemAdjust) {
|
||||
excelComments.add(new ExcelComment(5, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化")));
|
||||
excelComments.add(new ExcelComment(6, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
excelComments.add(new ExcelComment(6, 0, 8, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,可填写如:入职,转正,调薪,调岗调薪,离职,其他,初始化")));
|
||||
excelComments.add(new ExcelComment(7, 0, 9, 2, SalaryI18nUtil.getI18nLabel(100458, "必填,格式样例为'2022-01-01'、'2022/1/1'")));
|
||||
}
|
||||
} else if (isSuspendList) {
|
||||
// SalaryArchiveExcelBO.createExcelComment(excelComments, SalaryI18nUtil.getI18nLabel(109736, "格式样例为'2022-01-01'、'2022/1/1'"), 0, 0, i + 1, i + 1);
|
||||
|
|
|
|||
|
|
@ -307,6 +307,37 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
|
|||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void deleteSalaryArchive(Collection<Long> salaryArchiveIds) {
|
||||
if(CollectionUtils.isEmpty(salaryArchiveIds)){
|
||||
throw new SalaryRunTimeException("薪资档案参数为空!");
|
||||
}
|
||||
SalarySysConfPO canDelete = getSalarySysConfService(user).getOneByCode(SalarySysConstant.SALARY_ARCHIVE_DELETE);
|
||||
if(Objects.isNull(canDelete) || StringUtils.equals(canDelete.getConfValue(),"0") ){
|
||||
throw new SalaryRunTimeException("不允许删除薪资档案,请先开启删除档案规则配置!");
|
||||
}
|
||||
List<SalaryArchivePO> salaryArchiveList = getSalaryArchiveMapper().listSome(SalaryArchivePO.builder().ids(salaryArchiveIds).build());
|
||||
|
||||
//查询当前登录人员管理的个税扣缴义务人
|
||||
List<Long> canDeleteTaxAgentIds = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID())
|
||||
.stream().map(TaxAgentPO::getId).collect(Collectors.toList());
|
||||
boolean err = salaryArchiveList.stream().anyMatch(po -> !canDeleteTaxAgentIds.contains(po.getTaxAgentId()));
|
||||
if(CollectionUtils.isEmpty(salaryArchiveList) || err){
|
||||
throw new SalaryRunTimeException("薪资档案不存在,或没有权限删除该薪资档案!");
|
||||
}
|
||||
Optional<SalaryArchivePO> fixedList = salaryArchiveList.stream().filter(archive -> !StringUtils.equals(archive.getRunStatus(), SalaryArchiveStatusEnum.PENDING.getValue())
|
||||
&& !StringUtils.equals(archive.getRunStatus(), SalaryArchiveStatusEnum.STOP_FROM_PENDING.getValue())).findFirst();
|
||||
if(fixedList.isPresent()){
|
||||
throw new SalaryRunTimeException("发薪员工、待停薪员工、停薪_来自待停薪,无法删除薪资档案!");
|
||||
}
|
||||
List<Long> deleteIds = salaryArchiveList.stream().map(SalaryArchivePO::getId).collect(Collectors.toList());
|
||||
// 删除薪资档案及档案项目
|
||||
if(CollectionUtils.isNotEmpty(deleteIds)){
|
||||
getSalaryArchiveMapper().deleteByIds(deleteIds);
|
||||
getSalaryArchiveItemMapper().deleteBySalaryArchiveId(deleteIds);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<SalaryArchiveListDTO> list(SalaryArchiveQueryParam queryParam) {
|
||||
|
|
|
|||
|
|
@ -6,6 +6,7 @@ import com.engine.core.impl.Service;
|
|||
import com.engine.salary.constant.SalaryDefaultTenantConstant;
|
||||
import com.engine.salary.entity.datacollection.DataCollectionEmployee;
|
||||
import com.engine.salary.entity.salaryBill.bo.SalaryBillBO;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam;
|
||||
import com.engine.salary.entity.salaryBill.po.SalaryBillWatermarkPO;
|
||||
|
|
@ -13,7 +14,12 @@ import com.engine.salary.enums.salarybill.SalaryTemplateWatermarkTypeEnum;
|
|||
import com.engine.salary.service.SalaryBillBaseSetService;
|
||||
import com.engine.salary.service.SalaryBillWatermarkService;
|
||||
import com.engine.salary.service.SalaryEmployeeService;
|
||||
import com.engine.salary.sys.constant.SalarySysConstant;
|
||||
import com.engine.salary.sys.entity.po.SalarySysConfPO;
|
||||
import com.engine.salary.sys.service.SalarySysConfService;
|
||||
import com.engine.salary.sys.service.impl.SalarySysConfServiceImpl;
|
||||
import com.engine.salary.util.JsonUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.google.common.collect.Lists;
|
||||
import dm.jdbc.util.IdGenerator;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
|
|
@ -21,10 +27,9 @@ import org.apache.commons.lang.math.NumberUtils;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
import weaver.hrm.User;
|
||||
|
||||
import java.util.Date;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.*;
|
||||
|
||||
import static com.engine.salary.sys.constant.SalarySysConstant.*;
|
||||
|
||||
/**
|
||||
* @Description: 工资单水印
|
||||
|
|
@ -42,6 +47,10 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
|
|||
return ServiceUtil.getService(SalaryEmployeeServiceImpl.class, user);
|
||||
}
|
||||
|
||||
public SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryBillWatermarkDTO getWatermarkSetting() {
|
||||
List<SalaryBillWatermarkPO> list = getSalaryBillWatermarkService(user).listAll();
|
||||
|
|
@ -96,23 +105,16 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
|
|||
.build());
|
||||
|
||||
|
||||
// // 工资单确认和反馈 ===========================================================
|
||||
// new LambdaUpdateChainWrapper<>(salaryBillAckFeedbackMapper)
|
||||
// .eq(SalaryBillAckFeedbackPO::getDeleteType, 0)
|
||||
// .eq(SalaryBillAckFeedbackPO::getTenantKey, tenantKey)
|
||||
// .set(SalaryBillAckFeedbackPO::getDeleteType, 3)
|
||||
// .update();
|
||||
// salaryBillAckFeedbackMapper.insert(SalaryBillAckFeedbackPO.builder()
|
||||
// .id(IdGenerator.generate())
|
||||
// .ackStatus(saveParam.getAckStatus() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)
|
||||
// .feedbackStatus(saveParam.getFeedbackStatus() ? NumberUtils.INTEGER_ONE : NumberUtils.INTEGER_ZERO)
|
||||
// .createTime(now)
|
||||
// .updateTime(now)
|
||||
// .creator(employeeId)
|
||||
// .deleteType(NumberUtils.INTEGER_ZERO)
|
||||
// .tenantKey(tenantKey)
|
||||
// .build());
|
||||
|
||||
// 工资单确认和反馈 ===========================================================
|
||||
SalaryBillAckFeedbackDTO ackFeedbackSetting = saveParam.getAckFeedbackSetting();
|
||||
// 1.保存确认反馈开关状态
|
||||
getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAckStatus(), SALARY_SEND_FEEDBACK, "工资单确认反馈状态", "billSend");
|
||||
if(StringUtils.equals(ackFeedbackSetting.getAckStatus(),"1")){
|
||||
// 2.保存反馈地址
|
||||
getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getFeedBackUrl(), SALARY_FEEDBACK_URL, "工资单反馈地址", "billSend");
|
||||
// 3.保存自动确认时间
|
||||
getSalarySysConfService(user).saveSettingByType(ackFeedbackSetting.getAutoAckDays().toString(), SALARY_AUTO_ACK_DAYS, "工资单反馈自动确认", "billSend");
|
||||
}
|
||||
return StringUtils.EMPTY;
|
||||
}
|
||||
|
||||
|
|
@ -126,4 +128,30 @@ public class SalaryBillBaseSetServiceImpl extends Service implements SalaryBillB
|
|||
DataCollectionEmployee simpleEmployee = getSalaryEmployeeService(user).getEmployeeById(Long.valueOf(user.getUID()));
|
||||
return SalaryBillBO.handleWmText(wmText, wmTextFieldIds, simpleEmployee);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryBillAckFeedbackDTO getDefaultAckFeedbackSetting() {
|
||||
// 获取反馈开启状态、自动确认时长、反馈地址
|
||||
List<String> codes = Arrays.asList(SalarySysConstant.SALARY_SEND_FEEDBACK, SalarySysConstant.SALARY_AUTO_ACK_DAYS, SalarySysConstant.SALARY_FEEDBACK_URL);
|
||||
List<SalarySysConfPO> sysConfList= getSalarySysConfService(user).getListByCodes(codes);
|
||||
Map<String, String> sysConfMap = SalaryEntityUtil.convert2Map(sysConfList, SalarySysConfPO::getConfKey, SalarySysConfPO::getConfValue);
|
||||
|
||||
SalaryBillAckFeedbackDTO defaultAckFeedBackDTO = SalaryBillAckFeedbackDTO.builder().build();
|
||||
String ackStatus = sysConfMap.getOrDefault(SalarySysConstant.SALARY_SEND_FEEDBACK, "0");
|
||||
if (StringUtils.equals(ackStatus,"0")) {
|
||||
// 未开启工资单确认
|
||||
defaultAckFeedBackDTO.setAckStatus("0");
|
||||
defaultAckFeedBackDTO.setAutoAckDays(0);
|
||||
defaultAckFeedBackDTO.setFeedBackUrl("/");
|
||||
return defaultAckFeedBackDTO;
|
||||
}
|
||||
defaultAckFeedBackDTO.setAckStatus(ackStatus);
|
||||
// 获取超时自动确认时间
|
||||
Integer autoAckDays = Integer.valueOf(sysConfMap.getOrDefault(SalarySysConstant.SALARY_AUTO_ACK_DAYS, "7"));
|
||||
defaultAckFeedBackDTO.setAutoAckDays(autoAckDays);
|
||||
// 反馈地址
|
||||
String feedbackUrl = sysConfMap.getOrDefault(SalarySysConstant.SALARY_FEEDBACK_URL, "");
|
||||
defaultAckFeedBackDTO.setFeedBackUrl(feedbackUrl);
|
||||
return defaultAckFeedBackDTO;
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,9 +24,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
|
|||
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||||
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
|
||||
import com.engine.salary.enums.salarybill.MessageChannelEnum;
|
||||
import com.engine.salary.enums.salarybill.SalarySendStatusEnum;
|
||||
import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum;
|
||||
import com.engine.salary.enums.salarybill.*;
|
||||
import com.engine.salary.enums.salarysend.SalarySendGrantTypeEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.salarybill.SalarySendInfoMapper;
|
||||
|
|
@ -42,6 +40,7 @@ import com.weaver.util.threadPool.entity.LocalRunnable;
|
|||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.hrm.User;
|
||||
|
|
@ -426,6 +425,28 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
|
|||
.buildDetailList(list, salaryAcctEmployees, salaryAcctResultValues);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void confirmSalaryBill(Long salaryInfoId) {
|
||||
SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(salaryInfoId);
|
||||
if(ObjectUtils.isEmpty(sendInfoPO)){
|
||||
throw new SalaryRunTimeException("工资单不存在或已被删除!");
|
||||
}
|
||||
sendInfoPO.setBillConfirmStatus(BillConfimStatusEnum.CONFIRMED.getValue());
|
||||
sendInfoPO.setUpdateTime(new Date());
|
||||
getSalarySendInfoMapper().updateIgnoreNull(sendInfoPO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void feedBackSalaryBill(Long salaryInfoId) {
|
||||
SalarySendInfoPO sendInfoPO = getSalarySendInfoMapper().getById(salaryInfoId);
|
||||
if(ObjectUtils.isEmpty(sendInfoPO)){
|
||||
throw new SalaryRunTimeException("工资单不存在或已被删除!");
|
||||
}
|
||||
sendInfoPO.setBillConfirmStatus(BillConfimStatusEnum.FEEDBACK.getValue());
|
||||
sendInfoPO.setUpdateTime(new Date());
|
||||
getSalarySendInfoMapper().updateIgnoreNull(sendInfoPO);
|
||||
}
|
||||
|
||||
public List<Map<String, Object>> getSendInfoList(Long sendId, List<Long> ids) {
|
||||
|
||||
SalarySendPO salarySend = getSalarySendMapper().getById(sendId);
|
||||
|
|
@ -631,6 +652,9 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
|
|||
po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue());
|
||||
po.setSendTime(sendTime);
|
||||
po.setSalaryTemplate(JsonUtil.toJsonString(salaryTemplate));
|
||||
po.setBillReadStatus(BillReadStatusEnum.UNREAD.getValue());
|
||||
po.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getValue());
|
||||
po.setSendEmployeeId(Long.valueOf(user.getUID()));
|
||||
partition.forEach(idsp -> {
|
||||
salarySendInfoMapper.updateGrantWithdraw(po, salarySend.getId(), Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), idsp);
|
||||
});
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService
|
|||
|
||||
|
||||
private SysSalaryItemBiz sysSalaryItemBiz = new SysSalaryItemBiz();
|
||||
//
|
||||
// @Autowired
|
||||
// private LoggerTemplate salaryItemLoggerTemplate;
|
||||
|
||||
@Override
|
||||
|
|
@ -140,27 +140,13 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService
|
|||
.sorted(new Comparator<SalaryItemPO>() {
|
||||
@Override
|
||||
public int compare(SalaryItemPO o1, SalaryItemPO o2) {
|
||||
if(o1 == null)
|
||||
return 1;
|
||||
if(o2 == null)
|
||||
return -1;
|
||||
if(o1 == null && o2 == null)
|
||||
return 0;
|
||||
if(o1.getSortedIndex() == null && o2.getSortedIndex() == null){
|
||||
Integer systemType1=o1.getSystemType();
|
||||
Integer systemType2=o2.getSystemType();
|
||||
if(systemType1 == null)
|
||||
systemType1=0;
|
||||
if(systemType2 == null)
|
||||
systemType2=0;
|
||||
Integer systemType1=o1.getSystemType() == null ? 0 : o1.getSystemType();
|
||||
Integer systemType2=o2.getSystemType() == null ? 0 : o2.getSystemType();
|
||||
return systemType1.compareTo(systemType2);
|
||||
}else{
|
||||
Integer sortedIndex1=o1.getSortedIndex();
|
||||
Integer sortedIndex2=o2.getSortedIndex();
|
||||
if(sortedIndex1 == null)
|
||||
sortedIndex1=0;
|
||||
if(sortedIndex2 == null)
|
||||
sortedIndex2=0;
|
||||
Integer sortedIndex1=o1.getSortedIndex() == null ? 0 : o1.getSortedIndex();
|
||||
Integer sortedIndex2=o2.getSortedIndex() == null ? 0 : o2.getSortedIndex();
|
||||
return sortedIndex2.compareTo(sortedIndex1);
|
||||
}
|
||||
}
|
||||
|
|
@ -203,8 +189,8 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService
|
|||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98326, "薪资项目名称已存在,请重新命名"));
|
||||
}
|
||||
// 名称不能和已有的系统薪资项目重名
|
||||
List<SysSalaryItemPO> sysSalaryItemPOS = sysSalaryItemBiz.listSome(SysSalaryItemPO.builder().name(saveParam.getName()).build());
|
||||
if (CollectionUtils.isNotEmpty(sysSalaryItemPOS)) {
|
||||
SysSalaryItemPO sysSalaryItem = sysSalaryItemBiz.selectOneByName(saveParam.getName());
|
||||
if (sysSalaryItem != null) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98328, "自定义薪资项目的名称不能和系统薪资项目的名称重名"));
|
||||
}
|
||||
SalaryItemPO salaryItemPO = SalaryItemBO.convert2SalaryItemPO(saveParam, (long) user.getUID());
|
||||
|
|
|
|||
|
|
@ -1,7 +1,7 @@
|
|||
package com.engine.salary.service.impl;
|
||||
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import cn.hutool.core.lang.Validator;
|
||||
import com.alibaba.fastjson.JSON;
|
||||
import com.alibaba.fastjson.JSONArray;
|
||||
import com.api.formmode.mybatis.util.SqlProxyHandle;
|
||||
import com.cloudstore.dev.api.bean.MessageBean;
|
||||
|
|
@ -37,6 +37,8 @@ import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
|||
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
|
||||
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
|
||||
import com.engine.salary.enums.salaryarchive.SalaryArchiveFieldTypeEnum;
|
||||
import com.engine.salary.enums.salarybill.BillConfimStatusEnum;
|
||||
import com.engine.salary.enums.salarybill.BillReadStatusEnum;
|
||||
import com.engine.salary.enums.salarybill.SalarySendStatusEnum;
|
||||
import com.engine.salary.enums.salarybill.SalaryTemplateReplenishRuleEnum;
|
||||
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
||||
|
|
@ -63,6 +65,7 @@ import com.google.common.collect.Lists;
|
|||
import dm.jdbc.util.IdGenerator;
|
||||
import org.apache.commons.beanutils.BeanUtils;
|
||||
import org.apache.commons.collections.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
|
|
@ -417,11 +420,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
}
|
||||
Long salaryAcctId = salarySend.getSalaryAccountingId();
|
||||
SalarySobCycleDTO salarySobCycleDTO = getSalaryAcctRecordService(user).getSalarySobCycleById(salaryAcctId);
|
||||
// SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
|
||||
// List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).listBySalarySobIds(Collections.singletonList(salarySobCycleDTO.getSalarySobId()));
|
||||
// // 是否有回算记录
|
||||
// boolean haveBackCalc = salaryAcctRecordPOS.stream().filter(PO -> Objects.equals(PO.getBackCalcStatus(), NumberUtils.INTEGER_ONE) &&
|
||||
// Objects.equals(sdf.format(PO.getSalaryMonth()), SalaryDateUtil.MONTH_FORMATTER.format(salarySobCycleDTO.getSalaryMonth()))).collect(Collectors.toList()).size() > 0;
|
||||
String template = "";
|
||||
// 获取默认模板
|
||||
List<SalaryTemplatePO> salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySend.getSalarySobId()));
|
||||
|
|
@ -475,6 +473,16 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "当前账号无法查看此工资单"));
|
||||
}
|
||||
SalarySendInfoPO salarySendInfo = salarySendInfos.get(0);
|
||||
// 获取默认模板信息
|
||||
SalarySendPO salarySendPO = getSalarySendMapper().getById(salarySendInfo.getSalarySendId());
|
||||
if(ObjectUtils.isEmpty(salarySendPO))
|
||||
throw new SalaryRunTimeException("工资单不存在");
|
||||
// 更新查看状态
|
||||
if (salarySendInfo.getBillReadStatus() == null || NumberUtils.compare(salarySendInfo.getBillReadStatus(),BillReadStatusEnum.UNREAD.getValue()) == 0) {
|
||||
salarySendInfo.setBillReadStatus(BillReadStatusEnum.READED.getValue());
|
||||
salarySendInfo.setUpdateTime(new Date());
|
||||
getSalarySendInfoMapper().updateIgnoreNull(salarySendInfo);
|
||||
}
|
||||
// List<SalarySendPO> salarySends = new LambdaQueryChainWrapper<>(mapper)
|
||||
// .eq(SalarySendPO::getDeleteType, 0)
|
||||
// .eq(SalarySendPO::getTenantKey, currentTenantKey)
|
||||
|
|
@ -598,6 +606,13 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
handleSalaryWatermark(salaryTemplate, salarySendInfo, currentEmployeeId);
|
||||
map.put("salaryTemplate", salaryTemplate);
|
||||
map.put("salaryAcctResult", salaryAcctResultS);
|
||||
// 工资单发送人、是否已确认
|
||||
if (NumberUtils.compare(salaryTemplate.getAckFeedbackStatus(),1) == 0) {
|
||||
map.put("confirmStatus", salarySendInfo.getBillConfirmStatus() == null ? "0" : salarySendInfo.getBillConfirmStatus().toString());
|
||||
map.put("sendEmployeeId", salarySendInfo.getSendEmployeeId());
|
||||
}else{
|
||||
map.put("confirmStatus", "1");
|
||||
}
|
||||
|
||||
return map;
|
||||
}
|
||||
|
|
@ -611,7 +626,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
*/
|
||||
private void handleSalaryWatermark(SalaryTemplatePO salaryTemplate, SalarySendInfoPO salarySendInfo, Long currentEmployeeId) {
|
||||
SalaryBillWatermarkDTO salaryBillWatermark = JsonUtil.parseObject(salaryTemplate.getSalaryWatermark(), SalaryBillWatermarkDTO.class);
|
||||
if (Objects.isNull(salaryBillWatermark) || !salaryBillWatermark.getWatermarkStatus() ) {
|
||||
if (Objects.isNull(salaryBillWatermark) || Boolean.FALSE.equals(salaryBillWatermark.getWatermarkStatus()) ) {
|
||||
return;
|
||||
}
|
||||
// 发送时已经处理好变量字段,可直接获取判断
|
||||
|
|
@ -643,8 +658,30 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
queryParam.setOrderRule(orderRule);
|
||||
|
||||
List<SalarySendInfoListDTO> page = salarySendInfoMapper.list(queryParam);
|
||||
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
|
||||
PageInfo<SalarySendInfoListDTO> pageInfo = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
|
||||
page, SalarySendInfoListDTO.class);
|
||||
SalarySendPO salarySendPO = getSalarySendMapper().getById(queryParam.getSalarySendId());
|
||||
if (ObjectUtils.isEmpty(salarySendPO))
|
||||
throw new SalaryRunTimeException("工资单不存在或已被删除");
|
||||
List<SalaryTemplatePO> salaryTemplates = getSalaryTemplateService(user).getDefaultTemplates(Collections.singletonList(salarySendPO.getSalarySobId()));
|
||||
Integer ackFeedbackStatus = salaryTemplates.get(0).getAckFeedbackStatus();
|
||||
if (ackFeedbackStatus!=null && NumberUtils.compare(ackFeedbackStatus,1) == 0) {
|
||||
// 默认为空时,未读未确认
|
||||
pageInfo.getList().stream().forEach(obj -> {
|
||||
SalarySendInfoListDTO dto = (SalarySendInfoListDTO) obj;
|
||||
if (StringUtils.isBlank( dto.getBillReadStatus() )){
|
||||
dto.setBillReadStatus(BillReadStatusEnum.UNREAD.getDefaultLabel());
|
||||
} else {
|
||||
dto.setBillReadStatus(BillReadStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillReadStatus()) ));
|
||||
}
|
||||
if (StringUtils.isBlank(dto.getBillConfirmStatus())){
|
||||
dto.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getDefaultLabel());
|
||||
} else {
|
||||
dto.setBillConfirmStatus(BillConfimStatusEnum.getDefaultLabelByValue( Integer.valueOf(dto.getBillConfirmStatus()) ));
|
||||
}
|
||||
});
|
||||
}
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
@ -728,6 +765,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
Map<String, Object> map = JsonUtil.parseMap(salaryTemplateContent, Object.class);
|
||||
return SalaryTemplatePO.builder()
|
||||
.id(Long.valueOf(map.getOrDefault("id", "0").toString()))
|
||||
.ackFeedbackStatus(Integer.valueOf(map.getOrDefault("ackFeedbackStatus", "0").toString()))
|
||||
.autoAckDays(Integer.valueOf(map.getOrDefault("autoAckDays", "0").toString()))
|
||||
.feedbackUrl(map.getOrDefault("feedbackUrl", "").toString())
|
||||
.name(map.getOrDefault("name", "").toString())
|
||||
.salarySobId(Long.valueOf(map.getOrDefault("salarySobId", "0").toString()))
|
||||
.useType(Integer.valueOf(map.getOrDefault("useType", "0").toString()))
|
||||
|
|
@ -960,9 +1000,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
if (isReplenish && StringUtils.isNotEmpty(salaryTemplate.getReplenishSalaryItemSetting())) {
|
||||
List<SalaryTemplateSalaryItemSetListDTO> salaryTemplateShowSetData = JsonUtil.parseList(salaryTemplate.getReplenishSalaryItemSetting(),
|
||||
SalaryTemplateSalaryItemSetListDTO.class);
|
||||
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e -> {
|
||||
salaryItems.addAll(e.getItems());
|
||||
});
|
||||
salaryTemplateShowSetData.stream().filter(f -> !f.getGroupId().equals(SalaryTemplateSalaryItemSetGroupConstant.EMPLOYEE_INFO_GROUP_ID)).forEach(e ->
|
||||
salaryItems.addAll(e.getItems())
|
||||
);
|
||||
}
|
||||
return salaryItems;
|
||||
}
|
||||
|
|
@ -1008,6 +1048,9 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
po.setSendStatus(SalarySendStatusEnum.ALREADYSEND.getValue());
|
||||
po.setSendTime(sendTime);
|
||||
po.setSalaryTemplate(JsonUtil.toJsonString(templatePO));
|
||||
po.setBillReadStatus(BillReadStatusEnum.UNREAD.getValue());
|
||||
po.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getValue());
|
||||
po.setSendEmployeeId(Long.valueOf(user.getUID()));
|
||||
salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, Arrays.asList(SalarySendStatusEnum.UNSEND.getValue(), SalarySendStatusEnum.WITHDRAW.getValue()), ids);
|
||||
|
||||
|
||||
|
|
@ -1242,6 +1285,8 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
// 撤回
|
||||
SalarySendInfoPO po = new SalarySendInfoPO();
|
||||
po.setSendStatus(SalarySendStatusEnum.WITHDRAW.getValue());
|
||||
po.setBillReadStatus(BillReadStatusEnum.UNREAD.getValue());
|
||||
po.setBillConfirmStatus(BillConfimStatusEnum.UNCONFIRMED.getValue());
|
||||
List<Integer> statusList = new ArrayList<>();
|
||||
statusList.add(SalarySendStatusEnum.ALREADYSEND.getValue());
|
||||
salarySendInfoMapper.updateGrantWithdraw(po, salarySendId, statusList, ids);
|
||||
|
|
@ -1440,7 +1485,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
if (Objects.isNull(salarySendPO)) {
|
||||
throw new SalaryRunTimeException("工资发放记录不存在或已被删除");
|
||||
}
|
||||
// return getSalaryAcctResultService(user).sumRow();
|
||||
|
||||
SalaryAcctResultQueryParam queryParam = SalaryAcctResultQueryParam.builder().salaryAcctRecordId(salarySendPO.getSalaryAccountingId()).build();
|
||||
// 查询薪资核算人员
|
||||
|
|
@ -1448,7 +1492,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
.listByResultQueryParam(queryParam);
|
||||
|
||||
if (org.apache.commons.collections4.CollectionUtils.isEmpty(salaryAcctEmployeePOS)) {
|
||||
return null;
|
||||
return Collections.emptyMap();
|
||||
}
|
||||
// 查询薪资核算记录
|
||||
SalaryAcctRecordPO salaryAcctRecordPO = getSalaryAcctRecordService(user).getById(queryParam.getSalaryAcctRecordId());
|
||||
|
|
@ -1471,7 +1515,7 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
// 是否是补发工资单
|
||||
List<SalarySendInfoPO> salarySendInfoPOS = getSalarySendInfoMapper().listSome(SalarySendInfoPO.builder().salarySendId(salarySendId).build());
|
||||
List<Long> sendEmployeeIds = salarySendInfoPOS.stream().map(SalarySendInfoPO::getEmployeeId).collect(Collectors.toList());
|
||||
salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(PO -> sendEmployeeIds.contains(PO.getEmployeeId())).collect(Collectors.toList());
|
||||
salaryAcctResultPOS = salaryAcctResultPOS.stream().filter(po -> sendEmployeeIds.contains(po.getEmployeeId())).collect(Collectors.toList());
|
||||
|
||||
Map<String, Object> map = new HashMap<>();
|
||||
Map<Long, List<SalaryAcctResultPO>> acctResultMap = SalaryEntityUtil.group2Map(salaryAcctResultPOS, SalaryAcctResultPO::getSalaryItemId);
|
||||
|
|
@ -1557,4 +1601,44 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
|
|||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalarySendInfoPO> getNeedSendInfoList(List<Long> salarySendIds) {
|
||||
if(CollectionUtils.isEmpty(salarySendIds)){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getSalarySendInfoMapper().getNeedSendInfoList(salarySendIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalarySendPO> getNeedSendListBySalarySobIds(List<Long> salarySobIds) {
|
||||
if(CollectionUtils.isEmpty(salarySobIds)){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getSalarySendMapper().getNeedSendListBySalarySobIds(salarySobIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalarySendInfoPO> listUnConfirmedSendInfo(List<Long> salarySobIds) {
|
||||
if(CollectionUtils.isEmpty(salarySobIds))
|
||||
return Collections.emptyList();
|
||||
return getSalarySendInfoMapper().listUnConfirmedSendInfo(salarySobIds);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void autoConfirmSalaryBill(List<Long> needAutoSendIds) {
|
||||
if(CollectionUtils.isEmpty(needAutoSendIds)){
|
||||
return;
|
||||
}
|
||||
List<List<Long>> partition = Lists.partition((List) needAutoSendIds, 500);
|
||||
partition.forEach(getSalarySendInfoMapper()::autoConfirmSalaryBill);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalarySendPO> getByIds(List<Long> salarySendId) {
|
||||
if(CollectionUtils.isEmpty(salarySendId)){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getSalarySendMapper().getByIds(salarySendId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -26,6 +26,9 @@ import com.engine.salary.enums.salarysob.SalaryEmployeeStatusEnum;
|
|||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.salarysob.SalarySobMapper;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
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.db.MapperProxyFactory;
|
||||
|
|
@ -117,6 +120,9 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
|
|
@ -310,6 +316,14 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
IncomeCategoryEnum incomeCategoryEnum = IncomeCategoryEnum.parseByValue(salarySobPO.getIncomeCategory());
|
||||
List<SalarySobDefaultItemGroupPO> salarySobDefaultItemGroupPOS = defaultItemGroupBiz.listByIncomeCategory(incomeCategoryEnum);
|
||||
List<SalarySobDefaultItemPO> salarySobDefaultItemPOS = salarySobDefaultItemService.listByIncomeCategory(SalarySobDefaultItemPO.builder().incomeCategory(incomeCategoryEnum.getValue()).build());
|
||||
|
||||
//是否需要系统算税,不需要则去除系统项目
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration();
|
||||
if (taxDeclarationFunctionEnum == TaxDeclarationFunctionEnum.CLOSURE) {
|
||||
salarySobDefaultItemGroupPOS = new ArrayList<>();
|
||||
salarySobDefaultItemPOS = new ArrayList<>();
|
||||
}
|
||||
|
||||
// 2、薪资账套默认引用的系统薪资项目如果没有添加到薪资项目中,这里要给添加保存
|
||||
// 2.1、查询已经添加到薪资项目中的系统薪资项目
|
||||
Set<Long> defaultSysSalaryItemIds = SalaryEntityUtil.properties(salarySobDefaultItemPOS, SalarySobDefaultItemPO::getSysSalaryItemId);
|
||||
|
|
@ -325,7 +339,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
.filter(sysSalaryItemId -> !sysSalaryItemIds.contains(sysSalaryItemId))
|
||||
.collect(Collectors.toSet());
|
||||
// 需要添加进薪资项目中的回算薪资项目
|
||||
needAddSysSalaryItemIds.addAll( SalarySobBackItemIds.stream().filter(salarySobBackItemId -> !sysSalaryItemIds.contains(salarySobBackItemId)).collect(Collectors.toList()) );
|
||||
needAddSysSalaryItemIds.addAll(SalarySobBackItemIds.stream().filter(salarySobBackItemId -> !sysSalaryItemIds.contains(salarySobBackItemId)).collect(Collectors.toList()));
|
||||
List<SysSalaryItemPO> needAddSysSalaryItemPOS = getSysSalaryItemService(user).listByIds(needAddSysSalaryItemIds);
|
||||
// 2.3、需要保存的薪资项目
|
||||
List<SalaryItemPO> needInsertSalaryItemPOS = SysSalaryItemBO.convert2SalaryItemPO(needAddSysSalaryItemPOS, (long) user.getUID());
|
||||
|
|
@ -361,8 +375,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
}
|
||||
|
||||
/**
|
||||
* @description 新建薪资账套时,保存默认的关联人员范围及从范围中排除
|
||||
* @return void
|
||||
* @description 新建薪资账套时,保存默认的关联人员范围及从范围中排除
|
||||
* @author Harryxzy
|
||||
* @date 2022/10/9 15:30
|
||||
*/
|
||||
|
|
@ -372,16 +386,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
queryParam.setCurrent(1);
|
||||
queryParam.setPageSize(100000);
|
||||
List<TaxAgentManageRangeListDTO> includeList = (List<TaxAgentManageRangeListDTO>) getTaxAgentManageRangeService(user).listPageByParamAndIncludeType(queryParam, NumberUtils.INTEGER_ONE).getList();
|
||||
includeList.stream().forEach(item->{
|
||||
includeList.stream().forEach(item -> {
|
||||
item.setEmployeeStatus(parseEnum2ValueStr(item.getEmployeeStatus()));
|
||||
});
|
||||
// 获取从范围中排除
|
||||
List<TaxAgentManageRangeListDTO> excludeList = (List<TaxAgentManageRangeListDTO>) getTaxAgentManageRangeService(user).listPageByParamAndIncludeType(queryParam, NumberUtils.INTEGER_ZERO).getList();
|
||||
excludeList.stream().forEach(item->{
|
||||
excludeList.stream().forEach(item -> {
|
||||
item.setEmployeeStatus(parseEnum2ValueStr(item.getEmployeeStatus()));
|
||||
});
|
||||
// 将TaxAgentManageRangeListDTO转换为SalarySobRangePO
|
||||
List<SalarySobRangePO> rangeList = convert2SalarySobRangePO(salarySobPO.getId(),includeList,excludeList);
|
||||
List<SalarySobRangePO> rangeList = convert2SalarySobRangePO(salarySobPO.getId(), includeList, excludeList);
|
||||
// 保存SalarySobRangePO
|
||||
if (CollectionUtils.isNotEmpty(rangeList)) {
|
||||
salarySobRangeBiz.batchInsert(rangeList);
|
||||
|
|
@ -391,16 +405,16 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
|
||||
|
||||
/**
|
||||
* @description 将TaxAgentManageRangeListDTO转换为SalarySobRangePO
|
||||
* @return List<SalarySobRangePO>
|
||||
* @description 将TaxAgentManageRangeListDTO转换为SalarySobRangePO
|
||||
* @author Harryxzy
|
||||
* @date 2022/10/9 16:06
|
||||
*/
|
||||
private List<SalarySobRangePO> convert2SalarySobRangePO(Long salarySobID,List<TaxAgentManageRangeListDTO> includeList, List<TaxAgentManageRangeListDTO> excludeList) {
|
||||
private List<SalarySobRangePO> convert2SalarySobRangePO(Long salarySobID, List<TaxAgentManageRangeListDTO> includeList, List<TaxAgentManageRangeListDTO> excludeList) {
|
||||
Date now = new Date();
|
||||
ArrayList<SalarySobRangePO> result = new ArrayList<SalarySobRangePO>();
|
||||
// 关联人员范围
|
||||
includeList.stream().forEach(item->{
|
||||
includeList.stream().forEach(item -> {
|
||||
SalarySobRangePO salarySobRangePO = SalarySobRangePO.builder()
|
||||
.salarySobId(salarySobID)
|
||||
.targetType(item.getTargetType().getValue())
|
||||
|
|
@ -416,7 +430,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
result.add(salarySobRangePO);
|
||||
});
|
||||
// 从范围中排除
|
||||
excludeList.stream().forEach(item->{
|
||||
excludeList.stream().forEach(item -> {
|
||||
SalarySobRangePO salarySobRangePO = SalarySobRangePO.builder()
|
||||
.salarySobId(salarySobID)
|
||||
.targetType(item.getTargetType().getValue())
|
||||
|
|
@ -436,8 +450,8 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
|
||||
|
||||
/**
|
||||
* @description 将枚举的defaultLabel转换为value
|
||||
* @return String
|
||||
* @description 将枚举的defaultLabel转换为value
|
||||
* @author Harryxzy
|
||||
* @date 2022/10/9 16:56
|
||||
*/
|
||||
|
|
@ -445,10 +459,10 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
String[] split = employeeStatus.split(",");
|
||||
StringBuilder sb = new StringBuilder();
|
||||
for (SalaryEmployeeStatusEnum statusEnum : SalaryEmployeeStatusEnum.values()) {
|
||||
for(int i =0;i<split.length;i++){
|
||||
if(statusEnum.getDefaultLabel().equals(split[i])){
|
||||
for (int i = 0; i < split.length; i++) {
|
||||
if (statusEnum.getDefaultLabel().equals(split[i])) {
|
||||
sb.append(statusEnum.getValue());
|
||||
if(i+1 != split.length){
|
||||
if (i + 1 != split.length) {
|
||||
sb.append(",");
|
||||
}
|
||||
}
|
||||
|
|
@ -556,7 +570,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
|
||||
// 根据薪资账套id查询工资单模板,存在该账套下的工资单模板就不能删除账套了
|
||||
List<SalaryTemplatePO> salaryTemplatePOS = getSalaryTemplateService(user).getBySalarySobIds(ids);
|
||||
if(CollectionUtils.isNotEmpty(salaryTemplatePOS)){
|
||||
if (CollectionUtils.isNotEmpty(salaryTemplatePOS)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(99713, "账套存在工资单模板,不能删除,请先删除该账套所对应的工资单模板"));
|
||||
}
|
||||
|
||||
|
|
@ -605,7 +619,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
if (CollectionUtils.isNotEmpty(salarySobPOS)) {
|
||||
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98403, "薪资账套名称已存在"));
|
||||
}
|
||||
|
||||
|
||||
Boolean openDevolution = getTaxAgentService(user).isOpenDevolution();
|
||||
if (openDevolution) {
|
||||
Collection<TaxAgentPO> taxAgentPOS = getTaxAgentService(user).listAllTaxAgentsAsAdmin((long) user.getUID());
|
||||
|
|
@ -664,7 +678,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
}
|
||||
|
||||
// 复制薪资账套的回算薪资项目
|
||||
if (CollectionUtils.isNotEmpty(result.getSalarySobBackItems())){
|
||||
if (CollectionUtils.isNotEmpty(result.getSalarySobBackItems())) {
|
||||
getSalarySobBackItemService(user).batchInsert(result.getSalarySobBackItems());
|
||||
}
|
||||
|
||||
|
|
@ -672,7 +686,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
if (CollectionUtils.isNotEmpty(result.getSalarySobItems())) {
|
||||
List<SalarySobItemPO> salarySobItems = result.getSalarySobItems();
|
||||
Date now = new Date();
|
||||
salarySobItems.stream().forEach(k->{
|
||||
salarySobItems.stream().forEach(k -> {
|
||||
Long salarySobItemShowId = IdGenerator.generate();
|
||||
SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder()
|
||||
.id(salarySobItemShowId)
|
||||
|
|
@ -680,13 +694,13 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
.salaryItemId(k.getSalaryItemId())
|
||||
.isGroup(0)
|
||||
.itemHide(k.getItemHide())
|
||||
.creator((long)user.getUID())
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(NumberUtils.INTEGER_ZERO)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
if(k.getItemHide()==null){
|
||||
if (k.getItemHide() == null) {
|
||||
salarySobItemHidePO.setItemHide(Long.valueOf(0));
|
||||
}
|
||||
salarySobItemService.InsertItemShow(salarySobItemHidePO);
|
||||
|
|
@ -702,7 +716,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
if (CollectionUtils.isNotEmpty(result.getSalarySobItemGroups())) {
|
||||
List<SalarySobItemGroupPO> salarySobItemGroups = result.getSalarySobItemGroups();
|
||||
Date now = new Date();
|
||||
salarySobItemGroups.stream().forEach(k->{
|
||||
salarySobItemGroups.stream().forEach(k -> {
|
||||
Long salarySobItemShowId = IdGenerator.generate();
|
||||
SalarySobItemHidePO salarySobItemHidePO = SalarySobItemHidePO.builder()
|
||||
.id(salarySobItemShowId)
|
||||
|
|
@ -710,13 +724,13 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
.salaryItemId(k.getId())
|
||||
.isGroup(1)
|
||||
.itemHide(k.getItemHide())
|
||||
.creator((long)user.getUID())
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(NumberUtils.INTEGER_ZERO)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
if(k.getItemHide()==null){
|
||||
if (k.getItemHide() == null) {
|
||||
salarySobItemHidePO.setItemHide(Long.valueOf(0));
|
||||
}
|
||||
salarySobItemService.InsertItemShow(salarySobItemHidePO);
|
||||
|
|
@ -781,7 +795,7 @@ public class SalarySobServiceImpl extends Service implements SalarySobService {
|
|||
|
||||
@Override
|
||||
public List<SalarySobPO> listByTaxAgentIds(Collection<Long> taxAgentIds) {
|
||||
if(CollectionUtils.isEmpty(taxAgentIds)){
|
||||
if (CollectionUtils.isEmpty(taxAgentIds)) {
|
||||
return new ArrayList<>();
|
||||
}
|
||||
return getSalarySobMapper().listSome(SalarySobPO.builder().taxAgentIds(taxAgentIds).build());
|
||||
|
|
|
|||
|
|
@ -14,13 +14,13 @@ import com.engine.salary.entity.salaryBill.param.SalaryTemplateQueryParam;
|
|||
import com.engine.salary.entity.salaryBill.param.SalaryTemplateSaveParam;
|
||||
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO;
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobItemDTO;
|
||||
import com.engine.salary.entity.salarysob.dto.SalarySobItemGroupDTO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobItemHidePO;
|
||||
import com.engine.salary.entity.salarysob.po.SalarySobPO;
|
||||
import com.engine.salary.enums.salarybill.SalaryTemplateWhetherEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.service.SalarySobItemService;
|
||||
import com.engine.salary.service.SalarySobService;
|
||||
import com.engine.salary.service.SalaryTemplateService;
|
||||
import com.engine.salary.service.TaxAgentService;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
|
|
@ -55,6 +55,10 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate
|
|||
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySobItemHideService getSalarySobItemHideService(User user) {
|
||||
return ServiceUtil.getService(SalarySobItemHideServiceImpl.class, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public SalaryTemplatePO getById(Long id) {
|
||||
return mapper.getById(id);
|
||||
|
|
@ -126,12 +130,13 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate
|
|||
// todo 薪资项目设置检查校验
|
||||
// 保存
|
||||
SalaryTemplatePO salaryTemplate = SalaryTemplateBO.convertToPO(saveParam, (long) user.getUID());
|
||||
salaryTemplate.setSendEmailId(saveParam.getSendEmail());
|
||||
// salaryTemplate.setSendEmailId(saveParam.getSendEmail());
|
||||
salaryTemplate.setEmailStatus(saveParam.getEmailStatus()?1:0);
|
||||
salaryTemplate.setMsgStatus(saveParam.getMsgStatus()?1:0);
|
||||
salaryTemplate.setTextContentPosition(saveParam.getTextContentPosition());
|
||||
salaryTemplate.setSalaryItemNullStatus(saveParam.getSalaryItemNullStatus()?1:0);
|
||||
salaryTemplate.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0);
|
||||
salaryTemplate.setAutoSendCycleType(saveParam.getAutoSendCycleType());
|
||||
mapper.insert(salaryTemplate);
|
||||
// 记录日志
|
||||
// SalaryLoggerUtil.recordAddSingleLog(salaryTemplateLoggerTemplate,
|
||||
|
|
@ -184,12 +189,17 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate
|
|||
BeanUtils.copyProperties(salaryTemplate, salaryTemplateNew);
|
||||
BeanUtils.copyProperties(saveParam, salaryTemplateNew);
|
||||
salaryTemplateNew.setUpdateTime(new Date());
|
||||
salaryTemplateNew.setSendEmailId(saveParam.getSendEmail());
|
||||
salaryTemplateNew.setSendEmailId(0L);
|
||||
salaryTemplateNew.setEmailStatus(saveParam.getEmailStatus()?1:0);
|
||||
salaryTemplateNew.setMsgStatus(saveParam.getMsgStatus()?1:0);
|
||||
salaryTemplateNew.setTextContentPosition(saveParam.getTextContentPosition());
|
||||
salaryTemplateNew.setSalaryItemNullStatus(saveParam.getSalaryItemNullStatus()?1:0);
|
||||
salaryTemplateNew.setSalaryItemZeroStatus(saveParam.getSalaryItemZeroStatus()?1:0);
|
||||
salaryTemplateNew.setAutoSendStatus(saveParam.getAutoSendStatus()?1:0);
|
||||
salaryTemplateNew.setAutoSendCycleType(saveParam.getAutoSendCycleType());
|
||||
salaryTemplateNew.setAckFeedbackStatus(saveParam.getAckFeedbackStatus()?1:0);
|
||||
salaryTemplateNew.setAutoAckDays(saveParam.getAutoAckDays());
|
||||
salaryTemplateNew.setFeedbackUrl(saveParam.getFeedbackUrl());
|
||||
// todo 薪资项目设置检查校验
|
||||
salaryTemplateNew.setSalaryItemSetting(saveParam.getSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getSalaryItemSetting()) : "");
|
||||
salaryTemplateNew.setReplenishSalaryItemSetting(saveParam.getReplenishSalaryItemSetting() != null ? JSONUtil.toJsonStr(saveParam.getReplenishSalaryItemSetting()) : "");
|
||||
|
|
@ -274,6 +284,31 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate
|
|||
|
||||
@Override
|
||||
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSet(Long salarySobId, boolean isReplenish) {
|
||||
SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
|
||||
// 处理薪资账套中隐藏的分类和项目
|
||||
// 获取关闭显示的分类
|
||||
List<Long> hideGroupIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(1).build());
|
||||
// 过滤关闭显示的薪资项目分类
|
||||
List<SalarySobItemGroupDTO> itemGroupDTOS = salarySobItemAggregate.getItemGroups().stream().filter(group -> !(hideGroupIDs.contains(group.getId()))).collect(Collectors.toList());
|
||||
// 获取关闭显示的薪资项目
|
||||
List<Long> hideItemIDs = getSalarySobItemHideService(user).listHideGroupBysalarySobId(SalarySobItemHidePO.builder().salarySobId(salarySobId).isGroup(0).build());
|
||||
for(SalarySobItemGroupDTO DTO : itemGroupDTOS){
|
||||
List<SalarySobItemDTO> items = DTO.getItems();
|
||||
DTO.setItems( items.stream().filter(item -> !(hideItemIDs.contains(item.getSalaryItemId()))).collect(Collectors.toList()) );
|
||||
}
|
||||
itemGroupDTOS = itemGroupDTOS.stream().filter(DTO -> CollectionUtils.isNotEmpty(DTO.getItems())).collect(Collectors.toList());
|
||||
salarySobItemAggregate.setItemGroups(itemGroupDTOS);
|
||||
if(hideGroupIDs.contains(0L)){
|
||||
// 隐藏了未分类
|
||||
salarySobItemAggregate.setItems(Collections.emptyList());
|
||||
}else{
|
||||
salarySobItemAggregate.setItems( salarySobItemAggregate.getItems().stream().filter( item -> !(hideItemIDs.contains(item.getSalaryItemId())) ).collect(Collectors.toList()) );
|
||||
}
|
||||
return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryItemSetContainHide(Long salarySobId, boolean isReplenish) {
|
||||
SalarySobItemAggregateDTO salarySobItemAggregate = getSalarySobItemService(user).getAggregateBySalarySobId(salarySobId);
|
||||
return SalaryTemplateBO.convertSalarySobItemAggregateToSalaryItemSet(salarySobItemAggregate, new Long(user.getUID()), isReplenish);
|
||||
}
|
||||
|
|
@ -315,4 +350,14 @@ public class SalaryTemplateServiceImpl extends Service implements SalaryTemplate
|
|||
PageInfo<SalaryTemplateListDTO> page = SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(), salaryTemplateDTOList, SalaryTemplateListDTO.class);
|
||||
return page;
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryTemplatePO> getAutoSendTemplate() {
|
||||
return mapper.listSome(SalaryTemplatePO.builder().autoSendStatus(NumberUtils.INTEGER_ONE).useType(NumberUtils.INTEGER_ONE).deleteType(NumberUtils.INTEGER_ZERO).build());
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalaryTemplatePO> listNeedAckDefaultTemplate() {
|
||||
return mapper.listSome(SalaryTemplatePO.builder().useType(NumberUtils.INTEGER_ONE).ackFeedbackStatus(NumberUtils.INTEGER_ONE).build());
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -71,4 +71,28 @@ public class SalarySysConstant {
|
|||
*/
|
||||
public static final String SALARY_PAYROLL_CHECK_TYPE = "SALARY_PAYROLL_CHECK_TYPE";
|
||||
|
||||
/**
|
||||
* 个税申报撤回
|
||||
*/
|
||||
public static final String WITHDRAW_TAX_DECLARATION ="WITHDRAW_TAX_DECLARATION";
|
||||
|
||||
/**
|
||||
* 删除薪资档案
|
||||
*/
|
||||
public static final String SALARY_ARCHIVE_DELETE = "salaryArchiveDelete";
|
||||
|
||||
/**
|
||||
* 工资单确认反馈状态
|
||||
*/
|
||||
public static final String SALARY_SEND_FEEDBACK = "SALARY_SEND_FEEDBACK";
|
||||
|
||||
/**
|
||||
* 工资单反馈自动确认
|
||||
*/
|
||||
public static final String SALARY_AUTO_ACK_DAYS = "SALARY_AUTO_ACK_DAYS";
|
||||
/**
|
||||
* 工资单反馈地址
|
||||
*/
|
||||
public static final String SALARY_FEEDBACK_URL = "SALARY_FEEDBACK_URL";
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -70,4 +70,19 @@ public class AppSettingVO {
|
|||
*/
|
||||
private String salaryAcctEmployeeRule;
|
||||
|
||||
/**
|
||||
* 撤回个税申报表
|
||||
*/
|
||||
private String withDrawTaxDeclaration;
|
||||
|
||||
/**
|
||||
* 薪资档案删除
|
||||
*/
|
||||
private String salaryArchiveDelete;
|
||||
|
||||
/**
|
||||
* 工资单反馈
|
||||
*/
|
||||
private String salarySendFeedback;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@ import com.engine.salary.enums.BaseEnum;
|
|||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
/**
|
||||
* 申报功能启用枚举
|
||||
* 个税计算启用状态
|
||||
* <p>Copyright: Copyright (c) 2022</p>
|
||||
* <p>Company: 泛微软件</p>
|
||||
*
|
||||
|
|
@ -12,8 +12,8 @@ import org.apache.commons.lang3.StringUtils;
|
|||
* @version 1.0
|
||||
**/
|
||||
public enum TaxDeclarationFunctionEnum implements BaseEnum<String> {
|
||||
OPEN("1", "开启申报功能", 1),
|
||||
CLOSURE("0", "关闭申报功能", 1),
|
||||
OPEN("1", "开启", 1),
|
||||
CLOSURE("0", "关闭", 1),
|
||||
REBOOT("2", "重启", 1);
|
||||
|
||||
private String value;
|
||||
|
|
|
|||
|
|
@ -96,4 +96,38 @@ public interface SalarySysConfService {
|
|||
* @param rule
|
||||
*/
|
||||
void saveSalaryAcctEmployeeRule(String rule);
|
||||
|
||||
/**
|
||||
* 个税申报撤回开关
|
||||
* @param param
|
||||
*/
|
||||
void saveWithDrawTaxDeclaration(SalarySysConfPO param);
|
||||
|
||||
/**
|
||||
* 保存档案删除规则
|
||||
* @param setting
|
||||
*/
|
||||
void saveArchiveDelete(String setting);
|
||||
|
||||
/**
|
||||
* 保存工资单反馈
|
||||
* @param param
|
||||
*/
|
||||
void saveSalarySendFeedback(SalarySysConfPO param);
|
||||
|
||||
/**
|
||||
* 根据code返回list
|
||||
* @param codes
|
||||
* @return
|
||||
*/
|
||||
List<SalarySysConfPO> getListByCodes(List<String> codes);
|
||||
|
||||
/**
|
||||
* 保存或者修改应用设置
|
||||
* @param confValue
|
||||
* @param confKey
|
||||
* @param title
|
||||
* @param app
|
||||
*/
|
||||
void saveSettingByType(String confValue, String confKey, String title, String app);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -416,6 +416,38 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe
|
|||
saveSettingByType(rule, SALARY_ACCT_EMPLOYEE_RULE, "薪资、社保福利核算包含人员规则", "basic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveWithDrawTaxDeclaration(SalarySysConfPO param) {
|
||||
if (StringUtils.isBlank(param.getConfValue())) {
|
||||
throw new SalaryRunTimeException("无效规则!");
|
||||
}
|
||||
saveSettingByType(param.getConfValue(), WITHDRAW_TAX_DECLARATION, "个税申报撤回", "basic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveArchiveDelete(String setting) {
|
||||
if (StringUtils.isBlank(setting)) {
|
||||
throw new SalaryRunTimeException("无效规则!");
|
||||
}
|
||||
saveSettingByType(setting, SALARY_ARCHIVE_DELETE, "薪资、社保福利档案删除规则", "basic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public void saveSalarySendFeedback(SalarySysConfPO param) {
|
||||
if (StringUtils.isBlank(param.getConfValue())) {
|
||||
throw new SalaryRunTimeException("无效规则!");
|
||||
}
|
||||
saveSettingByType(param.getConfValue(), SALARY_SEND_FEEDBACK, "工资单反馈", "basic");
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<SalarySysConfPO> getListByCodes(List<String> codes) {
|
||||
if(CollectionUtils.isEmpty(codes)){
|
||||
return Collections.emptyList();
|
||||
}
|
||||
return getSalarySysConfMapper().getListByCodes(codes);
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存或者修改应用设置
|
||||
*
|
||||
|
|
@ -424,7 +456,8 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe
|
|||
* @param title
|
||||
* @param app
|
||||
*/
|
||||
private void saveSettingByType(String confValue, String confKey, String title, String app) {
|
||||
@Override
|
||||
public void saveSettingByType(String confValue, String confKey, String title, String app) {
|
||||
SalarySysConfPO po = getOneByCode(confKey);
|
||||
if (po == null) {
|
||||
SalarySysConfPO build = SalarySysConfPO.builder()
|
||||
|
|
@ -488,6 +521,31 @@ public class SalarySysConfServiceImpl extends Service implements SalarySysConfSe
|
|||
appSettingVO.setSalaryAcctEmployeeRule( SalaryAcctEmployeeRuleEnum.parseByValue(salaryAcctEmployeeRule.getConfValue()).getValue() );
|
||||
}
|
||||
|
||||
SalarySysConfPO withDrawRule = salarySysConfMap.get(WITHDRAW_TAX_DECLARATION);
|
||||
if (withDrawRule == null ) {
|
||||
// 个税申报撤回
|
||||
appSettingVO.setWithDrawTaxDeclaration("0");
|
||||
} else {
|
||||
appSettingVO.setWithDrawTaxDeclaration( withDrawRule.getConfValue() );
|
||||
}
|
||||
|
||||
SalarySysConfPO salaryArchiveDeletePO = salarySysConfMap.get(SALARY_ARCHIVE_DELETE);
|
||||
if (salaryArchiveDeletePO == null ) {
|
||||
// 是否允许删除薪资、社保档案,默认不允许删除
|
||||
appSettingVO.setSalaryArchiveDelete("0");
|
||||
} else {
|
||||
appSettingVO.setSalaryArchiveDelete(salaryArchiveDeletePO.getConfValue());
|
||||
}
|
||||
|
||||
|
||||
SalarySysConfPO salarySendFeedbackPO = salarySysConfMap.get(SALARY_SEND_FEEDBACK);
|
||||
if (salarySendFeedbackPO == null ) {
|
||||
// 是否开启工资单反馈,默认不开启
|
||||
appSettingVO.setSalarySendFeedback("0");
|
||||
} else {
|
||||
appSettingVO.setSalarySendFeedback(salarySendFeedbackPO.getConfValue());
|
||||
}
|
||||
|
||||
//默认加密开启
|
||||
if (StringUtils.isEmpty(appSettingVO.getIsOpenEncrypt())) {
|
||||
appSettingVO.setIsOpenEncrypt(OpenEnum.OPEN.getValue());
|
||||
|
|
|
|||
|
|
@ -0,0 +1,71 @@
|
|||
package com.engine.salary.timer;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
|
||||
import com.engine.salary.service.SalarySendService;
|
||||
import com.engine.salary.service.SalaryTemplateService;
|
||||
import com.engine.salary.service.impl.SalarySendServiceImpl;
|
||||
import com.engine.salary.service.impl.SalaryTemplateServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.temporal.ChronoUnit;
|
||||
import java.util.ArrayList;
|
||||
import java.util.HashMap;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName AutoConfirmSalaryBill
|
||||
* @date 2023/07/11 15:50
|
||||
* @description 自动确认工资单
|
||||
*/
|
||||
public class AutoConfirmSalaryBillCronJob extends BaseCronJob {
|
||||
private SalarySendService getSalarySendService(User user) {
|
||||
return ServiceUtil.getService(SalarySendServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryTemplateService getSalaryTemplateService(User user) {
|
||||
return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
User user = new User();
|
||||
user.setUid(1);
|
||||
user.setLoginid("sysadmin");
|
||||
// 获取所有需要确认反馈的默认工资单模板
|
||||
List<SalaryTemplatePO> templates = getSalaryTemplateService(user).listNeedAckDefaultTemplate();
|
||||
// key:薪资账套id,value:对应的自动确认天数
|
||||
Map<Long, Integer> salarySobAckDaysMap = SalaryEntityUtil.convert2Map(templates, SalaryTemplatePO::getSalarySobId, SalaryTemplatePO::getAutoAckDays);
|
||||
// 根据薪资账套id获取已发送,确认状态为未确认的工资单
|
||||
List<SalarySendInfoPO> unConfirmedList = getSalarySendService(user).listUnConfirmedSendInfo(new ArrayList<>(salarySobAckDaysMap.keySet()));
|
||||
List<SalarySendPO> sendList = getSalarySendService(user).getByIds(unConfirmedList.stream().map(SalarySendInfoPO::getSalarySendId).distinct().collect(Collectors.toList()));
|
||||
// key:工资单发放id,value:自动确认超时天数
|
||||
HashMap<Long, Integer> autoAckDaysMap = new HashMap<>();
|
||||
sendList.stream().forEach(send -> {
|
||||
Integer autoAckDays = salarySobAckDaysMap.getOrDefault(send.getSalarySobId(), 7);
|
||||
autoAckDaysMap.put(send.getId(), autoAckDays);
|
||||
});
|
||||
LocalDateTime now = LocalDateTime.now();
|
||||
List<Long> needAutoIds = unConfirmedList.stream().filter(po -> {
|
||||
LocalDateTime sendDateTime = SalaryDateUtil.dateToLocalDateTime(po.getSendTime());
|
||||
Integer autoDays = autoAckDaysMap.get(po.getSalarySendId());
|
||||
if (ObjectUtils.isEmpty(autoDays))
|
||||
return false;
|
||||
LocalDateTime autoDateTime = sendDateTime.plus(autoDays, ChronoUnit.DAYS);
|
||||
return !autoDateTime.isAfter(now);
|
||||
}).map(SalarySendInfoPO::getId).collect(Collectors.toList());
|
||||
// 自动确认
|
||||
getSalarySendService(user).autoConfirmSalaryBill(needAutoIds);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
@ -0,0 +1,101 @@
|
|||
package com.engine.salary.timer;
|
||||
|
||||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.salary.entity.salaryBill.param.SalarySendGrantParam;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendInfoPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
|
||||
import com.engine.salary.entity.salaryBill.po.SalaryTemplatePO;
|
||||
import com.engine.salary.service.SalaryBillService;
|
||||
import com.engine.salary.service.SalarySendService;
|
||||
import com.engine.salary.service.SalaryTemplateService;
|
||||
import com.engine.salary.service.impl.SalaryBillServiceImpl;
|
||||
import com.engine.salary.service.impl.SalarySendServiceImpl;
|
||||
import com.engine.salary.service.impl.SalaryTemplateServiceImpl;
|
||||
import com.engine.salary.util.SalaryDateUtil;
|
||||
import com.engine.salary.util.SalaryEntityUtil;
|
||||
import weaver.hrm.User;
|
||||
import weaver.interfaces.schedule.BaseCronJob;
|
||||
|
||||
import java.text.ParseException;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
/**
|
||||
* @author Harryxzy
|
||||
* @ClassName AutoSendSalaryJob
|
||||
* @date 2023/07/03 10:39
|
||||
* @description 自动发送工资单
|
||||
*/
|
||||
public class AutoSendSalaryJob extends BaseCronJob {
|
||||
|
||||
private SalarySendService getSalarySendService(User user) {
|
||||
return ServiceUtil.getService(SalarySendServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryTemplateService getSalaryTemplateService(User user) {
|
||||
return ServiceUtil.getService(SalaryTemplateServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryBillService getSalaryBillService(User user) {
|
||||
return ServiceUtil.getService(SalaryBillServiceImpl.class, user);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void execute() {
|
||||
User tempUser = new User();
|
||||
tempUser.setUid(1);
|
||||
tempUser.setLoginid("sysadmin");
|
||||
// 获取所有设置了定时发送的默认工资单模板
|
||||
List<SalaryTemplatePO> autoSendTemplate = getSalaryTemplateService(tempUser).getAutoSendTemplate();
|
||||
Map<Long, SalaryTemplatePO> autoSendTypeMap = SalaryEntityUtil.convert2Map(autoSendTemplate, SalaryTemplatePO::getSalarySobId);
|
||||
List<Long> salarySobIds = autoSendTemplate.stream().map(SalaryTemplatePO::getSalarySobId).collect(Collectors.toList());
|
||||
// 获取这些模板下未发放完的正常(非补发、非冻结)工资单
|
||||
List<SalarySendPO> salarySendList = getSalarySendService(tempUser).getNeedSendListBySalarySobIds(salarySobIds);
|
||||
|
||||
LocalDateTime nowLocalDateTime = SalaryDateUtil.dateToLocalDateTime(new Date());
|
||||
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
|
||||
List<Long> needSendIds = salarySendList.stream().filter(sendPO -> {
|
||||
SalaryTemplatePO templatePO = autoSendTypeMap.get(sendPO.getSalarySobId());
|
||||
if (templatePO == null) {
|
||||
return false;
|
||||
}
|
||||
LocalDate autoSendDate = null;
|
||||
if (templatePO.getAutoSendCycleType() == 1) {
|
||||
// 薪资所属月当月
|
||||
autoSendDate = SalaryDateUtil.dateToLocalDate(sendPO.getSalaryMonth());
|
||||
} else {
|
||||
// 薪资所属月下月
|
||||
autoSendDate = SalaryDateUtil.dateToLocalDate(sendPO.getSalaryMonth()).plusMonths(1);
|
||||
}
|
||||
int maxDays = autoSendDate.lengthOfMonth();
|
||||
Integer sendDays = Integer.valueOf(templatePO.getAutoSendDayOfMonth());
|
||||
if (sendDays.intValue() > maxDays) {
|
||||
sendDays = maxDays;
|
||||
}
|
||||
autoSendDate = autoSendDate.withDayOfMonth(sendDays);
|
||||
LocalDateTime autoSendDateTime = null;
|
||||
try {
|
||||
// 加上时间
|
||||
autoSendDateTime = autoSendDate.atTime(SalaryDateUtil.dateToLocalDateTime(timeFormat.parse(templatePO.getAutoSendTimeOfDay())).toLocalTime());
|
||||
} catch (ParseException e) {
|
||||
throw new RuntimeException(e);
|
||||
}
|
||||
if (!autoSendDateTime.isAfter(nowLocalDateTime)) {
|
||||
// 自动发放时间早于或等于现在的发放记录
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
}).map(SalarySendPO::getId).collect(Collectors.toList());
|
||||
|
||||
// 获取工资单发放记录下需要发放的工资单明细
|
||||
List<SalarySendInfoPO> needSendInfoList = getSalarySendService(tempUser).getNeedSendInfoList(needSendIds);
|
||||
Map<Long, Set<Long>> sendMap = SalaryEntityUtil.group2Map(needSendInfoList, SalarySendInfoPO::getSalarySendId, SalarySendInfoPO::getId);
|
||||
for(Map.Entry<Long, Set<Long>> entry : sendMap.entrySet()){
|
||||
// 发放
|
||||
getSalaryBillService(tempUser).grant(SalarySendGrantParam.builder().salarySendId(entry.getKey()).ids(new ArrayList<Long>(entry.getValue())).build());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -19,7 +19,6 @@ import javax.ws.rs.*;
|
|||
import javax.ws.rs.core.Context;
|
||||
import javax.ws.rs.core.MediaType;
|
||||
import java.util.Collection;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
/**
|
||||
|
|
@ -223,4 +222,15 @@ public class SIArchivesController {
|
|||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<String, Map<String, Object>>(user).run(getService(user)::allStayAddToPay);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除档案
|
||||
*/
|
||||
@POST
|
||||
@Path("/deleteArchive")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String deleteArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection<Long> ids) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<Collection<Long>, Map<String, Object>>(user).run(getService(user)::deleteArchive, ids);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,6 +21,7 @@ import com.engine.salary.wrapper.SISchemeWrapper;
|
|||
import io.swagger.v3.oas.annotations.parameters.RequestBody;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import weaver.hrm.HrmUserVarify;
|
||||
import weaver.hrm.User;
|
||||
|
||||
|
|
@ -32,6 +33,7 @@ import javax.ws.rs.core.MediaType;
|
|||
import javax.ws.rs.core.Response;
|
||||
import javax.ws.rs.core.StreamingOutput;
|
||||
import java.io.UnsupportedEncodingException;
|
||||
import java.math.BigDecimal;
|
||||
import java.net.URLEncoder;
|
||||
import java.time.LocalDate;
|
||||
import java.util.Arrays;
|
||||
|
|
@ -172,16 +174,7 @@ public class SISchemeController {
|
|||
@Path("/export")
|
||||
@Produces(MediaType.APPLICATION_OCTET_STREAM)
|
||||
public Response export(@Context HttpServletRequest request, @Context HttpServletResponse response) {
|
||||
InsuranceArchivesListParam param = new InsuranceArchivesListParam();
|
||||
String ids = request.getParameter("ids");
|
||||
if(StringUtils.isNotBlank(ids)){
|
||||
param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String runStatuses = request.getParameter("runStatuses");
|
||||
if(StringUtils.isNotBlank(runStatuses)){
|
||||
param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
InsuranceArchivesListParam param = buildInsuranceArchivesListParam(request);
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
XSSFWorkbook workbook = getService(user).export(param);
|
||||
String fileName ;
|
||||
|
|
@ -298,6 +291,63 @@ public class SISchemeController {
|
|||
.header("Cache-Control", "no-cache").build();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
private InsuranceArchivesListParam buildInsuranceArchivesListParam(HttpServletRequest request) {
|
||||
InsuranceArchivesListParam param = new InsuranceArchivesListParam();
|
||||
|
||||
String ids = request.getParameter("ids");
|
||||
if(StringUtils.isNotBlank(ids)){
|
||||
param.setIds( Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String runStatuses = request.getParameter("runStatuses");
|
||||
if(StringUtils.isNotBlank(runStatuses)){
|
||||
param.setRunStatuses( Arrays.stream(runStatuses.split(",")).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
|
||||
String statusesStr = request.getParameter("statusesStr");
|
||||
if (StringUtils.isNotBlank(statusesStr)) {
|
||||
param.setStatuses(Arrays.stream(statusesStr.split(",")).map(String::new).collect(Collectors.toList()));
|
||||
}
|
||||
String userName = request.getParameter("username");
|
||||
if (StringUtils.isNotBlank(userName)) {
|
||||
param.setUserName(userName);
|
||||
}
|
||||
String jobNum = request.getParameter("jobNum");
|
||||
if (StringUtils.isNotBlank(jobNum)) {
|
||||
param.setJobNum(jobNum);
|
||||
}
|
||||
String taxAgentId = request.getParameter("taxAgentId");
|
||||
if (StringUtils.isNotBlank(taxAgentId)) {
|
||||
param.setTaxAgentId(Long.parseLong(taxAgentId));
|
||||
}
|
||||
String departmentIds = request.getParameter("departmentIdsStr");
|
||||
if (StringUtils.isNotBlank(departmentIds)) {
|
||||
param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(BigDecimal::new).collect(Collectors.toList()));
|
||||
}
|
||||
String subcompanyIds = request.getParameter("subcompanyIdsStr");
|
||||
if (StringUtils.isNotBlank(subcompanyIds)) {
|
||||
param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(BigDecimal::new).collect(Collectors.toList()));
|
||||
}
|
||||
String positions = request.getParameter("positionsStr");
|
||||
if (StringUtils.isNotBlank(positions)) {
|
||||
param.setPositions(Arrays.stream(positions.split(",")).map(BigDecimal::new).collect(Collectors.toList()));
|
||||
}
|
||||
String siSchemeId = request.getParameter("siSchemeId");
|
||||
if (StringUtils.isNotBlank(siSchemeId)) {
|
||||
param.setSiSchemeId(Long.valueOf(siSchemeId));
|
||||
}
|
||||
String fundSchemeId = request.getParameter("fundSchemeId");
|
||||
if (StringUtils.isNotBlank(fundSchemeId)) {
|
||||
param.setFundSchemeId(Long.valueOf(fundSchemeId));
|
||||
}
|
||||
String otherSchemeId = request.getParameter("otherSchemeId");
|
||||
if (StringUtils.isNotBlank(otherSchemeId)) {
|
||||
param.setOtherSchemeId(Long.valueOf(otherSchemeId));
|
||||
}
|
||||
return param;
|
||||
}
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -297,6 +297,10 @@ public class SalaryAcctController {
|
|||
if (StringUtils.isNotBlank(status)) {
|
||||
param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status)));
|
||||
}
|
||||
String statuses = request.getParameter("statuses");
|
||||
if (StringUtils.isNotBlank(statuses)) {
|
||||
param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
//fixme 日期
|
||||
request.getParameter("dismissDate");
|
||||
String ids = request.getParameter("ids");
|
||||
|
|
@ -760,6 +764,10 @@ public class SalaryAcctController {
|
|||
if (StringUtils.isNotBlank(status)) {
|
||||
param.setStatus(SalaryEmployeeStatusEnum.parseByValue(Integer.parseInt(status)));
|
||||
}
|
||||
String statuses = request.getParameter("statuses");
|
||||
if (StringUtils.isNotBlank(statuses)) {
|
||||
param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
//fixme 日期
|
||||
request.getParameter("dismissDate");
|
||||
String consolidatedTaxation = request.getParameter("consolidatedTaxation");
|
||||
|
|
@ -770,6 +778,14 @@ public class SalaryAcctController {
|
|||
if (StringUtils.isNotBlank(ids)) {
|
||||
param.setIds(Arrays.stream(ids.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
String workcode = request.getParameter("workcode");
|
||||
if (StringUtils.isNotBlank(workcode)) {
|
||||
param.setWorkcode(workcode);
|
||||
}
|
||||
String subcompanyIds = request.getParameter("subcompanyIds");
|
||||
if (StringUtils.isNotBlank(subcompanyIds)) {
|
||||
param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -135,6 +135,20 @@ public class SalaryArchiveController {
|
|||
return new ResponseResult<Collection<Long>, String>(user).run(getSalaryArchiveWrapper(user)::deletePendingTodo, ids);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除薪资档案(待定薪、停薪来自待定薪)
|
||||
*
|
||||
* @param ids
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/deleteSalaryArchive")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String deleteSalaryArchive(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection<Long> ids) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<Collection<Long>, String>(user).run(getSalaryArchiveWrapper(user)::deleteSalaryArchive, ids);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 发薪列表
|
||||
|
|
@ -442,6 +456,10 @@ public class SalaryArchiveController {
|
|||
if (StringUtils.isNotBlank(username)) {
|
||||
param.setUsername(username);
|
||||
}
|
||||
String workcode = request.getParameter("workcode");
|
||||
if (StringUtils.isNotBlank(workcode)) {
|
||||
param.setWorkcode(workcode);
|
||||
}
|
||||
String taxAgentId = request.getParameter("taxAgentId");
|
||||
if (StringUtils.isNotBlank(taxAgentId)) {
|
||||
param.setTaxAgentId(Long.valueOf(taxAgentId));
|
||||
|
|
@ -450,6 +468,10 @@ public class SalaryArchiveController {
|
|||
if (StringUtils.isNotBlank(departmentIds)) {
|
||||
param.setDepartmentIds(Arrays.stream(departmentIds.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
String subcompanyIds = request.getParameter("subcompanyIds");
|
||||
if (StringUtils.isNotBlank(subcompanyIds)) {
|
||||
param.setSubcompanyIds(Arrays.stream(subcompanyIds.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
String positionIds = request.getParameter("positionIds");
|
||||
if (StringUtils.isNotBlank(positionIds)) {
|
||||
param.setPositionIds(Arrays.stream(positionIds.split(",")).map(Long::valueOf).collect(Collectors.toList()));
|
||||
|
|
@ -458,6 +480,10 @@ public class SalaryArchiveController {
|
|||
if (StringUtils.isNotBlank(userstatus)) {
|
||||
param.setUserstatus(userstatus);
|
||||
}
|
||||
String statuses = request.getParameter("statuses");
|
||||
if (StringUtils.isNotBlank(statuses)) {
|
||||
param.setStatuses(Arrays.stream(statuses.split(",")).map(String::valueOf).collect(Collectors.toList()));
|
||||
}
|
||||
String hiredate = request.getParameter("hiredate");
|
||||
if (StringUtils.isNotBlank(hiredate)) {
|
||||
param.setHiredate(Arrays.asList(hiredate.split(",")));
|
||||
|
|
|
|||
|
|
@ -545,6 +545,54 @@ public class SalaryBillController {
|
|||
}
|
||||
return new ResponseResult<Long, Map<String, Object>>(user).run(getSalarySendWrapper(user)::mySalaryBill, salaryInfoId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 确认工资单
|
||||
*
|
||||
* @param salaryInfoId
|
||||
* @return
|
||||
*/
|
||||
@GET
|
||||
@Path("/confirmSalaryBill")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String confirmSalaryBill(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryInfoId") Long salaryInfoId) {
|
||||
User user = null;
|
||||
String recipient = request.getParameter("recipient");
|
||||
String em_auth_userid = request.getParameter("em_auth_userid");
|
||||
log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid);
|
||||
if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) {
|
||||
user = new User(Integer.parseInt(recipient));
|
||||
} else if (StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)) {
|
||||
user = new User(Integer.parseInt(em_auth_userid));
|
||||
} else {
|
||||
user = HrmUserVarify.getUser(request, response);
|
||||
}
|
||||
return new ResponseResult<Long, Map<String, Object>>(user).run(getSalarySendWrapper(user)::confirmSalaryBill, salaryInfoId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工资单反馈
|
||||
*
|
||||
* @param salaryInfoId
|
||||
* @return
|
||||
*/
|
||||
@GET
|
||||
@Path("/feedBackSalaryBill")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String feedBackSalaryBill(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "salaryInfoId") Long salaryInfoId) {
|
||||
User user = null;
|
||||
String recipient = request.getParameter("recipient");
|
||||
String em_auth_userid = request.getParameter("em_auth_userid");
|
||||
log.info("salary recipient: {} em_auth_userid: {}", recipient, em_auth_userid);
|
||||
if (StringUtils.isNotBlank(recipient) && NumberUtils.isCreatable(recipient)) {
|
||||
user = new User(Integer.parseInt(recipient));
|
||||
} else if (StringUtils.isNotBlank(em_auth_userid) && NumberUtils.isCreatable(em_auth_userid)) {
|
||||
user = new User(Integer.parseInt(em_auth_userid));
|
||||
} else {
|
||||
user = HrmUserVarify.getUser(request, response);
|
||||
}
|
||||
return new ResponseResult<Long, Map<String, Object>>(user).run(getSalarySendWrapper(user)::feedBackSalaryBill, salaryInfoId);
|
||||
}
|
||||
/******** 工资单发放 end ***********************************************************************************************/
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ public class SalarySystemConfigController {
|
|||
}
|
||||
|
||||
/**
|
||||
* 申报前置
|
||||
* 是否开启系统算税
|
||||
*
|
||||
* @param request
|
||||
* @param response
|
||||
|
|
@ -63,6 +63,7 @@ public class SalarySystemConfigController {
|
|||
return new ResponseResult<TaxDeclarationFunctionEnum, Boolean>(user).run(getSalarySystemConfigWrapper(user)::operateTaxDeclarationFunction, TaxDeclarationFunctionEnum.parseByValue(param.getOperateTaxDeclaration()));
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 获取系统配置
|
||||
*
|
||||
|
|
@ -180,6 +181,13 @@ public class SalarySystemConfigController {
|
|||
return new ResponseResult<MatchEmployeeModeSaveParam, String>(user).run(getSalarySystemConfigWrapper(user)::saveMatchEmployeeModeRule, param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资核算人员匹配规则
|
||||
* @param request
|
||||
* @param response
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/saveSalaryAcctEmployeeRule")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
|
|
@ -188,6 +196,50 @@ public class SalarySystemConfigController {
|
|||
return new ResponseResult<String, String>(user).run(getSalarySystemConfigWrapper(user)::saveSalaryAcctEmployeeRule, param.getRule());
|
||||
}
|
||||
|
||||
/**
|
||||
* 工资单反馈
|
||||
* @param request
|
||||
* @param response
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/saveSalarySendFeedback")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String saveSalarySendFeedback(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySysConfPO param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalarySysConfPO, String>(user).run(getSalarySystemConfigWrapper(user)::saveSalarySendFeedback, param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 撤回个税申报
|
||||
* @param request
|
||||
* @param response
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/saveWithDrawTaxDeclaration")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String saveWithDrawTaxDeclaration(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySysConfPO param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<SalarySysConfPO, String>(user).run(getSalarySystemConfigWrapper(user)::saveWithDrawTaxDeclaration, param);
|
||||
}
|
||||
|
||||
/**
|
||||
* 删除档案
|
||||
* @param request
|
||||
* @param response
|
||||
* @param param
|
||||
* @return
|
||||
*/
|
||||
@POST
|
||||
@Path("/saveArchiveDelete")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String saveArchiveDelete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySysConfPO param) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<String, String>(user).run(getSalarySystemConfigWrapper(user)::saveArchiveDelete, param.getConfValue());
|
||||
}
|
||||
|
||||
/**
|
||||
* 应用设置
|
||||
|
|
|
|||
|
|
@ -571,4 +571,13 @@ public class SalaryArchiveWrapper extends Service {
|
|||
}
|
||||
return list.get(0);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* 删除薪资档案
|
||||
* @param salaryArchiveIds
|
||||
*/
|
||||
public void deleteSalaryArchive(Collection<Long> salaryArchiveIds) {
|
||||
getSalaryArchiveService(user).deleteSalaryArchive(salaryArchiveIds);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,6 +3,7 @@ package com.engine.salary.wrapper;
|
|||
import com.engine.common.util.ServiceUtil;
|
||||
import com.engine.core.impl.Service;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBaseSetFormDTO;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillAckFeedbackDTO;
|
||||
import com.engine.salary.entity.salaryBill.dto.SalaryBillWatermarkDTO;
|
||||
import com.engine.salary.entity.salaryBill.param.SalaryBaseSetSaveParam;
|
||||
import com.engine.salary.service.SalaryBillBaseSetService;
|
||||
|
|
@ -45,7 +46,7 @@ public class SalaryBillBaseSetWrapper extends Service {
|
|||
public SalaryBaseSetFormDTO getBaseSetForm() {
|
||||
SalaryBaseSetFormDTO dto = new SalaryBaseSetFormDTO();
|
||||
SalaryBillWatermarkDTO salaryBillWatermark = getSalaryBillBaseSetService(user).getWatermarkSetting();
|
||||
// SalaryBillAckFeedbackDTO salaryBillAckFeedback = salaryBillBaseSetService.getAckFeedbackSetting();
|
||||
SalaryBillAckFeedbackDTO salaryBillAckFeedback = getSalaryBillBaseSetService(user).getDefaultAckFeedbackSetting();
|
||||
|
||||
if (Objects.isNull(salaryBillWatermark)) {
|
||||
dto.setWatermarkStatus(false);
|
||||
|
|
@ -57,16 +58,16 @@ public class SalaryBillBaseSetWrapper extends Service {
|
|||
dto.setWatermarkSetting(salaryBillWatermark.getWmSetting());
|
||||
dto.setWatermark(salaryBillWatermark.getWatermarkType());
|
||||
}
|
||||
// if (Objects.nonNull(salaryBillAckFeedback)) {
|
||||
// data.put("ackStatus", salaryBillAckFeedback.getAckStatus());
|
||||
// data.put("feedbackStatus", salaryBillAckFeedback.getFeedbackStatus());
|
||||
// }
|
||||
if (Objects.nonNull(salaryBillAckFeedback)) {
|
||||
// 工资单反馈默认设置
|
||||
dto.setAckFeedbackSetting(salaryBillAckFeedback);
|
||||
}
|
||||
|
||||
return dto;
|
||||
}
|
||||
|
||||
/**
|
||||
* 保存工资单水印设置
|
||||
* 保存工资单模板基础设置
|
||||
*
|
||||
* @param saveParam
|
||||
* @return
|
||||
|
|
|
|||
|
|
@ -25,6 +25,9 @@ import com.engine.salary.service.impl.SalaryFormulaServiceImpl;
|
|||
import com.engine.salary.service.impl.SalaryItemServiceImpl;
|
||||
import com.engine.salary.service.impl.SalarySobItemServiceImpl;
|
||||
import com.engine.salary.service.impl.SysSalaryItemServiceImpl;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
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.page.Column;
|
||||
|
|
@ -49,11 +52,11 @@ import java.util.*;
|
|||
public class SalaryFieldWrapper extends Service {
|
||||
|
||||
private SalaryItemService getSalaryItemService(User user) {
|
||||
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
||||
return ServiceUtil.getService(SalaryItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryFormulaService getSalaryFormulaService(User user) {
|
||||
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
|
||||
return ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -69,6 +72,10 @@ public class SalaryFieldWrapper extends Service {
|
|||
return ServiceUtil.getService(SysSalaryItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资项目列表
|
||||
*
|
||||
|
|
@ -100,6 +107,9 @@ public class SalaryFieldWrapper extends Service {
|
|||
salaryItemListDTOPage.getColumns().clear();
|
||||
salaryItemListDTOPage.setColumns(fieldColumns);
|
||||
|
||||
//是否需要系统算税,不需要则去除系统项目
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration();
|
||||
|
||||
// 被薪资账套引用的薪资项目
|
||||
if (CollectionUtils.isNotEmpty(salaryItemList)) {
|
||||
// 查询系统薪资项目
|
||||
|
|
@ -109,7 +119,9 @@ public class SalaryFieldWrapper extends Service {
|
|||
List<SalaryItemListDTO> salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, Collections.emptyList(), sysSalaryItemPOS);
|
||||
//系统项目不删除
|
||||
salaryItemListDTOS.forEach(dto -> {
|
||||
if (StringUtils.isNotBlank(dto.getSystemName()) || usingItemIds.contains(dto.getId()) || usingCodes.contains(dto.getCode())) {
|
||||
if ((taxDeclarationFunctionEnum != TaxDeclarationFunctionEnum.CLOSURE && StringUtils.isNotBlank(dto.getSystemName()))
|
||||
|| usingItemIds.contains(dto.getId())
|
||||
|| usingCodes.contains(dto.getCode())) {
|
||||
dto.setCanDelete(false);
|
||||
}
|
||||
});
|
||||
|
|
@ -207,6 +219,7 @@ public class SalaryFieldWrapper extends Service {
|
|||
|
||||
/**
|
||||
* 保存字段排序信息
|
||||
*
|
||||
* @param salaryItemPOS
|
||||
*/
|
||||
public void saveSortedIndex(List<SalaryItemPO> salaryItemPOS) {
|
||||
|
|
|
|||
|
|
@ -18,6 +18,9 @@ import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
|
|||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.service.*;
|
||||
import com.engine.salary.service.impl.*;
|
||||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
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.page.PageInfo;
|
||||
|
|
@ -61,6 +64,10 @@ public class SalaryItemWrapper extends Service {
|
|||
return ServiceUtil.getService(SalarySobBackItemServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalarySysConfService getSalarySysConfService(User user) {
|
||||
return ServiceUtil.getService(SalarySysConfServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资项目列表
|
||||
*
|
||||
|
|
@ -89,6 +96,10 @@ public class SalaryItemWrapper extends Service {
|
|||
salaryItemListDTOPage.setPageNum(page.getPageNum());
|
||||
salaryItemListDTOPage.setTotal(page.getTotal());
|
||||
|
||||
//是否需要系统算税,不需要则去除系统项目
|
||||
TaxDeclarationFunctionEnum taxDeclarationFunctionEnum = getSalarySysConfService(user).getTaxDeclaration();
|
||||
|
||||
|
||||
// 被薪资账套引用的薪资项目
|
||||
if (CollectionUtils.isNotEmpty(salaryItemList)) {
|
||||
//2、填充公式内容
|
||||
|
|
@ -101,7 +112,9 @@ public class SalaryItemWrapper extends Service {
|
|||
List<SalaryItemListDTO> salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, sysSalaryItemPOS);
|
||||
//系统项目不删除
|
||||
salaryItemListDTOS.forEach(dto -> {
|
||||
if (StringUtils.isNotBlank(dto.getSystemName()) || usingItemIds.contains(dto.getId()) || usingCodes.contains(dto.getCode())) {
|
||||
if ((taxDeclarationFunctionEnum != TaxDeclarationFunctionEnum.CLOSURE && StringUtils.isNotBlank(dto.getSystemName()))
|
||||
|| usingItemIds.contains(dto.getId())
|
||||
|| usingCodes.contains(dto.getCode())) {
|
||||
dto.setCanDelete(false);
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -1,5 +1,6 @@
|
|||
package com.engine.salary.wrapper;
|
||||
|
||||
import cn.hutool.core.util.ObjectUtil;
|
||||
import com.api.browser.bean.SearchConditionGroup;
|
||||
import com.api.browser.bean.SearchConditionItem;
|
||||
import com.api.browser.bean.SearchConditionOption;
|
||||
|
|
@ -147,22 +148,10 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
|||
// todo 目前就一个回算,那么没有冻结且是回算,就展示补发名称
|
||||
e.setTemplate(NumberUtils.INTEGER_ONE.equals(e.getSalaryAcctType()) ? optional.get().getReplenishName() : optional.get().getName());
|
||||
e.setTemplateId(optional.get().getId());
|
||||
e.setAckFeedbackStatus(optional.get().getAckFeedbackStatus() == null ? 0 : optional.get().getAckFeedbackStatus());
|
||||
}
|
||||
// e.setHaveBackCalc(NumberUtils.INTEGER_ZERO);
|
||||
});
|
||||
}
|
||||
// 薪资核算ID
|
||||
Set<Long> salaryAcctIds = SalaryEntityUtil.properties(pageList, SalarySendListDTO::getSalaryAcctId);
|
||||
// 获取是回算的薪资核算ID
|
||||
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
|
||||
List<SalaryAcctRecordPO> salaryAcctRecordPOS = getSalaryAcctRecordService(user).getBackCalcRecordByIds(salaryAcctIds);
|
||||
// Set<String> backCalcSalarySobs = SalaryEntityUtil.properties(salaryAcctRecordPOS, salaryAcctRecordPO -> salaryAcctRecordPO.getSalarySobId() + "-" + sdf.format(salaryAcctRecordPO.getSalaryMonth()));
|
||||
// // 判断是否回算过,haveBackCalc 属性
|
||||
// pageList.stream().forEach(salarySendDTO -> {
|
||||
// if (backCalcSalarySobs.contains(salarySendDTO.getSalarySobId() + "-" + sdf.format(salarySendDTO.getSalaryYearMonth()))) {
|
||||
// salarySendDTO.setHaveBackCalc(NumberUtils.INTEGER_ONE);
|
||||
// }
|
||||
// });
|
||||
List<WeaTableColumn> columns = buildWeaTableColumns();
|
||||
WeaTable table = new WeaTable();
|
||||
table.setColumns(columns);
|
||||
|
|
@ -327,7 +316,6 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
|||
|
||||
PageInfo<SalarySendInfoListDTO> pageInfo = getSalarySendService(user).salarySendInfoListPage(queryParam);
|
||||
|
||||
|
||||
return pageInfo;
|
||||
}
|
||||
|
||||
|
|
@ -691,6 +679,20 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
|
|||
|
||||
return PayrollCheckTypeEnum.parseByValue(conf.getConfValue());
|
||||
}
|
||||
|
||||
public void confirmSalaryBill(Long salaryInfoId) {
|
||||
if(ObjectUtil.isNull(salaryInfoId)){
|
||||
throw new SalaryRunTimeException("工资单id不能为空!");
|
||||
}
|
||||
getSalaryBillService(user).confirmSalaryBill(salaryInfoId);
|
||||
}
|
||||
|
||||
public void feedBackSalaryBill(Long salaryInfoId) {
|
||||
if(ObjectUtil.isNull(salaryInfoId)){
|
||||
throw new SalaryRunTimeException("工资单id不能为空!");
|
||||
}
|
||||
getSalaryBillService(user).feedBackSalaryBill(salaryInfoId);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import com.engine.salary.sys.entity.vo.OrderRuleVO;
|
|||
import com.engine.salary.sys.enums.TaxDeclarationFunctionEnum;
|
||||
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.page.PageInfo;
|
||||
import com.engine.salary.util.page.SalaryPageUtil;
|
||||
import com.engine.salary.util.valid.RuntimeTypeEnum;
|
||||
|
|
@ -43,11 +44,18 @@ public class SalarySystemConfigWrapper extends Service {
|
|||
String log = baseBean.getPropValue("hrmSalary", "log");
|
||||
String version = baseBean.getPropValue("hrmSalary", "version");
|
||||
String openFormulaForcedEditing = baseBean.getPropValue("hrmSalary", "openFormulaForcedEditing");
|
||||
String showEncryptOperationButton = baseBean.getPropValue("hrmSalary", "showEncryptOperationButton");
|
||||
|
||||
Map<String, Object> o = new HashMap<>();
|
||||
o.put("log", log);
|
||||
o.put("version", version);
|
||||
o.put("openFormulaForcedEditing", openFormulaForcedEditing);
|
||||
o.put("showEncryptOperationButton", showEncryptOperationButton);
|
||||
|
||||
|
||||
List<SalarySysConfPO> confPOS = getSalarySysConfService(user).listSome(SalarySysConfPO.builder().build());
|
||||
Map<String, String> map = SalaryEntityUtil.convert2Map(confPOS, SalarySysConfPO::getConfKey, SalarySysConfPO::getConfValue);
|
||||
o.putAll(map);
|
||||
return o;
|
||||
}
|
||||
|
||||
|
|
@ -143,4 +151,16 @@ public class SalarySystemConfigWrapper extends Service {
|
|||
public void saveSalaryAcctEmployeeRule(String rule) {
|
||||
getSalarySysConfService(user).saveSalaryAcctEmployeeRule(rule);
|
||||
}
|
||||
|
||||
public void saveWithDrawTaxDeclaration(SalarySysConfPO param) {
|
||||
getSalarySysConfService(user).saveWithDrawTaxDeclaration(param);
|
||||
}
|
||||
|
||||
public void saveArchiveDelete(String setting) {
|
||||
getSalarySysConfService(user).saveArchiveDelete(setting);
|
||||
}
|
||||
|
||||
public void saveSalarySendFeedback(SalarySysConfPO param) {
|
||||
getSalarySysConfService(user).saveSalarySendFeedback(param);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ import com.engine.salary.util.SalaryI18nUtil;
|
|||
import com.engine.salary.util.page.PageInfo;
|
||||
import com.mzlion.core.utils.BeanUtils;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.ObjectUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.commons.lang3.math.NumberUtils;
|
||||
import weaver.hrm.User;
|
||||
|
|
@ -60,6 +61,10 @@ public class SalaryTemplateWrapper extends Service {
|
|||
return ServiceUtil.getService(TaxAgentServiceImpl.class, user);
|
||||
}
|
||||
|
||||
private SalaryBillBaseSetService getSalaryBillBaseSetService(User user) {
|
||||
return ServiceUtil.getService(SalaryBillBaseSetServiceImpl.class, user);
|
||||
}
|
||||
|
||||
/**
|
||||
* 工资单模板列表
|
||||
*
|
||||
|
|
@ -153,6 +158,9 @@ public class SalaryTemplateWrapper extends Service {
|
|||
salaryTemplateBaseSetDTO.setMsgStatus(po.getMsgStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()));
|
||||
salaryTemplateBaseSetDTO.setSalarySob(po.getSalarySobId());
|
||||
salaryTemplateBaseSetDTO.setSendEmail(po.getSendEmailId());
|
||||
salaryTemplateBaseSetDTO.setAutoSendStatus(po.getAutoSendStatus() == null ? false : po.getAutoSendStatus().equals(SalaryTemplateWhetherEnum.TRUE.getValue()));
|
||||
salaryTemplateBaseSetDTO.setAckFeedbackStatus(po.getAckFeedbackStatus() == null ? false : NumberUtils.compare(po.getAckFeedbackStatus(), 1) == 0);
|
||||
salaryTemplateBaseSetDTO.setAutoAckDays(ObjectUtils.isEmpty(po.getAutoAckDays()) ? 7 : po.getAutoAckDays());
|
||||
// 规则赋值 如果为ALL传“” 如果为byRule传薪资项目ID
|
||||
salaryTemplateBaseSetDTO.setReplenishRule(SalaryTemplateReplenishRuleEnum.ALL.getValue().equals(po.getReplenishRule()) ? "" : po.getReplenishRule());
|
||||
// 规则设置赋值
|
||||
|
|
@ -181,6 +189,13 @@ public class SalaryTemplateWrapper extends Service {
|
|||
|
||||
// WeaForm salaryTemplateBase = SalaryFormatUtil.<SalaryTemplateBaseSetDTO>getInstance().buildForm(SalaryTemplateBaseSetDTO.class, SalaryTemplateBaseSetDTO.builder().salarySobOptions(salarySobOptions).sendEmailOptions(sendEmailOptions).build());
|
||||
|
||||
if(id == null){
|
||||
// 新建,获取默认的确认反馈信息
|
||||
SalaryBillAckFeedbackDTO defaultAckFeedback = getSalaryBillBaseSetService(user).getDefaultAckFeedbackSetting();
|
||||
salaryTemplateBaseSetDTO.setAckFeedbackStatus(StringUtils.equals(defaultAckFeedback.getAckStatus(),"1"));
|
||||
salaryTemplateBaseSetDTO.setAutoAckDays(defaultAckFeedback.getAutoAckDays());
|
||||
salaryTemplateBaseSetDTO.setFeedbackUrl(defaultAckFeedback.getFeedBackUrl());
|
||||
}
|
||||
Map<String, Object> salaryTemplateBase = new HashMap<>();
|
||||
salaryTemplateBase.put("data", salaryTemplateBaseSetDTO);
|
||||
salaryTemplateBase.put("salarySobOptions", salarySobOptions);
|
||||
|
|
@ -415,7 +430,7 @@ public class SalaryTemplateWrapper extends Service {
|
|||
Boolean isReplenish = Optional.ofNullable(param.getIsReplenish())
|
||||
.orElse(false);
|
||||
List<SalaryTemplateSalaryItemSetListDTO> salaryItemSet
|
||||
= getSalaryTemplateService(user).getSalaryItemSet(param.getSalarySobId(), isReplenish);
|
||||
= getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish);
|
||||
Long groupId = param.getGroupId();
|
||||
return salaryItemSet.stream()
|
||||
.filter(s -> Objects.equals(s.getGroupId(), groupId + ""))
|
||||
|
|
@ -437,7 +452,7 @@ public class SalaryTemplateWrapper extends Service {
|
|||
public List<SalaryTemplateSalaryItemSetListDTO> getSalaryGroupSet(SalaryBillSalaryGroupQueryParam param) {
|
||||
Boolean isReplenish = Optional.ofNullable(param.getIsReplenish())
|
||||
.orElse(false);
|
||||
return getSalaryTemplateService(user).getSalaryItemSet(param.getSalarySobId(), isReplenish)
|
||||
return getSalaryTemplateService(user).getSalaryItemSetContainHide(param.getSalarySobId(), isReplenish)
|
||||
.stream()
|
||||
.filter(group -> !Optional.ofNullable(param.getExistSalaryGroupIds()).orElse(Collections.emptyList())
|
||||
.contains(group.getGroupId())
|
||||
|
|
|
|||
Loading…
Reference in New Issue