PbVXsxxsfytbServiceImpl.java 15 KB

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