TWarehouseBillsServiceImpl.java 35 KB

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