feat(system): 添加借支管理功能
- 新增借支管理相关的 API、Controller、Service、Mapper 和 VO 类 - 实现借支管理的创建、查询和分页功能 - 添加根据用户编号获取借支记录的方法 - 为管理后台提供借支管理的接口和页面
This commit is contained in:
parent
eed729cedb
commit
5b3aa0f83f
@ -0,0 +1,35 @@
|
||||
package cn.iocoder.yudao.module.system.api.loan;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.api.loan.dto.LoanDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;
|
||||
import cn.iocoder.yudao.module.system.service.loan.LoanService;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
|
||||
@RestController // 提供 RESTful API 接口,给 Feign 调用
|
||||
@Validated
|
||||
public class LoanApiImpl implements LoanApi {
|
||||
|
||||
@Resource
|
||||
private LoanService loanService;
|
||||
|
||||
@Override
|
||||
public CommonResult<Boolean> createLoan(LoanDTO dto) {
|
||||
LoanSaveReqVO createDO = BeanUtils.toBean(dto, LoanSaveReqVO.class);
|
||||
loanService.createLoan(createDO);
|
||||
return success(true);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommonResult<LoanDTO> getByUserId(Long userId) {
|
||||
LoanDO loanDO = loanService.getByUserId(userId);
|
||||
return success(BeanUtils.toBean(loanDO, LoanDTO.class));
|
||||
}
|
||||
}
|
@ -17,7 +17,6 @@ import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.Customer
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.customersettlement.SettlementItemDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.user.AdminUserDO;
|
||||
import cn.iocoder.yudao.module.system.service.customersettlement.CustomerSettlementService;
|
||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import cn.iocoder.yudao.module.system.service.user.AdminUserService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
|
@ -0,0 +1,13 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
@Schema(description = "管理后台 - 其他扣款明细 Response VO")
|
||||
@Data
|
||||
public class OtherDeductionsVO {
|
||||
|
||||
private String key;
|
||||
|
||||
private String value;
|
||||
}
|
@ -0,0 +1,22 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.customersettlement.vo;
|
||||
|
||||
import com.alibaba.excel.annotation.format.DateTimeFormat;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 收款明细 Response VO")
|
||||
@Data
|
||||
public class PaymentItem {
|
||||
|
||||
@Schema(description = "收款方 | 1公司 2个人")
|
||||
private Integer payee;
|
||||
|
||||
@Schema(description = "收款金额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@Schema(description = "收款日期")
|
||||
@DateTimeFormat("yyyy-MM-dd")
|
||||
private String paymentDate;
|
||||
}
|
@ -0,0 +1,85 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.loan;
|
||||
|
||||
import cn.hutool.core.collection.CollUtil;
|
||||
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.smartfactory.api.staff.StaffApi;
|
||||
import cn.iocoder.yudao.module.smartfactory.api.staff.dto.StaffDTO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanRespVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.dept.DeptDO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;
|
||||
import cn.iocoder.yudao.module.system.service.dept.DeptService;
|
||||
import cn.iocoder.yudao.module.system.service.loan.LoanService;
|
||||
import io.swagger.v3.oas.annotations.Operation;
|
||||
import io.swagger.v3.oas.annotations.Parameter;
|
||||
import io.swagger.v3.oas.annotations.tags.Tag;
|
||||
import org.springframework.security.access.prepost.PreAuthorize;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RequestParam;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
import javax.validation.Valid;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertMap;
|
||||
import static cn.iocoder.yudao.framework.common.util.collection.CollectionUtils.convertSet;
|
||||
|
||||
@Tag(name = "管理后台 - 借支管理")
|
||||
@RestController
|
||||
@RequestMapping("/system/loan")
|
||||
@Validated
|
||||
public class LoanController {
|
||||
|
||||
@Resource
|
||||
private LoanService loanService;
|
||||
|
||||
@Resource
|
||||
private StaffApi staffApi;
|
||||
|
||||
@Resource
|
||||
private DeptService deptService;
|
||||
|
||||
@GetMapping("/get")
|
||||
@Operation(summary = "获得借支管理")
|
||||
@Parameter(name = "id", description = "编号", required = true, example = "1024")
|
||||
@PreAuthorize("@ss.hasPermission('system:loan:query')")
|
||||
public CommonResult<LoanRespVO> getLoan(@RequestParam("id") Long id) {
|
||||
LoanDO loan = loanService.getLoan(id);
|
||||
return success(BeanUtils.toBean(loan, LoanRespVO.class));
|
||||
}
|
||||
|
||||
@GetMapping("/page")
|
||||
@Operation(summary = "获得借支管理分页")
|
||||
@PreAuthorize("@ss.hasPermission('system:loan:query')")
|
||||
public CommonResult<PageResult<LoanRespVO>> getLoanPage(@Valid LoanPageReqVO pageReqVO) {
|
||||
PageResult<LoanDO> pageResult = loanService.getLoanPage(pageReqVO);
|
||||
PageResult<LoanRespVO> result = BeanUtils.toBean(pageResult, LoanRespVO.class);
|
||||
|
||||
if (CollUtil.isNotEmpty(result.getList())) {
|
||||
|
||||
// 获取员工信息
|
||||
Set<Long> userIds = convertSet(result.getList(), LoanRespVO::getUserId);
|
||||
Map<Long, StaffDTO> userMap = convertMap(staffApi.getStaffList(userIds).getCheckedData(), StaffDTO::getId);
|
||||
|
||||
// 获取部门信息
|
||||
Set<Long> deptIds = convertSet(result.getList(), LoanRespVO::getDeptId);
|
||||
Map<Long, DeptDO> deptMap = convertMap(deptService.getDeptList(deptIds), DeptDO::getId);
|
||||
|
||||
result.getList().forEach(item -> {
|
||||
// 设置借支用户名称
|
||||
item.setUserName(userMap.get(item.getUserId()).getNickName());
|
||||
// 设置借支用户部门名称
|
||||
item.setDeptName(deptMap.get(item.getDeptId()).getName());
|
||||
});
|
||||
}
|
||||
|
||||
return success(result);
|
||||
}
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.loan.vo;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageParam;
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
import lombok.EqualsAndHashCode;
|
||||
import lombok.ToString;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.util.date.DateUtils.FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND;
|
||||
|
||||
@Schema(description = "管理后台 - 借支管理分页 Request VO")
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
public class LoanPageReqVO extends PageParam {
|
||||
|
||||
@Schema(description = "借支用户编号", example = "146")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "借支用户部门编号", example = "128")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "创建时间")
|
||||
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
|
||||
private LocalDateTime[] createTime;
|
||||
|
||||
}
|
@ -0,0 +1,43 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.loan.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
import java.time.LocalDateTime;
|
||||
|
||||
@Schema(description = "管理后台 - 借支管理 Response VO")
|
||||
@Data
|
||||
public class LoanRespVO {
|
||||
|
||||
@Schema(description = "主键id")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "申请人姓名")
|
||||
private String applicantName;
|
||||
|
||||
@Schema(description = "借支用户编号")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "借支用户姓名")
|
||||
private String userName;
|
||||
|
||||
@Schema(description = "借支用户部门编号")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "借支用户部门名称")
|
||||
private String deptName;
|
||||
|
||||
@Schema(description = "借支总额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@Schema(description = "已归还金额")
|
||||
private BigDecimal returnAmount;
|
||||
|
||||
@Schema(description = "剩余金额")
|
||||
private BigDecimal remainingAmount;
|
||||
|
||||
@Schema(description = "创建时间", requiredMode = Schema.RequiredMode.REQUIRED)
|
||||
private LocalDateTime createTime;
|
||||
|
||||
}
|
@ -0,0 +1,33 @@
|
||||
package cn.iocoder.yudao.module.system.controller.admin.loan.vo;
|
||||
|
||||
import io.swagger.v3.oas.annotations.media.Schema;
|
||||
import lombok.Data;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.math.BigDecimal;
|
||||
|
||||
@Schema(description = "管理后台 - 借支管理新增/修改 Request VO")
|
||||
@Data
|
||||
public class LoanSaveReqVO {
|
||||
|
||||
@Schema(description = "主键id", requiredMode = Schema.RequiredMode.REQUIRED, example = "1")
|
||||
private Long id;
|
||||
|
||||
@Schema(description = "借支用户编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "146")
|
||||
@NotNull(message = "借支用户编号不能为空")
|
||||
private Long userId;
|
||||
|
||||
@Schema(description = "借支用户部门编号", requiredMode = Schema.RequiredMode.REQUIRED, example = "128")
|
||||
@NotNull(message = "借支用户部门编号不能为空")
|
||||
private Long deptId;
|
||||
|
||||
@Schema(description = "借支总额")
|
||||
private BigDecimal amount;
|
||||
|
||||
@Schema(description = "已归还金额")
|
||||
private BigDecimal returnAmount;
|
||||
|
||||
@Schema(description = "剩余金额")
|
||||
private BigDecimal remainingAmount;
|
||||
|
||||
}
|
@ -0,0 +1,52 @@
|
||||
package cn.iocoder.yudao.module.system.dal.dataobject.loan;
|
||||
|
||||
import cn.iocoder.yudao.framework.mybatis.core.dataobject.BaseDO;
|
||||
import com.baomidou.mybatisplus.annotation.KeySequence;
|
||||
import com.baomidou.mybatisplus.annotation.TableId;
|
||||
import com.baomidou.mybatisplus.annotation.TableName;
|
||||
import lombok.*;
|
||||
|
||||
import java.math.BigDecimal;
|
||||
|
||||
/**
|
||||
* 借支管理 DO
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@TableName("system_loan")
|
||||
@KeySequence("system_loan_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库,可不写。
|
||||
@Data
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@ToString(callSuper = true)
|
||||
@Builder
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class LoanDO extends BaseDO {
|
||||
|
||||
/**
|
||||
* 主键id
|
||||
*/
|
||||
@TableId
|
||||
private Long id;
|
||||
/**
|
||||
* 借支用户编号
|
||||
*/
|
||||
private Long userId;
|
||||
/**
|
||||
* 借支用户部门编号
|
||||
*/
|
||||
private Long deptId;
|
||||
/**
|
||||
* 借支总额
|
||||
*/
|
||||
private BigDecimal amount;
|
||||
/**
|
||||
* 已归还金额
|
||||
*/
|
||||
private BigDecimal returnAmount;
|
||||
/**
|
||||
* 剩余金额
|
||||
*/
|
||||
private BigDecimal remainingAmount;
|
||||
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
package cn.iocoder.yudao.module.system.dal.mysql.loan;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.mapper.BaseMapperX;
|
||||
import cn.iocoder.yudao.framework.mybatis.core.query.LambdaQueryWrapperX;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;
|
||||
import org.apache.ibatis.annotations.Mapper;
|
||||
|
||||
/**
|
||||
* 借支管理 Mapper
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Mapper
|
||||
public interface LoanMapper extends BaseMapperX<LoanDO> {
|
||||
|
||||
default PageResult<LoanDO> selectPage(LoanPageReqVO reqVO) {
|
||||
return selectPage(reqVO, new LambdaQueryWrapperX<LoanDO>()
|
||||
.eqIfPresent(LoanDO::getUserId, reqVO.getUserId())
|
||||
.eqIfPresent(LoanDO::getDeptId, reqVO.getDeptId())
|
||||
.betweenIfPresent(LoanDO::getCreateTime, reqVO.getCreateTime())
|
||||
.orderByDesc(LoanDO::getId));
|
||||
}
|
||||
|
||||
}
|
@ -29,9 +29,6 @@ public class FieldworkJob {
|
||||
@Resource
|
||||
private BpmOAGoOutApi goOutApi;
|
||||
|
||||
@Resource
|
||||
private BpmOAEntryApi entryApi;
|
||||
|
||||
@Resource
|
||||
private BpmOAEvectionApi evectionApi;
|
||||
|
||||
|
@ -0,0 +1,47 @@
|
||||
package cn.iocoder.yudao.module.system.service.loan;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;
|
||||
|
||||
import javax.validation.Valid;
|
||||
|
||||
/**
|
||||
* 借支管理 Service 接口
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
public interface LoanService {
|
||||
|
||||
/**
|
||||
* 创建借支管理
|
||||
*
|
||||
* @param createReqVO 创建信息
|
||||
*/
|
||||
void createLoan(@Valid LoanSaveReqVO createReqVO);
|
||||
|
||||
/**
|
||||
* 获得借支管理
|
||||
*
|
||||
* @param id 编号
|
||||
* @return 借支管理
|
||||
*/
|
||||
LoanDO getLoan(Long id);
|
||||
|
||||
/**
|
||||
* 获得借支管理分页
|
||||
*
|
||||
* @param pageReqVO 分页查询
|
||||
* @return 借支管理分页
|
||||
*/
|
||||
PageResult<LoanDO> getLoanPage(LoanPageReqVO pageReqVO);
|
||||
|
||||
|
||||
/**
|
||||
* 根据用户编号获取借支管理
|
||||
* @param userId 用户编号
|
||||
* @return 借支记录
|
||||
*/
|
||||
LoanDO getByUserId(Long userId);
|
||||
}
|
@ -0,0 +1,65 @@
|
||||
package cn.iocoder.yudao.module.system.service.loan;
|
||||
|
||||
import cn.iocoder.yudao.framework.common.pojo.PageResult;
|
||||
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanPageReqVO;
|
||||
import cn.iocoder.yudao.module.system.controller.admin.loan.vo.LoanSaveReqVO;
|
||||
import cn.iocoder.yudao.module.system.dal.dataobject.loan.LoanDO;
|
||||
import cn.iocoder.yudao.module.system.dal.mysql.loan.LoanMapper;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.validation.annotation.Validated;
|
||||
|
||||
import javax.annotation.Resource;
|
||||
|
||||
import static cn.iocoder.yudao.framework.common.exception.util.ServiceExceptionUtil.exception;
|
||||
import static cn.iocoder.yudao.module.system.enums.ErrorCodeConstants.LOAN_NOT_EXISTS;
|
||||
|
||||
/**
|
||||
* 借支管理 Service 实现类
|
||||
*
|
||||
* @author 符溶馨
|
||||
*/
|
||||
@Service
|
||||
@Validated
|
||||
public class LoanServiceImpl implements LoanService {
|
||||
|
||||
@Resource
|
||||
private LoanMapper loanMapper;
|
||||
|
||||
@Override
|
||||
public void createLoan(LoanSaveReqVO createReqVO) {
|
||||
|
||||
// 判断该借支用户 是否已存在借支记录
|
||||
LoanDO loanDO = loanMapper.selectOne(LoanDO::getUserId, createReqVO.getUserId());
|
||||
if (loanDO != null) {
|
||||
// 借支用户已存在借支记录,则更新该借支用户记录
|
||||
LoanDO updateDO = new LoanDO()
|
||||
.setId(loanDO.getId())
|
||||
.setAmount(loanDO.getAmount().add(createReqVO.getAmount()))
|
||||
.setReturnAmount(loanDO.getReturnAmount().add(createReqVO.getReturnAmount()));
|
||||
// 更新
|
||||
loanMapper.updateById(updateDO);
|
||||
}else {
|
||||
// 借支用户不存在借支记录,则插入一条新记录
|
||||
|
||||
// 插入
|
||||
LoanDO createDO = BeanUtils.toBean(createReqVO, LoanDO.class);
|
||||
loanMapper.insert(createDO);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanDO getLoan(Long id) {
|
||||
return loanMapper.selectById(id);
|
||||
}
|
||||
|
||||
@Override
|
||||
public PageResult<LoanDO> getLoanPage(LoanPageReqVO pageReqVO) {
|
||||
return loanMapper.selectPage(pageReqVO);
|
||||
}
|
||||
|
||||
@Override
|
||||
public LoanDO getByUserId(Long userId) {
|
||||
return loanMapper.selectOne(LoanDO::getUserId, userId);
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user