TWarehouseBillsServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.alibaba.fastjson.JSONObject;
  4. import com.ruoyi.basicData.domain.*;
  5. import com.ruoyi.basicData.mapper.*;
  6. import com.ruoyi.common.core.domain.AjaxResult;
  7. import com.ruoyi.common.core.domain.entity.SysUser;
  8. import com.ruoyi.common.core.domain.model.LoginUser;
  9. import com.ruoyi.common.utils.DateUtils;
  10. import com.ruoyi.common.utils.StringUtils;
  11. import com.ruoyi.reportManagement.domain.TWhgenleg;
  12. import com.ruoyi.reportManagement.mapper.TWhgenlegMapper;
  13. import com.ruoyi.system.mapper.SysDeptMapper;
  14. import com.ruoyi.system.mapper.SysUserMapper;
  15. import com.ruoyi.warehouseBusiness.domain.TEnclosure;
  16. import com.ruoyi.warehouseBusiness.domain.TWarehouseBills;
  17. import com.ruoyi.warehouseBusiness.domain.TWarehousebillsfees;
  18. import com.ruoyi.warehouseBusiness.domain.TWarehousebillsitems;
  19. import com.ruoyi.warehouseBusiness.mapper.TEnclosureMapper;
  20. import com.ruoyi.warehouseBusiness.mapper.TWarehouseBillsMapper;
  21. import com.ruoyi.warehouseBusiness.mapper.TWarehousebillsfeesMapper;
  22. import com.ruoyi.warehouseBusiness.mapper.TWarehousebillsitemsMapper;
  23. import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
  24. import org.springframework.beans.factory.annotation.Autowired;
  25. import org.springframework.stereotype.Service;
  26. import org.springframework.transaction.annotation.Transactional;
  27. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  28. import java.math.BigDecimal;
  29. import java.util.*;
  30. /**
  31. * 详情主表Service业务层处理
  32. *
  33. * @author ruoyi
  34. * @date 2020-12-11
  35. */
  36. @Service
  37. public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
  38. @Autowired
  39. private TWhgenlegMapper tWhgenlegMapper;
  40. @Autowired
  41. private TGoodsMapper tGoodsMapper;
  42. @Autowired
  43. private SysDeptMapper sysDeptMapper;
  44. @Autowired
  45. private SysUserMapper sysUserMapper;
  46. @Autowired
  47. private TCorpsMapper tCorpsMapper;
  48. @Autowired
  49. private TFeesMapper tFeesMapper;
  50. @Autowired
  51. private TWarehouseMapper tWarehouseMapper;
  52. @Autowired
  53. private TWarehouseAreaMapper tWarehouseAreaMapper;
  54. @Autowired
  55. private TEnclosureMapper tEnclosureMapper;
  56. @Autowired
  57. private TWarehouseBillsMapper tWarehouseBillsMapper;
  58. @Autowired
  59. private TWarehousebillsfeesMapper tWarehousebillsfeesMapper;
  60. @Autowired
  61. private TWarehousebillsitemsMapper tWarehousebillsitemsMapper;
  62. @Autowired
  63. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  64. /**
  65. * 查询详情主表
  66. *
  67. * @param fId 详情主表ID
  68. * @return 详情主表
  69. */
  70. @Override
  71. public Map<String, Object> selectTWarehousebillsById(Long fId) {
  72. Map<String, Object> map = new HashMap<>();
  73. // 查询仓库主表数据
  74. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  75. // 客户表
  76. List<Long> corpsId = new ArrayList<>();
  77. // 用户表
  78. List<SysUser> sysUserList = new ArrayList<>();
  79. // 仓库表
  80. List<TWarehouse> warehouseList = new ArrayList<>();
  81. // 商品
  82. List<Long> goodsId = new ArrayList<>();
  83. // 费用
  84. List<Long> feesId = new ArrayList<>();
  85. // 库区
  86. List<Long> warehouseAreaId = new ArrayList<>();
  87. if (!StringUtils.isNull(tWarehousebills)) {
  88. if (StringUtils.isNotNull(tWarehousebills.getfTocorpid())) {
  89. corpsId.add(tWarehousebills.getfTocorpid());
  90. }
  91. corpsId.add(tWarehousebills.getfCorpid());
  92. // 查询联系人
  93. SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehousebills.getfStorekeeper());
  94. if (StringUtils.isNotNull(sysUser)) {
  95. sysUserList.add(sysUser);
  96. }
  97. // 查询仓库
  98. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehousebills.getfWarehouseid());
  99. if (StringUtils.isNotNull(tWarehouse)) {
  100. warehouseList.add(tWarehouse);
  101. }
  102. // 查询经营单位
  103. corpsId.add(tWarehousebills.getfSbu());
  104. map.put("warehousebills", tWarehousebills);
  105. }
  106. // 查询仓库明细从表数据
  107. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  108. tWarehousebillsitems.setfPid(fId);
  109. List<Map<String, Object>> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems);
  110. if (StringUtils.isNotEmpty(mapList)) {
  111. for (Map<String, Object> wb : mapList) {
  112. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  113. Integer fGoodsid = (Integer) wb.get("fGoodsid");
  114. goodsId.add(fGoodsid.longValue());
  115. }
  116. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  117. Integer fWarehouselocid = (Integer) wb.get("fWarehouselocid");
  118. warehouseAreaId.add(fWarehouselocid.longValue());
  119. }
  120. }
  121. map.put("warehouseBillsItem", mapList);
  122. }
  123. // 查询仓库费用明细表数据
  124. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  125. tWarehousebillsfees.setfPid(fId);
  126. List<TWarehousebillsfees> warehousebillsfeesDr = new ArrayList<>();
  127. List<TWarehousebillsfees> warehousebillsfeesCr = new ArrayList<>();
  128. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  129. if (StringUtils.isNotEmpty(warehousebillsfees)) {
  130. for (TWarehousebillsfees fees : warehousebillsfees) {
  131. if ("C".equals(fees.getfDc())) {
  132. warehousebillsfeesCr.add(fees);
  133. } else {
  134. warehousebillsfeesDr.add(fees);
  135. }
  136. corpsId.add(fees.getfCorpid());
  137. feesId.add(fees.getfFeeid());
  138. }
  139. }
  140. // 查询附件表数据
  141. TEnclosure enclosure = new TEnclosure();
  142. enclosure.setfPid(fId);
  143. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  144. if (StringUtils.isNotEmpty(enclosures)) {
  145. map.put("enclosures", enclosures);
  146. }
  147. List<TCorps> corpsList = new ArrayList<>();
  148. List<Long> corpsIdList = StringUtils.integerDeduplication(corpsId);
  149. for (Long corpId : corpsIdList) {
  150. TCorps corps = tCorpsMapper.selectTCorpsById(corpId);
  151. if (StringUtils.isNotNull(corps)) {
  152. corpsList.add(corps);
  153. }
  154. }
  155. List<TWarehouseArea> warehouseAreaList = new ArrayList<>();
  156. List<Long> warehouseAreaIdList = StringUtils.integerDeduplication(warehouseAreaId);
  157. for (Long warehouseArea : warehouseAreaIdList) {
  158. TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaById(warehouseArea);
  159. if (StringUtils.isNotNull(tWarehouseArea)) {
  160. warehouseAreaList.add(tWarehouseArea);
  161. }
  162. }
  163. List<TGoods> goodsList = new ArrayList<>();
  164. List<Long> goodsIdList = StringUtils.integerDeduplication(goodsId);
  165. for (Long goods : goodsIdList) {
  166. TGoods tGoods = tGoodsMapper.selectTGoodsById(goods);
  167. if (StringUtils.isNotNull(tGoods)) {
  168. goodsList.add(tGoods);
  169. }
  170. }
  171. List<TFees> feesList = new ArrayList<>();
  172. List<Long> longList = StringUtils.integerDeduplication(feesId);
  173. for (Long fees : longList) {
  174. TFees tFees = tFeesMapper.selectTFeesById(fees);
  175. if (StringUtils.isNotNull(tFees)) {
  176. feesList.add(tFees);
  177. }
  178. }
  179. map.put("corps", corpsList);
  180. map.put("goodsList", goodsList);
  181. map.put("feesList", feesList);
  182. map.put("sysUser", sysUserList);
  183. map.put("warehouse", warehouseList);
  184. map.put("warehouseAreas", warehouseAreaList);
  185. map.put("warehousebillsfeesDr", warehousebillsfeesDr);
  186. map.put("warehousebillsfeesCr", warehousebillsfeesCr);
  187. map.put("dept", sysDeptMapper.selectDeptById(tWarehousebills.getfDeptid()));
  188. return map;
  189. }
  190. /**
  191. * 查询详情主表列表
  192. *
  193. * @param tWarehousebills 详情主表
  194. * @return 详情主表
  195. */
  196. @Override
  197. public List<Map<String, Object>> selectWarehouseBusinessList(TWarehouseBills tWarehousebills) {
  198. return tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  199. }
  200. /**
  201. * 查询导出所需主表列表
  202. *
  203. * @param tWarehousebills 详情主表
  204. * @return 详情主表
  205. */
  206. @Override
  207. public List<TWarehouseBills> selectTWarehousebillsList(TWarehouseBills tWarehousebills) {
  208. return tWarehouseBillsMapper.selectTWarehousebillsList(tWarehousebills);
  209. }
  210. /**
  211. * 根据条件查询总账是否存在
  212. *
  213. * @param warehouseBills 仓库主表
  214. * @param warehousebillsitems 仓库明细表
  215. * @return 库存总账
  216. */
  217. public TWhgenleg queryTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems) {
  218. TWhgenleg tWhgenleg = new TWhgenleg();
  219. // 客户
  220. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  221. // 提单号
  222. if ("HQZY".equals(warehouseBills.getfBilltype())) {
  223. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  224. } else {
  225. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  226. }
  227. // 库区
  228. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  229. // 货物品名
  230. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  231. // 贸易方式
  232. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  233. return tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  234. }
  235. /**
  236. * 新增库存总账
  237. *
  238. * @param warehouseBills 仓库主表
  239. * @param warehousebillsitems 仓库明细表
  240. * @return 结果
  241. */
  242. @Transactional
  243. public int instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, SysUser user) {
  244. TWhgenleg tWhgenleg = new TWhgenleg();
  245. if ("SJRK".equals(warehouseBills.getfBilltype()) || "HQZY".equals(warehouseBills.getfBilltype())) {
  246. tWhgenleg.setfOriginalbilldate(new Date());
  247. }
  248. // 客户
  249. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  250. // 提单号
  251. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  252. // 原始单号
  253. tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno());
  254. // 仓库
  255. tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid());
  256. // 库区
  257. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  258. // 货物品名
  259. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  260. // 贸易方式
  261. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  262. // 入库数
  263. tWhgenleg.setfQtyd(warehousebillsitems.getfQty());
  264. // 入库尺码
  265. tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn());
  266. // 唛头
  267. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  268. // 入库毛重
  269. tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight());
  270. // 入库净重
  271. tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight());
  272. // 入库箱号
  273. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  274. // 创建人
  275. tWhgenleg.setCreateBy(user.getUserName());
  276. // 创建人
  277. tWhgenleg.setCreateTime(new Date());
  278. // 状态
  279. tWhgenleg.setfStatus("T");
  280. // 结余件数
  281. tWhgenleg.setfQtyblc(warehousebillsitems.getfQty());
  282. System.out.println("主表新增:" + warehouseBills.toString());
  283. System.out.println("要添加的总账:" + tWhgenleg.toString());
  284. return tWhgenlegMapper.insertTWhgenleg(tWhgenleg);
  285. }
  286. @Transactional
  287. public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) {
  288. Map<String, Object> map = new HashMap<>();
  289. map.put("whgenlegId", whgenlegId);
  290. map.put("billType", billtype);
  291. map.put("warehousebillsitems", warehousebillsitems);
  292. return tWhgenlegMapper.updateTWhgenlegData(map);
  293. }
  294. /**
  295. * 新增详情主表
  296. *
  297. * @param tWarehouseBills 仓库主表
  298. * @param tWarehousebillsfeesCr 仓库费付款用明细表
  299. * @param tWarehousebillsfeesDr 仓库费收
  300. * 款用明细表
  301. * @param tWarehousebillsitems 仓库货物明细表
  302. * @param loginUser 当前登陆人
  303. * @param billsType 判断标识
  304. * @return 结果
  305. */
  306. @Override
  307. @Transactional
  308. public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr
  309. , String tWarehousebillsitems, String tWhgenleg, LoginUser loginUser, String billsType) {
  310. Long fPid = null;
  311. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  312. if (StringUtils.isNull(warehouseBills.getfId())) {
  313. // 如果是新数据
  314. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  315. warehouseBills.setfBilltype(billsType);
  316. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  317. // 提交时: 生流水号
  318. if ("6".equals(warehouseBills.getfBillstatus())) {
  319. // 业务编码
  320. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  321. warehouseBills.setfBillno(billNo);
  322. // 存货编码
  323. Date time = new Date();
  324. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  325. warehouseBills.setfBscorpno(bscorpno);
  326. }
  327. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  328. fPid = warehouseBills.getfId();
  329. } else {
  330. // 提交时: 生流水号
  331. if ("6".equals(warehouseBills.getfBillstatus())) {
  332. // 业务编码
  333. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  334. warehouseBills.setfBillno(billNo);
  335. // 存货编码
  336. Date time = new Date();
  337. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  338. warehouseBills.setfBscorpno(bscorpno);
  339. }
  340. fPid = warehouseBills.getfId();
  341. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  342. warehouseBills.setUpdateTime(new Date());
  343. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  344. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  345. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  346. tEnclosureMapper.deleteByFPid(fPid);
  347. }
  348. // 查询库存总账 库存明细不为空 并且 入库不是暂存状态 进行库存总账的查询新增修改
  349. if (tWarehousebillsitems != null && !"2".equals(warehouseBills.getfBillstatus())) {
  350. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  351. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  352. int i=1;
  353. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  354. // 查询总账是否存在
  355. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, wbItem);
  356. if ("SJRK".equals(billsType)) { // 入库数 、结余数
  357. if (StringUtils.isNull(tWhgenle)) { // 为空添加库存总账
  358. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  359. } else { // 非空修改库存总账
  360. if ("6".equals(warehouseBills.getfBillstatus())) {
  361. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  362. }
  363. }
  364. } else if ("SJCK".equals(billsType)) { // 出库 查询
  365. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  366. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  367. return AjaxResult.error("库存明细第"+i+"行库存为空");
  368. } else { // 非空修改库存总账
  369. if ("6".equals(warehouseBills.getfBillstatus())) {
  370. // 库存 < 出库件数 提示库存不足
  371. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  372. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  373. return AjaxResult.error("库存明细第"+i+"行库存不足");
  374. }
  375. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  376. }
  377. }
  378. } else if ("CKDB".equals(billsType)) { // 调拨查询
  379. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  380. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  381. return AjaxResult.error("库存明细第"+i+"行库存为空");
  382. } else { // 非空修改库存总账
  383. if ("6".equals(warehouseBills.getfBillstatus())) {
  384. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  385. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  386. return AjaxResult.error("库存明细第"+i+"行库存不足");
  387. } else { // 2、 库存足够 先 进行出库操作
  388. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  389. }
  390. // 3、 进行入库操作 查询是否存在库存
  391. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  392. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  393. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  394. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  395. } else { // 4、 存在 进行跟新库存
  396. if ("6".equals(warehouseBills.getfBillstatus())) {
  397. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  398. }
  399. }
  400. }
  401. }
  402. } else if ("HQZY".equals(billsType)) { // 货转
  403. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  404. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  405. return AjaxResult.error("库存明细第"+i+"行库存为空");
  406. } else { // 非空修改库存总账
  407. if ("6".equals(warehouseBills.getfBillstatus())) {
  408. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  409. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  410. return AjaxResult.error("库存明细第"+i+"行库存不足");
  411. } else { // 2、 库存足够 先 进行出库操作
  412. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  413. }
  414. // 3、 进行入库操作 查询是否存在库存
  415. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  416. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  417. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  418. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  419. } else { // 4、 存在 进行跟新库存
  420. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  421. }
  422. }
  423. }
  424. }
  425. i++;
  426. }
  427. }
  428. // 库存明细添加
  429. if (tWarehousebillsitems != null) {
  430. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  431. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  432. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  433. wbItem.setfPid(fPid);
  434. wbItem.setfMarks(warehouseBills.getfMarks());
  435. wbItem.setfMblno(warehouseBills.getfMblno());
  436. wbItem.setCreateBy(loginUser.getUser().getUserName());
  437. wbItem.setCreateTime(new Date());
  438. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  439. }
  440. }
  441. // 附件添加
  442. if (StringUtils.isNotNull(tWhgenleg)) {
  443. JSONArray jsonDrArray = JSONArray.parseArray(tWhgenleg);
  444. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  445. for (TEnclosure tEnclosure : tEnclosureList) {
  446. tEnclosure.setfPid(fPid);
  447. tEnclosure.setCreateBy(loginUser.getUser().getUserName());
  448. tEnclosure.setCreateTime(new Date());
  449. tEnclosureMapper.insertTEnclosure(tEnclosure);
  450. }
  451. }
  452. // 收款明细添加
  453. if (tWarehousebillsfeesDr != null) {
  454. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  455. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  456. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  457. // 检验 数量*单价=金额
  458. wbDr.setfPid(fPid);
  459. wbDr.setfDc("D");
  460. wbDr.setCreateBy(loginUser.getUser().getUserName());
  461. wbDr.setCreateTime(new Date());
  462. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  463. }
  464. }
  465. // 付款明细添加
  466. if (tWarehousebillsfeesCr != null) {
  467. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  468. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  469. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  470. wbCr.setfPid(fPid);
  471. wbCr.setfDc("C");
  472. wbCr.setCreateBy(loginUser.getUser().getUserName());
  473. wbCr.setCreateTime(new Date());
  474. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  475. }
  476. }
  477. return AjaxResult.success();
  478. }
  479. // 入库 收费明细 校验
  480. public Long check(BigDecimal number, BigDecimal unitPrice) {
  481. BigDecimal result1 = number.multiply(unitPrice);
  482. // 保留两位小数且四舍五入
  483. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  484. // 转换去掉小数点
  485. String result = result1.toString().replace(".", "");
  486. return Long.valueOf(result);
  487. }
  488. /**
  489. * 修改详情主表
  490. *
  491. * @param tWarehousebills 详情主表
  492. * @return 结果
  493. */
  494. @Override
  495. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  496. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  497. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  498. }
  499. /**
  500. * 批量删除详情主表
  501. *
  502. * @param fIds 需要删除的详情主表ID
  503. * @return 结果
  504. */
  505. @Override
  506. public int deleteTWarehousebillsByIds(Long[] fIds) {
  507. return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  508. }
  509. /**
  510. * 删除详情主表信息
  511. *
  512. * @param fId 详情主表ID
  513. * @return 结果
  514. */
  515. @Override
  516. public int deleteTWarehousebillsById(Long fId) {
  517. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  518. }
  519. @Override
  520. public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) {
  521. return null;
  522. }
  523. @Override
  524. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  525. return null;
  526. }
  527. @Override
  528. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  529. // 查询 仓库主表信息、库存明细信息
  530. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  531. // 修改主表信息
  532. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  533. tWarehousebills.setUpdateTime(new Date());
  534. tWarehousebills.setfBillstatus("3"); //撤销状态
  535. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  536. // 查询库存明细从表数据
  537. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  538. tWarehousebillsitems.setfPid(fId);
  539. List<TWarehousebillsitems> warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  540. // 撤销 库存总账
  541. if (StringUtils.isNotEmpty(warehousebillsitems)) {
  542. int i=1;
  543. for (TWarehousebillsitems wb : warehousebillsitems) {
  544. // 查询库存总账
  545. TWhgenleg tWhgenle=queryTWhgenleg(tWarehousebills,wb);
  546. if("SJRKRevoke".equals(billsType)){ // 撤销 入库
  547. if(StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc()) ){ // 非空 且 撤销数 <= 结余数
  548. updateTWhgenlegData(wb,tWhgenle.getfId(),billsType);
  549. } else{ // 撤销数>结余数
  550. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  551. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  552. }
  553. } else if("SJCKRevoke".equals(billsType)){ // 撤销出库
  554. if(StringUtils.isNotNull(tWhgenle) ){ // 非空
  555. updateTWhgenlegData(wb,tWhgenle.getfId(),billsType);
  556. } else{
  557. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  558. return AjaxResult.error("第"+i+"行未查询到库存信息");
  559. }
  560. } else if("CKDBRevoke".equals(billsType)){ // 调拨 撤销
  561. Long fCorpid=tWarehousebills.getfCorpid();// 原货权方
  562. Long fTocorpid=tWarehousebills.getfTocorpid(); // 新货权方
  563. // 1、新货权方撤销入库
  564. // 查询库存总账
  565. tWarehousebills.setfCorpid(fTocorpid);
  566. TWhgenleg tWhgenle1=queryTWhgenleg(tWarehousebills,wb);
  567. if(StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())){
  568. updateTWhgenlegData(wb,tWhgenle1.getfId(),"SJRKRevoke");
  569. }else{
  570. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  571. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  572. }
  573. // 2、原货权方撤销出库
  574. // 查询库存总账
  575. tWarehousebills.setfCorpid(fCorpid);
  576. TWhgenleg tWhgenle2=queryTWhgenleg(tWarehousebills,wb);
  577. updateTWhgenlegData(wb,tWhgenle2.getfId(),"SJCKRevoke");
  578. } else if("HQZYRevoke".equals(billsType)){ // 货转撤销 HQZYRevoke
  579. Long fCorpid=tWarehousebills.getfCorpid();// 原货权方
  580. Long fTocorpid=tWarehousebills.getfTocorpid(); // 新货权方
  581. // 1、新货权方撤销入库
  582. // 查询库存总账
  583. tWarehousebills.setfCorpid(fTocorpid);
  584. TWhgenleg tWhgenle1=queryTWhgenleg(tWarehousebills,wb);
  585. if(StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())){
  586. updateTWhgenlegData(wb,tWhgenle1.getfId(),"SJRKRevoke");
  587. }else{
  588. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  589. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  590. }
  591. // 2、原货权方撤销出库
  592. // 查询库存总账
  593. tWarehousebills.setfCorpid(fCorpid);
  594. TWhgenleg tWhgenle2=queryTWhgenleg(tWarehousebills,wb);
  595. updateTWhgenlegData(wb,tWhgenle2.getfId(),"SJCKRevoke");
  596. }
  597. i++;
  598. }
  599. }
  600. return AjaxResult.success();
  601. }
  602. }