|
|
@@ -5,60 +5,70 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
|
|
|
import com.baomidou.mybatisplus.core.metadata.IPage;
|
|
|
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
|
|
|
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
|
|
|
-import com.ydtech.constants.enums.InsuranceRisk;
|
|
|
-import com.ydtech.constants.enums.dict.agreement.ProductsType;
|
|
|
import com.ydtech.constants.sys.SystemConstant;
|
|
|
import com.ydtech.modules.admin.constants.RoleConstants;
|
|
|
import com.ydtech.modules.admin.model.SysUser;
|
|
|
import com.ydtech.modules.admin.model.SysUserRole;
|
|
|
import com.ydtech.modules.admin.service.SysUserRoleService;
|
|
|
import com.ydtech.modules.admin.service.SysUserService;
|
|
|
+import com.ydtech.modules.esm.model.EsmInsCompany;
|
|
|
+import com.ydtech.modules.esm.service.EsmInsCompanyService;
|
|
|
+import com.ydtech.modules.order.service.InsOrdersService;
|
|
|
import com.ydtech.modules.protocol.constants.TaxSourceStatusConstants;
|
|
|
import com.ydtech.modules.protocol.dao.PtlTaxSourceNewMapper;
|
|
|
import com.ydtech.modules.protocol.dao.TaxSourceMapper;
|
|
|
-import com.ydtech.modules.protocol.entity.dto.*;
|
|
|
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementDto;
|
|
|
+import com.ydtech.modules.protocol.entity.dto.PtlAgreementInsCompanyDto;
|
|
|
+import com.ydtech.modules.protocol.entity.dto.TaxSourceDto;
|
|
|
+import com.ydtech.modules.protocol.entity.dto.TaxSourceExcludeDto;
|
|
|
import com.ydtech.modules.protocol.entity.po.PtlAgreement;
|
|
|
-import com.ydtech.modules.protocol.entity.po.PtlAgreementSchedulingConfig;
|
|
|
import com.ydtech.modules.protocol.entity.po.PtlTaxSourceNew;
|
|
|
-import com.ydtech.modules.protocol.entity.vo.QuoteAgreementVo;
|
|
|
-import com.ydtech.modules.protocol.entity.vo.SubstituteRecordingAgreementVo;
|
|
|
import com.ydtech.modules.protocol.entity.vo.TaxSourceVo;
|
|
|
import com.ydtech.modules.protocol.service.ITaxSourceExcludeService;
|
|
|
import com.ydtech.modules.protocol.service.ITaxSourceService;
|
|
|
-import com.ydtech.modules.protocol.service.PtlAgreementSchedulingConfigService;
|
|
|
import com.ydtech.modules.protocol.service.PtlAgreementService;
|
|
|
import com.ydtech.modules.protocol.utils.AssertionUtils;
|
|
|
-import com.ydtech.modules.protocol.utils.EnableUtils;
|
|
|
import com.ydtech.utils.idgen.IdGenerate;
|
|
|
-import lombok.RequiredArgsConstructor;
|
|
|
-import org.apache.commons.lang3.ObjectUtils;
|
|
|
import org.apache.commons.lang3.StringUtils;
|
|
|
+import org.springframework.beans.factory.annotation.Autowired;
|
|
|
import org.springframework.stereotype.Service;
|
|
|
import org.springframework.transaction.annotation.Transactional;
|
|
|
|
|
|
-import java.util.*;
|
|
|
+import java.util.ArrayList;
|
|
|
+import java.util.Arrays;
|
|
|
+import java.util.List;
|
|
|
import java.util.stream.Collectors;
|
|
|
|
|
|
@Service
|
|
|
-@RequiredArgsConstructor
|
|
|
public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSourceDto> implements ITaxSourceService {
|
|
|
|
|
|
- private final PtlAgreementService ptlAgreementService;
|
|
|
+ @Autowired
|
|
|
+ PtlAgreementService ptlAgreementService;
|
|
|
|
|
|
- private final ITaxSourceExcludeService taxSourceExcludeService;
|
|
|
+ @Autowired
|
|
|
+ ITaxSourceExcludeService taxSourceExcludeService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ InsOrdersService insOrdersService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SysUserRoleService sysUserRoleService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ EsmInsCompanyService esmInsCompanyService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ SysUserService sysUserService;
|
|
|
+
|
|
|
+ @Autowired
|
|
|
+ private PtlTaxSourceNewMapper ptlTaxSourceNewMapper;
|
|
|
|
|
|
- private final SysUserRoleService sysUserRoleService;
|
|
|
|
|
|
- private final PtlTaxSourceNewMapper ptlTaxSourceNewMapper;
|
|
|
|
|
|
- @Override
|
|
|
- public IPage<PtlAgreementSchedulingDto> getInsureCompany(Page<PtlAgreementSchedulingDto> page, String companyId) {
|
|
|
- return baseMapper.getInsureCompany(page, companyId);
|
|
|
- }
|
|
|
|
|
|
@Override
|
|
|
- public List<PtlAgreementSchedulingDto> getPtlAgreementScheduling() {
|
|
|
- return baseMapper.getPtlAgreementScheduling();
|
|
|
+ public IPage<EsmInsCompany> getInsureCompany(Page page) {
|
|
|
+ return baseMapper.getInsureCompany(page);
|
|
|
}
|
|
|
|
|
|
@Override
|
|
|
@@ -188,7 +198,7 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
// 领导标志
|
|
|
SysUserRole userRole = sysUserRoleService.selectByUserId(userId);
|
|
|
|
|
|
- if (userRole != null && Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString()) && !RoleConstants.R21.getCode().equals(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
|
|
|
+ if (userRole!=null && Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString()) && !RoleConstants.R21.getCode().equals(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
|
|
|
deptId = null;
|
|
|
}
|
|
|
|
|
|
@@ -196,6 +206,95 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
return agreementCompany;
|
|
|
}
|
|
|
|
|
|
+ public PtlAgreementInsCompanyDto getAgreementInsCompany(String deptId, String userId, String companyId) {
|
|
|
+ // 领导标志
|
|
|
+ SysUserRole userRole = sysUserRoleService.selectByUserId(userId);
|
|
|
+
|
|
|
+ if (Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString()) && !RoleConstants.R21.getCode().equals(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
|
|
|
+ deptId = null;
|
|
|
+ }
|
|
|
+
|
|
|
+ PtlAgreementInsCompanyDto agreementCompany = ptlAgreementService.getAgreementCompany(deptId, companyId);
|
|
|
+ return agreementCompany;
|
|
|
+ }
|
|
|
+
|
|
|
+// @Override
|
|
|
+// public List<PtlAgreementInsCompanyDto> getAgreementInsCompany(String deptId, String userId, String license,
|
|
|
+// String volume) {
|
|
|
+// //查出所有协议
|
|
|
+// List<PtlAgreementInsCompanyDto> agreementInsCompany = this.getAgreementInsCompany(deptId, userId);
|
|
|
+// if(license != null && volume != null) {
|
|
|
+// //排除的部门信息
|
|
|
+// List<TaxSourceExcludeDto> excludeDepts = taxSourceExcludeService.list(new
|
|
|
+// LambdaQueryWrapper<TaxSourceExcludeDto>().eq
|
|
|
+// (TaxSourceExcludeDto::getExcludeInfo, deptId)
|
|
|
+// .eq(TaxSourceExcludeDto::getType, TaxSourceStatusConstants.EXCLUDE_TYPE_DEPT));
|
|
|
+//
|
|
|
+// agreementInsCompany.forEach(item ->
|
|
|
+// excludeDepts.stream()
|
|
|
+// .filter(taxSourceDto -> item.getId().equals(taxSourceDto.getInsCompanyId()) &&
|
|
|
+// taxSourceDto.getExcludeInfo
|
|
|
+// ().equals(deptId))
|
|
|
+// .findFirst()
|
|
|
+// .ifPresent(taxSourceDto -> item.setIsExclude(TaxSourceStatusConstants.TAX_SOURCE_START))
|
|
|
+// );
|
|
|
+// //查找排除的车牌号
|
|
|
+// List<TaxSourceExcludeDto> licenseExclude = taxSourceExcludeService.list(new
|
|
|
+// LambdaQueryWrapper<TaxSourceExcludeDto>().eq
|
|
|
+// (TaxSourceExcludeDto::getExcludeInfo, license)
|
|
|
+// .eq(TaxSourceExcludeDto::getType, TaxSourceStatusConstants.EXCLUDE_TYPE_LICENSE));
|
|
|
+// agreementInsCompany.forEach(item -> {
|
|
|
+// licenseExclude.forEach(taxSourceDto -> {
|
|
|
+// if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
+// if (license.equals(taxSourceDto.getExcludeInfo())) {
|
|
|
+// //排除
|
|
|
+// item.setIsExclude(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+// }
|
|
|
+// }
|
|
|
+// });
|
|
|
+// });
|
|
|
+//
|
|
|
+// //查找配置的默认项
|
|
|
+// List<TaxSourceDto> taxSourceDefaultDtos = baseMapper.selectList(new LambdaQueryWrapper<TaxSourceDto>()
|
|
|
+// .eq(TaxSourceDto::getLicense, license));
|
|
|
+// //设置协议的默认项
|
|
|
+// agreementInsCompany.forEach(item -> {
|
|
|
+// taxSourceDefaultDtos.forEach(taxSourceDto -> {
|
|
|
+// if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
+// item.getAgreement().forEach(agreement -> {
|
|
|
+// if (agreement.getId().equals(taxSourceDto.getAgreementId())) {
|
|
|
+// agreement.setIsAllocation(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+// }
|
|
|
+// });
|
|
|
+// }
|
|
|
+// });
|
|
|
+// });
|
|
|
+// //判断汽车排量是否大于1升
|
|
|
+// if (Float.parseFloat(volume) >= 1) {
|
|
|
+// //查找是否配置税源
|
|
|
+// List<TaxSourceDto> taxSourceDtos = baseMapper.selectList(new LambdaQueryWrapper<TaxSourceDto>().eq
|
|
|
+// (TaxSourceDto::getIsTaxSource, "1"));
|
|
|
+// //设置税源参数
|
|
|
+// agreementInsCompany.forEach(item -> {
|
|
|
+// if (!TaxSourceStatusConstants.TAX_SOURCE_START.equals(item.getIsExclude())) {
|
|
|
+// taxSourceDtos.forEach(taxSourceDto -> {
|
|
|
+// if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
+// item.getAgreement().forEach(agreement -> {
|
|
|
+// if (agreement.getId().equals(taxSourceDto.getAgreementId())) {
|
|
|
+// agreement.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+// item.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+// item.setTaxSourceAgreementId(taxSourceDto.getAgreementId());
|
|
|
+// }
|
|
|
+// });
|
|
|
+// }
|
|
|
+// });
|
|
|
+// }
|
|
|
+// });
|
|
|
+// }
|
|
|
+// }
|
|
|
+// return agreementInsCompany;
|
|
|
+// }
|
|
|
+
|
|
|
/**
|
|
|
* 返回是否是税源
|
|
|
*
|
|
|
@@ -204,53 +303,34 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
* @return
|
|
|
*/
|
|
|
@Override
|
|
|
- public List<PtlAgreementInsCompanyDto> getAllAgreement(String deptId, String userId, QuoteAgreementVo quoteAgreementVo, List<PtlAgreementSchedulingDto> ptlAgreementScheduling) {
|
|
|
-
|
|
|
- // 获取险种配置信息
|
|
|
- ProductsType productsType = InsuranceRisk.determineInsuranceInformation(quoteAgreementVo.getKindList(), quoteAgreementVo.getRiskList());
|
|
|
-
|
|
|
- // 险种过滤map
|
|
|
- Map<String, Boolean> collectMap = ptlAgreementScheduling.stream().collect(
|
|
|
- Collectors.toMap(PtlAgreementSchedulingDto::getId, x -> {
|
|
|
- if (ObjectUtils.isNotEmpty(productsType) && StringUtils.isNotEmpty(x.getProductsCode())) {
|
|
|
- String[] split = x.getProductsCode().split(",");
|
|
|
- return Arrays.stream(split).anyMatch(element -> productsType.getCode().equals(element));
|
|
|
- }
|
|
|
- return false;
|
|
|
- }));
|
|
|
-
|
|
|
+ public List<PtlAgreementInsCompanyDto> getAllAgreement(String deptId, String userId) {
|
|
|
//查出所有协议
|
|
|
- List<PtlAgreementInsCompanyDto> agreementInsCompany = this.getAgreementInsCompany(deptId, userId, collectMap, productsType);
|
|
|
- List<PtlTaxSourceNew> taxSourceDtos = ptlTaxSourceNewMapper.findDefaultAllAttrLink();
|
|
|
-
|
|
|
- // 默认协议的协议编码
|
|
|
- Map<String, String> map = taxSourceDtos.stream()
|
|
|
- .collect(Collectors.toMap(PtlTaxSourceNew::getInsCompanyId, PtlTaxSourceNew::getAgreementId));
|
|
|
-
|
|
|
- // 是否启用Map
|
|
|
- Map<String, Boolean> systemTypeMap = ptlAgreementScheduling.stream().collect(
|
|
|
- Collectors.toMap(PtlAgreementSchedulingDto::getId, x -> EnableUtils.isEnable(quoteAgreementVo.getSystemType(), x.getPcStart(), x.getAppStart())));
|
|
|
+ List<PtlAgreementInsCompanyDto> agreementInsCompany = this.getAgreementInsCompany(deptId, userId);
|
|
|
|
|
|
- //设置协议调度
|
|
|
- return agreementInsCompany.stream().peek(item -> {
|
|
|
- String agreementId = map.get(item.getId());
|
|
|
- if (systemTypeMap.get(item.getId()) != null && systemTypeMap.get(item.getId()) && StringUtils.isNotEmpty(agreementId)) {
|
|
|
- item.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
- item.setTaxSourceAgreementId(agreementId);
|
|
|
+ //查找是否配置税源 原逻辑注释掉
|
|
|
+ //List<TaxSourceDto> taxSourceDtos =
|
|
|
+ // baseMapper.selectList(new LambdaQueryWrapper<TaxSourceDto>().eq(TaxSourceDto::getIsTaxSource, "1"));
|
|
|
+ //修改协议的默认 add by hxl 2024-05-27
|
|
|
+ List<PtlTaxSourceNew> taxSourceDtos = ptlTaxSourceNewMapper.findDefaultAllAttrLink();
|
|
|
+ //设置税源参数
|
|
|
+ agreementInsCompany.forEach(item -> {
|
|
|
+ if (!TaxSourceStatusConstants.TAX_SOURCE_START.equals(item.getIsExclude())) {
|
|
|
+ taxSourceDtos.forEach(taxSourceDto -> {
|
|
|
+ if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
+ item.getAgreement().forEach(agreement -> {
|
|
|
+ if (agreement.getId().equals(taxSourceDto.getAgreementId())) {
|
|
|
+ agreement.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+ item.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+ item.setTaxSourceAgreementId(taxSourceDto.getAgreementId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
}
|
|
|
- }).collect(Collectors.toList());
|
|
|
- }
|
|
|
-
|
|
|
- private List<PtlAgreementInsCompanyDto> getAgreementInsCompany(String deptId, String userId, Map<String, Boolean> companyMap, ProductsType productsType) {
|
|
|
- // 领导标志
|
|
|
- SysUserRole userRole = sysUserRoleService.selectByUserId(userId);
|
|
|
- if (userRole != null && Arrays.asList(SystemConstant.getSysRoleTeamLeader()).contains(userRole.getRoleId().toString()) && !RoleConstants.R21.getCode().equals(userRole.getRoleId().toString())) { //团队长可查询下面所有人员订单
|
|
|
- deptId = null;
|
|
|
- }
|
|
|
- return ptlAgreementService.getAgreementCompany(deptId, companyMap, productsType);
|
|
|
+ });
|
|
|
+ return agreementInsCompany;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
/**
|
|
|
* 根据税源获取协议id
|
|
|
*
|
|
|
@@ -273,7 +353,7 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
baseMapper.selectList(new LambdaQueryWrapper<TaxSourceDto>().eq(TaxSourceDto::getInsCompanyId,
|
|
|
companyId));
|
|
|
|
|
|
- if (taxSourceDtoList.isEmpty()) {
|
|
|
+ if(taxSourceDtoList.isEmpty()){
|
|
|
return resultId;
|
|
|
}
|
|
|
|
|
|
@@ -305,7 +385,7 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
// 税源
|
|
|
List<TaxSourceDto> collect = taxSourceDtoList.stream().filter(x -> x.getIsTaxSource().equals("1")).collect(Collectors.toList());
|
|
|
TaxSourceDto taxSourceDtos = null;
|
|
|
- if (!collect.isEmpty()) {
|
|
|
+ if(!collect.isEmpty()){
|
|
|
taxSourceDtos = collect.get(0);
|
|
|
}
|
|
|
|
|
|
@@ -317,49 +397,46 @@ public class TaxSourceServiceImpl extends ServiceImpl<TaxSourceMapper, TaxSource
|
|
|
|
|
|
// 不包含险种 随机其他保险公司
|
|
|
|
|
|
- if (taxSourceDtos != null && taxSourceDtos.getAgreementId().equals(resultId) && taxSourceDtos.getInsuranceRepertoire().contains(productid + ",")) {
|
|
|
+ if (taxSourceDtos != null && taxSourceDtos.getAgreementId().equals(resultId) && taxSourceDtos.getInsuranceRepertoire().contains(productid+",")) {
|
|
|
resultId = taxSourceDtos.getBanishAgreementId();
|
|
|
}
|
|
|
|
|
|
return resultId;
|
|
|
}
|
|
|
-
|
|
|
-// /**
|
|
|
-// * @version
|
|
|
-// * @author: hxl
|
|
|
-// * @Date: 2024/4/18 10:18
|
|
|
-// * @Description: 通过用户id查询关联的协议
|
|
|
-// */
|
|
|
-// @Override
|
|
|
-// public List<PtlAgreementInsCompanyDto> getAllAgreementByUserId(SubstituteRecordingAgreementVo quoteAgreementVo) {
|
|
|
-// String userId = quoteAgreementVo.getUserId();
|
|
|
-// SysUser user = sysUserService.getById(userId);
|
|
|
-// //查出当前用户管理所有协议
|
|
|
-//
|
|
|
-// List<PtlAgreementInsCompanyDto> agreementInsCompany = this.getAgreementInsCompany(user.getDeptId(), userId);
|
|
|
-// //查找是否配置税源 注释掉原先的逻辑
|
|
|
-//
|
|
|
-// //修改协议的默认 add by hxl 2024-05-27
|
|
|
-// List<PtlTaxSourceNew> taxSourceDtos = ptlTaxSourceNewMapper.findDefaultAllAttrLink();
|
|
|
-// //设置税源参数
|
|
|
-// agreementInsCompany.forEach(item -> {
|
|
|
-// if (!TaxSourceStatusConstants.TAX_SOURCE_START.equals(item.getIsExclude())) {
|
|
|
-// taxSourceDtos.forEach(taxSourceDto -> {
|
|
|
-// if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
-// item.getAgreement().forEach(agreement -> {
|
|
|
-// if (agreement.getId().equals(taxSourceDto.getAgreementId())) {
|
|
|
-// agreement.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
-// item.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
-// item.setTaxSourceAgreementId(taxSourceDto.getAgreementId());
|
|
|
-// }
|
|
|
-// });
|
|
|
-// }
|
|
|
-// });
|
|
|
-// }
|
|
|
-// });
|
|
|
-//
|
|
|
-// return agreementInsCompany;
|
|
|
-// }
|
|
|
+ /**
|
|
|
+ * @version
|
|
|
+ * @author: hxl
|
|
|
+ * @Date: 2024/4/18 10:18
|
|
|
+ * @Description: 通过用户id查询关联的协议
|
|
|
+ */
|
|
|
+ @Override
|
|
|
+ public List<PtlAgreementInsCompanyDto> getAllAgreementByUserId(String userId) {
|
|
|
+ SysUser user = sysUserService.getById(userId);
|
|
|
+ //查出当前用户管理所有协议
|
|
|
+ List<PtlAgreementInsCompanyDto> agreementInsCompany = this.getAgreementInsCompany(user.getDeptId(), userId);
|
|
|
+ //查找是否配置税源 注释掉原先的逻辑
|
|
|
+ // List<TaxSourceDto> taxSourceDtos =
|
|
|
+ // baseMapper.selectList(new LambdaQueryWrapper<TaxSourceDto>().eq(TaxSourceDto::getIsTaxSource, "1"));
|
|
|
+ //修改协议的默认 add by hxl 2024-05-27
|
|
|
+ List<PtlTaxSourceNew> taxSourceDtos = ptlTaxSourceNewMapper.findDefaultAllAttrLink();
|
|
|
+ //设置税源参数
|
|
|
+ agreementInsCompany.forEach(item -> {
|
|
|
+ if (!TaxSourceStatusConstants.TAX_SOURCE_START.equals(item.getIsExclude())) {
|
|
|
+ taxSourceDtos.forEach(taxSourceDto -> {
|
|
|
+ if (item.getId().equals(taxSourceDto.getInsCompanyId())) {
|
|
|
+ item.getAgreement().forEach(agreement -> {
|
|
|
+ if (agreement.getId().equals(taxSourceDto.getAgreementId())) {
|
|
|
+ agreement.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+ item.setIsTaxSource(TaxSourceStatusConstants.TAX_SOURCE_START);
|
|
|
+ item.setTaxSourceAgreementId(taxSourceDto.getAgreementId());
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ }
|
|
|
+ });
|
|
|
+ return agreementInsCompany;
|
|
|
+ }
|
|
|
|
|
|
|
|
|
}
|