MoneyOverdueServiceImpl.java 9.7 KB

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