Compare commits

...

34 Commits

Author SHA1 Message Date
钱涛 1ae436e91a 修复社保批量核算 2025-09-16 10:07:16 +08:00
钱涛 f224916aac 社保台账:
1、批量新建核算记录并核算。
2、批量归档
3、批量重新核算
薪资核算:
1、批量新建核算记录并核算。
2、批量归档
3、批量重新核算
工资单:
1、批量发放
2、批量撤回
申报表:
1、批量申报
2025-09-16 10:07:16 +08:00
钱涛 2767114bfb 社保台账:
1、批量新建核算记录并核算。
2、批量归档
3、批量重新核算
薪资核算:
1、批量新建核算记录并核算。
2、批量归档
3、批量重新核算
工资单:
1、批量发放
2、批量撤回
申报表:
1、批量申报
2025-09-16 10:07:15 +08:00
Harryxzy 0762fbee4d 社保StringUtils修改为lang3包中 2025-09-12 15:59:40 +08:00
Harryxzy 24676fe027 考勤引用多语言修复 2025-09-10 11:45:43 +08:00
Harryxzy fb239f34ed 修复薪资核算筛选为空时导出报错 2025-07-09 10:08:27 +08:00
钱涛 8168a42b61 日志 2025-07-07 10:20:53 +08:00
Harryxzy bfd953d082 水印单独配置分部不显示 2025-06-19 17:28:09 +08:00
Harryxzy e402029f6c Merge remote-tracking branch 'origin/release/2.19.1.2501.01' into release/2.19.1.2501.01 2025-06-19 11:38:40 +08:00
Harryxzy 63c9558331 修复社保上下限校验 漏掉只开启了公司没开启个人的场景 2025-06-19 11:38:05 +08:00
钱涛 f7cba636b3 修复默认值保留位数 2025-06-18 17:21:22 +08:00
钱涛 919ade5715 Merge remote-tracking branch 'origin/release/2.19.1.2501.01' into release/2.19.1.2501.01 2025-06-18 13:32:17 +08:00
钱涛 de5caded9e 修复工资单性别问题 2025-06-18 13:32:12 +08:00
Harryxzy c2f2390013 修复薪资明细导出,合计行统计文本字段 2025-06-16 16:41:38 +08:00
Harryxzy aff5dbf185 Merge remote-tracking branch 'origin/release/2.19.1.2501.01' into release/2.19.1.2501.01 2025-05-29 10:39:32 +08:00
Harryxzy 578842aa39 修复数据穿透过滤条件 2025-05-29 10:39:06 +08:00
钱涛 1026ff1aae fix邮件中数据为null 2025-05-27 15:56:33 +08:00
钱涛 d9982d2508 fix邮件中数据为null 2025-05-27 10:46:11 +08:00
钱涛 93dc70de26 fix邮件中数据为null 2025-05-26 10:36:38 +08:00
钱涛 81e87ec9ce 优化,导出时过滤空字符串 2025-05-20 16:44:46 +08:00
Harryxzy 05e92add4a 修复明细导出 2025-05-13 16:07:46 +08:00
钱涛 7de3dca2a3 撤回的工资单不允许查看 2025-05-13 13:14:30 +08:00
钱涛 ca75a5f403 fix导出明细 2025-04-29 16:57:33 +08:00
钱涛 bc8e80b4e6 增加SUBSTR拦截处理 2025-04-28 18:14:17 +08:00
Harryxzy 25c8479d53 修复社保福利台账线下对比和核算人数不匹配问题 2025-04-24 17:48:54 +08:00
钱涛 22f494fe12 修复按照扣缴义务人名称检索 2025-04-24 16:02:34 +08:00
钱涛 7a7030a91c 申报表税款所属期检索和申报 2025-04-23 17:39:30 +08:00
钱涛 552cee8a6f 修复合并计税问题 2025-04-21 15:49:28 +08:00
钱涛 0e93cbab04 t 2025-04-21 10:37:44 +08:00
钱涛 d01c9bf06f 增加扣缴义务人搜索核算列表 2025-04-17 11:06:02 +08:00
钱涛 da6364a511 Merge remote-tracking branch 'origin/release/2.19.1.2501.01' into release/2.19.1.2501.01 2025-04-16 14:06:53 +08:00
钱涛 37445cdd58 fix部分发放 2025-04-16 14:06:46 +08:00
Harryxzy 99a0c3facc 2100bug修复 2025-04-16 13:26:36 +08:00
钱涛 b0fb2b3866 部分发放 2025-04-15 17:49:38 +08:00
48 changed files with 742 additions and 96 deletions

Binary file not shown.

View File

@ -7,6 +7,8 @@ import com.engine.salary.entity.taxagent.dto.TaxAgentEmployeeTaxAgentDTO;
import com.engine.salary.mapper.salarybill.SalarySendRangeObjMapper;
import com.engine.salary.service.TaxAgentService;
import com.engine.salary.service.impl.TaxAgentServiceImpl;
import com.engine.salary.util.db.MapperProxyFactory;
import com.google.common.collect.Lists;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.ibatis.session.SqlSession;
import weaver.conn.mybatis.MyBatisFactory;
@ -23,6 +25,10 @@ public class SalarySendRangeObjBiz {
return ServiceUtil.getService(TaxAgentServiceImpl.class);
}
private SalarySendRangeObjMapper getSalarySendRangeObjMapper() {
return MapperProxyFactory.getProxy(SalarySendRangeObjMapper.class);
}
public <R> R applyMapper(Function<SalarySendRangeObjMapper, R> mapper) {
try (SqlSession sqlSession = MyBatisFactory.sqlSessionFactory.openSession()) {
final SalarySendRangeObjMapper salarySendRangeObjMapper = sqlSession.getMapper(SalarySendRangeObjMapper.class);
@ -41,7 +47,13 @@ public class SalarySendRangeObjBiz {
}
public List<SalarySendUserInfoDTO> getSalarySendUserInfoDTOs(List<Long> employees) {
List<SalarySendUserInfoDTO> userDTOs = applyMapper(mapper -> mapper.getUserInfoByEmployeeIds(employees));
List<SalarySendUserInfoDTO> userDTOs = new ArrayList<>();
List<List<Long>> partition = Lists.partition(employees, 500);
partition.forEach(l->{
List<SalarySendUserInfoDTO> userInfos = getSalarySendRangeObjMapper().getUserInfoByEmployeeIds(l);
userDTOs.addAll(userInfos);
});
Map<Long, SalarySendUserInfoDTO> userMap = userDTOs.stream()
.collect(Collectors.toMap(SalarySendUserInfoDTO::getResourceId, Function.identity()));

View File

@ -267,7 +267,7 @@ public class SalaryBillBO {
}
Util_Message.store(messageBean);
} catch (IOException e) {
log.error("消息发送失败",e);
log.error("消息发送失败", e);
}
}
@ -649,7 +649,8 @@ public class SalaryBillBO {
} else {
for (Object keyName : e.keySet()) {
if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) {
boolean isHide = (isHideNull && StringUtils.isEmpty(e.getOrDefault(keyName.toString(), StringUtils.EMPTY).toString()))
String itemValue = Util.null2String(e.get(keyName.toString()));
boolean isHide = (isHideNull && StringUtils.isEmpty(itemValue))
||
(isHideZero && NumberUtils.isCreatable(e.getOrDefault(keyName.toString(), "0").toString())
&& BigDecimal.ZERO.compareTo(new BigDecimal(e.getOrDefault(keyName.toString(), "0").toString())) == 0);
@ -660,7 +661,7 @@ public class SalaryBillBO {
emailContent.append("</th>");
emailContent.append("<td style=\"padding: 16px 24px;display: table-cell;flex: 1;color: #000000d9;font-size: 12px;line-height: 1.5715;word-break: break-word;overflow-wrap: break-word;border-collapse: collapse;border: 1px solid rgba(0,0,0,.06);\">");
emailContent.append(e.get(keyName.toString()));
emailContent.append(itemValue.replaceAll("null", ""));
emailContent.append("</td>");
}
break;
@ -729,7 +730,8 @@ public class SalaryBillBO {
SalaryTemplateSalaryItemListDTO salaryItem = itemPartition.get(i);
for (Object keyName : e.keySet()) {
if ((salaryItem.getId() + SalaryArchiveConstant.DYNAMIC_SUFFIX).equals(keyName.toString())) {
boolean isHide = (isHideNull && StringUtils.isEmpty(e.getOrDefault(keyName.toString(), StringUtils.EMPTY).toString()))
String itemValue = Util.null2String(e.get(keyName.toString()));
boolean isHide = (isHideNull && StringUtils.isEmpty(itemValue))
||
(isHideZero && NumberUtils.isCreatable(e.getOrDefault(keyName.toString(), "0").toString())
&& BigDecimal.ZERO.compareTo(new BigDecimal(e.getOrDefault(keyName.toString(), "0").toString())) == 0);
@ -740,7 +742,7 @@ public class SalaryBillBO {
emailContent.append("</th>");
emailContent.append("<td style=\"padding: 16px 24px;display: table-cell;flex: 1;color: #000000d9;font-size: 12px;line-height: 1.5715;word-break: break-word;overflow-wrap: break-word;border-collapse: collapse;border: 1px solid rgba(0,0,0,.06);\">");
emailContent.append(e.get(keyName.toString()));
emailContent.append(itemValue.replaceAll("null", ""));
emailContent.append("</td>");
}
break;
@ -867,7 +869,7 @@ public class SalaryBillBO {
if ("text".equals(wmClassify)) {
wmTextFieldIds = (List<String>) salaryBillWatermark.getWmSetting().getOrDefault("wmSelectedFieldIds", Collections.emptyList());
List<String> empFields = Arrays.asList(HRM_Name, HRM_Num, HRM_Mobile, HRM_Email, HRM_CurrentOperatorId, HRM_Department);
List<String> empFields = Arrays.asList(HRM_Name, HRM_Num, HRM_Mobile, HRM_Email, HRM_CurrentOperatorId, HRM_Department, HRM_SecondDepartment);
if (wmTextFieldIds.contains(HRM_SecondDepartment)) {
// 需要查分部
salaryBillWatermark.getWmSetting().put("needQuerySubDepart", true);

View File

@ -0,0 +1,27 @@
package com.engine.salary.entity.salaryBill.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
/**
* 工资单批量操作参数
* <p>Copyright: Copyright (c) 2024</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalarySendBatParam {
// 工资单发放Id
private List<Long> salarySendIds;
}

View File

@ -1,5 +1,6 @@
package com.engine.salary.entity.salaryacct.bo;
import cn.hutool.core.util.StrUtil;
import com.engine.salary.constant.TaxDeclarationDataIndexConstant;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
@ -73,6 +74,9 @@ public class SalaryAcctConsolidatedTaxBO {
.filter(e -> Objects.equals(e.getSalaryItemId(), optional.get()))
.map(e -> SalaryEntityUtil.empty2Zero(e.getResultValue()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
if (StrUtil.isBlank(resultValue)) {
resultValue = "0.00";
}
return new BigDecimal(resultValue).add(income).toPlainString();
}
// 个税调差为0
@ -98,6 +102,9 @@ public class SalaryAcctConsolidatedTaxBO {
.map(e -> SalaryEntityUtil.empty2Zero(e.getResultValue()))
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
if (StrUtil.isBlank(resultValue)) {
resultValue = "0.00";
}
return new BigDecimal(resultValue).add(refundedOrSupplementedTax).subtract(taxAdjustment).toPlainString();
}
return resultValue;

View File

@ -0,0 +1,34 @@
package com.engine.salary.entity.salaryacct.param;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
/**
* 批量操作参数
* <p>Copyright: Copyright (c) 2024</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryAcctBatParam {
//薪资所属月
private Date salaryMonth;
//薪资账套id
private List<Long> salarySobIds;
//备注
private String description;
private List<Long> salaryAcctRecordIds;
}

View File

@ -20,7 +20,7 @@ import java.util.Collection;
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class SalaryAcctCalculateParam {
public class SalaryAcctCalculateParam {
//核算人员的id,不是employeeId而是salaryAcctEmpId
private Collection<Long> ids;

View File

@ -7,6 +7,7 @@ import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.YearMonth;
import java.util.List;
/**
* 薪资核算列表查询参数
@ -31,6 +32,11 @@ public class SalaryAcctRecordQueryParam extends BaseQueryParam {
//账套名称")
private String name;
/**
* 扣缴义务人id集合
*/
private List<Long> taxAgentIds;
private String startMonthStr;
private String endMonthStr;
}

View File

@ -144,7 +144,7 @@ public class SalarySobItemAggregateBO {
.canEdit(openFormulaForcedEditing || Objects.equals(salaryItemPO.getCanEdit(), 1))
.canDelete(openFormulaForcedEditing || salaryItemPO.getCanDelete() == null || Objects.equals(salaryItemPO.getCanDelete(), 1))
.width(salaryItemPO.getWidth())
.defaultValue(salaryItemPO.getDefaultValue())
.defaultValue(salarySobItemPO.getDefaultValue())
.build());
}
}

View File

@ -0,0 +1,40 @@
package com.engine.salary.entity.siaccount.param;
import com.engine.salary.util.valid.DataCheck;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AccountBatParam {
//账单月份")
//@NotNull
@DataCheck(require = true,message = "账单月份不能为空")
private String billMonth;
//备注")
//@Length(max = 60)
@DataCheck(max = 60,message = "备注长度不能超过60个字符")
private String remarks;
/**
* 个税扣缴义务人id
*/
@DataCheck(require = true,message = "个税扣缴义务人不能为空")
private List<Long> paymentOrganizations;
private List<Long> ids;
}

View File

@ -37,6 +37,10 @@ public class TaxDeclarationListDTO {
@TableTitle(title = "薪资类型", dataIndex = "incomeCategory", key = "incomeCategory")
private String incomeCategory;
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
@TableTitle(title = "税款所属期", dataIndex = "taxCycle", key = "taxCycle")
private Date taxCycle;
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
@TableTitle(title = "薪资所属月", dataIndex = "salaryMonth", key = "salaryMonth")
private Date salaryMonth;
@ -47,10 +51,6 @@ public class TaxDeclarationListDTO {
@TableTitle(title = "个税扣缴义务人", dataIndex = "taxAgentName", key = "taxAgentName")
private String taxAgentName;
@JsonFormat(pattern = "yyyy-MM", timezone = "GMT+8")
@TableTitle(title = "税款所属期", dataIndex = "taxCycle", key = "taxCycle")
private Date taxCycle;
//@TableTitle(title = "操作人id", dataIndex = "operateEmployeeId", key = "operateEmployeeId")
private Long operateEmployeeId;

View File

@ -0,0 +1,54 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.YearMonth;
import java.util.Date;
import java.util.List;
/**
* 生成个税申报表参数
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class TaxDeclarationBatParam {
/**
* 个税申报id
*/
private Long taxDeclarationId;
/**
* 薪资所属月
*/
private YearMonth salaryMonth;
/**
* 个税扣缴义务人
*/
private List<Long> taxAgentIds;
/**
* 备注
*/
private String description;
private String salaryMonthStr;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date taxCycle;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date salaryDate;
}

View File

@ -1,9 +1,14 @@
package com.engine.salary.entity.taxdeclaration.param;
import com.engine.salary.common.BaseQueryParam;
import lombok.*;
import com.fasterxml.jackson.annotation.JsonFormat;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.time.YearMonth;
import java.util.Date;
/**
* 个税申报记录查询条件
@ -20,12 +25,13 @@ import java.time.YearMonth;
public class TaxDeclarationListQueryParam extends BaseQueryParam {
//薪资所属月范围起点
private YearMonth fromSalaryMonth;
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date fromSalaryMonth;
//薪资所属月范围终点
private YearMonth endSalaryMonth;
//薪资所属月范围终点
@JsonFormat(pattern = "yyyy-MM-dd", timezone = "GMT+8")
private Date endSalaryMonth;
private String fromSalaryMonthStr;
private String endSalaryMonthStr;
//个税扣缴义务人菜单")
private String taxAgentName;
}

View File

@ -86,6 +86,13 @@ public class TaxDeclarationPO {
LocalDateRange salaryMonths;
//"开始日期
private Date taxCycleFromDate;
//结束日期
private Date taxCycleEndDate;
private Collection<Long> taxAgentIds;
}

View File

@ -11,6 +11,7 @@
e.workcode,
e.certificatenum as idNo,
e.accounttype as accountType,
e.sex as sex,
'false' as extEmp
from hrmresource e
left join hrmdepartment d on e.departmentid = d.id
@ -21,6 +22,7 @@
<select id="getEmployeeByIds" resultType="com.engine.salary.entity.datacollection.DataCollectionEmployee">
select e.id as employeeId,
e.lastname as username,
e.sex as sex,
e.certificatenum as idNo,
e.status as status,
e.workcode as workcode,
@ -41,6 +43,7 @@
<select id="getEmployeeByIdsIncludeAccountType" resultType="com.engine.salary.entity.datacollection.DataCollectionEmployee">
select e.id as employeeId,
e.lastname as username,
e.sex as sex,
e.certificatenum as idNo,
e.status as status,
e.workcode as workcode,
@ -122,6 +125,7 @@
select e.id as employeeId,
e.lastname as username,
e.status as status,
e.sex as sex,
e.certificatenum as idNo,
e.workcode as workcode,
d.departmentname as departmentName,
@ -228,6 +232,7 @@
select e.id as employeeId,
e.lastname as username,
e.status as status,
e.sex as sex,
e.certificatenum as idNo,
e.workcode as workcode,
d.departmentname as departmentName,
@ -282,6 +287,7 @@
e.lastname as username,
e.status as status,
e.workcode as workcode,
e.sex as sex,
e.certificatenum as idNo,
e.companystartdate as companystartdate,
e.mobile as mobile,
@ -303,6 +309,7 @@
e.status as status,
e.workcode as workcode,
e.certificatenum as idNo,
e.sex as sex,
e.companystartdate as companystartdate,
e.mobile as mobile,
e.accounttype as accountType,
@ -323,6 +330,7 @@
e.status as status,
e.workcode as workcode,
e.certificatenum as idNo,
e.sex as sex,
e.companystartdate as companystartdate,
e.mobile as mobile,
e.departmentid as departmentId,
@ -486,6 +494,7 @@
e.lastname as username,
e.status as status,
e.certificatenum as idNo,
e.sex as sex,
e.workcode as workcode,
e.companystartdate as companystartdate,
e.mobile as mobile,
@ -561,6 +570,7 @@
e.lastname as username,
e.status as status,
e.certificatenum as idNo,
e.sex as sex,
e.workcode as workcode,
d.departmentname as departmentName,
d.id as departmentId,

View File

@ -61,6 +61,12 @@
<if test="salaryMonths != null and salaryMonths.endDate != null">
AND salary_month <![CDATA[ <= ]]> #{salaryMonths.endDate}
</if>
<if test="taxCycleFromDate != null">
AND tax_cycle <![CDATA[ >= ]]> #{taxCycleFromDate}
</if>
<if test="taxCycleEndDate != null">
AND tax_cycle <![CDATA[ <= ]]> #{taxCycleEndDate}
</if>
<if test="taxAgentIds != null and taxAgentIds.size()>0">
AND tax_agent_id IN
<foreach collection="taxAgentIds" open="(" item="id" separator="," close=")">

View File

@ -45,6 +45,9 @@ public class SalaryStatisticsDataPerspectiveQueryParam extends BaseQueryParam {
//个税扣缴义务人配置
private List<Long> taxAgent;
@JsonIgnore
private List<Long> salarySob;
@JsonIgnore
//收入所得项目配置
private List<Integer> incomeCategory;

View File

@ -469,12 +469,21 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
if (reportPO.getTaxAgentSetting() != null) {
param.setTaxAgent(((List<Map>) JSON.parseArray(reportPO.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getSalarySobSetting() != null) {
param.setSalarySob(((List<Map>) JSON.parseArray(reportPO.getSalarySobSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getSubCompanySetting() != null) {
param.setSubCompany(((List<Map>) JSON.parseArray(reportPO.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getDepartSetting() != null) {
param.setDepart(((List<Map>) JSON.parseArray(reportPO.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getPositionSetting() != null) {
param.setPosition(((List<Map>) JSON.parseArray(reportPO.getPositionSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getStatusSetting() != null) {
param.setStatus(((List<Map>) JSON.parseArray(reportPO.getStatusSetting(), Map.class)).stream().map(m -> m.get(key).toString()).collect(Collectors.toList()));
}
if (reportPO.getEmployeeSetting() != null) {
param.setEmployee(((List<Map>) JSON.parseArray(reportPO.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}

View File

@ -334,7 +334,7 @@ public class SalaryStatisticsEmployeeWrapper extends Service {
sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn())));
}
} else {
sumRow.add(Util.null2String(countResult.get(weaTableColumnGroup.getColumn())));
sumRow.add("");
}
}
rowList.add(sumRow);

View File

@ -320,5 +320,13 @@ public interface SIAccountService {
void cacheWelfareField(List<String> welfareNames);
void cacheBalanceWelfareField(List<String> welfareNames);
void batSave(AccountBatParam param);
void batDelete(AccountBatParam param);
void batFile(AccountBatParam param);
void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam);
}

View File

@ -1,6 +1,7 @@
package com.engine.salary.service;
import com.engine.salary.common.LocalDateRange;
import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
@ -210,4 +211,11 @@ public interface SalaryAcctRecordService {
List<SalaryAcctRecordPO> listSome(SalaryAcctRecordPO po);
void updateDate(Long id, Date updateTime);
void batSave(SalaryAcctBatParam saveParam);
void batFile(SalaryAcctBatParam param);
void batReCalculate(SalaryAcctBatParam param);
}

View File

@ -275,7 +275,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa
.collect(Collectors.toList());
effectiveFields.forEach(attendQuoteField -> {
header.add(attendQuoteField.getFieldName());
header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage())));
}
);
}
@ -606,7 +606,7 @@ public class AttendQuoteDataServiceImpl extends Service implements AttendQuoteDa
header.add(SalaryI18nUtil.getI18nLabel(86317, "证件号码"));
// 动态列
for (AttendQuoteFieldPO attendQuoteField : attendQuoteFields) {
header.add(attendQuoteField.getFieldName());
header.add(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage())));
}
List<List<Object>> rows = new ArrayList<>();
rows.add(header);

View File

@ -27,6 +27,7 @@ import com.google.common.collect.Lists;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import weaver.general.Util;
import weaver.hrm.User;
import java.util.*;
@ -292,7 +293,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF
Map<String, String> column = columnsOptional.get();
updates.add(AttendQuoteFieldPO.builder()
.code(column.get("code"))
.fieldName(column.get("name"))
.fieldName(Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage())))
.updateTime(now)
.build());
}
@ -312,7 +313,7 @@ public class AttendQuoteFieldServiceImpl extends Service implements AttendQuoteF
Optional<Map<String, String>> columnsOptional = columns.stream().filter(column -> code.equals(column.get("code"))).findFirst();
if (columnsOptional.isPresent()) {
Map<String, String> column = columnsOptional.get();
saves.add(buildAttendQuoteField(column.get("code"), column.get("name")));
saves.add(buildAttendQuoteField(column.get("code"), Util.formatMultiLang(column.get("name"), String.valueOf(user.getLanguage()))));
}
}
if (CollectionUtils.isNotEmpty(saves)) {

View File

@ -34,6 +34,7 @@ import org.apache.commons.collections4.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import weaver.general.Util;
import weaver.hrm.User;
import java.lang.reflect.Field;
@ -476,7 +477,7 @@ public class RemoteExcelServiceImpl extends Service implements RemoteExcelServic
List<FormulaVar> formulaVars = fields.stream().map(e -> {
FormulaVar formulaVar = new FormulaVar();
formulaVar.setFieldId(referenceEnum.getValue() + SalaryFormulaFieldConstant.FIELD_ID_SEPARATOR + e.getId());
formulaVar.setName(e.getFieldName());
formulaVar.setName(Util.formatMultiLang(e.getFieldName(), String.valueOf(user.getLanguage())));
formulaVar.setSource("" + referenceEnum.getValue());
formulaVar.setFieldType(DataType.NUMBER);
return formulaVar;

View File

@ -172,7 +172,8 @@ public class SIAComparisonResultServiceImpl extends Service implements SIACompar
List<InsuranceArchivesBaseInfoPO> baseInfoPOList = getInsuranceBaseInfoMapper().listAll();
List<Long> canAccountIds = baseInfoPOList.stream()
.filter(f->f.getPaymentOrganization().toString().equals(queryParam.getPaymentOrganization())
&& (f.getRunStatus().equals(EmployeeStatusEnum.PAYING.getValue()) || f.getRunStatus().equals(EmployeeStatusEnum.STAY_DEL.getValue())))
&& !f.getRunStatus().equals(EmployeeStatusEnum.STAY_ADD.getValue())
)
.map(InsuranceArchivesBaseInfoPO::getEmployeeId)
.collect(Collectors.toList());
accountExportPOS = accountExportPOS.stream().filter(v -> canAccountIds.contains(v.getEmployeeId())).collect(Collectors.toList());

View File

@ -6802,6 +6802,55 @@ public class SIAccountServiceImpl extends Service implements SIAccountService {
Util_DataCache.setObjVal(cacheKey, JsonUtil.toJsonString(welfareNames));
}
@Override
public void batSave(AccountBatParam accountBatParam) {
List<Long> paymentOrganizations = accountBatParam.getPaymentOrganizations();
for (Long paymentOrganization : paymentOrganizations) {
AccountParam param = AccountParam.builder()
.billMonth(accountBatParam.getBillMonth())
.paymentOrganization(paymentOrganization)
.flag(true)
.remarks(accountBatParam.getRemarks())
.build();
save(param);
}
}
@Override
public void batDelete(AccountBatParam batParam) {
List<Long> ids = batParam.getIds();
for (Long id : ids) {
InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id);
AccountParam param = AccountParam.builder()
.billMonth(po.getBillMonth())
.paymentOrganization(po.getPaymentOrganization())
.build();
delete(param);
}
}
@Override
public void batFile(AccountBatParam batParam) {
List<Long> ids = batParam.getIds();
for (Long id : ids) {
InsuranceAccountBatchPO po = getInsuranceAccountBatchMapper().getById(id);
AccountParam param = AccountParam.builder()
.billMonth(po.getBillMonth())
.paymentOrganization(po.getPaymentOrganization())
.build();
file(param);
}
}
@Override
public void batSocialSecurityBenefitsRecalculate(AccountBatParam batParam) {
List<Long> ids = batParam.getIds();
for (Long id : ids) {
InsuranceAccountBatchPO param = InsuranceAccountBatchPO.builder().id(id).build();
socialSecurityBenefitsRecalculate(param);
}
}
public void accountOtherView(InsuranceAccountViewListDTO dto, List<InsuranceAccountDetailPO> pos) {
int otherNum = 0;
BigDecimal otherPaySum = new BigDecimal("0");

View File

@ -2881,12 +2881,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (otherPaymentBaseString != null) {
updateOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString);
}
if (!welBaseDiffSign) {
otherPaymentBaseString = adaptWelBaseLimit(updateOtherInfo.getOtherSchemeId(), updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (otherPaymentBaseString != null) {
updateOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "其他福利个人: " + errorMsg;
}
if ( (!welBaseDiffSign) && (!checkWelBaseLimit(updateOtherInfo.getOtherSchemeId(),updateOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "其他福利公司: " + errorMsg;
}
}
//需要拆分个人和公司福利基数时
if (welBaseDiffSign) {
@ -2952,12 +2962,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (otherPaymentBaseString != null) {
insertOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString);
}
if (!welBaseDiffSign) {
otherPaymentBaseString = adaptWelBaseLimit(insertOtherInfo.getOtherSchemeId(), insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (otherPaymentBaseString != null) {
insertOtherInfo.setOtherPaymentBaseString(otherPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "其他福利个人:" + errorMsg;
}
if ( (!welBaseDiffSign) && (!checkWelBaseLimit(insertOtherInfo.getOtherSchemeId(),insertOtherInfo.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"其他福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "其他福利公司:" + errorMsg;
}
}
//需要拆分个人和公司福利基数时
if (welBaseDiffSign) {
@ -3092,12 +3112,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (fundPaymentBaseString != null) {
updateFundInfo.setFundPaymentBaseString(fundPaymentBaseString);
}
if (!welBaseDiffSign) {
fundPaymentBaseString = adaptWelBaseLimit(updateFundInfo.getFundSchemeId(), updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (fundPaymentBaseString != null) {
updateFundInfo.setFundPaymentBaseString(fundPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "公积金个人" + errorMsg;
}
if ( (!welBaseDiffSign) && (!checkWelBaseLimit(updateFundInfo.getFundSchemeId(),updateFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "公积金公司" + errorMsg;
}
}
//需要拆分个人和公司福利基数时
@ -3168,12 +3198,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (fundPaymentBaseString != null) {
insertFundInfo.setFundPaymentBaseString(fundPaymentBaseString);
}
if (!welBaseDiffSign) {
fundPaymentBaseString = adaptWelBaseLimit(insertFundInfo.getFundSchemeId(), insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (fundPaymentBaseString != null) {
insertFundInfo.setFundPaymentBaseString(fundPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "公积金个人:" + errorMsg;
}
if ((!welBaseDiffSign) && (!checkWelBaseLimit(insertFundInfo.getFundSchemeId(),insertFundInfo.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"公积金福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "公积金公司:" + errorMsg;
}
}
//需要拆分个人和公司福利基数时
@ -3315,12 +3355,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (socialPaymentBaseString != null) {
updateSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString);
}
if (!welBaseDiffSign) {
socialPaymentBaseString = adaptWelBaseLimit(updateSocialInfo.getSocialSchemeId(), updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (socialPaymentBaseString != null) {
updateSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "社保个人:" + errorMsg;
}
if ((!welBaseDiffSign) && (!checkWelBaseLimit(updateSocialInfo.getSocialSchemeId(),updateSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "社保公司:" + errorMsg;
}
}
//需要拆分个人和公司福利基数时
@ -3390,12 +3440,22 @@ public class SIArchivesServiceImpl extends Service implements SIArchivesService
if (socialPaymentBaseString != null) {
insertSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString);
}
if (!welBaseDiffSign) {
socialPaymentBaseString = adaptWelBaseLimit(insertSocialInfo.getSocialSchemeId(), insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
if (socialPaymentBaseString != null) {
insertSocialInfo.setSocialPaymentBaseString(socialPaymentBaseString);
}
}
} else {
StringBuilder errorMsg = new StringBuilder("");
if (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg)) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "社保个人:" + errorMsg;
}
if ((!welBaseDiffSign) && (!checkWelBaseLimit(insertSocialInfo.getSocialSchemeId(),insertSocialInfo.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg))) {
// throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(0,"社保福利明细中的基数更新内容不符合相关基数上下限要求,请检查后重试!"));
combineErrorMsg = "社保公司:" + errorMsg;
}
}
//需要拆分个人和公司福利基数时
if (welBaseDiffSign) {

View File

@ -1,7 +1,6 @@
package com.engine.salary.service.impl;
import com.alibaba.fastjson.JSON;
import com.alipay.oceanbase.jdbc.StringUtils;
import com.cloudstore.eccom.pc.table.WeaTable;
import com.cloudstore.eccom.pc.table.WeaTableColumn;
import com.engine.common.util.ServiceUtil;
@ -41,6 +40,7 @@ import com.engine.salary.util.db.MapperProxyFactory;
import com.engine.salary.util.page.Column;
import com.google.common.collect.Lists;
import com.engine.salary.util.db.IdGenerator;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.BeanUtils;
import weaver.hrm.User;

View File

@ -1432,6 +1432,14 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
Boolean otherCheckBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_PERSON.getValue(), errorMsg);
Boolean socialCheckBase2 = true;
Boolean fundCheckBase2 = true;
Boolean otherCheckBase2 = true;
if (!welBaseDiffSign) {
socialCheckBase2 = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg);
fundCheckBase2 = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg);
otherCheckBase2 = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg);
}
Boolean socialCheckComBase = true;
Boolean fundCheckComBase = true;
Boolean otherCheckComBase = true;
@ -1440,17 +1448,17 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
fundCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg);
otherCheckComBase = getSIArchivesService(user).checkWelBaseLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue(), errorMsg);
}
if (socialCheckBase && fundCheckBase && otherCheckBase && socialCheckComBase && fundCheckComBase && otherCheckComBase) {
if (socialCheckBase && fundCheckBase && otherCheckBase && socialCheckBase2 && fundCheckBase2 && otherCheckBase2 && socialCheckComBase && fundCheckComBase && otherCheckComBase) {
insuranceArchivesAccountPOS.add(insuranceArchivesAccountPO);
} else {
String checkMessage = "该条数据中";
if (!socialCheckBase || !socialCheckComBase) {
if (!socialCheckBase || !socialCheckBase2 || !socialCheckComBase) {
checkMessage = checkMessage + "社保福利基数、";
}
if (!fundCheckBase || !fundCheckComBase) {
if (!fundCheckBase || !fundCheckBase2 || !fundCheckComBase) {
checkMessage = checkMessage + "公积金福利基数、";
}
if (!otherCheckBase || !otherCheckComBase) {
if (!otherCheckBase || !otherCheckBase2 || !otherCheckComBase) {
checkMessage = checkMessage + "其他福利基数、";
}
checkMessage = checkMessage.substring(0, checkMessage.length() - 1);
@ -1470,6 +1478,14 @@ public class SISchemeServiceImpl extends Service implements SISchemeService {
insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(newSocialPaymentBaseString);
insuranceArchivesFundSchemePO.setFundPaymentBaseString(newFundPaymentBaseString);
insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(newOtherPaymentBaseString);
if (!welBaseDiffSign) {
newSocialPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
newFundPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesFundSchemePO.getFundSchemeId(), insuranceArchivesFundSchemePO.getFundPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
newOtherPaymentBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesOtherSchemePO.getOtherSchemeId(), insuranceArchivesOtherSchemePO.getOtherPaymentBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());
insuranceArchivesSocialSchemePO.setSocialPaymentBaseString(newSocialPaymentBaseString);
insuranceArchivesFundSchemePO.setFundPaymentBaseString(newFundPaymentBaseString);
insuranceArchivesOtherSchemePO.setOtherPaymentBaseString(newOtherPaymentBaseString);
}
if (welBaseDiffSign) {
String newSocialPaymentComBaseString = getSIArchivesService(user).checkAndBuildWelBaseWithLimit(insuranceArchivesSocialSchemePO.getSocialSchemeId(), insuranceArchivesSocialSchemePO.getSocialPaymentComBaseString(), PaymentScopeEnum.SCOPE_COMPANY.getValue());

View File

@ -405,11 +405,13 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
if (openSum != null && StringUtils.isNotBlank(openSum.getConfValue()) && OpenEnum.parseByValue(openSum.getConfValue()) == OpenEnum.OPEN) {
total = true;
Map<String, Object> sumRow = getSalaryAcctResultService(user).sumRow(queryParam);
sumRow.forEach((k, v) -> {
if (NumberUtils.isCreatable(v.toString())) {
sumRow.put(k, new BigDecimal(v.toString()));
}
});
if (sumRow != null) {
sumRow.forEach((k, v) -> {
if (NumberUtils.isCreatable(v.toString())) {
sumRow.put(k, new BigDecimal(v.toString()));
}
});
}
if (sumRow != null) {
sumRow.put("taxAgentName", "总计");
resultMapList.add(sumRow);

View File

@ -1,13 +1,15 @@
package com.engine.salary.service.impl;
import cn.hutool.core.collection.CollUtil;
import com.api.formmode.mybatis.util.SqlProxyHandle;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.common.LocalDateRange;
import com.engine.salary.config.SalaryElogConfig;
import com.engine.hrmelog.entity.dto.LoggerContext;
import com.engine.salary.entity.salaryBill.po.SalarySendPO;
import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctEmployeePO;
@ -39,6 +41,7 @@ import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils;
import weaver.hrm.User;
import java.time.YearMonth;
import java.util.*;
import java.util.stream.Collectors;
@ -177,6 +180,21 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
po.setSalarySobIds(salarySobIds);
}
if (CollUtil.isNotEmpty(queryParam.getTaxAgentIds())) {
List<SalarySobPO> salarySobPOS = getSalarySobService(user).listByTaxAgentIds(queryParam.getTaxAgentIds());
if (CollectionUtils.isEmpty(salarySobPOS)) {
return page;
}
Set<Long> salarySobIds = SalaryEntityUtil.properties(salarySobPOS, SalarySobPO::getId);
Collection<Long> existIds = po.getSalarySobIds();
if (CollectionUtils.isNotEmpty(existIds)) {
existIds = SalaryEntityUtil.intersectionForList(existIds, salarySobIds);
po.setSalarySobIds(existIds);
} else {
po.setSalarySobIds(salarySobIds);
}
}
LocalDateRange localDateRange = new LocalDateRange();
if (Objects.nonNull(queryParam.getStartMonth())) {
localDateRange.setFromDate(SalaryDateUtil.localDateToDate(queryParam.getStartMonth().atDay(1)));
@ -827,6 +845,40 @@ public class SalaryAcctRecordServiceImpl extends Service implements SalaryAcctRe
@Override
public void updateDate(Long id, Date updateTime) {
getSalaryAcctRecordMapper().updateDate(id,updateTime);
getSalaryAcctRecordMapper().updateDate(id, updateTime);
}
@Override
public void batSave(SalaryAcctBatParam saveParam) {
List<Long> salarySobIds = saveParam.getSalarySobIds();
YearMonth salaryMonth = SalaryDateUtil.localDate2YearMonth(saveParam.getSalaryMonth());
for (int i = 0; i < salarySobIds.size(); i++) {
Long salarySobId = salarySobIds.get(i);
SalaryAcctRecordSaveParam param = SalaryAcctRecordSaveParam.builder()
.salarySobId(salarySobId)
.salaryMonth(salaryMonth)
.description(saveParam.getDescription())
.build();
save(param);
}
}
@Override
public void batFile(SalaryAcctBatParam param) {
List<Long> salaryAcctRecordIds = param.getSalaryAcctRecordIds();
for (int i = 0; i < salaryAcctRecordIds.size(); i++) {
Long recordId = salaryAcctRecordIds.get(i);
file(recordId);
}
}
@Override
public void batReCalculate(SalaryAcctBatParam param) {
List<Long> salaryAcctRecordIds = param.getSalaryAcctRecordIds();
for (int i = 0; i < salaryAcctRecordIds.size(); i++) {
Long recordId = salaryAcctRecordIds.get(i);
reCalculate(recordId);
}
}
}

View File

@ -1425,7 +1425,12 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
if (CollectionUtils.isEmpty(employeeIds)) {
return Collections.emptyList();
}
return getSalaryArchiveMapper().listPayEndDateIsNull(employeeIds);
List<List<Long>> partition = Lists.partition(employeeIds, 500);
List<SalaryArchivePO> resultList = new ArrayList<>();
partition.forEach(part -> {
resultList.addAll(getSalaryArchiveMapper().listPayEndDateIsNull(part));
});
return resultList;
}
@Override

View File

@ -169,16 +169,6 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
&& Optional.ofNullable(salaryBillProgress.getProgress()).orElse(BigDecimal.ZERO).compareTo(BigDecimal.ONE) < 0) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(136104, "有其他人员正在发送中,请等待其他人员发送结束后再操作"));
}
// 初始化进度
ProgressDTO initProgress = ProgressDTO.builder()
.title(SalaryI18nUtil.getI18nLabel(136097, "发送中"))
.totalQuantity(NumberUtils.INTEGER_ZERO)
.calculatedQuantity(NumberUtils.INTEGER_ZERO)
.progress(BigDecimal.ZERO)
.status(true)
.message("")
.build();
getProgressService(user).initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), initProgress);
List<Long> ids = param.getIds();
@ -190,6 +180,17 @@ public class SalaryBillServiceImpl extends Service implements SalaryBillService
throw new SalaryRunTimeException("工资发放范围内没有匹配员工");
}
}
// 初始化进度
ProgressDTO initProgress = ProgressDTO.builder()
.title(SalaryI18nUtil.getI18nLabel(136097, "发送中"))
.totalQuantity(NumberUtils.INTEGER_ZERO)
.calculatedQuantity(NumberUtils.INTEGER_ZERO)
.progress(BigDecimal.ZERO)
.status(true)
.message("")
.build();
getProgressService(user).initProgress(SalaryCacheKey.SALARY_GRANT_PROGRESS + "_" + salarySend.getId(), initProgress);
// 异步执行
List<Long> finalIds = ids;
LocalRunnable localRunnable = new LocalRunnable() {

View File

@ -485,6 +485,11 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
if (salarySendInfo == null) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在"));
}
if (!Objects.equals(salarySendInfo.getSendStatus(), 1)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(100511, "工资单信息不存在"));
}
Long employeeId = salarySendInfo.getEmployeeId();
if (currentEmployeeId.compareTo(employeeId) != 0) {
@ -1343,7 +1348,6 @@ public class SalarySendServiceImpl extends Service implements SalarySendService
}
@Override
public Map<String, Object> withdraw(SalarySendWithdrawParam param) {
if (param.getSalarySendId() == null) {

View File

@ -1,5 +1,6 @@
package com.engine.salary.service.impl;
import cn.hutool.core.util.StrUtil;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.hrmelog.entity.dto.LoggerContext;
@ -9,6 +10,7 @@ import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctResultPO;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobPO;
import com.engine.salary.entity.taxagent.param.TaxAgentQueryParam;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
@ -114,15 +116,12 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
// 分页参数
TaxDeclarationPO po = TaxDeclarationPO.builder().build();
LocalDateRange localDateRange = new LocalDateRange();
if (Objects.nonNull(queryParam.getFromSalaryMonth())) {
localDateRange.setFromDate(SalaryDateUtil.localDateToDate(queryParam.getFromSalaryMonth().atDay(1)));
po.setTaxCycleFromDate(queryParam.getFromSalaryMonth());
}
if (Objects.nonNull(queryParam.getEndSalaryMonth())) {
localDateRange.setEndDate(SalaryDateUtil.localDateToDate(queryParam.getEndSalaryMonth().atEndOfMonth()));
po.setTaxCycleEndDate(queryParam.getEndSalaryMonth());
}
po.setSalaryMonths(localDateRange);
// 分权
Boolean openDevolution = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
@ -138,6 +137,15 @@ public class TaxDeclarationServiceImpl extends Service implements TaxDeclaration
// 查询个税申报表
List<TaxDeclarationPO> taxDeclarationPOS = getTaxDeclarationMapper().listSome(po);
if (StrUtil.isNotBlank(queryParam.getTaxAgentName())) {
List<TaxAgentPO> taxAgentPOs = getTaxAgentService(user).list(TaxAgentQueryParam.builder().name(queryParam.getTaxAgentName()).build());
Set<Long> taxAgentIds = SalaryEntityUtil.properties(taxAgentPOs, TaxAgentPO::getId);
taxDeclarationPOS = taxDeclarationPOS.stream().filter(tax -> taxAgentIds.contains(tax.getTaxAgentId())).collect(Collectors.toList());
}
return SalaryPageUtil.buildPage(queryParam.getCurrent(), queryParam.getPageSize(),
taxDeclarationPOS, TaxDeclarationPO.class);

View File

@ -1,5 +1,6 @@
package com.engine.salary.util.excel;
import cn.hutool.core.util.StrUtil;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationLaborListDTO;
import com.engine.salary.util.SalaryDateUtil;
import com.engine.salary.util.SalaryI18nUtil;
@ -139,8 +140,10 @@ public class ExcelUtil {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
@ -235,8 +238,10 @@ public class ExcelUtil {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
@ -311,8 +316,10 @@ public class ExcelUtil {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
@ -377,8 +384,10 @@ public class ExcelUtil {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
@ -458,8 +467,10 @@ public class ExcelUtil {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));

View File

@ -1,11 +1,13 @@
package com.engine.salary.util.excel;
import cn.hutool.core.util.StrUtil;
import com.engine.salary.component.WeaTableColumnGroup;
import com.engine.salary.util.SalaryDateUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.*;
import weaver.wechat.util.Utils;
import java.awt.Color;
import java.math.BigDecimal;
@ -131,10 +133,10 @@ public class ExcelUtilPlus {
for (int i = 0; i < header.size(); i++) {
WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) header.get(i);
XSSFCell rowZeroCell = row0.createCell(i, CellType.STRING);
rowZeroCell.setCellValue(columnGroupItem.getText().toString());
rowZeroCell.setCellValue(columnGroupItem.getText());
rowZeroCell.setCellStyle(titleCellStyle);
//设置列宽
sheet.setColumnWidth(i, Math.min(255, Math.max(12, columnGroupItem.getText().length() * 4)) * 256);
sheet.setColumnWidth(i, Math.min(255, Math.max(12, Utils.null2String(columnGroupItem.getText()).length() * 4)) * 256);
patternList.add(columnGroupItem.getPattern());
}
@ -190,8 +192,10 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
if (lastRowRed && rowIndex == rowList.size() - 1) {
cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex)));
@ -199,8 +203,7 @@ public class ExcelUtilPlus {
cell.setCellStyle(numberCellStyleMap.get(patternList.get(cellIndex)));
}
cell.setCellType(CellType.NUMERIC);
double value = o == null ? 0 : ((BigDecimal) o).doubleValue();
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
cell.setCellValue(((BigDecimal) o).doubleValue());
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
@ -220,6 +223,7 @@ public class ExcelUtilPlus {
}
return workbook;
}
public static XSSFWorkbook genWorkbookV2(List<List<Object>> rowList, String sheetName) {
XSSFWorkbook workbook = new XSSFWorkbook();
@ -280,11 +284,13 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
cell.setCellValue(((BigDecimal) o).doubleValue());
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
@ -367,8 +373,10 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
@ -476,11 +484,13 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());
cell.setCellValue(((BigDecimal) o).doubleValue());
} else if (o instanceof Boolean) {
cell.setCellType(CellType.BOOLEAN);
cell.setCellValue(String.valueOf(o));
@ -674,8 +684,10 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
if (lastRowRed && rowIndex == rowList.size() - 1) {
cell.setCellStyle(numberRedCellStyleMap.get(patternList.get(cellIndex)));
@ -839,8 +851,10 @@ public class ExcelUtilPlus {
}
Object o = infoList.get(cellIndex);
if (o instanceof String) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
if (StrUtil.isNotBlank(String.valueOf(o))) {
cell.setCellType(CellType.STRING);
cell.setCellValue(String.valueOf(o));
}
} else if (o instanceof BigDecimal) {
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(o == null ? 0 : ((BigDecimal) o).doubleValue());

View File

@ -250,7 +250,9 @@ public class ValidUtil {
.replace("", "between")
.replace("", "BETWEEN")
.replace("", "union")
.replace("", "UNION");
.replace("", "UNION")
.replace("", "substr")
.replace("", "SUBSTR");
}
setValue(t, field.getName(), result);
} else if (valueTypeEnum == ValueTypeEnum.OBJECT) {

View File

@ -217,6 +217,38 @@ public class SIAccountController {
return new ResponseResult<AccountParam, String>(user).run(getService(user)::save, param);
}
@POST
@Path("/batSave")
@Produces(MediaType.APPLICATION_JSON)
public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountBatParam, String>(user).run(getService(user)::batSave, param);
}
@POST
@Path("/batDelete")
@Produces(MediaType.APPLICATION_JSON)
public String batDelete(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountBatParam, String>(user).run(getService(user)::batDelete, param);
}
@POST
@Path("/batFile")
@Produces(MediaType.APPLICATION_JSON)
public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody AccountBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountBatParam, String>(user).run(getService(user)::batFile, param);
}
@POST
@Path("/batSocialSecurityBenefitsRecalculate")
@Produces(MediaType.APPLICATION_JSON)
public String batSocialSecurityBenefitsRecalculate(@Context HttpServletRequest request, @Context HttpServletResponse response,@RequestBody AccountBatParam batParam ){
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<AccountBatParam, String>(user).run(getService(user)::batSocialSecurityBenefitsRecalculate,batParam);
}
/**
* 正常缴纳页核算

View File

@ -141,6 +141,43 @@ public class SalaryAcctController {
return new ResponseResult<Long, Long>(user).run(getSalaryAcctRecordWrapper(user)::reCalculate, param.getSalaryAcctRecordId());
}
//薪资核算
@POST
@Path("/batAccounting")
@Produces(MediaType.APPLICATION_JSON)
public String batAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctBatParam, String>(user).run(getSalaryAcctRecordWrapper(user)::batCalculate, param);
}
//保存薪资核算的基本信息
@POST
@Path("/basic/batSave")
@Produces(MediaType.APPLICATION_JSON)
public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctBatParam, Long>(user).run(getSalaryAcctRecordWrapper(user)::batSave, param);
}
//归档薪资核算记录
@POST
@Path("/batFile")
@Produces(MediaType.APPLICATION_JSON)
public String batFile(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctBatParam, Long>(user).run(getSalaryAcctRecordWrapper(user)::batFile, param);
}
//重新核算
@POST
@Path("/batReAccounting")
@Produces(MediaType.APPLICATION_JSON)
public String batReAccounting(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryAcctBatParam param) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryAcctBatParam, Long>(user).run(getSalaryAcctRecordWrapper(user)::batReCalculate, param);
}
//判断是否存在合并计税
@GET
@Path("/hasConsolidatedTax")

View File

@ -480,6 +480,29 @@ public class SalaryBillController {
return new ResponseResult<SalarySendWithdrawParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::withdraw, queryParam);
}
@POST
@Path("/send/batGrant")
@Produces(MediaType.APPLICATION_JSON)
public String batGrant(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySendBatParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::batGrant, queryParam);
}
/**
* 工资单撤回
*
* @param queryParam
* @return
*/
@POST
@Path("/send/batWithdraw")
@Produces(MediaType.APPLICATION_JSON)
public String batWithdraw(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalarySendBatParam queryParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalarySendBatParam, Map<String, Object>>(user).run(getSalarySendWrapper(user)::batWithdraw, queryParam);
}
/**
* 工资单发放详情列表的高级搜索
*

View File

@ -4,6 +4,7 @@ import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationDetailListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam;
@ -31,7 +32,6 @@ import javax.ws.rs.core.Response;
import javax.ws.rs.core.StreamingOutput;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.text.ParseException;
import java.time.LocalDate;
@ -58,10 +58,8 @@ public class TaxDeclarationController {
@POST
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationListQueryParam queryParam) throws ParseException {
public String list(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationListQueryParam queryParam){
User user = HrmUserVarify.getUser(request, response);
queryParam.setFromSalaryMonth(SalaryDateUtil.String2YearMonth(queryParam.getFromSalaryMonthStr() == null ? "" : queryParam.getFromSalaryMonthStr()));
queryParam.setEndSalaryMonth(SalaryDateUtil.String2YearMonth(queryParam.getEndSalaryMonthStr() == null ? "" : queryParam.getEndSalaryMonthStr()));
return new ResponseResult<TaxDeclarationListQueryParam, PageInfo<TaxDeclarationListDTO>>(user).run(getTaxDeclarationWrapper(user)::listPage, queryParam);
}
@ -102,6 +100,15 @@ public class TaxDeclarationController {
return new ResponseResult<TaxDeclarationSaveParam, Long>(user).run(getTaxDeclarationWrapper(user)::save, param);
}
@POST
@Path("/batSave")
@Produces(MediaType.APPLICATION_JSON)
public String batSave(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody TaxDeclarationBatParam param) {
User user = HrmUserVarify.getUser(request, response);
param.setSalaryMonth(SalaryDateUtil.String2YearMonth(param.getSalaryMonthStr()));
return new ResponseResult<TaxDeclarationBatParam, Long>(user).run(getTaxDeclarationWrapper(user)::batSave, param);
}
//个税申报表详情列表
@POST
@Path("/detail/list")

View File

@ -92,7 +92,7 @@ public class AttendQuoteDataWrapper extends Service {
attendQuoteFields.stream()
.filter(attendQuoteField->effectiveColumns.contains(Util.null2String(attendQuoteField.getId())))
.forEach(attendQuoteField -> {
columns.add(Column.builder().title(attendQuoteField.getFieldName())
columns.add(Column.builder().title(Util.formatMultiLang(attendQuoteField.getFieldName(), String.valueOf(user.getLanguage())))
.dataIndex(attendQuoteField.getId() + "_attendQuoteData")
.key(attendQuoteField.getId() + "_attendQuoteData").display(Boolean.TRUE).build());
}

View File

@ -10,12 +10,13 @@ import com.engine.salary.entity.salaryacct.bo.SalaryAcctRecordBO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctEmployeeCountDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordFormDTO;
import com.engine.salary.entity.salaryacct.dto.SalaryAcctRecordListDTO;
import com.engine.salary.entity.salaryacct.param.SalaryAcctBatParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctCalculateParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordQueryParam;
import com.engine.salary.entity.salaryacct.param.SalaryAcctRecordSaveParam;
import com.engine.salary.entity.salaryacct.po.SalaryAcctRecordPO;
import com.engine.salary.entity.salaryacct.po.SalaryAcctSobConfigPO;
import com.engine.salary.entity.salarysob.dto.SalarySobCycleDTO;
import com.engine.salary.entity.salarysob.po.SalaryApprovalRulePO;
import com.engine.salary.entity.salarysob.po.*;
import com.engine.salary.entity.taxagent.po.TaxAgentPO;
import com.engine.salary.enums.salaryaccounting.SalaryAcctRecordStatusEnum;
@ -55,6 +56,9 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private SalaryAcctResultWrapper getSalaryAcctResultWrapper(User user) {
return ServiceUtil.getService(SalaryAcctResultWrapper.class, user);
}
private SalarySobService getSalarySobService(User user) {
return ServiceUtil.getService(SalarySobServiceImpl.class, user);
@ -396,4 +400,28 @@ public class SalaryAcctRecordWrapper extends Service implements SalaryAcctRecord
public void updateSobConfig(Long id) {
getSalaryAcctSobConfigService(user).updateBySalaryAcctRecordId(id);
}
public void batSave(SalaryAcctBatParam param) {
getSalaryAcctRecordService(user).batSave(param);
}
public void batFile(SalaryAcctBatParam param) {
getSalaryAcctRecordService(user).batFile(param);
}
public void batReCalculate(SalaryAcctBatParam param) {
getSalaryAcctRecordService(user).batReCalculate(param);
}
public void batCalculate(SalaryAcctBatParam param) {
List<Long> salaryAcctRecordIds = param.getSalaryAcctRecordIds();
for (int i = 0; i < salaryAcctRecordIds.size(); i++) {
Long recordId = salaryAcctRecordIds.get(i);
SalaryAcctCalculateParam calculateParam = SalaryAcctCalculateParam.builder().salaryAcctRecordId(recordId).build();
getSalaryAcctResultWrapper(user).calculate(calculateParam);
}
}
}

View File

@ -751,4 +751,28 @@ public class SalarySendWrapper extends Service implements SalarySendWrapperProxy
public String genPdfBeforeExport(SalaryExportPdfParam salaryExportPdfParam) {
return getSalaryBillService(user).genPdfBeforeExport(salaryExportPdfParam);
}
public void batGrant(SalarySendBatParam param) {
List<Long> salarySendIds = param.getSalarySendIds();
for (int i = 0; i < salarySendIds.size(); i++) {
Long sendId = salarySendIds.get(i);
SalarySendGrantParam grantParam = SalarySendGrantParam.builder()
.salarySendId(sendId)
.build();
grant(grantParam);
}
}
public void batWithdraw(SalarySendBatParam param) {
List<Long> salarySendIds = param.getSalarySendIds();
for (int i = 0; i < salarySendIds.size(); i++) {
Long sendId = salarySendIds.get(i);
SalarySendWithdrawParam grantParam = SalarySendWithdrawParam.builder()
.salarySendId(sendId)
.build();
withdraw(grantParam);
}
}
}

View File

@ -97,7 +97,10 @@ public class SalarySobRangeWrapper extends Service {
.replace("", "between")
.replace("", "BETWEEN")
.replace("", "union")
.replace("", "UNION"));
.replace("", "UNION")
.replace("", "substr")
.replace("", "SUBSTR")
);
}
});
@ -127,7 +130,10 @@ public class SalarySobRangeWrapper extends Service {
.replace("", "between")
.replace("", "BETWEEN")
.replace("", "union")
.replace("", "UNION"));
.replace("", "UNION")
.replace("", "substr")
.replace("", "SUBSTR")
);
}
});

View File

@ -365,7 +365,10 @@ public class TaxAgentWrapper extends Service {
.replace("", "between")
.replace("", "BETWEEN")
.replace("", "union")
.replace("", "UNION"));
.replace("", "UNION")
.replace("", "substr")
.replace("", "SUBSTR")
);
}
});
@ -399,7 +402,10 @@ public class TaxAgentWrapper extends Service {
.replace("", "between")
.replace("", "BETWEEN")
.replace("", "union")
.replace("", "UNION"));
.replace("", "UNION")
.replace("", "substr")
.replace("", "SUBSTR")
);
}
});

View File

@ -9,6 +9,7 @@ import com.engine.salary.entity.taxdeclaration.bo.TaxDeclarationBO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationFormDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationInfoDTO;
import com.engine.salary.entity.taxdeclaration.dto.TaxDeclarationListDTO;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationBatParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationListQueryParam;
import com.engine.salary.entity.taxdeclaration.param.TaxDeclarationSaveParam;
import com.engine.salary.entity.taxdeclaration.po.TaxDeclarationPO;
@ -158,4 +159,20 @@ public class TaxDeclarationWrapper extends Service {
public void withDrawTaxDeclaration(Long taxDeclarationId) {
getTaxDeclarationService(user).withDrawTaxDeclaration(taxDeclarationId);
}
public void batSave(TaxDeclarationBatParam param) {
List<Long> taxAgentIds = param.getTaxAgentIds();
for (int i = 0; i < taxAgentIds.size(); i++) {
Long taxAgentId = taxAgentIds.get(i);
TaxDeclarationSaveParam saveParam = TaxDeclarationSaveParam.builder()
.salaryMonth(param.getSalaryMonth())
.taxAgentId(taxAgentId)
.description(param.getDescription())
.taxCycle(param.getTaxCycle())
.salaryDate(param.getSalaryDate())
.build();
save(saveParam);
}
}
}