Merge branch 'release/2.9.10.2312.02' into release/个税版本

# Conflicts:
#	src/com/engine/salary/util/page/SalaryPageUtil.java
This commit is contained in:
钱涛 2023-12-14 10:41:37 +08:00
commit 0856f63ca5
11 changed files with 178 additions and 81 deletions

View File

@ -2,9 +2,9 @@ Delete from LeftMenuInfo where id=100186;
/ /
Delete from LeftMenuConfig where infoid=100186; Delete from LeftMenuConfig where infoid=100186;
/ /
call LMConfig_U_ByInfoInsert (2,100118,9); select LMConfig_U_ByInfoInsert (2,100118,9);
/ /
call LMInfo_Insert (100186,541290,'','',2,100118,9,18); select LMInfo_Insert (100186,541290,'','',2,100118,9,18);
/ /
update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186; update LeftMenuInfo set mobxrouteurl = '',iconClassName = '',fullrouteurl='/spa/hrmSalary/static/index.html#/main/hrmSalary/externalPersonManage' where id = 100186;
/ /

View File

@ -1,17 +1,14 @@
select @current_date:= date_format( now(),'%Y-%m-%d'); INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA,SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL,BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER,WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME,onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl,isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryExtEmp', '1', '1', '', 'SELECT * FROM hrsa_external_employee where delete_type=0', '', '', '', '', '1','id', '', '', '', '', '', '', 2, '薪酬非系统人员', NULL, '', NULL, NULL, NULL, NULL, '', '', '2020-01-01', '19:12:12', NULL, NULL, '', '', '0', uuid(), '', '', '', '', '1', 0, 1);
select @current_time:= date_format( now(),'%T');
INSERT INTO datashowset(SHOWNAME, SHOWCLASS, DATAFROM, DATASOURCEID, SQLTEXT, WSURL, WSOPERATION, XMLTEXT, INPARA,SHOWTYPE, KEYFIELD, PARENTFIELD, SHOWFIELD, DETAILPAGEURL, TYPENAME, SELECTTYPE, SHOWPAGEURL,BROWSERFROM, NAME, CUSTOMID, CUSTOMHREF, SQLTEXT1, SQLTEXT2, NAMEHEADER, DESCRIPTIONHEADER,WSWORKNAME, SEARCHBYID, CREATEDATE, CREATETIME, MODIFYDATE, MODIFYTIME, SEARCHBYNAME,onlylowestnode, characterset, uuid, isSupportPaging, ESBID, ESBSHOWID, mobiledetailpageurl,isPhyPage, subcompanyid, unconditionalQuery) VALUES ('salaryExtEmp', '1', '1', '', 'SELECT * FROM hrsa_external_employee where delete_type=0', '', '', '', '', '1','id', '', '', '', '', '', '', 2, '薪酬非系统人员', NULL, '', NULL, NULL, NULL, NULL, '', '', @current_date,@current_time, NULL, NULL, '', '', '0', uuid(), '', '', '', '', '1', 0, 1);
select @datashowset_id:= max(id)from datashowset;
INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime) INSERT INTO datashowcacheset(showname, subcompanyid, isopencache, Createdate, createtime, Updatedate, Updatetime)
VALUES ('salaryExtEmp', '0', 0, @current_date, @current_time, NULL, NULL); VALUES ('salaryExtEmp', '0', 0, '2020-01-01', '19:12:12', NULL, NULL);
INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width)
VALUES (@datashowset_id, '姓名', 'username', '', 1, 1, uuid(), NULL); VALUES ((select max(id) from datashowparam), '姓名', 'username', '', 1, 1, uuid(), NULL);
INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width) INSERT INTO datashowparam(MAINID, FIELDNAME, SEARCHNAME, TRANSQL, ISSHOWNAME, dsporder, uuid, width)
VALUES (@datashowset_id, '手机号', 'mobile', '', 0, 2, uuid(), NULL); VALUES ((select max(id) from datashowparam), '手机号', 'mobile', '', 0, 2, uuid(), NULL);
INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield)
VALUES (@datashowset_id, '姓名', 'username', '2', '', 1, uuid(), ''); VALUES ((select max(id) from datasearchparam), '姓名', 'username', '2', '', 1, uuid(), '');
INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield) INSERT INTO datasearchparam(MAINID, FIELDNAME, SEARCHNAME, FIELDTYPE, WOKFLOWFIELDNAME, dsporder, uuid, isshowfield)
VALUES (@datashowset_id, '手机号', 'mobile', '2', '', 2, uuid(), ''); VALUES ((select max(id) from datasearchparam), '手机号', 'mobile', '2', '', 2, uuid(), '');

View File

@ -0,0 +1,70 @@
package com.engine.salary.action;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.mapper.taxagent.TaxAgentMapper;
import com.engine.salary.service.SalaryAcctRecordService;
import com.engine.salary.service.impl.SalaryAcctRecordServiceImpl;
import com.engine.salary.util.db.MapperProxyFactory;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import weaver.general.Util;
import weaver.hrm.User;
import weaver.interfaces.workflow.action.Action;
import weaver.soa.workflow.request.Property;
import weaver.soa.workflow.request.RequestInfo;
import java.util.Arrays;
import java.util.Map;
import java.util.stream.Collectors;
/**
* @author Harryxzy
* @ClassName FileSalaryAcctRecordAction
* @date 2023/12/13 9:17
* @description 薪资核算记录归档action
*/
@Slf4j
public class FileSalaryAcctRecordAction implements Action {
private SalaryAcctRecordService getSalaryAcctRecordService(User user) {
return ServiceUtil.getService(SalaryAcctRecordServiceImpl.class, user);
}
private TaxAgentMapper getTaxAgentMapper() {
return MapperProxyFactory.getProxy(TaxAgentMapper.class);
}
private String recordIdFieldName;
public String getRecordIdFieldName() {
return recordIdFieldName;
}
public void setRecordIdFieldName(String recordIdFieldName) {
this.recordIdFieldName = recordIdFieldName;
}
@Override
public String execute(RequestInfo requestInfo) {
Property[] properties = requestInfo.getMainTableInfo().getProperty();
Map<String, String> fieldMap = Arrays.stream(properties).collect(Collectors.toMap(Property::getName,
property -> Util.null2String(property.getValue())));
String salaryAcctRecordId = fieldMap.get(recordIdFieldName);
if (StringUtils.isBlank(salaryAcctRecordId)) {
requestInfo.getRequestManager().setMessage("薪资核算记录不存在");
return FAILURE_AND_CONTINUE;
}
User user = new User();
user.setUid(1);
try {
getSalaryAcctRecordService(user).file(Long.valueOf(salaryAcctRecordId));
} catch (Exception e) {
requestInfo.getRequestManager().setMessage(e.getMessage());
return FAILURE_AND_CONTINUE;
}
return SUCCESS;
}
}

View File

@ -23,6 +23,7 @@ import com.engine.salary.enums.salaryaccounting.LockStatusEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum; import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil; import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.SalaryPageUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
@ -85,7 +86,6 @@ public class SalaryAcctResultBO {
// } // }
/** /**
* 构建薪资核算结果列表的表头线下对比 * 构建薪资核算结果列表的表头线下对比
* *
@ -170,7 +170,7 @@ public class SalaryAcctResultBO {
List<WeaTableColumnGroup> columns = Lists.newArrayList(); List<WeaTableColumnGroup> columns = Lists.newArrayList();
// 员工信息字段 // 员工信息字段
for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) { for (SalarySobEmpFieldDTO salarySobEmpFieldDTO : salarySobItemAggregateDTO.getEmpFields()) {
columns.add(new WeaTableColumnGroup("150", salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId())); columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobEmpFieldDTO.getFieldName()), salarySobEmpFieldDTO.getFieldName(), salarySobEmpFieldDTO.getFieldId()));
} }
// 薪资项目分组下的薪资项目 // 薪资项目分组下的薪资项目
for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) { for (SalarySobItemGroupDTO salarySobItemGroupDTO : salarySobItemAggregateDTO.getItemGroups()) {
@ -180,29 +180,29 @@ public class SalaryAcctResultBO {
List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList(); List<WeaTableColumnGroup> childrenColumns = Lists.newArrayList();
for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) { for (SalarySobItemDTO salarySobItemDTO : salarySobItemGroupDTO.getItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern()));
} else { } else {
childrenColumns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); childrenColumns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern()));
} }
} }
WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup("150", salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns); WeaTableColumnGroup weaTableColumnWapper = new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemGroupDTO.getName()), salarySobItemGroupDTO.getName(), String.valueOf(salarySobItemGroupDTO.getId()), childrenColumns);
columns.add(weaTableColumnWapper); columns.add(weaTableColumnWapper);
} }
// 没有分类的薪资项目 // 没有分类的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) { for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern()));
} else { } else {
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern()));
} }
} }
// 回算的薪资项目 // 回算的薪资项目
for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getBackCalcItems()) { for (SalarySobItemDTO salarySobItemDTO : salarySobItemAggregateDTO.getBackCalcItems()) {
if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) { if (lockSalaryItemIds.contains(salarySobItemDTO.getSalaryItemId())) {
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern())); columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.LOCK.getValue(), salarySobItemDTO.getPattern()));
} else { } else {
columns.add(new WeaTableColumnGroup("150", salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern())); columns.add(new WeaTableColumnGroup(SalaryPageUtil.selfAdaption(salarySobItemDTO.getName()), salarySobItemDTO.getName(), "" + salarySobItemDTO.getSalaryItemId(), LockStatusEnum.UNLOCK.getValue(), salarySobItemDTO.getPattern()));
} }
} }
@ -442,9 +442,9 @@ public class SalaryAcctResultBO {
sortItem(salarySobItemPOMap); sortItem(salarySobItemPOMap);
// 根据账套分组封装薪资项目的值 // 根据账套分组封装薪资项目的值
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO> itemsByGroup = new ArrayList<>(); List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemByGroupDTO> itemsByGroup = new ArrayList<>();
for(SalarySobItemGroupPO groupPO : salarySobItemGroupPOS){ for (SalarySobItemGroupPO groupPO : salarySobItemGroupPOS) {
List<SalarySobItemPO> groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(),Collections.emptyList()); List<SalarySobItemPO> groupItems = salarySobItemPOMap.getOrDefault(groupPO.getId(), Collections.emptyList());
if(CollectionUtils.isNotEmpty(groupItems)){ if (CollectionUtils.isNotEmpty(groupItems)) {
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = groupItems.stream() List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = groupItems.stream()
.map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -452,12 +452,12 @@ public class SalaryAcctResultBO {
.salarySobItemGroupId(groupPO.getId()) .salarySobItemGroupId(groupPO.getId())
.salarySobItemGroupName(groupPO.getName()) .salarySobItemGroupName(groupPO.getName())
.salaryItems(items) .salaryItems(items)
.sortedIndex(groupPO.getSortedIndex()).build() ); .sortedIndex(groupPO.getSortedIndex()).build());
} }
} }
// 未分类 // 未分类
List<SalarySobItemPO> noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList()); List<SalarySobItemPO> noGroupItems = salarySobItemPOMap.getOrDefault(0L, Collections.emptyList());
if(CollectionUtils.isNotEmpty(noGroupItems)){ if (CollectionUtils.isNotEmpty(noGroupItems)) {
List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = noGroupItems.stream() List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> items = noGroupItems.stream()
.map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap)) .map(salarySobItemPO -> convert2SalaryAcctResultDetailItemDTO(salarySobItemPO, salaryItemMap.get(salarySobItemPO.getSalaryItemId()), resultValueMap, formulaContentMap))
.collect(Collectors.toList()); .collect(Collectors.toList());
@ -469,7 +469,6 @@ public class SalaryAcctResultBO {
} }
// // 公式项的值不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段 // // 公式项的值不根据salaryItemPO的valueType判断是因为薪资项目的valueType属性改变后并不会同步更新薪资账套中的薪资项目的formulaId字段
// List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> formulaItems = salarySobItemPOS.stream() // List<SalaryAcctResultDetailDTO.SalaryAcctResultDetailItemDTO> formulaItems = salarySobItemPOS.stream()
// .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0) // .filter(salarySobItemPO -> salarySobItemPO.getFormulaId() > 0)
@ -500,7 +499,7 @@ public class SalaryAcctResultBO {
} }
public static List<SalarySobItemGroupPO> sortGroup(List<SalarySobItemGroupPO> salarySobItemGroupPOS) { public static List<SalarySobItemGroupPO> sortGroup(List<SalarySobItemGroupPO> salarySobItemGroupPOS) {
if(CollectionUtils.isEmpty(salarySobItemGroupPOS)){ if (CollectionUtils.isEmpty(salarySobItemGroupPOS)) {
return Collections.emptyList(); return Collections.emptyList();
} }
return salarySobItemGroupPOS.stream().sorted(Comparator.comparingInt(SalarySobItemGroupPO::getSortedIndex)).collect(Collectors.toList()); return salarySobItemGroupPOS.stream().sorted(Comparator.comparingInt(SalarySobItemGroupPO::getSortedIndex)).collect(Collectors.toList());
@ -508,10 +507,9 @@ public class SalaryAcctResultBO {
/** /**
* 薪资账套的薪资项目按照sortedIndex排序 * 薪资账套的薪资项目按照sortedIndex排序
*
*/ */
public static void sortItem(Map<Long, List<SalarySobItemPO>> salarySobItemPOMap) { public static void sortItem(Map<Long, List<SalarySobItemPO>> salarySobItemPOMap) {
for(Map.Entry<Long, List<SalarySobItemPO>> entry : salarySobItemPOMap.entrySet()){ for (Map.Entry<Long, List<SalarySobItemPO>> entry : salarySobItemPOMap.entrySet()) {
List<SalarySobItemPO> items = entry.getValue(); List<SalarySobItemPO> items = entry.getValue();
if (CollectionUtils.isNotEmpty(items)) { if (CollectionUtils.isNotEmpty(items)) {
List<SalarySobItemPO> sortedValue = items.stream().sorted(Comparator.comparingInt(SalarySobItemPO::getSortedIndex)).collect(Collectors.toList()); List<SalarySobItemPO> sortedValue = items.stream().sorted(Comparator.comparingInt(SalarySobItemPO::getSortedIndex)).collect(Collectors.toList());
@ -535,9 +533,9 @@ public class SalaryAcctResultBO {
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(0)); SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(Optional.ofNullable(salarySobItemPO).map(SalarySobItemPO::getValueType).orElse(0));
String itemFormulaContent; String itemFormulaContent;
if(Objects.equals(salaryValueTypeEnum.getValue(),SalaryValueTypeEnum.FORMULA.getValue())){ if (Objects.equals(salaryValueTypeEnum.getValue(), SalaryValueTypeEnum.FORMULA.getValue())) {
itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse(""); itemFormulaContent = Optional.ofNullable(formulaContentMap.get(salarySobItemPO.getSalaryItemId().toString())).map(SalaryAcctResultListColumnDTO::getFormulaContent).orElse("");
}else{ } else {
itemFormulaContent = salaryValueTypeEnum == null ? "" : salaryValueTypeEnum.getDefaultLabel(); itemFormulaContent = salaryValueTypeEnum == null ? "" : salaryValueTypeEnum.getDefaultLabel();
} }

View File

@ -63,7 +63,7 @@ public class SalaryItemSaveParam {
private Integer roundingMode; private Integer roundingMode;
//保留小数位 //保留小数位
@DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 6, message = "小数位最多为6") @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 8, message = "小数位最多为8")
private Integer pattern; private Integer pattern;
/** /**

View File

@ -14,6 +14,7 @@ import com.engine.salary.util.SalaryI18nUtil;
import com.google.common.collect.Lists; import com.google.common.collect.Lists;
import com.google.common.collect.Maps; import com.google.common.collect.Maps;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;
import org.apache.commons.collections4.CollectionUtils; import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.StringUtils;
import org.apache.commons.lang3.math.NumberUtils; import org.apache.commons.lang3.math.NumberUtils;
@ -32,6 +33,7 @@ import java.util.stream.Collectors;
* @version 1.0 * @version 1.0
**/ **/
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor
public class SalarySobItemAggregateBO { public class SalarySobItemAggregateBO {
/** /**
@ -206,7 +208,7 @@ public class SalarySobItemAggregateBO {
* @param salarySobEmpFields 薪资账套的员工信息字段 * @param salarySobEmpFields 薪资账套的员工信息字段
* @return * @return
*/ */
private List<SalarySobEmpFieldDTO> buildEmpField(Collection<SalarySobEmpFieldPO> salarySobEmpFields) { public List<SalarySobEmpFieldDTO> buildEmpField(Collection<SalarySobEmpFieldPO> salarySobEmpFields) {
if (CollectionUtils.isEmpty(salarySobEmpFields)) { if (CollectionUtils.isEmpty(salarySobEmpFields)) {
return Collections.emptyList(); return Collections.emptyList();
} }

View File

@ -53,7 +53,7 @@ public class SalarySobItemFormDTO {
private Integer roundingMode; private Integer roundingMode;
//保留小数位") //保留小数位")
@DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 6, message = "小数位最多为6") @DataCheck(require = true, type = ValidTypeEnum.NUMBER, max = 8, message = "小数位最多为8")
private Integer pattern; private Integer pattern;
//取值方式") //取值方式")

View File

@ -116,10 +116,10 @@ public class SalaryStatisticsItemServiceImpl extends Service implements SalarySt
.maxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule())) .maxRule(SalaryEntityUtil.toJSONString(saveParam.getMaxRule()))
.minRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule())) .minRule(SalaryEntityUtil.toJSONString(saveParam.getMinRule()))
.medianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .medianRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule()))
.lastRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .lastRule(SalaryEntityUtil.toJSONString(saveParam.getLastRule()))
.oldRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .oldRule(SalaryEntityUtil.toJSONString(saveParam.getOldRule()))
.frequentRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .frequentRule(SalaryEntityUtil.toJSONString(saveParam.getFrequentRule()))
.tileRule(SalaryEntityUtil.toJSONString(saveParam.getMedianRule())) .tileRule(SalaryEntityUtil.toJSONString(saveParam.getTileRule()))
.indexValue(max + 1) .indexValue(max + 1)
.statReportId(saveParam.getStatReportId()) .statReportId(saveParam.getStatReportId())
.unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType()) .unitType(saveParam.getUnitType() == null ? UnitTypeEnum.YUAN.getValue() : saveParam.getUnitType())

View File

@ -352,7 +352,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
po.setCreator(uid); po.setCreator(uid);
po.setCreateTime(now); po.setCreateTime(now);
po.setUpdateTime(now); po.setUpdateTime(now);
po.setReportName(po.getReportName()+"_copy"); po.setReportName(po.getReportName() + "_copy");
getSalaryStatisticsReportMapper().insertIgnoreNull(po); getSalaryStatisticsReportMapper().insertIgnoreNull(po);
@ -414,11 +414,21 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth())); param.setSalaryStartMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryStartMonth()));
param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth())); param.setSalaryEndMonth(SalaryDateUtil.getFormatYearMonth(reportPO.getSalaryEndMonth()));
String key = "id"; String key = "id";
param.setTaxAgent(((List<Map>) JSON.parseArray(reportPO.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); if (reportPO.getTaxAgentSetting() != null) {
param.setSubCompany(((List<Map>) JSON.parseArray(reportPO.getSubCompanySetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); param.setTaxAgent(((List<Map>) JSON.parseArray(reportPO.getTaxAgentSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
param.setDepart(((List<Map>) JSON.parseArray(reportPO.getDepartSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); }
param.setEmployee(((List<Map>) JSON.parseArray(reportPO.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList())); if (reportPO.getSubCompanySetting() != null) {
param.setHiredate(JSON.parseArray(reportPO.getHiredateSetting(), Date.class)); 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.getEmployeeSetting() != null) {
param.setEmployee(((List<Map>) JSON.parseArray(reportPO.getEmployeeSetting(), Map.class)).stream().map(m -> Long.valueOf(m.get(key).toString())).collect(Collectors.toList()));
}
if (reportPO.getHiredateSetting() != null) {
param.setHiredate(JSON.parseArray(reportPO.getHiredateSetting(), Date.class));
}
SalaryStatisticsReportDataQueryParam queryParam = new SalaryStatisticsReportDataQueryParam(); SalaryStatisticsReportDataQueryParam queryParam = new SalaryStatisticsReportDataQueryParam();
com.mzlion.core.utils.BeanUtils.copyProperties(param, queryParam); com.mzlion.core.utils.BeanUtils.copyProperties(param, queryParam);
// 获取本期报表分权后的核算人员 // 获取本期报表分权后的核算人员
@ -1062,7 +1072,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
List<FieldSetting> fieldSettings = Optional.ofNullable(Optional.ofNullable(employeeInfoExpandDTO).orElse(new EmployeeInfoExpandDTO()).getFieldSettings()).orElse(new ArrayList<>()); List<FieldSetting> fieldSettings = Optional.ofNullable(Optional.ofNullable(employeeInfoExpandDTO).orElse(new EmployeeInfoExpandDTO()).getFieldSettings()).orElse(new ArrayList<>());
Map<Long, Map<String, String>> expandEmployeeMap = getSalaryEmployeeService(user).expandEmployeeMap(empIds, employeeInfoExpandDTO); Map<Long, Map<String, String>> expandEmployeeMap = getSalaryEmployeeService(user).expandEmployeeMap(empIds, employeeInfoExpandDTO);
log.info("扩展属性"+expandEmployeeMap); log.info("扩展属性" + expandEmployeeMap);
// List<ExtEmployeePO> extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey()); // List<ExtEmployeePO> extEmployees = extEmployeeService.listByIdsWithDeleted(accountDetailPOList.stream().filter(e -> EmployeeTypeEnum.EXT_EMPLOYEE.getValue().equals(e.getEmployeeType())).map(SalaryAcctEmployeePO::getEmployeeId).distinct().collect(Collectors.toList()), data.getTenantKey());
// Map<Long, String> employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername); // Map<Long, String> employeeExtByIdMap = SalaryEntityUtil.convert2Map(extEmployees, ExtEmployeePO::getId, ExtEmployeePO::getUsername);
@ -1075,7 +1085,7 @@ public class SalaryStatisticsReportServiceImpl extends Service implements Salary
temp.put(DM, employeeByIdMap.get(k).getUsername()); temp.put(DM, employeeByIdMap.get(k).getUsername());
fieldSettings.forEach( fieldSettings.forEach(
fieldSetting -> { fieldSetting -> {
temp.put(fieldSetting.getField(), expandEmployeeMap.getOrDefault(k,new HashMap<>()).get(fieldSetting.getField())); temp.put(fieldSetting.getField(), expandEmployeeMap.getOrDefault(k, new HashMap<>()).get(fieldSetting.getField()));
} }
); );
temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList())); temp.putAll(SalaryStatisticsReportBO.calculateItem(v, lastEmployeeListMap.get(k), sameEmployeeListMap.get(k), salaryAcctResultValueMap, data.getSalaryStatisticsItemList()));

View File

@ -18,9 +18,9 @@ import com.engine.salary.entity.salaryacct.dto.SalaryComparisonResultListDTO;
import com.engine.salary.entity.salaryacct.param.*; import com.engine.salary.entity.salaryacct.param.*;
import com.engine.salary.entity.salaryacct.po.*; import com.engine.salary.entity.salaryacct.po.*;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO; import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.bo.SalarySobItemAggregateBO;
import com.engine.salary.entity.salarysob.dto.SalarySobEmpFieldDTO;
import com.engine.salary.entity.salarysob.dto.SalarySobItemAggregateDTO; 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.SalarySobEmpFieldPO; import com.engine.salary.entity.salarysob.po.SalarySobEmpFieldPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO; import com.engine.salary.entity.salarysob.po.SalarySobItemGroupPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
@ -670,19 +670,22 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
parseHeader(headerColumnGroup, finalWeaTableColumns); parseHeader(headerColumnGroup, finalWeaTableColumns);
List<Object> headerList = new ArrayList<>(finalWeaTableColumns); List<Object> headerList = new ArrayList<>(finalWeaTableColumns);
// 查询薪资核算结果
List<Map<String, Object>> resultMapList = getSalaryAcctResultService(user).listByParam(param);
// excel导出的数据 // excel导出的数据
List<List<Object>> rows = new ArrayList<>(); List<List<Object>> rows = new ArrayList<>();
rows.add(headerList); rows.add(headerList);
for (Map<String, Object> map : resultMapList) { if (param.getImportType() != null && param.getImportType().equals("true")) {
List<Object> row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size()); // 需要导出现有数据查询薪资核算结果
for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) { List<Map<String, Object>> resultMapList = getSalaryAcctResultService(user).listByParam(param);
row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY)); for (Map<String, Object> map : resultMapList) {
List<Object> row = Lists.newArrayListWithExpectedSize(headerColumnGroup.size());
for (WeaTableColumnGroup weaTableColumn : headerColumnGroup) {
row.add(map.getOrDefault(weaTableColumn.getColumn(), StringUtils.EMPTY));
}
rows.add(row);
} }
rows.add(row);
} }
String sheetName = "薪资核算导入模板"; String sheetName = "薪资核算导入模板";
return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, false); return ExcelUtilPlus.genWorkbookWithChildTitleColumn(rows, sheetName, false);
} }
@ -784,12 +787,12 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
if (Objects.isNull(salaryAcctRecordPO)) { if (Objects.isNull(salaryAcctRecordPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除")); throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98747, "薪资核算记录不存在或已被删除"));
} }
// 模板表头(默认必带"个税扣缴义务人""姓名") // // 模板表头(默认必带"个税扣缴义务人""姓名")
List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人")); // List<Object> headerList = Lists.newArrayList(SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"));
//定位人员带部门手机号工号 // //定位人员带部门手机号工号
headerList.add("部门"); // headerList.add("部门");
headerList.add("手机号"); // headerList.add("手机号");
headerList.add("工号"); // headerList.add("工号");
// 查询薪资账套下的薪资项目 // 查询薪资账套下的薪资项目
SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId()); SalarySobItemAggregateDTO salarySobItemAggregateDTO = getSalarySobItemService(user).getAggregateBySalarySobId(salaryAcctRecordPO.getSalarySobId());
@ -804,16 +807,16 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// } // }
// //
// } // }
// 薪资项目分类下的新资项目 // // 薪资项目分类下的新资项目
for (SalarySobItemGroupDTO itemGroup : salarySobItemAggregateDTO.getItemGroups()) { // for (SalarySobItemGroupDTO itemGroup : salarySobItemAggregateDTO.getItemGroups()) {
for (SalarySobItemDTO item : itemGroup.getItems()) { // for (SalarySobItemDTO item : itemGroup.getItems()) {
headerList.add(item.getName()); // headerList.add(item.getName());
} // }
} // }
// 没有分类的薪资项目 // // 没有分类的薪资项目
for (SalarySobItemDTO item : salarySobItemAggregateDTO.getItems()) { // for (SalarySobItemDTO item : salarySobItemAggregateDTO.getItems()) {
headerList.add(item.getName()); // headerList.add(item.getName());
} // }
// 无分类薪资项目id // 无分类薪资项目id
@ -821,11 +824,10 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 查询列表的表头 // 查询列表的表头
List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO); List<WeaTableColumnGroup> weaTableColumns = listWeaTableColumn(salaryAcctRecordPO);
List<Object> finalWeaTableColumns = new ArrayList<>(); List<Object> finalWeaTableColumns = new ArrayList<>();
finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(85429, "姓名"), SalaryI18nUtil.getI18nLabel(85429, "姓名"))); // 查询薪资核算所用的薪资账套的员工信息字段
finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"))); List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "部门", "部门")); List<SalarySobEmpFieldDTO> salarySobEmpFieldDTOS = new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS);
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "手机号", "手机号")); salarySobEmpFieldDTOS.stream().forEach(empField -> finalWeaTableColumns.add(new WeaTableColumnGroup("150", SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()), SalaryI18nUtil.getI18nLabel(0, empField.getFieldName()))));
finalWeaTableColumns.add(new WeaTableColumnGroup("150", "工号", "工号"));
for (WeaTableColumnGroup tableColumn : weaTableColumns) { for (WeaTableColumnGroup tableColumn : weaTableColumns) {
WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn; WeaTableColumnGroup columnGroupItem = (WeaTableColumnGroup) tableColumn;
if (columnGroupItem.getChildren() != null) { if (columnGroupItem.getChildren() != null) {
@ -869,7 +871,7 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId())); fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX); Sheet sheet = ExcelSupport.parseFile(fileInputStream, 0, EXCEL_TYPE_XLSX);
map.put("headers", ExcelSupport.getSheetHeader(sheet, 1)); map.put("headers", ExcelSupport.getSheetHeader(sheet, 1));
map.put("list", ExcelParseHelper.parse2List(sheet, 2)); map.put("list", ExcelParseHelper.parse2List(sheet, 2, 1));
return map; return map;
} finally { } finally {
@ -944,7 +946,11 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
// 租户下所有的个税扣缴义务人 // 租户下所有的个税扣缴义务人
List<TaxAgentPO> taxAgents = getTaxAgentService(user).listAll(); List<TaxAgentPO> taxAgents = getTaxAgentService(user).listAll();
Map<String, Long> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId); Map<String, Long> taxAgentNameMap = SalaryEntityUtil.convert2Map(taxAgents, TaxAgentPO::getName, TaxAgentPO::getId);
// 薪资核算人员信息字段
List<SalarySobEmpFieldPO> salarySobEmpFieldPOS = getSalarySobEmpFieldService(user).listBySalarySobId(salaryAcctRecordPO.getSalarySobId());
List<String> salarySobEmpFields = SalaryEntityUtil.properties(new SalarySobItemAggregateBO().buildEmpField(salarySobEmpFieldPOS), SalarySobEmpFieldDTO::getFieldName, Collectors.toList());
List<String> excludeFields = Arrays.asList("个税扣缴义务人", "部门", "姓名");
salarySobEmpFields = salarySobEmpFields.stream().filter(field -> !excludeFields.contains(field)).collect(Collectors.toList());
// 索引(用于计算进度) // 索引(用于计算进度)
int index = 0; int index = 0;
// 失败的数量 // 失败的数量
@ -1066,7 +1072,9 @@ public class SalaryAcctExcelServiceImpl extends Service implements SalaryAcctExc
} }
} else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "部门"), dataKey.toString()) } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "部门"), dataKey.toString())
|| StringUtils.equals(SalaryI18nUtil.getI18nLabel(86186, "手机号"), dataKey.toString()) || StringUtils.equals(SalaryI18nUtil.getI18nLabel(86186, "手机号"), dataKey.toString())
|| StringUtils.equals(SalaryI18nUtil.getI18nLabel(86186, "工号"), dataKey.toString())) { || StringUtils.equals(SalaryI18nUtil.getI18nLabel(86186, "工号"), dataKey.toString())
|| salarySobEmpFields.contains(dataKey.toString())
) {
} else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) { } else if (StringUtils.equals(SalaryI18nUtil.getI18nLabel(86184, "个税扣缴义务人"), dataKey.toString())) {
if (StringUtils.isEmpty(dataValue)) { if (StringUtils.isEmpty(dataValue)) {

View File

@ -39,8 +39,8 @@ public class SalaryPageUtil {
return pageInfo; return pageInfo;
} }
public static <T> PageInfo<T> buildPage(Integer pageNo, Integer pageSize,List<T> totalCollection) { public static <T> PageInfo<T> buildPage(Integer pageNo, Integer pageSize, List<T> totalCollection) {
PageInfo<T> pageInfo = new PageInfo<>(); PageInfo<T> pageInfo = new PageInfo<>();
pageInfo.setTotal(totalCollection.size()); pageInfo.setTotal(totalCollection.size());
totalCollection = subList(pageNo, pageSize, totalCollection); totalCollection = subList(pageNo, pageSize, totalCollection);
pageInfo.setPageNum(pageNo); pageInfo.setPageNum(pageNo);
@ -93,6 +93,18 @@ public class SalaryPageUtil {
endIndex > source.size() ? source.size() : endIndex); endIndex > source.size() ? source.size() : endIndex);
} }
public static String selfAdaption(String chars) {
int adaption = 0;
if (chars != null) {
adaption = chars.length() * 12 + 55;
}
if (adaption < 79) {
adaption = 79;
}
return adaption + "";
}
public static List<Column> convertList(List<WeaTableColumn> columns){ public static List<Column> convertList(List<WeaTableColumn> columns){
if(CollectionUtils.isNotEmpty(columns)){ if(CollectionUtils.isNotEmpty(columns)){