PbVXsxxsfytbServiceImpl.java 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223
  1. package com.xjrsoft.module.student.service.impl;
  2. import cn.hutool.core.util.StrUtil;
  3. import com.baomidou.mybatisplus.core.metadata.IPage;
  4. import com.github.yulichang.base.MPJBaseServiceImpl;
  5. import com.github.yulichang.wrapper.MPJLambdaWrapper;
  6. import com.xjrsoft.common.page.ConventPage;
  7. import com.xjrsoft.common.utils.VoToColumnUtil;
  8. import com.xjrsoft.module.base.entity.BaseClass;
  9. import com.xjrsoft.module.base.entity.BaseSemester;
  10. import com.xjrsoft.module.student.dto.PbVXsxxsfytbExcelDto;
  11. import com.xjrsoft.module.student.dto.PbVXsxxsfytbPageDto;
  12. import com.xjrsoft.module.student.dto.PersonalPortraitFeeInformationDto;
  13. import com.xjrsoft.module.student.entity.BaseStudent;
  14. import com.xjrsoft.module.student.entity.BaseStudentSchoolRoll;
  15. import com.xjrsoft.module.student.entity.PbSemesterConfig;
  16. import com.xjrsoft.module.student.entity.PbVXsxxsfytb;
  17. import com.xjrsoft.module.student.mapper.PbVXsxxsfytbMapper;
  18. import com.xjrsoft.module.student.service.IPbVXsxxsfytbService;
  19. import com.xjrsoft.module.student.vo.BaseClassQfCountVo;
  20. import com.xjrsoft.module.student.vo.PbVXsxxsfytbExcelVo;
  21. import com.xjrsoft.module.student.vo.PbVXsxxsfytbPageVo;
  22. import com.xjrsoft.module.student.vo.PbVXsxxsfytbPersonal;
  23. import com.xjrsoft.module.student.vo.PbVXsxxsfytbPersonalMap;
  24. import com.xjrsoft.module.student.vo.PersonalPortraitFeeInformationVo;
  25. import com.xjrsoft.module.teacher.entity.XjrUser;
  26. import lombok.AllArgsConstructor;
  27. import org.springframework.stereotype.Service;
  28. import java.math.BigDecimal;
  29. import java.util.ArrayList;
  30. import java.util.Arrays;
  31. import java.util.List;
  32. import java.util.Map;
  33. import java.util.stream.Collectors;
  34. /**
  35. * @title:
  36. * @Author dzx
  37. * @Date: 2024-03-13
  38. * @Version 1.0
  39. */
  40. @Service
  41. @AllArgsConstructor
  42. public class PbVXsxxsfytbServiceImpl extends MPJBaseServiceImpl<PbVXsxxsfytbMapper, PbVXsxxsfytb> implements IPbVXsxxsfytbService {
  43. private final PbVXsxxsfytbMapper pbVXsxxsfytbMapper;
  44. @Override
  45. public PersonalPortraitFeeInformationVo listCostInformation(PersonalPortraitFeeInformationDto dto) {
  46. //查出所有的消费记录
  47. MPJLambdaWrapper<PbVXsxxsfytb> pbVXsxxsfytbMPJLambdaWrapper = new MPJLambdaWrapper<>();
  48. pbVXsxxsfytbMPJLambdaWrapper
  49. .selectAs(BaseSemester::getId, PbVXsxxsfytbPersonal::getBaseSemester)
  50. .selectAs(BaseSemester::getName, PbVXsxxsfytbPersonal::getBaseSemesterCn)
  51. .select(PbVXsxxsfytb.class, x -> VoToColumnUtil.fieldsToColumns(PbVXsxxsfytbPersonal.class).contains(x.getProperty()))
  52. .leftJoin(XjrUser.class, XjrUser::getCredentialNumber, PbVXsxxsfytb::getPersonalid)
  53. .leftJoin(PbSemesterConfig.class, PbSemesterConfig::getBeltcode, PbVXsxxsfytb::getBeltcode)
  54. .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
  55. .eq(dto.getUserId() != null && dto.getUserId() > 0, XjrUser::getId, dto.getUserId())
  56. .like(dto.getYear() != null && !dto.getYear().equals(""),PbVXsxxsfytb::getBeltcode, dto.getYear())
  57. ;
  58. List<PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonalList = this.selectJoinList(PbVXsxxsfytbPersonal.class, pbVXsxxsfytbMPJLambdaWrapper);
  59. // 统计总消费金额
  60. BigDecimal totalConsumption = pbVXsxxsfytbPersonalList.stream()
  61. .map(p -> p.getFactrecarmny().add((p.getArrearagemny()==null?BigDecimal.ZERO:p.getArrearagemny())))
  62. .reduce(BigDecimal.ZERO, BigDecimal::add);
  63. // 按学期分组并处理数据
  64. List<PbVXsxxsfytbPersonalMap> pbVXsxxsfytbPersonalMapList = pbVXsxxsfytbPersonalList.stream()
  65. .collect(Collectors.groupingBy(PbVXsxxsfytbPersonal::getBaseSemester))
  66. .entrySet().stream()
  67. .map(entry -> {
  68. String baseSemester = entry.getKey();
  69. List<PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonals = entry.getValue();
  70. // 合并相同缴费项目
  71. Map<String, PbVXsxxsfytbPersonal> pbVXsxxsfytbPersonalByItemMap = pbVXsxxsfytbPersonals.stream()
  72. .collect(Collectors.toMap(PbVXsxxsfytbPersonal::getFeeitemcode, p -> p, (existing, replacement) -> {
  73. existing.setFactar(existing.getFactar().add(replacement.getFactar()));
  74. existing.setFactrecarmny(existing.getFactrecarmny().add(replacement.getFactrecarmny()));
  75. existing.setAdjustmny(existing.getAdjustmny().add(replacement.getAdjustmny()));
  76. existing.setArrearagemny(existing.getArrearagemny().add(replacement.getArrearagemny()));
  77. return existing;
  78. }));
  79. // 构建PbVXsxxsfytbPersonalMap对象
  80. PbVXsxxsfytbPersonalMap pbVXsxxsfytbPersonalMap = new PbVXsxxsfytbPersonalMap();
  81. pbVXsxxsfytbPersonalMap.setBaseSemester(baseSemester);
  82. pbVXsxxsfytbPersonalMap.setBaseSemesterCn(pbVXsxxsfytbPersonals.get(0).getBaseSemesterCn());
  83. pbVXsxxsfytbPersonalMap.setPbVXsxxsfytbPersonalList(new ArrayList<>(pbVXsxxsfytbPersonalByItemMap.values()));
  84. return pbVXsxxsfytbPersonalMap;
  85. })
  86. .collect(Collectors.toList());
  87. // 构建返回对象
  88. PersonalPortraitFeeInformationVo personalPortraitFeeInformationVo = new PersonalPortraitFeeInformationVo();
  89. personalPortraitFeeInformationVo.setTotalConsumption(totalConsumption);
  90. personalPortraitFeeInformationVo.setPbVXsxxsfytbPersonalMapList(pbVXsxxsfytbPersonalMapList);
  91. return personalPortraitFeeInformationVo;
  92. }
  93. @Override
  94. public IPage<PbVXsxxsfytbPageVo> getPage(PbVXsxxsfytbPageDto dto) {
  95. if(dto.getClassIds() != null && !dto.getClassIds().equals("")){
  96. String[] strArray = dto.getClassIds().split(",");
  97. List<String> strList = Arrays.asList(strArray);
  98. dto.setClassIdList(strList);
  99. }
  100. MPJLambdaWrapper<PbVXsxxsfytb> pbVXsxxsfytbMPJLambdaWrapper = new MPJLambdaWrapper<>();
  101. if (dto.getSemesterId() != null && dto.getSemesterId() > 0) {
  102. pbVXsxxsfytbMPJLambdaWrapper.exists("select 1 from `pb_semester_config` where base_semester_id = " + dto.getSemesterId() + " and beltcode = t.beltcode");
  103. }
  104. pbVXsxxsfytbMPJLambdaWrapper
  105. .disableSubLogicDel()
  106. .like(dto.getFeeitemname() != null && !dto.getFeeitemname().equals(""), PbVXsxxsfytb::getFeeitemname, dto.getFeeitemname())
  107. .like(dto.getName() != null && !dto.getName().equals(""), PbVXsxxsfytb::getFeeobjname, dto.getName())
  108. .eq(dto.getStudentId() != null && !dto.getStudentId().equals(""), BaseStudent::getStudentId, dto.getStudentId())
  109. .in(dto.getClassIdList() != null && !dto.getClassIdList().isEmpty(), BaseStudentSchoolRoll::getClassId, dto.getClassIdList())
  110. .eq(dto.getSemesterId() != null && dto.getSemesterId() > 0, PbSemesterConfig::getBaseSemesterId, dto.getSemesterId())
  111. .like(dto.getJfzt() != null && !"".equals(dto.getJfzt()), PbVXsxxsfytb::getJfzt, dto.getJfzt())
  112. .leftJoin(XjrUser.class, XjrUser::getCredentialNumber, PbVXsxxsfytb::getPersonalid)
  113. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  114. .leftJoin(BaseStudent.class, BaseStudent::getUserId, XjrUser::getId)
  115. .leftJoin(PbSemesterConfig.class, PbSemesterConfig::getBeltcode, PbVXsxxsfytb::getBeltcode)
  116. .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
  117. .selectAs(BaseSemester::getId, PbVXsxxsfytbPageVo::getBaseSemester)
  118. .selectAs(XjrUser::getId, PbVXsxxsfytbPageVo::getUserId)
  119. .selectAs(BaseSemester::getName, PbVXsxxsfytbPageVo::getBaseSemesterCn)
  120. .select(PbVXsxxsfytb.class, x -> VoToColumnUtil.fieldsToColumns(PbVXsxxsfytbPageVo.class).contains(x.getProperty()))
  121. ;
  122. if(StrUtil.isNotEmpty(dto.getField()) && StrUtil.isNotEmpty(dto.getOrder())){
  123. if("ascend".equals(dto.getOrder())){
  124. if("baseSemesterCn".equals(dto.getField())){
  125. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(BaseSemester::getName);
  126. }else if("feeobjname".equals(dto.getField())){
  127. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getFeeobjname);
  128. }else if("personalid".equals(dto.getField())){
  129. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getPersonalid);
  130. }else if("sex".equals(dto.getField())){
  131. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getSex);
  132. }else if("feeitemname".equals(dto.getField())){
  133. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getFeeitemname);
  134. }else if("factar".equals(dto.getField())){
  135. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getFactar);
  136. }else if("ktje".equals(dto.getField())){
  137. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getQfje);
  138. }else if("refundmny".equals(dto.getField())){
  139. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getRefundmny);
  140. }else if("qfje".equals(dto.getField())){
  141. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getQfje);
  142. }else if("factrecarmny".equals(dto.getField())){
  143. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getFactrecarmny);
  144. }
  145. }else if("descend".equals(dto.getOrder())){
  146. if("baseSemesterCn".equals(dto.getField())){
  147. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(BaseSemester::getName);
  148. }else if("feeobjname".equals(dto.getField())){
  149. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getFeeobjname);
  150. }else if("personalid".equals(dto.getField())){
  151. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getPersonalid);
  152. }else if("sex".equals(dto.getField())){
  153. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getSex);
  154. }else if("feeitemname".equals(dto.getField())){
  155. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getFeeitemname);
  156. }else if("factar".equals(dto.getField())){
  157. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getFactar);
  158. }else if("ktje".equals(dto.getField())){
  159. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getQfje);
  160. }else if("refundmny".equals(dto.getField())){
  161. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getRefundmny);
  162. }else if("qfje".equals(dto.getField())){
  163. pbVXsxxsfytbMPJLambdaWrapper.orderByAsc(PbVXsxxsfytb::getQfje);
  164. }else if("factrecarmny".equals(dto.getField())){
  165. pbVXsxxsfytbMPJLambdaWrapper.orderByDesc(PbVXsxxsfytb::getFactrecarmny);
  166. }
  167. }
  168. }
  169. return this.selectJoinListPage(ConventPage.getPageCustomOrder(dto), PbVXsxxsfytbPageVo.class, pbVXsxxsfytbMPJLambdaWrapper);
  170. }
  171. @Override
  172. public List<PbVXsxxsfytbExcelVo> getList(PbVXsxxsfytbExcelDto dto) {
  173. MPJLambdaWrapper<PbVXsxxsfytb> pbVXsxxsfytbMPJLambdaWrapper = new MPJLambdaWrapper<>();
  174. pbVXsxxsfytbMPJLambdaWrapper
  175. .disableSubLogicDel()
  176. .in(dto.getPksfxxytbs() != null && !dto.getPksfxxytbs().isEmpty(), PbVXsxxsfytb::getPksfxxytb, dto.getPksfxxytbs())
  177. .leftJoin(XjrUser.class, XjrUser::getCredentialNumber, PbVXsxxsfytb::getPersonalid)
  178. .leftJoin(BaseStudentSchoolRoll.class, BaseStudentSchoolRoll::getUserId, XjrUser::getId)
  179. .leftJoin(PbSemesterConfig.class, PbSemesterConfig::getBeltcode, PbVXsxxsfytb::getBeltcode)
  180. .leftJoin(BaseSemester.class, BaseSemester::getId, PbSemesterConfig::getBaseSemesterId)
  181. .leftJoin(BaseClass.class, BaseClass::getId, BaseStudentSchoolRoll::getClassId)
  182. .selectAs(BaseClass::getName, PbVXsxxsfytbExcelVo::getClassname)
  183. .selectAs(BaseSemester::getId, PbVXsxxsfytbExcelVo::getBaseSemester)
  184. .selectAs(XjrUser::getId, PbVXsxxsfytbExcelVo::getUserId)
  185. .selectAs(BaseSemester::getName, PbVXsxxsfytbExcelVo::getBaseSemesterCn)
  186. .select(PbVXsxxsfytb.class, x -> VoToColumnUtil.fieldsToColumns(PbVXsxxsfytbExcelVo.class).contains(x.getProperty()))
  187. ;
  188. List<PbVXsxxsfytbExcelVo> list = this.selectJoinList(PbVXsxxsfytbExcelVo.class, pbVXsxxsfytbMPJLambdaWrapper);
  189. for (PbVXsxxsfytbExcelVo pbVXsxxsfytbExcelVo : list) {
  190. if(pbVXsxxsfytbExcelVo.getQfje().compareTo(BigDecimal.ZERO) > 0){//正数
  191. pbVXsxxsfytbExcelVo.setQfje(pbVXsxxsfytbExcelVo.getQfje().abs());
  192. pbVXsxxsfytbExcelVo.setKtje(BigDecimal.ZERO);
  193. }else if(pbVXsxxsfytbExcelVo.getQfje().compareTo(BigDecimal.ZERO) < 0){
  194. pbVXsxxsfytbExcelVo.setKtje(pbVXsxxsfytbExcelVo.getQfje().abs());
  195. pbVXsxxsfytbExcelVo.setQfje(BigDecimal.ZERO);
  196. }
  197. }
  198. return list;
  199. }
  200. @Override
  201. public List<BaseClassQfCountVo> getClassQfCount() {
  202. return pbVXsxxsfytbMapper.getClassQfCount();
  203. }
  204. }