diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdVo.java new file mode 100644 index 00000000..670a7935 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/IdVo.java @@ -0,0 +1,17 @@ +package com.ruoyi.system.api.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 苏海龙 + * @version 1.0 + * @description: TODO + * @date 2023/1/10 20:07 + */ + +@Data +public class IdVo implements Serializable { + private Integer id; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginVo.java new file mode 100644 index 00000000..ee6e8860 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/LoginVo.java @@ -0,0 +1,20 @@ +package com.ruoyi.system.api.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 苏海龙 + * @version 1.0 + * @description: TODO + * @date 2023/1/10 20:57 + */ +//登录的vo实体类 +@Data +public class LoginVo implements Serializable { + private String nickName; + private String userPass; + private String code; + private String phone; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PageInfoVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PageInfoVo.java new file mode 100644 index 00000000..d151469e --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PageInfoVo.java @@ -0,0 +1,41 @@ +package com.ruoyi.system.api.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @Description //TODO + * @Author 王辉 + * @Date 2022/11/14 18:34 + */ +@Data +public class PageInfoVo implements Serializable { + + //分页 + private Integer pageNum; + private Integer pageSize; + //区间查询 + private Integer maxprice; + private Integer minprice; + //模糊条件查询 + private String keyWord; + //根据类型 + private Integer id; + private Integer pid; + + + + + + + + + + + + + + + +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PassWordCode.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PassWordCode.java new file mode 100644 index 00000000..dbc8163e --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PassWordCode.java @@ -0,0 +1,19 @@ +package com.ruoyi.system.api.model; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 苏海龙 + * @version 1.0 + * @description: TODO + * @date 2023/1/14 8:05 + */ + +@Data +public class PassWordCode implements Serializable { + private Integer userId; + private String oldPassword; + private String newPassword; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PhoneVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PhoneVo.java new file mode 100644 index 00000000..11ce82c3 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/PhoneVo.java @@ -0,0 +1,18 @@ +package com.ruoyi.system.api.model; + +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 苏海龙 + * @version 1.0 + * @description: TODO + * @date 2023/1/11 8:18 + */ + +@Data +public class PhoneVo extends BaseEntity { + private String phone; +} diff --git a/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TbUserVo.java b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TbUserVo.java new file mode 100644 index 00000000..884338a5 --- /dev/null +++ b/ruoyi-api/ruoyi-api-system/src/main/java/com/ruoyi/system/api/model/TbUserVo.java @@ -0,0 +1,135 @@ +package com.ruoyi.system.api.model; + +import com.fasterxml.jackson.annotation.JsonFormat; +import com.ruoyi.common.core.web.domain.BaseEntity; +import lombok.Data; +import org.springframework.format.annotation.DateTimeFormat; + +import java.util.Date; + +/** + * @author 苏海龙 + * @version 1.0 + * @description: TODO + * @date 2023/1/10 15:03 + */ + +@Data +public class TbUserVo extends BaseEntity { + private static final long serialVersionUID = 1L; + private Long userId; + + /** + * 用户账号 + */ + private String userName; + private String token; + + /** + * 用户昵称 + */ + private String nickName; + + /** + * 用户邮箱 + */ + private String email; + + /** + * 手机号码 + */ + private String phonenumber; + + /** + * 年龄 + */ + private Integer age; + + /** + * 用户性别(0男 1女 2未知) + */ + private String sex; + + /** + * 头像地址 + */ + private String avatar; + + /** + * 身份证(只有管理员能看到) + */ + private String userCard; + + /** + * 密码 + */ + private String password; + + /** + * 帐号状态(0正常 1停用) + */ + private String status; + + /** + * 删除标志(0代表存在 2代表删除) + */ + private String delFlag; + + /** + * 最后登录IP + */ + private String loginIp; + + /** + * 最后登录时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date loginDate; + + /** + * 创建者 + */ + private String createBy; + + /** + * 创建时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date createTime; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 账号金额(元) + */ + private Double userPrice; + + /** + * 更新时间 + */ + @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss") + @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone="GMT+8") + private Date updateTime; + + /** + * 备注 + */ + private String remark; + + /** + * 实名状态(0,未实名1已实名) + */ + private String realnameState; + + /** + * 信誉积分 + */ + private Integer honorIntegral; + + +} diff --git a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java index 3b93514e..24a3de30 100644 --- a/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java +++ b/ruoyi-auth/src/main/java/com/ruoyi/auth/controller/TokenController.java @@ -36,6 +36,7 @@ public class TokenController { // 用户登录 LoginUser userInfo = sysLoginService.login(form.getUsername(), form.getPassword()); + // 获取登录token return R.ok(tokenService.createToken(userInfo)); } diff --git a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java index b3093c9c..d7ebfe81 100644 --- a/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java +++ b/ruoyi-common/ruoyi-common-security/src/main/java/com/ruoyi/common/security/service/TokenService.java @@ -62,6 +62,7 @@ public class TokenService Map rspMap = new HashMap(); rspMap.put("access_token", JwtUtils.createToken(claimsMap)); rspMap.put("expires_in", expireTime); + System.err.println(rspMap); return rspMap; } diff --git a/ruoyi-common/ruoyi-common-swagger/pom.xml b/ruoyi-common/ruoyi-common-swagger/pom.xml index c301179f..efef7279 100644 --- a/ruoyi-common/ruoyi-common-swagger/pom.xml +++ b/ruoyi-common/ruoyi-common-swagger/pom.xml @@ -23,6 +23,13 @@ spring-boot-starter-web + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.7 + + io.springfox diff --git a/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/Knife4jConfiguration.java b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/Knife4jConfiguration.java new file mode 100644 index 00000000..0cd20ed1 --- /dev/null +++ b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/Knife4jConfiguration.java @@ -0,0 +1,44 @@ +package com.ruoyi.common.swagger.config; + + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.ApiInfo; +import springfox.documentation.service.Contact; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.swagger2.annotations.EnableSwagger2; +import springfox.documentation.swagger2.annotations.EnableSwagger2WebMvc; + +@Configuration +@EnableSwagger2 +public class Knife4jConfiguration { + @Bean(value = "dockerBean") + public Docket dockerBean() { + //指定使用Swagger2规范 + Docket docket = new Docket(DocumentationType.SWAGGER_2) + .apiInfo(webApiInfo()) + //分组名称 + .groupName("WebApi") + .select() + //这里指定Controller扫描包路径 + .apis(RequestHandlerSelectors.basePackage("com.ruoyi")) + .paths(PathSelectors.any()) + .build(); + return docket; + } + + private ApiInfo webApiInfo() { + return new ApiInfoBuilder() + //描述字段支持Markdown语法 + .title("Weekly-API") + .contact(new Contact("木子", "https://www.muzi.net/", "muzi@muzi.com")) + .description("实训项目端") + .version("1.0") + .build(); + } +} diff --git a/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java index 424e8c3c..9d61c354 100644 --- a/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java +++ b/ruoyi-common/ruoyi-common-swagger/src/main/java/com/ruoyi/common/swagger/config/SwaggerWebConfiguration.java @@ -1,6 +1,7 @@ package com.ruoyi.common.swagger.config; import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -10,6 +11,7 @@ import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; * @author ruoyi */ @Configuration +@Primary public class SwaggerWebConfiguration implements WebMvcConfigurer { @Override diff --git a/ruoyi-gateway/pom.xml b/ruoyi-gateway/pom.xml index b2f6649d..01f5285a 100644 --- a/ruoyi-gateway/pom.xml +++ b/ruoyi-gateway/pom.xml @@ -16,6 +16,19 @@ + + + com.github.xiaoymin + knife4j-spring-boot-starter + 2.0.7 + + + + com.github.xiaoymin + knife4j-spring-ui + 2.0.7 + + org.springframework.cloud diff --git a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java index 72667305..1bfcc733 100644 --- a/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java +++ b/ruoyi-gateway/src/main/java/com/ruoyi/gateway/config/SwaggerProvider.java @@ -7,6 +7,7 @@ import org.springframework.cloud.gateway.config.GatewayProperties; import org.springframework.cloud.gateway.route.RouteLocator; import org.springframework.cloud.gateway.support.NameUtils; import org.springframework.context.annotation.Lazy; +import org.springframework.context.annotation.Primary; import org.springframework.stereotype.Component; import org.springframework.web.reactive.config.ResourceHandlerRegistry; import org.springframework.web.reactive.config.WebFluxConfigurer; @@ -19,6 +20,7 @@ import springfox.documentation.swagger.web.SwaggerResourcesProvider; * @author ruoyi */ @Component +@Primary public class SwaggerProvider implements SwaggerResourcesProvider, WebFluxConfigurer { /** diff --git a/ruoyi-modules/pom.xml b/ruoyi-modules/pom.xml index 91177839..3d5da182 100644 --- a/ruoyi-modules/pom.xml +++ b/ruoyi-modules/pom.xml @@ -14,6 +14,7 @@ ruoyi-job ruoyi-file ruoyi-potenza + ruoyi-user ruoyi-modules diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerController.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerController.java index 860685d2..a65f6ff4 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerController.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerController.java @@ -30,7 +30,7 @@ import com.ruoyi.common.core.utils.poi.ExcelUtil; * @description: TODO * @date 2023/1/13 16:00 */ -@RequestMapping("/Borrower") +@RequestMapping("/borrower") @RestController @Slf4j public class BorrowerController extends BaseController { @@ -57,7 +57,7 @@ public class BorrowerController extends BaseController { return tbBorrowerService.borrowerDele(idVo); } - @RequiresPermissions("potenza:borrower:list") + @GetMapping("/list") public TableDataInfo list(TbBorrower tbBorrower) { @@ -69,7 +69,7 @@ public class BorrowerController extends BaseController { /** * 导出贷款列表 */ - @RequiresPermissions("potenza:borrower:export") + @Log(title = "贷款", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, TbBorrower tbBorrower) @@ -82,8 +82,8 @@ public class BorrowerController extends BaseController { /** * 获取贷款详细信息 */ - @RequiresPermissions("potenza:borrower:query") - @GetMapping(value = "/{borrowerId}") + + @GetMapping(value = "/{borrowerById}") public AjaxResult getInfo(@PathVariable("borrowerId") Long borrowerId) { return success(tbBorrowerService.selectTbBorrowerByBorrowerId(borrowerId)); @@ -92,9 +92,9 @@ public class BorrowerController extends BaseController { /** * 新增贷款 */ - @RequiresPermissions("potenza:borrower:add") + @Log(title = "贷款", businessType = BusinessType.INSERT) - @PostMapping + @PostMapping("/borrowerInsert") public AjaxResult add(@RequestBody TbBorrower tbBorrower) { return toAjax(tbBorrowerService.insertTbBorrower(tbBorrower)); @@ -103,14 +103,30 @@ public class BorrowerController extends BaseController { /** * 修改贷款 */ - @RequiresPermissions("potenza:borrower:edit") + @Log(title = "贷款", businessType = BusinessType.UPDATE) - @PutMapping + @PutMapping("/borrowerUpdate") public AjaxResult edit(@RequestBody TbBorrower tbBorrower) { return toAjax(tbBorrowerService.updateTbBorrower(tbBorrower)); } + @PostMapping("/borrowerInserts") + public AjaxResult borrowerInserts(@RequestBody TbBorrower tbBorrower) + { + return toAjax(tbBorrowerService.borrowerInserts(tbBorrower)); + } + + + @PostMapping("/loans") + public AjaxResult loans(@RequestBody TbBorrower tbBorrower) + { + return tbBorrowerService.loans(tbBorrower); + } + + + + } diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPeriodsController.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPeriodsController.java index 2089a3f1..3602e258 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPeriodsController.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPeriodsController.java @@ -4,6 +4,7 @@ import java.util.List; import java.io.IOException; import javax.servlet.http.HttpServletResponse; +import com.ruoyi.potenza.domain.vo.PeriodDetailVo; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; @@ -52,7 +53,6 @@ public class BorrowerPeriodsController extends BaseController{ /** * 导出贷款周期列表 */ - @RequiresPermissions("potenza:periods:export") @Log(title = "贷款周期", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, TbBorrowerPeriods tbBorrowerPeriods) @@ -65,8 +65,7 @@ public class BorrowerPeriodsController extends BaseController{ /** * 获取贷款周期详细信息 */ - @RequiresPermissions("potenza:periods:query") - @GetMapping(value = "/{periodsId}") + @GetMapping(value = "/{periodsById}") public AjaxResult getInfo(@PathVariable("periodsId") Long periodsId) { return success(tbBorrowerPeriodsService.selectTbBorrowerPeriodsByPeriodsId(periodsId)); @@ -75,9 +74,8 @@ public class BorrowerPeriodsController extends BaseController{ /** * 新增贷款周期 */ - @RequiresPermissions("potenza:periods:add") @Log(title = "贷款周期", businessType = BusinessType.INSERT) - @PostMapping + @PostMapping("periodsInsert") public AjaxResult add(@RequestBody TbBorrowerPeriods tbBorrowerPeriods) { return toAjax(tbBorrowerPeriodsService.insertTbBorrowerPeriods(tbBorrowerPeriods)); @@ -86,9 +84,8 @@ public class BorrowerPeriodsController extends BaseController{ /** * 修改贷款周期 */ - @RequiresPermissions("potenza:periods:edit") @Log(title = "贷款周期", businessType = BusinessType.UPDATE) - @PutMapping + @PutMapping("/periodsUpdate") public AjaxResult edit(@RequestBody TbBorrowerPeriods tbBorrowerPeriods) { return toAjax(tbBorrowerPeriodsService.updateTbBorrowerPeriods(tbBorrowerPeriods)); @@ -97,11 +94,18 @@ public class BorrowerPeriodsController extends BaseController{ /** * 删除贷款周期 */ - @RequiresPermissions("potenza:periods:remove") @Log(title = "贷款周期", businessType = BusinessType.DELETE) @DeleteMapping("/{periodsIds}") public AjaxResult remove(@PathVariable Long[] periodsIds) { return toAjax(tbBorrowerPeriodsService.deleteTbBorrowerPeriodsByPeriodsIds(periodsIds)); } + + + @Log(title = "周期详细", businessType = BusinessType.UPDATE) + @PostMapping("/detail") + public AjaxResult detail(@RequestBody PeriodDetailVo periodDetailVo) + { + return tbBorrowerPeriodsService.detail(periodDetailVo); + } } diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPlanController.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPlanController.java index e139655a..248ce36c 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPlanController.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/controller/BorrowerPlanController.java @@ -52,7 +52,6 @@ public class BorrowerPlanController extends BaseController{ /** * 导出计划列表 */ - @RequiresPermissions("potenza:plan:export") @Log(title = "计划", businessType = BusinessType.EXPORT) @PostMapping("/export") public void export(HttpServletResponse response, TbBorrowerPlan tbBorrowerPlan) @@ -65,8 +64,7 @@ public class BorrowerPlanController extends BaseController{ /** * 获取计划详细信息 */ - @RequiresPermissions("potenza:plan:query") - @GetMapping(value = "/{planId}") + @GetMapping(value = "/{planById}") public AjaxResult getInfo(@PathVariable("planId") Long planId) { return success(tbBorrowerPlanService.selectTbBorrowerPlanByPlanId(planId)); @@ -75,9 +73,8 @@ public class BorrowerPlanController extends BaseController{ /** * 新增计划 */ - @RequiresPermissions("potenza:plan:add") @Log(title = "计划", businessType = BusinessType.INSERT) - @PostMapping + @PostMapping("planInsert") public AjaxResult add(@RequestBody TbBorrowerPlan tbBorrowerPlan) { return toAjax(tbBorrowerPlanService.insertTbBorrowerPlan(tbBorrowerPlan)); @@ -86,9 +83,8 @@ public class BorrowerPlanController extends BaseController{ /** * 修改计划 */ - @RequiresPermissions("potenza:plan:edit") @Log(title = "计划", businessType = BusinessType.UPDATE) - @PutMapping + @PutMapping("planUpdate") public AjaxResult edit(@RequestBody TbBorrowerPlan tbBorrowerPlan) { return toAjax(tbBorrowerPlanService.updateTbBorrowerPlan(tbBorrowerPlan)); @@ -97,7 +93,6 @@ public class BorrowerPlanController extends BaseController{ /** * 删除计划 */ - @RequiresPermissions("potenza:plan:remove") @Log(title = "计划", businessType = BusinessType.DELETE) @DeleteMapping("/{planIds}") public AjaxResult remove(@PathVariable Long[] planIds) diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/TbBorrowerPeriods.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/TbBorrowerPeriods.java index 4e0162bb..d3387ce5 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/TbBorrowerPeriods.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/TbBorrowerPeriods.java @@ -36,6 +36,8 @@ public class TbBorrowerPeriods implements Serializable { */ private String updateBy; + private Double rateInterest; + /** * 删除状态0:存在,2:删除 */ diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/PeriodDetailVo.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/PeriodDetailVo.java new file mode 100644 index 00000000..da289bc5 --- /dev/null +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/PeriodDetailVo.java @@ -0,0 +1,20 @@ +package com.ruoyi.potenza.domain.vo; + +import lombok.Data; + +import java.io.Serializable; + +/** + * @author 木子 + * @version 1.0 + * @description: TODO + * @date 2023/1/15 20:39 + */ +@Data +public class PeriodDetailVo implements Serializable { + private Double borrowerMoney; + + private Integer wayId; + + private Integer periodsId; +} diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/TbBorrowerVo.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/TbBorrowerVo.java new file mode 100644 index 00000000..9abbee05 --- /dev/null +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/domain/vo/TbBorrowerVo.java @@ -0,0 +1,94 @@ +package com.ruoyi.potenza.domain.vo; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.io.Serializable; +import java.util.Date; + +/** + * @author 木子 + * @version 1.0 + * @description: TODO + * @date 2023/1/15 19:26 + */ +@Data +public class TbBorrowerVo implements Serializable { + + private Integer borrowerId; + + /** + * 用户ID + */ + private Integer userId; + + /** + * 用户名称 + */ + private String userName; + + /** + * 产品ID + */ + private Integer productId; + + /** + * 默认为最高可以借款金额 + */ + private Double borrowerMoney; + + /** + * 贷款周期ID + */ + private Integer periodsId; + + /** + * 贷款方式ID 0:等额本息 6000 1:等额本金 6000 1000 第一个月60000*利率 第二个月 5000*利率 + */ + private Integer wayId; + + /** + * 借款用途 + */ + private String borrowerPurpose; + + /** + * 1: 待审核 2:贷款成功 3:贷款失败 + */ + private Integer borrowerState; + + /** + * 放款人 + */ + private Integer loanerId; + + /** + * 创建者 + */ + private String createBy; + + /** + * 更新者 + */ + private String updateBy; + + /** + * 删除状态0:存在,2:删除 + */ + private Integer delFlag; + + /** + * 创建时间 + */ + private Date createTime; + + /** + * 更新时间 + */ + private Date updateTime; + + + +} diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerPeriodsService.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerPeriodsService.java index 7e3a82b3..9c1dcec0 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerPeriodsService.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerPeriodsService.java @@ -1,7 +1,9 @@ package com.ruoyi.potenza.service; +import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.potenza.domain.TbBorrowerPeriods; import com.baomidou.mybatisplus.extension.service.IService; +import com.ruoyi.potenza.domain.vo.PeriodDetailVo; import java.util.List; @@ -58,4 +60,6 @@ public interface TbBorrowerPeriodsService extends IService { * @return 结果 */ public int deleteTbBorrowerPeriodsByPeriodsId(Long periodsId); + + AjaxResult detail(PeriodDetailVo periodDetailVo); } diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerService.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerService.java index ab007948..567c0789 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerService.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/TbBorrowerService.java @@ -51,5 +51,7 @@ public interface TbBorrowerService extends IService { public int updateTbBorrower(TbBorrower tbBorrower); + int borrowerInserts(TbBorrower tbBorrower); + AjaxResult loans(TbBorrower tbBorrower); } diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerPeriodsServiceImpl.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerPeriodsServiceImpl.java index 0bddb453..0757d77f 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerPeriodsServiceImpl.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerPeriodsServiceImpl.java @@ -2,25 +2,31 @@ package com.ruoyi.potenza.service.impl; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.DateUtils; +import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.potenza.domain.TbBorrowerPeriods; +import com.ruoyi.potenza.domain.vo.PeriodDetailVo; import com.ruoyi.potenza.service.TbBorrowerPeriodsService; import com.ruoyi.potenza.mapper.TbBorrowerPeriodsMapper; +import com.ruoyi.potenza.utils.AverageCapitalPlusInterestUtils; +import com.ruoyi.potenza.utils.AverageCapitalUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import java.util.List; /** -* @author 86155 -* @description 针对表【tb_borrower_periods(贷款周期表)】的数据库操作Service实现 -* @createDate 2023-01-13 15:56:37 -*/ + * @author 86155 + * @description 针对表【tb_borrower_periods(贷款周期表)】的数据库操作Service实现 + * @createDate 2023-01-13 15:56:37 + */ @Service public class TbBorrowerPeriodsServiceImpl extends ServiceImpl - implements TbBorrowerPeriodsService{ + implements TbBorrowerPeriodsService{ + @Autowired private TbBorrowerPeriodsMapper tbBorrowerPeriodsMapper; + /** * 查询贷款周期 * @@ -95,6 +101,33 @@ public class TbBorrowerPeriodsServiceImpl extends ServiceImpl implements TbBorrowerPlanService{ + @Autowired private TbBorrowerPlanMapper tbBorrowerPlanMapper; diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerServiceImpl.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerServiceImpl.java index 6a4b4e92..ee9a9bbd 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerServiceImpl.java +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/service/impl/TbBorrowerServiceImpl.java @@ -1,12 +1,19 @@ package com.ruoyi.potenza.service.impl; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.ruoyi.common.core.utils.DateUtils; import com.ruoyi.common.core.web.domain.AjaxResult; import com.ruoyi.potenza.domain.TbBorrower; +import com.ruoyi.potenza.domain.TbBorrowerPeriods; import com.ruoyi.potenza.domain.vo.IdVo; +import com.ruoyi.potenza.domain.vo.TbBorrowerVo; +import com.ruoyi.potenza.mapper.TbBorrowerPeriodsMapper; import com.ruoyi.potenza.service.TbBorrowerService; import com.ruoyi.potenza.mapper.TbBorrowerMapper; +import com.ruoyi.potenza.utils.AverageCapitalPlusInterestUtils; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.BeanUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; @@ -18,12 +25,16 @@ import java.util.List; * @createDate 2023-01-13 15:56:37 */ @Service +@Slf4j public class TbBorrowerServiceImpl extends ServiceImpl implements TbBorrowerService{ @Autowired private TbBorrowerMapper tbBorrowerMapper; + @Autowired + private TbBorrowerPeriodsMapper tbBorrowerPeriodsMapper; + @Override public List pageList(TbBorrower tbBorrower) { List list= tbBorrowerMapper.pageList(); @@ -36,14 +47,6 @@ public class TbBorrowerServiceImpl extends ServiceImpl wrapper=new LambdaQueryWrapper<>(); + wrapper.eq(TbBorrower::getUserId,tbBorrower.getUserId()); + wrapper.eq(TbBorrower::getProductId,tbBorrower.getProductId()); + TbBorrower tbBorrower1 = tbBorrowerMapper.selectOne(wrapper); + if(tbBorrower1!=null){ + return AjaxResult.error("请先还款"); + } + Integer periodsId = tbBorrower.getPeriodsId(); + long periodsid = periodsId.longValue(); + //查询利率 + TbBorrowerPeriods tbBorrowerPeriods = tbBorrowerPeriodsMapper.selectTbBorrowerPeriodsByPeriodsId(periodsid); + + double perMonthPrincipalInterest = AverageCapitalPlusInterestUtils. + getPerMonthPrincipalInterest(tbBorrower.getBorrowerMoney(), + tbBorrowerPeriods.getRateInterest()/100, + tbBorrowerPeriods.getPeriodsName()); + + + double principalInterestCount = AverageCapitalPlusInterestUtils. + getPrincipalInterestCount(tbBorrower.getBorrowerMoney(), + tbBorrowerPeriods.getRateInterest() / 100, + tbBorrowerPeriods.getPeriodsName()); + + log.info("---------"+principalInterestCount); + return AjaxResult.success("添加成功"); + } } diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalPlusInterestUtils.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalPlusInterestUtils.java new file mode 100644 index 00000000..d691ac8c --- /dev/null +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalPlusInterestUtils.java @@ -0,0 +1,141 @@ +package com.ruoyi.potenza.utils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + +/** + + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; + + * @description: TODO + * @author 木子 + * @date 2023/1/15 19:17 + * @version 1.0 + */ +public class AverageCapitalPlusInterestUtils { + /** + * 等额本息计算获取还款方式为等额本息的每月偿还本金和利息 + *

+ * 公式:每月偿还本息=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕 + * + * @param invest 总借款额(贷款本金) + * @param yearRate 年利率 + * @param month 还款总月数 + * @return 每月偿还本金和利息, 不四舍五入,直接截取小数点最后两位 + */ + public static double getPerMonthPrincipalInterest(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal monthIncome = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN); + return monthIncome.doubleValue(); + } + + /** + * 等额本息计算获取还款方式为等额本息的每月偿还利息 + *

+ * 公式:每月偿还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕 + * + * @param invest 总借款额(贷款本金) + * @param yearRate 年利率 + * @param month 还款总月数 + * @return 每月偿还利息 + */ + public static Map getPerMonthInterest(double invest, double yearRate, int totalmonth) { + Map map = new HashMap(); + double monthRate = yearRate / 12; + BigDecimal monthInterest; + for (int i = 1; i < totalmonth + 1; i++) { + BigDecimal multiply = new BigDecimal(invest).multiply(new BigDecimal(monthRate)); + BigDecimal sub = new BigDecimal(Math.pow(1 + monthRate, totalmonth)).subtract(new BigDecimal(Math.pow(1 + monthRate, i - 1))); + monthInterest = multiply.multiply(sub).divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 6, BigDecimal.ROUND_DOWN); + monthInterest = monthInterest.setScale(2, BigDecimal.ROUND_DOWN); + map.put(i, monthInterest); + } + return map; + } + + /** + * 等额本息计算获取还款方式为等额本息的每月偿还本金 + * + * @param invest 总借款额(贷款本金) + * @param yearRate 年利率 + * @param month 还款总月数 + * @return 每月偿还本金 + */ + public static Map getPerMonthPrincipal(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal monthIncome = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN); + Map mapInterest = getPerMonthInterest(invest, yearRate, totalmonth); + Map mapPrincipal = new HashMap(); + + for (Map.Entry entry : mapInterest.entrySet()) { + mapPrincipal.put(entry.getKey(), monthIncome.subtract(entry.getValue())); + } + return mapPrincipal; + } + + /** + * 等额本息计算获取还款方式为等额本息的总利息 + * + * @param invest 总借款额(贷款本金) + * @param yearRate 年利率 + * @param month 还款总月数 + * @return 总利息 + */ + public static double getInterestCount(double invest, double yearRate, int totalmonth) { + BigDecimal count = new BigDecimal(0); + Map mapInterest = getPerMonthInterest(invest, yearRate, totalmonth); + + for (Map.Entry entry : mapInterest.entrySet()) { + count = count.add(entry.getValue()); + } + return count.doubleValue(); + } + + /** + * 应还本金总和 + * + * @param invest 总借款额(贷款本金) + * @param yearRate 年利率 + * @param month 还款总月数 + * @return 应还本金总和 + */ + public static double getPrincipalInterestCount(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal perMonthInterest = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal count = perMonthInterest.multiply(new BigDecimal(totalmonth)); + count = count.setScale(2, BigDecimal.ROUND_DOWN); + return count.doubleValue(); + } + + + /** + * @param args + */ + public static void main(String[] args) { + double invest = 20000; // 本金 + int month = 12; + double yearRate = 0.15; // 年利率 + double perMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month); + System.out.println("等额本息---每月还款本息:" + perMonthPrincipalInterest); + Map mapInterest = getPerMonthInterest(invest, yearRate, month); + System.out.println("等额本息---每月还款利息:" + mapInterest); + Map mapPrincipal = getPerMonthPrincipal(invest, yearRate, month); + System.out.println("等额本息---每月还款本金:" + mapPrincipal); + double count = getInterestCount(invest, yearRate, month); + System.out.println("等额本息---总利息:" + count); + double principalInterestCount = getPrincipalInterestCount(invest, yearRate, month); + System.out.println("等额本息---应还本息总和:" + principalInterestCount); + + } +} + diff --git a/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalUtils.java b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalUtils.java new file mode 100644 index 00000000..35b3568b --- /dev/null +++ b/ruoyi-modules/ruoyi-potenza/src/main/java/com/ruoyi/potenza/utils/AverageCapitalUtils.java @@ -0,0 +1,155 @@ +package com.ruoyi.potenza.utils; + +import java.math.BigDecimal; +import java.util.HashMap; +import java.util.Map; +/** + * @author 木子 + * @version 1.0 + * @description: TODO + * @date 2023/1/15 20:49 + */ +public class AverageCapitalUtils { + /** + * 等额本息计算获取还款方式为等额本息的每月偿还本金和利息 + * + * 公式:每月偿还本息=〔贷款本金×月利率×(1+月利率)^还款月数〕÷〔(1+月利率)^还款月数-1〕 + * + * @param invest + * 总借款额(贷款本金) + * @param yearRate + * 年利率 + * @param month + * 还款总月数 + * @return 每月偿还本金和利息,不四舍五入,直接截取小数点最后两位 + */ + public static BigDecimal getPerMonthPrincipalInterest(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal monthIncome = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_UP); + //return monthIncome.doubleValue(); + return monthIncome; + } + + /** + * 等额本息计算获取还款方式为等额本息的每月偿还利息 + * + * 公式:每月偿还利息=贷款本金×月利率×〔(1+月利率)^还款月数-(1+月利率)^(还款月序号-1)〕÷〔(1+月利率)^还款月数-1〕 + * + * @param invest + * 总借款额(贷款本金) + * @param yearRate + * 年利率 + * @param month + * 还款总月数 + * @return 每月偿还利息 + */ + public static Map getPerMonthInterest(double invest, double yearRate, int totalmonth) { + Map map = new HashMap(); + double monthRate = yearRate / 12; + BigDecimal monthInterest; + for (int i = 1; i < totalmonth + 1; i++) { + BigDecimal multiply = new BigDecimal(invest).multiply(new BigDecimal(monthRate)); + BigDecimal sub = new BigDecimal(Math.pow(1 + monthRate, totalmonth)) + .subtract(new BigDecimal(Math.pow(1 + monthRate, i - 1))); + monthInterest = multiply.multiply(sub).divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, + BigDecimal.ROUND_DOWN); + monthInterest = monthInterest.setScale(2, BigDecimal.ROUND_DOWN); + map.put(i, monthInterest); + } + return map; + } + + /** + * 等额本息计算获取还款方式为等额本息的每月偿还本金 + * + * @param invest + * 总借款额(贷款本金) + * @param yearRate + * 年利率 + * @param month + * 还款总月数 + * @return 每月偿还本金 + */ + public static Map getPerMonthPrincipal(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal monthIncome = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN); + Map mapInterest = getPerMonthInterest(invest, yearRate, totalmonth); + Map mapPrincipal = new HashMap(); + + for (Map.Entry entry : mapInterest.entrySet()) { + mapPrincipal.put(entry.getKey(), monthIncome.subtract(entry.getValue())); + } + return mapPrincipal; + } + + /** + * 等额本息计算获取还款方式为等额本息的总利息 + * + * @param invest + * 总借款额(贷款本金) + * @param yearRate + * 年利率 + * @param month + * 还款总月数 + * @return 总利息 + */ + public static double getInterestCount(double invest, double yearRate, int totalmonth) { + BigDecimal count = new BigDecimal(0); + Map mapInterest = getPerMonthInterest(invest, yearRate, totalmonth); + + for (Map.Entry entry : mapInterest.entrySet()) { + count = count.add(entry.getValue()); + } + return count.doubleValue(); + } + + /** + * 应还本金总和 + * + * @param invest + * 总借款额(贷款本金) + * @param yearRate + * 年利率 + * @param month + * 还款总月数 + * @return 应还本金总和 + */ + public static double getPrincipalInterestCount(double invest, double yearRate, int totalmonth) { + double monthRate = yearRate / 12; + BigDecimal perMonthInterest = new BigDecimal(invest) + .multiply(new BigDecimal(monthRate * Math.pow(1 + monthRate, totalmonth))) + .divide(new BigDecimal(Math.pow(1 + monthRate, totalmonth) - 1), 2, BigDecimal.ROUND_DOWN); + BigDecimal count = perMonthInterest.multiply(new BigDecimal(totalmonth)); + count = count.setScale(2, BigDecimal.ROUND_DOWN); + return count.doubleValue(); + } + + /** + * @param args + */ + public static void main(String[] args) { + double invest = 38988; // 本金 + int month = 12; + double yearRate = 0.15; // 年利率 + BigDecimal perMonthPrincipalInterest = getPerMonthPrincipalInterest(invest, yearRate, month); + System.out.println("等额本息---每月还款本息:" + perMonthPrincipalInterest); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 3)); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 6)); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 9)); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 12)); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 15)); + System.out.println("等额本息---每月还款本息:" + getPerMonthPrincipalInterest(invest, yearRate, 18)); + /*Map mapInterest = getPerMonthInterest(invest, yearRate, month); + System.out.println("等额本息---每月还款利息:" + mapInterest); + Map mapPrincipal = getPerMonthPrincipal(invest, yearRate, month); + System.out.println("等额本息---每月还款本金:" + mapPrincipal); + double count = getInterestCount(invest, yearRate, month); + System.out.println("等额本息---总利息:" + count); + double principalInterestCount = getPrincipalInterestCount(invest, yearRate, month); + System.out.println("等额本息---应还本息总和:" + principalInterestCount);*/ + } +} diff --git a/ruoyi-modules/ruoyi-potenza/src/main/resources/bootstrap.yml b/ruoyi-modules/ruoyi-potenza/src/main/resources/bootstrap.yml index 4a64873b..73846c89 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/resources/bootstrap.yml +++ b/ruoyi-modules/ruoyi-potenza/src/main/resources/bootstrap.yml @@ -1,6 +1,6 @@ # Tomcat server: - port: 9301 + port: 9401 # Spring spring: diff --git a/ruoyi-modules/ruoyi-potenza/src/main/resources/mapper/TbBorrowerPeriodsMapper.xml b/ruoyi-modules/ruoyi-potenza/src/main/resources/mapper/TbBorrowerPeriodsMapper.xml index c8760ec7..e603adea 100644 --- a/ruoyi-modules/ruoyi-potenza/src/main/resources/mapper/TbBorrowerPeriodsMapper.xml +++ b/ruoyi-modules/ruoyi-potenza/src/main/resources/mapper/TbBorrowerPeriodsMapper.xml @@ -7,6 +7,7 @@ + @@ -15,7 +16,7 @@ - select periods_id, periods_name, create_by, update_by, del_flag, create_time, update_time from tb_borrower_periods + select periods_id, periods_name,rate_interest, create_by, update_by, del_flag, create_time, update_time from tb_borrower_periods