package com.engine.salary.wrapper; import com.cloudstore.eccom.result.WeaResultMsg; import com.engine.common.util.ServiceUtil; import com.engine.core.impl.Service; import com.engine.salary.component.SalaryWeaTable; import com.engine.salary.component.WeaFormOption; import com.engine.salary.entity.salaryitem.bo.SalaryItemBO; import com.engine.salary.entity.salaryitem.bo.SysSalaryItemBO; 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.salaryitem.po.SysSalaryItemPO; import com.engine.salary.entity.salarysob.po.SalarySobItemPO; import com.engine.salary.enums.SalaryItemTypeEnum; 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.SysSalaryItemService; import com.engine.salary.service.impl.SalaryItemServiceImpl; import com.engine.salary.service.impl.SalarySobItemServiceImpl; import com.engine.salary.service.impl.SysSalaryItemServiceImpl; import com.engine.salary.util.SalaryEntityUtil; import com.engine.salary.util.SalaryI18nUtil; 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 SalaryItemWrapper extends Service { private SalaryItemService getSalaryItemService(User user) { return (SalaryItemService) ServiceUtil.getService(SalaryItemServiceImpl.class, user); } private SysSalaryItemService getSysSalaryItemService(User user) { return (SysSalaryItemService) ServiceUtil.getService(SysSalaryItemServiceImpl.class, user); } private SalaryFormulaService salaryFormulaService; private SalarySobItemService getSalarySobItemService(User user) { return (SalarySobItemService) ServiceUtil.getService(SalarySobItemServiceImpl.class, user); } /** * 薪资项目列表 * * @param searchParam 查询参数 * @return */ public Map listPage(SalaryItemSearchParam searchParam) { SalaryWeaTable table = new SalaryWeaTable(user, SalaryItemListDTO.class); String fields = " t.id" + " , t.name" + " , t.code" + " , t.system_type" + " , t.sys_salary_item_id" + " , t.category" + " , t.item_type as itemType" + " , t.use_default as useDefault" + " , t.use_in_employee_salary as useInEmployeeSalary" + " , t.rounding_mode as roundingMode" + " , t.pattern" + " , t.value_type as valueType" + " , t.datasource" + " , t.formula_id" + " , t.description" + " , t.can_edit" + " , t.can_delete"; String from = "from hrsa_salary_item t"; table.setBackfields(fields); table.setSqlform(from); table.setSqlwhere(SalaryItemSearchParam.makeSqlWhere(searchParam)); table.setSqlorderby("t.id DESC"); table.setSqlprimarykey("t.id"); table.setSqlisdistinct("false"); WeaResultMsg result = new WeaResultMsg(false); result.putAll(table.makeDataResult()); result.success(); return result.getResultMap(); // // 1、查询薪资项目 // PageInfo page = getSalaryItemService(user).listPageByParam(searchParam); // List salaryItemList = page.getList(); // // //最终返回的分页对象 // PageInfo salaryItemListDTOPage = new PageInfo<>(); // // if (CollectionUtils.isNotEmpty(salaryItemList)) { // //2、填充公式内容 // Set formulaIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getFormulaId); // // todo 查询公式 // List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds); // // 转换成薪资项目列表dto // salaryItemListDTOPage.setList(SalaryItemBO.convert2ListDTO(salaryItemList, expressFormulas)); // // //3、被引用的薪资项目不能删除 // // 查询被账套引用的薪资项目 // Set salaryItemIds = SalaryEntityUtil.properties(salaryItemList, SalaryItemPO::getId); // List salarySobItemPOS = salarySobItemService.listBySalaryItemIds(salaryItemIds); // } // // 构建前端所需的数据格式 // WeaTable weaTable = SalaryFormatUtil.getInstance().buildTable(SalaryItemListDTO.class, dtoPage); // // 被薪资账套引用的薪资项目不可删除 // if (com.baomidou.mybatisplus.core.toolkit.CollectionUtils.isNotEmpty(salarySobItems)) { // Set salaryItemIds = SalaryEntityUtil.properties(salarySobItems, SalarySobItemPO::getSalaryItemId); // for (int i = 0; i < page.getRecords().size(); i++) { // SalaryItemPO salaryItemPO = page.getRecords().get(i); // if (salaryItemIds.contains(salaryItemPO.getId())) { // Permission permission = weaTable.getOperatesPermission().get(i).get(1); // permission.setVisible(false); // permission.setDisabled(true); // } // } // } } /** * 可以删除的薪资项目列表 * * @param searchParam 查询人员 * @return */ public Map listPage4CanDelete(SalaryItemSearchParam searchParam) { // 查询所有薪资账套中的薪资项目副本 List salarySobItemPOS = getSalarySobItemService(user).list(); // 被引用的薪资项目id Set salaryItemIds = SalaryEntityUtil.properties(salarySobItemPOS, SalarySobItemPO::getSalaryItemId); // 排除被引用的薪资项目(被引用的薪资项目不可以删除) searchParam.setExcludeIds(salaryItemIds); // 转换成前端所需的数据格式 Map map = listPage(searchParam); return map; } /** * 根据主键id获取薪资项目详情 * * @param ids 薪资项目的主键id * @return */ public List listByIds(Collection ids) { List salaryItemPOS = getSalaryItemService(user).listByIds(ids); if (CollectionUtils.isEmpty(salaryItemPOS)) { return Collections.emptyList(); } // 查询公式详情 Set formulaIds = SalaryEntityUtil.properties(salaryItemPOS, SalaryItemPO::getFormulaId); // todo List expressFormulas = salaryFormulaService.listExpressFormula(formulaIds); // 转换成薪资项目列表dto return SalaryItemBO.convert2ListDTO(salaryItemPOS, null); } // /** // * 薪资项目列表的高级搜索 // * // * @return // */ // public WeaSearchCondition getSearchCondition() { // WeaSearchCondition searchCondition = SalaryFormatUtil.getInstance() // .buildCondition(SalaryItemSearchConditionDTO.class, new SalaryItemSearchConditionDTO(), "salaryItemCondition"); // // "其他条件"不要 // searchCondition.getGroups().remove(1); // return searchCondition; // } /** * 薪资项目详情 * * @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); // 系统薪资项目 SysSalaryItemPO sysSalaryItemPO = getSysSalaryItemService(user).getById(id); if (Objects.isNull(salaryItemPO) && Objects.isNull(sysSalaryItemPO)) { throw new SalaryRunTimeException(SalaryI18nUtil.getI18nLabel(98299, "参数错误,薪资项目不存在或已被删除")); } //todo 公式详情 // ExpressFormula expressFormula; // // 转换成薪资项目详情dto if (Objects.isNull(salaryItemPO)) { salaryItemFormDTO = SysSalaryItemBO.convert2FormDTO(sysSalaryItemPO); // expressFormula = salaryFormulaService.getExpressFormula(sysSalaryItemPO.getFormulaId()); } else { salaryItemFormDTO = SalaryItemBO.convert2FormDTO(salaryItemPO); // expressFormula = salaryFormulaService.getExpressFormula(salaryItemPO.getFormulaId()); } // salaryItemFormDTO.setFormulaContent(Optional.ofNullable(expressFormula).map(ExpressFormula::getFormula).orElse("")); } return salaryItemFormDTO; } /** * 获取薪资项目可选的类型(与属性有联动) * * @return */ public Map> listSalaryItemTypeOption() { return SalaryEntityUtil.group2ListMap(Arrays.asList(SalaryItemTypeEnum.values()), e -> e.getCategory().name(), e -> new WeaFormOption(e.name(), SalaryI18nUtil.getI18nLabel(e.getLabelId(), e.getDefaultLabel()))); } /** * 保存薪资项目 * * @param saveParam 保存参数 */ public void save(SalaryItemSaveParam saveParam) { ValidUtil.doValidator(saveParam); getSalaryItemService(user).save(saveParam); } /** * 编辑薪资项目 * * @param saveParam 更新参数 */ public void update(SalaryItemSaveParam saveParam) { ValidUtil.doValidator(saveParam, RuntimeTypeEnum.UPDATE); getSalaryItemService(user).update(saveParam); } /** * 删除薪资项目 * * @param ids 主键id */ public void delete(Collection ids) { getSalaryItemService(user).deleteByIds(ids); } }