diff --git a/src/com/api/salary/web/SalaryFieldController.java b/src/com/api/salary/web/SalaryFieldController.java new file mode 100644 index 000000000..4b576c1d3 --- /dev/null +++ b/src/com/api/salary/web/SalaryFieldController.java @@ -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{ +} diff --git a/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java new file mode 100644 index 000000000..69663545e --- /dev/null +++ b/src/com/engine/salary/entity/salaryitem/dto/SalaryFieldListDTO.java @@ -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; + +/** + * 字段管理列表 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @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; +} diff --git a/src/com/engine/salary/web/SalaryFieldController.java b/src/com/engine/salary/web/SalaryFieldController.java new file mode 100644 index 000000000..9d093a40c --- /dev/null +++ b/src/com/engine/salary/web/SalaryFieldController.java @@ -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; + +/** + * 薪资字段管理 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @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>(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(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 ids) { + User user = HrmUserVarify.getUser(request, response); + return new ResponseResult, 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(user).run(getSalaryFieldWrapper(user)::save, saveParam); + } else { + return new ResponseResult(user).run(getSalaryFieldWrapper(user)::update, saveParam); + } + } +} diff --git a/src/com/engine/salary/wrapper/SalaryFieldWrapper.java b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java new file mode 100644 index 000000000..938e32b34 --- /dev/null +++ b/src/com/engine/salary/wrapper/SalaryFieldWrapper.java @@ -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.*; + +/** + * 字段管理 + *

Copyright: Copyright (c) 2022

+ *

Company: 泛微软件

+ * + * @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 listPage(SalaryItemSearchParam searchParam) { + // 1、查询薪资项目 + //设置查询档案引用项目 + searchParam.setUseInEmployeeSalary(SalaryOnOffEnum.ON.getValue()); + + PageInfo page = getSalaryItemService(user).listPageByParam(searchParam); + List salaryItemList = page.getList(); + + //最终返回的分页对象 + PageInfo salaryItemListDTOPage = new PageInfo<>(SalaryItemListDTO.class); + salaryItemListDTOPage.setPageSize(page.getPageSize()); + salaryItemListDTOPage.setPageNum(page.getPageNum()); + salaryItemListDTOPage.setTotal(page.getTotal()); + //获取字段管理的字段列表 + PageInfo fieldColumnsPage = new PageInfo<>(SalaryFieldListDTO.class); + List fieldColumns = fieldColumnsPage.getColumns(); + salaryItemListDTOPage.getColumns().clear(); + salaryItemListDTOPage.setColumns(fieldColumns); + + // 被薪资账套引用的薪资项目 + List salarySobItems = new ArrayList<>(); + if (CollectionUtils.isNotEmpty(salaryItemList)) { + //2、填充公式内容 + Set formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId); + List expressFormulas = getSalaryFormulaService(user).listExpressFormula(formulaIds); + // 转换成薪资项目列表dto + List salaryItemListDTOS = SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas, Collections.emptyList()); + //薪资档案引用时不能删除 + salaryItemListDTOS.forEach(dto -> { + if (dto.getUseInEmployeeSalary() == 1) { + dto.setCanDelete(false); + } + }); + //3、被引用的薪资项目不能删除 + Set salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId); + salarySobItems = getSalarySobItemService(user).listBySalaryItemIds(salaryItemIds); + if (CollectionUtils.isNotEmpty(salarySobItems)) { + Set 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 ids) { + getSalaryItemService(user).deleteByIds(ids); + } +}