Commit af20aa80 by zhangxingmin

push

parent 2bf113c8
package com.yd.csf.api.controller;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
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;
/**
* 薪资单信息
*
* @author zxm
* @since 2026-05-08
*/
@RestController
@RequestMapping("/salary")
@Validated
public class ApiSalaryController implements ApiSalaryFeignClient {
@Autowired
private ApiSalaryService apiSalaryService;
/**
* 分页查询-薪资单信息
* @param request
* @return
*/
@Override
public Result<IPage<ApiSalaryPageResponse>> page(ApiSalaryPageRequest request) {
return apiSalaryService.page(request);
}
/**
* 新增-薪资单信息
* @param request
* @return
*/
@Override
public Result add(ApiSalaryAddRequest request) {
return apiSalaryService.add(request);
}
/**
* 修改-薪资单信息
* @param request
* @return
*/
@Override
public Result edit(ApiSalaryEditRequest request) {
return apiSalaryService.edit(request);
}
}
package com.yd.csf.api.controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* <p>
* 薪资汇款明细表 前端控制器
* </p>
*
* @author zxm
* @since 2026-05-08
*/
@RestController
@RequestMapping("/salaryRemittance")
public class SalaryRemittanceController {
}
package com.yd.csf.api.service;
import com.yd.common.result.Result;
public interface ApiSalaryRemittanceService {
Result batchSave();
}
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.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import com.yd.csf.feign.response.salary.ApiSalaryPageResponse;
public interface ApiSalaryService {
Result<IPage<ApiSalaryPageResponse>> page(ApiSalaryPageRequest request);
Result add(ApiSalaryAddRequest request);
Result edit(ApiSalaryEditRequest request);
}
package com.yd.csf.api.service.impl;
import com.yd.csf.api.service.ApiSalaryRemittanceService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class ApiSalaryRemittanceServiceImpl implements ApiSalaryRemittanceService {
}
package com.yd.csf.api.service.impl;
import com.baomidou.mybatisplus.core.metadata.IPage;
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.service.ApiSalaryRemittanceService;
import com.yd.csf.api.service.ApiSalaryService;
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.response.salary.ApiSalaryPageResponse;
import com.yd.csf.service.model.Salary;
import com.yd.csf.service.service.ISalaryService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
@Slf4j
@Service
public class ApiSalaryServiceImpl implements ApiSalaryService {
@Autowired
private ISalaryService iSalaryService;
@Autowired
private ApiSalaryRemittanceService apiSalaryRemittanceService;
/**
* 分页查询-薪资单信息
* @param request
* @return
*/
@Override
public Result<IPage<ApiSalaryPageResponse>> page(ApiSalaryPageRequest request) {
return null;
}
/**
* 新增-薪资单信息
* @param request
* @return
*/
@Override
public Result add(ApiSalaryAddRequest request) {
//校验同一转介人同一薪资年月只能有一条薪资单记录
checkUniqueByBrokerMonth(request.getBrokerBizId(),request.getMonth(),"",false);
Salary salary = new Salary();
BeanUtils.copyProperties(request,salary);
//发放编号
salary.setSalaryNo(CodeGenerator.generate10Code("SN"));
//薪资单表唯一业务ID
salary.setSalaryBizId(RandomStringGenerator.generateBizId16(CommonEnum.UID_TYPE_SALARY.getCode()));
iSalaryService.saveOrUpdate(salary);
//保存薪资汇款明细
return Result.success();
}
/**
* 修改-薪资单信息
* @param request
* @return
*/
@Override
public Result edit(ApiSalaryEditRequest request) {
//校验薪资单信息是否存在
Salary salary = checkIsExist(request.getSalaryBizId());
//校验同一转介人同一薪资年月只能有一条薪资单记录
checkUniqueByBrokerMonth(request.getBrokerBizId(),request.getMonth(),
request.getSalaryBizId(),true);
BeanUtils.copyProperties(request,salary);
iSalaryService.saveOrUpdate(salary);
//保存薪资汇款明细
return null;
}
/**
* 校验同一转介人同一年月只能有一条薪资单记录
* @param brokerBizId 转介人业务id
* @param month 薪资月份(同出账月,如:202605)
* @param salaryBizId 薪资单信息唯一业务ID
* @param isExcludeMy 是否排除自己
*/
public void checkUniqueByBrokerMonth(String brokerBizId,String month,
String salaryBizId,Boolean isExcludeMy) {
Salary salary = iSalaryService.queryOne(brokerBizId,month,salaryBizId,isExcludeMy);
if (salary != null) {
throw new BusinessException("同一转介人同一薪资年月只能有一条薪资单记录");
}
}
/**
* 校验薪资单信息是否存在
* @param salaryBizId
*/
public Salary checkIsExist(String salaryBizId) {
Salary salary = iSalaryService.queryOne(salaryBizId);
if (salary == null) {
throw new BusinessException("薪资单信息不存在");
}
return salary;
}
}
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 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;
/**
* 香港保险服务-薪资单信息Feign客户端
*/
@FeignClient(name = "yd-csf-api", fallbackFactory = ApiSalaryFeignFallbackFactory.class)
public interface ApiSalaryFeignClient {
/**
* 分页查询-薪资单信息
* @param request
* @return
*/
@PostMapping("/page")
Result page(@Validated @RequestBody ApiSalaryPageRequest request);
/**
* 新增-薪资单信息
* @param request
* @return
*/
@PostMapping("/add")
Result add(@Validated @RequestBody ApiSalaryAddRequest request);
/**
* 修改-薪资单信息
* @param request
* @return
*/
@PostMapping("/edit")
Result edit(@Validated @RequestBody ApiSalaryEditRequest request);
}
package com.yd.csf.feign.dto.salaryremittance;
import lombok.Data;
import java.math.BigDecimal;
@Data
public class ApiSalaryRemittanceDTO {
/**
* 收款银行
*/
private String bank;
/**
* 账户尾号
*/
private String accountEndNo;
/**
* 汇款币种
*/
private String currency;
/**
* 汇款金额
*/
private BigDecimal amount;
/**
* 汇率
*/
private BigDecimal exchangeRate;
/**
* 通用备注
*/
private String remark;
}
package com.yd.csf.feign.dto.salaryremittance;
import lombok.Data;
import java.math.BigDecimal;
import java.util.List;
/**
* 薪资汇款明细封装DTO
*/
@Data
public class ApiSalaryRemittanceFzDTO {
/**
* 汇款金额合计(单位:HKD)
*/
private BigDecimal totalAmount;
/**
* 薪资汇款明细
*/
private List<ApiSalaryRemittanceDTO> salaryRemittanceDTOList;
}
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.ApiSalaryEditRequest;
import com.yd.csf.feign.request.salary.ApiSalaryPageRequest;
import lombok.extern.slf4j.Slf4j;
import org.springframework.cloud.openfeign.FallbackFactory;
import org.springframework.stereotype.Component;
/**
* 香港保险服务-薪资单信息Feign降级处理
*/
@Slf4j
@Component
public class ApiSalaryFeignFallbackFactory implements FallbackFactory<ApiSalaryFeignClient> {
@Override
public ApiSalaryFeignClient create(Throwable cause) {
return new ApiSalaryFeignClient() {
@Override
public Result page(ApiSalaryPageRequest request) {
return null;
}
@Override
public Result add(ApiSalaryAddRequest request) {
return null;
}
@Override
public Result edit(ApiSalaryEditRequest request) {
return null;
}
};
}
}
package com.yd.csf.feign.request.salary;
import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceFzDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
@Data
public class ApiSalaryAddRequest {
/**
* 转介人名称
*/
@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.request.salary;
import com.yd.csf.feign.dto.salaryremittance.ApiSalaryRemittanceFzDTO;
import lombok.Data;
import javax.validation.constraints.NotBlank;
import java.math.BigDecimal;
@Data
public class ApiSalaryEditRequest {
/**
* 薪资单表唯一业务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.request.salary;
import lombok.Data;
@Data
public class ApiSalaryPageRequest {
}
package com.yd.csf.feign.response.salary;
import lombok.Data;
@Data
public class ApiSalaryPageResponse {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.Salary;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 薪资单表 Mapper 接口
* </p>
*
* @author zxm
* @since 2026-05-08
*/
public interface SalaryMapper extends BaseMapper<Salary> {
}
package com.yd.csf.service.dao;
import com.yd.csf.service.model.SalaryRemittance;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
/**
* <p>
* 薪资汇款明细表 Mapper 接口
* </p>
*
* @author zxm
* @since 2026-05-08
*/
public interface SalaryRemittanceMapper extends BaseMapper<SalaryRemittance> {
}
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 薪资单表
* </p>
*
* @author zxm
* @since 2026-05-08
*/
@Getter
@Setter
@TableName("salary")
public class Salary implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 薪资单表唯一业务ID
*/
@TableField("salary_biz_id")
private String salaryBizId;
/**
* 发放编号
*/
@TableField("salary_no")
private String salaryNo;
/**
* 出账记录业务id
*/
@TableField("fortune_account_biz_id")
private String fortuneAccountBizId;
/**
* 出账业务编号
*/
@TableField("business_no")
private String businessNo;
/**
* 转介人名称
*/
@TableField("broker_name")
private String brokerName;
/**
* 转介人业务id
*/
@TableField("broker_biz_id")
private String brokerBizId;
/**
* 转介人内部编号
*/
@TableField("internal_number")
private String internalNumber;
/**
* 薪资月份(同出账月,如:202605)
*/
@TableField("month")
private String month;
/**
* 应发总金额(单位:HKD)
*/
@TableField("gross_amount")
private BigDecimal grossAmount;
/**
* 实发总金额(单位:HKD)
*/
@TableField("paid_amount")
private BigDecimal paidAmount;
/**
* MPF事项总金额(单位:HKD)
*/
@TableField("mpf_amount")
private BigDecimal mpfAmount;
/**
* 其他调整总金额(单位:HKD)
*/
@TableField("other_amount")
private BigDecimal otherAmount;
/**
* 其他调整的备注
*/
@TableField("other_remark")
private String otherRemark;
/**
* 薪资单状态:1-待提交 2-待审核 3-审核退回 4-待核对 5-核对退回 6-已核对 7-已推送 8-已取消
*/
@TableField("status")
private String status;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 创建人名称
*/
@TableField("creator_name")
private String creatorName;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.csf.service.model;
import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import java.io.Serializable;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import lombok.Getter;
import lombok.Setter;
/**
* <p>
* 薪资汇款明细表
* </p>
*
* @author zxm
* @since 2026-05-08
*/
@Getter
@Setter
@TableName("salary_remittance")
public class SalaryRemittance implements Serializable {
private static final long serialVersionUID = 1L;
/**
* 主键ID
*/
@TableId(value = "id", type = IdType.AUTO)
private Long id;
/**
* 薪资汇款明细表唯一业务ID
*/
@TableField("salary_remittance_biz_id")
private String salaryRemittanceBizId;
/**
* 薪资单表唯一业务ID
*/
@TableField("salary_biz_id")
private String salaryBizId;
/**
* 收款银行
*/
@TableField("bank")
private String bank;
/**
* 账户尾号
*/
@TableField("account_end_no")
private String accountEndNo;
/**
* 汇款币种
*/
@TableField("currency")
private String currency;
/**
* 汇款金额
*/
@TableField("amount")
private BigDecimal amount;
/**
* 汇率
*/
@TableField("exchange_rate")
private BigDecimal exchangeRate;
/**
* 通用备注
*/
@TableField("remark")
private String remark;
/**
* 删除标识: 0-正常, 1-删除
*/
@TableField("is_deleted")
private Integer isDeleted;
/**
* 创建人ID
*/
@TableField("creator_id")
private String creatorId;
/**
* 创建人名称
*/
@TableField("creator_name")
private String creatorName;
/**
* 更新人ID
*/
@TableField("updater_id")
private String updaterId;
/**
* 创建时间
*/
@TableField("create_time")
private LocalDateTime createTime;
/**
* 更新时间
*/
@TableField("update_time")
private LocalDateTime updateTime;
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.SalaryRemittance;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 薪资汇款明细表 服务类
* </p>
*
* @author zxm
* @since 2026-05-08
*/
public interface ISalaryRemittanceService extends IService<SalaryRemittance> {
}
package com.yd.csf.service.service;
import com.yd.csf.service.model.Salary;
import com.baomidou.mybatisplus.extension.service.IService;
/**
* <p>
* 薪资单表 服务类
* </p>
*
* @author zxm
* @since 2026-05-08
*/
public interface ISalaryService extends IService<Salary> {
Salary queryOne(String brokerBizId,String month,
String salaryBizId,Boolean isExcludeMy);
Salary queryOne(String salaryBizId);
}
package com.yd.csf.service.service.impl;
import com.yd.csf.service.model.SalaryRemittance;
import com.yd.csf.service.dao.SalaryRemittanceMapper;
import com.yd.csf.service.service.ISalaryRemittanceService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 薪资汇款明细表 服务实现类
* </p>
*
* @author zxm
* @since 2026-05-08
*/
@Service
public class SalaryRemittanceServiceImpl extends ServiceImpl<SalaryRemittanceMapper, SalaryRemittance> implements ISalaryRemittanceService {
}
package com.yd.csf.service.service.impl;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.yd.csf.service.model.Salary;
import com.yd.csf.service.dao.SalaryMapper;
import com.yd.csf.service.service.ISalaryService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import org.springframework.stereotype.Service;
/**
* <p>
* 薪资单表 服务实现类
* </p>
*
* @author zxm
* @since 2026-05-08
*/
@Service
public class SalaryServiceImpl extends ServiceImpl<SalaryMapper, Salary> implements ISalaryService {
@Override
public Salary queryOne(String brokerBizId, String month,
String salaryBizId,Boolean isExcludeMy) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<Salary>()
.eq(Salary::getBrokerBizId,brokerBizId)
.eq(Salary::getMonth,month)
.ne(isExcludeMy,Salary::getSalaryBizId,salaryBizId)
.last(" limit 1 ")
);
}
@Override
public Salary queryOne(String salaryBizId) {
return this.baseMapper.selectOne(new LambdaQueryWrapper<Salary>()
.eq(Salary::getSalaryBizId,salaryBizId)
.last(" limit 1 ")
);
}
}
......@@ -21,7 +21,7 @@ public class MyBatisPlusCodeGenerator {
})
.strategyConfig(builder -> {
builder.addInclude(
"evaluate_rank"
"salary","salary_remittance"
)
.entityBuilder()
......
<?xml version="1.0" encoding="UTF-8"?>
<!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">
</mapper>
<?xml version="1.0" encoding="UTF-8"?>
<!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.SalaryRemittanceMapper">
</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