TWarehousebillsitemsServiceImpl.java 9.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  3. import com.ruoyi.basicData.mapper.TWarehouseMapper;
  4. import com.ruoyi.common.core.domain.AjaxResult;
  5. import com.ruoyi.common.core.domain.entity.TWarehouse;
  6. import com.ruoyi.common.core.domain.enums.WarehouseEnum;
  7. import com.ruoyi.common.utils.DateUtils;
  8. import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
  9. import com.ruoyi.warehouseBusiness.domain.dto.WarehouseDTO;
  10. import com.ruoyi.warehouseBusiness.domain.enums.WarehouseTypeEnum;
  11. import com.ruoyi.warehouseBusiness.domain.vo.WarehouseTimeIntervalVO;
  12. import com.ruoyi.warehouseBusiness.mapper.TWarehousebillsitemsMapper;
  13. import com.ruoyi.warehouseBusiness.service.ITWarehousebillsitemsService;
  14. import org.springframework.beans.factory.annotation.Autowired;
  15. import org.springframework.stereotype.Service;
  16. import java.util.*;
  17. import java.util.stream.Collectors;
  18. /**
  19. * 仓库明细从表Service业务层处理
  20. *
  21. * @author ruoyi
  22. * @date 2020-12-11
  23. */
  24. @Service
  25. public class TWarehousebillsitemsServiceImpl implements ITWarehousebillsitemsService {
  26. @Autowired
  27. private TWarehouseMapper warehouseMapper;
  28. @Autowired
  29. private TWarehousebillsitemsMapper tWarehousebillsitemsMapper;
  30. /**
  31. * 查询仓库明细从表
  32. *
  33. * @param fId 仓库明细从表ID
  34. * @return 仓库明细从表
  35. */
  36. @Override
  37. public TWarehousebillsitems selectTWarehousebillsitemsById(Long fId) {
  38. return tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(fId);
  39. }
  40. /**
  41. * 查询仓库明细从表列表
  42. *
  43. * @param tWarehousebillsitems 仓库明细从表
  44. * @return 仓库明细从表
  45. */
  46. @Override
  47. public List<TWarehousebillsitems> selectTWarehousebillsitemsList(TWarehousebillsitems tWarehousebillsitems) {
  48. return tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  49. }
  50. /**
  51. * 新增仓库明细从表
  52. *
  53. * @param tWarehousebillsitems 仓库明细从表
  54. * @return 结果
  55. */
  56. @Override
  57. public int insertTWarehousebillsitems(TWarehousebillsitems tWarehousebillsitems) {
  58. tWarehousebillsitems.setCreateTime(DateUtils.getNowDate());
  59. return tWarehousebillsitemsMapper.insertTWarehousebillsitems(tWarehousebillsitems);
  60. }
  61. /**
  62. * 修改仓库明细从表
  63. *
  64. * @param tWarehousebillsitems 仓库明细从表
  65. * @return 结果
  66. */
  67. @Override
  68. public int updateTWarehousebillsitems(TWarehousebillsitems tWarehousebillsitems) {
  69. tWarehousebillsitems.setUpdateTime(DateUtils.getNowDate());
  70. return tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  71. }
  72. /**
  73. * 批量删除仓库明细从表
  74. *
  75. * @param fIds 需要删除的仓库明细从表ID
  76. * @return 结果
  77. */
  78. @Override
  79. public int deleteTWarehousebillsitemsByIds(Long[] fIds) {
  80. return tWarehousebillsitemsMapper.deleteTWarehousebillsitemsByIds(fIds);
  81. }
  82. /**
  83. * 删除仓库明细从表信息
  84. *
  85. * @param fId 仓库明细从表ID
  86. * @return 结果
  87. */
  88. @Override
  89. public int deleteTWarehousebillsitemsById(Long fId) {
  90. return tWarehousebillsitemsMapper.deleteTWarehousebillsitemsById(fId);
  91. }
  92. @Override
  93. public int warehouseItemfItemstatus(Long fPid, Long fItemstatus) {
  94. return tWarehousebillsitemsMapper.warehouseItemfItemstatus(fPid, fItemstatus);
  95. }
  96. @Override
  97. public List<Map<String, Object>> selectStorageFeeItemfTruckNo() {
  98. return tWarehousebillsitemsMapper.selectStorageFeeItemfTruckNo();
  99. }
  100. /**
  101. * 根据日期区间计算 仓库入库数量比较
  102. *
  103. * @param warehouseDto 查询条件
  104. * @return
  105. */
  106. @Override
  107. public AjaxResult warehouseComparison(WarehouseDTO warehouseDto) {
  108. warehouseDto.setWarehouseType(WarehouseTypeEnum.SJRK.getType());
  109. Date queryTime = warehouseDto.getQueryTime();
  110. List<String> newTimeList = new ArrayList<>();
  111. List<String> timeList = new ArrayList<>();
  112. // 结果
  113. List<WarehouseTimeIntervalVO> firstItemsList;
  114. List<WarehouseTimeIntervalVO> secondItemsList;
  115. // 按照年
  116. if (WarehouseEnum.BY_YEAR.getType().equals(warehouseDto.getQueryType())) {
  117. // 获取上一年
  118. String year = DateUtils.getYear(queryTime);
  119. timeList.add(year + "-01-01");
  120. timeList.add(year + "-12-31");
  121. warehouseDto.setTimeList(timeList);
  122. firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  123. // 获取当前年
  124. Date newDate = DateUtils.addYears(queryTime, 1);
  125. String newYear = DateUtils.getYear(newDate);
  126. newTimeList.add(newYear + "-01-01");
  127. newTimeList.add(newYear + "-12-31");
  128. warehouseDto.setTimeList(newTimeList);
  129. secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  130. return queryWarehouseQty(firstItemsList, secondItemsList);
  131. } else
  132. // 按照月
  133. if (WarehouseEnum.BY_MONTH.getType().equals(warehouseDto.getQueryType())) {
  134. // 获取年
  135. String year = DateUtils.getYear(queryTime);
  136. // 获取月
  137. String month = DateUtils.getMonth(queryTime);
  138. timeList.add(DateUtils.getFirstDay(Integer.parseInt(year), Integer.parseInt(month)));
  139. timeList.add(DateUtils.getLastDay(Integer.parseInt(year), Integer.parseInt(month)));
  140. warehouseDto.setTimeList(timeList);
  141. firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  142. Date newDate = DateUtils.addMonths(queryTime, 1);
  143. // 获取年
  144. String newYear = DateUtils.getYear(newDate);
  145. // 获取月
  146. String newMonth = DateUtils.getMonth(newDate);
  147. newTimeList.add(DateUtils.getFirstDay(Integer.parseInt(newYear), Integer.parseInt(newMonth)));
  148. newTimeList.add(DateUtils.getLastDay(Integer.parseInt(newYear), Integer.parseInt(newMonth)));
  149. warehouseDto.setTimeList(newTimeList);
  150. secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  151. return queryWarehouseQty(firstItemsList, secondItemsList);
  152. } else
  153. // 按照周
  154. if (WarehouseEnum.BY_WEEK.getType().equals(warehouseDto.getQueryType())) {
  155. // 上周
  156. Date date = DateUtils.addDays(queryTime, -7);
  157. timeList.add(DateUtils.dateTime(date));
  158. timeList.add(DateUtils.dateTime(queryTime));
  159. warehouseDto.setTimeList(timeList);
  160. firstItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  161. // 本周
  162. Date newDate = DateUtils.addDays(queryTime, 1);
  163. newTimeList.add(DateUtils.dateTime(newDate));
  164. newTimeList.add(DateUtils.dateTime(DateUtils.addDays(newDate, 6)));
  165. warehouseDto.setTimeList(newTimeList);
  166. secondItemsList = tWarehousebillsitemsMapper.selectInboundQtyByTime(warehouseDto);
  167. return queryWarehouseQty(firstItemsList, secondItemsList);
  168. }
  169. return AjaxResult.success();
  170. }
  171. /**
  172. * 查询数量
  173. *
  174. * @param firstItemsList 上次
  175. * @param secondItemsList 本次
  176. * @return
  177. */
  178. private AjaxResult queryWarehouseQty(List<WarehouseTimeIntervalVO> firstItemsList,
  179. List<WarehouseTimeIntervalVO> secondItemsList) {
  180. // 如果都为空
  181. if (CollectionUtils.isEmpty(firstItemsList) && CollectionUtils.isEmpty(secondItemsList)) {
  182. return AjaxResult.error();
  183. }
  184. if (CollectionUtils.isNotEmpty(firstItemsList)) {
  185. List<Long> warehouseIds = firstItemsList.stream().filter(li -> Objects.nonNull(li.getWarehouseId())).map(WarehouseTimeIntervalVO::getWarehouseId)
  186. .distinct().collect(Collectors.toList());
  187. List<TWarehouse> warehouseList = warehouseMapper.selectByIds(warehouseIds);
  188. firstItemsList.forEach(li -> {
  189. li.setLastQty(li.getSumQty());
  190. Optional<TWarehouse> warehouseFirst = warehouseList.stream().filter(ware -> Objects.equals(ware.getfId(), li.getWarehouseId())).findFirst();
  191. warehouseFirst.ifPresent(tWarehouse -> li.setWarehouseName(tWarehouse.getfName()));
  192. Optional<WarehouseTimeIntervalVO> first = secondItemsList.stream().filter(second -> Objects.equals(li.getWarehouseId(), second.getWarehouseId()))
  193. .findFirst();
  194. if (first.isPresent()) {
  195. li.setThisQty(first.get().getSumQty());
  196. li.setDifference(li.getThisQty() - li.getLastQty());
  197. } else {
  198. li.setDifference(li.getLastQty() * -1);
  199. }
  200. });
  201. return AjaxResult.success(firstItemsList);
  202. }
  203. List<Long> warehouseIds = firstItemsList.stream().filter(li -> Objects.nonNull(li.getWarehouseId())).map(WarehouseTimeIntervalVO::getWarehouseId)
  204. .distinct().collect(Collectors.toList());
  205. List<TWarehouse> warehouseList = warehouseMapper.selectByIds(warehouseIds);
  206. secondItemsList.forEach(li -> {
  207. li.setThisQty(li.getSumQty());
  208. li.setDifference(li.getLastQty());
  209. Optional<TWarehouse> warehouseFirst = warehouseList.stream().filter(ware -> Objects.equals(ware.getfId(), li.getWarehouseId())).findFirst();
  210. warehouseFirst.ifPresent(tWarehouse -> li.setWarehouseName(tWarehouse.getfName()));
  211. });
  212. return AjaxResult.success(secondItemsList);
  213. }
  214. }