导入薪资项目
This commit is contained in:
parent
48120f8e24
commit
b8b9cbbe6c
|
|
@ -718,7 +718,7 @@
|
|||
left join hrsa_formula_var var on var.formula_id = formula.id
|
||||
where formula.delete_type=0 and var.delete_type=0
|
||||
) f
|
||||
on item.formula_id = f.id
|
||||
on item.formula_id = f.formula_id
|
||||
where item.delete_type=0 and item.use_in_employee_salary = 0
|
||||
and system_type = 0
|
||||
<if test="ids != null and ids.size()>0">
|
||||
|
|
|
|||
|
|
@ -45,6 +45,7 @@ import lombok.Data;
|
|||
import lombok.NoArgsConstructor;
|
||||
import org.apache.commons.collections4.CollectionUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
import org.apache.poi.util.IOUtils;
|
||||
import org.springframework.beans.BeanUtils;
|
||||
import weaver.file.ImageFileManager;
|
||||
import weaver.hrm.User;
|
||||
|
|
@ -537,111 +538,140 @@ public class SalaryItemServiceImpl extends Service implements SalaryItemService
|
|||
|
||||
Date now = new Date();
|
||||
InputStream fileInputStream = null;
|
||||
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
|
||||
List<SalaryItemExcelConfig> configs = ExcelParseHelper.parse2Map(fileInputStream, SalaryItemExcelConfig.class, 0, 1, 13, EXCEL_TYPE_XLSX);
|
||||
try {
|
||||
fileInputStream = ImageFileManager.getInputStreamById(Integer.parseInt(param.getImageId()));
|
||||
List<SalaryItemExcelConfig> configs = ExcelParseHelper.parse2Map(fileInputStream, SalaryItemExcelConfig.class, 0, 1, 13, EXCEL_TYPE_XLSX);
|
||||
|
||||
// 错误excel内容
|
||||
ImportExcelResponse response = ImportExcelResponse.builder().totalCount(configs.size()).successCount(configs.size()).errorCount(0).errorData(new ArrayList<>()).build();
|
||||
// 错误excel内容
|
||||
ImportExcelResponse response = ImportExcelResponse.builder().totalCount(configs.size()).successCount(configs.size()).errorCount(0).errorData(new ArrayList<>()).build();
|
||||
|
||||
List<SalaryItemPO> adds = new ArrayList<>();
|
||||
List<SalaryItemPO> updates = new ArrayList<>();
|
||||
Map<Long, String> formulaItems = new HashMap<>();
|
||||
for (int i = 0; i < configs.size(); i++) {
|
||||
String rowIndex = String.format("第%s行", i + 2);
|
||||
SalaryItemExcelConfig config = configs.get(i);
|
||||
String name = config.getName();
|
||||
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByDefaultLabel(config.getValueType());
|
||||
SalaryItemPO itemPO = getByName(name);
|
||||
if (itemPO == null) {
|
||||
itemPO = SalaryItemPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.code(IdGenerator.getUUID())
|
||||
.name(config.getName())
|
||||
.systemType(SalarySystemTypeEnum.CUSTOM.getValue())
|
||||
.sysSalaryItemId(org.apache.commons.lang3.math.NumberUtils.LONG_ZERO)
|
||||
.useDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue())
|
||||
.useInEmployeeSalary(SalaryOnOffEnum.OFF.getValue())
|
||||
.hideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue())
|
||||
.roundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue())
|
||||
.pattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2)
|
||||
.valueType(salaryValueTypeEnum.getValue())
|
||||
.dataType(config.getDataType())
|
||||
//后补
|
||||
.formulaId(0L)
|
||||
.description(config.getDescription())
|
||||
.canEdit(org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE)
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(0)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.sharedType(0)
|
||||
.taxAgentIds("")
|
||||
.sortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null)
|
||||
.width(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null)
|
||||
.defaultValue(config.getDefaultValue())
|
||||
List<SysSalaryItemPO> sysSalaryItemPOS = sysSalaryItemBiz.listAll();
|
||||
Set<String> sysItems = SalaryEntityUtil.properties(sysSalaryItemPOS, SysSalaryItemPO::getName);
|
||||
|
||||
List<SalaryItemPO> adds = new ArrayList<>();
|
||||
List<SalaryItemPO> updates = new ArrayList<>();
|
||||
Map<Long, Map<String, String>> formulaItems = new HashMap<>();
|
||||
for (int i = 0; i < configs.size(); i++) {
|
||||
String rowIndex = String.format("第%s行", i + 2);
|
||||
SalaryItemExcelConfig config = configs.get(i);
|
||||
String name = config.getName();
|
||||
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByDefaultLabel(config.getValueType());
|
||||
SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(config.getDataType());
|
||||
SalaryItemPO itemPO = getByName(name);
|
||||
if (itemPO == null) {
|
||||
|
||||
if (sysItems.contains(name)) {
|
||||
ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的名称与系统名称冲突", rowIndex, name)).build();
|
||||
response.setSuccessCount(response.getSuccessCount() - 1);
|
||||
response.setErrorCount(response.getErrorCount() + 1);
|
||||
response.getErrorData().add(error);
|
||||
continue;
|
||||
}
|
||||
|
||||
itemPO = SalaryItemPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.code(IdGenerator.getUUID())
|
||||
.name(name)
|
||||
.systemType(SalarySystemTypeEnum.CUSTOM.getValue())
|
||||
.sysSalaryItemId(org.apache.commons.lang3.math.NumberUtils.LONG_ZERO)
|
||||
.useDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue())
|
||||
.useInEmployeeSalary(SalaryOnOffEnum.OFF.getValue())
|
||||
.hideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue())
|
||||
.roundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue())
|
||||
.pattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2)
|
||||
.valueType(salaryValueTypeEnum.getValue())
|
||||
.dataType(salaryDataTypeEnum.getValue())
|
||||
//后补
|
||||
.formulaId(0L)
|
||||
.description(config.getDescription())
|
||||
.canEdit(org.apache.commons.lang3.math.NumberUtils.INTEGER_ONE)
|
||||
.creator((long) user.getUID())
|
||||
.deleteType(0)
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.sharedType(0)
|
||||
.taxAgentIds("")
|
||||
.sortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null)
|
||||
.width(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null)
|
||||
.defaultValue(config.getDefaultValue())
|
||||
.build();
|
||||
adds.add(itemPO);
|
||||
} else {
|
||||
|
||||
if (SalarySystemTypeEnum.parseByValue(itemPO.getSystemType()) == SalarySystemTypeEnum.SYSTEM) {
|
||||
ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”是系统薪资项目不支持修改", rowIndex, name)).build();
|
||||
response.setSuccessCount(response.getSuccessCount() - 1);
|
||||
response.setErrorCount(response.getErrorCount() + 1);
|
||||
response.getErrorData().add(error);
|
||||
continue;
|
||||
}
|
||||
|
||||
itemPO.setUseDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue());
|
||||
itemPO.setHideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue());
|
||||
itemPO.setRoundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue());
|
||||
itemPO.setPattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2);
|
||||
itemPO.setValueType(salaryValueTypeEnum.getValue());
|
||||
itemPO.setDataType(salaryDataTypeEnum.getValue());
|
||||
//后补
|
||||
itemPO.setFormulaId(0L);
|
||||
itemPO.setDescription(config.getDescription());
|
||||
itemPO.setUpdateTime(now);
|
||||
itemPO.setSortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null);
|
||||
itemPO.setWidth(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null);
|
||||
itemPO.setDefaultValue(config.getDefaultValue());
|
||||
updates.add(itemPO);
|
||||
}
|
||||
|
||||
//解析公式
|
||||
if (salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA || salaryValueTypeEnum == SalaryValueTypeEnum.SQL) {
|
||||
Long id = itemPO.getId();
|
||||
String formula = config.getFormula();
|
||||
String sqlReturnKey = config.getSqlReturnKey();
|
||||
Map<String, String> map = new HashMap<>();
|
||||
map.put("rowIndex", rowIndex);
|
||||
map.put("formula", formula);
|
||||
map.put("sqlReturnKey", sqlReturnKey);
|
||||
formulaItems.put(id, map);
|
||||
}
|
||||
}
|
||||
|
||||
adds.forEach(getSalaryItemMapper()::insertIgnoreNull);
|
||||
updates.forEach(getSalaryItemMapper()::updateIgnoreNull);
|
||||
|
||||
for (Long id : formulaItems.keySet()) {
|
||||
SalaryItemPO itemPO = getById(id);
|
||||
Map<String, String> map = formulaItems.get(id);
|
||||
String rowIndex = map.get("rowIndex");
|
||||
String formula = map.get("formula");
|
||||
String sqlReturnKey = map.get("sqlReturnKey");
|
||||
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(itemPO.getValueType());
|
||||
SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(itemPO.getDataType());
|
||||
SalaryFormulaSaveParam saveParam = SalaryFormulaSaveParam.builder()
|
||||
.name(itemPO.getName())
|
||||
.module("salary")
|
||||
.useFor("salaryitem")
|
||||
.referenceType(salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA ? ReferenceTypeEnum.FORMULA.getValue() : ReferenceTypeEnum.SQL.getValue())
|
||||
.returnType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue())
|
||||
.validateType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue())
|
||||
.extendParam("{\"isCustomFunction\":\"0\",\"sqlReturnKey\":\"" + sqlReturnKey + "\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}")
|
||||
.formula(formula)
|
||||
.build();
|
||||
adds.add(itemPO);
|
||||
} else {
|
||||
itemPO.setUseDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getUseDefault()).getValue());
|
||||
itemPO.setHideDefault(SalaryOnOffEnum.parseByDefaultLabel(config.getHideDefault()).getValue());
|
||||
itemPO.setRoundingMode(SalaryRoundingModeEnum.parseByDefaultLabel(config.getRoundingMode()).getValue());
|
||||
itemPO.setPattern(NumberUtil.isNumber(config.getPattern()) ? Integer.parseInt(config.getPattern()) : 2);
|
||||
itemPO.setValueType(salaryValueTypeEnum.getValue());
|
||||
itemPO.setDataType(config.getDataType());
|
||||
//后补
|
||||
itemPO.setFormulaId(0L);
|
||||
itemPO.setDescription(config.getDescription());
|
||||
itemPO.setUpdateTime(now);
|
||||
itemPO.setSortedIndex(NumberUtil.isNumber(config.getSortedIndex()) ? Integer.parseInt(config.getSortedIndex()) : null);
|
||||
itemPO.setWidth(NumberUtil.isNumber(config.getWidth()) ? Integer.parseInt(config.getWidth()) : null);
|
||||
itemPO.setDefaultValue(config.getDefaultValue());
|
||||
updates.add(itemPO);
|
||||
}
|
||||
|
||||
//解析公式
|
||||
if (salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA || salaryValueTypeEnum == SalaryValueTypeEnum.SQL) {
|
||||
Long id = itemPO.getId();
|
||||
String formula = config.getFormula();
|
||||
String sqlReturnKey = config.getSqlReturnKey();
|
||||
formulaItems.put(id, formula);
|
||||
try {
|
||||
FormulaPO formulaPO = getSalaryFormulaService(user).save(saveParam);
|
||||
itemPO.setFormulaId(formulaPO.getId());
|
||||
getSalaryItemMapper().updateIgnoreNull(itemPO);
|
||||
} catch (Exception e) {
|
||||
ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("%s“%s”的公式设置有误:%s", rowIndex, itemPO.getName(), e.getMessage())).build();
|
||||
response.setSuccessCount(response.getSuccessCount() - 1);
|
||||
response.setErrorCount(response.getErrorCount() + 1);
|
||||
response.getErrorData().add(error);
|
||||
}
|
||||
}
|
||||
return response;
|
||||
} finally {
|
||||
IOUtils.closeQuietly(fileInputStream);
|
||||
}
|
||||
|
||||
adds.forEach(getSalaryItemMapper()::insertIgnoreNull);
|
||||
updates.forEach(getSalaryItemMapper()::updateIgnoreNull);
|
||||
|
||||
for (Long id : formulaItems.keySet()) {
|
||||
SalaryItemPO itemPO = getById(id);
|
||||
String formula = formulaItems.get(id);
|
||||
SalaryValueTypeEnum salaryValueTypeEnum = SalaryValueTypeEnum.parseByValue(itemPO.getValueType());
|
||||
SalaryDataTypeEnum salaryDataTypeEnum = SalaryDataTypeEnum.parseByValue(itemPO.getDataType());
|
||||
SalaryFormulaSaveParam saveParam = SalaryFormulaSaveParam.builder()
|
||||
.name(itemPO.getName())
|
||||
.module("salary")
|
||||
.useFor("salaryitem")
|
||||
.referenceType(salaryValueTypeEnum == SalaryValueTypeEnum.FORMULA ? ReferenceTypeEnum.FORMULA.getValue() : ReferenceTypeEnum.SQL.getValue())
|
||||
.returnType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue())
|
||||
.validateType(salaryDataTypeEnum == SalaryDataTypeEnum.STRING ? ReturnTypeEnum.STRING.getValue() : ReturnTypeEnum.NUMBER.getValue())
|
||||
.extendParam("{\"isCustomFunction\":\"0\",\"sqlReturnKey\":\"a\",\"openDecrypt\":\"0\",\"datasource\":{\"datasourceId\":\"\"}}")
|
||||
.formula(formula)
|
||||
.build();
|
||||
|
||||
try {
|
||||
FormulaPO formulaPO = getSalaryFormulaService(user).save(saveParam);
|
||||
itemPO.setFormulaId(formulaPO.getId());
|
||||
|
||||
} catch (Exception e) {
|
||||
ImportExcelResponse.Error error = ImportExcelResponse.Error.builder().message(String.format("“%s”的公式设置有误:%s", itemPO.getName() , e.getMessage())).build();
|
||||
response.setSuccessCount(response.getSuccessCount() - 1);
|
||||
response.setErrorCount(response.getErrorCount() + 1);
|
||||
response.getErrorData().add(error);
|
||||
}
|
||||
}
|
||||
|
||||
return response;
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -332,10 +332,10 @@ public class SalaryItemWrapper extends Service {
|
|||
row.add(SalaryDataTypeEnum.parseByValue(e.getDataType()).getDefaultLabel());
|
||||
row.add(e.getFormula() == null ? "" : e.getFormula().getFormula());
|
||||
row.add(e.getFormula() == null ? "" : JsonUtil.parseMap(Util.null2String(e.getFormula().getExtendParam()), String.class).getOrDefault("sqlReturnKey", ""));
|
||||
row.add(e.getDescription());
|
||||
row.add(e.getSortedIndex());
|
||||
row.add(e.getWidth());
|
||||
row.add(e.getDefaultValue());
|
||||
row.add(e.getDescription());
|
||||
rows.add(row);
|
||||
});
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue