feat: 字段管理

This commit is contained in:
fcli 2023-01-18 09:38:43 +08:00
parent 24e0e180be
commit bd2597541d
4 changed files with 372 additions and 0 deletions

View File

@ -0,0 +1,7 @@
package com.api.salary.web;
import javax.ws.rs.Path;
@Path("/bs/hrmsalary/salaryField")
public class SalaryFieldController extends com.engine.salary.web.SalaryFieldController{
}

View File

@ -0,0 +1,78 @@
package com.engine.salary.entity.salaryitem.dto;
import com.cloudstore.eccom.pc.table.WeaTableType;
import com.engine.salary.annotation.SalaryTable;
import com.engine.salary.annotation.SalaryTableColumn;
import com.engine.salary.annotation.SalaryTableOperate;
import com.engine.salary.annotation.TableTitle;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
/**
* 字段管理列表
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@SalaryTable(pageId = "a4f85287-e3f9-ab21-adn9-7d06e54y6r98", tableType = WeaTableType.CHECKBOX, operates = {@SalaryTableOperate(text = "编辑", index = "0"), @SalaryTableOperate(text = "删除", index = "1")})
public class SalaryFieldListDTO {
@JsonSerialize(using = ToStringSerializer.class)
@SalaryTableColumn(column = "id", display = false)
private Long id;
@SalaryTableColumn(text = "名称", width = "10%", column = "name")
@TableTitle(title = "名称",dataIndex = "name",key = "name")
private String name;
//默认使用
@SalaryTableColumn(text = "默认使用", width = "10%", column = "useDefault")
@TableTitle(title = "默认使用",dataIndex = "useDefault",key = "useDefault")
private Integer useDefault;
//进位规则
@SalaryTableColumn(text = "进位规则", width = "10%", column = "roundingMode",transmethod = "com.engine.salary.transmethod.TransMethod.roundingMode")
@TableTitle(title = "进位规则",dataIndex = "roundingMode",key = "roundingMode")
private String roundingMode;
//保留小数位
@SalaryTableColumn(text = "保留小数位", width = "10%", column = "pattern")
@TableTitle(title = "保留小数位",dataIndex = "pattern",key = "pattern")
private Integer pattern;
//取值方式
@SalaryTableColumn(text = "取值方式", width = "10%", column = "valueType",transmethod = "com.engine.salary.transmethod.TransMethod.datasource")
@TableTitle(title = "取值方式",dataIndex = "valueType",key = "valueType")
private String valueType;
//公式id
private Long formulaId;
//公式内容
private String formulaContent;
//备注
@SalaryTableColumn(text = "备注", width = "10%", column = "description")
@TableTitle(title = "备注",dataIndex = "description",key = "description")
private String description;
//是否可以编辑
private Boolean canEdit;
//是否可以删除
private Boolean canDelete;
@SalaryTableColumn(text = "操作", width = "20%", column = "operate")
private String operate;
}

View File

@ -0,0 +1,88 @@
package com.engine.salary.web;
import com.engine.common.util.ServiceUtil;
import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.util.ResponseResult;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.wrapper.SalaryFieldWrapper;
import io.swagger.v3.oas.annotations.parameters.RequestBody;
import weaver.hrm.HrmUserVarify;
import weaver.hrm.User;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.ws.rs.*;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.MediaType;
import java.util.Collection;
/**
* 薪资字段管理
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalaryFieldController {
private SalaryFieldWrapper getSalaryFieldWrapper(User user) {
return ServiceUtil.getService(SalaryFieldWrapper.class, user);
}
/**
* 字段管理列表
* @see
*/
@POST
@Path("/list")
@Produces(MediaType.APPLICATION_JSON)
public String listSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSearchParam searchParam) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<SalaryItemSearchParam, PageInfo<SalaryItemListDTO>>(user).run(getSalaryFieldWrapper(user)::listPage, searchParam);
}
/**
* 字段管理详情
* @see
*/
@GET
@Path("/getSalaryForm")
@Produces(MediaType.APPLICATION_JSON)
public String getSalaryItemForm(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "id") Long id) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Long, SalaryItemFormDTO>(user).run(getSalaryFieldWrapper(user)::getForm, id);
}
/**
* 删除
* @see
*/
@POST
@Path("/delete")
@Produces(MediaType.APPLICATION_JSON)
public String deleteSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody Collection<Long> ids) {
User user = HrmUserVarify.getUser(request, response);
return new ResponseResult<Collection<Long>, String>(user).run(getSalaryFieldWrapper(user)::delete, ids);
}
/**
* 保存字段管理
* @see
*/
@POST
@Path("/save")
@Produces(MediaType.APPLICATION_JSON)
public String saveSalaryItem(@Context HttpServletRequest request, @Context HttpServletResponse response, @RequestBody SalaryItemSaveParam saveParam) {
User user = HrmUserVarify.getUser(request, response);
if (saveParam.getId() == null || saveParam.getId() <= 0) {
return new ResponseResult<SalaryItemSaveParam, String>(user).run(getSalaryFieldWrapper(user)::save, saveParam);
} else {
return new ResponseResult<SalaryItemSaveParam, String>(user).run(getSalaryFieldWrapper(user)::update, saveParam);
}
}
}

View File

@ -0,0 +1,199 @@
package com.engine.salary.wrapper;
import com.engine.common.util.ServiceUtil;
import com.engine.core.impl.Service;
import com.engine.salary.entity.salaryformula.ExpressFormula;
import com.engine.salary.entity.salaryitem.bo.SalaryItemBO;
import com.engine.salary.entity.salaryitem.dto.SalaryFieldListDTO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemFormDTO;
import com.engine.salary.entity.salaryitem.dto.SalaryItemListDTO;
import com.engine.salary.entity.salaryitem.param.SalaryItemSaveParam;
import com.engine.salary.entity.salaryitem.param.SalaryItemSearchParam;
import com.engine.salary.entity.salaryitem.po.SalaryItemPO;
import com.engine.salary.entity.salarysob.po.SalarySobItemPO;
import com.engine.salary.enums.SalaryOnOffEnum;
import com.engine.salary.enums.SalaryRoundingModeEnum;
import com.engine.salary.enums.SalarySystemTypeEnum;
import com.engine.salary.enums.SalaryValueTypeEnum;
import com.engine.salary.enums.salaryitem.SalaryDataTypeEnum;
import com.engine.salary.exception.SalaryRunTimeException;
import com.engine.salary.service.SalaryFormulaService;
import com.engine.salary.service.SalaryItemService;
import com.engine.salary.service.SalarySobItemService;
import com.engine.salary.service.impl.SalaryFormulaServiceImpl;
import com.engine.salary.service.impl.SalaryItemServiceImpl;
import com.engine.salary.service.impl.SalarySobItemServiceImpl;
import com.engine.salary.util.SalaryEntityUtil;
import com.engine.salary.util.SalaryI18nUtil;
import com.engine.salary.util.page.Column;
import com.engine.salary.util.page.PageInfo;
import com.engine.salary.util.valid.RuntimeTypeEnum;
import com.engine.salary.util.valid.ValidUtil;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang.math.NumberUtils;
import weaver.hrm.User;
import java.util.*;
/**
* 字段管理
* <p>Copyright: Copyright (c) 2022</p>
* <p>Company: 泛微软件</p>
*
* @author qiantao
* @version 1.0
**/
public class SalaryFieldWrapper extends Service {
private SalaryItemService getSalaryItemService(User user) {
return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user);
}
private SalaryFormulaService getSalaryFormulaService(User user) {
return (SalaryFormulaService) ServiceUtil.getService(SalaryFormulaServiceImpl.class, user);
}
private SalarySobItemService getSalarySobItemService(User user) {
return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user);
}
/**
* 薪资项目列表
*
* @param searchParam 查询参数
* @return
*/
public PageInfo<SalaryItemListDTO> listPage(SalaryItemSearchParam searchParam) {
// 1查询薪资项目
//设置查询档案引用项目
searchParam.setUseInEmployeeSalary(SalaryOnOffEnum.ON.getValue());
PageInfo<SalaryItemPO> page = getSalaryItemService(user).listPageByParam(searchParam);
List<SalaryItemPO> salaryItemList = page.getList();
//最终返回的分页对象
PageInfo<SalaryItemListDTO> salaryItemListDTOPage = new PageInfo<>(SalaryItemListDTO.class);
salaryItemListDTOPage.setPageSize(page.getPageSize());
salaryItemListDTOPage.setPageNum(page.getPageNum());
salaryItemListDTOPage.setTotal(page.getTotal());
//获取字段管理的字段列表
PageInfo<SalaryFieldListDTO> fieldColumnsPage = new PageInfo<>(SalaryFieldListDTO.class);
List<Column> fieldColumns = fieldColumnsPage.getColumns();
salaryItemListDTOPage.getColumns().clear();
salaryItemListDTOPage.setColumns(fieldColumns);
// 被薪资账套引用的薪资项目
List<SalarySobItemPO> salarySobItems = new ArrayList<>();
if (CollectionUtils.isNotEmpty(salaryItemList)) {
//2填充公式内容
Set<Long> formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId);
List<ExpressFormula> expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds);
// 转换成薪资项目列表dto
List<SalaryItemListDTO> salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, Collections.emptyList());
//薪资档案引用时不能删除
salaryItemListDTOS.forEach(dto -> {
if (dto.getUseInEmployeeSalary() == 1) {
dto.setCanDelete(false);
}
});
//3被引用的薪资项目不能删除
Set<Long> salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId);
salarySobItems = getSalarySobItemService(user).listBySalaryItemIds(salaryItemIds);
if (CollectionUtils.isNotEmpty(salarySobItems)) {
Set<Long> salaryItemIdsUseBySob = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId);
salaryItemListDTOS.forEach(dto -> {
if (salaryItemIdsUseBySob.contains(dto.getId())) {
dto.setCanDelete(false);
}
});
}
salaryItemListDTOPage.setList(salaryItemListDTOS);
}
return salaryItemListDTOPage;
}
/**
* 薪资项目详情
*
* @param id 主键id
* @return
*/
public SalaryItemFormDTO getForm(Long id) {
SalaryItemFormDTO salaryItemFormDTO = new SalaryItemFormDTO();
// 默认可以编辑
salaryItemFormDTO.setCanEdit(NumberUtils.INTEGER_ONE);
if (!Objects.isNull(id)) {
// 查询薪资项目
SalaryItemPO salaryItemPO = getSalaryItemService(user).getById(id);
// 系统薪资项目
if (Objects.isNull(salaryItemPO)) {
throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除"));
}
ExpressFormula expressFormula;
// // 转换成薪资项目详情dto
salaryItemFormDTO = SalaryItemBO.convert2FormDTO(salaryItemPO);
expressFormula = getSalaryFormulaService(user).getExpressFormula(salaryItemPO.getFormulaId());
salaryItemFormDTO.setFormulaContent(Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse(""));
}
return salaryItemFormDTO;
}
/**
* 保存薪资项目
*
* @param saveParam 保存参数
*/
public void save(SalaryItemSaveParam saveParam) {
saveParam.setValueType(SalaryValueTypeEnum.INPUT.getValue());
saveParam.setUseInEmployeeSalary(NumberUtils.INTEGER_ONE);
saveParam.setSystemType(SalarySystemTypeEnum.CUSTOM.getValue());
ValidUtil.doValidator(saveParam);
validParam(saveParam);
getSalaryItemService(user).save(saveParam);
}
private void validParam(SalaryItemSaveParam saveParam) {
if (SalarySystemTypeEnum.parseByValue(saveParam.getSystemType()) == null) {
throw new SalaryRunTimeException("系统内置的薪资项目异常");
}
if (SalaryRoundingModeEnum.parseByValue(saveParam.getRoundingMode()) == null) {
throw new SalaryRunTimeException("舍入规则异常");
}
if (SalaryValueTypeEnum.parseByValue(saveParam.getValueType()) == null) {
throw new SalaryRunTimeException("取值方式异常");
}
if (SalaryDataTypeEnum.parseByValue(saveParam.getDataType()) == null) {
throw new SalaryRunTimeException("字段类型异常");
}
}
/**
* 编辑薪资项目
*
* @param saveParam 更新参数
*/
public void update(SalaryItemSaveParam saveParam) {
saveParam.setValueType(SalaryValueTypeEnum.INPUT.getValue());
saveParam.setUseInEmployeeSalary(NumberUtils.INTEGER_ONE);
saveParam.setSystemType(SalarySystemTypeEnum.CUSTOM.getValue());
ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE);
validParam(saveParam);
getSalaryItemService(user).update(saveParam);
}
/**
* 删除薪资项目
*
* @param ids 主键id
*/
public void delete(Collection<Long> ids) {
getSalaryItemService(user).deleteByIds(ids);
}
}