TWarehouseBillsServiceImpl.java 29 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631
  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. if ("HQZY".equals(warehouseBills.getfBilltype())) {
  214. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  215. } else {
  216. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  217. }
  218. // 库区
  219. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  220. // 货物品名
  221. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  222. // 贸易方式
  223. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  224. return tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  225. }
  226. /**
  227. * 新增库存总账
  228. *
  229. * @param warehouseBills 仓库主表
  230. * @param warehousebillsitems 仓库明细表
  231. * @return 结果
  232. */
  233. @Transactional
  234. public int instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, SysUser user) {
  235. TWhgenleg tWhgenleg = new TWhgenleg();
  236. if ("SJRK".equals(warehouseBills.getfBilltype()) || "HQZY".equals(warehouseBills.getfBilltype())) {
  237. tWhgenleg.setfOriginalbilldate(new Date());
  238. }
  239. // 客户
  240. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  241. // 提单号
  242. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  243. // 原始单号
  244. tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno());
  245. // 仓库
  246. tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid());
  247. // 库区
  248. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  249. // 货物品名
  250. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  251. // 贸易方式
  252. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  253. // 入库数
  254. tWhgenleg.setfQtyd(warehousebillsitems.getfQty());
  255. // 入库尺码
  256. tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn());
  257. // 唛头
  258. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  259. // 入库毛重
  260. tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight());
  261. // 入库净重
  262. tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight());
  263. // 入库箱号
  264. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  265. // 创建人
  266. tWhgenleg.setCreateBy(user.getUserName());
  267. // 创建人
  268. tWhgenleg.setCreateTime(new Date());
  269. // 状态
  270. tWhgenleg.setfStatus("T");
  271. // 结余件数
  272. tWhgenleg.setfQtyblc(warehousebillsitems.getfQty());
  273. System.out.println("主表新增:" + warehouseBills.toString());
  274. System.out.println("要添加的总账:" + tWhgenleg.toString());
  275. return tWhgenlegMapper.insertTWhgenleg(tWhgenleg);
  276. }
  277. @Transactional
  278. public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) {
  279. Map<String, Object> map = new HashMap<>();
  280. map.put("whgenlegId", whgenlegId);
  281. map.put("billType", billtype);
  282. map.put("warehousebillsitems", warehousebillsitems);
  283. return tWhgenlegMapper.updateTWhgenlegData(map);
  284. }
  285. /**
  286. * 新增详情主表
  287. *
  288. * @param tWarehouseBills 仓库主表
  289. * @param tWarehousebillsfeesCr 仓库费付款用明细表
  290. * @param tWarehousebillsfeesDr 仓库费收
  291. * 款用明细表
  292. * @param tWarehousebillsitems 仓库货物明细表
  293. * @param loginUser 当前登陆人
  294. * @param billsType 判断标识
  295. * @return 结果
  296. */
  297. @Override
  298. @Transactional
  299. public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr
  300. , String tWarehousebillsitems, String tWhgenleg, LoginUser loginUser, String billsType) {
  301. Long fPid = null;
  302. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  303. if (StringUtils.isNull(warehouseBills.getfId())) {
  304. // 如果是新数据
  305. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  306. warehouseBills.setfBilltype(billsType);
  307. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  308. // 提交时: 生流水号
  309. if ("6".equals(warehouseBills.getfBillstatus())) {
  310. // 业务编码
  311. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  312. warehouseBills.setfBillno(billNo);
  313. // 存货编码
  314. Date time = new Date();
  315. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  316. warehouseBills.setfBscorpno(bscorpno);
  317. }
  318. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  319. fPid = warehouseBills.getfId();
  320. } else {
  321. // 提交时: 生流水号
  322. if ("6".equals(warehouseBills.getfBillstatus())) {
  323. // 业务编码
  324. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  325. warehouseBills.setfBillno(billNo);
  326. // 存货编码
  327. Date time = new Date();
  328. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  329. warehouseBills.setfBscorpno(bscorpno);
  330. }
  331. fPid = warehouseBills.getfId();
  332. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  333. warehouseBills.setUpdateTime(new Date());
  334. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  335. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  336. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  337. tEnclosureMapper.deleteByFPid(fPid);
  338. }
  339. // 查询库存总账 库存明细不为空 并且 入库不是暂存状态 进行库存总账的查询新增修改
  340. if (tWarehousebillsitems != null && !"2".equals(warehouseBills.getfBillstatus())) {
  341. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  342. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  343. int i=1;
  344. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  345. // 查询总账是否存在
  346. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, wbItem);
  347. if ("SJRK".equals(billsType)) { // 入库数 、结余数
  348. if (StringUtils.isNull(tWhgenle)) { // 为空添加库存总账
  349. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  350. } else { // 非空修改库存总账
  351. if ("6".equals(warehouseBills.getfBillstatus())) {
  352. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  353. }
  354. }
  355. } else if ("SJCK".equals(billsType)) { // 出库 查询
  356. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  357. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  358. return AjaxResult.error("库存明细第"+i+"行库存为空");
  359. } else { // 非空修改库存总账
  360. if ("6".equals(warehouseBills.getfBillstatus())) {
  361. // 库存 < 出库件数 提示库存不足
  362. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  363. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  364. return AjaxResult.error("库存明细第"+i+"行库存不足");
  365. }
  366. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  367. }
  368. }
  369. } else if ("CKDB".equals(billsType)) { // 调拨查询
  370. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  371. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  372. return AjaxResult.error("库存明细第"+i+"行库存为空");
  373. } else { // 非空修改库存总账
  374. if ("6".equals(warehouseBills.getfBillstatus())) {
  375. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  376. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  377. return AjaxResult.error("库存明细第"+i+"行库存不足");
  378. } else { // 2、 库存足够 先 进行出库操作
  379. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  380. }
  381. // 3、 进行入库操作 查询是否存在库存
  382. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  383. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  384. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  385. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  386. } else { // 4、 存在 进行跟新库存
  387. if ("6".equals(warehouseBills.getfBillstatus())) {
  388. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  389. }
  390. }
  391. }
  392. }
  393. } else if ("HQZY".equals(billsType)) { // 货转
  394. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  395. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  396. return AjaxResult.error("库存明细第"+i+"行库存为空");
  397. } else { // 非空修改库存总账
  398. if ("6".equals(warehouseBills.getfBillstatus())) {
  399. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  400. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  401. return AjaxResult.error("库存明细第"+i+"行库存不足");
  402. } else { // 2、 库存足够 先 进行出库操作
  403. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  404. }
  405. // 3、 进行入库操作 查询是否存在库存
  406. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  407. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  408. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  409. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  410. } else { // 4、 存在 进行跟新库存
  411. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  412. }
  413. }
  414. }
  415. }
  416. i++;
  417. }
  418. }
  419. // 库存明细添加
  420. if (tWarehousebillsitems != null) {
  421. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  422. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  423. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  424. wbItem.setfPid(fPid);
  425. wbItem.setfMarks(warehouseBills.getfMarks());
  426. wbItem.setfMblno(warehouseBills.getfMblno());
  427. wbItem.setCreateBy(loginUser.getUser().getUserName());
  428. wbItem.setCreateTime(new Date());
  429. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  430. }
  431. }
  432. // 附件添加
  433. if (StringUtils.isNotNull(tWhgenleg)) {
  434. JSONArray jsonDrArray = JSONArray.parseArray(tWhgenleg);
  435. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  436. for (TEnclosure tEnclosure : tEnclosureList) {
  437. tEnclosure.setfPid(fPid);
  438. tEnclosure.setCreateBy(loginUser.getUser().getUserName());
  439. tEnclosure.setCreateTime(new Date());
  440. tEnclosureMapper.insertTEnclosure(tEnclosure);
  441. }
  442. }
  443. // 收款明细添加
  444. if (tWarehousebillsfeesDr != null) {
  445. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  446. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  447. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  448. // 检验 数量*单价=金额
  449. wbDr.setfPid(fPid);
  450. wbDr.setfDc("D");
  451. wbDr.setCreateBy(loginUser.getUser().getUserName());
  452. wbDr.setCreateTime(new Date());
  453. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  454. }
  455. }
  456. // 付款明细添加
  457. if (tWarehousebillsfeesCr != null) {
  458. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  459. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  460. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  461. wbCr.setfPid(fPid);
  462. wbCr.setfDc("C");
  463. wbCr.setCreateBy(loginUser.getUser().getUserName());
  464. wbCr.setCreateTime(new Date());
  465. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  466. }
  467. }
  468. return AjaxResult.success();
  469. }
  470. // 入库 收费明细 校验
  471. public Long check(BigDecimal number, BigDecimal unitPrice) {
  472. BigDecimal result1 = number.multiply(unitPrice);
  473. // 保留两位小数且四舍五入
  474. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  475. // 转换去掉小数点
  476. String result = result1.toString().replace(".", "");
  477. return Long.valueOf(result);
  478. }
  479. /**
  480. * 修改详情主表
  481. *
  482. * @param tWarehousebills 详情主表
  483. * @return 结果
  484. */
  485. @Override
  486. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  487. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  488. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  489. }
  490. /**
  491. * 批量删除详情主表
  492. *
  493. * @param fIds 需要删除的详情主表ID
  494. * @return 结果
  495. */
  496. @Override
  497. public int deleteTWarehousebillsByIds(Long[] fIds) {
  498. return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  499. }
  500. /**
  501. * 删除详情主表信息
  502. *
  503. * @param fId 详情主表ID
  504. * @return 结果
  505. */
  506. @Override
  507. public int deleteTWarehousebillsById(Long fId) {
  508. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  509. }
  510. @Override
  511. public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) {
  512. return null;
  513. }
  514. @Override
  515. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  516. return null;
  517. }
  518. @Override
  519. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  520. // 查询 仓库主表信息、库存明细信息
  521. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  522. // 修改主表信息
  523. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  524. tWarehousebills.setUpdateTime(new Date());
  525. tWarehousebills.setfBillstatus("3"); //撤销状态
  526. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  527. // 查询库存明细从表数据
  528. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  529. tWarehousebillsitems.setfPid(fId);
  530. List<TWarehousebillsitems> warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  531. // 撤销 库存总账
  532. if (StringUtils.isNotEmpty(warehousebillsitems)) {
  533. int i=1;
  534. for (TWarehousebillsitems wb : warehousebillsitems) {
  535. // 查询库存总账
  536. TWhgenleg tWhgenle=queryTWhgenleg(tWarehousebills,wb);
  537. if("SJRKRevoke".equals(billsType)){ // 撤销 入库
  538. if(StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc()) ){ // 非空 且 撤销数 <= 结余数
  539. updateTWhgenlegData(wb,tWhgenle.getfId(),billsType);
  540. } else{ // 撤销数>结余数
  541. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  542. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  543. }
  544. } else if("SJCKRevoke".equals(billsType)){ // 撤销出库
  545. if(StringUtils.isNotNull(tWhgenle) ){ // 非空
  546. updateTWhgenlegData(wb,tWhgenle.getfId(),billsType);
  547. } else{
  548. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  549. return AjaxResult.error("第"+i+"行未查询到库存信息");
  550. }
  551. } else if("CKDBRevoke".equals(billsType)){ // 调拨 撤销
  552. Long fCorpid=tWarehousebills.getfCorpid();// 原货权方
  553. Long fTocorpid=tWarehousebills.getfTocorpid(); // 新货权方
  554. // 1、新货权方撤销入库
  555. // 查询库存总账
  556. tWarehousebills.setfCorpid(fTocorpid);
  557. TWhgenleg tWhgenle1=queryTWhgenleg(tWarehousebills,wb);
  558. if(StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())){
  559. updateTWhgenlegData(wb,tWhgenle1.getfId(),"SJRKRevoke");
  560. }else{
  561. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  562. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  563. }
  564. // 2、原货权方撤销出库
  565. // 查询库存总账
  566. tWarehousebills.setfCorpid(fCorpid);
  567. TWhgenleg tWhgenle2=queryTWhgenleg(tWarehousebills,wb);
  568. updateTWhgenlegData(wb,tWhgenle2.getfId(),"SJCKRevoke");
  569. } else if("HQZYRevoke".equals(billsType)){ // 货转撤销 HQZYRevoke
  570. Long fCorpid=tWarehousebills.getfCorpid();// 原货权方
  571. Long fTocorpid=tWarehousebills.getfTocorpid(); // 新货权方
  572. // 1、新货权方撤销入库
  573. // 查询库存总账
  574. tWarehousebills.setfCorpid(fTocorpid);
  575. TWhgenleg tWhgenle1=queryTWhgenleg(tWarehousebills,wb);
  576. if(StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())){
  577. updateTWhgenlegData(wb,tWhgenle1.getfId(),"SJRKRevoke");
  578. }else{
  579. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  580. return AjaxResult.error("第"+i+"行撤销数大于库存结余数");
  581. }
  582. // 2、原货权方撤销出库
  583. // 查询库存总账
  584. tWarehousebills.setfCorpid(fCorpid);
  585. TWhgenleg tWhgenle2=queryTWhgenleg(tWarehousebills,wb);
  586. updateTWhgenlegData(wb,tWhgenle2.getfId(),"SJCKRevoke");
  587. }
  588. i++;
  589. }
  590. }
  591. return AjaxResult.success();
  592. }
  593. }