TWarehouseBillsServiceImpl.java 29 KB

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