大数据与最优化研究所 преди 1 година
родител
ревизия
a58c7333ca

+ 1 - 1
src/main/java/com/xjrsoft/module/student/controller/ConsumptionController.java

@@ -124,7 +124,7 @@ public class ConsumptionController {
     @GetMapping(value = "/cost-information")
     @ApiOperation(value="费用信息")
     @SaCheckPermission("consumption:detail")
-    public RT<List<PersonalPortraitFeeInformationVo>> costInformation(@Valid PersonalPortraitFeeInformationDto dto){
+    public RT<PersonalPortraitFeeInformationVo> costInformation(@Valid PersonalPortraitFeeInformationDto dto){
 
         return RT.ok(pbVXsxxsfytbService.listCostInformation(dto));
     }

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

@@ -17,7 +17,7 @@ import java.util.List;
 */
 
 public interface IPbVXsxxsfytbService extends MPJBaseService<PbVXsxxsfytb> {
-    List<PersonalPortraitFeeInformationVo> listCostInformation(PersonalPortraitFeeInformationDto dto);
+    PersonalPortraitFeeInformationVo listCostInformation(PersonalPortraitFeeInformationDto dto);
 
     IPage<PbVXsxxsfytbPageVo> getPage(PbVXsxxsfytbPageDto dto);
 

+ 46 - 26
src/main/java/com/xjrsoft/module/student/service/impl/PbVXsxxsfytbServiceImpl.java

@@ -1,5 +1,6 @@
 package com.xjrsoft.module.student.service.impl;
 
+import camundajar.impl.scala.concurrent.impl.FutureConvertersImpl;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -24,10 +25,8 @@ import com.xjrsoft.module.teacher.entity.XjrUser;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
 
-import java.util.Arrays;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
+import java.math.BigDecimal;
+import java.util.*;
 import java.util.stream.Collectors;
 
 /**
@@ -40,42 +39,63 @@ import java.util.stream.Collectors;
 @AllArgsConstructor
 public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapper, PbVXsxxsfytb> implements IPbVXsxxsfytbService {
 
-    private final IPbSemesterConfigService pbSemesterConfigService;
     @Override
-    public List<PersonalPortraitFeeInformationVo> listCostInformation(PersonalPortraitFeeInformationDto dto) {
+    public PersonalPortraitFeeInformationVo listCostInformation(PersonalPortraitFeeInformationDto dto) {
+
         //查出所有的消费记录
         MPJLambdaWrapper<PbVXsxxsfytb> pbVXsxxsfytbMPJLambdaWrapper = new MPJLambdaWrapper<>();
         pbVXsxxsfytbMPJLambdaWrapper
-                .select(PbVXsxxsfytb.class, x -> VoToColumnUtil.fieldsToColumns(PersonalPortraitFeeInformationVo.class).contains(x.getProperty()))
+                .selectAs(BaseSemester::getId, PbVXsxxsfytbPersonal::getBaseSemester)
+                .selectAs(BaseSemester::getName, PbVXsxxsfytbPersonal::getBaseSemesterCn)
+                .select(PbVXsxxsfytb.class, x -> VoToColumnUtil.fieldsToColumns(PbVXsxxsfytbPersonal.class).contains(x.getProperty()))
                 .leftJoin(XjrUser.class, XjrUser::getCredentialNumber, PbVXsxxsfytb::getPersonalid)
+                .leftJoin(PbSemesterConfig.class, PbSemesterConfig::getBeltcode, PbVXsxxsfytb::getBeltcode)
+                .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
                 .eq(dto.getUserId() != null && dto.getUserId() > 0, XjrUser::getId, dto.getUserId())
                 .like(dto.getYear() != null && !dto.getYear().equals(""),PbVXsxxsfytb::getBeltcode, dto.getYear())
                 ;
-        List<PersonalPortraitFeeInformationVo> personalPortraitFeeInformationVoList = this.selectJoinList(PersonalPortraitFeeInformationVo.class, pbVXsxxsfytbMPJLambdaWrapper);
+        List<PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonalList = this.selectJoinList(PbVXsxxsfytbPersonal.class, pbVXsxxsfytbMPJLambdaWrapper);
 
-        //查出学期集合
-        MPJLambdaWrapper<PbSemesterConfig> pbSemesterConfigMPJLambdaWrapper = new MPJLambdaWrapper<>();
-        pbSemesterConfigMPJLambdaWrapper
-                .selectAs(BaseSemester::getName, PbSemesterConfigVo::getBaseSemesterIdCn)
-                .select(PbSemesterConfig.class, x -> VoToColumnUtil.fieldsToColumns(PbSemesterConfigVo.class).contains(x.getProperty()))
-                .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
-        ;
-        List<PbSemesterConfigVo> pbSemesterConfigVoList = pbSemesterConfigService.selectJoinList(PbSemesterConfigVo.class, pbSemesterConfigMPJLambdaWrapper);
+        BigDecimal totalConsumption = new BigDecimal("0");
 
-        Map<String, PbSemesterConfigVo> pbSemesterConfigMap = new HashMap<>();
-        for (PbSemesterConfigVo pbSemesterConfigVo : pbSemesterConfigVoList){
-            pbSemesterConfigMap.put(pbSemesterConfigVo.getBeltcode(), pbSemesterConfigVo);
-        }
+        Map<String, List<PbVXsxxsfytbPersonal>> PbVXsxxsfytbPersonalBySemesterMap = pbVXsxxsfytbPersonalList.stream()
+                .collect(Collectors.groupingBy(PbVXsxxsfytbPersonal::getBaseSemester));
+
+        List<PbVXsxxsfytbPersonalMap> pbVXsxxsfytbPersonalMapList = new ArrayList<>();
+        for (Map.Entry<String, List<PbVXsxxsfytbPersonal>> entry : PbVXsxxsfytbPersonalBySemesterMap.entrySet()) {
+            String baseSemester = entry.getKey();
+            List<PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonals = entry.getValue();
+
+            Map<String, PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonalByItemMap = new HashMap<>();
+            for (PbVXsxxsfytbPersonal pbVXsxxsfytbPersonal : pbVXsxxsfytbPersonals){
+                //统计总的消费金额
+                totalConsumption = totalConsumption.add(pbVXsxxsfytbPersonal.getFactrecarmny());
+                totalConsumption = totalConsumption.add(pbVXsxxsfytbPersonal.getArrearagemny());
 
-        for (PersonalPortraitFeeInformationVo personalPortraitFeeInformationVo : personalPortraitFeeInformationVoList){
-            String beltcode = personalPortraitFeeInformationVo.getBeltcode();
-            if(beltcode != null){
-                personalPortraitFeeInformationVo.setBaseSemester(String.valueOf(pbSemesterConfigMap.get(beltcode).getBaseSemesterId()));
-                personalPortraitFeeInformationVo.setBaseSemesterCn(pbSemesterConfigMap.get(beltcode).getBaseSemesterIdCn());
+                //将相同缴费项目合并
+                if (pbVXsxxsfytbPersonalByItemMap.containsKey(pbVXsxxsfytbPersonal.getFeeitemcode())){
+                    PbVXsxxsfytbPersonal p = pbVXsxxsfytbPersonalByItemMap.get(pbVXsxxsfytbPersonal.getFeeitemcode());
+                    p.setFactar(p.getFactar().add(pbVXsxxsfytbPersonal.getFactar()));
+                    p.setFactrecarmny(p.getFactrecarmny().add(pbVXsxxsfytbPersonal.getFactrecarmny()));
+                    p.setAdjustmny(p.getAdjustmny().add(pbVXsxxsfytbPersonal.getAdjustmny()));
+                    p.setArrearagemny(p.getArrearagemny().add(pbVXsxxsfytbPersonal.getArrearagemny()));
+                }else {
+                    pbVXsxxsfytbPersonalByItemMap.put(pbVXsxxsfytbPersonal.getFeeitemcode(), pbVXsxxsfytbPersonal);
+                }
             }
+
+            PbVXsxxsfytbPersonalMap pbVXsxxsfytbPersonalMap = new PbVXsxxsfytbPersonalMap();
+            pbVXsxxsfytbPersonalMap.setBaseSemester(baseSemester);
+            pbVXsxxsfytbPersonalMap.setBaseSemesterCn(pbVXsxxsfytbPersonals.get(0).getBaseSemesterCn());
+            pbVXsxxsfytbPersonalMap.setPbVXsxxsfytbPersonalList(pbVXsxxsfytbPersonals);
+            pbVXsxxsfytbPersonalMapList.add(pbVXsxxsfytbPersonalMap);
         }
 
-        return personalPortraitFeeInformationVoList;
+        PersonalPortraitFeeInformationVo p = new PersonalPortraitFeeInformationVo();
+        p.setTotalConsumption(totalConsumption);
+        p.setPbVXsxxsfytbPersonalMapList(pbVXsxxsfytbPersonalMapList);
+
+        return p;
     }
 
     @Override

+ 69 - 0
src/main/java/com/xjrsoft/module/student/vo/PbVXsxxsfytbPersonal.java

@@ -0,0 +1,69 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+
+/**
+* 个人消费记录
+*/
+@Data
+public class PbVXsxxsfytbPersonal {
+
+    /**
+     * 学期Id
+     */
+    @ApiModelProperty("学期Id")
+    private String baseSemester;
+    /**
+     * 学期Id
+     */
+    @ApiModelProperty("学期Id")
+    private String baseSemesterCn;
+    /**
+     * 收费区间编码
+     */
+    @ApiModelProperty("收费区间编码")
+    private String beltcode;
+    /**
+     * 收费区间名称
+     */
+    @ApiModelProperty("收费区间名称")
+    private String beltname;
+    /**
+     * 收费项目名称
+     */
+    @ApiModelProperty("收费项目名称")
+    private String feeitemname;
+    /**
+     * 收费项目编码
+     */
+    @ApiModelProperty("收费项目编码")
+    private String feeitemcode;
+    /**
+     * 应缴金额
+     */
+    @ApiModelProperty("应缴金额 ")
+    private BigDecimal factar;
+    /**
+     * 实缴金额
+     */
+    @ApiModelProperty("实缴金额")
+    private BigDecimal factrecarmny;
+    /**
+     * 调整(减免)金额
+     */
+    @ApiModelProperty("调整(减免)金额")
+    private BigDecimal adjustmny;
+    /**
+     * 应缴金额
+     */
+    @ApiModelProperty("欠费金额")
+    private BigDecimal arrearagemny;
+    /**
+     * 缴费状态
+     */
+    @ApiModelProperty("缴费状态")
+    private String jfzt;
+}

+ 32 - 0
src/main/java/com/xjrsoft/module/student/vo/PbVXsxxsfytbPersonalMap.java

@@ -0,0 +1,32 @@
+package com.xjrsoft.module.student.vo;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.math.BigDecimal;
+import java.util.List;
+
+/**
+* 个人消费记录
+*/
+@Data
+public class PbVXsxxsfytbPersonalMap {
+
+    /**
+     * 学期Id
+     */
+    @ApiModelProperty("学期Id")
+    private String baseSemester;
+    /**
+     * 学期Id
+     */
+    @ApiModelProperty("学期Id")
+    private String baseSemesterCn;
+
+    /**
+     * 消息记录
+     */
+    @ApiModelProperty("消息记录 ")
+    private List<PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonalList;
+
+}

+ 10 - 46
src/main/java/com/xjrsoft/module/student/vo/PersonalPortraitFeeInformationVo.java

@@ -4,60 +4,24 @@ import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 
 import java.math.BigDecimal;
+import java.util.List;
+import java.util.Map;
 
 /**
  * 费用信息出参
  */
 @Data
 public class PersonalPortraitFeeInformationVo {
+
     /**
-     * 学期Id
-     */
-    @ApiModelProperty("学期Id")
-    private String baseSemester;
-    /**
-     * 学期Id
-     */
-    @ApiModelProperty("学期Id")
-    private String baseSemesterCn;
-    /**
-     * 收费区间编码
-     */
-    @ApiModelProperty("收费区间编码")
-    private String beltcode;
-    /**
-     * 收费区间名称
-     */
-    @ApiModelProperty("收费区间名称")
-    private String beltname;
-    /**
-     * 收费项目名称
-     */
-    @ApiModelProperty("收费项目名称")
-    private String feeitemname;
-    /**
-     * 应缴金额
-     */
-    @ApiModelProperty("应缴金额 ")
-    private BigDecimal factar;
-    /**
-     * 实缴金额
-     */
-    @ApiModelProperty("实缴金额")
-    private BigDecimal factrecarmny;
-    /**
-     * 调整(减免)金额
-     */
-    @ApiModelProperty("调整(减免)金额 ")
-    private BigDecimal adjustmny;
-    /**
-     * 缴费状态
+     * 消费总额
      */
-    @ApiModelProperty("缴费状态")
-    private String jfzt;
+    @ApiModelProperty("消费总额 ")
+    private BigDecimal totalConsumption;
+
     /**
-     * 应缴金额
+     * 消费信息
      */
-    @ApiModelProperty("欠费金额 ")
-    private BigDecimal arrearagemny;
+    @ApiModelProperty("消费信息 ")
+    private List<PbVXsxxsfytbPersonalMap> pbVXsxxsfytbPersonalMapList;
 }