StatisticsServiceImpl.java 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173
  1. package com.ruoyi.demo.service.impl;
  2. import cn.hutool.core.date.DateField;
  3. import cn.hutool.core.date.DateUtil;
  4. import cn.hutool.core.lang.Dict;
  5. import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
  6. import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
  7. import com.ruoyi.demo.entity.*;
  8. import com.ruoyi.demo.entity.bo.PlanBo;
  9. import com.ruoyi.demo.entity.bo.StatisticsAddBo;
  10. import com.ruoyi.demo.entity.vo.PlanHomeVo;
  11. import com.ruoyi.demo.entity.vo.ScanListVo;
  12. import com.ruoyi.demo.entity.vo.TimeAndCountVo;
  13. import com.ruoyi.demo.mapper.*;
  14. import com.ruoyi.demo.service.StatisticsService;
  15. import com.ruoyi.demo.utils.SignUtil;
  16. import org.springframework.beans.factory.annotation.Autowired;
  17. import org.springframework.stereotype.Service;
  18. import org.springframework.transaction.annotation.Transactional;
  19. import java.util.*;
  20. @Service
  21. @Transactional
  22. public class StatisticsServiceImpl implements StatisticsService {
  23. @Autowired
  24. StatisticsMapper statisticsMapper;
  25. @Autowired
  26. DlUserMapper dlUserMapper;
  27. @Autowired
  28. AppMapper appMapper;
  29. @Autowired
  30. EquipmentMapper equipmentMapper;
  31. @Autowired
  32. PlanMapper planMapper;
  33. @Override
  34. public MyPage<ScanListVo> getScanList(PlanBo bo) {
  35. QueryWrapper<Statistics> queryWrapper = new QueryWrapper<>();
  36. if (bo.getStartTime() != null)
  37. queryWrapper.apply("`time` >= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')", bo.getStartTime());
  38. if (bo.getEndTime() != null)
  39. queryWrapper.apply("`time` <= STR_TO_DATE({0},'%Y-%m-%d %H:%i:%s')", bo.getEndTime());
  40. Page<Statistics> page = new Page<>();
  41. List<Statistics> list = statisticsMapper.selectPage(page, queryWrapper).getRecords();
  42. List<ScanListVo> vos = new ArrayList<>();
  43. for (Statistics statistics : list) {
  44. vos.add(new ScanListVo(statistics));
  45. }
  46. return new MyPage<>(page, vos);
  47. }
  48. @Override
  49. public PlanHomeVo getScanTotal() {
  50. PlanHomeVo vo = new PlanHomeVo();
  51. vo.setTotal(statisticsMapper.selectTotal());
  52. vo.setTime(DateUtil.date());
  53. return vo;
  54. }
  55. @Override
  56. public String getSign(StatisticsAddBo bo) {
  57. QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
  58. appQueryWrapper.eq("appkey", bo.getAppkey());
  59. appQueryWrapper.eq("state", 1);
  60. appQueryWrapper.eq("deleted", "0");
  61. App app = appMapper.selectOne(appQueryWrapper);
  62. if (app == null)
  63. return "error";
  64. Map<String, Object> params = Dict.create()
  65. .set("appkey", bo.getAppkey())
  66. .set("equipmentCode", bo.getEquipmentCode())
  67. .set("goodsId", bo.getGoodsId())
  68. .set("goodsName", bo.getGoodsName())
  69. .set("time", bo.getTime())
  70. .set("userId", bo.getUserId())
  71. .set("userName", bo.getUserName())
  72. .set("userTelephone", bo.getUserTelephone())
  73. .set("vendorId", bo.getVendorId())
  74. .set("vendorName", bo.getVendorName())
  75. .set("sign", bo.getSign());
  76. return SignUtil.sign(params, app.getAppSecret());
  77. }
  78. // 添加扫码行为记录
  79. @Override
  80. public int add(StatisticsAddBo bo) {
  81. QueryWrapper<App> appQueryWrapper = new QueryWrapper<>();
  82. appQueryWrapper.eq("appkey", bo.getAppkey());
  83. appQueryWrapper.eq("state", 1);
  84. appQueryWrapper.eq("deleted", "0");
  85. App app = appMapper.selectOne(appQueryWrapper);
  86. if (app == null)
  87. return -1;
  88. Map<String, Object> params = Dict.create()
  89. .set("appkey", bo.getAppkey())
  90. .set("equipmentCode", bo.getEquipmentCode())
  91. .set("goodsId", bo.getGoodsId())
  92. .set("goodsName", bo.getGoodsName())
  93. .set("time", bo.getTime())
  94. .set("userId", bo.getUserId())
  95. .set("userName", bo.getUserName())
  96. .set("userTelephone", bo.getUserTelephone())
  97. .set("vendorId", bo.getVendorId())
  98. .set("vendorName", bo.getVendorName())
  99. .set("sign", bo.getSign());
  100. if (!SignUtil.verify(params, app.getAppSecret()))
  101. return -3;
  102. // 验证通过后,如果用户不存在,则添加用户;否则不管
  103. QueryWrapper<Equipment> equipmentQueryWrapper = new QueryWrapper<>();
  104. equipmentQueryWrapper.eq("equipment_code", bo.getEquipmentCode());
  105. Equipment equipment = equipmentMapper.selectOne(equipmentQueryWrapper);
  106. QueryWrapper<DlUser> userQueryWrapper = new QueryWrapper<>();
  107. userQueryWrapper.eq("user_id", bo.getUserId());
  108. DlUser user = dlUserMapper.selectOne(userQueryWrapper);
  109. if (user == null)
  110. dlUserMapper.insert(new DlUser(bo, equipment));
  111. // 添加扫码行为记录
  112. return statisticsMapper.insert(new Statistics(bo, equipment));
  113. }
  114. @Override
  115. public Map<String, Integer> getTimeDis(String option) {
  116. Map<String, Integer> map = new LinkedHashMap<>();
  117. if (option.equals("day")) { // 时间粒度:天
  118. for (int i = 0; i < 30; i++) {
  119. String day = DateUtil.offsetDay(new Date(), -i).toString("yyyy-MM-dd");
  120. map.put(day, statisticsMapper.selectTimeDisByDay(day));
  121. }
  122. } else if (option.equals("year")) { // 时间粒度:年
  123. for (int i = 0; i < 12; i++) {
  124. String year = DateUtil.offset(DateUtil.date(), DateField.YEAR, -i).toString("yyyy");
  125. map.put(year, statisticsMapper.selectTimeDisByYear(year));
  126. }
  127. } else { // 时间粒度:月
  128. for (int i = 0; i < 12; i++) {
  129. String month = DateUtil.offsetMonth(new Date(), -i).toString("yyyy-MM");
  130. map.put(month, statisticsMapper.selectTimeDisByMonth(month));
  131. }
  132. }
  133. return map;
  134. }
  135. @Override
  136. public List<TimeAndCountVo> getTimeDisToVo(String option) {
  137. List<TimeAndCountVo> vos = new ArrayList<>();
  138. if (option.equals("day")) { // 时间粒度:天
  139. for (int i = 0; i < 30; i++) {
  140. TimeAndCountVo vo = new TimeAndCountVo();
  141. vo.setTime(DateUtil.offsetDay(new Date(), -i).toString("yyyy-MM-dd"));
  142. vo.setCount(statisticsMapper.selectTimeDisByDay(vo.getTime()));
  143. vos.add(vo);
  144. }
  145. } else if (option.equals("year")) { // 时间粒度:年
  146. for (int i = 0; i < 12; i++) {
  147. TimeAndCountVo vo = new TimeAndCountVo();
  148. vo.setTime(DateUtil.offset(DateUtil.date(), DateField.YEAR, -i).toString("yyyy"));
  149. vo.setCount(statisticsMapper.selectTimeDisByYear(vo.getTime()));
  150. vos.add(vo);
  151. }
  152. } else { // 时间粒度:月
  153. for (int i = 0; i < 12; i++) {
  154. TimeAndCountVo vo = new TimeAndCountVo();
  155. vo.setTime(DateUtil.offsetMonth(new Date(), -i).toString("yyyy-MM"));
  156. vo.setCount(statisticsMapper.selectTimeDisByMonth(vo.getTime()));
  157. vos.add(vo);
  158. }
  159. }
  160. return vos;
  161. }
  162. }