TwinRzCalcMonthServiceImpl.java 8.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246
  1. package com.jjt.ws.service.impl;
  2. import com.jjt.calc.domain.TwinCalcDayYhj;
  3. import com.jjt.calc.service.ITwinCalcDayYhjService;
  4. import com.jjt.common.utils.DateUtils;
  5. import com.jjt.elec.domain.ElecPrice;
  6. import com.jjt.elec.service.IElecPriceService;
  7. import com.jjt.ws.domain.TwinRzCalcMonth;
  8. import com.jjt.ws.domain.TwinWorkshopCalc;
  9. import com.jjt.ws.mapper.TwinRzCalcMonthMapper;
  10. import com.jjt.ws.service.ITwinRzCalcMonthService;
  11. import com.jjt.ws.vo.MonthCalcVO;
  12. import org.springframework.stereotype.Service;
  13. import javax.annotation.Resource;
  14. import java.math.BigDecimal;
  15. import java.math.RoundingMode;
  16. import java.time.LocalDate;
  17. import java.util.*;
  18. /**
  19. * 染整月统计Service业务层处理
  20. *
  21. * @author wukai
  22. * @date 2025-04-23
  23. */
  24. @Service
  25. public class TwinRzCalcMonthServiceImpl implements ITwinRzCalcMonthService {
  26. @Resource
  27. private TwinRzCalcMonthMapper twinRzCalcMonthMapper;
  28. @Resource
  29. private IElecPriceService elecPriceService;
  30. @Resource
  31. private ITwinCalcDayYhjService yhjService;
  32. /**
  33. * 查询染整月统计
  34. *
  35. * @param calcId 染整月统计主键
  36. * @return 染整月统计
  37. */
  38. @Override
  39. public TwinRzCalcMonth selectTwinRzCalcMonthByCalcId(Long calcId) {
  40. return twinRzCalcMonthMapper.selectTwinRzCalcMonthByCalcId(calcId);
  41. }
  42. /**
  43. * 查询染整月统计列表
  44. *
  45. * @param twinRzCalcMonth 染整月统计
  46. * @return 染整月统计
  47. */
  48. @Override
  49. public List<TwinRzCalcMonth> selectTwinRzCalcMonthList(TwinRzCalcMonth twinRzCalcMonth) {
  50. return twinRzCalcMonthMapper.selectTwinRzCalcMonthList(twinRzCalcMonth);
  51. }
  52. /**
  53. * 新增染整月统计
  54. *
  55. * @param twinRzCalcMonth 染整月统计
  56. * @return 结果
  57. */
  58. @Override
  59. public int insertTwinRzCalcMonth(TwinRzCalcMonth twinRzCalcMonth) {
  60. return twinRzCalcMonthMapper.insertTwinRzCalcMonth(twinRzCalcMonth);
  61. }
  62. /**
  63. * 修改染整月统计
  64. *
  65. * @param twinRzCalcMonth 染整月统计
  66. * @return 结果
  67. */
  68. @Override
  69. public int updateTwinRzCalcMonth(TwinRzCalcMonth twinRzCalcMonth) {
  70. LocalDate date = DateUtils.toLocalDate(twinRzCalcMonth.getDataDate());
  71. int year = date.getYear();
  72. int month = date.getMonthValue();
  73. ElecPrice elecPrice = elecPriceService.selectElecPriceByMonth(year, month);
  74. if (twinRzCalcMonth.getQMidUse() != null) {
  75. twinRzCalcMonth.setQMidPrice(twinRzCalcMonth.getQMidUse().multiply(elecPrice.getMidStreamPrice()));
  76. }
  77. twinRzCalcMonth.setPrice();
  78. if (twinRzCalcMonth.getLength() != null) {
  79. BigDecimal lp = twinRzCalcMonth.getTotalPrice().divide(twinRzCalcMonth.getLength(), 6, RoundingMode.HALF_UP);
  80. twinRzCalcMonth.setLengthPrice(lp);
  81. }
  82. if (twinRzCalcMonth.getWeight() != null) {
  83. BigDecimal wp = twinRzCalcMonth.getTotalPrice().divide(twinRzCalcMonth.getWeight(), 6, RoundingMode.HALF_UP);
  84. twinRzCalcMonth.setWeightPrice(wp);
  85. }
  86. return twinRzCalcMonthMapper.updateTwinRzCalcMonth(twinRzCalcMonth);
  87. }
  88. /**
  89. * 批量删除染整月统计
  90. *
  91. * @param calcIds 需要删除的染整月统计主键
  92. * @return 结果
  93. */
  94. @Override
  95. public int deleteTwinRzCalcMonthByCalcIds(Long[] calcIds) {
  96. return twinRzCalcMonthMapper.deleteTwinRzCalcMonthByCalcIds(calcIds);
  97. }
  98. /**
  99. * 删除染整月统计信息
  100. *
  101. * @param calcId 染整月统计主键
  102. * @return 结果
  103. */
  104. @Override
  105. public int deleteTwinRzCalcMonthByCalcId(Long calcId) {
  106. return twinRzCalcMonthMapper.deleteTwinRzCalcMonthByCalcId(calcId);
  107. }
  108. private TwinRzCalcMonth selectExists(Date date) {
  109. TwinRzCalcMonth search = new TwinRzCalcMonth();
  110. search.setDataDate(date);
  111. List<TwinRzCalcMonth> list = selectTwinRzCalcMonthList(search);
  112. if (list.size() > 0) {
  113. return list.get(0);
  114. } else {
  115. return search;
  116. }
  117. }
  118. /**
  119. * 染整线月统计
  120. *
  121. * @param date 时间
  122. * @param calcList 统计数据
  123. */
  124. @Override
  125. public void calc(Date date, List<TwinWorkshopCalc> calcList) {
  126. TwinCalcDayYhj search = new TwinCalcDayYhj();
  127. Map<String, Object> params = new HashMap<>();
  128. params.put("beginTime", DateUtils.dateTime(date));
  129. params.put("endTime", DateUtils.dateTime(date));
  130. search.setParams(params);
  131. List<TwinCalcDayYhj> yhjList = yhjService.selectTwinCalcDayYhjList(search);
  132. Integer totalLength = yhjList.stream()
  133. .map(TwinCalcDayYhj::getLength)
  134. .filter(Objects::nonNull)
  135. .reduce(0, Integer::sum);
  136. BigDecimal totalWeight = yhjList.stream()
  137. .map(TwinCalcDayYhj::getWeight)
  138. .filter(Objects::nonNull)
  139. .reduce(BigDecimal.ZERO, BigDecimal::add);
  140. TwinRzCalcMonth vo = selectExists(date);
  141. for (TwinWorkshopCalc calc : calcList) {
  142. switch (calc.getWsCode()) {
  143. case "WS03-D-QZ":
  144. vo.setQzUse(calc.getTotalValue());
  145. vo.setQzPrice(calc.getTotalPrice());
  146. vo.setQzFUse(calc.getPeakValue());
  147. vo.setQzPUse(calc.getFlatValue());
  148. vo.setQzGUse(calc.getValleyValue());
  149. vo.setQzJfUse(calc.getSuperPeakValue());
  150. break;
  151. case "WS03-D-HZ":
  152. vo.setHzUse(calc.getTotalValue());
  153. vo.setHzPrice(calc.getTotalPrice());
  154. vo.setHzFUse(calc.getPeakValue());
  155. vo.setHzPUse(calc.getFlatValue());
  156. vo.setHzGUse(calc.getValleyValue());
  157. vo.setHzJfUse(calc.getSuperPeakValue());
  158. break;
  159. case "WS03-D-YR":
  160. vo.setYrUse(calc.getTotalValue());
  161. vo.setYrPrice(calc.getTotalPrice());
  162. vo.setYrFUse(calc.getPeakValue());
  163. vo.setYrPUse(calc.getFlatValue());
  164. vo.setYrGUse(calc.getValleyValue());
  165. vo.setYrJfUse(calc.getSuperPeakValue());
  166. break;
  167. case "WS03-S-YR":
  168. vo.setSPrice(calc.getTotalPrice());
  169. vo.setSUse(calc.getTotalValue());
  170. break;
  171. case "WS03-Q-DY":
  172. vo.setQLowPrice(calc.getTotalPrice());
  173. vo.setQLowUse(calc.getTotalValue());
  174. break;
  175. case "WS03-Q-ZY":
  176. // if (vo.getQMidUse() != null && vo.getQMidUse().intValue() != 0) {
  177. vo.setQMidPrice(calc.getTotalPrice());
  178. vo.setQMidUse(calc.getTotalValue());
  179. // }
  180. break;
  181. default:
  182. }
  183. }
  184. vo.setPrice();
  185. if (vo.getDPrice().compareTo(BigDecimal.ZERO) != 0) {
  186. // BigDecimal baseD = BigDecimal.valueOf(45000);
  187. // BigDecimal baseL = BigDecimal.valueOf(120000).multiply(BigDecimal.valueOf(0.95 + (Math.random()) * 0.1));
  188. // BigDecimal length = vo.getDPrice().multiply(baseL).divide(baseD, 2, RoundingMode.HALF_UP);
  189. BigDecimal length = BigDecimal.valueOf(totalLength);
  190. BigDecimal weight = totalWeight;
  191. vo.setLength(length);
  192. vo.setWeight(weight);
  193. BigDecimal lp = vo.getTotalPrice().divide(vo.getLength(), 6, RoundingMode.HALF_UP);
  194. vo.setLengthPrice(lp);
  195. BigDecimal wp = vo.getTotalPrice().divide(vo.getWeight(), 6, RoundingMode.HALF_UP);
  196. vo.setWeightPrice(wp);
  197. }
  198. if (vo.getCalcId() != null) {
  199. updateTwinRzCalcMonth(vo);
  200. } else {
  201. insertTwinRzCalcMonth(vo);
  202. }
  203. }
  204. private void setWorkshopData(MonthCalcVO.D.DD dd, TwinWorkshopCalc calc) {
  205. dd.setUse(calc.getTotalValue());
  206. dd.setPrice(calc.getTotalPrice());
  207. dd.setFPrice(calc.getPeakUPrice());
  208. dd.setFUse(calc.getPeakValue());
  209. dd.setPPrice(calc.getFlatUPrice());
  210. dd.setPUse(calc.getFlatValue());
  211. dd.setGPrice(calc.getValleyUPrice());
  212. dd.setGUse(calc.getValleyValue());
  213. dd.setJfPrice(calc.getSuperPeakUPrice());
  214. dd.setJfUse(calc.getSuperPeakValue());
  215. }
  216. private void setQuarterData(MonthCalcVO.Q q, TwinWorkshopCalc calc, BigDecimal unitPrice, String type) {
  217. switch (type) {
  218. case "low":
  219. q.setLowPrice(calc.getTotalPrice());
  220. q.setLowUse(calc.getTotalValue());
  221. q.setLowUnitPrice(unitPrice);
  222. break;
  223. case "mid":
  224. q.setMidPrice(calc.getTotalPrice());
  225. q.setMidUse(calc.getTotalValue());
  226. q.setMidUnitPrice(unitPrice);
  227. break;
  228. default:
  229. }
  230. }
  231. }