From 9a1410301e75363f45bcb0ae704528d639c566ea Mon Sep 17 00:00:00 2001
From: zss <zss@example.com>
Date: 星期四, 07 五月 2026 17:15:52 +0800
Subject: [PATCH] feat(account): 添加总账科目模块基础功能

---
 src/main/java/com/ruoyi/account/service/AccountSubjectService.java          |   24 +++
 src/main/java/com/ruoyi/account/pojo/AccountSubject.java                    |  111 +++++++++++++++
 src/main/java/com/ruoyi/account/bean/dto/AccountSubjectDto.java             |   10 +
 src/main/java/com/ruoyi/account/bean/dto/AccountSubjectImportDto.java       |   36 +++++
 src/main/resources/mapper/account/AccountSubjectMapper.xml                  |   21 +++
 src/main/java/com/ruoyi/account/service/impl/AccountSubjectServiceImpl.java |   77 +++++++++++
 src/main/java/com/ruoyi/account/controller/AccountSubjectController.java    |   70 ++++++++++
 src/main/java/com/ruoyi/account/bean/vo/AccountSubjectVo.java               |    8 +
 src/main/java/com/ruoyi/account/mapper/AccountSubjectMapper.java            |   18 ++
 9 files changed, 375 insertions(+), 0 deletions(-)

diff --git a/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectDto.java b/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectDto.java
new file mode 100644
index 0000000..e26844d
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectDto.java
@@ -0,0 +1,10 @@
+package com.ruoyi.account.bean.dto;
+
+import com.ruoyi.account.pojo.AccountSubject;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+@EqualsAndHashCode(callSuper = true)
+@Data
+public class AccountSubjectDto extends AccountSubject {
+}
diff --git a/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectImportDto.java b/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectImportDto.java
new file mode 100644
index 0000000..28c8ab9
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/bean/dto/AccountSubjectImportDto.java
@@ -0,0 +1,36 @@
+package com.ruoyi.account.bean.dto;
+
+import com.ruoyi.framework.aspectj.lang.annotation.Excel;
+import io.swagger.v3.oas.annotations.media.Schema;
+import lombok.Data;
+
+@Data
+public class AccountSubjectImportDto {
+
+    @Schema(description = "绉戠洰缂栫爜")
+    @Excel(name = "绉戠洰缂栫爜")
+    private String subjectCode;
+
+    @Schema(description = "绉戠洰鍚嶇О")
+    @Excel(name = "绉戠洰鍚嶇О")
+    private String subjectName;
+
+    @Schema(description = "绉戠洰绫诲瀷")
+    @Excel(name = "绉戠洰绫诲瀷")
+    private String subjectType;
+
+    @Schema(description = "浣欓鏂瑰悜")
+    @Excel(name = "浣欓鏂瑰悜")
+    private String balanceDirection;
+
+    /**
+     * 鐘舵�� 0鍚敤 1绂佺敤
+     */
+    @Schema(description = "鐘舵��")
+    @Excel(name = "鐘舵��",readConverterExp = "0=鍚敤,1=绂佺敤")
+    private Integer status;
+
+    @Schema(description = "澶囨敞")
+    @Excel(name = "澶囨敞")
+    private String remark;
+}
diff --git a/src/main/java/com/ruoyi/account/bean/vo/AccountSubjectVo.java b/src/main/java/com/ruoyi/account/bean/vo/AccountSubjectVo.java
new file mode 100644
index 0000000..3154d1c
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/bean/vo/AccountSubjectVo.java
@@ -0,0 +1,8 @@
+package com.ruoyi.account.bean.vo;
+
+import com.ruoyi.account.pojo.AccountSubject;
+import lombok.Data;
+
+@Data
+public class AccountSubjectVo extends AccountSubject {
+}
diff --git a/src/main/java/com/ruoyi/account/controller/AccountSubjectController.java b/src/main/java/com/ruoyi/account/controller/AccountSubjectController.java
new file mode 100644
index 0000000..acf373a
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/controller/AccountSubjectController.java
@@ -0,0 +1,70 @@
+package com.ruoyi.account.controller;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.bean.dto.AccountSubjectDto;
+import com.ruoyi.account.bean.vo.AccountSubjectVo;
+import com.ruoyi.account.service.AccountSubjectService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.R;
+import io.swagger.v3.oas.annotations.Operation;
+import io.swagger.v3.oas.annotations.tags.Tag;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Arrays;
+
+/**
+ * <p>
+ * 鎬昏处绉戠洰琛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 04:45:30
+ */
+@RestController
+@RequestMapping("/accountSubject")
+@RequiredArgsConstructor
+@Tag(name = "鎬昏处绉戠洰")
+public class AccountSubjectController {
+    private final AccountSubjectService accountSubjectService;
+
+    @GetMapping("list")
+    @Log(title = "鎬昏处绉戠洰鏁版嵁闆嗗悎", businessType = BusinessType.OTHER)
+    @Operation(summary = "鎬昏处绉戠洰鍒嗛〉鏌ヨ")
+    public R<IPage<AccountSubjectVo>> AccountSubjectDtoList(Page<AccountSubjectDto> page, AccountSubjectDto accountSubjectDto) {
+        IPage<AccountSubjectVo> paramList = accountSubjectService.baseList(page, accountSubjectDto);
+        return R.ok(paramList);
+    }
+
+    @PostMapping("/add")
+    @Log(title = "鏂板鎬昏处绉戠洰", businessType = BusinessType.INSERT)
+    @Operation(summary = "鏂板鎬昏处绉戠洰")
+    public R AccountSubjectDtoAdd(@RequestBody AccountSubjectDto accountSubjectDto) {
+        return R.ok(accountSubjectService.save(accountSubjectDto));
+    }
+
+    @PutMapping("/edit")
+    @Log(title = "淇敼鎬昏处绉戠洰", businessType = BusinessType.UPDATE)
+    @Operation(summary = "淇敼鎬昏处绉戠洰")
+    public R AccountSubjectDtoEdit(@RequestBody AccountSubjectDto accountSubjectDto) {
+        return R.ok(accountSubjectService.updateById(accountSubjectDto));
+    }
+
+    @DeleteMapping("/remove/{ids}")
+    @Log(title = "鍒犻櫎鎬昏处绉戠洰", businessType = BusinessType.DELETE)
+    @Operation(summary = "鍒犻櫎鎬昏处绉戠洰")
+    public R AccountSubjectDtooRemove(@PathVariable Long[] ids) {
+        return R.ok(accountSubjectService.removeBatchByIds(Arrays.asList(ids)));
+    }
+
+    @PostMapping("/export")
+    @Operation(summary = "瀵煎嚭鎬昏处绉戠洰鏂囦欢")
+    @Log(title = "瀵煎嚭鎬昏处绉戠洰鏂囦欢", businessType = BusinessType.EXPORT)
+    public void exportAccountSubject(HttpServletResponse response) {
+        accountSubjectService.exportAccountSubject(response);
+    }
+
+}
diff --git a/src/main/java/com/ruoyi/account/mapper/AccountSubjectMapper.java b/src/main/java/com/ruoyi/account/mapper/AccountSubjectMapper.java
new file mode 100644
index 0000000..1fface5
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/mapper/AccountSubjectMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.account.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.ruoyi.account.pojo.AccountSubject;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 鎬昏处绉戠洰琛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 04:45:30
+ */
+@Mapper
+public interface AccountSubjectMapper extends BaseMapper<AccountSubject> {
+
+}
diff --git a/src/main/java/com/ruoyi/account/pojo/AccountSubject.java b/src/main/java/com/ruoyi/account/pojo/AccountSubject.java
new file mode 100644
index 0000000..3516f8c
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/pojo/AccountSubject.java
@@ -0,0 +1,111 @@
+package com.ruoyi.account.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+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 io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+
+import java.io.Serializable;
+import java.time.LocalDateTime;
+
+/**
+ * <p>
+ * 鎬昏处绉戠洰琛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 04:45:30
+ */
+@Getter
+@Setter
+@ToString
+@TableName("account_subject")
+@ApiModel(value = "AccountSubject瀵硅薄", description = "鎬昏处绉戠洰琛�")
+public class AccountSubject implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+     * 涓婚敭ID
+     */
+    @ApiModelProperty("涓婚敭ID")
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    /**
+     * 绉戠洰缂栫爜(鍞竴鏍囪瘑)
+     */
+    @ApiModelProperty("绉戠洰缂栫爜(鍞竴鏍囪瘑)")
+    private String subjectCode;
+
+    /**
+     * 绉戠洰鍚嶇О
+     */
+    @ApiModelProperty("绉戠洰鍚嶇О")
+    private String subjectName;
+
+    /**
+     * 绉戠洰绫诲瀷(瀛楀吀閰嶇疆)
+     */
+    @ApiModelProperty("绉戠洰绫诲瀷(瀛楀吀閰嶇疆)")
+    private String subjectType;
+
+    /**
+     * 浣欓鏂瑰悜
+     */
+    @ApiModelProperty("浣欓鏂瑰悜")
+    private String balanceDirection;
+
+    /**
+     * 鐘舵�� 0鍚敤 1绂佺敤
+     */
+    @ApiModelProperty("鐘舵�� 0鍚敤 1绂佺敤")
+    private Integer status;
+
+    /**
+     * 澶囨敞
+     */
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    /**
+     * 鍒涘缓浜�
+     */
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /**
+     * 鍒涘缓鏃堕棿
+     */
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    private LocalDateTime createTime;
+
+    /**
+     * 淇敼浜�
+     */
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private String updateUser;
+
+    /**
+     * 淇敼鏃堕棿
+     */
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    /**
+     * 閮ㄩ棬ID
+     */
+    @ApiModelProperty("閮ㄩ棬ID")
+    @TableField(fill = FieldFill.INSERT)
+    private Long deptId;
+}
diff --git a/src/main/java/com/ruoyi/account/service/AccountSubjectService.java b/src/main/java/com/ruoyi/account/service/AccountSubjectService.java
new file mode 100644
index 0000000..a7dd670
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/service/AccountSubjectService.java
@@ -0,0 +1,24 @@
+package com.ruoyi.account.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.account.bean.dto.AccountSubjectDto;
+import com.ruoyi.account.bean.vo.AccountSubjectVo;
+import com.ruoyi.account.pojo.AccountSubject;
+import com.baomidou.mybatisplus.extension.service.IService;
+import jakarta.servlet.http.HttpServletResponse;
+
+/**
+ * <p>
+ * 鎬昏处绉戠洰琛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 04:45:30
+ */
+public interface AccountSubjectService extends IService<AccountSubject> {
+
+    IPage<AccountSubjectVo> baseList(Page<AccountSubjectDto> page, AccountSubjectDto accountSubjectDto);
+
+    void exportAccountSubject(HttpServletResponse response);
+}
diff --git a/src/main/java/com/ruoyi/account/service/impl/AccountSubjectServiceImpl.java b/src/main/java/com/ruoyi/account/service/impl/AccountSubjectServiceImpl.java
new file mode 100644
index 0000000..152966a
--- /dev/null
+++ b/src/main/java/com/ruoyi/account/service/impl/AccountSubjectServiceImpl.java
@@ -0,0 +1,77 @@
+package com.ruoyi.account.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.account.bean.dto.AccountSubjectDto;
+import com.ruoyi.account.bean.dto.AccountSubjectImportDto;
+import com.ruoyi.account.bean.vo.AccountSubjectVo;
+import com.ruoyi.account.mapper.AccountSubjectMapper;
+import com.ruoyi.account.pojo.AccountSubject;
+import com.ruoyi.account.service.AccountSubjectService;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.common.utils.poi.ExcelUtil;
+import jakarta.servlet.http.HttpServletResponse;
+import lombok.RequiredArgsConstructor;
+import org.springframework.beans.BeanUtils;
+import org.springframework.stereotype.Service;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 鎬昏处绉戠洰琛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-05-07 04:45:30
+ */
+@Service
+@RequiredArgsConstructor
+public class AccountSubjectServiceImpl extends ServiceImpl<AccountSubjectMapper, AccountSubject> implements AccountSubjectService {
+
+    private final AccountSubjectMapper accountSubjectMapper;
+
+    @Override
+    public IPage<AccountSubjectVo> baseList(Page<AccountSubjectDto> page, AccountSubjectDto accountSubjectDto) {
+        LambdaQueryWrapper<AccountSubject> queryWrapper = new LambdaQueryWrapper<>();
+        if (accountSubjectDto != null && StringUtils.isNotEmpty(accountSubjectDto.getSubjectCode())) {
+            queryWrapper.like(AccountSubject::getSubjectCode, accountSubjectDto.getSubjectCode());
+        }
+        if (accountSubjectDto != null && StringUtils.isNotEmpty(accountSubjectDto.getSubjectName())) {
+            queryWrapper.like(AccountSubject::getSubjectName, accountSubjectDto.getSubjectName());
+        }
+        if (accountSubjectDto != null && StringUtils.isNotEmpty(accountSubjectDto.getSubjectType())) {
+            queryWrapper.eq(AccountSubject::getSubjectType, accountSubjectDto.getSubjectType());
+        }
+        queryWrapper.orderByDesc(AccountSubject::getId);
+
+        Page<AccountSubject> entityPage = new Page<>(page.getCurrent(), page.getSize(), page.getTotal());
+        Page<AccountSubject> paramPage = page(entityPage, queryWrapper);
+
+        Page<AccountSubjectVo> resultPage = new Page<>(paramPage.getCurrent(), paramPage.getSize(), paramPage.getTotal());
+        List<AccountSubjectVo> records = new ArrayList<>(paramPage.getRecords().size());
+        for (AccountSubject item : paramPage.getRecords()) {
+            AccountSubjectVo vo = new AccountSubjectVo();
+            BeanUtils.copyProperties(item, vo);
+            records.add(vo);
+        }
+        resultPage.setRecords(records);
+        return resultPage;
+    }
+
+    @Override
+    public void exportAccountSubject(HttpServletResponse response) {
+        List<AccountSubject> list = accountSubjectMapper.selectList(null);
+        List<AccountSubjectImportDto> importDtos = list.stream().map(accountSubject -> {
+            AccountSubjectImportDto accountSubjectImportDto = new AccountSubjectImportDto();
+            BeanUtils.copyProperties(accountSubject, accountSubjectImportDto);
+            return accountSubjectImportDto;
+        }).collect(Collectors.toList());
+        ExcelUtil<AccountSubjectImportDto> util = new ExcelUtil<>(AccountSubjectImportDto.class);
+        util.exportExcel(response, importDtos , "鎬昏处绉戠洰");
+    }
+}
diff --git a/src/main/resources/mapper/account/AccountSubjectMapper.xml b/src/main/resources/mapper/account/AccountSubjectMapper.xml
new file mode 100644
index 0000000..179d858
--- /dev/null
+++ b/src/main/resources/mapper/account/AccountSubjectMapper.xml
@@ -0,0 +1,21 @@
+<?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.ruoyi.account.mapper.AccountSubjectMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.account.pojo.AccountSubject">
+        <id column="id" property="id" />
+        <result column="subject_code" property="subjectCode" />
+        <result column="subject_name" property="subjectName" />
+        <result column="subject_type" property="subjectType" />
+        <result column="balance_direction" property="balanceDirection" />
+        <result column="status" property="status" />
+        <result column="remark" property="remark" />
+        <result column="create_user" property="createUser" />
+        <result column="create_time" property="createTime" />
+        <result column="update_user" property="updateUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="dept_id" property="deptId" />
+    </resultMap>
+
+</mapper>

--
Gitblit v1.9.3