MoneyOverdueServiceImpl.java 9.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215
  1. package vip.xiaonuo.money.service.impl;
  2. import cn.hutool.core.date.DateUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONException;
  5. import com.alibaba.fastjson.JSONObject;
  6. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  7. import com.baomidou.mybatisplus.core.toolkit.StringUtils;
  8. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  9. import org.springframework.beans.factory.annotation.Autowired;
  10. import vip.xiaonuo.money.entity.MoneyOverdue;
  11. import vip.xiaonuo.money.entity.MoneyWriteOverdue;
  12. import vip.xiaonuo.money.entity.vo.MoneyBorrowUserVo;
  13. import vip.xiaonuo.money.mapper.MoneyOverdueMapper;
  14. import vip.xiaonuo.money.mapper.MoneyWriteOverdueMapper;
  15. import vip.xiaonuo.money.param.MoneyOverdueDetailPageParam;
  16. import vip.xiaonuo.money.param.MoneyOverduePageParam;
  17. import vip.xiaonuo.money.param.MoneyOverdueParam;
  18. import vip.xiaonuo.money.service.IMoneyOverdueService;
  19. import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
  20. import org.springframework.stereotype.Service;
  21. import java.math.BigDecimal;
  22. import java.math.RoundingMode;
  23. import java.text.DecimalFormat;
  24. import java.text.SimpleDateFormat;
  25. import java.util.*;
  26. /**
  27. * <p>
  28. * 财务应收逾期表 服务实现类
  29. * </p>
  30. *
  31. * @author author
  32. * @since 2024-11-21
  33. */
  34. @Service
  35. public class MoneyOverdueServiceImpl extends ServiceImpl<MoneyOverdueMapper, MoneyOverdue> implements IMoneyOverdueService {
  36. @Autowired
  37. private MoneyOverdueMapper overdueMapper;
  38. @Autowired
  39. private MoneyWriteOverdueMapper writeOverdueMapper;
  40. @Override
  41. public JSONObject getOverdueCount(MoneyOverdueParam overdueParam) {
  42. String orgId = overdueParam.getOrgId();
  43. QueryWrapper<MoneyWriteOverdue> queryWrapper = new QueryWrapper<>();
  44. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  45. Date date = new Date();
  46. Calendar calendar = Calendar.getInstance();
  47. calendar.setTime(date);
  48. calendar.add(Calendar.MONTH, -1);
  49. queryWrapper.ge("end_time", calendar.getTime());
  50. queryWrapper.select("convert(IFNULL(sum(money),'0'),decimal(10,2)) money");
  51. MoneyWriteOverdue writeOverdue = writeOverdueMapper.selectOne(queryWrapper);
  52. JSONObject jsonObject = new JSONObject();
  53. jsonObject.put("money", writeOverdue.getMoney());
  54. return jsonObject;
  55. }
  56. @Override
  57. public JSONObject overdueRank(MoneyOverdueParam overdueParam) {
  58. String orgId = overdueParam.getOrgId();
  59. QueryWrapper<MoneyWriteOverdue> queryWrapper = new QueryWrapper<>();
  60. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  61. queryWrapper.select("convert(IFNULL(sum(money),'0'),decimal(10,2)) money,end_time endTime");
  62. List<MoneyWriteOverdue> writeOverdues = writeOverdueMapper.selectList(queryWrapper);
  63. double count = 0.00;
  64. double isOverdue = 0.00;
  65. double disOverdue = 0.00;
  66. JSONObject jsonObject = new JSONObject();
  67. DecimalFormat def = new DecimalFormat("0.00");
  68. if (writeOverdues.size() != 0) {
  69. for (MoneyWriteOverdue overdue : writeOverdues) {
  70. if (overdue.getEndTime().before(new Date())) {
  71. isOverdue = isOverdue + Double.valueOf(overdue.getMoney());
  72. }else {
  73. disOverdue = disOverdue + Double.valueOf(overdue.getMoney());
  74. }
  75. count = isOverdue + disOverdue;
  76. }
  77. if (count == 0) {
  78. jsonObject.put("isOverdue", "0");
  79. jsonObject.put("disOverdue", "100");
  80. } else {
  81. jsonObject.put("isOverdue", def.format(isOverdue / count));
  82. jsonObject.put("disOverdue", def.format(disOverdue / count));
  83. }
  84. } else {
  85. jsonObject.put("isOverdue", "0");
  86. jsonObject.put("disOverdue", "100");
  87. }
  88. return jsonObject;
  89. }
  90. @Override
  91. public List<MoneyBorrowUserVo> userRank(MoneyOverdueParam overdueParam) {
  92. String orgId = overdueParam.getOrgId();
  93. String time = overdueParam.getTime();
  94. List<MoneyBorrowUserVo> userRank = overdueMapper.getUserRank(time + "-01 00:00:00", time + "-31 23:59:59",orgId);
  95. BigDecimal math = new BigDecimal("10000");
  96. List<MoneyBorrowUserVo> list = new ArrayList<>();
  97. if (userRank.size() != 0) {
  98. Double collect = 0.00;
  99. Double overdue = 0.00;
  100. for (int i = 0; i < userRank.size(); i++) {
  101. if (i < 15) {
  102. BigDecimal bg = new BigDecimal(userRank.get(i).getCollectPrice());
  103. bg = bg.divide(math, 2, RoundingMode.HALF_UP);
  104. BigDecimal bg1 = new BigDecimal(userRank.get(i).getOverduePrice());
  105. bg1 = bg1.divide(math, 2, RoundingMode.HALF_UP);
  106. userRank.get(i).setCollectPrice(bg.toString());
  107. userRank.get(i).setOverduePrice(bg1.toString());
  108. list.add(userRank.get(i));
  109. } else {
  110. collect = collect + Double.valueOf(userRank.get(i).getCollectPrice());
  111. overdue = overdue + Double.valueOf(userRank.get(i).getOverduePrice());
  112. }
  113. }
  114. MoneyBorrowUserVo vo = new MoneyBorrowUserVo();
  115. vo.setUserName("others");
  116. BigDecimal c1 = new BigDecimal(collect);
  117. c1 = c1.divide(math, 2, RoundingMode.HALF_UP);
  118. BigDecimal c2 = new BigDecimal(overdue);
  119. c2 = c2.divide(math, 2, RoundingMode.HALF_UP);
  120. vo.setCollectPrice(c1.toString());
  121. vo.setOverduePrice(c2.toString());
  122. list.add(vo);
  123. }
  124. return list;
  125. }
  126. @Override
  127. public Page<MoneyWriteOverdue> overdueDetail(MoneyOverdueDetailPageParam overduePageParam) {
  128. String orgId = overduePageParam.getOrgId();
  129. Integer pageNum = overduePageParam.getPageNum();
  130. Integer pageSize = overduePageParam.getPageSize();
  131. Integer type = overduePageParam.getType();
  132. String userName = overduePageParam.getUserName();
  133. QueryWrapper<MoneyWriteOverdue> queryWrapper = new QueryWrapper<>();
  134. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId).orderByDesc("create_time");
  135. queryWrapper.eq(StringUtils.isNotBlank(userName), "user_name", userName);
  136. Calendar calendar = Calendar.getInstance();
  137. calendar.add(Calendar.DAY_OF_MONTH, 15);
  138. if (0 == type) {
  139. queryWrapper.ge("end_time", calendar.getTime());
  140. } else if (1 == type) {
  141. queryWrapper.le("end_time",DateUtil.beginOfDay(new Date()));
  142. } else if (2 == type) {
  143. queryWrapper.between("end_time", DateUtil.beginOfDay(new Date()), calendar.getTime());
  144. }
  145. Page<MoneyWriteOverdue> page = new Page<>(pageNum, pageSize);
  146. Page<MoneyWriteOverdue> selectPage = writeOverdueMapper.selectPage(page, queryWrapper);
  147. return selectPage;
  148. }
  149. @Override
  150. public List<MoneyOverdue> listUserName(Map<String, String> paramsMap) {
  151. String orgId = paramsMap.get("orgId");
  152. QueryWrapper<MoneyOverdue> queryWrapper = new QueryWrapper<>();
  153. queryWrapper.eq(StringUtils.isNotBlank(orgId), "org_id", orgId);
  154. queryWrapper.groupBy("user_name");
  155. return overdueMapper.selectList(queryWrapper);
  156. }
  157. /*数组排序*/
  158. public static JSONArray jsonArraySort(JSONArray jsonArr, String sortKey, boolean is_desc) {
  159. //存放排序结果json数组
  160. JSONArray sortedJsonArray = new JSONArray();
  161. //用于排序的list
  162. List<JSONObject> jsonValues = new ArrayList<JSONObject>();
  163. //将参数json数组每一项取出,放入list
  164. for (int i = 0; i < jsonArr.size(); i++) {
  165. jsonValues.add(jsonArr.getJSONObject(i));
  166. }
  167. //快速排序,重写compare方法,完成按指定字段比较,完成排序
  168. Collections.sort(jsonValues, new Comparator<JSONObject>() {
  169. //排序字段
  170. private final String KEY_NAME = sortKey;
  171. //重写compare方法
  172. @Override
  173. public int compare(JSONObject a, JSONObject b) {
  174. //如果用String接会导致一位数和两位数混合比对的时候不能准确比出来,要用int类型接
  175. //String valA = new String();
  176. //String valB = new String();
  177. Float valA = 0.00f;
  178. Float valB = 0.00f;
  179. try {
  180. valA = Float.parseFloat(a.getString(KEY_NAME));
  181. valB = Float.parseFloat(b.getString(KEY_NAME));
  182. } catch (JSONException e) {
  183. e.printStackTrace();
  184. }
  185. //是升序还是降序
  186. if (is_desc) {
  187. return -valA.compareTo(valB);
  188. } else {
  189. return -valB.compareTo(valA);
  190. }
  191. }
  192. });
  193. //将排序后结果放入结果jsonArray
  194. for (int i = 0; i < jsonArr.size(); i++) {
  195. sortedJsonArray.add(jsonValues.get(i));
  196. }
  197. return sortedJsonArray;
  198. }
  199. }