TWarehousebillsitemsServiceImpl.java 9.9 KB

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