Browse Source

app改动

master
wangsai 1 week ago
parent
commit
a354c3ed89
  1. 28
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/classification/ClassificationController.java
  2. 3
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/classification/vo/ClassificationRespVO.java
  3. 6
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/inout/vo/InoutPageReqVO.java
  4. 71
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/app/classification/AppClassificationController.java
  5. 116
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/app/inout/AppInoutController.java
  6. 1
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/dal/mysql/inout/InoutMapper.java
  7. 2
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/service/inout/InoutService.java
  8. 5
      yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/service/inout/InoutServiceImpl.java
  9. 36
      yudao-module-book/src/main/resources/mapper/inout/InoutMapper.xml
  10. 10
      yudao-server/pom.xml
  11. 6
      yudao-server/src/main/resources/application-local.yaml
  12. 2
      yudao-ui/yudao-ui-admin-vue3/src/api/book/classification/index.ts
  13. 19
      yudao-ui/yudao-ui-admin-vue3/src/views/book/classification/ClassificationForm.vue
  14. 5
      yudao-ui/yudao-ui-admin-vue3/src/views/book/classification/index.vue

28
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/classification/ClassificationController.java

@ -1,6 +1,7 @@
package cn.iocoder.yudao.module.book.controller.admin.classification;
import cn.iocoder.yudao.framework.common.enums.CommonStatusEnum;
import org.apache.commons.collections4.comparators.ComparatorChain;
import org.checkerframework.checker.units.qual.C;
import org.springframework.web.bind.annotation.*;
import javax.annotation.Resource;
@ -10,6 +11,7 @@ import io.swagger.v3.oas.annotations.tags.Tag;
import io.swagger.v3.oas.annotations.Parameter;
import io.swagger.v3.oas.annotations.Operation;
import javax.annotation.security.PermitAll;
import javax.validation.constraints.*;
import javax.validation.*;
import javax.servlet.http.*;
@ -27,6 +29,7 @@ import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.*;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
import cn.iocoder.yudao.module.book.controller.admin.classification.vo.*;
import cn.iocoder.yudao.module.book.dal.dataobject.classification.ClassificationDO;
@ -92,19 +95,42 @@ public class ClassificationController {
return success(BeanUtils.toBean(pageResult, ClassificationRespVO.class));
}
@GetMapping("/one-page")
@Operation(summary = "获得记账分类分页")
@PreAuthorize("@ss.hasPermission('book:classification:query')")
public CommonResult<PageResult<ClassificationRespVO>> getClassificationOnePage(@Valid ClassificationPageReqVO pageReqVO) {
List<ClassificationDO> list = classificationService.selectList(pageReqVO);
pageReqVO.setLevel(1);
PageResult<ClassificationDO> pageResult = classificationService.getClassificationPage(pageReqVO);
PageResult<ClassificationRespVO> pageResult1 = BeanUtils.toBean(pageResult, ClassificationRespVO.class);
List<ClassificationRespVO> list1 = pageResult1.getList();
for (ClassificationRespVO po : list1) {
ArrayList<ClassificationDO> arrayList = new ArrayList<>();
for (ClassificationDO aDo : list) {
if(po.getId()==aDo.getParentId()){
arrayList.add(aDo);
}
}
po.setChildren(arrayList);
}
return success(pageResult1);
}
@GetMapping({"/list-all-simple", "simple-list"})
@Operation(summary = "获取菜单精简信息列表",
description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。在多租户的场景下,会只返回租户所在套餐有的菜单")
public CommonResult<List<ClassificationDO>> getSimpleMenuList(ClassificationPageReqVO pageReqVO) {
List<ClassificationDO> list = classificationService.selectList(pageReqVO);
list.sort(Comparator.comparing(ClassificationDO::getSn));
list.sort(Comparator.comparing(ClassificationDO::getSn,Comparator.nullsLast(Comparator.naturalOrder())));
return success(list);
}
@GetMapping({"/oneTwoLevelList"})
@Operation(summary = "获取菜单精简信息列表",
description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。在多租户的场景下,会只返回租户所在套餐有的菜单")
@PermitAll
public CommonResult<HashMap<String, List<ClassificationDO>>> oneTwoLevelList(ClassificationPageReqVO pageReqVO) {
System.out.println("用户名:"+getLoginUserId());
List<ClassificationDO> list = classificationService.selectList(pageReqVO);
// list.sort(Comparator.comparing(ClassificationDO::getSn));
List<ClassificationDO> list1 = list.stream().filter(item -> {

3
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/classification/vo/ClassificationRespVO.java

@ -1,5 +1,6 @@
package cn.iocoder.yudao.module.book.controller.admin.classification.vo;
import cn.iocoder.yudao.module.book.dal.dataobject.classification.ClassificationDO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.*;
import java.util.*;
@ -40,4 +41,6 @@ public class ClassificationRespVO {
@ExcelProperty("父级节点")
private Integer parentId;
private List<ClassificationDO> children;
}

6
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/admin/inout/vo/InoutPageReqVO.java

@ -25,6 +25,10 @@ public class InoutPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDate[] useDate;
private String useDateStart;
private String useDateEnd;
@Schema(description = "金额")
private Long money;
@ -35,4 +39,6 @@ public class InoutPageReqVO extends PageParam {
@DateTimeFormat(pattern = FORMAT_YEAR_MONTH_DAY_HOUR_MINUTE_SECOND)
private LocalDateTime[] createTime;
private String type;
}

71
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/app/classification/AppClassificationController.java

@ -0,0 +1,71 @@
package cn.iocoder.yudao.module.book.controller.app.classification;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.book.controller.admin.classification.vo.ClassificationPageReqVO;
import cn.iocoder.yudao.module.book.controller.admin.classification.vo.ClassificationRespVO;
import cn.iocoder.yudao.module.book.controller.admin.classification.vo.ClassificationSaveReqVO;
import cn.iocoder.yudao.module.book.dal.dataobject.classification.ClassificationDO;
import cn.iocoder.yudao.module.book.service.classification.ClassificationService;
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.*;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.Comparator;
import java.util.HashMap;
import java.util.List;
import java.util.stream.Collectors;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 记账分类")
@RestController
@RequestMapping("/book/classification")
@Validated
public class AppClassificationController {
@Resource
private ClassificationService classificationService;
@GetMapping({"/oneTwoLevelList"})
@Operation(summary = "获取菜单精简信息列表",
description = "只包含被开启的菜单,用于【角色分配菜单】功能的选项。在多租户的场景下,会只返回租户所在套餐有的菜单")
@PermitAll
public CommonResult<HashMap<String, List<ClassificationDO>>> oneTwoLevelList(ClassificationPageReqVO pageReqVO) {
System.out.println("用户名:"+getLoginUserId());
List<ClassificationDO> list = classificationService.selectList(pageReqVO);
list.sort(Comparator.comparing(ClassificationDO::getSn,Comparator.nullsLast(Comparator.naturalOrder())));
List<ClassificationDO> list1 = list.stream().filter(item -> {
return "out".equals(item.getType());
}).collect(Collectors.toList());
List<ClassificationDO> list11 = list1.stream().filter(item -> {
return item.getLevel()!=null&& item.getLevel()== 1;
}).collect(Collectors.toList());
List<ClassificationDO> list12 = list1.stream().filter(item -> {
return item.getLevel()!=null&& item.getLevel()== 2;
}).collect(Collectors.toList());
List<ClassificationDO> list2 = list.stream().filter(item -> {
return "in".equals(item.getType());
}).collect(Collectors.toList());
HashMap<String, List<ClassificationDO>> map = new HashMap<>();
map.put("outOne",list11);
map.put("outTwo",list12);
map.put("inOne",list2);
return success(map);
}
}

116
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/controller/app/inout/AppInoutController.java

@ -0,0 +1,116 @@
package cn.iocoder.yudao.module.book.controller.app.inout;
import cn.iocoder.yudao.framework.apilog.core.annotation.ApiAccessLog;
import cn.iocoder.yudao.framework.common.pojo.CommonResult;
import cn.iocoder.yudao.framework.common.pojo.PageParam;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.framework.common.util.object.BeanUtils;
import cn.iocoder.yudao.framework.excel.core.util.ExcelUtils;
import cn.iocoder.yudao.module.book.controller.admin.inout.vo.InoutPageReqVO;
import cn.iocoder.yudao.module.book.controller.admin.inout.vo.InoutRespVO;
import cn.iocoder.yudao.module.book.controller.admin.inout.vo.InoutSaveReqVO;
import cn.iocoder.yudao.module.book.dal.dataobject.inout.InoutDO;
import cn.iocoder.yudao.module.book.service.inout.InoutService;
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.*;
import javax.annotation.Resource;
import javax.annotation.security.PermitAll;
import javax.servlet.http.HttpServletResponse;
import javax.validation.Valid;
import java.io.IOException;
import java.util.List;
import static cn.iocoder.yudao.framework.apilog.core.enums.OperateTypeEnum.EXPORT;
import static cn.iocoder.yudao.framework.common.pojo.CommonResult.success;
import static cn.iocoder.yudao.framework.security.core.util.SecurityFrameworkUtils.getLoginUserId;
@Tag(name = "管理后台 - 个人记账")
@RestController
@RequestMapping("/book/inout")
@Validated
public class AppInoutController {
@Resource
private InoutService inoutService;
@PostMapping("/create")
@Operation(summary = "创建个人记账")
@PermitAll
public CommonResult<Integer> createInout(@Valid @RequestBody InoutSaveReqVO createReqVO) {
return success(inoutService.createInout(createReqVO));
}
@PutMapping("/update")
@Operation(summary = "更新个人记账")
@PreAuthorize("@ss.hasPermission('book:inout:update')")
public CommonResult<Boolean> updateInout(@Valid @RequestBody InoutSaveReqVO updateReqVO) {
inoutService.updateInout(updateReqVO);
return success(true);
}
@DeleteMapping("/delete")
@Operation(summary = "删除个人记账")
@Parameter(name = "id", description = "编号", required = true)
@PreAuthorize("@ss.hasPermission('book:inout:delete')")
public CommonResult<Boolean> deleteInout(@RequestParam("id") Integer id) {
inoutService.deleteInout(id);
return success(true);
}
@GetMapping("/get")
@Operation(summary = "获得个人记账")
@Parameter(name = "id", description = "编号", required = true, example = "1024")
@PreAuthorize("@ss.hasPermission('book:inout:query')")
public CommonResult<InoutRespVO> getInout(@RequestParam("id") Integer id) {
InoutDO inout = inoutService.getInout(id);
return success(BeanUtils.toBean(inout, InoutRespVO.class));
}
@GetMapping("/page")
@Operation(summary = "获得个人记账分页")
@PreAuthorize("@ss.hasPermission('book:inout:query')")
public CommonResult<PageResult<InoutRespVO>> getInoutPage(@Valid InoutPageReqVO pageReqVO) {
PageResult<InoutDO> pageResult = inoutService.getInoutPage(pageReqVO);
return success(BeanUtils.toBean(pageResult, InoutRespVO.class));
}
@GetMapping("/myList")
@Operation(summary = "获得个人记账分页")
@PermitAll
public CommonResult<PageResult<InoutRespVO>> myList(@Valid InoutPageReqVO pageReqVO) {
Long loginUserId = getLoginUserId();
pageReqVO.setUserId(loginUserId);
PageResult<InoutRespVO> pageResult = inoutService.myList(pageReqVO);
return success(pageResult);
}
@GetMapping("/export-excel")
@Operation(summary = "导出个人记账 Excel")
@PreAuthorize("@ss.hasPermission('book:inout:export')")
@ApiAccessLog(operateType = EXPORT)
public void exportInoutExcel(@Valid InoutPageReqVO pageReqVO,
HttpServletResponse response) throws IOException {
pageReqVO.setPageSize(PageParam.PAGE_SIZE_NONE);
List<InoutDO> list = inoutService.getInoutPage(pageReqVO).getList();
// 导出 Excel
ExcelUtils.write(response, "个人记账.xls", "数据", InoutRespVO.class,
BeanUtils.toBean(list, InoutRespVO.class));
}
//统计个人某段时间的支出或收入
@GetMapping("/myList-tol")
@Operation(summary = "获得个人记账分页")
@PermitAll
public CommonResult<Double> myListTol(@Valid InoutPageReqVO pageReqVO) {
Long loginUserId = getLoginUserId();
pageReqVO.setUserId(loginUserId);
Double tol= inoutService.myListTol(pageReqVO);
return success(tol);
}
}

1
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/dal/mysql/inout/InoutMapper.java

@ -36,4 +36,5 @@ public interface InoutMapper extends BaseMapperX<InoutDO> {
IPage<InoutRespVO> myList(IPage<InoutRespVO> page,@Param("query") InoutPageReqVO pageReqVO);
Double myListTol(@Param("query") InoutPageReqVO pageReqVO);
}

2
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/service/inout/InoutService.java

@ -60,4 +60,6 @@ public interface InoutService {
PageResult<InoutDO> getInoutPage(InoutPageReqVO pageReqVO);
PageResult<InoutRespVO> myList(InoutPageReqVO pageReqVO);
Double myListTol(InoutPageReqVO pageReqVO);
}

5
yudao-module-book/src/main/java/cn/iocoder/yudao/module/book/service/inout/InoutServiceImpl.java

@ -92,4 +92,9 @@ public class InoutServiceImpl implements InoutService {
return new PageResult<>(pageResult.getRecords(), pageResult.getTotal());
}
@Override
public Double myListTol(InoutPageReqVO pageReqVO) {
return inoutMapper.myListTol(pageReqVO);
}
}

36
yudao-module-book/src/main/resources/mapper/inout/InoutMapper.xml

@ -18,8 +18,44 @@
INNER JOIN book_classification c ON i.class_id = c.id
WHERE
i.deleted = 0
<if test="query!=null">
<if test="null!=query.userId">
and i.creator = #{query.userId}
</if>
<if test="null!=query.type">
and c.type = #{query.type}
</if>
</if>
ORDER BY
i.use_date DESC,
i.create_time desc
</select>
<select id="myListTol" resultType="java.lang.Double">
SELECT
IFNULL(SUM( i.money ) ,0)
FROM
book_inout i
INNER JOIN book_classification c ON i.class_id = c.id
WHERE
i.deleted = 0
<if test="query!=null">
<if test="null!=query.userId">
and i.creator = #{query.userId}
</if>
<if test="null!=query.type">
and c.type = #{query.type}
</if>
<if test="null!=query.useDateStart">
and DATE_FORMAT(i.use_date, '%Y-%m')>=#{useDateStart}
</if>
<if test="null!=query.useDateEnd">
and DATE_FORMAT(i.use_date, '%Y-%m')&lt;=#{useDateEnd}
</if>
</if>
ORDER BY
i.use_date DESC,
i.create_time DESC
</select>
</mapper>

10
yudao-server/pom.xml

@ -37,11 +37,11 @@
<version>${revision}</version>
</dependency>
<!-- 会员中心。默认注释,保证编译速度 -->
<!-- <dependency>-->
<!-- <groupId>cn.iocoder.boot</groupId>-->
<!-- <artifactId>yudao-module-member</artifactId>-->
<!-- <version>${revision}</version>-->
<!-- </dependency>-->
<dependency>
<groupId>cn.iocoder.boot</groupId>
<artifactId>yudao-module-member</artifactId>
<version>${revision}</version>
</dependency>
<!-- 数据报表。默认注释,保证编译速度 -->
<!-- <dependency>-->

6
yudao-server/src/main/resources/application-local.yaml

@ -210,10 +210,12 @@ wx:
# secret: 333ae72f41552af1e998fe1f54e1584a
# appid: wx63c280fe3248a3e7 # wenhualian的接口测试号
# secret: 6f270509224a7ae1296bbf1c8cb97aed
appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
secret: 4a1a04e07f6a4a0751b39c3064a92c8b
# appid: wxc4598c446f8a9cb3 # 测试号(Kongdy 提供的)
# secret: 4a1a04e07f6a4a0751b39c3064a92c8b
# appid: wx66186af0759f47c9 # 测试号(puhui 提供的)
# secret: 3218bcbd112cbc614c7264ceb20144ac
appid: wx8002cc7a350eb380 # 我的测试号
secret: d60cfbb7b934e494f10ba7fe42beb0f6
config-storage:
type: RedisTemplate # 采用 RedisTemplate 操作 Redis,会自动从 Spring 中获取
key-prefix: wa # Redis Key 的前缀

2
yudao-ui/yudao-ui-admin-vue3/src/api/book/classification/index.ts

@ -14,7 +14,7 @@ export interface Classification {
export const ClassificationApi = {
// 查询记账分类分页
getClassificationPage: async (params: any) => {
return await request.get({ url: `/book/classification/page`, params })
return await request.get({ url: `/book/classification/one-page`, params })
},
// 查询记账分类分页
getSimpleMenusList: async (params: any) => {

19
yudao-ui/yudao-ui-admin-vue3/src/views/book/classification/ClassificationForm.vue

@ -15,14 +15,12 @@
:props="defaultProps"
check-strictly
node-key="id"
@change="changeOne"
/>
</el-form-item>
<el-form-item label="分类名称" prop="classificationName">
<el-input v-model="formData.classificationName" placeholder="请输入分类名称" />
</el-form-item>
<el-form-item label="层级" prop="level">
<el-input v-model="formData.level" placeholder="请输入层级" />
</el-form-item>
<el-form-item label="排序号" prop="sn">
<el-input v-model="formData.sn" placeholder="请输入排序号" />
</el-form-item>
@ -111,11 +109,12 @@ const submitForm = async () => {
/** 获取下拉框[上级菜单]的数据 */
const menuTree = ref<Tree[]>([]) //
let allMenuList=[]
const getTree = async () => {
menuTree.value = []
const res = await ClassificationApi.getSimpleMenusList()
allMenuList = await ClassificationApi.getSimpleMenusList({})
let menu: Tree = { id: 0, name: '主分类', children: [] }
const ress = res.map(node => {
const ress = allMenuList.map(node => {
node.name = node.classificationName;
return node;
});
@ -134,4 +133,14 @@ const resetForm = () => {
}
formRef.value?.resetFields()
}
const changeOne=(value)=>{
console.log("value:",value)
const selectedObject = allMenuList.find(item => item.id === value)
console.log('选中的完整对象:', selectedObject)
formData.value.level=selectedObject!=null?selectedObject.level+1:1
if(selectedObject!=null){
formData.value.type=selectedObject.type
}
console.log('选中的完整对象2:', formData)
}
</script>

5
yudao-ui/yudao-ui-admin-vue3/src/views/book/classification/index.vue

@ -93,6 +93,7 @@
<!-- 列表 -->
<ContentWrap>
<el-table
index
row-key="id"
v-loading="loading"
:data="list"
@ -101,10 +102,8 @@
@selection-change="handleRowCheckboxChange"
>
<el-table-column type="selection" width="55" />
<el-table-column label="主键" align="center" prop="id" />
<el-table-column type="index" label="序号" width="60"/>
<el-table-column label="分类名称" align="center" prop="classificationName" />
<el-table-column label="层级" align="center" prop="level" />
<el-table-column label="排序号" align="center" prop="sn" />
<el-table-column
label="创建时间"
align="center"

Loading…
Cancel
Save