TWarehouseServiceImpl.java 35 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925
  1. package com.ruoyi.basicData.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  5. import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
  6. import com.ruoyi.basicData.domain.TCorps;
  7. import com.ruoyi.basicData.domain.TCustomerContact;
  8. import com.ruoyi.basicData.domain.TWarehouseArea;
  9. import com.ruoyi.basicData.mapper.TCorpsMapper;
  10. import com.ruoyi.basicData.mapper.TCustomerContactMapper;
  11. import com.ruoyi.basicData.mapper.TWarehouseAreaMapper;
  12. import com.ruoyi.basicData.mapper.TWarehouseMapper;
  13. import com.ruoyi.basicData.service.ITWarehouseService;
  14. import com.ruoyi.common.constant.UserConstants;
  15. import com.ruoyi.common.core.domain.AjaxResult;
  16. import com.ruoyi.common.core.domain.TreeSelect;
  17. import com.ruoyi.common.core.domain.entity.SysUser;
  18. import com.ruoyi.common.core.domain.entity.TWarehouse;
  19. import com.ruoyi.common.core.domain.model.LoginUser;
  20. import com.ruoyi.common.exception.CustomException;
  21. import com.ruoyi.common.utils.DateUtils;
  22. import com.ruoyi.common.utils.SecurityUtils;
  23. import com.ruoyi.common.utils.StringUtils;
  24. import com.ruoyi.system.service.ISysDictDataService;
  25. import com.ruoyi.warehouseBusiness.domain.TAnnex;
  26. import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
  27. import com.ruoyi.warehouseBusiness.domain.dto.WarehouseSubmitDTO;
  28. import com.ruoyi.warehouseBusiness.domain.enums.AnnexActEnum;
  29. import com.ruoyi.warehouseBusiness.domain.vo.WarehouseInfoVO;
  30. import com.ruoyi.warehouseBusiness.mapper.TAnnexMapper;
  31. import com.ruoyi.warehouseBusiness.mapper.TWarehouseBillsMapper;
  32. import com.ruoyi.warehouseBusiness.request.InventoryQueryRequest;
  33. import com.ruoyi.warehouseBusiness.response.InventoryQueryResponse;
  34. import com.ruoyi.warehouseBusiness.service.impl.BillnoSerialServiceImpl;
  35. import org.springframework.beans.BeanUtils;
  36. import org.springframework.beans.factory.annotation.Autowired;
  37. import org.springframework.stereotype.Service;
  38. import org.springframework.transaction.annotation.Transactional;
  39. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  40. import java.math.BigDecimal;
  41. import java.util.*;
  42. import java.util.stream.Collectors;
  43. /**
  44. * 仓库Service业务层处理
  45. *
  46. * @author ruoyi
  47. * @date 2020-12-11
  48. */
  49. @Service
  50. public class TWarehouseServiceImpl implements ITWarehouseService {
  51. @Autowired
  52. private TAnnexMapper annexMapper;
  53. @Autowired
  54. private TWarehouseMapper tWarehouseMapper;
  55. @Autowired
  56. private TWarehouseAreaMapper tWarehouseAreaMapper;
  57. @Autowired
  58. private TWarehouseBillsMapper tWarehouseBillsMapper;
  59. @Autowired
  60. private TCustomerContactMapper customerContactMapper;
  61. @Autowired
  62. private TCorpsMapper tCorpsMapper;
  63. @Autowired
  64. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  65. @Autowired
  66. private ISysDictDataService sysDictDataService;
  67. /**
  68. * 查询仓库
  69. *
  70. * @param fId 仓库ID
  71. * @return 仓库
  72. */
  73. @Override
  74. public WarehouseInfoVO selectTWarehouseById(Long fId) {
  75. WarehouseInfoVO warehouseInfoVO = new WarehouseInfoVO();
  76. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(fId);
  77. if (Objects.nonNull(tWarehouse)) {
  78. BeanUtils.copyProperties(tWarehouse, warehouseInfoVO);
  79. TAnnex annex = new TAnnex();
  80. annex.setfPid(fId);
  81. annex.setfActid(AnnexActEnum.WAREHOUSE.getType());
  82. List<TAnnex> annexList = annexMapper.selectTAnnexList(annex);
  83. warehouseInfoVO.setAnnexList(annexList);
  84. }
  85. return warehouseInfoVO;
  86. }
  87. @Override
  88. public Map<String, Object> selectTWarehouseById1(Long fId) {
  89. Map<String, Object> map = new HashMap<>();
  90. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(fId);
  91. if (StringUtils.isNotNull(tWarehouse)) {
  92. map.put("tWarehouse", tWarehouse);
  93. }
  94. TWarehouseArea tWarehouseArea = new TWarehouseArea();
  95. tWarehouseArea.setfWarehouseid(fId);
  96. List<TWarehouseArea> tWarehouseAreaList = tWarehouseAreaMapper.selectTWarehouseAreaList(tWarehouseArea);
  97. if (StringUtils.isNotEmpty(tWarehouseAreaList)) {
  98. map.put("tWarehouseArea", tWarehouseAreaList);
  99. }
  100. return map;
  101. }
  102. /**
  103. * 查询仓库列表
  104. *
  105. * @param tWarehouse 仓库
  106. * @return 仓库
  107. */
  108. @Override
  109. public List<TWarehouse> selectTWarehouseList(TWarehouse tWarehouse) {
  110. List<TWarehouse> list = tWarehouseMapper.selectTWarehouseList(tWarehouse);
  111. return list;
  112. }
  113. /**
  114. * 查询仓库列表
  115. *
  116. * @param tWarehouse 仓库
  117. * @return 仓库
  118. */
  119. @Override
  120. public List<WarehouseInfoVO> selectTWarehouseListAll(TWarehouse tWarehouse) {
  121. List<TWarehouse> list = tWarehouseMapper.selectTWarehouseList(tWarehouse);
  122. List<Long> ids = list.stream().map(TWarehouse::getfId).collect(Collectors.toList());
  123. TAnnex annex = new TAnnex();
  124. StringBuilder pids = new StringBuilder();
  125. for (Long id : ids) {
  126. pids.append(id).append(",");
  127. }
  128. if (ObjectUtils.isNotNull(pids) && pids.length() > 0) {
  129. annex.setIds(pids.substring(0, pids.length() - 1));
  130. }
  131. annex.setfActid(AnnexActEnum.WAREHOUSE.getType());
  132. List<TAnnex> annexList = annexMapper.selectListByPId(annex);
  133. List<WarehouseInfoVO> tWarehouseList = new ArrayList<>();
  134. for (TWarehouse tWarehouse1 : list) {
  135. WarehouseInfoVO warehouseInfoVO = new WarehouseInfoVO();
  136. BeanUtils.copyProperties(tWarehouse1, warehouseInfoVO);
  137. warehouseInfoVO.setfProperties(sysDictDataService.selectDictLabel("warehouse_properties", tWarehouse1.getfProperties()));
  138. warehouseInfoVO.setfType(sysDictDataService.selectDictLabel("warehouse_type", tWarehouse1.getfType()));
  139. warehouseInfoVO.setfGoodsType(sysDictDataService.selectDictLabel("data_goods_category", tWarehouse1.getfGoodsType()));
  140. if (ObjectUtils.isNotNull(annexList) && annexList.size() > 0) {
  141. warehouseInfoVO.setAnnexList(annexList.stream().filter(e -> ObjectUtils.isNotNull(e.getfPid()) && e.getfPid().equals(tWarehouse1.getfId())).collect(Collectors.toList()));
  142. }
  143. tWarehouseList.add(warehouseInfoVO);
  144. }
  145. return tWarehouseList;
  146. }
  147. @Override
  148. public List<TWarehouse> selectTWarehouseLists(TWarehouse tWarehouse) {
  149. return tWarehouseMapper.selectTWarehouseLists(tWarehouse);
  150. }
  151. @Override
  152. public List<Map<String, Object>> appGetWarehouseList() {
  153. TCustomerContact customerContact = new TCustomerContact();
  154. SysUser user = SecurityUtils.getLoginUser().getUser();
  155. Long corpId = null;
  156. if ("外部用户".equals(user.getDept().getDeptName())) {
  157. customerContact.setfTel(user.getUserName());
  158. List<TCustomerContact> tCustomerContacts = customerContactMapper.selectTCustomerContactList(customerContact);
  159. if (CollectionUtils.isNotEmpty(tCustomerContacts)) {
  160. corpId = tCustomerContacts.get(0).getfPid();
  161. }
  162. }
  163. return tWarehouseMapper.appGetWarehouseList(corpId);
  164. }
  165. /**
  166. * 新增仓库
  167. *
  168. * @param tWarehouse 仓库
  169. * @return 结果
  170. */
  171. @Override
  172. @Transactional
  173. public int insertTWarehouse(TWarehouse tWarehouse) {
  174. tWarehouse.setCreateTime(DateUtils.getNowDate());
  175. TWarehouse info = tWarehouseMapper.selectTWarehouseById(tWarehouse.getParentId());
  176. // 如果父节点不为正常状态,则不允许新增子节点
  177. if (!UserConstants.DEPT_NORMAL.equals(info.getfStatus())) {
  178. throw new CustomException("部门停用,不允许新增");
  179. }
  180. tWarehouse.setAncestors(info.getAncestors() + "," + tWarehouse.getParentId());
  181. // 所有节点转换成中文拼接
  182. String fWarehouseInformation = warehouseName(info.getAncestors() + "," + tWarehouse.getParentId(), tWarehouse.getfName());
  183. tWarehouse.setfWarehouseInformation(fWarehouseInformation);
  184. tWarehouseMapper.insertTWarehouse(tWarehouse);
  185. // 更新库容
  186. if (tWarehouse.getfLocation() == 1) {
  187. int i = updateWarehousefTotalgross(tWarehouse.getAncestors());
  188. if (i <= 0) {
  189. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  190. return 0;
  191. }
  192. }
  193. return 1;
  194. }
  195. @Override
  196. @Transactional
  197. public AjaxResult insertTWarehouse1(String tWarehouse, String tWarehouseArea, LoginUser loginUser) {
  198. if (StringUtils.isEmpty(tWarehouse)) {
  199. return AjaxResult.error("提交失败:仓库信息为空");
  200. }
  201. if (StringUtils.isEmpty(tWarehouseArea) && !"[{}]".equals(tWarehouseArea)) {
  202. return AjaxResult.error("提交失败:库区为空");
  203. }
  204. Long fPid = null;
  205. TWarehouse tWarehouses = JSONArray.parseObject(tWarehouse, TWarehouse.class);
  206. JSONArray jsonArray = JSONArray.parseArray(tWarehouseArea);
  207. List<TWarehouseArea> tWarehouseAreaList = JSONObject.parseArray(jsonArray.toJSONString(), TWarehouseArea.class);
  208. if (StringUtils.isNull(tWarehouses.getfId())) {
  209. tWarehouses.setCreateBy(loginUser.getUser().getUserName());
  210. tWarehouses.setCreateTime(new Date());
  211. tWarehouses.setfStatus("0");
  212. tWarehouseMapper.insertTWarehouse(tWarehouses);
  213. fPid = tWarehouses.getfId();
  214. } else {
  215. fPid = tWarehouses.getfId();
  216. tWarehouses.setUpdateBy(loginUser.getUser().getUserName());
  217. tWarehouses.setUpdateTime(new Date());
  218. if (tWarehouses.getfStatus() != null && tWarehouses.getfStatus().equals("1")) {
  219. TWarehouseBills tWarehouseBill = new TWarehouseBills();
  220. tWarehouseBill.setfWarehouseid(tWarehouses.getfId());
  221. List<TWarehouseBills> tWarehouseBillList = tWarehouseBillsMapper.selectTWarehousebillsList(tWarehouseBill);
  222. if (tWarehouseBillList != null && !tWarehouseBillList.isEmpty()) {
  223. return AjaxResult.error("仓库在库存总账有记录不可变更状态");
  224. }
  225. }
  226. tWarehouseMapper.updateTWarehouse(tWarehouses);
  227. // tWarehouseAreaMapper.deleteTWarehouseAreaByTWarehoused(fPid);
  228. }
  229. for (TWarehouseArea cc : tWarehouseAreaList) {
  230. if (StringUtils.isNull(cc.getfNo()) ||
  231. StringUtils.isNull(cc.getfName()) ||
  232. StringUtils.isNull(cc.getfAddr())) {
  233. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  234. return AjaxResult.error("请完善库区明细信息");
  235. }
  236. if (cc.getfId() != null) {
  237. cc.setUpdateBy(loginUser.getUser().getUserName());
  238. cc.setUpdateTime(new Date());
  239. tWarehouseAreaMapper.updateTWarehouseArea(cc);
  240. } else {
  241. cc.setfWarehouseid(fPid);
  242. cc.setfStatus("0");
  243. cc.setCreateBy(loginUser.getUser().getUserName());
  244. cc.setCreateTime(new Date());
  245. tWarehouseAreaMapper.insertTWarehouseArea(cc);
  246. }
  247. }
  248. return AjaxResult.success();
  249. }
  250. /**
  251. * 修改仓库
  252. *
  253. * @param tWarehouse 仓库
  254. * @return 结果
  255. */
  256. @Override
  257. @Transactional
  258. public AjaxResult updateTWarehouse(TWarehouse tWarehouse) {
  259. if (tWarehouse.getfStatus() != null && tWarehouse.getfStatus().equals("1")) {
  260. TWarehouseBills tWarehouseBill = new TWarehouseBills();
  261. tWarehouseBill.setfWarehouseid(tWarehouse.getfId());
  262. List<TWarehouseBills> tWarehouseBillList = tWarehouseBillsMapper.selectTWarehousebillsList(tWarehouseBill);
  263. if (tWarehouseBillList != null && !tWarehouseBillList.isEmpty()) {
  264. return AjaxResult.error("仓库在库存总账有记录不可变更状态");
  265. }
  266. }
  267. tWarehouse.setUpdateTime(DateUtils.getNowDate());
  268. tWarehouseMapper.updateTWarehouse(tWarehouse);
  269. return AjaxResult.success();
  270. }
  271. @Override
  272. public int updateTWarehouses(TWarehouse tWarehouse) {
  273. TWarehouse newParentTWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehouse.getParentId());
  274. TWarehouse oldTWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehouse.getfId());
  275. if (StringUtils.isNotNull(newParentTWarehouse) && StringUtils.isNotNull(oldTWarehouse)) {
  276. String newAncestors = newParentTWarehouse.getAncestors() + "," + newParentTWarehouse.getfId();
  277. String oldAncestors = oldTWarehouse.getAncestors();
  278. tWarehouse.setAncestors(newAncestors);
  279. updateDeptChildren(tWarehouse.getfId(), newAncestors, oldAncestors);
  280. // 修改仓库信息
  281. String fWarehouseInformation = warehouseName(newAncestors, tWarehouse.getfName());
  282. tWarehouse.setfWarehouseInformation(fWarehouseInformation);
  283. }
  284. int result = tWarehouseMapper.updateTWarehouse(tWarehouse);
  285. if (UserConstants.DEPT_NORMAL.equals(tWarehouse.getfStatus())) {
  286. // 如果该部门是启用状态,则启用该部门的所有上级部门
  287. updateParentDeptStatus(tWarehouse);
  288. }
  289. // 更新库容
  290. if (tWarehouse.getfLocation() == 1) {
  291. int i = updateWarehousefTotalgross(tWarehouse.getAncestors());
  292. if (i <= 0) {
  293. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  294. return 0;
  295. }
  296. }
  297. return result;
  298. }
  299. /**
  300. * 修改子元素关系
  301. *
  302. * @param deptId 被修改的部门ID
  303. * @param newAncestors 新的父ID集合
  304. * @param oldAncestors 旧的父ID集合
  305. */
  306. public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors) {
  307. List<TWarehouse> children = tWarehouseMapper.selectChildrenDeptById(deptId);
  308. for (TWarehouse child : children) {
  309. child.setAncestors(child.getAncestors().replace(oldAncestors, newAncestors));
  310. }
  311. if (children.size() > 0) {
  312. tWarehouseMapper.updateDeptChildren(children);
  313. }
  314. }
  315. /**
  316. * 修改该部门的父级部门状态
  317. *
  318. * @param tWarehouse 当前部门
  319. */
  320. private void updateParentDeptStatus(TWarehouse tWarehouse) {
  321. String updateBy = tWarehouse.getUpdateBy();
  322. tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehouse.getfId());
  323. tWarehouse.setUpdateBy(updateBy);
  324. tWarehouseMapper.updateDeptStatus(tWarehouse);
  325. }
  326. /**
  327. * 批量删除仓库
  328. *
  329. * @param fIds 需要删除的仓库ID
  330. * @return 结果
  331. */
  332. @Override
  333. @Transactional
  334. public AjaxResult deleteTWarehouseByIds(Long[] fIds) {
  335. // 查询仓库主表 是否有仓库在使用
  336. int i = 1;
  337. for (Long id : fIds) {
  338. TWarehouseBills tWarehouseBill = new TWarehouseBills();
  339. tWarehouseBill.setfWarehouseid(id);
  340. List<TWarehouseBills> tWarehouseBillList = tWarehouseBillsMapper.selectTWarehousebillsList(tWarehouseBill);
  341. if (tWarehouseBillList != null && !tWarehouseBillList.isEmpty()) {
  342. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  343. return AjaxResult.error("仓库第" + i + "行仓库有货物不可删除");
  344. }
  345. tWarehouseMapper.deleteTWarehouseById(id);
  346. i++;
  347. }
  348. // tWarehouseMapper.deleteTWarehouseByIds(fIds);
  349. return AjaxResult.success();
  350. }
  351. /**
  352. * 删除仓库信息
  353. *
  354. * @param fId 仓库ID
  355. * @return 结果
  356. */
  357. @Override
  358. @Transactional
  359. public int deleteTWarehouseById(Long fId) {
  360. TWarehouse warehouse = tWarehouseMapper.selectTWarehouseById(fId);
  361. tWarehouseMapper.deleteTWarehouseById(fId);
  362. updateParentGross(warehouse.getAncestors());
  363. annexMapper.deleteByPid(fId, AnnexActEnum.WAREHOUSE.getType());
  364. return 1;
  365. }
  366. @Override
  367. public String checkNameUnique(TWarehouse tWarehouse) {
  368. Long fId = StringUtils.isNull(tWarehouse.getfId()) ? -1L : tWarehouse.getfId();
  369. TWarehouse info = tWarehouseMapper.checkDeptNameUnique(tWarehouse.getfName(), tWarehouse.getParentId());
  370. if (StringUtils.isNotNull(info) && info.getfId().longValue() != fId.longValue()) {
  371. return UserConstants.NOT_UNIQUE;
  372. }
  373. return UserConstants.UNIQUE;
  374. }
  375. @Override
  376. public boolean hasChildByfId(Long fId) {
  377. int result = tWarehouseMapper.hasChildByfId(fId);
  378. return result > 0 ? true : false;
  379. }
  380. @Override
  381. public boolean checkDeptExistWarehouse(Long deptId) {
  382. int result = tWarehouseMapper.checkDeptExistarehouse(deptId);
  383. return result > 0 ? true : false;
  384. }
  385. @Override
  386. public boolean checkDeptExistWarehouseItems(Long deptId) {
  387. int result = tWarehouseMapper.checkDeptExistWarehouseItems(deptId);
  388. return result > 0 ? true : false;
  389. }
  390. /**
  391. * 新增仓库
  392. *
  393. * @param tWarehouse
  394. * @return
  395. */
  396. @Override
  397. public AjaxResult warehouseSubmit(WarehouseSubmitDTO tWarehouse) {
  398. // 登录用户
  399. String username = SecurityUtils.getUsername();
  400. tWarehouse.setCreateTime(new Date());
  401. tWarehouse.setCreateBy(username);
  402. TWarehouse info = tWarehouseMapper.selectTWarehouseById(tWarehouse.getParentId());
  403. // 如果父节点不为正常状态,则不允许新增子节点
  404. if (!UserConstants.DEPT_NORMAL.equals(info.getfStatus())) {
  405. throw new CustomException("部门停用,不允许新增");
  406. }
  407. tWarehouse.setAncestors(info.getAncestors() + "," + tWarehouse.getParentId());
  408. // 所有节点转换成中文拼接
  409. String fWarehouseInformation = warehouseName(info.getAncestors() + "," + tWarehouse.getParentId(), tWarehouse.getfName());
  410. tWarehouse.setfWarehouseInformation(fWarehouseInformation);
  411. tWarehouse.setfStatus("0");
  412. tWarehouseMapper.insertTWarehouse(tWarehouse);
  413. updateParentGross(tWarehouse.getAncestors());
  414. if (CollectionUtils.isNotEmpty(tWarehouse.getAnnexList())) {
  415. tWarehouse.getAnnexList().forEach(li -> {
  416. li.setfPid(tWarehouse.getfId());
  417. li.setfActid(AnnexActEnum.WAREHOUSE.getType());
  418. if (Objects.nonNull(li.getfId())) {
  419. li.setCreateTime(new Date());
  420. li.setCreateBy(username);
  421. } else {
  422. li.setUpdateTime(new Date());
  423. li.setUpdateBy(username);
  424. }
  425. annexMapper.insertTAnnex(li);
  426. });
  427. }
  428. return AjaxResult.success();
  429. }
  430. /**
  431. * 修改仓库
  432. *
  433. * @param tWarehouse
  434. * @return
  435. */
  436. @Override
  437. @Transactional
  438. public AjaxResult edit(WarehouseSubmitDTO tWarehouse) {
  439. // 登录用户
  440. String username = SecurityUtils.getUsername();
  441. tWarehouse.setUpdateBy(username);
  442. tWarehouseMapper.updateTWarehouse(tWarehouse);
  443. updateParentGross(tWarehouse.getAncestors());
  444. annexMapper.deleteByPid(tWarehouse.getfId(), AnnexActEnum.WAREHOUSE.getType());
  445. if (CollectionUtils.isNotEmpty(tWarehouse.getAnnexList())) {
  446. tWarehouse.getAnnexList().forEach(li -> {
  447. li.setfPid(tWarehouse.getfId());
  448. li.setfActid(AnnexActEnum.WAREHOUSE.getType());
  449. if (Objects.nonNull(li.getfId())) {
  450. li.setCreateTime(new Date());
  451. li.setCreateBy(username);
  452. } else {
  453. li.setUpdateTime(new Date());
  454. li.setUpdateBy(username);
  455. }
  456. annexMapper.insertTAnnex(li);
  457. });
  458. }
  459. return AjaxResult.success();
  460. }
  461. /**
  462. * 仓库懒加载列表
  463. *
  464. * @param tWarehouse
  465. * @return
  466. */
  467. @Override
  468. public List<TWarehouse> lazyList(TWarehouse tWarehouse) {
  469. if (StringUtils.isNull(tWarehouse.getParentId()) && StringUtils.isEmpty(tWarehouse.getfName()) &&
  470. StringUtils.isNull(tWarehouse.getfStatus()) && StringUtils.isNull(tWarehouse.getfProperties()) &&
  471. StringUtils.isNull(tWarehouse.getfAddr()) && StringUtils.isNull(tWarehouse.getfType()) && StringUtils.isNull(tWarehouse.getfGoodsType())) {
  472. tWarehouse.setParentId(0L);
  473. }
  474. return tWarehouseMapper.lazyList(tWarehouse);
  475. }
  476. @Override
  477. public TWarehouse selectByCode(String position) {
  478. return tWarehouseMapper.getWarehouseByNo(position);
  479. }
  480. @Override
  481. public List<Map<String, Object>> queryGoodsAccountByPageV1(String warehouseCode,
  482. String ownerSocialIdentifier,
  483. String ownerCode,
  484. String ownerName,
  485. String goodsName,
  486. String specifications,
  487. String producing,
  488. String materialQuality,
  489. String level,
  490. Integer pageNo,
  491. Integer pageSize) {
  492. if ("null".equals(warehouseCode)) {
  493. warehouseCode = null;
  494. }
  495. return tWarehouseMapper.queryGoodsAccountByPageV1(warehouseCode, ownerSocialIdentifier, ownerCode, ownerName, goodsName, specifications,
  496. producing, materialQuality, level, pageNo, pageSize);
  497. }
  498. @Override
  499. public List<Map<String, Object>> queryGoodsAccountDetailByPageV1(String warehouseCode, String ownerName, String ownerCode, String ownerSocialIdentifier, String goodsName, String specifications,
  500. String producing, String materialQuality, String level, String receiptDoc, String billOfLading,
  501. String areaName, String areaCode, String slotName, String slotCode, Integer pageNo, Integer pageSize) {
  502. if ("null".equals(warehouseCode)) {
  503. warehouseCode = null;
  504. }
  505. return tWarehouseMapper.queryGoodsAccountDetailByPageV1(warehouseCode, ownerName, ownerCode, ownerSocialIdentifier, goodsName, specifications,
  506. producing, materialQuality, level, receiptDoc, billOfLading, areaName, areaCode, slotName, slotCode, pageNo, pageSize);
  507. }
  508. /**
  509. * 获取仓库详细信息
  510. */
  511. @Override
  512. public TWarehouse getWareHouseInfo(String wareHouseId) {
  513. return tWarehouseMapper.getWareHouseInfo(wareHouseId);
  514. }
  515. /**
  516. * 获取最新的库存数据
  517. */
  518. @Override
  519. public Map<String, Object> getStorageInfo(String wareHouseId) {
  520. return tWarehouseMapper.getStorageInfo(wareHouseId);
  521. }
  522. /**
  523. * 库存吞吐趋势信息
  524. */
  525. @Override
  526. public List<Map<String, Object>> getTimeStorageInfo(String wareHouseId, String startTime, String endTime) {
  527. return tWarehouseMapper.getTimeStorageInfo(wareHouseId, startTime, endTime);
  528. }
  529. /**
  530. * 库存吞吐趋势信息
  531. */
  532. @Override
  533. public List<Map<String, Object>> getTimeThroughputInfo(String wareHouseId, String startTime, String endTime) {
  534. return tWarehouseMapper.getTimeThroughputInfo(wareHouseId, startTime, endTime);
  535. }
  536. /**
  537. * 货物保管信息
  538. */
  539. @Override
  540. public Map<String, Object> getCargoInfo(String wareHouseId, String startTime, String endTime, String isPledge) {
  541. return tWarehouseMapper.getCargoInfo(wareHouseId, startTime, endTime, isPledge);
  542. }
  543. /**
  544. * 货物保管信息
  545. */
  546. @Override
  547. public List<Map<String, Object>> getGoodsList(String wareHouseId, String startTime, String endTime) {
  548. return tWarehouseMapper.getGoodsList(wareHouseId, startTime, endTime);
  549. }
  550. /**
  551. * 仓库保管趋势
  552. */
  553. @Override
  554. public List<Map<String, Object>> getCargoInfoTrend(String wareHouseId, String startTime, String endTime, String FTradeModeId) {
  555. return tWarehouseMapper.getCargoInfoTrend(wareHouseId, startTime, endTime, FTradeModeId);
  556. }
  557. /**
  558. * 获取货物品类top值
  559. */
  560. @Override
  561. public List<Map<String, Object>> getStorageTop(String wareHouseId, Integer countType, Integer topCnt) {
  562. return tWarehouseMapper.getStorageTop(wareHouseId, countType, topCnt);
  563. }
  564. /**
  565. * 获取货物品类top值
  566. */
  567. @Override
  568. public List<Map<String, Object>> getStorageTopS(String wareHouseId, Integer countType, Integer topCnt) {
  569. return tWarehouseMapper.getStorageTopS(wareHouseId, countType, topCnt);
  570. }
  571. /**
  572. * 获取货主仓库top值
  573. */
  574. @Override
  575. public List<Map<String, Object>> getGoodsTop(String wareHouseId, Integer countType, Integer topCnt) {
  576. return tWarehouseMapper.getGoodsTop(wareHouseId, countType, topCnt);
  577. }
  578. /**
  579. * 过户交易信息获取
  580. */
  581. @Override
  582. public List<Map<String, Object>> getTransferTransaction(String wareHouseId, String startTime, String endTime) {
  583. return tWarehouseMapper.getTransferTransaction(wareHouseId, startTime, endTime);
  584. }
  585. /**
  586. * 最新的作业统计
  587. */
  588. @Override
  589. public Map<String, Object> getWorkInfo(String wareHouseId, String countType) {
  590. return tWarehouseMapper.getWorkInfo(wareHouseId, countType);
  591. }
  592. /**
  593. * 作业统计趋势数据
  594. */
  595. @Override
  596. public List<Map<String, Object>> getWorkTrend(String wareHouseId, String startTime, String endTime, String countType) {
  597. return tWarehouseMapper.getWorkTrend(wareHouseId, startTime, endTime, countType);
  598. }
  599. /**
  600. * 获取仓库详细信息
  601. */
  602. @Override
  603. public List<InventoryQueryResponse> inventoryQueries(InventoryQueryRequest inventoryQueryRequest) {
  604. return tWarehouseMapper.inventoryQueries(inventoryQueryRequest.getCurrentOwnerName(),
  605. inventoryQueryRequest.getCurrentOwnerSocialIdentifier(),
  606. inventoryQueryRequest.getWarehouseSerialNumbers());
  607. }
  608. /**
  609. * 获取仓库详细信息
  610. */
  611. @Override
  612. public List<InventoryQueryResponse> inventoryQueriesV2(InventoryQueryRequest inventoryQueryRequest) {
  613. return tWarehouseMapper.inventoryQueriesV2(inventoryQueryRequest.getCurrentOwnerName(),
  614. inventoryQueryRequest.getCurrentOwnerSocialIdentifier(),
  615. inventoryQueryRequest.getWarehouseSerialNumbers());
  616. }
  617. /**
  618. * 仓单注册指令
  619. */
  620. @Override
  621. public int receiptRegister(String ownerName, String identifier, String numbers) {
  622. return tWarehouseMapper.receiptRegister(ownerName, identifier, numbers);
  623. }
  624. /**
  625. * 客户检验指令
  626. */
  627. @Override
  628. public TCorps verification(String name, String identifier) {
  629. return tCorpsMapper.verification(name, identifier);
  630. }
  631. /**
  632. * 仓单过户指令
  633. */
  634. @Override
  635. public int receiptTransfer(TWarehouseBills warehouseBills) {
  636. warehouseBills.setfBilltype("HQZY");
  637. warehouseBills.setfBillstatus(2L);
  638. warehouseBills.setfDeptid(100L);
  639. warehouseBills.setfBsdeptid(100L);
  640. warehouseBills.setCreateTime(new Date());
  641. warehouseBills.setCreateBy("admin");
  642. Date time = new Date();
  643. // 业务编码
  644. String billNo = billnoSerialServiceImpl.getBillNo("HQZY", time);
  645. warehouseBills.setfBillno(billNo);
  646. // 存货编码
  647. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  648. warehouseBills.setfBscorpno(bscorpno);
  649. warehouseBills.setfChargedate(time);
  650. warehouseBills.setfBsdate(time);
  651. warehouseBills.setfTrademodeid(1L);
  652. warehouseBills.setfItemsStatus(2L);
  653. return tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  654. }
  655. /**
  656. * 仓单解锁指令
  657. */
  658. @Override
  659. public int receiptCancel(String ownerName, String identifier, String numbers) {
  660. return tWarehouseMapper.receiptCancel(ownerName, identifier, numbers);
  661. }
  662. @Override
  663. public String checkUFNoUnique(TWarehouse tWarehouse) {
  664. TWarehouse tWarehouse1 = tWarehouseMapper.checkFNoUnique(tWarehouse.getfNo());
  665. if (StringUtils.isNotNull(tWarehouse1) && tWarehouse1.getfId() != tWarehouse.getfId()) {
  666. return UserConstants.NOT_UNIQUE;
  667. }
  668. return UserConstants.UNIQUE;
  669. }
  670. @Override
  671. public String checkUFNnameUnique(TWarehouse tWarehouse) {
  672. TWarehouse tWarehouse1 = tWarehouseMapper.checkUFNnameUnique(tWarehouse.getfName());
  673. if (StringUtils.isNotNull(tWarehouse1) && tWarehouse1.getfId() != tWarehouse.getfId()) {
  674. return UserConstants.NOT_UNIQUE;
  675. }
  676. return UserConstants.UNIQUE;
  677. }
  678. @Override
  679. public String checkUFAaddrUnique(TWarehouse tWarehouse) {
  680. TWarehouse tWarehouse1 = tWarehouseMapper.checkUFAaddrUnique(tWarehouse.getfAddr());
  681. if (StringUtils.isNotNull(tWarehouse1) && tWarehouse1.getfId() != tWarehouse.getfId()) {
  682. return UserConstants.NOT_UNIQUE;
  683. }
  684. return UserConstants.UNIQUE;
  685. }
  686. @Override
  687. public String checkUFTWarehouseAreaNoUnique(TWarehouseArea tWarehouseAreas) {
  688. TWarehouseArea tWarehouseAreas1 = tWarehouseAreaMapper.checkFNoUnique(tWarehouseAreas.getfNo(), tWarehouseAreas.getfWarehouseid());
  689. if (StringUtils.isNotNull(tWarehouseAreas1) && tWarehouseAreas1.getfId() != tWarehouseAreas.getfId()) {
  690. return UserConstants.NOT_UNIQUE;
  691. }
  692. return UserConstants.UNIQUE;
  693. }
  694. @Override
  695. public String checkUTWarehouseAreaFNnameUnique(TWarehouseArea tWarehouseAreas) {
  696. TWarehouseArea tWarehouseAreas1 = tWarehouseAreaMapper.checkUFNnameUnique(tWarehouseAreas.getfName(), tWarehouseAreas.getfWarehouseid());
  697. if (StringUtils.isNotNull(tWarehouseAreas1) && tWarehouseAreas1.getfId() != tWarehouseAreas.getfId()) {
  698. return UserConstants.NOT_UNIQUE;
  699. }
  700. return UserConstants.UNIQUE;
  701. }
  702. @Override
  703. public int selectNormalChildrenDeptById(Long fId) {
  704. return tWarehouseMapper.selectNormalChildrenDeptById(fId);
  705. }
  706. @Override
  707. public List<TreeSelect> buildDeptTreeSelect(List<TWarehouse> tWarehouses) {
  708. List<TWarehouse> deptTrees = buildDeptTree(tWarehouses);
  709. return deptTrees.stream().map(TreeSelect::new).collect(Collectors.toList());
  710. }
  711. /**
  712. * 构建前端所需要树结构
  713. *
  714. * @param depts 部门列表
  715. * @return 树结构列表
  716. */
  717. @Override
  718. public List<TWarehouse> buildDeptTree(List<TWarehouse> depts) {
  719. List<TWarehouse> returnList = new ArrayList<TWarehouse>();
  720. List<Long> tempList = new ArrayList<Long>();
  721. for (TWarehouse dept : depts) {
  722. tempList.add(dept.getfId());
  723. }
  724. for (Iterator<TWarehouse> iterator = depts.iterator(); iterator.hasNext(); ) {
  725. TWarehouse dept = (TWarehouse) iterator.next();
  726. // 如果是顶级节点, 遍历该父节点的所有子节点
  727. if (!tempList.contains(dept.getParentId())) {
  728. recursionFn(depts, dept);
  729. returnList.add(dept);
  730. }
  731. }
  732. if (returnList.isEmpty()) {
  733. returnList = depts;
  734. }
  735. return returnList;
  736. }
  737. @Override
  738. public String checkUFAreUnique(TWarehouse tWarehouse) {
  739. TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaByWarehouseId(tWarehouse.getParentId());
  740. if (StringUtils.isNotNull(tWarehouseArea)) {
  741. return UserConstants.NOT_UNIQUE;
  742. }
  743. return UserConstants.UNIQUE;
  744. }
  745. /**
  746. * 递归列表
  747. */
  748. private void recursionFn(List<TWarehouse> list, TWarehouse t) {
  749. // 得到子节点列表
  750. List<TWarehouse> childList = getChildList(list, t);
  751. t.setChildren(childList);
  752. for (TWarehouse tChild : childList) {
  753. if (hasChild(list, tChild)) {
  754. recursionFn(list, tChild);
  755. }
  756. }
  757. }
  758. /**
  759. * 得到子节点列表
  760. */
  761. private List<TWarehouse> getChildList(List<TWarehouse> list, TWarehouse t) {
  762. List<TWarehouse> tlist = new ArrayList<TWarehouse>();
  763. Iterator<TWarehouse> it = list.iterator();
  764. while (it.hasNext()) {
  765. TWarehouse n = (TWarehouse) it.next();
  766. if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getfId().longValue()) {
  767. tlist.add(n);
  768. }
  769. }
  770. return tlist;
  771. }
  772. /**
  773. * 判断是否有子节点
  774. */
  775. private boolean hasChild(List<TWarehouse> list, TWarehouse t) {
  776. return getChildList(list, t).size() > 0 ? true : false;
  777. }
  778. public String warehouseName(String ancestors, String oldName) {
  779. String str[] = ancestors.split(",");
  780. String fWarehouseInformation = "";
  781. for (String id : str) {
  782. if (!(id.equals("0")) && !(id.equals("100"))) {
  783. // 查询仓库名称
  784. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(Long.valueOf(id));
  785. fWarehouseInformation += tWarehouse.getfName() + "/";
  786. }
  787. }
  788. if (StringUtils.isNull(fWarehouseInformation) && !fWarehouseInformation.equals("")) {
  789. fWarehouseInformation = oldName;
  790. } else {
  791. fWarehouseInformation += oldName;
  792. }
  793. return fWarehouseInformation;
  794. }
  795. /**
  796. * 修改仓库库容
  797. *
  798. * @param ancestors
  799. * @return
  800. */
  801. public int updateWarehousefTotalgross(String ancestors) {
  802. String str[] = ancestors.split(",");
  803. Long warehouseId = 0L;
  804. for (String id : str) {
  805. if (!(id.equals("0")) && !(id.equals("100"))) {
  806. warehouseId = Long.valueOf(id);
  807. break;
  808. }
  809. }
  810. if (warehouseId != 0) {
  811. // 所有库容
  812. BigDecimal fTotalgross = tWarehouseMapper.selectTWarehouseFTotalgross(warehouseId);
  813. TWarehouse tWarehouseNew = new TWarehouse();
  814. tWarehouseNew.setfId(warehouseId);
  815. tWarehouseNew.setfTotalgross(fTotalgross);
  816. return tWarehouseMapper.updatefTotalgross(tWarehouseNew);
  817. } else {
  818. return 0;
  819. }
  820. }
  821. private void updateParentGross(String ancestors) {
  822. String[] split = ancestors.split(",");
  823. Collections.reverse(Arrays.asList(split));
  824. for (String ancestor : split) {
  825. if ("0".equals(ancestor) || "100".equals(ancestor)) {
  826. break;
  827. }
  828. Long parentId = Long.valueOf(ancestor);
  829. List<TWarehouse> tWarehouses = tWarehouseMapper.selectChildrenDeptById(parentId);
  830. BigDecimal allGross = new BigDecimal("0");
  831. for (TWarehouse warehouse : tWarehouses) {
  832. if (StringUtils.isNotNull(warehouse.getfTotalgross())) {
  833. allGross = allGross.add(warehouse.getfTotalgross());
  834. }
  835. }
  836. if (allGross.compareTo(BigDecimal.ZERO) > 0) {
  837. TWarehouse parent = new TWarehouse();
  838. parent.setfId(parentId);
  839. parent.setfTotalgross(allGross);
  840. tWarehouseMapper.updatefTotalgross(parent);
  841. }
  842. }
  843. }
  844. }