Commit d2a0364c by zhangxingmin

薪资拆分-相关接口

parent 7f7c6671
package com.yd.csf.api.controller; package com.yd.csf.api.controller;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.csf.api.dto.ApiSalarySplitSummaryPageDTO;
import com.yd.csf.api.service.ApiSalarySplitService;
import com.yd.csf.feign.client.salarysplit.ApiSalarySplitFeignClient; import com.yd.csf.feign.client.salarysplit.ApiSalarySplitFeignClient;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitBatchSaveRequest; import com.yd.csf.feign.request.salarysplit.*;
import com.yd.csf.api.dto.ApiSalarySplitPageListDTO;
import com.yd.csf.feign.response.salarysplit.ApiQueryRemainingResponse;
import com.yd.csf.feign.response.salarysplit.ApiSalarySplitQueryRateResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.RestController;
...@@ -18,8 +24,56 @@ import org.springframework.web.bind.annotation.RestController; ...@@ -18,8 +24,56 @@ import org.springframework.web.bind.annotation.RestController;
@Validated @Validated
public class ApiSalarySplitController implements ApiSalarySplitFeignClient { public class ApiSalarySplitController implements ApiSalarySplitFeignClient {
@Autowired
private ApiSalarySplitService apiSalarySplitService;
/**
* 分页查询-薪资拆分应发信息汇总列表
* @param request
* @return
*/
@Override @Override
public Result batchSave(ApiSalarySplitBatchSaveRequest request) { public Result<ApiSalarySplitSummaryPageDTO> summaryPage(ApiSalarySplitSummaryPageRequest request) {
return null; return null;
} }
/**
* 分页查询-薪资拆分应发信息列表
* @param request
* @return
*/
@Override
public Result<ApiSalarySplitPageListDTO> page(ApiSalarySplitPageRequest request) {
return apiSalarySplitService.page(request);
}
/**
* 批量保存-薪资拆分应发信息列表
* @param request
* @return
*/
@Override
public Result batchSave(ApiSalarySplitBatchSaveRequest request) {
return apiSalarySplitService.batchSave(request);
}
/**
* 查询-原币种剩余总金额和原币种
* @param request
* @return
*/
@Override
public Result<ApiQueryRemainingResponse> queryRemaining(ApiQueryRemainingRequest request) {
return apiSalarySplitService.queryRemaining(request);
}
/**
* 查询-原币种和原币种金额——>目标币种即时汇率和目标币种金额
* @param request
* @return
*/
@Override
public Result<ApiSalarySplitQueryRateResponse> queryRate(ApiSalarySplitQueryRateRequest request) {
return apiSalarySplitService.queryRate(request);
}
} }
package com.yd.csf.api.dto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitStatisticsDto;
import lombok.Data;
@Data
public class ApiSalarySplitPageListDTO {
/**
* 薪资拆分统计信息
*/
private ApiSalarySplitStatisticsDto statisticsDto;
/**
* 薪资拆分分页信息
*/
private IPage<ApiSalarySplitPageDto> page;
}
package com.yd.csf.api.dto;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto;
import lombok.Data;
@Data
public class ApiSalarySplitSummaryPageDTO {
/**
* 统计信息
*/
private ApiSalarySplitSummaryDto statisticsDto;
/**
* 分页信息
*/
private IPage<ApiSalarySplitSummaryPageDto> page;
}
package com.yd.csf.api.service;
import com.yd.common.result.Result;
import com.yd.csf.api.dto.ApiSalarySplitSummaryPageDTO;
import com.yd.csf.feign.request.salarysplit.*;
import com.yd.csf.api.dto.ApiSalarySplitPageListDTO;
import com.yd.csf.feign.response.salarysplit.ApiQueryRemainingResponse;
import com.yd.csf.feign.response.salarysplit.ApiSalarySplitQueryRateResponse;
public interface ApiSalarySplitService {
Result<ApiSalarySplitSummaryPageDTO> summaryPage(ApiSalarySplitSummaryPageRequest request);
Result<ApiSalarySplitPageListDTO> page(ApiSalarySplitPageRequest request);
Result batchSave(ApiSalarySplitBatchSaveRequest request);
Result<ApiQueryRemainingResponse> queryRemaining(ApiQueryRemainingRequest request);
Result<ApiSalarySplitQueryRateResponse> queryRate(ApiSalarySplitQueryRateRequest request);
}
package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.base.feign.client.exchangerate.ApiExchangeRateFeignClient;
import com.yd.base.feign.request.exchangerate.ApiExchangeRateConvertRequest;
import com.yd.base.feign.response.exchangerate.ApiExchangeRateConvertResponse;
import com.yd.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
import com.yd.common.utils.CodeGenerator;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.dto.ApiSalarySplitSummaryPageDTO;
import com.yd.csf.api.service.ApiSalarySplitService;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitBatchSaveDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitStatisticsDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto;
import com.yd.csf.feign.request.salarysplit.*;
import com.yd.csf.api.dto.ApiSalarySplitPageListDTO;
import com.yd.csf.feign.response.salarysplit.ApiQueryRemainingResponse;
import com.yd.csf.feign.response.salarysplit.ApiSalarySplitQueryRateResponse;
import com.yd.csf.service.model.FortuneAccount;
import com.yd.csf.service.model.SalarySplit;
import com.yd.csf.service.service.FortuneAccountService;
import com.yd.csf.service.service.ISalarySplitService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;
import java.util.Objects;
@Slf4j
@Service
public class ApiSalarySplitServiceImpl implements ApiSalarySplitService {
@Autowired
private FortuneAccountService fortuneAccountService;
@Autowired
private ISalarySplitService iSalarySplitService;
@Autowired
private ApiExchangeRateFeignClient apiExchangeRateFeignClient;
/**
* 分页查询-薪资拆分应发信息汇总列表
* @param request
* @return
*/
@Override
public Result<ApiSalarySplitSummaryPageDTO> summaryPage(ApiSalarySplitSummaryPageRequest request) {
ApiSalarySplitSummaryPageDTO response = new ApiSalarySplitSummaryPageDTO();
// 查询分页信息
Page<ApiSalarySplitSummaryPageDto> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiSalarySplitSummaryPageDto> iPage = iSalarySplitService.summaryPage(page, request);
response.setPage(iPage);
return Result.success(response);
}
/**
* 分页查询-薪资拆分应发信息列表
* @param request
* @return
*/
@Override
public Result<ApiSalarySplitPageListDTO> page(ApiSalarySplitPageRequest request) {
ApiSalarySplitPageListDTO response = new ApiSalarySplitPageListDTO();
// 查询分页信息
Page<ApiSalarySplitPageDto> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiSalarySplitPageDto> iPage = iSalarySplitService.page(page, request);
response.setPage(iPage);
// 查询统计信息
ApiSalarySplitStatisticsDto statisticsDto = new ApiSalarySplitStatisticsDto();
FortuneAccount fortuneAccount = fortuneAccountService.queryOne(request.getFortuneAccountBizId());
// 出账币种
statisticsDto.setBeSplitCurrency(fortuneAccount != null ? fortuneAccount.getCurrency() : "");
BigDecimal beSplitAmount = BigDecimal.ZERO;
if (fortuneAccount != null) {
// 查询所有拆分记录,计算已拆分总金额
List<SalarySplit> salarySplits = iSalarySplitService.lambdaQuery()
.eq(SalarySplit::getFortuneAccountBizId, request.getFortuneAccountBizId())
.list();
BigDecimal splitTotal = salarySplits.stream()
.map(SalarySplit::getFromAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal fortuneAmount = fortuneAccount.getAmount() != null ? fortuneAccount.getAmount() : BigDecimal.ZERO;
beSplitAmount = fortuneAmount.subtract(splitTotal);
if (beSplitAmount.compareTo(BigDecimal.ZERO) < 0) {
beSplitAmount = BigDecimal.ZERO; // 防止负数
}
}
statisticsDto.setBeSplitAmount(beSplitAmount);
response.setStatisticsDto(statisticsDto);
return Result.success(response);
}
/**
* 批量保存
* @param request
* @return
*/
@Override
public Result batchSave(ApiSalarySplitBatchSaveRequest request) {
//查询出账记录是否存在
FortuneAccount fortuneAccount = fortuneAccountService.queryOne(request.getFortuneAccountBizId());
if (fortuneAccount == null) {
throw new BusinessException("出账记录不存在");
}
//薪资拆分应发记录-先删除后新增
iSalarySplitService.deleteByFortuneAccountBizId(request.getFortuneAccountBizId());
//批量新增
if (CollectionUtils.isEmpty(request.getApiSalarySplitBatchSaveDtoList())) {
return Result.success();
}
List<SalarySplit> salarySplitList = new ArrayList<>();
for (ApiSalarySplitBatchSaveDto dto : request.getApiSalarySplitBatchSaveDtoList()) {
SalarySplit salarySplit = new SalarySplit();
BeanUtils.copyProperties(dto,salarySplit);
//薪资拆分应发表唯一业务ID
salarySplit.setSalarySplitBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_SALARY_SPLIT.getCode()));
//发放编号
salarySplit.setSalarySplitNo(CodeGenerator.generate10Code("SP"));
//出账记录业务id
salarySplit.setFortuneAccountBizId(request.getFortuneAccountBizId());
salarySplitList.add(salarySplit);
}
iSalarySplitService.saveOrUpdateBatch(salarySplitList);
return Result.success();
}
/**
* 查询-原币种剩余总金额和原币种
* @param request
* @return
*/
@Override
public Result<ApiQueryRemainingResponse> queryRemaining(ApiQueryRemainingRequest request) {
//查询出账记录是否存在
FortuneAccount fortuneAccount = fortuneAccountService.queryOne(request.getFortuneAccountBizId());
if (fortuneAccount == null) {
throw new BusinessException("出账记录不存在");
}
BigDecimal beSplitAmount = BigDecimal.ZERO;
// 查询所有拆分记录,计算已拆分总金额
List<SalarySplit> salarySplits = iSalarySplitService.lambdaQuery()
.eq(SalarySplit::getFortuneAccountBizId, request.getFortuneAccountBizId())
.list();
BigDecimal splitTotal = salarySplits.stream()
.map(SalarySplit::getFromAmount)
.filter(Objects::nonNull)
.reduce(BigDecimal.ZERO, BigDecimal::add);
BigDecimal fortuneAmount = fortuneAccount.getAmount() != null ? fortuneAccount.getAmount() : BigDecimal.ZERO;
beSplitAmount = fortuneAmount.subtract(splitTotal);
if (beSplitAmount.compareTo(BigDecimal.ZERO) < 0) {
beSplitAmount = BigDecimal.ZERO; // 防止负数
}
ApiQueryRemainingResponse response = new ApiQueryRemainingResponse();
response.setCurrency(fortuneAccount.getCurrency());
response.setFromAmount(beSplitAmount);
return Result.success(response);
}
/**
* 查询-原币种和原币种金额——>目标币种即时汇率和目标币种金额
* @param request
* @return
*/
@Override
public Result<ApiSalarySplitQueryRateResponse> queryRate(ApiSalarySplitQueryRateRequest request) {
//查询出账记录是否存在
FortuneAccount fortuneAccount = fortuneAccountService.queryOne(request.getFortuneAccountBizId());
if (fortuneAccount == null) {
throw new BusinessException("出账记录不存在");
}
ApiExchangeRateConvertRequest convertRequest = new ApiExchangeRateConvertRequest();
//原币种金额
convertRequest.setAmount(request.getFromAmount());
//原币种
convertRequest.setFromCurrency(fortuneAccount.getCurrency());
//目标币种
convertRequest.setToCurrency(request.getToCurrency());
//调用远程转换接口
Result<ApiExchangeRateConvertResponse> result = apiExchangeRateFeignClient.convert(convertRequest);
if (result != null && result.getData() != null) {
ApiSalarySplitQueryRateResponse response = new ApiSalarySplitQueryRateResponse();
BeanUtils.copyProperties(result.getData(),response);
return Result.success(response);
}
return Result.success();
}
}
...@@ -2,11 +2,15 @@ package com.yd.csf.feign.client.salarysplit; ...@@ -2,11 +2,15 @@ package com.yd.csf.feign.client.salarysplit;
import com.yd.common.result.Result; import com.yd.common.result.Result;
import com.yd.csf.feign.fallback.salarysplit.ApiSalarySplitFeignFallbackFactory; import com.yd.csf.feign.fallback.salarysplit.ApiSalarySplitFeignFallbackFactory;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitBatchSaveRequest; import com.yd.csf.feign.request.salarysplit.*;
import com.yd.csf.feign.response.salarysplit.ApiQueryRemainingResponse;
import com.yd.csf.feign.response.salarysplit.ApiSalarySplitQueryRateResponse;
import org.springframework.cloud.openfeign.FeignClient; import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated; import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;
/** /**
* 香港保险服务-薪资拆分应发信息Feign客户端 * 香港保险服务-薪资拆分应发信息Feign客户端
...@@ -15,10 +19,42 @@ import org.springframework.web.bind.annotation.RequestBody; ...@@ -15,10 +19,42 @@ import org.springframework.web.bind.annotation.RequestBody;
public interface ApiSalarySplitFeignClient { public interface ApiSalarySplitFeignClient {
/** /**
* 批量保存 * 分页查询-薪资拆分应发信息汇总列表
* @param request
* @return
*/
@PostMapping("/summary/page")
Result summaryPage(@Validated @RequestBody ApiSalarySplitSummaryPageRequest request);
/**
* 分页查询-薪资拆分应发信息列表
* @param request
* @return
*/
@PostMapping("/page")
Result page(@Validated @RequestBody ApiSalarySplitPageRequest request);
/**
* 批量保存-薪资拆分应发信息列表
* @param request * @param request
* @return * @return
*/ */
@PostMapping("/batch/save") @PostMapping("/batch/save")
Result batchSave(@Validated @RequestBody ApiSalarySplitBatchSaveRequest request); Result batchSave(@Validated @RequestBody ApiSalarySplitBatchSaveRequest request);
/**
* 查询-原币种剩余总金额和原币种
* @param request
* @return
*/
@PostMapping("/query/remaining")
Result<ApiQueryRemainingResponse> queryRemaining(@Validated @RequestBody ApiQueryRemainingRequest request);
/**
* 查询-原币种和原币种金额——>目标币种即时汇率和目标币种金额
* @param request
* @return
*/
@PostMapping("/query/rate")
Result<ApiSalarySplitQueryRateResponse> queryRate(@Validated @RequestBody ApiSalarySplitQueryRateRequest request);
} }
package com.yd.csf.feign.dto.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalarySplitBatchSaveDto {
/**
* 转介人业务id
*/
private String brokerBizId;
/**
* 转介人内部编号
*/
private String internalNumber;
/**
* 出账机构
*/
private String billOrg;
/**
* 原币种金额
*/
private BigDecimal fromAmount;
/**
* 目标币种
*/
private String toCurrency;
/**
* 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改)
*/
private BigDecimal exchangeRate;
/**
* 目标金额
*/
private BigDecimal toAmount;
}
package com.yd.csf.feign.dto.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ApiSalarySplitPageDto {
/**
* 主键ID
*/
private Long id;
/**
* 薪资拆分应发表唯一业务ID
*/
private String salarySplitBizId;
/**
* 发放编号
*/
private String salarySplitNo;
/**
* 出账记录业务id(关联出账记录表)
*/
private String fortuneAccountBizId;
/**
* 转介人名称
*/
private String brokerName;
/**
* 转介人业务id
*/
private String brokerBizId;
/**
* 转介人内部编号
*/
private String internalNumber;
/**
* 出账机构
*/
private String billOrg;
/**
* 原币种金额
*/
private BigDecimal fromAmount;
/**
* 目标币种
*/
private String toCurrency;
/**
* 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改)
*/
private BigDecimal exchangeRate;
/**
* 目标金额
*/
private BigDecimal toAmount;
/**
* 通用备注
*/
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
private Integer isDeleted;
/**
* 创建人ID
*/
private String creatorId;
/**
* 更新人ID
*/
private String updaterId;
/**
* 创建时间
*/
private LocalDateTime createTime;
/**
* 更新时间
*/
private LocalDateTime updateTime;
}
package com.yd.csf.feign.dto.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalarySplitStatisticsDto {
/**
* 待拆分币种(原币种)(当前出账记录的总计剩余待拆分币种)
*/
private String beSplitCurrency;
/**
* 待拆分币种金额(当前出账记录的总计剩余待拆分币种金额)
*/
private BigDecimal beSplitAmount;
}
package com.yd.csf.feign.dto.salarysplit;
import lombok.Data;
@Data
public class ApiSalarySplitSummaryDto {
}
package com.yd.csf.feign.dto.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
import java.util.Date;
@Data
public class ApiSalarySplitSummaryPageDto {
/**
* 发放编号
*/
private String salarySplitNo;
/**
* 出账记录业务id(关联出账记录表)(关联发放编号)
*/
private String fortuneAccountBizId;
/**
* 转介人名称
*/
private String brokerName;
/**
* 转介人业务id
*/
private String brokerBizId;
/**
* 转介人内部编号
*/
private String internalNumber;
/**
* 所属团队
*/
private String team;
/**
* 原币种金额
*/
private BigDecimal fromAmount;
/**
* 目标币种
*/
private String toCurrency;
/**
* 即时汇率(原币种->目标币种)(查询原出账币种兑目标币种汇率,可修改)
*/
private BigDecimal exchangeRate;
/**
* 目标金额
*/
private BigDecimal toAmount;
/**
* 出账日期
*/
private Date fortuneAccountDate;
/**
* 出账月(出账日期+2个月)
*/
private String fortuneAccountMonth;
/**
* 出账机构
*/
private String billOrg;
/**
* 出账状态 可出账、待出账、已出账
*/
private String status;
/**
* 出账总额
*/
private BigDecimal amount;
/**
* 出账币种(原币种)
*/
private String currency;
}
package com.yd.csf.feign.fallback.salarysplit; package com.yd.csf.feign.fallback.salarysplit;
import com.yd.common.result.Result;
import com.yd.csf.feign.client.salarysplit.ApiSalarySplitFeignClient; import com.yd.csf.feign.client.salarysplit.ApiSalarySplitFeignClient;
import com.yd.csf.feign.request.salarysplit.*;
import com.yd.csf.feign.response.salarysplit.ApiQueryRemainingResponse;
import com.yd.csf.feign.response.salarysplit.ApiSalarySplitQueryRateResponse;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory; import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component; import org.springframework.stereotype.Component;
...@@ -14,6 +18,31 @@ public class ApiSalarySplitFeignFallbackFactory implements FallbackFactory<ApiSa ...@@ -14,6 +18,31 @@ public class ApiSalarySplitFeignFallbackFactory implements FallbackFactory<ApiSa
@Override @Override
public ApiSalarySplitFeignClient create(Throwable cause) { public ApiSalarySplitFeignClient create(Throwable cause) {
return null; return new ApiSalarySplitFeignClient() {
@Override
public Result summaryPage(ApiSalarySplitSummaryPageRequest request) {
return null;
}
@Override
public Result page(ApiSalarySplitPageRequest request) {
return null;
}
@Override
public Result batchSave(ApiSalarySplitBatchSaveRequest request) {
return null;
}
@Override
public Result<ApiQueryRemainingResponse> queryRemaining(ApiQueryRemainingRequest request) {
return null;
}
@Override
public Result<ApiSalarySplitQueryRateResponse> queryRate(ApiSalarySplitQueryRateRequest request) {
return null;
}
};
} }
} }
package com.yd.csf.feign.request.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
@Data
public class ApiQueryRemainingRequest {
/**
* 出账记录业务id(关联出账记录表)
*/
private String fortuneAccountBizId;
/**
* 需要参与统计的原币种金额列表
*/
private List<BigDecimal> fromAmountList;
}
package com.yd.csf.feign.request.salarysplit; package com.yd.csf.feign.request.salarysplit;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitBatchSaveDto;
import lombok.Data; import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.util.List;
@Data @Data
public class ApiSalarySplitBatchSaveRequest { public class ApiSalarySplitBatchSaveRequest {
/**
* 出账记录业务id
*/
@NotBlank(message = "出账记录业务id不能为空")
private String fortuneAccountBizId;
/**
* 薪资拆分应发记录
*/
private List<ApiSalarySplitBatchSaveDto> apiSalarySplitBatchSaveDtoList;
} }
package com.yd.csf.feign.request.salarysplit;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiSalarySplitPageRequest extends PageDto {
/**
* 出账记录业务id(关联出账记录表)
*/
private String fortuneAccountBizId;
}
package com.yd.csf.feign.request.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalarySplitQueryRateRequest {
/**
* 出账记录业务id(关联出账记录表)
*/
private String fortuneAccountBizId;
/**
* 原币种
*/
private String fromCurrency;
/**
* 原币种金额
*/
private BigDecimal fromAmount;
/**
* 目标币种
*/
private String toCurrency;
}
package com.yd.csf.feign.request.salarysplit;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiSalarySplitSummaryPageRequest extends PageDto {
/**
* 转介人名称
*/
private String brokerName;
/**
* 出账状态 可出账、待出账、已出账
*/
private String status;
/**
* 出账月-开始月份
*/
private Integer startMonth;
/**
* 出账月-结束月份
*/
private Integer endMonth;
}
package com.yd.csf.feign.response.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiQueryRemainingResponse {
/**
* 原币种剩余总金额
*/
private BigDecimal fromAmount;
/**
* 原币种(出账币种)
*/
private String currency;
}
package com.yd.csf.feign.response.salarysplit;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalarySplitQueryRateResponse {
/**
* 原始金额
*/
private BigDecimal originalAmount;
/**
* 原始币种代码
*/
private String originalCurrency;
/**
* 转换后金额
*/
private BigDecimal convertedAmount;
/**
* 目标币种代码
*/
private String targetCurrency;
/**
* 汇率(原始币种 -> 目标币种)
*/
private BigDecimal exchangeRate;
/**
* 反向汇率(目标币种 -> 原始币种)
*/
private BigDecimal reverseExchangeRate;
}
package com.yd.csf.service.dao; package com.yd.csf.service.dao;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitPageRequest;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitSummaryPageRequest;
import com.yd.csf.service.model.SalarySplit; import com.yd.csf.service.model.SalarySplit;
import com.baomidou.mybatisplus.core.mapper.BaseMapper; import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/** /**
* <p> * <p>
...@@ -13,4 +20,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper; ...@@ -13,4 +20,9 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/ */
public interface SalarySplitMapper extends BaseMapper<SalarySplit> { public interface SalarySplitMapper extends BaseMapper<SalarySplit> {
IPage<ApiSalarySplitSummaryPageDto> summaryPage(@Param("page") Page<ApiSalarySplitSummaryPageDto> page,
@Param("request") ApiSalarySplitSummaryPageRequest request);
IPage<ApiSalarySplitPageDto> page(@Param("page") Page<ApiSalarySplitPageDto> page,
@Param("request") ApiSalarySplitPageRequest request);
} }
...@@ -50,6 +50,12 @@ public class SalarySplit implements Serializable { ...@@ -50,6 +50,12 @@ public class SalarySplit implements Serializable {
private String fortuneAccountBizId; private String fortuneAccountBizId;
/** /**
* 转介人名称
*/
@TableField("broker_name")
private String brokerName;
/**
* 转介人业务id * 转介人业务id
*/ */
@TableField("broker_biz_id") @TableField("broker_biz_id")
...@@ -101,7 +107,7 @@ public class SalarySplit implements Serializable { ...@@ -101,7 +107,7 @@ public class SalarySplit implements Serializable {
* 删除标识: 0-正常, 1-删除 * 删除标识: 0-正常, 1-删除
*/ */
@TableField("is_deleted") @TableField("is_deleted")
private Boolean isDeleted; private Integer isDeleted;
/** /**
* 创建人ID * 创建人ID
......
...@@ -38,4 +38,6 @@ public interface FortuneAccountService extends IService<FortuneAccount> { ...@@ -38,4 +38,6 @@ public interface FortuneAccountService extends IService<FortuneAccount> {
* @return * @return
*/ */
FortuneAccountStatisticsVO getFortuneAccountStatistics(List<Long> fortuneAccountIdList); FortuneAccountStatisticsVO getFortuneAccountStatistics(List<Long> fortuneAccountIdList);
FortuneAccount queryOne(String fortuneAccountBizId);
} }
package com.yd.csf.service.service; package com.yd.csf.service.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitPageRequest;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitSummaryPageRequest;
import com.yd.csf.service.model.SalarySplit; import com.yd.csf.service.model.SalarySplit;
import com.baomidou.mybatisplus.extension.service.IService; import com.baomidou.mybatisplus.extension.service.IService;
...@@ -13,4 +19,10 @@ import com.baomidou.mybatisplus.extension.service.IService; ...@@ -13,4 +19,10 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/ */
public interface ISalarySplitService extends IService<SalarySplit> { public interface ISalarySplitService extends IService<SalarySplit> {
IPage<ApiSalarySplitSummaryPageDto> summaryPage(Page<ApiSalarySplitSummaryPageDto> page,
ApiSalarySplitSummaryPageRequest request);
IPage<ApiSalarySplitPageDto> page(Page<ApiSalarySplitPageDto> page, ApiSalarySplitPageRequest request);
Boolean deleteByFortuneAccountBizId(String fortuneAccountBizId);
} }
...@@ -4,6 +4,7 @@ import java.time.LocalDate; ...@@ -4,6 +4,7 @@ import java.time.LocalDate;
import java.time.LocalDateTime; import java.time.LocalDateTime;
import java.util.Date; import java.util.Date;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
...@@ -372,6 +373,19 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper, ...@@ -372,6 +373,19 @@ public class FortuneAccountServiceImpl extends ServiceImpl<FortuneAccountMapper,
vo.setBrokerCount(brokerCount); vo.setBrokerCount(brokerCount);
return vo; return vo;
} }
/**
* 查询单个对象
* @param fortuneAccountBizId
* @return
*/
@Override
public FortuneAccount queryOne(String fortuneAccountBizId) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<FortuneAccount>()
.eq(FortuneAccount::getFortuneAccountBizId,fortuneAccountBizId)
.last(" limit 1 ")
);
}
} }
......
package com.yd.csf.service.service.impl; package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto;
import com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitPageRequest;
import com.yd.csf.feign.request.salarysplit.ApiSalarySplitSummaryPageRequest;
import com.yd.csf.service.model.SalarySplit; import com.yd.csf.service.model.SalarySplit;
import com.yd.csf.service.dao.SalarySplitMapper; import com.yd.csf.service.dao.SalarySplitMapper;
import com.yd.csf.service.service.ISalarySplitService; import com.yd.csf.service.service.ISalarySplitService;
...@@ -17,4 +24,26 @@ import org.springframework.stereotype.Service; ...@@ -17,4 +24,26 @@ import org.springframework.stereotype.Service;
@Service @Service
public class SalarySplitServiceImpl extends ServiceImpl<SalarySplitMapper, SalarySplit> implements ISalarySplitService { public class SalarySplitServiceImpl extends ServiceImpl<SalarySplitMapper, SalarySplit> implements ISalarySplitService {
@Override
public IPage<ApiSalarySplitSummaryPageDto> summaryPage(Page<ApiSalarySplitSummaryPageDto> page,
ApiSalarySplitSummaryPageRequest request) {
return this.baseMapper.summaryPage(page,request);
}
@Override
public IPage<ApiSalarySplitPageDto> page(Page<ApiSalarySplitPageDto> page,
ApiSalarySplitPageRequest request) {
return this.baseMapper.page(page,request);
}
/**
* 根据出账记录删除对应薪资拆分记录信息
* @param fortuneAccountBizId
* @return
*/
@Override
public Boolean deleteByFortuneAccountBizId(String fortuneAccountBizId) {
return this.remove(new LambdaQueryWrapper<SalarySplit>()
.eq(SalarySplit::getFortuneAccountBizId,fortuneAccountBizId));
}
} }
...@@ -2,4 +2,42 @@ ...@@ -2,4 +2,42 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.yd.csf.service.dao.SalarySplitMapper"> <mapper namespace="com.yd.csf.service.dao.SalarySplitMapper">
<select id="page" resultType="com.yd.csf.feign.dto.salarysplit.ApiSalarySplitPageDto">
select ss.* from salary_split ss
<where>
and ss.fortune_account_biz_id = #{request.fortuneAccountBizId}
and ss.is_deleted = 0
</where>
</select>
<select id="summaryPage" resultType="com.yd.csf.feign.dto.salarysplit.ApiSalarySplitSummaryPageDto">
select
ss.salary_split_no,
ss.fortune_account_biz_id,
ss.broker_name,
ss.broker_biz_id,
ss.internal_number,
fa.team,
ss.from_amount,
ss.to_currency,
ss.exchange_rate,
ss.to_amount,
fa.fortune_account_date,
ss.bill_org,
fa.status,
fa.amount,
fa.currency
from salary_split ss
inner join fortune_account fa on ss.fortune_account_biz_id = fa.fortune_account_biz_id and fa.is_deleted = 0
<where>
<if test="request.brokerName != null and request.brokerName != ''">
and ss.broker_name like concat('%', #{request.brokerName}, '%')
</if>
<if test="request.status != null and request.status != ''">
and fa.status = #{request.status}
</if>
and ss.is_deleted = 0
</where>
</select>
</mapper> </mapper>
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment