ApiAllServiceImpl.java 9.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262
  1. package com.jjt.biz.service.impl;
  2. import com.jjt.biz.service.IApiAllService;
  3. import com.jjt.biz.vo.*;
  4. import com.jjt.common.constant.CacheConstants;
  5. import com.jjt.common.core.redis.RedisCache;
  6. import com.jjt.common.utils.DateUtils;
  7. import com.jjt.ws.domain.TwinWorkshopCalc;
  8. import com.jjt.ws.service.ITwinWorkshopCalcService;
  9. import lombok.extern.slf4j.Slf4j;
  10. import org.springframework.stereotype.Service;
  11. import javax.annotation.Resource;
  12. import java.math.BigDecimal;
  13. import java.math.RoundingMode;
  14. import java.time.LocalDate;
  15. import java.time.LocalDateTime;
  16. import java.util.*;
  17. import java.util.stream.Collectors;
  18. /**
  19. * 首页统计数据
  20. *
  21. * @author wukai
  22. * @date 2024/5/4 20:35
  23. */
  24. @Service
  25. @Slf4j
  26. public class ApiAllServiceImpl implements IApiAllService {
  27. @Resource
  28. private RedisCache redisCache;
  29. @Resource
  30. private ITwinWorkshopCalcService wsCalcService;
  31. /**
  32. * 获取当前库存数据
  33. *
  34. * @return 库存数据
  35. */
  36. @Override
  37. public Map<String, Object> stock() {
  38. return redisCache.getCacheObject(CacheConstants.VMS_STOCK);
  39. }
  40. /**
  41. * 获取本月平均值
  42. *
  43. * @return 结果
  44. */
  45. @Override
  46. public AvgMonthVO avgMonth() {
  47. AvgMonthVO vo = new AvgMonthVO();
  48. vo.mock();
  49. redisCache.setCacheObject(CacheConstants.AVG_MONTH, vo);
  50. return redisCache.getCacheObject(CacheConstants.AVG_MONTH);
  51. }
  52. /**
  53. * 获取生产情况
  54. *
  55. * @return 结果
  56. */
  57. @Override
  58. public CurrYieldVO currYield() {
  59. CurrYieldVO vo = new CurrYieldVO();
  60. vo.mock();
  61. IndexData todayData = redisCache.getCacheObject(CacheConstants.INDEX_CALC);
  62. IndexData currData = redisCache.getCacheObject(CacheConstants.INDEX_ALARM);
  63. vo.getJb().setYield(BigDecimal.valueOf(todayData.getEfficiency().getTotalLength()).setScale(0, RoundingMode.HALF_UP));
  64. vo.getJb().setYieldMax(BigDecimal.valueOf(50000));
  65. BigDecimal jdl = BigDecimal.valueOf(todayData.getEfficiency().getAEfficiency() + todayData.getEfficiency().getBEfficiency()).divide(BigDecimal.valueOf(2), 0, RoundingMode.HALF_UP);
  66. if (todayData.getEfficiency().getBEfficiency() == 0f) {
  67. jdl = BigDecimal.valueOf(todayData.getEfficiency().getAEfficiency()).setScale(0, RoundingMode.HALF_UP);
  68. }
  69. vo.getJb().setJdl(jdl);
  70. // vo.getJb().setOpen(currData.getDevice().getOnline(),currData.getDevice().getTotal());
  71. vo.getJb().setOpenNum(currData.getDevice().getOnline());
  72. vo.getJb().setTotalNum(currData.getDevice().getTotal());
  73. vo.getJb().setOpenRatio(BigDecimal.valueOf(currData.getDevice().getRunningRatio()).setScale(0, RoundingMode.HALF_UP));
  74. redisCache.setCacheObject(CacheConstants.CURR_YIELD, vo);
  75. return redisCache.getCacheObject(CacheConstants.CURR_YIELD);
  76. }
  77. /**
  78. * 获取生产趋势
  79. *
  80. * @return 结果
  81. */
  82. @Override
  83. public List<ProdTradeVO> prodTrade() {
  84. List<ProdTradeVO> list = new ArrayList<>();
  85. IndexData id = redisCache.getCacheObject(CacheConstants.INDEX_CALC);
  86. List<WeekData> weekDataList = id.getWeekData();
  87. for (WeekData wd : weekDataList) {
  88. ProdTradeVO vo = new ProdTradeVO();
  89. vo.mock();
  90. vo.setJbLength(wd.getLength());
  91. vo.setJbWeight(wd.getWeight());
  92. LocalDate localDate = LocalDate.parse(wd.getTime());
  93. vo.setDate(week(localDate));
  94. vo.setTips(localDate.toString());
  95. list.add(vo);
  96. }
  97. return list;
  98. }
  99. /**
  100. * 获取能耗趋势
  101. * 1 WS02-D 经编车间 经编车间用电
  102. * 2 WS03-D-QZ 前整车间 染整线-前整车间用电
  103. * 3 WS03-D-YR 印染车间 染整线-印染车间用电
  104. * 4 WS03-D-HZ 后整车间 染整线-后整车间用电
  105. * 5 WS03-S-YR 印染工业水 染整线-工业水
  106. * 6 WS03-Q-DY 低压蒸汽 2/3低压蒸汽
  107. * 7 WS03-Q-ZY 中压蒸汽 中压蒸汽
  108. *
  109. * @return 结果
  110. */
  111. @Override
  112. public List<EnergyTradeVO> energyTrade() {
  113. // redisCache.setCacheObject(CacheConstants.ENERGY_TRADE, mockEnergy());
  114. List<EnergyTradeVO> list = new ArrayList<>();
  115. LocalDate end = LocalDateTime.now().minusHours(7).toLocalDate().minusDays(1);
  116. //一个月数据
  117. LocalDate start = end.minusMonths(1);
  118. List<TwinWorkshopCalc> wsList = wsCalcService.listByWsCodeDate(null, DateUtils.toDate(start));
  119. Map<Date, List<TwinWorkshopCalc>> wsMap = wsList.stream().collect(Collectors.groupingBy(TwinWorkshopCalc::getDataDate, LinkedHashMap::new, Collectors.toList()));
  120. for (Map.Entry<Date, List<TwinWorkshopCalc>> entry : wsMap.entrySet()) {
  121. EnergyTradeVO vo = new EnergyTradeVO();
  122. LocalDate ldt = DateUtils.toLocalDate(entry.getKey());
  123. List<TwinWorkshopCalc> wss = entry.getValue();
  124. vo.setDate(ldt.getDayOfMonth() + "");
  125. vo.setTips(ldt.toString());
  126. EnergyTradeVO.RZ rz = new EnergyTradeVO.RZ();
  127. rz.setElectricity(BigDecimal.ZERO);
  128. rz.setPrice(BigDecimal.ZERO);
  129. for (TwinWorkshopCalc ws : wss) {
  130. switch (ws.getWsCode()) {
  131. case "WS02-D":
  132. //经编车间用电
  133. vo.getJb().setElectricity(ws.getTotalValue());
  134. vo.getJb().setPrice(ws.getTotalPrice() != null ? ws.getTotalPrice() : BigDecimal.ZERO);
  135. break;
  136. case "WS03-D-QZ":
  137. //染整线-前整车间用电
  138. case "WS03-D-YR":
  139. //染整线-印染车间用电
  140. case "WS03-D-HZ":
  141. //染整线-后整车间用电
  142. if (ws.getTotalValue() != null) {
  143. rz.setElectricity(rz.getElectricity().add(ws.getTotalValue()));
  144. }
  145. if (ws.getTotalPrice() != null) {
  146. rz.setPrice(rz.getPrice().add(ws.getTotalPrice()));
  147. }
  148. break;
  149. case "WS03-S-YR":
  150. rz.setWater(ws.getTotalValue());
  151. if (ws.getTotalPrice() != null) {
  152. rz.setPrice(rz.getPrice().add(ws.getTotalPrice()));
  153. }
  154. //染整线-工业水
  155. break;
  156. case "WS03-Q-DY":
  157. rz.setSteam(ws.getTotalValue());
  158. if (ws.getTotalPrice() != null) {
  159. rz.setPrice(rz.getPrice().add(ws.getTotalPrice()));
  160. }
  161. //染整线-工业水
  162. //2/3低压蒸汽
  163. break;
  164. case "WS03-Q-ZY":
  165. //中压蒸汽
  166. break;
  167. default:
  168. }
  169. }
  170. rz.setPrice(rz.getPrice().setScale(0, RoundingMode.HALF_UP));
  171. vo.getJb().setPrice(vo.getJb().getPrice().setScale(0, RoundingMode.HALF_UP));
  172. vo.setRz(rz);
  173. list.add(vo);
  174. }
  175. return list;
  176. }
  177. private List<ProdTradeVO> mockProd() {
  178. List<ProdTradeVO> list = new ArrayList<>();
  179. LocalDate end = LocalDate.now().minusDays(1);
  180. LocalDate start = end.minusDays(6);
  181. do {
  182. ProdTradeVO vo = new ProdTradeVO();
  183. vo.setDate(week(start));
  184. vo.setTips(start.toString());
  185. vo.mock();
  186. list.add(vo);
  187. start = start.plusDays(1);
  188. } while (!start.isAfter(end));
  189. return list;
  190. }
  191. private List<EnergyTradeVO> mockEnergy() {
  192. List<EnergyTradeVO> list = new ArrayList<>();
  193. LocalDate end = LocalDate.now().minusDays(1);
  194. LocalDate start = end.minusDays(30);
  195. do {
  196. EnergyTradeVO vo = new EnergyTradeVO();
  197. vo.setDate(start.getDayOfMonth() + "");
  198. vo.setTips(start.toString());
  199. vo.mock();
  200. list.add(vo);
  201. start = start.plusDays(1);
  202. } while (!start.isAfter(end));
  203. return list;
  204. }
  205. /**
  206. * 获取周几
  207. *
  208. * @param date
  209. * @return
  210. */
  211. private String week(LocalDate date) {
  212. String[] weeks = {"一", "二", "三", "四", "五", "六", "日"};
  213. return "周" + weeks[date.getDayOfWeek().getValue() - 1];
  214. }
  215. public static void main(String[] args) {
  216. int day = 7;
  217. LocalDate end = LocalDate.now().minusDays(1);
  218. LocalDate start = end.minusDays(day - 1);
  219. do {
  220. System.err.println(start + "\t" + start.getDayOfWeek().getValue());
  221. start = start.plusDays(1);
  222. } while (!start.isAfter(end));
  223. }
  224. /**
  225. * 模拟数据
  226. */
  227. @Override
  228. public void mock() {
  229. YrTwinVO rzVO = redisCache.getCacheObject(CacheConstants.RZ_MOCK);
  230. TwinAllVO vo = new TwinAllVO();
  231. vo.setStock(stock());
  232. vo.setAvgMonth(avgMonth());
  233. CurrYieldVO currYieldVO = currYield();
  234. CurrYieldVO.RZ rz = currYieldVO.getRz();
  235. rz.setYield(rzVO.getStatus().getLength());
  236. vo.setCurrYield(currYieldVO);
  237. vo.setProdTrade(prodTrade());
  238. vo.setEnergyTrade(energyTrade());
  239. redisCache.setCacheObject(CacheConstants.ALL_MOCK, vo);
  240. }
  241. }