BaseLocationInfoServiceImpl.java 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326
  1. package com.ruoyi.base.service.impl;
  2. import com.ruoyi.base.constant.Constant;
  3. import com.ruoyi.base.domain.BaseLocationInfo;
  4. import com.ruoyi.base.domain.BaseLocationZone;
  5. import com.ruoyi.base.domain.vo.*;
  6. import com.ruoyi.base.mapper.BaseLocationInfoMapper;
  7. import com.ruoyi.base.mapper.BaseLocationZoneMapper;
  8. import com.ruoyi.base.service.IBaseLocationInfoService;
  9. import com.ruoyi.base.utils.CommonUtils;
  10. import com.ruoyi.common.utils.DateUtils;
  11. import org.springframework.beans.BeanUtils;
  12. import org.springframework.beans.factory.annotation.Autowired;
  13. import org.springframework.data.redis.core.RedisTemplate;
  14. import org.springframework.stereotype.Service;
  15. import java.util.ArrayList;
  16. import java.util.List;
  17. import java.util.Map;
  18. import java.util.stream.Collectors;
  19. /**
  20. * 库位信息Service业务层处理
  21. *
  22. * @author andy
  23. * @date 2022-02-18
  24. */
  25. @Service
  26. public class BaseLocationInfoServiceImpl implements IBaseLocationInfoService {
  27. @Autowired
  28. private BaseLocationInfoMapper baseLocationInfoMapper;
  29. @Autowired
  30. private BaseLocationZoneMapper baseLocationZoneMapper;
  31. @Autowired
  32. private RedisTemplate<String, String> redisTemplate;
  33. /**
  34. * 查询库位信息
  35. *
  36. * @param id 库位信息主键
  37. * @return 库位信息
  38. */
  39. @Override
  40. public BaseLocationInfo selectBaseLocationInfoById(Long id) {
  41. return baseLocationInfoMapper.selectBaseLocationInfoById(id);
  42. }
  43. @Override
  44. public BaseLocationInfo selectBaseLocationInfoByIdOrNo(String idOrNo, Long warehouseId) {
  45. BaseLocationInfo locationInfo = null;
  46. try {
  47. locationInfo = baseLocationInfoMapper.selectBaseLocationInfoById(Long.parseLong(idOrNo));
  48. } catch (Exception e) {
  49. }
  50. if (locationInfo == null) {
  51. return baseLocationInfoMapper.selectBaseLocationInfoByLocationNo(idOrNo, warehouseId);
  52. } else {
  53. return locationInfo;
  54. }
  55. }
  56. /**
  57. * 查询库位信息列表
  58. *
  59. * @param baseLocationInfo 库位信息
  60. * @return 库位信息
  61. */
  62. @Override
  63. public List<BaseLocationInfo> selectBaseLocationInfoList(BaseLocationInfo baseLocationInfo) {
  64. return baseLocationInfoMapper.selectBaseLocationInfoList(baseLocationInfo);
  65. }
  66. /**
  67. * 新增库位信息
  68. *
  69. * @param baseLocationInfo 库位信息
  70. * @return 结果
  71. */
  72. @Override
  73. public int insertBaseLocationInfo(BaseLocationInfo baseLocationInfo) {
  74. baseLocationInfo.setCreateTime(DateUtils.getNowDate());
  75. return baseLocationInfoMapper.insertBaseLocationInfo(baseLocationInfo);
  76. }
  77. /**
  78. * 修改库位信息
  79. *
  80. * @param baseLocationInfo 库位信息
  81. * @return 结果
  82. */
  83. @Override
  84. public int updateBaseLocationInfo(BaseLocationInfo baseLocationInfo) {
  85. baseLocationInfo.setUpdateTime(DateUtils.getNowDate());
  86. return baseLocationInfoMapper.updateBaseLocationInfo(baseLocationInfo);
  87. }
  88. /**
  89. * 批量删除库位信息
  90. *
  91. * @param ids 需要删除的库位信息主键
  92. * @return 结果
  93. */
  94. @Override
  95. public int deleteBaseLocationInfoByIds(Long[] ids) {
  96. return baseLocationInfoMapper.deleteBaseLocationInfoByIds(ids);
  97. }
  98. /**
  99. * 删除库位信息信息
  100. *
  101. * @param id 库位信息主键
  102. * @return 结果
  103. */
  104. @Override
  105. public int deleteBaseLocationInfoById(Long id) {
  106. return baseLocationInfoMapper.deleteBaseLocationInfoById(id);
  107. }
  108. @Override
  109. public List<TreeSelectVO> buildLocationTreeSelect() {
  110. List<BasLocationTreeSelectVO> locationTrees = buildLocationTree(0L);
  111. return locationTrees.stream().map(TreeSelectVO::new).collect(Collectors.toList());
  112. }
  113. @Override
  114. public List<BasLocationTreeSelectVO> buildLocationTree(Long zoneId) {
  115. // 查询区域,库位树把区域也组装进去
  116. BaseLocationZone queryZone = new BaseLocationZone();
  117. queryZone.setStatus("0");
  118. List<BaseLocationZone> zoneList = baseLocationZoneMapper.selectBaseLocationZoneList(queryZone);
  119. List<BasLocationTreeSelectVO> locationTreeSelectVOList = new ArrayList<>();
  120. //循环遍历每个区域的库位
  121. for (BaseLocationZone zone : zoneList) {
  122. BasLocationTreeSelectVO parent = new BasLocationTreeSelectVO();
  123. List<BasLocationTreeSelectVO> children = new ArrayList<>();
  124. BaseLocationInfo query = new BaseLocationInfo();
  125. query.setZoneId(zone.getZoneId());
  126. List<BaseLocationInfo> locationInfoList = baseLocationInfoMapper.selectBaseLocationInfoList(query);
  127. for (BaseLocationInfo b : locationInfoList) {
  128. BasLocationTreeSelectVO child = new BasLocationTreeSelectVO();
  129. child.setId(b.getId());
  130. child.setTreeName(b.getLocationNo());
  131. children.add(child);
  132. }
  133. parent.setId(zone.getZoneId());
  134. parent.setTreeName(zone.getZoneName());
  135. parent.setChildren(children);
  136. locationTreeSelectVOList.add(parent);
  137. }
  138. return locationTreeSelectVOList;
  139. }
  140. @Override
  141. public boolean checkIsLocation(String idOrNo, Long warehouseId) {
  142. BaseLocationInfo baseLocationInfo = this.selectBaseLocationInfoByIdOrNo(idOrNo, warehouseId);
  143. if (baseLocationInfo == null) {
  144. return false;
  145. } else {
  146. return true;
  147. }
  148. }
  149. @Override
  150. public List<BaseLocationInfo> selectSortedLocatinListByZoneId(Long zoneId, Long warehouseId) {
  151. BaseLocationInfo query = new BaseLocationInfo();
  152. query.setWarehouseId(warehouseId);
  153. query.setZoneId(zoneId);
  154. return baseLocationInfoMapper.selectSortedLocationListByZoneId(query);
  155. }
  156. @Override
  157. public List<BaseLocationLotattListVO> selectSortedLocatinListByZoneId(List<Long> locationId, Long warehouseId, Map<String, String> lotatt, String sku) {
  158. List<BaseLocationLotattListVO> result = new ArrayList<>();
  159. List<BaseLocationLotattVO> locationLotattVOList = baseLocationInfoMapper.selectSortedLocationLotattListByLocationIdList(locationId, warehouseId, lotatt, sku);
  160. BaseLocationLotattListVO current = null;
  161. for (BaseLocationLotattVO vo : locationLotattVOList) {
  162. if (current == null || current.getId().longValue() != vo.getId().longValue()) {
  163. current = new BaseLocationLotattListVO();
  164. BeanUtils.copyProperties(vo, current);
  165. List<LotattInfo> lotattInfoList = new ArrayList<>();
  166. current.setLotattInfoList(lotattInfoList);
  167. result.add(current);
  168. }
  169. LotattInfo lotattObj = new LotattInfo();
  170. lotattObj.setSku(vo.getSku());
  171. lotattObj.setQty(vo.getQty());
  172. lotattObj.setLotattVO(vo.getLotattVO());
  173. current.getLotattInfoList().add(lotattObj);
  174. }
  175. return result;
  176. }
  177. @Override
  178. public int updateLocationStockStatus(Long id, String status) {
  179. return baseLocationInfoMapper.updateLocationStockStatus(id, status);
  180. }
  181. @Override
  182. public List<BaseLocationInfo> selectNeighborLocation(String colNo, Long zoneId) {
  183. List<BaseLocationInfo> colNoList = baseLocationInfoMapper.selectAllColNo();
  184. List<BaseLocationInfo> resultList = new ArrayList<>();
  185. String preColNo = "";
  186. String nextColNo = "";
  187. BaseLocationInfo currentLocation = null;
  188. for (int i = 0; i < colNoList.size(); i++) {
  189. if (!colNoList.get(i).getColNo().equals(colNo) && preColNo.equals("")) {
  190. preColNo = colNoList.get(i).getColNo();
  191. continue;
  192. }
  193. if (colNoList.get(i).getColNo().equals(colNo)) {
  194. currentLocation = colNoList.get(i);
  195. preColNo = colNoList.get(i - 1).getColNo();
  196. if (i + 1 < colNoList.size()) {
  197. nextColNo = colNoList.get(i + 1).getColNo();
  198. }
  199. continue;
  200. }
  201. if (nextColNo.equals(colNoList.get(i).getColNo())) {
  202. continue;
  203. } else {
  204. if (i + 1 < colNoList.size()) {
  205. if (currentLocation != null) {
  206. if (CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals("") || CommonUtils.getString(colNoList.get(i + 1).getBindSku()).equals(currentLocation.getBindSku())) {
  207. nextColNo = colNoList.get(i + 1).getColNo();
  208. }
  209. }
  210. }
  211. }
  212. }
  213. resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(colNo));
  214. resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(preColNo));
  215. resultList.addAll(baseLocationInfoMapper.selectLocationByColNo(nextColNo));
  216. return resultList;
  217. }
  218. @Override
  219. public Boolean verifyLocationIsIdle(String locationId, Long warehouseId) {
  220. BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId);
  221. if (!baseLocationInfo.getStockStatus().equals(Constant.STOCK_STATUS.STOCK00.getValue())) {
  222. return false;
  223. }
  224. return true;
  225. }
  226. @Override
  227. public Boolean verifyLocationIsInStock(String locationId, Long warehouseId) {
  228. BaseLocationInfo baseLocationInfo = selectBaseLocationInfoByIdOrNo(locationId, warehouseId);
  229. if (baseLocationInfo.getIsEmpty().equals(Constant.IS_YES.N.toString())) {
  230. return false;
  231. }
  232. return true;
  233. }
  234. @Override
  235. public boolean lockLocationStockStatus(Long id, Long warehouseId, String updateBy) {
  236. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  237. , Constant.STOCK_STATUS.STOCK10, null);
  238. }
  239. @Override
  240. public boolean unLockLocationStockStatus(Long id, Long warehouseId, String updateBy) {
  241. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  242. , Constant.STOCK_STATUS.STOCK00, null);
  243. }
  244. @Override
  245. public boolean lockLocationStockStatus(Long locationFromId, Long locationToId, Long warehouseId, String updateBy) {
  246. if (!lockLocationStockStatus(locationFromId, warehouseId, updateBy)) {
  247. return false;
  248. }
  249. return lockLocationStockStatus(locationToId, warehouseId, updateBy);
  250. }
  251. @Override
  252. public boolean unLockLocationStockStatus(Long locationFromId, Long locationToId, Long warehouseId, String updateBy) {
  253. if (!unLockLocationStockStatus(locationFromId, warehouseId, updateBy)) {
  254. return false;
  255. }
  256. return unLockLocationStockStatus(locationToId, warehouseId, updateBy);
  257. }
  258. @Override
  259. public boolean occupyLocationIsEmpty(Long id, Long warehouseId, String updateBy) {
  260. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  261. , null, Constant.IS_YES.Y);
  262. }
  263. @Override
  264. public boolean unOccupyLocationIsEmpty(Long id, Long warehouseId, String updateBy) {
  265. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  266. , null, Constant.IS_YES.N);
  267. }
  268. @Override
  269. public boolean updateLocationIdleAndEmpty(Long id, Long warehouseId, String updateBy) {
  270. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  271. , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.N);
  272. }
  273. @Override
  274. public boolean updateLocationIdleAndNoEmpty(Long id, Long warehouseId, String updateBy) {
  275. return updateLocationStockStatusAndIsEmpty(id, warehouseId, updateBy
  276. , Constant.STOCK_STATUS.STOCK00, Constant.IS_YES.Y);
  277. }
  278. private boolean updateLocationStockStatusAndIsEmpty(Long id, Long warehouseId, String updateBy
  279. , Constant.STOCK_STATUS stockStatus, Constant.IS_YES isYes) {
  280. BaseLocationInfo locationInfo = selectBaseLocationInfoById(id);
  281. if (locationInfo == null) {
  282. return false;
  283. }
  284. BaseLocationInfo locationInfoFromUpdate = new BaseLocationInfo();
  285. locationInfoFromUpdate.setId(locationInfo.getId());
  286. if (stockStatus != null) {
  287. locationInfoFromUpdate.setStockStatus(stockStatus.getValue());
  288. }
  289. if (isYes != null) {
  290. locationInfoFromUpdate.setIsEmpty(isYes.getValue());
  291. }
  292. locationInfoFromUpdate.setUpdateBy(updateBy);
  293. locationInfoFromUpdate.setWarehouseId(warehouseId);
  294. return this.updateBaseLocationInfo(locationInfoFromUpdate) > 0;
  295. }
  296. }