TWarehouseServiceImpl.java 33 KB

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