Commit 6104eda1 by zhangxingmin

薪资单

parent 9277d976
......@@ -5,14 +5,18 @@ import com.yd.common.result.Result;
import com.yd.csf.api.service.ApiSalaryService;
import com.yd.csf.feign.client.salary.ApiSalaryFeignClient;
import com.yd.csf.feign.request.salary.ApiSalaryAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryBatchAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryDetailResponse;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.validation.constraints.NotBlank;
/**
* 薪资单信息
*
......@@ -38,6 +42,16 @@ public class ApiSalaryController implements ApiSalaryFeignClient {
}
/**
* 详情-薪资单信息
* @param salaryBizId
* @return
*/
@Override
public Result<ApiSalaryDetailResponse> detail(String salaryBizId) {
return apiSalaryService.detail(salaryBizId);
}
/**
* 新增-薪资单信息
* @param request
* @return
......@@ -57,5 +71,15 @@ public class ApiSalaryController implements ApiSalaryFeignClient {
return apiSalaryService.edit(request);
}
/**
* 批量新增-薪资单信息
* @param request
* @return
*/
@Override
public Result batchAdd(ApiSalaryBatchAddRequest request) {
return apiSalaryService.batchAdd(request);
}
}
......@@ -6,4 +6,5 @@ import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceFzDTO;
public interface ApiSalaryRemittanceService {
Result batchSave(String salaryBizId, ApiSalaryRemittanceFzDTO fzDTO);
}
......@@ -3,14 +3,20 @@ package com.yd.csf.api.service;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.yd.common.result.Result;
import com.yd.csf.feign.request.salary.ApiSalaryAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryBatchAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryDetailResponse;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
public interface ApiSalaryService {
Result<IPage<ApiSalaryPageResponse>> page(ApiSalaryPageRequest request);
Result<ApiSalaryDetailResponse> detail(String salaryBizId);
Result add(ApiSalaryAddRequest request);
Result edit(ApiSalaryEditRequest request);
Result batchAdd(ApiSalaryBatchAddRequest 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.common.enums.CommonEnum;
import com.yd.common.exception.BusinessException;
import com.yd.common.result.Result;
......@@ -8,20 +9,31 @@ import com.yd.common.utils.CodeGenerator;
import com.yd.common.utils.RandomStringGenerator;
import com.yd.csf.api.service.ApiSalaryRemittanceService;
import com.yd.csf.api.service.ApiSalaryService;
import com.yd.csf.feign.dto.salary.ApiSalaryBatchAddDTO;
import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceDTO;
import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceFzDTO;
import com.yd.csf.feign.request.salary.ApiSalaryAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryBatchAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryDetailResponse;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
import com.yd.csf.service.model.Salary;
import com.yd.csf.service.model.SalaryRemittance;
import com.yd.csf.service.service.ISalaryRemittanceService;
import com.yd.csf.service.service.ISalaryService;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.collections4.CollectionUtils;
import org.apache.commons.lang3.ObjectUtils;
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.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
@Slf4j
@Service
......@@ -33,6 +45,9 @@ public class ApiSalaryServiceImpl implements ApiSalaryService {
@Autowired
private ApiSalaryRemittanceService apiSalaryRemittanceService;
@Autowired
private ISalaryRemittanceService iSalaryRemittanceService;
/**
* 分页查询-薪资单信息
* @param request
......@@ -40,7 +55,37 @@ public class ApiSalaryServiceImpl implements ApiSalaryService {
*/
@Override
public Result<IPage<ApiSalaryPageResponse>> page(ApiSalaryPageRequest request) {
return null;
Page<ApiSalaryPageResponse> page = new Page<>(request.getPageNo(), request.getPageSize());
IPage<ApiSalaryPageResponse> iPage = iSalaryService.page(page, request);
return Result.success(iPage);
}
/**
* 详情-薪资单信息
* @param salaryBizId
* @return
*/
@Override
public Result<ApiSalaryDetailResponse> detail(String salaryBizId) {
//校验薪资单信息是否存在
Salary salary = checkIsExist(salaryBizId);
ApiSalaryDetailResponse response = new ApiSalaryDetailResponse();
BeanUtils.copyProperties(salary,response);
//薪资汇款明细封装的DTO
ApiSalaryRemittanceFzDTO fzDTO = new ApiSalaryRemittanceFzDTO();
fzDTO.setTotalAmount(salary.getPaidAmount());
List<ApiSalaryRemittanceDTO> salaryRemittanceDTOList = new ArrayList<>();
List<SalaryRemittance> salaryRemittanceList = iSalaryRemittanceService.queryList(salaryBizId);
if (CollectionUtils.isNotEmpty(salaryRemittanceList)) {
salaryRemittanceDTOList = salaryRemittanceList.stream().map(dto -> {
ApiSalaryRemittanceDTO remittanceDTO = new ApiSalaryRemittanceDTO();
BeanUtils.copyProperties(dto,remittanceDTO);
return remittanceDTO;
}).collect(Collectors.toList());
}
fzDTO.setSalaryRemittanceDTOList(salaryRemittanceDTOList);
response.setApiSalaryRemittanceFzDTO(fzDTO);
return Result.success(response);
}
/**
......@@ -98,6 +143,69 @@ public class ApiSalaryServiceImpl implements ApiSalaryService {
}
/**
* 批量新增-薪资单信息
* @param request
* @return
*/
@Override
public Result batchAdd(ApiSalaryBatchAddRequest request) {
List<ApiSalaryBatchAddDTO> apiSalaryBatchAddDTOList = request.getApiSalaryBatchAddDTOList();
if (CollectionUtils.isEmpty(apiSalaryBatchAddDTOList)) {
throw new BusinessException("批量新增的数据列表不能为空");
}
//批量校验同一转介人同一年月只能有一条薪资单记录 TODO
//批量校验薪资单信息金额字段信息 TODO
Map<Salary,List<SalaryRemittance>> map = new HashMap<>();
apiSalaryBatchAddDTOList.forEach(dto -> {
Salary salary = new Salary();
BeanUtils.copyProperties(dto,salary);
salary.setSalaryBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_SALARY.getCode()));
List<SalaryRemittance> salaryRemittanceList = new ArrayList<>();
SalaryRemittance remittance1 = new SalaryRemittance();
remittance1.setSalaryBizId(salary.getSalaryBizId());
remittance1.setSalaryRemittanceBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_SALARY_REMITTANCE.getCode()));
remittance1.setBank(dto.getBank1());
remittance1.setAccountEndNo(dto.getAccountEndNo1());
remittance1.setCurrency(dto.getCurrency1());
remittance1.setAmount(dto.getAmount1());
remittance1.setExchangeRate(dto.getExchangeRate1());
remittance1.setRemark(dto.getRemark1());
salaryRemittanceList.add(remittance1);
SalaryRemittance remittance2 = new SalaryRemittance();
remittance2.setSalaryBizId(salary.getSalaryBizId());
remittance2.setSalaryRemittanceBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_SALARY_REMITTANCE.getCode()));
remittance2.setBank(dto.getBank2());
remittance2.setAccountEndNo(dto.getAccountEndNo2());
remittance2.setCurrency(dto.getCurrency2());
remittance2.setAmount(dto.getAmount2());
remittance2.setExchangeRate(dto.getExchangeRate2());
remittance2.setRemark(dto.getRemark2());
salaryRemittanceList.add(remittance2);
map.put(salary,salaryRemittanceList);
});
// 提取所有的 Salary 对象
List<Salary> salaryList = new ArrayList<>(map.keySet());
// 提取所有的 SalaryRemittance 对象(将 Map 中所有 List 打平)
List<SalaryRemittance> salaryRemittanceList = map.values()
.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
//批量保存salaryList
iSalaryService.saveOrUpdateBatch(salaryList);
//批量保存salaryRemittanceList
iSalaryRemittanceService.saveOrUpdateBatch(salaryRemittanceList);
return Result.success();
}
/**
* 批量校验同一转介人同一年月只能有一条薪资单记录
* @param apiSalaryBatchAddDTOList
*/
public void batchCheckUniqueByBrokerMonth(List<ApiSalaryBatchAddDTO> apiSalaryBatchAddDTOList) {
}
/**
* 校验同一转介人同一年月只能有一条薪资单记录
* @param brokerBizId 转介人业务id
* @param month 薪资月份(同出账月,如:202605)
......
......@@ -2,13 +2,14 @@ package com.yd.csf.feign.client.salary;
import com.yd.common.result.Result;
import com.yd.csf.feign.fallback.salary.ApiSalaryFeignFallbackFactory;
import com.yd.csf.feign.request.salary.ApiSalaryAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.request.salary.*;
import com.yd.csf.feign.response.salary.ApiSalaryDetailResponse;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.*;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
/**
* 香港保险服务-薪资单信息Feign客户端
......@@ -25,6 +26,14 @@ public interface ApiSalaryFeignClient {
Result page(@Validated @RequestBody ApiSalaryPageRequest request);
/**
* 详情-薪资单信息
* @param salaryBizId
* @return
*/
@GetMapping("/detail")
Result<ApiSalaryDetailResponse> detail(@NotBlank(message = "薪资单表唯一业务ID不能为空") @RequestParam(value = "salaryBizId") String salaryBizId);
/**
* 新增-薪资单信息
* @param request
* @return
......@@ -37,6 +46,22 @@ public interface ApiSalaryFeignClient {
* @param request
* @return
*/
@PostMapping("/edit")
@PutMapping("/edit")
Result edit(@Validated @RequestBody ApiSalaryEditRequest request);
/**
* 批量新增-薪资单信息
* @param request
* @return
*/
@PostMapping("/batch/add")
Result batchAdd(@Validated @RequestBody ApiSalaryBatchAddRequest request);
/**
* 计算-实发金额
* @param request
* @return
*/
@PostMapping("/calculate/paidAmount")
Result<BigDecimal> calculatePaidAmount(@Validated @RequestBody ApiSalaryCalculatePaidAmountRequest request);
}
package com.yd.csf.feign.dto.salary;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalaryBatchAddDTO {
/**
* 转介人名称
*/
private String brokerName;
/**
* 转介人业务id
*/
private String brokerBizId;
/**
* 薪资月份(同出账月,如:202605)
*/
private String month;
/**
* 应发总金额(单位:HKD)
*/
private BigDecimal grossAmount;
/**
* MPF事项总金额(单位:HKD)
*/
private BigDecimal mpfAmount;
/**
* 其他调整总金额(单位:HKD)
*/
private BigDecimal otherAmount;
/**
* 其他调整的备注
*/
private String otherRemark;
/**
* 实发总金额(单位:HKD)
*/
private BigDecimal paidAmount;
//========以下是薪资汇款明细字段,两个汇款明细对象
/**
* 收款银行1
*/
private String bank1;
/**
* 账户尾号1
*/
private String accountEndNo1;
/**
* 汇款币种1
*/
private String currency1;
/**
* 汇款金额1(发放金额1)
*/
private BigDecimal amount1;
/**
* 汇率1
*/
private BigDecimal exchangeRate1;
/**
* 备注1
*/
private String remark1;
/**
* 收款银行1
*/
private String bank2;
/**
* 账户尾号1
*/
private String accountEndNo2;
/**
* 汇款币种1
*/
private String currency2;
/**
* 汇款金额1(发放金额1)
*/
private BigDecimal amount2;
/**
* 汇率1
*/
private BigDecimal exchangeRate2;
/**
* 备注1
*/
private String remark2;
}
......@@ -8,6 +8,11 @@ import java.math.BigDecimal;
public class ApiSalaryRemittanceDTO {
/**
* 薪资汇款明细表唯一业务ID
*/
private String salaryRemittanceBizId;
/**
* 收款银行
*/
private String bank;
......
......@@ -3,12 +3,16 @@ package com.yd.csf.feign.fallback.salary;
import com.yd.common.result.Result;
import com.yd.csf.feign.client.salary.ApiSalaryFeignClient;
import com.yd.csf.feign.request.salary.ApiSalaryAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryBatchAddRequest;
import com.yd.csf.feign.request.salary.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryDetailResponse;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
import javax.validation.constraints.NotBlank;
/**
* 香港保险服务-薪资单信息Feign降级处理
*/
......@@ -24,6 +28,11 @@ public class ApiSalaryFeignFallbackFactory implements FallbackFactory<ApiSalaryF
}
@Override
public Result<ApiSalaryDetailResponse> detail(String salaryBizId) {
return null;
}
@Override
public Result add(ApiSalaryAddRequest request) {
return null;
}
......@@ -32,6 +41,11 @@ public class ApiSalaryFeignFallbackFactory implements FallbackFactory<ApiSalaryF
public Result edit(ApiSalaryEditRequest request) {
return null;
}
@Override
public Result batchAdd(ApiSalaryBatchAddRequest request) {
return null;
}
};
}
}
package com.yd.csf.feign.request.salary;
import com.yd.csf.feign.dto.salary.ApiSalaryBatchAddDTO;
import lombok.Data;
import java.util.List;
@Data
public class ApiSalaryBatchAddRequest {
private List<ApiSalaryBatchAddDTO> apiSalaryBatchAddDTOList;
}
package com.yd.csf.feign.request.salary;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalaryCalculatePaidAmountRequest {
/**
* 应发总金额(单位:HKD)
*/
private BigDecimal grossAmount;
/**
* MPF事项总金额(单位:HKD)
*/
private BigDecimal mpfAmount;
/**
* 其他调整总金额(单位:HKD)
*/
private BigDecimal otherAmount;
}
package com.yd.csf.feign.request.salary;
import com.yd.common.dto.PageDto;
import lombok.Data;
@Data
public class ApiSalaryPageRequest {
public class ApiSalaryPageRequest extends PageDto {
/**
* 转介人名称
*/
private String brokerName;
/**
* 薪资月份(同出账月,如:202605)
*/
private String month;
}
package com.yd.csf.feign.response.salary;
import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceFzDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
@Data
public class ApiSalaryDetailResponse {
/**
* 薪资单表唯一业务ID
*/
@NotBlank(message = "薪资单表唯一业务ID不能为空")
private String salaryBizId;
/**
* 转介人名称
*/
@NotBlank(message = "转介人名称不能为空")
private String brokerName;
/**
* 转介人业务id
*/
@NotBlank(message = "转介人业务id不能为空")
private String brokerBizId;
/**
* 薪资月份(同出账月,如:202605)
*/
@NotBlank(message = "薪资月份不能为空")
private String month;
/**
* 应发总金额(单位:HKD)(正常情况下,录入转介人和薪资月份去查询出账记录表出账金额和值)
*/
private BigDecimal grossAmount;
/**
* MPF事项总金额(单位:HKD)
*/
private BigDecimal mpfAmount;
/**
* 其他调整总金额(单位:HKD)
*/
private BigDecimal otherAmount;
/**
* 其他调整的备注
*/
private String otherRemark;
/**
* 实发总金额(单位:HKD)
*/
private BigDecimal paidAmount;
/**
* 薪资汇款明细封装的DTO
*/
private ApiSalaryRemittanceFzDTO apiSalaryRemittanceFzDTO;
}
package com.yd.csf.feign.response.salary;
import lombok.Data;
import java.math.BigDecimal;
import java.time.LocalDateTime;
@Data
public class ApiSalaryPageResponse {
/**
* 发放编号
*/
private String salaryNo;
/**
* 薪资单表唯一业务ID
*/
private String salaryBizId;
/**
* 转介人名称
*/
private String brokerName;
/**
* 转介人内部编号
*/
private String internalNumber;
/**
* 团队名称
*/
private String teamName;
/**
* 发放金额(实发总金额)(单位:HKD)
*/
private BigDecimal paidAmount;
/**
* 发放币种(汇款币种,多个用分号分隔)
*/
private String currencyList;
/**
* 薪资月份(同出账月,如:202605)
*/
private String month;
/**
* 薪资单状态:1-待提交 2-待审核 3-审核退回 4-待核对 5-核对退回 6-已核对 7-已推送 8-已取消
*/
private String status;
/**
* 制作人(创建人名称)
*/
private String creatorName;
/**
* 制作时间(创建时间)
*/
private LocalDateTime createTime;
}
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.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
import com.yd.csf.service.model.Salary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Param;
/**
* <p>
......@@ -13,4 +18,6 @@ import com.baomidou.mybatisplus.core.mapper.BaseMapper;
*/
public interface SalaryMapper extends BaseMapper<Salary> {
IPage<ApiSalaryPageResponse> page(@Param("page") Page<ApiSalaryPageResponse> page,
@Param("request") ApiSalaryPageRequest request);
}
......@@ -3,6 +3,8 @@ package com.yd.csf.service.service;
import com.yd.csf.service.model.SalaryRemittance;
import com.baomidou.mybatisplus.extension.service.IService;
import java.util.List;
/**
* <p>
* 薪资汇款明细表 服务类
......@@ -14,4 +16,6 @@ import com.baomidou.mybatisplus.extension.service.IService;
public interface ISalaryRemittanceService extends IService<SalaryRemittance> {
Boolean delBySalaryBizId(String salaryBizId);
List<SalaryRemittance> queryList(String salaryBizId);
}
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.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
import com.yd.csf.service.model.Salary;
import com.baomidou.mybatisplus.extension.service.IService;
......@@ -13,6 +17,9 @@ import com.baomidou.mybatisplus.extension.service.IService;
*/
public interface ISalaryService extends IService<Salary> {
IPage<ApiSalaryPageResponse> page(Page<ApiSalaryPageResponse> page,
ApiSalaryPageRequest request);
Salary queryOne(String brokerBizId,String month,
String salaryBizId,Boolean isExcludeMy);
......
......@@ -7,6 +7,8 @@ import com.yd.csf.service.service.ISalaryRemittanceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
import java.util.List;
/**
* <p>
* 薪资汇款明细表 服务实现类
......@@ -23,4 +25,10 @@ public class SalaryRemittanceServiceImpl extends ServiceImpl<SalaryRemittanceMap
return this.remove(new LambdaQueryWrapper<SalaryRemittance>()
.eq(SalaryRemittance::getSalaryBizId,salaryBizId));
}
@Override
public List<SalaryRemittance> queryList(String salaryBizId) {
return this.baseMapper.selectList(new LambdaQueryWrapper<SalaryRemittance>()
.eq(SalaryRemittance::getSalaryBizId,salaryBizId));
}
}
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.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
import com.yd.csf.service.model.Salary;
import com.yd.csf.service.dao.SalaryMapper;
import com.yd.csf.service.service.ISalaryService;
......@@ -19,6 +23,12 @@ import org.springframework.stereotype.Service;
public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> implements ISalaryService {
@Override
public IPage<ApiSalaryPageResponse> page(Page<ApiSalaryPageResponse> page,
ApiSalaryPageRequest request) {
return this.baseMapper.page(page,request);
}
@Override
public Salary queryOne(String brokerBizId, String month,
String salaryBizId,Boolean isExcludeMy) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<Salary>()
......
......@@ -2,4 +2,30 @@
<!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.SalaryMapper">
<select id="page" resultType="com.yd.csf.feign.response.salary.ApiSalaryPageResponse">
SELECT
s.salary_no,
s.salary_biz_id,
s.broker_name,
s.internal_number,
s.paid_amount,
s.month,
s.status,
s.creator_name,
s.create_time,
GROUP_CONCAT(DISTINCT sr.currency ORDER BY sr.currency SEPARATOR ';') AS currencyList
FROM salary s
LEFT JOIN salary_remittance sr ON s.salary_biz_id = sr.salary_biz_id AND sr.is_deleted = 0
<where>
<if test="request.brokerName != null and request.brokerName != ''">
AND s.broker_name LIKE CONCAT('%', #{request.brokerName}, '%')
</if>
<if test="request.month != null and request.month != ''">
AND s.month = #{request.month}
</if>
AND s.is_deleted = 0
</where>
GROUP BY s.salary_biz_id
ORDER BY s.create_time DESC
</select>
</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