浏览代码

招生统计

大数据与最优化研究所 1 年之前
父节点
当前提交
2a2e125fe3
共有 28 个文件被更改,包括 1113 次插入33 次删除
  1. 25 3
      src/main/java/com/xjrsoft/module/asset/controller/WfAssetManageController.java
  2. 49 0
      src/main/java/com/xjrsoft/module/asset/dto/WfAssetManageConditionalSearchQueryDto.java
  3. 26 0
      src/main/java/com/xjrsoft/module/asset/dto/WfAssetManageSelectRecordQueryDto.java
  4. 10 0
      src/main/java/com/xjrsoft/module/asset/mapper/WfAssetManageMapper.java
  5. 8 0
      src/main/java/com/xjrsoft/module/asset/service/IWfAssetManageService.java
  6. 43 2
      src/main/java/com/xjrsoft/module/asset/service/impl/WfAssetManageServiceImpl.java
  7. 7 1
      src/main/java/com/xjrsoft/module/asset/vo/WfAssetManagePageVo.java
  8. 70 0
      src/main/java/com/xjrsoft/module/asset/vo/WfAssetManageQueryVo.java
  9. 125 0
      src/main/java/com/xjrsoft/module/student/controller/BaseMajorCategorController.java
  10. 3 2
      src/main/java/com/xjrsoft/module/student/controller/PbCseFeeobjupdateController.java
  11. 48 0
      src/main/java/com/xjrsoft/module/student/dto/AddBaseMajorCategorDto.java
  12. 26 0
      src/main/java/com/xjrsoft/module/student/dto/BaseMajorCategorPageDto.java
  13. 32 0
      src/main/java/com/xjrsoft/module/student/dto/UpdateBaseMajorCategorDto.java
  14. 98 0
      src/main/java/com/xjrsoft/module/student/entity/BaseMajorCategor.java
  15. 0 1
      src/main/java/com/xjrsoft/module/student/entity/PbCseFeeobjupdate.java
  16. 17 0
      src/main/java/com/xjrsoft/module/student/mapper/BaseMajorCategorMapper.java
  17. 17 0
      src/main/java/com/xjrsoft/module/student/service/IBaseMajorCategorService.java
  18. 2 1
      src/main/java/com/xjrsoft/module/student/service/IPbCseFeeobjupdateService.java
  19. 25 0
      src/main/java/com/xjrsoft/module/student/service/impl/BaseMajorCategorServiceImpl.java
  20. 130 21
      src/main/java/com/xjrsoft/module/student/service/impl/PbCseFeeobjupdateServiceImpl.java
  21. 104 0
      src/main/java/com/xjrsoft/module/student/vo/BaseMajorCategorPageVo.java
  22. 49 0
      src/main/java/com/xjrsoft/module/student/vo/BaseMajorCategorVo.java
  23. 29 0
      src/main/java/com/xjrsoft/module/student/vo/ChargingSituationVo.java
  24. 15 1
      src/main/java/com/xjrsoft/module/student/vo/EnrollmentStatisticsInfoVo.java
  25. 35 0
      src/main/java/com/xjrsoft/module/student/vo/ProfessionalHeadCount.java
  26. 27 0
      src/main/java/com/xjrsoft/module/textbook/dto/EnrollmentStatisticsInfoDto.java
  27. 62 1
      src/main/resources/mapper/asset/WfAssetManageMapper.xml
  28. 31 0
      src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

+ 25 - 3
src/main/java/com/xjrsoft/module/asset/controller/WfAssetManageController.java

@@ -2,6 +2,7 @@ package com.xjrsoft.module.asset.controller;
 
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import cn.hutool.core.bean.BeanUtil;
+import com.alibaba.excel.support.ExcelTypeEnum;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
@@ -10,9 +11,7 @@ import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.page.PageOutput;
 import com.xjrsoft.common.utils.TreeUtil;
 import com.xjrsoft.common.utils.VoToColumnUtil;
-import com.xjrsoft.module.asset.dto.AddWfAssetManageDto;
-import com.xjrsoft.module.asset.dto.UpdateWfAssetManageDto;
-import com.xjrsoft.module.asset.dto.WfAssetManagePageDto;
+import com.xjrsoft.module.asset.dto.*;
 import com.xjrsoft.module.asset.entity.WfAssetManage;
 import com.xjrsoft.module.asset.service.IWfAssetManageService;
 import com.xjrsoft.module.asset.vo.BaseOfficeBuildVo;
@@ -24,12 +23,15 @@ import com.xjrsoft.module.base.entity.BaseOfficeBuild;
 import com.xjrsoft.module.base.service.IBaseClassroomService;
 import com.xjrsoft.module.base.service.IBaseOfficeBuildService;
 import com.xjrsoft.module.system.entity.DictionaryDetail;
+import com.xjrsoft.module.textbook.dto.TextbookClaimExportQueryDto;
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import lombok.AllArgsConstructor;
+import org.springframework.http.ResponseEntity;
 import org.springframework.web.bind.annotation.*;
 
 import javax.validation.Valid;
+import java.io.ByteArrayOutputStream;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -200,4 +202,24 @@ public class WfAssetManageController {
 
     }
 
+//    @PostMapping("/select-record-query")
+//    @ApiOperation(value = "选中记录导出")
+//    public ResponseEntity<byte[]> assetManageSelectRecordQuery(@Valid @RequestBody WfAssetManageSelectRecordQueryDto dto) {
+    @GetMapping("/select-record-query")
+    @ApiOperation(value = "选中记录导出")
+    public ResponseEntity<byte[]> textbookClaimExportQuery(@Valid WfAssetManageSelectRecordQueryDto dto) {
+        ByteArrayOutputStream bot = wfAssetManageService.listWfAssetManageSelectRecordQuery(dto);
+        return RT.fileStream(bot.toByteArray(), "TextbookClaim" + ExcelTypeEnum.XLSX.getValue());
+    }
+
+//    @PostMapping("/conditional-search-query")
+//    @ApiOperation(value = "条件搜索导出")
+//    public ResponseEntity<byte[]> assetManageConditionalSearchQuery(@Valid @RequestBody WfAssetManageConditionalSearchQueryDto dto) {
+    @GetMapping("/conditional-search-query")
+    @ApiOperation(value = "条件搜索导出")
+    public ResponseEntity<byte[]> textbookClaimExportQuery(@Valid WfAssetManageConditionalSearchQueryDto dto) {
+        ByteArrayOutputStream bot = wfAssetManageService.listWfAssetManageConditionalSearchQuery(dto);
+        return RT.fileStream(bot.toByteArray(), "WfAssetManage" + ExcelTypeEnum.XLSX.getValue());
+    }
+
 }

+ 49 - 0
src/main/java/com/xjrsoft/module/asset/dto/WfAssetManageConditionalSearchQueryDto.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.asset.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+* @title: 资产管理分页查询入参
+* @Author dzx
+* @Date: 2024-03-28
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WfAssetManageConditionalSearchQueryDto {
+    /**
+     * 资产类型
+     */
+    @ApiModelProperty("资产类型")
+    private String assetType;
+    /**
+     * 资产类别
+     */
+    @ApiModelProperty("资产类别")
+    private String assetCategory;
+    /**
+     * 资产种类
+     */
+    @ApiModelProperty("资产种类")
+    private String assetSpecies;
+    /**
+     * 名称
+     */
+    @ApiModelProperty("名称")
+    private String name;
+    /**
+     * 所属部门[xjr_department]
+     */
+    @ApiModelProperty("所属部门[xjr_department]")
+    private Long deptId;
+    /**
+     * 使用人id[xjr_user]
+     */
+    @ApiModelProperty("使用人id[xjr_user]")
+    private Long userId;
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/asset/dto/WfAssetManageSelectRecordQueryDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.asset.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.util.List;
+
+
+/**
+* @title: 资产管理分页查询入参
+* @Author dzx
+* @Date: 2024-03-28
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class WfAssetManageSelectRecordQueryDto{
+    /**
+     * 资产id
+     */
+    @ApiModelProperty("资产id")
+    private List<Long> ids;
+
+}

+ 10 - 0
src/main/java/com/xjrsoft/module/asset/mapper/WfAssetManageMapper.java

@@ -3,11 +3,17 @@ package com.xjrsoft.module.asset.mapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.asset.dto.WfAssetManageConditionalSearchQueryDto;
 import com.xjrsoft.module.asset.dto.WfAssetManagePageDto;
+import com.xjrsoft.module.asset.dto.WfAssetManageSelectRecordQueryDto;
 import com.xjrsoft.module.asset.entity.WfAssetManage;
 import com.xjrsoft.module.asset.vo.WfAssetManagePageVo;
+import com.xjrsoft.module.asset.vo.WfAssetManageQueryVo;
 import org.apache.ibatis.annotations.Mapper;
 
+import java.io.ByteArrayOutputStream;
+import java.util.List;
+
 /**
 * @title: 资产管理
 * @Author dzx
@@ -18,4 +24,8 @@ import org.apache.ibatis.annotations.Mapper;
 public interface WfAssetManageMapper extends MPJBaseMapper<WfAssetManage> {
 
     IPage<WfAssetManagePageVo> getPage(IPage<WfAssetManagePageDto> page, WfAssetManagePageDto dto);
+
+    List<WfAssetManageQueryVo> listWfAssetManageSelectRecordQuery(WfAssetManageSelectRecordQueryDto dto);
+
+    List<WfAssetManageQueryVo> listWfAssetManageConditionalSearchQuery(WfAssetManageConditionalSearchQueryDto dto);
 }

+ 8 - 0
src/main/java/com/xjrsoft/module/asset/service/IWfAssetManageService.java

@@ -3,10 +3,14 @@ package com.xjrsoft.module.asset.service;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.IService;
 import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.asset.dto.WfAssetManageConditionalSearchQueryDto;
 import com.xjrsoft.module.asset.dto.WfAssetManagePageDto;
+import com.xjrsoft.module.asset.dto.WfAssetManageSelectRecordQueryDto;
 import com.xjrsoft.module.asset.entity.WfAssetManage;
 import com.xjrsoft.module.asset.vo.WfAssetManagePageVo;
 import lombok.Data;
+
+import java.io.ByteArrayOutputStream;
 import java.util.List;
 
 /**
@@ -18,4 +22,8 @@ import java.util.List;
 
 public interface IWfAssetManageService extends MPJBaseService<WfAssetManage> {
     IPage<WfAssetManagePageVo> getPage(WfAssetManagePageDto dto);
+
+    ByteArrayOutputStream listWfAssetManageSelectRecordQuery(WfAssetManageSelectRecordQueryDto dto);
+
+    ByteArrayOutputStream listWfAssetManageConditionalSearchQuery(WfAssetManageConditionalSearchQueryDto dto);
 }

+ 43 - 2
src/main/java/com/xjrsoft/module/asset/service/impl/WfAssetManageServiceImpl.java

@@ -1,5 +1,13 @@
 package com.xjrsoft.module.asset.service.impl;
 
+import com.alibaba.excel.EasyExcel;
+import com.alibaba.excel.ExcelWriter;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import com.alibaba.excel.write.metadata.WriteSheet;
+import com.alibaba.excel.write.metadata.WriteTable;
+import com.alibaba.excel.write.metadata.style.WriteCellStyle;
+import com.alibaba.excel.write.metadata.style.WriteFont;
+import com.alibaba.excel.write.style.HorizontalCellStyleStrategy;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
@@ -7,16 +15,29 @@ import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
 import com.xjrsoft.common.page.ConventPage;
 import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.common.utils.excel.ExcelFillCellMergePrevColUtil;
+import com.xjrsoft.common.utils.excel.ExcelMergeUtil;
+import com.xjrsoft.module.asset.dto.WfAssetManageConditionalSearchQueryDto;
 import com.xjrsoft.module.asset.dto.WfAssetManagePageDto;
+import com.xjrsoft.module.asset.dto.WfAssetManageSelectRecordQueryDto;
 import com.xjrsoft.module.asset.entity.WfAssetManage;
 import com.xjrsoft.module.asset.mapper.WfAssetManageMapper;
 import com.xjrsoft.module.asset.service.IWfAssetManageService;
 import com.xjrsoft.module.asset.vo.WfAssetManagePageVo;
+import com.xjrsoft.module.asset.vo.WfAssetManageQueryVo;
+import com.xjrsoft.module.textbook.vo.TextbookClaimExportQueryVo;
+import com.xjrsoft.module.textbook.vo.TextbookSubscriptionExportQueryVo;
+import com.xjrsoft.module.weekly.vo.WeeklyDutyScheduleListVo;
 import lombok.AllArgsConstructor;
+import org.apache.poi.ss.usermodel.BorderStyle;
+import org.apache.poi.ss.usermodel.HorizontalAlignment;
+import org.apache.poi.ss.usermodel.VerticalAlignment;
 import org.springframework.stereotype.Service;
 import org.springframework.transaction.annotation.Transactional;
-import java.util.List;
-import java.util.Objects;
+
+import java.io.ByteArrayOutputStream;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 
@@ -36,4 +57,24 @@ public class WfAssetManageServiceImpl extends MPJBaseServiceImpl<WfAssetManageMa
         IPage<WfAssetManagePageVo> page = wfAssetManageMapper.getPage(ConventPage.getPage(dto), dto);
         return page;
     }
+
+    @Override
+    public ByteArrayOutputStream listWfAssetManageSelectRecordQuery(WfAssetManageSelectRecordQueryDto dto) {
+        List<WfAssetManageQueryVo> result = wfAssetManageMapper.listWfAssetManageSelectRecordQuery(dto);
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, WfAssetManageQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(result);
+
+        return bot;
+    }
+
+    @Override
+    public ByteArrayOutputStream listWfAssetManageConditionalSearchQuery(WfAssetManageConditionalSearchQueryDto dto) {
+        List<WfAssetManageQueryVo> result = wfAssetManageMapper.listWfAssetManageConditionalSearchQuery(dto);
+
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, WfAssetManageQueryVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(result);
+
+        return bot;
+    }
 }

+ 7 - 1
src/main/java/com/xjrsoft/module/asset/vo/WfAssetManagePageVo.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.asset.vo;
 
+import com.baomidou.mybatisplus.annotation.TableId;
 import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
@@ -19,7 +20,12 @@ import java.util.Date;
 */
 @Data
 public class WfAssetManagePageVo {
-
+    /**
+     *
+     */
+    @ApiModelProperty("主键")
+    @TableId
+    private Long id;
     /**
     * 资产类型
     */

+ 70 - 0
src/main/java/com/xjrsoft/module/asset/vo/WfAssetManageQueryVo.java

@@ -0,0 +1,70 @@
+package com.xjrsoft.module.asset.vo;
+
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+* @title: 资产管理分页列表出参
+* @Author dzx
+* @Date: 2024-03-28
+* @Version 1.0
+*/
+@Data
+public class WfAssetManageQueryVo {
+
+    /**
+     * 资产类型
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("资产类型")
+    @ApiModelProperty("资产类型")
+    private String assetTypeCn;
+    /**
+     * 资产类别
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("资产类别")
+    @ApiModelProperty("资产类别")
+    private String assetCategoryCn;
+    /**
+     * 资产种类
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("资产种类")
+    @ApiModelProperty("资产种类")
+    private String assetSpeciesCn;
+    /**
+    * 名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("名称")
+    @ApiModelProperty("名称")
+    private String name;
+    /**
+     * 所属部门[xjr_department]
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("所属部门[xjr_department]")
+    @ApiModelProperty("所属部门[xjr_department]")
+    private String deptIdCn;
+    /**
+     * 使用人id[xjr_user]
+     */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("使用人id[xjr_user]")
+    @ApiModelProperty("使用人id[xjr_user]")
+    private String userIdCn;
+    /**
+    * 金额
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("金额")
+    @ApiModelProperty("金额")
+    private BigDecimal amount;
+
+}

+ 125 - 0
src/main/java/com/xjrsoft/module/student/controller/BaseMajorCategorController.java

@@ -0,0 +1,125 @@
+package com.xjrsoft.module.student.controller;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.xjrsoft.common.constant.GlobalConstant;
+import com.baomidou.mybatisplus.core.toolkit.StringPool;
+import com.xjrsoft.common.page.ConventPage;
+import com.xjrsoft.common.page.PageOutput;
+import com.xjrsoft.common.model.result.RT;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.student.dto.AddBaseMajorCategorDto;
+import com.xjrsoft.module.student.dto.UpdateBaseMajorCategorDto;
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.alibaba.excel.EasyExcel;
+import org.springframework.web.multipart.MultipartFile;
+import java.io.IOException;
+import com.alibaba.excel.support.ExcelTypeEnum;
+import org.springframework.http.ResponseEntity;
+import java.io.ByteArrayOutputStream;
+import java.util.ArrayList;
+
+import com.xjrsoft.module.student.dto.BaseMajorCategorPageDto;
+import com.xjrsoft.module.student.entity.BaseMajorCategor;
+import com.xjrsoft.module.student.service.IBaseMajorCategorService;
+import com.xjrsoft.module.student.vo.BaseMajorCategorPageVo;
+
+import com.xjrsoft.module.student.vo.BaseMajorCategorVo;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import lombok.AllArgsConstructor;
+import org.springframework.web.bind.annotation.*;
+
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
+import java.util.List;
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@RestController
+@RequestMapping("/student" + "/baseMajorCategor")
+@Api(value = "/student"  + "/baseMajorCategor",tags = "专业分类表代码")
+@AllArgsConstructor
+public class BaseMajorCategorController {
+
+
+    private final IBaseMajorCategorService baseMajorCategorService;
+
+    @GetMapping(value = "/page")
+    @ApiOperation(value="专业分类表列表(分页)")
+    @SaCheckPermission("basemajorcategor:detail")
+    public RT<PageOutput<BaseMajorCategorPageVo>> page(@Valid BaseMajorCategorPageDto dto){
+
+        LambdaQueryWrapper<BaseMajorCategor> queryWrapper = new LambdaQueryWrapper<>();
+        queryWrapper
+                    .orderByDesc(BaseMajorCategor::getId)
+                .select(BaseMajorCategor.class,x -> VoToColumnUtil.fieldsToColumns(BaseMajorCategorPageVo.class).contains(x.getProperty()));
+        IPage<BaseMajorCategor> page = baseMajorCategorService.page(ConventPage.getPage(dto), queryWrapper);
+        PageOutput<BaseMajorCategorPageVo> pageOutput = ConventPage.getPageOutput(page, BaseMajorCategorPageVo.class);
+        return RT.ok(pageOutput);
+    }
+
+    @GetMapping(value = "/info")
+    @ApiOperation(value="根据id查询专业分类表信息")
+    @SaCheckPermission("basemajorcategor:detail")
+    public RT<BaseMajorCategorVo> info(@RequestParam Long id){
+        BaseMajorCategor baseMajorCategor = baseMajorCategorService.getById(id);
+        if (baseMajorCategor == null) {
+           return RT.error("找不到此数据!");
+        }
+        return RT.ok(BeanUtil.toBean(baseMajorCategor, BaseMajorCategorVo.class));
+    }
+
+
+    @PostMapping
+    @ApiOperation(value = "新增专业分类表")
+    @SaCheckPermission("basemajorcategor:add")
+    public RT<Boolean> add(@Valid @RequestBody AddBaseMajorCategorDto dto){
+        BaseMajorCategor baseMajorCategor = BeanUtil.toBean(dto, BaseMajorCategor.class);
+        boolean isSuccess = baseMajorCategorService.save(baseMajorCategor);
+    return RT.ok(isSuccess);
+    }
+
+    @PutMapping
+    @ApiOperation(value = "修改专业分类表")
+    @SaCheckPermission("basemajorcategor:edit")
+    public RT<Boolean> update(@Valid @RequestBody UpdateBaseMajorCategorDto dto){
+
+        BaseMajorCategor baseMajorCategor = BeanUtil.toBean(dto, BaseMajorCategor.class);
+        return RT.ok(baseMajorCategorService.updateById(baseMajorCategor));
+
+    }
+
+    @DeleteMapping
+    @ApiOperation(value = "删除专业分类表")
+    @SaCheckPermission("basemajorcategor:delete")
+    public RT<Boolean> delete(@Valid @RequestBody List<Long> ids){
+        return RT.ok(baseMajorCategorService.removeBatchByIds(ids));
+
+    }
+    @PostMapping("/import")
+    @ApiOperation(value = "导入")
+    public RT<Boolean> importData(@RequestParam MultipartFile file) throws IOException {
+        List<BaseMajorCategorPageVo> savedDataList = EasyExcel.read(file.getInputStream()).head(BaseMajorCategorPageVo.class).sheet().doReadSync();
+        Boolean result = baseMajorCategorService.saveBatch(BeanUtil.copyToList(savedDataList, BaseMajorCategor.class));
+        return RT.ok(result);
+    }
+
+    @GetMapping("/export")
+    @ApiOperation(value = "导出")
+    public ResponseEntity<byte[]> exportData(@Valid BaseMajorCategorPageDto dto, @RequestParam(defaultValue = "false") Boolean isTemplate) {
+        List<BaseMajorCategorPageVo> customerList = isTemplate != null && isTemplate ? new ArrayList<>() : ((PageOutput<BaseMajorCategorPageVo>) page(dto).getData()).getList();
+        ByteArrayOutputStream bot = new ByteArrayOutputStream();
+        EasyExcel.write(bot, BaseMajorCategorPageVo.class).automaticMergeHead(false).excelType(ExcelTypeEnum.XLSX).sheet().doWrite(customerList);
+
+        return RT.fileStream(bot.toByteArray(), "BaseMajorCategor" + ExcelTypeEnum.XLSX.getValue());
+    }
+}

+ 3 - 2
src/main/java/com/xjrsoft/module/student/controller/PbCseFeeobjupdateController.java

@@ -12,6 +12,7 @@ import com.xjrsoft.module.student.dto.UpdatePbCseFeeobjupdateDto;
 import cn.dev33.satoken.annotation.SaCheckPermission;
 import com.alibaba.excel.EasyExcel;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoVo;
+import com.xjrsoft.module.textbook.dto.EnrollmentStatisticsInfoDto;
 import org.springframework.web.multipart.MultipartFile;
 import java.io.IOException;
 import com.alibaba.excel.support.ExcelTypeEnum;
@@ -51,8 +52,8 @@ public class PbCseFeeobjupdateController {
     @GetMapping(value = "/enrollment-statistics")
     @ApiOperation(value="招生统计")
     @SaCheckPermission("pbcsefeeobjupdate:detail")
-    public RT<EnrollmentStatisticsInfoVo> getEnrollmentStatisticsInfo(){
-        EnrollmentStatisticsInfoVo enrollmentStatisticsInfoVo = pbCseFeeobjupdateService.getEnrollmentStatisticsInfo();
+    public RT<EnrollmentStatisticsInfoVo> getEnrollmentStatisticsInfo(@Valid EnrollmentStatisticsInfoDto dto){
+        EnrollmentStatisticsInfoVo enrollmentStatisticsInfoVo = pbCseFeeobjupdateService.getEnrollmentStatisticsInfo(dto);
         return RT.ok(enrollmentStatisticsInfoVo);
     }
 

+ 48 - 0
src/main/java/com/xjrsoft/module/student/dto/AddBaseMajorCategorDto.java

@@ -0,0 +1,48 @@
+package com.xjrsoft.module.student.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import com.fasterxml.jackson.annotation.JsonFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+public class AddBaseMajorCategorDto implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 专业分类名称
+    */
+    @ApiModelProperty("专业分类名称")
+    private String name;
+    /**
+    * 专业分类代码
+    */
+    @ApiModelProperty("专业分类代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 办学层次(base_major_gradation)
+    */
+    @ApiModelProperty("办学层次(base_major_gradation)")
+    private Long majorGradationId;
+
+}

+ 26 - 0
src/main/java/com/xjrsoft/module/student/dto/BaseMajorCategorPageDto.java

@@ -0,0 +1,26 @@
+package com.xjrsoft.module.student.dto;
+
+import com.xjrsoft.common.page.PageInput;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import org.springframework.format.annotation.DateTimeFormat;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+
+/**
+* @title: 专业分类表分页查询入参
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class BaseMajorCategorPageDto extends PageInput {
+
+
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/student/dto/UpdateBaseMajorCategorDto.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.student.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import java.util.List;
+import java.util.Date;
+
+
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+public class UpdateBaseMajorCategorDto extends AddBaseMajorCategorDto {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键
+    */
+    @ApiModelProperty("主键")
+    private Long id;
+}

+ 98 - 0
src/main/java/com/xjrsoft/module/student/entity/BaseMajorCategor.java

@@ -0,0 +1,98 @@
+package com.xjrsoft.module.student.entity;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.github.yulichang.annotation.EntityMapping;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import java.io.Serializable;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+@TableName("base_major_categor")
+@ApiModel(value = "base_major_categor", description = "专业分类表")
+public class BaseMajorCategor implements Serializable {
+
+    private static final long serialVersionUID = 1L;
+
+    /**
+    * 主键
+    */
+    @ApiModelProperty("主键")
+    @TableId
+    private Long id;
+    /**
+    * 创建人
+    */
+    @ApiModelProperty("创建人")
+    @TableField(fill = FieldFill.INSERT)
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ApiModelProperty("创建时间")
+    @TableField(fill = FieldFill.INSERT)
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ApiModelProperty("修改人")
+    @TableField(fill = FieldFill.UPDATE)
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ApiModelProperty("修改时间")
+    @TableField(fill = FieldFill.UPDATE)
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ApiModelProperty("删除标记")
+    @TableField(fill = FieldFill.INSERT)
+    @TableLogic
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ApiModelProperty("有效标志")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer enabledMark;
+    /**
+    * 专业分类名称
+    */
+    @ApiModelProperty("专业分类名称")
+    private String name;
+    /**
+    * 专业分类代码
+    */
+    @ApiModelProperty("专业分类代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 办学层次(base_major_gradation)
+    */
+    @ApiModelProperty("办学层次(base_major_gradation)")
+    private Long majorGradationId;
+
+
+}

+ 0 - 1
src/main/java/com/xjrsoft/module/student/entity/PbCseFeeobjupdate.java

@@ -186,5 +186,4 @@ public class PbCseFeeobjupdate implements Serializable {
     @ApiModelProperty("")
     private Long rn;
 
-
 }

+ 17 - 0
src/main/java/com/xjrsoft/module/student/mapper/BaseMajorCategorMapper.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.student.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.github.yulichang.base.MPJBaseMapper;
+import com.xjrsoft.module.student.entity.BaseMajorCategor;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Mapper
+public interface BaseMajorCategorMapper extends MPJBaseMapper<BaseMajorCategor> {
+
+}

+ 17 - 0
src/main/java/com/xjrsoft/module/student/service/IBaseMajorCategorService.java

@@ -0,0 +1,17 @@
+package com.xjrsoft.module.student.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.github.yulichang.base.MPJBaseService;
+import com.xjrsoft.module.student.entity.BaseMajorCategor;
+import lombok.Data;
+import java.util.List;
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+
+public interface IBaseMajorCategorService extends MPJBaseService<BaseMajorCategor> {
+}

+ 2 - 1
src/main/java/com/xjrsoft/module/student/service/IPbCseFeeobjupdateService.java

@@ -3,6 +3,7 @@ package com.xjrsoft.module.student.service;
 import com.github.yulichang.base.MPJBaseService;
 import com.xjrsoft.module.student.entity.PbCseFeeobjupdate;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoVo;
+import com.xjrsoft.module.textbook.dto.EnrollmentStatisticsInfoDto;
 
 /**
 * @title: 
@@ -12,5 +13,5 @@ import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoVo;
 */
 
 public interface IPbCseFeeobjupdateService extends MPJBaseService<PbCseFeeobjupdate> {
-    EnrollmentStatisticsInfoVo getEnrollmentStatisticsInfo();
+    EnrollmentStatisticsInfoVo getEnrollmentStatisticsInfo(EnrollmentStatisticsInfoDto dto);
 }

+ 25 - 0
src/main/java/com/xjrsoft/module/student/service/impl/BaseMajorCategorServiceImpl.java

@@ -0,0 +1,25 @@
+package com.xjrsoft.module.student.service.impl;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.github.yulichang.base.MPJBaseServiceImpl;
+import com.xjrsoft.module.student.entity.BaseMajorCategor;
+import com.xjrsoft.module.student.mapper.BaseMajorCategorMapper;
+import com.xjrsoft.module.student.service.IBaseMajorCategorService;
+import lombok.AllArgsConstructor;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+
+/**
+* @title: 专业分类表
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Service
+@AllArgsConstructor
+public class BaseMajorCategorServiceImpl extends MPJBaseServiceImpl<BaseMajorCategorMapper, BaseMajorCategor> implements IBaseMajorCategorService {
+}

+ 130 - 21
src/main/java/com/xjrsoft/module/student/service/impl/PbCseFeeobjupdateServiceImpl.java

@@ -3,16 +3,24 @@ package com.xjrsoft.module.student.service.impl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.github.yulichang.base.MPJBaseServiceImpl;
 import com.github.yulichang.wrapper.MPJLambdaWrapper;
-import com.xjrsoft.module.student.entity.PbCseFeeobjupdate;
-import com.xjrsoft.module.student.entity.PbVXssfdetail;
+import com.xjrsoft.common.utils.VoToColumnUtil;
+import com.xjrsoft.module.base.entity.BaseMajorSet;
+import com.xjrsoft.module.oa.vo.NewsAppendixVo;
+import com.xjrsoft.module.student.entity.*;
 import com.xjrsoft.module.student.mapper.PbCseFeeobjupdateMapper;
 import com.xjrsoft.module.student.service.IPbCseFeeobjupdateService;
+import com.xjrsoft.module.student.vo.ChargingSituationVo;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoKeyValue;
 import com.xjrsoft.module.student.vo.EnrollmentStatisticsInfoVo;
+import com.xjrsoft.module.student.vo.PbCseFeeobjupdatePageVo;
+import com.xjrsoft.module.system.entity.File;
+import com.xjrsoft.module.textbook.dto.EnrollmentStatisticsInfoDto;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
 import java.math.RoundingMode;
+import java.time.LocalDate;
+import java.time.format.DateTimeFormatter;
 import java.util.ArrayList;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -29,17 +37,86 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class PbCseFeeobjupdateServiceImpl extends MPJBaseServiceImpl<PbCseFeeobjupdateMapper, PbCseFeeobjupdate> implements IPbCseFeeobjupdateService {
     @Override
-    public EnrollmentStatisticsInfoVo getEnrollmentStatisticsInfo() {
+    public EnrollmentStatisticsInfoVo getEnrollmentStatisticsInfo(EnrollmentStatisticsInfoDto dto) {
         EnrollmentStatisticsInfoVo result = new EnrollmentStatisticsInfoVo();
+        String firstDayOfMonthStr;
+        String lastDayOfMonthStr;
+        if(dto.getYearMonth() != null && !dto.getYearMonth().equals("")){
+            LocalDate date = LocalDate.parse(dto.getYearMonth()); // 假设给定日期为2022年9月15日
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            // 获取月份的第一天
+            LocalDate firstDayOfMonth = date.withDayOfMonth(1);
+            firstDayOfMonthStr = firstDayOfMonth.format(formatter);
+            // 获取月份的最后一天
+            LocalDate lastDayOfMonth = date.withDayOfMonth(date.lengthOfMonth());
+            lastDayOfMonthStr = lastDayOfMonth.format(formatter);
+        }else {
+            LocalDate today = LocalDate.now();
+            DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
+            // 获取月份的第一天
+            LocalDate firstDayOfMonth = today.withDayOfMonth(1);
+            firstDayOfMonthStr = firstDayOfMonth.format(formatter);
+            // 获取月份的最后一天
+            LocalDate lastDayOfMonth = today.withDayOfMonth(today.lengthOfMonth());
+            lastDayOfMonthStr = lastDayOfMonth.format(formatter);
+        }
+
+        //根据年月获取招生数量,毕业院校
+        MPJLambdaWrapper<PbCseFeeobjupdate> pbCseFeeobjupdateByYearMonth = new MPJLambdaWrapper<>();
+        pbCseFeeobjupdateByYearMonth
+                .distinct()
+                .select("ifnull(t.graduations,'未知') as graduations")
+                .selectAs(PbCseFeeobjupdate::getCratetime, PbCseFeeobjupdate::getCratetime)
+                .eq(dto.getYear() != null, PbCseFeeobjupdate::getEnteryear, dto.getYear())
+                .between(PbCseFeeobjupdate::getCratetime, firstDayOfMonthStr, lastDayOfMonthStr)
+        ;
+
+        List<PbCseFeeobjupdate> pbCseFeeobjupdateByYearMonthList = this.selectJoinList(PbCseFeeobjupdate.class, pbCseFeeobjupdateByYearMonth);
+
+        if(pbCseFeeobjupdateByYearMonthList != null && !pbCseFeeobjupdateByYearMonthList.isEmpty()) {
+            //每日招生人数
+            Map<String, Long> cratetime = pbCseFeeobjupdateByYearMonthList.stream().collect(Collectors.groupingBy(pbCseFeeobjupdate -> pbCseFeeobjupdate.getCratetime().substring(0,10), Collectors.counting()));
+            List<EnrollmentStatisticsInfoKeyValue> cratetimeRes = new ArrayList<>();
+            for (Map.Entry<String, Long> entry : cratetime.entrySet()) {
+                cratetimeRes.add(new EnrollmentStatisticsInfoKeyValue(entry.getKey(), entry.getValue()));
+            }
+
+            //毕业学校排行
+            Map<String, Long> graduations = pbCseFeeobjupdateByYearMonthList.stream().collect(Collectors.groupingBy(PbCseFeeobjupdate::getGraduations, Collectors.counting()));
+            if(!graduations.isEmpty()){
+                graduations = graduations.entrySet().stream()
+                        .sorted(Map.Entry.<String, Long>comparingByValue().reversed())
+                        .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue,
+                                (e1, e2) -> e1, LinkedHashMap::new));
+            }
+            List<EnrollmentStatisticsInfoKeyValue> graduationRes = new ArrayList<>();
+            for (Map.Entry<String, Long> entry : graduations.entrySet()) {
+                graduationRes.add(new EnrollmentStatisticsInfoKeyValue(entry.getKey(), entry.getValue()));
+            }
+
+            result.setGraduationList(graduationRes);
+            result.setCratetimeList(cratetimeRes);
+        }
+
 
         //获取所有学生的信息
-        LambdaQueryWrapper<PbCseFeeobjupdate> pbCseFeeobjupdateLambdaQueryWrapper = new LambdaQueryWrapper<>();
-        pbCseFeeobjupdateLambdaQueryWrapper
-                .eq(PbCseFeeobjupdate::getEnteryear, "2024");
+        MPJLambdaWrapper<PbCseFeeobjupdate> pbCseFeeobjupdateMPJLambdaWrapper = new MPJLambdaWrapper<>();
+        pbCseFeeobjupdateMPJLambdaWrapper
+                .distinct()
+                .select("ifnull(t2.name,t.specname) as specname")
+                .selectAs(PbCseFeeobjupdate::getSpecname, PbCseFeeobjupdate::getSpecname)
+                .selectAs(PbCseFeeobjupdate::getResourcename, PbCseFeeobjupdate::getResourcename)
+                .selectAs(PbCseFeeobjupdate::getQuartername, PbCseFeeobjupdate::getQuartername)
+                .selectAs(PbCseFeeobjupdate::getSex, PbCseFeeobjupdate::getSex)
+                .leftJoin(BaseMajorSet.class, BaseMajorSet::getName, PbCseFeeobjupdate::getSpecname)
+                .leftJoin(BaseMajorCategor.class, BaseMajorCategor::getId, BaseMajorSet::getMajorCategorId)
+                .eq(dto.getYear() != null, PbCseFeeobjupdate::getEnteryear, dto.getYear())
+        ;
 
-        List<PbCseFeeobjupdate> pbCseFeeobjupdateList = this.list(pbCseFeeobjupdateLambdaQueryWrapper);
+        List<PbCseFeeobjupdate> pbCseFeeobjupdateList = this.selectJoinList(PbCseFeeobjupdate.class, pbCseFeeobjupdateMPJLambdaWrapper);
 
         if(pbCseFeeobjupdateList != null && !pbCseFeeobjupdateList.isEmpty()){
+            //专业排行
             Map<String, Long> professionalHeadCount = pbCseFeeobjupdateList.stream().collect(Collectors.groupingBy(PbCseFeeobjupdate::getSpecname, Collectors.counting()));
             if(!professionalHeadCount.isEmpty()){
                 professionalHeadCount = professionalHeadCount.entrySet().stream()
@@ -52,18 +129,21 @@ public class PbCseFeeobjupdateServiceImpl extends MPJBaseServiceImpl<PbCseFeeobj
                 professionalHeadCountRes.add(new EnrollmentStatisticsInfoKeyValue(entry.getKey(), entry.getValue()));
             }
 
+            //学生类型
             Map<String, Long> studentSource = pbCseFeeobjupdateList.stream().collect(Collectors.groupingBy(PbCseFeeobjupdate::getResourcename, Collectors.counting()));
             List<EnrollmentStatisticsInfoKeyValue> studentSourceRes = new ArrayList<>();
             for (Map.Entry<String, Long> entry : studentSource.entrySet()) {
                 studentSourceRes.add(new EnrollmentStatisticsInfoKeyValue(entry.getKey(), entry.getValue()));
             }
 
+            //住宿类型
             Map<String, Long> accommodationType = pbCseFeeobjupdateList.stream().collect(Collectors.groupingBy(PbCseFeeobjupdate::getQuartername, Collectors.counting()));
             List<EnrollmentStatisticsInfoKeyValue> accommodationTypeRes = new ArrayList<>();
             for (Map.Entry<String, Long> entry : accommodationType.entrySet()) {
                 accommodationTypeRes.add(new EnrollmentStatisticsInfoKeyValue(entry.getKey(), entry.getValue()));
             }
 
+            //性别
             Map<String, Long> gender = pbCseFeeobjupdateList.stream().collect(Collectors.groupingBy(PbCseFeeobjupdate::getSex, Collectors.counting()));
             List<EnrollmentStatisticsInfoKeyValue> genderRes = new ArrayList<>();
             for (Map.Entry<String, Long> entry : gender.entrySet()) {
@@ -75,23 +155,52 @@ public class PbCseFeeobjupdateServiceImpl extends MPJBaseServiceImpl<PbCseFeeobj
             result.setStudentSource(studentSourceRes);
             result.setAccommodationType(accommodationTypeRes);
             result.setGender(genderRes);
-        }
 
-        //获取所有学生的收费明细
-        MPJLambdaWrapper<PbCseFeeobjupdate> feeobjupdateXssfdetailMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        feeobjupdateXssfdetailMPJLambdaWrapper
-                .selectCount(PbVXssfdetail::getPersonalid, EnrollmentStatisticsInfoVo::getPayers)
-                .selectSum(PbVXssfdetail::getMny, EnrollmentStatisticsInfoVo::getRecordedAmountOfMoney)
-                .leftJoin(PbVXssfdetail.class, PbVXssfdetail::getPersonalid, PbCseFeeobjupdate::getPersonalid)
-                .eq(PbCseFeeobjupdate::getEnteryear, "2024")
-        ;
-        EnrollmentStatisticsInfoVo enrollmentStatisticsInfoVo = this.selectJoinOne(EnrollmentStatisticsInfoVo.class, feeobjupdateXssfdetailMPJLambdaWrapper);
+            //获取所有学生的收费明细
+            MPJLambdaWrapper<PbCseFeeobjupdate> feeobjupdateXssfdetailMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            feeobjupdateXssfdetailMPJLambdaWrapper
+                    .selectCount(PbVXssfdetail::getPersonalid, EnrollmentStatisticsInfoVo::getPayers)
+                    .selectSum(PbVXssfdetail::getMny, EnrollmentStatisticsInfoVo::getRecordedAmountOfMoney)
+                    .leftJoin(PbVXssfdetail.class, PbVXssfdetail::getPersonalid, PbCseFeeobjupdate::getPersonalid)
+                    .eq(dto.getYear() != null, PbCseFeeobjupdate::getEnteryear, dto.getYear())
+            ;
+            EnrollmentStatisticsInfoVo enrollmentStatisticsInfoVo = this.selectJoinOne(EnrollmentStatisticsInfoVo.class, feeobjupdateXssfdetailMPJLambdaWrapper);
+
+            //缴费人数,入账金额
+            if(enrollmentStatisticsInfoVo != null){
+                result.setPayers(enrollmentStatisticsInfoVo.getPayers());
+                if(enrollmentStatisticsInfoVo.getRecordedAmountOfMoney() != null){
+                    result.setRecordedAmountOfMoney(enrollmentStatisticsInfoVo.getRecordedAmountOfMoney().setScale(2, RoundingMode.DOWN));
+                }
+            }
+
+            //获取所有学生的缴费详情
+            MPJLambdaWrapper<PbCseFeeobjupdate> feeobjupdateMPJLambdaWrapper = new MPJLambdaWrapper<>();
+            feeobjupdateMPJLambdaWrapper
+                    .selectAs(PbVXssfdetail::getFeeitemname, PbVXssfdetail::getFeeitemname)
+                    .leftJoin(PbVXssfdetail.class, PbVXssfdetail::getPersonalid, PbCseFeeobjupdate::getPersonalid)
+                    .eq(dto.getYear() != null, PbCseFeeobjupdate::getEnteryear, dto.getYear())
+                    .isNotNull(PbVXssfdetail::getFeeitemname)
+            ;
+            List<PbVXssfdetail> pbVXssfdetails = this.selectJoinList(PbVXssfdetail.class, feeobjupdateMPJLambdaWrapper);
 
-        if(enrollmentStatisticsInfoVo != null){
-            result.setPayers(enrollmentStatisticsInfoVo.getPayers());
-            if(enrollmentStatisticsInfoVo.getRecordedAmountOfMoney() != null){
-                result.setRecordedAmountOfMoney(enrollmentStatisticsInfoVo.getRecordedAmountOfMoney().setScale(2, RoundingMode.DOWN));
+            //收费项目情况统计
+            Map<String, Long> pbVXssfdetailMap = pbVXssfdetails.stream().collect(Collectors.groupingBy(PbVXssfdetail::getFeeitemname, Collectors.counting()));
+            List<ChargingSituationVo> chargingSituationVoRes = new ArrayList<>();
+            for (Map.Entry<String, Long> entry : pbVXssfdetailMap.entrySet()) {
+                chargingSituationVoRes.add(new ChargingSituationVo(){{
+                    setFeeitemname(entry.getKey());
+                    setPaid(entry.getValue());
+                    if(entry.getKey().equals("普通中专、职业高中、成人中专普通宿舍") && !accommodationType.isEmpty() && accommodationType.get("住宿") != null){
+                        setUnpaid(accommodationType.get("住宿") - entry.getValue());
+                        setRateOfPayment(entry.getValue()/accommodationType.get("住宿")*100 + "%");
+                    } else {
+                        setUnpaid(result.getRegistrationPopulation() - entry.getValue());
+                        setRateOfPayment(entry.getValue()/result.getRegistrationPopulation()*100 + "%");
+                    }
+                }});
             }
+            result.setChargingSituationVoList(chargingSituationVoRes);
         }
 
         return result;

+ 104 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseMajorCategorPageVo.java

@@ -0,0 +1,104 @@
+package com.xjrsoft.module.student.vo;
+
+import com.alibaba.excel.annotation.ExcelProperty;
+import com.alibaba.excel.annotation.ExcelIgnore;
+import com.alibaba.excel.annotation.write.style.ContentStyle;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import com.xjrsoft.common.annotation.Trans;
+import com.xjrsoft.common.enums.TransType;
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+* @title: 专业分类表分页列表出参
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+public class BaseMajorCategorPageVo {
+
+    /**
+    * 主键
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("主键")
+    @ApiModelProperty("主键")
+    private String id;
+    /**
+    * 创建人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建人")
+    @ApiModelProperty("创建人")
+    private Long createUserId;
+    /**
+    * 创建时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("创建时间")
+    @ApiModelProperty("创建时间")
+    private Date createDate;
+    /**
+    * 修改人
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改人")
+    @ApiModelProperty("修改人")
+    private Long modifyUserId;
+    /**
+    * 修改时间
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("修改时间")
+    @ApiModelProperty("修改时间")
+    private Date modifyDate;
+    /**
+    * 删除标记
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("删除标记")
+    @ApiModelProperty("删除标记")
+    private Integer deleteMark;
+    /**
+    * 有效标志
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("有效标志")
+    @ApiModelProperty("有效标志")
+    private Integer enabledMark;
+    /**
+    * 专业分类名称
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("专业分类名称")
+    @ApiModelProperty("专业分类名称")
+    private String name;
+    /**
+    * 专业分类代码
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("专业分类代码")
+    @ApiModelProperty("专业分类代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("备注")
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 办学层次(base_major_gradation)
+    */
+    @ContentStyle(dataFormat = 49)
+    @ExcelProperty("办学层次(base_major_gradation)")
+    @ApiModelProperty("办学层次(base_major_gradation)")
+    private Long majorGradationId;
+
+}

+ 49 - 0
src/main/java/com/xjrsoft/module/student/vo/BaseMajorCategorVo.java

@@ -0,0 +1,49 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalTime;
+import java.time.LocalDateTime;
+import java.math.BigDecimal;
+import java.util.List;
+import java.util.Date;
+
+/**
+* @title: 专业分类表表单出参
+* @Author szs
+* @Date: 2024-04-01
+* @Version 1.0
+*/
+@Data
+public class BaseMajorCategorVo {
+
+    /**
+    * 主键
+    */
+    @ApiModelProperty("主键")
+    private Long id;
+    /**
+    * 专业分类名称
+    */
+    @ApiModelProperty("专业分类名称")
+    private String name;
+    /**
+    * 专业分类代码
+    */
+    @ApiModelProperty("专业分类代码")
+    private String code;
+    /**
+    * 备注
+    */
+    @ApiModelProperty("备注")
+    private String remark;
+    /**
+    * 办学层次(base_major_gradation)
+    */
+    @ApiModelProperty("办学层次(base_major_gradation)")
+    private Long majorGradationId;
+
+
+
+}

+ 29 - 0
src/main/java/com/xjrsoft/module/student/vo/ChargingSituationVo.java

@@ -0,0 +1,29 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+@Data
+public class ChargingSituationVo {
+
+    /**
+    * 收费类型
+    */
+    @ApiModelProperty("收费类型")
+    private String feeitemname;
+    /**
+    * 缴纳率
+    */
+    @ApiModelProperty("缴纳率")
+    private String rateOfPayment;
+    /**
+    * 已缴纳
+    */
+    @ApiModelProperty("已缴纳")
+    private Long paid;
+    /**
+     * 未缴纳
+     */
+    @ApiModelProperty("未缴纳")
+    private Long unpaid;
+}

+ 15 - 1
src/main/java/com/xjrsoft/module/student/vo/EnrollmentStatisticsInfoVo.java

@@ -5,7 +5,6 @@ import lombok.Data;
 
 import java.math.BigDecimal;
 import java.util.List;
-import java.util.Map;
 
 @Data
 public class EnrollmentStatisticsInfoVo {
@@ -39,6 +38,21 @@ public class EnrollmentStatisticsInfoVo {
      */
     @ApiModelProperty("住宿类型")
     private List<EnrollmentStatisticsInfoKeyValue> accommodationType;
+    /**
+     * 毕业院校
+     */
+    @ApiModelProperty("毕业院校")
+    private List<EnrollmentStatisticsInfoKeyValue> graduationList;
+    /**
+     * 每日招生人数
+     */
+    @ApiModelProperty("每日招生人数")
+    private List<EnrollmentStatisticsInfoKeyValue> cratetimeList;
+    /**
+     * 收费情况
+     */
+    @ApiModelProperty("收费情况")
+    private List<ChargingSituationVo> chargingSituationVoList;
     /**
      * 性别
      */

+ 35 - 0
src/main/java/com/xjrsoft/module/student/vo/ProfessionalHeadCount.java

@@ -0,0 +1,35 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+/**
+ * 专业招收人数统计出擦
+ */
+@Data
+public class ProfessionalHeadCount {
+    /**
+     * 专业名称
+     */
+    @ApiModelProperty("专业名称")
+    private String key;
+    /**
+     * 已报名
+     */
+    @ApiModelProperty("已报名")
+    private Long value;
+
+    /**
+     * 学员余数
+     */
+    @ApiModelProperty("学员余数")
+    private Long studentRemainder;
+
+    public ProfessionalHeadCount() {
+    }
+
+    public ProfessionalHeadCount(String key, Long value) {
+        this.key = key;
+        this.value = value;
+    }
+}

+ 27 - 0
src/main/java/com/xjrsoft/module/textbook/dto/EnrollmentStatisticsInfoDto.java

@@ -0,0 +1,27 @@
+package com.xjrsoft.module.textbook.dto;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.time.LocalDate;
+
+
+/**
+* @title:
+* @Author szs
+* @Date: 2023-12-25
+* @Version 1.0
+*/
+@Data
+public class EnrollmentStatisticsInfoDto {
+    /**
+     * 年
+     */
+    @ApiModelProperty("年")
+    private String year;
+    /**
+     * 年月
+     */
+    @ApiModelProperty("年月")
+    private String yearMonth;
+}

+ 62 - 1
src/main/resources/mapper/asset/WfAssetManageMapper.xml

@@ -35,7 +35,68 @@
             and t.dept_id = #{dto.deptId}
         </if>
         <if test="dto.userId != null and dto.userId != ''">
-            and t1.user_id = #{dto.userId}
+            and t.user_id = #{dto.userId}
+        </if>
+    </select>
+
+    <select id="listWfAssetManageSelectRecordQuery" parameterType="com.xjrsoft.module.asset.dto.WfAssetManageSelectRecordQueryDto"
+            resultType="com.xjrsoft.module.asset.vo.WfAssetManageQueryVo">
+        select
+        t.*,
+        t1.name as assetTypeCn,
+        t2.name as assetCategoryCn,
+        t3.name as assetSpeciesCn,
+        t4.name as deptIdCn,
+        t5.name as userIdCn
+        from wf_asset_manage t
+        left join xjr_dictionary_detail t1 on t1.code = t.asset_type and t1.item_id = '1773620475495190530'
+        left join xjr_dictionary_detail t2 on t2.code = t.asset_category and t2.item_id = '1773620610862157826'
+        left join xjr_dictionary_detail t3 on t3.code = t.asset_species and t3.item_id = '1773620783726202882'
+        left join xjr_department t4 on t4.id = t.dept_id
+        left join xjr_user t5 on t5.id = t.user_id
+        where t.status = 1
+        <if test="dto.ids != null and !dto.ids.isEmpty()">
+            and t.id in
+            <foreach item="id" index="index" collection="dto.ids" open="(" close=")"
+                                  separator=",">
+            #{id}
+            </foreach>
+        </if>
+    </select>
+
+    <select id="listWfAssetManageConditionalSearchQuery" parameterType="com.xjrsoft.module.asset.dto.WfAssetManageConditionalSearchQueryDto"
+            resultType="com.xjrsoft.module.asset.vo.WfAssetManageQueryVo">
+        select
+        t.*,
+        t1.name as assetTypeCn,
+        t2.name as assetCategoryCn,
+        t3.name as assetSpeciesCn,
+        t4.name as deptIdCn,
+        t5.name as userIdCn
+        from wf_asset_manage t
+        left join xjr_dictionary_detail t1 on t1.code = t.asset_type and t1.item_id = '1773620475495190530'
+        left join xjr_dictionary_detail t2 on t2.code = t.asset_category and t2.item_id = '1773620610862157826'
+        left join xjr_dictionary_detail t3 on t3.code = t.asset_species and t3.item_id = '1773620783726202882'
+        left join xjr_department t4 on t4.id = t.dept_id
+        left join xjr_user t5 on t5.id = t.user_id
+        where t.status = 1
+        <if test="dto.assetType != null and dto.assetType != ''">
+            and t.asset_type = #{dto.assetType}
+        </if>
+        <if test="dto.assetCategory != null and dto.assetCategory != ''">
+            and t.asset_category = #{dto.assetCategory}
+        </if>
+        <if test="dto.assetSpecies != null and dto.assetSpecies != ''">
+            and t.asset_species = #{dto.assetSpecies}
+        </if>
+        <if test="dto.name != null and dto.name != ''">
+            and t.name = #{dto.name}
+        </if>
+        <if test="dto.deptId != null and dto.deptId != ''">
+            and t.dept_id = #{dto.deptId}
+        </if>
+        <if test="dto.userId != null and dto.userId != ''">
+            and t.user_id = #{dto.userId}
         </if>
     </select>
 </mapper>

+ 31 - 0
src/test/java/com/xjrsoft/xjrsoftboot/FreeMarkerGeneratorTest.java

@@ -2540,4 +2540,35 @@ public class FreeMarkerGeneratorTest {
         apiGeneratorService.generateCodes(params);
 
     }
+
+    /**
+     * 专业大类
+     *
+     * @throws IOException
+     */
+    @Test
+    public void gcBaseMajorCategor() throws IOException {
+        List<TableConfig> tableConfigs = new ArrayList<>();
+        TableConfig mainTable = new TableConfig();
+        mainTable.setTableName("base_major_categor");//init_sql中的表名
+        mainTable.setIsMain(true);//是否是主表,一般默认为true
+        mainTable.setPkField(GlobalConstant.DEFAULT_PK);//设置主键
+        mainTable.setPkType(GlobalConstant.DEFAULT_PK_TYPE);//设置主键类型
+        tableConfigs.add(mainTable);
+
+        ApiGenerateCodesDto params = new ApiGenerateCodesDto();
+        params.setAuthor("szs");//作者名称
+        params.setPackageName("student");//包名
+        params.setTableConfigs(tableConfigs);
+        params.setPage(true);//是否生成分页接口
+        params.setImport(true);//是否生成导入接口
+        params.setExport(true);//是否生成导出接口
+        params.setOutMainDir(true);//是否生成在主目录,前期测试可设置成false
+        params.setDs(ds);
+
+        IApiGeneratorService apiGeneratorService = new ApiGeneratorServiceImpl();
+
+        apiGeneratorService.generateCodes(params);
+
+    }
 }