权限控制
This commit is contained in:
parent
25321bb357
commit
a22aa624db
|
|
@ -14,13 +14,20 @@
|
|||
</page>
|
||||
</module>
|
||||
|
||||
<module name="н×ʺËËã" key="salaryAcct">
|
||||
<module name="戟栗뵙炬" key="salaryAcct" >
|
||||
<page name="薪资核算" key="salaryAcct">
|
||||
<opt name="查询" key="query"/>
|
||||
<opt name="管理" key="admin"/>
|
||||
</page>
|
||||
</module>
|
||||
|
||||
<module name="묏栗데" key="salaryBill" >
|
||||
<page name="묏栗데" key="salaryBill">
|
||||
<opt name="꿴璂" key="query"/>
|
||||
<opt name="밗잿" key="admin"/>
|
||||
</page>
|
||||
</module>
|
||||
|
||||
<module name="个税申报" key="taxdeclaration">
|
||||
<page name="个税申报" key="taxdeclaration">
|
||||
<opt name="查询" key="query"/>
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.engine.salary.entity.auth.dto;
|
||||
|
||||
import com.engine.salary.annotation.TableTitle;
|
||||
import com.engine.salary.enums.auth.DataLinkEnum;
|
||||
import com.engine.salary.enums.auth.DataTargetTypeEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
|
|
@ -15,7 +16,15 @@ public class AuthDataDTO {
|
|||
|
||||
private Long id;
|
||||
|
||||
@TableTitle(title = "对象类型",dataIndex = "targetType",key = "targetType")
|
||||
/**
|
||||
* 连接符,交、并、补
|
||||
*/
|
||||
@TableTitle(title = "连接",dataIndex = "linkName",key = "linkName")
|
||||
private String linkName;
|
||||
|
||||
private DataLinkEnum link;
|
||||
|
||||
@TableTitle(title = "对象类型",dataIndex = "targetTypeName",key = "targetTypeName")
|
||||
private String targetTypeName;
|
||||
private DataTargetTypeEnum targetType;
|
||||
|
||||
|
|
@ -23,4 +32,7 @@ public class AuthDataDTO {
|
|||
private String targetName;
|
||||
private String target;
|
||||
|
||||
@TableTitle(title = "批次",dataIndex = "sortedIndex",key = "sortedIndex")
|
||||
private Integer sortedIndex;
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,7 +15,7 @@ public class AuthMemberDTO {
|
|||
|
||||
private Long id;
|
||||
|
||||
@TableTitle(title = "对象类型",dataIndex = "targetType",key = "targetType")
|
||||
@TableTitle(title = "对象类型",dataIndex = "targetTypeName",key = "targetTypeName")
|
||||
private String targetTypeName;
|
||||
private MemberTargetTypeEnum targetType;
|
||||
|
||||
|
|
|
|||
|
|
@ -50,6 +50,10 @@ public class AuthOptDTO {
|
|||
@XStreamAsAttribute
|
||||
private String key;
|
||||
|
||||
@XStreamAlias("limit")
|
||||
@XStreamAsAttribute
|
||||
private String limit;
|
||||
|
||||
@XStreamImplicit(itemFieldName = "opt")
|
||||
private List<Opt> opts;
|
||||
|
||||
|
|
|
|||
|
|
@ -3,6 +3,8 @@ package com.engine.salary.entity.auth.param;
|
|||
|
||||
import com.engine.salary.enums.auth.DataLinkEnum;
|
||||
import com.engine.salary.enums.auth.DataTargetTypeEnum;
|
||||
import com.engine.salary.util.valid.Modify;
|
||||
import com.engine.salary.util.valid.ModifyTypeEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
|
@ -21,6 +23,7 @@ import lombok.NoArgsConstructor;
|
|||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class AuthDataSaveParam {
|
||||
private Long id;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
|
|
@ -28,8 +31,10 @@ public class AuthDataSaveParam {
|
|||
|
||||
private DataTargetTypeEnum targetType;
|
||||
|
||||
@Modify(modifyType = ModifyTypeEnum.RESTORE_SQL)
|
||||
private String target;
|
||||
|
||||
@Modify(modifyType = ModifyTypeEnum.RESTORE_SQL)
|
||||
private String targetName;
|
||||
|
||||
private Integer sortedIndex;
|
||||
|
|
|
|||
|
|
@ -15,6 +15,8 @@ import lombok.NoArgsConstructor;
|
|||
@AllArgsConstructor
|
||||
public class AuthMemberSaveParam {
|
||||
|
||||
private Long id;
|
||||
|
||||
private Long roleId;
|
||||
|
||||
private MemberTargetTypeEnum targetType;
|
||||
|
|
|
|||
|
|
@ -18,6 +18,7 @@ public class AuthOptSaveParam {
|
|||
|
||||
@Data
|
||||
public static class Opt {
|
||||
|
||||
private String page;
|
||||
|
||||
private String opt;
|
||||
|
|
|
|||
|
|
@ -24,7 +24,7 @@ public class AuthRoleSaveParam {
|
|||
private String name;
|
||||
|
||||
|
||||
@DataCheck(require = true, max = 400, message = "名称不允许为空,名称不能超过400个字符")
|
||||
@DataCheck(require = false, max = 400, message = "描述不能超过400个字符")
|
||||
private String description;
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -1,6 +1,7 @@
|
|||
package com.engine.salary.entity.auth.po;
|
||||
|
||||
import com.engine.hrmelog.annotation.ElogTransform;
|
||||
import com.engine.salary.enums.auth.DataLinkEnum;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Builder;
|
||||
import lombok.Data;
|
||||
|
|
@ -28,6 +29,7 @@ public class AuthDataPO {
|
|||
|
||||
/**
|
||||
* 连接符,交、并、补
|
||||
* @see DataLinkEnum
|
||||
*/
|
||||
@ElogTransform(name = "连接符,交、并、补")
|
||||
private Integer link;
|
||||
|
|
|
|||
|
|
@ -20,19 +20,19 @@ import java.util.Set;
|
|||
public enum DataLinkEnum implements BaseEnum<Integer> {
|
||||
|
||||
|
||||
OR(1, "并", 87627) {
|
||||
OR(1, "并集运算", 87627) {
|
||||
@Override
|
||||
public Set<Long> calculation(Collection<Long> coll1, Collection<Long> coll2) {
|
||||
return new HashSet<>(CollectionUtil.union(coll1, coll2));
|
||||
}
|
||||
},
|
||||
AND(2, "交", 87626) {
|
||||
AND(2, "交集运算", 87626) {
|
||||
@Override
|
||||
public Set<Long> calculation(Collection<Long> coll1, Collection<Long> coll2) {
|
||||
return new HashSet<>(CollectionUtil.intersection(coll1, coll2));
|
||||
}
|
||||
},
|
||||
NOT_IN(3, "补", 87626) {
|
||||
NOT_IN(3, "补集运算", 87626) {
|
||||
@Override
|
||||
public Set<Long> calculation(Collection<Long> coll1, Collection<Long> coll2) {
|
||||
return new HashSet<>(CollectionUtil.disjunction(coll1, coll2));
|
||||
|
|
|
|||
|
|
@ -64,22 +64,37 @@ public class AuthDataServiceImpl extends Service implements AuthDataService {
|
|||
throw new SalaryRunTimeException("角色不存在!");
|
||||
}
|
||||
|
||||
AuthDataPO dataPO = AuthDataPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.roleId(param.getRoleId())
|
||||
.link(param.getLink().getValue())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.target(param.getTarget())
|
||||
.targetName(param.getTargetName())
|
||||
.sortedIndex(param.getSortedIndex())
|
||||
.creator((long) user.getUID())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
|
||||
getAuthDataMapper().insertIgnoreNull(dataPO);
|
||||
if(param.getId() == null){
|
||||
AuthDataPO dataPO = AuthDataPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.roleId(param.getRoleId())
|
||||
.link(param.getLink().getValue())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.target(param.getTarget())
|
||||
.targetName(param.getTargetName())
|
||||
.sortedIndex(param.getSortedIndex())
|
||||
.creator((long) user.getUID())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
getAuthDataMapper().insertIgnoreNull(dataPO);
|
||||
}else{
|
||||
getAuthDataMapper().getById(param.getId());
|
||||
AuthDataPO dataPO = AuthDataPO.builder()
|
||||
.id(param.getId())
|
||||
.link(param.getLink().getValue())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.target(param.getTarget())
|
||||
.targetName(param.getTargetName())
|
||||
.sortedIndex(param.getSortedIndex())
|
||||
.creator((long) user.getUID())
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.build();
|
||||
getAuthDataMapper().updateIgnoreNull(dataPO);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -65,29 +65,55 @@ public class AuthMemberServiceImpl extends Service implements AuthMemberService
|
|||
}
|
||||
|
||||
Date now = new Date();
|
||||
AuthMemberPO po = AuthMemberPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.roleId(param.getRoleId())
|
||||
.target(param.getTarget())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.targetName(param.getTargetName())
|
||||
.creator((long) user.getUID())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
getAuthMemberMapper().insertIgnoreNull(po);
|
||||
if (param.getId() == null) {
|
||||
AuthMemberPO po = AuthMemberPO.builder()
|
||||
.id(IdGenerator.generate())
|
||||
.roleId(param.getRoleId())
|
||||
.target(param.getTarget())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.targetName(param.getTargetName())
|
||||
.creator((long) user.getUID())
|
||||
.createTime(now)
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.tenantKey(SalaryDefaultTenantConstant.DEFAULT_TENANT_KEY)
|
||||
.build();
|
||||
getAuthMemberMapper().insertIgnoreNull(po);
|
||||
|
||||
LoggerContext<TaxAgentPO> loggerContext = new LoggerContext<>();
|
||||
loggerContext.setUser(user);
|
||||
loggerContext.setTargetId(rolePO.getTaxAgentId() + "");
|
||||
loggerContext.setTargetName(rolePO.getName() + "成员:" + po.getId());
|
||||
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
|
||||
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
|
||||
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
|
||||
loggerContext.setNewValues(po);
|
||||
SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext);
|
||||
} else {
|
||||
AuthMemberPO oldPO = getAuthMemberMapper().getById(param.getId());
|
||||
AuthMemberPO newPo = AuthMemberPO.builder()
|
||||
.id(param.getId())
|
||||
.target(param.getTarget())
|
||||
.targetType(param.getTargetType().getValue())
|
||||
.targetName(param.getTargetName())
|
||||
.creator((long) user.getUID())
|
||||
.updateTime(now)
|
||||
.deleteType(0)
|
||||
.build();
|
||||
getAuthMemberMapper().updateIgnoreNull(newPo);
|
||||
|
||||
LoggerContext<TaxAgentPO> loggerContext = new LoggerContext<>();
|
||||
loggerContext.setUser(user);
|
||||
loggerContext.setTargetId(rolePO.getTaxAgentId() + "");
|
||||
loggerContext.setTargetName(rolePO.getName() + "成员:" + newPo.getId());
|
||||
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
|
||||
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "编辑成员"));
|
||||
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "编辑成员"));
|
||||
loggerContext.setOldValues(oldPO);
|
||||
loggerContext.setNewValues(newPo);
|
||||
SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext);
|
||||
}
|
||||
|
||||
LoggerContext<TaxAgentPO> loggerContext = new LoggerContext<>();
|
||||
loggerContext.setUser(user);
|
||||
loggerContext.setTargetId(rolePO.getTaxAgentId() + "");
|
||||
loggerContext.setTargetName(rolePO.getName() + "成员:" + po.getId());
|
||||
loggerContext.setOperateType(OperateTypeEnum.ADD.getValue());
|
||||
loggerContext.setOperateTypeName(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
|
||||
loggerContext.setOperatedesc(SalaryI18nUtil.getI18nLabel(0, "新增成员"));
|
||||
loggerContext.setNewValues(po);
|
||||
SalaryElogConfig.taxAgentLoggerTemplate.write(loggerContext);
|
||||
});
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,6 +39,7 @@ public class AuthOptServiceImpl extends Service implements AuthOptService {
|
|||
XStream xStream = new XStream();
|
||||
String resource = GCONST.getRootPath() + "WEB-INF" + File.separatorChar + "salaryoptconfig.xml";
|
||||
File file = new File("H:\\code\\salary\\resource\\WEB-INF\\salaryoptconfig.xml");
|
||||
// File file = new File(resource);
|
||||
|
||||
xStream.addPermission(AnyTypePermission.ANY);
|
||||
xStream.processAnnotations(AuthOptDTO.class);
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.engine.salary.entity.auth.dto.AuthDTO;
|
|||
import com.engine.salary.entity.auth.dto.EmpOpt;
|
||||
import com.engine.salary.entity.auth.dto.Opt;
|
||||
import com.engine.salary.enums.auth.AuthCheckTypeEnum;
|
||||
import com.engine.salary.exception.SalaryRunTimeException;
|
||||
import com.engine.salary.mapper.auth.AuthMapper;
|
||||
import com.engine.salary.service.TaxAgentService;
|
||||
import com.engine.salary.service.impl.TaxAgentServiceImpl;
|
||||
|
|
@ -53,12 +54,6 @@ public class AuthServiceImpl extends Service implements AuthService {
|
|||
if (isChief) {
|
||||
list.forEach(t -> {
|
||||
try {
|
||||
Method taxAgentIdFieldGetterMethod = t.getClass().getMethod(taxAgentIdFieldGetter);
|
||||
Long taxAgentId = (Long) taxAgentIdFieldGetterMethod.invoke(t);
|
||||
|
||||
Method employeeIdFieldGetterMethod = t.getClass().getMethod(employeeIdFieldGetter);
|
||||
Long employeeId = (Long) employeeIdFieldGetterMethod.invoke(t);
|
||||
|
||||
Method optsFieldGetterMethod = t.getClass().getMethod(optsFieldGetter);
|
||||
Set<String> opts = (Set<String>) optsFieldGetterMethod.invoke(t);
|
||||
if (opts == null) {
|
||||
|
|
@ -71,7 +66,7 @@ public class AuthServiceImpl extends Service implements AuthService {
|
|||
optsFieldSetterMethod.invoke(t, opts);
|
||||
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
throw new SalaryRunTimeException(e);
|
||||
}
|
||||
});
|
||||
|
||||
|
|
@ -103,11 +98,9 @@ public class AuthServiceImpl extends Service implements AuthService {
|
|||
iterator.remove();
|
||||
}
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
throw new SalaryRunTimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return list;
|
||||
}
|
||||
|
||||
|
|
@ -149,7 +142,7 @@ public class AuthServiceImpl extends Service implements AuthService {
|
|||
}
|
||||
|
||||
} catch (NoSuchMethodException | InvocationTargetException | IllegalAccessException e) {
|
||||
e.printStackTrace();
|
||||
throw new SalaryRunTimeException(e);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -216,9 +216,6 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
|
|||
}.start();
|
||||
}
|
||||
|
||||
|
||||
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
|
||||
|
||||
//排序配置
|
||||
OrderRuleVO orderRule = getSalarySysConfService(user).orderRule();
|
||||
queryParam.setOrderRule(orderRule);
|
||||
|
|
@ -1067,16 +1064,9 @@ public class SalaryArchiveServiceImpl extends Service implements SalaryArchiveSe
|
|||
|
||||
@Override
|
||||
public Map<String, Long> queryTabTotal() {
|
||||
long currentEmployeeId = user.getUID();
|
||||
|
||||
// tab页签数量
|
||||
Map<String, Long> result = new HashMap<>();
|
||||
|
||||
Boolean needAuth = getTaxAgentService(user).isNeedAuth(currentEmployeeId);
|
||||
|
||||
//获取管理的人员范围
|
||||
List<TaxAgentManageRangeEmployeeDTO> taxAgentEmployeeDTOS = getTaxAgentService(user).listTaxAgentAndEmployeeTree(currentEmployeeId);
|
||||
Map<Long, List<TaxAgentManageRangeEmployeeDTO.TaxAgentEmployee>> taxAgentEmployeesMap = SalaryEntityUtil.convert2Map(taxAgentEmployeeDTOS, TaxAgentManageRangeEmployeeDTO::getTaxAgentId, TaxAgentManageRangeEmployeeDTO::getEmployeeList);
|
||||
List<SalaryArchivePO> list = getSalaryArchiveMapper().listAll();
|
||||
|
||||
list = getAuthService(user).auth(list,SalaryArchivePO.class);
|
||||
|
|
|
|||
|
|
@ -87,6 +87,17 @@ public class SalarySobController {
|
|||
return new ResponseResult<SalarySobListQueryParam, PageInfo<SalarySobListDTO>>(user).run(getSalarySobWrapper(user)::listPage, queryParam);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资账套列表
|
||||
*/
|
||||
@GET
|
||||
@Path("/listByTaxAgent")
|
||||
@Produces(MediaType.APPLICATION_JSON)
|
||||
public String listSalarySob(@Context HttpServletRequest request, @Context HttpServletResponse response, @QueryParam(value = "taxAgentId") Long taxAgentId) {
|
||||
User user = HrmUserVarify.getUser(request, response);
|
||||
return new ResponseResult<Long, List<SalarySobPO>>(user).run(getSalarySobWrapper(user)::listByTaxAgent, taxAgentId);
|
||||
}
|
||||
|
||||
/**
|
||||
* 薪资账套列表
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -8,6 +8,7 @@ import com.engine.salary.entity.auth.dto.AuthOptDTO;
|
|||
import com.engine.salary.entity.auth.param.*;
|
||||
import com.engine.salary.entity.auth.po.AuthDataPO;
|
||||
import com.engine.salary.entity.auth.po.AuthMemberPO;
|
||||
import com.engine.salary.enums.auth.DataLinkEnum;
|
||||
import com.engine.salary.enums.auth.DataTargetTypeEnum;
|
||||
import com.engine.salary.enums.auth.MemberTargetTypeEnum;
|
||||
import com.engine.salary.mapper.auth.AuthMapper;
|
||||
|
|
@ -64,7 +65,8 @@ public class AuthWrapper extends Service {
|
|||
.target(po.getTarget())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
PageInfo<AuthMemberDTO> authMemberDTOPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), dtos, AuthMemberDTO.class);
|
||||
PageInfo<AuthMemberDTO> authMemberDTOPageInfo = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), AuthMemberDTO.class);
|
||||
authMemberDTOPageInfo.setList(dtos);
|
||||
authMemberDTOPageInfo.setTotal(total);
|
||||
return authMemberDTOPageInfo;
|
||||
}
|
||||
|
|
@ -98,20 +100,26 @@ public class AuthWrapper extends Service {
|
|||
list = SalaryPageUtil.subList(param.getCurrent(), param.getPageSize(), list);
|
||||
List<AuthDataDTO> dtos = list.stream().map(po -> AuthDataDTO.builder()
|
||||
.id(po.getId())
|
||||
.link(DataLinkEnum.parseByValue(po.getLink()))
|
||||
.linkName(DataLinkEnum.parseByValue(po.getLink()).getDefaultLabel())
|
||||
.targetTypeName(DataTargetTypeEnum.parseByValue(po.getTargetType()).getDefaultLabel())
|
||||
.targetType(DataTargetTypeEnum.parseByValue(po.getTargetType()))
|
||||
.targetName(po.getTargetName())
|
||||
.target(po.getTarget())
|
||||
.sortedIndex(po.getSortedIndex())
|
||||
.build())
|
||||
.collect(Collectors.toList());
|
||||
|
||||
PageInfo<AuthDataDTO> page = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), dtos, AuthDataDTO.class);
|
||||
PageInfo<AuthDataDTO> page = SalaryPageUtil.buildPage(param.getCurrent(), param.getPageSize(), AuthDataDTO.class);
|
||||
page.setList(dtos);
|
||||
page.setTotal(total);
|
||||
return page;
|
||||
|
||||
}
|
||||
|
||||
public void saveData(List<AuthDataSaveParam> params) {
|
||||
params.forEach(ValidUtil::modify);
|
||||
|
||||
getAuthDataService(user).save(params);
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -198,8 +198,7 @@ public class SalaryArchiveWrapper extends Service {
|
|||
* @return
|
||||
*/
|
||||
public Map<String, Object> listPage(SalaryArchiveQueryParam queryParam) {
|
||||
Map<String, Object> list = list(queryParam);
|
||||
return list;
|
||||
return list(queryParam);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -278,4 +278,7 @@ public class SalarySobWrapper extends Service {
|
|||
return taxAgentIds.contains(salarySobPO.getTaxAgentId())||Objects.isNull(salarySobPO.getTaxAgentId());
|
||||
}
|
||||
|
||||
public List<SalarySobPO> listByTaxAgent(Long taxAgentId) {
|
||||
return getSalarySobService(user).listByTaxAgentId(taxAgentId);
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue