TWarehouseBillsServiceImpl.java 54 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103
  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.setfMblno(tWarehousebills.getfMblno());
  118. TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  119. if (StringUtils.isNotNull(whgenleg)) {
  120. wb.put("fQtyblc", whgenleg.getfQtyblc());
  121. }*/
  122. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  123. Integer fGoodsid = (Integer) wb.get("fGoodsid");
  124. goodsId.add(fGoodsid.longValue());
  125. }
  126. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  127. Integer fWarehouselocid = (Integer) wb.get("fWarehouselocid");
  128. warehouseAreaId.add(fWarehouselocid.longValue());
  129. }
  130. }
  131. map.put("warehouseBillsItem", mapList);
  132. }
  133. // 查询仓库费用明细表数据
  134. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  135. tWarehousebillsfees.setfPid(fId);
  136. List<TWarehousebillsfees> warehousebillsfeesDr = new ArrayList<>();
  137. List<TWarehousebillsfees> warehousebillsfeesCr = new ArrayList<>();
  138. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  139. if (StringUtils.isNotEmpty(warehousebillsfees)) {
  140. for (TWarehousebillsfees fees : warehousebillsfees) {
  141. if ("C".equals(fees.getfDc())) {
  142. warehousebillsfeesCr.add(fees);
  143. } else {
  144. warehousebillsfeesDr.add(fees);
  145. }
  146. corpsId.add(fees.getfCorpid());
  147. feesId.add(fees.getfFeeid());
  148. }
  149. }
  150. // 查询附件表数据
  151. TEnclosure enclosure = new TEnclosure();
  152. enclosure.setfPid(fId);
  153. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  154. if (StringUtils.isNotEmpty(enclosures)) {
  155. map.put("enclosures", enclosures);
  156. }
  157. List<TCorps> corpsList = new ArrayList<>();
  158. List<Long> corpsIdList = StringUtils.integerDeduplication(corpsId);
  159. for (Long corpId : corpsIdList) {
  160. TCorps corps = tCorpsMapper.selectTCorpsById(corpId);
  161. if (StringUtils.isNotNull(corps)) {
  162. corpsList.add(corps);
  163. }
  164. }
  165. List<TWarehouseArea> warehouseAreaList = new ArrayList<>();
  166. List<Long> warehouseAreaIdList = StringUtils.integerDeduplication(warehouseAreaId);
  167. for (Long warehouseArea : warehouseAreaIdList) {
  168. TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaById(warehouseArea);
  169. if (StringUtils.isNotNull(tWarehouseArea)) {
  170. warehouseAreaList.add(tWarehouseArea);
  171. }
  172. }
  173. List<TGoods> goodsList = new ArrayList<>();
  174. List<Long> goodsIdList = StringUtils.integerDeduplication(goodsId);
  175. for (Long goods : goodsIdList) {
  176. TGoods tGoods = tGoodsMapper.selectTGoodsById(goods);
  177. if (StringUtils.isNotNull(tGoods)) {
  178. goodsList.add(tGoods);
  179. }
  180. }
  181. List<TFees> feesList = new ArrayList<>();
  182. List<Long> longList = StringUtils.integerDeduplication(feesId);
  183. for (Long fees : longList) {
  184. TFees tFees = tFeesMapper.selectTFeesById(fees);
  185. if (StringUtils.isNotNull(tFees)) {
  186. feesList.add(tFees);
  187. }
  188. }
  189. map.put("corps", corpsList);
  190. map.put("goodsList", goodsList);
  191. map.put("feesList", feesList);
  192. map.put("sysUser", sysUserList);
  193. map.put("warehouse", warehouseList);
  194. map.put("warehouseAreas", warehouseAreaList);
  195. map.put("warehousebillsfeesDr", warehousebillsfeesDr);
  196. map.put("warehousebillsfeesCr", warehousebillsfeesCr);
  197. map.put("dept", sysDeptMapper.selectDeptById(tWarehousebills.getfDeptid()));
  198. return map;
  199. }
  200. /**
  201. * 查询详情主表列表
  202. *
  203. * @param tWarehousebills 详情主表
  204. * @return 详情主表
  205. */
  206. @Override
  207. public List<Map<String, Object>> selectWarehouseBusinessList(TWarehouseBills tWarehousebills) {
  208. return tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  209. }
  210. /**
  211. * 查询导出所需主表列表
  212. *
  213. * @param tWarehousebills 详情主表
  214. * @return 详情主表
  215. */
  216. @Override
  217. public List<TWarehouseBills> selectTWarehousebillsList(TWarehouseBills tWarehousebills) {
  218. return tWarehouseBillsMapper.selectTWarehousebillsList(tWarehousebills);
  219. }
  220. /**
  221. * 根据条件查询总账是否存在
  222. *
  223. * @param warehouseBills 仓库主表
  224. * @param warehousebillsitems 仓库明细表
  225. * @return 库存总账
  226. */
  227. public TWhgenleg queryTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems) {
  228. TWhgenleg tWhgenleg = new TWhgenleg();
  229. // 客户
  230. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  231. // 提单号
  232. if ("HQZY".equals(warehouseBills.getfBilltype())) {
  233. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  234. } else {
  235. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  236. }
  237. // 库区
  238. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  239. // 货物品名
  240. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  241. // 贸易方式
  242. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  243. return tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  244. }
  245. /**
  246. * 新增库存总账
  247. *
  248. * @param warehouseBills 仓库主表
  249. * @param warehousebillsitems 仓库明细表
  250. * @return 结果
  251. */
  252. @Transactional
  253. public int instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, SysUser user) {
  254. TWhgenleg tWhgenleg = new TWhgenleg();
  255. if ("SJRK".equals(warehouseBills.getfBilltype()) || "HQZY".equals(warehouseBills.getfBilltype())) {
  256. tWhgenleg.setfOriginalbilldate(new Date());
  257. }
  258. // 客户
  259. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  260. // 提单号
  261. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  262. // 原始单号
  263. tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno());
  264. // 仓库
  265. tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid());
  266. // 库区
  267. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  268. // 货物品名
  269. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  270. // 计费方式
  271. tWhgenleg.setfBillingway(warehousebillsitems.getfBillingway());
  272. // 仓储计费日期
  273. tWhgenleg.setfChargedate(warehousebillsitems.getfChargedate());
  274. // 贸易方式
  275. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  276. // 入库数
  277. tWhgenleg.setfQtyd(warehousebillsitems.getfQty());
  278. // 入库尺码
  279. tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn());
  280. // 唛头
  281. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  282. // 入库毛重
  283. tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight());
  284. // 入库净重
  285. tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight());
  286. // 入库箱号
  287. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  288. // 创建人
  289. tWhgenleg.setCreateBy(user.getUserName());
  290. // 创建人
  291. tWhgenleg.setCreateTime(new Date());
  292. // 状态
  293. tWhgenleg.setfStatus("T");
  294. // 结余件数
  295. tWhgenleg.setfQtyblc(warehousebillsitems.getfQty());
  296. System.out.println("主表新增:" + warehouseBills.toString());
  297. System.out.println("要添加的总账:" + tWhgenleg.toString());
  298. return tWhgenlegMapper.insertTWhgenleg(tWhgenleg);
  299. }
  300. @Transactional
  301. public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) {
  302. Map<String, Object> map = new HashMap<>();
  303. map.put("whgenlegId", whgenlegId);
  304. map.put("billType", billtype);
  305. map.put("warehousebillsitems", warehousebillsitems);
  306. return tWhgenlegMapper.updateTWhgenlegData(map);
  307. }
  308. /**
  309. * 新增详情主表
  310. *
  311. * @param tWarehouseBills 仓库主表
  312. * @param tWarehousebillsfeesCr 仓库费付款用明细表
  313. * @param tWarehousebillsfeesDr 仓库费收
  314. * 款用明细表
  315. * @param tWarehousebillsitems 仓库货物明细表
  316. * @param loginUser 当前登陆人
  317. * @param billsType 判断标识
  318. * @return 结果
  319. */
  320. @Override
  321. @Transactional
  322. public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr
  323. , String tWarehousebillsitems, String tWhgenleg, LoginUser loginUser, String billsType) {
  324. Long fPid = null;
  325. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  326. if (StringUtils.isNull(warehouseBills.getfId())) {
  327. // 如果是新数据
  328. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  329. warehouseBills.setfBilltype(billsType);
  330. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  331. /*// 提交时: 生流水号
  332. if ("6".equals(warehouseBills.getfBillstatus()) || "7".equals(warehouseBills.getfBillstatus())) {
  333. // 业务编码
  334. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  335. warehouseBills.setfBillno(billNo);
  336. // 存货编码
  337. Date time = new Date();
  338. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  339. warehouseBills.setfBscorpno(bscorpno);
  340. }*/
  341. // 业务编码
  342. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  343. warehouseBills.setfBillno(billNo);
  344. // 存货编码
  345. Date time = new Date();
  346. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  347. warehouseBills.setfBscorpno(bscorpno);
  348. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  349. fPid = warehouseBills.getfId();
  350. } else {
  351. fPid = warehouseBills.getfId();
  352. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  353. warehouseBills.setUpdateTime(new Date());
  354. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  355. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  356. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  357. tEnclosureMapper.deleteByFPid(fPid);
  358. }
  359. // 查询库存总账 库存明细不为空 并且 入库不是暂存状态 进行库存总账的查询新增修改
  360. if (tWarehousebillsitems != null && !"2".equals(warehouseBills.getfBillstatus())) {
  361. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  362. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  363. int i = 1;
  364. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  365. // 查询总账是否存在
  366. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, wbItem);
  367. // 入库数特殊不判断入账
  368. if ("SJCK".equals(billsType)) { // 出库 查询
  369. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  370. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  371. return AjaxResult.error("库存明细第" + i + "行库存为空");
  372. } else { // 非空修改库存总账
  373. if ("6".equals(warehouseBills.getfBillstatus())) {
  374. // 库存 < 出库件数 提示库存不足
  375. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  376. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  377. return AjaxResult.error("库存明细第" + i + "行库存不足");
  378. }
  379. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  380. }
  381. }
  382. } else if ("CKDB".equals(billsType)) { // 调拨查询
  383. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  384. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  385. return AjaxResult.error("库存明细第" + i + "行库存为空");
  386. } else { // 非空修改库存总账
  387. if ("6".equals(warehouseBills.getfBillstatus())) {
  388. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  389. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  390. return AjaxResult.error("库存明细第" + i + "行库存不足");
  391. } else { // 2、 库存足够 先 进行出库操作
  392. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  393. }
  394. // 3、 进行入库操作 查询是否存在库存
  395. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  396. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  397. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  398. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  399. } else { // 4、 存在 进行跟新库存
  400. if ("6".equals(warehouseBills.getfBillstatus())) {
  401. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  402. }
  403. }
  404. }
  405. }
  406. } else if ("HQZY".equals(billsType)) { // 货转
  407. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  408. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  409. return AjaxResult.error("库存明细第" + i + "行库存为空");
  410. } else { // 非空修改库存总账
  411. if ("6".equals(warehouseBills.getfBillstatus())) {
  412. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  413. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  414. return AjaxResult.error("库存明细第" + i + "行库存不足");
  415. } else { // 2、 库存足够 先 进行出库操作
  416. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  417. }
  418. // 3、 进行入库操作 查询是否存在库存
  419. warehouseBills.setfCorpid(warehouseBills.getfTocorpid()); // 新货权方
  420. TWhgenleg tWhgenle1 = queryTWhgenleg(warehouseBills, wbItem);
  421. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  422. instalTWhgenleg(warehouseBills, wbItem, loginUser.getUser());
  423. } else { // 4、 存在 进行跟新库存
  424. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  425. }
  426. }
  427. }
  428. }
  429. i++;
  430. }
  431. }
  432. // 库存明细添加
  433. if (tWarehousebillsitems != null) {
  434. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  435. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  436. int notInStorage = 0;
  437. int Stored = 0;
  438. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  439. if (wbItem.getfBillstatus() == null) {
  440. wbItem.setfBillstatus("1");
  441. notInStorage++;
  442. } else if (wbItem.getfBillstatus().equals("6")) {
  443. wbItem.setfBillstatus("6");
  444. Stored++;
  445. } else if (wbItem.getfBillstatus().equals("1")) {
  446. wbItem.setfBillstatus("1");
  447. notInStorage++;
  448. }
  449. wbItem.setfPid(fPid);
  450. wbItem.setfMarks(warehouseBills.getfMarks());
  451. wbItem.setfMblno(warehouseBills.getfMblno());
  452. wbItem.setCreateBy(loginUser.getUser().getUserName());
  453. wbItem.setCreateTime(new Date());
  454. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  455. }
  456. // 录入库存明细整体状态
  457. TWarehouseBills warehouseBill = new TWarehouseBills();
  458. warehouseBill.setfId(fPid);
  459. if (Objects.equals(Stored, 0)) { // 未入库
  460. warehouseBill.setfItemsStatus("1");
  461. } else if (Objects.equals(notInStorage, 0)) { // 已入库
  462. warehouseBill.setfItemsStatus("6");
  463. } else { // 有已入库、有未入库
  464. warehouseBill.setfItemsStatus("2");
  465. }
  466. tWarehouseBillsMapper.updateTWarehousebills(warehouseBill);
  467. }
  468. // 附件添加
  469. if (StringUtils.isNotNull(tWhgenleg)) {
  470. JSONArray jsonDrArray = JSONArray.parseArray(tWhgenleg);
  471. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  472. for (TEnclosure tEnclosure : tEnclosureList) {
  473. tEnclosure.setfPid(fPid);
  474. tEnclosure.setCreateBy(loginUser.getUser().getUserName());
  475. tEnclosure.setCreateTime(new Date());
  476. tEnclosureMapper.insertTEnclosure(tEnclosure);
  477. }
  478. }
  479. // 收款明细添加
  480. if (tWarehousebillsfeesDr != null) {
  481. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  482. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  483. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  484. // 检验 数量*单价=金额
  485. wbDr.setfPid(fPid);
  486. wbDr.setfDc("D");
  487. wbDr.setCreateBy(loginUser.getUser().getUserName());
  488. wbDr.setCreateTime(new Date());
  489. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  490. }
  491. }
  492. // 付款明细添加
  493. if (tWarehousebillsfeesCr != null) {
  494. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  495. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  496. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  497. wbCr.setfPid(fPid);
  498. wbCr.setfDc("C");
  499. wbCr.setCreateBy(loginUser.getUser().getUserName());
  500. wbCr.setCreateTime(new Date());
  501. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  502. }
  503. }
  504. if ("2".equals(warehouseBills.getfBillstatus())) {
  505. return AjaxResult.success(warehouseBills);
  506. }
  507. return AjaxResult.success();
  508. }
  509. /**
  510. * 入库详情入账
  511. *
  512. * @param warehouseBills 主表
  513. * @param warehousebillsitems 明细
  514. * @param whgenleg 附件
  515. * @param loginUser 当前登录人
  516. * @param billsType 状态
  517. * @return 结果
  518. */
  519. @Override
  520. @Transactional
  521. public AjaxResult addCredit(String warehouseBills, String warehousebillsitems, String whgenleg, LoginUser loginUser, String billsType) {
  522. Long fPid = null;
  523. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  524. return AjaxResult.error("未找到主表信息");
  525. }
  526. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  527. return AjaxResult.error("未找到入账信息");
  528. }
  529. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  530. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  531. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  532. tWarehouseBills.setUpdateTime(new Date());
  533. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  534. fPid = tWarehouseBills.getfId();
  535. tEnclosureMapper.deleteByFPid(fPid);
  536. } else {
  537. // 业务编码
  538. String billNo = billnoSerialServiceImpl.getBillNo(billsType, tWarehouseBills.getfBsdate());
  539. tWarehouseBills.setfBillno(billNo);
  540. // 存货编码
  541. Date time = new Date();
  542. String bscorpno = billnoSerialServiceImpl.getCorpNo(tWarehouseBills.getfCorpid(), time);
  543. tWarehouseBills.setfBscorpno(bscorpno);
  544. tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  545. tWarehouseBills.setCreateTime(new Date());
  546. tWarehouseBills.setfBilltype("SJRK");
  547. tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  548. // 已入账
  549. tWarehouseBills.setfBillstatus("2");
  550. tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
  551. fPid = tWarehouseBills.getfId();
  552. }
  553. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  554. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  555. for (TWarehousebillsitems item : warehousebillsitemsList) {
  556. // 唛头添加
  557. item.setfMarks(tWarehouseBills.getfMarks());
  558. item.setfBillingway(tWarehouseBills.getfBillingway());
  559. item.setfChargedate(tWarehouseBills.getfChargedate());
  560. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, item);
  561. if (StringUtils.isNotNull(tWhgenle)) {
  562. int i = updateTWhgenlegData(item, tWhgenle.getfId(), billsType);
  563. if (i <= 0) {
  564. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  565. return AjaxResult.error("更新库存总账失败");
  566. }
  567. } else {
  568. if (instalTWhgenleg(tWarehouseBills, item, loginUser.getUser()) <= 0) {
  569. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  570. return AjaxResult.error("新增库存总账失败");
  571. }
  572. }
  573. item.setfPid(fPid);
  574. item.setfBillstatus("6");
  575. item.setCreateBy(loginUser.getUser().getUserName());
  576. item.setCreateTime(new Date());
  577. int num = 0;
  578. if (StringUtils.isNotNull(item.getfId())) {
  579. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  580. } else {
  581. num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
  582. }
  583. if (num <= 0) {
  584. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  585. return AjaxResult.error("新增库存明细失败");
  586. }
  587. }
  588. // 查询所有库存明细 修改仓库主表状态
  589. int notInStorage = 0;
  590. int Stored = 0;
  591. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  592. tWarehousebillsitems.setfPid(fPid);
  593. List<TWarehousebillsitems> warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  594. for (TWarehousebillsitems item : warehousebillsitemsList1) {
  595. if (item.getfBillstatus() == null) {
  596. notInStorage++;
  597. } else if (item.getfBillstatus().equals("6")) {
  598. Stored++;
  599. } else if (item.getfBillstatus().equals("1")) {
  600. notInStorage++;
  601. }
  602. }
  603. // 录入库存明细整体状态
  604. TWarehouseBills warehouseBill = new TWarehouseBills();
  605. warehouseBill.setfId(fPid);
  606. if (Objects.equals(Stored, 0)) { // 未入库
  607. warehouseBill.setfItemsStatus("1");
  608. } else if (Objects.equals(notInStorage, 0)) { // 已入库
  609. warehouseBill.setfItemsStatus("6");
  610. } else { // 有已入库、有未入库
  611. warehouseBill.setfItemsStatus("2");
  612. }
  613. tWarehouseBillsMapper.updateTWarehousebills(warehouseBill);
  614. if (StringUtils.isNotNull(whgenleg) && !"[]".equals(whgenleg)) {
  615. JSONArray jsonDrArray = JSONArray.parseArray(whgenleg);
  616. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  617. for (TEnclosure tEnclosure : tEnclosureList) {
  618. tEnclosure.setfPid(fPid);
  619. tEnclosure.setCreateBy(loginUser.getUser().getUserName());
  620. tEnclosure.setCreateTime(new Date());
  621. tEnclosureMapper.insertTEnclosure(tEnclosure);
  622. }
  623. }
  624. // 添加成功 主键返回 前台
  625. return AjaxResult.success("成功", fPid);
  626. }
  627. /**
  628. * 出库、调拨、货转 确认
  629. *
  630. * @param warehouseBills
  631. * @param warehousebillsitems
  632. * @param loginUser
  633. * @param billsType
  634. * @return
  635. */
  636. @Override
  637. @Transactional
  638. public AjaxResult updateCredit(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) {
  639. Long fPid = null;
  640. Map<String, Object> map = new HashMap<>();
  641. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  642. return AjaxResult.error("未找到主表信息");
  643. }
  644. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  645. return AjaxResult.error("未找到入账信息");
  646. }
  647. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  648. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  649. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  650. tWarehouseBills.setUpdateTime(new Date());
  651. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  652. fPid = tWarehouseBills.getfId();
  653. tEnclosureMapper.deleteByFPid(fPid);
  654. } else {
  655. // 业务编码
  656. String billNo = billnoSerialServiceImpl.getBillNo(billsType, tWarehouseBills.getfBsdate());
  657. tWarehouseBills.setfBillno(billNo);
  658. // 存货编码
  659. Date time = new Date();
  660. String bscorpno = billnoSerialServiceImpl.getCorpNo(tWarehouseBills.getfCorpid(), time);
  661. tWarehouseBills.setfBscorpno(bscorpno);
  662. tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  663. tWarehouseBills.setCreateTime(new Date());
  664. tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  665. // 已入账
  666. tWarehouseBills.setfBillstatus("2");
  667. tWarehouseBills.setfBilltype(billsType);
  668. tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
  669. fPid = tWarehouseBills.getfId();
  670. }
  671. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  672. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  673. int i = 1;
  674. List<TFees> feesList = new ArrayList<>();
  675. List<TWarehousebillsfees> warehousebillsfees = new ArrayList<>();
  676. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  677. // 唛头添加
  678. wbItem.setfMarks(tWarehouseBills.getfMarks());
  679. // 查询总账是否存在
  680. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, wbItem);
  681. // 入库数特殊不判断入账
  682. if ("SJCK".equals(billsType)) { // 出库 查询
  683. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  684. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  685. return AjaxResult.error("库存明细第" + i + "行库存为空");
  686. } else { // 非空修改库存总账
  687. // 库存 < 出库件数 、
  688. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  689. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  690. return AjaxResult.error("库存明细第" + i + "行库存不足");
  691. }
  692. // 更新库存总账
  693. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  694. TWarehouseAgreementServiceImpl tWarehouseAgreementService = new TWarehouseAgreementServiceImpl();
  695. long dateDay = DateUtils.getDateDay(tWarehouseBills.getfBsdate(), wbItem.getfBsdate());
  696. long fCorpid = tWarehouseBills.getfCorpid();
  697. long fGoodsid = wbItem.getfGoodsid();
  698. long fBillingway = wbItem.getfBillingway();
  699. long fQty = wbItem.getfQty();
  700. // 计算仓储费明细
  701. Map<String, Object> objectMap = tWarehouseAgreementService.getCarryingCost(fCorpid, fGoodsid, dateDay, fBillingway, fQty);
  702. if (StringUtils.isNull(objectMap)) {
  703. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  704. return AjaxResult.error("库存明细第" + i + "行没有维护出库明细的仓储协议,操作终止");
  705. }
  706. TWarehousebillsfees fees = new TWarehousebillsfees();
  707. Long feeId = (Long) objectMap.get("feeId");
  708. BigDecimal amt = (BigDecimal) objectMap.get("amt");
  709. fees.setfPid(fPid);
  710. fees.setfFeeid(feeId);
  711. fees.setfFeeUnitid(fBillingway);
  712. fees.setfQty(new BigDecimal(1));
  713. fees.setfUnitprice(amt);
  714. fees.setfAmount(amt);
  715. warehousebillsfees.add(fees);
  716. TFees tFees = tFeesMapper.selectTFeesById(feeId);
  717. if (StringUtils.isNotNull(tFees)) {
  718. feesList.add(tFees);
  719. }
  720. }
  721. } else if ("CKDB".equals(billsType)) { // 调拨查询
  722. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  723. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  724. return AjaxResult.error("库存明细第" + i + "行库存为空");
  725. } else { // 非空修改库存总账
  726. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  727. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  728. return AjaxResult.error("库存明细第" + i + "行库存不足");
  729. } else { // 2、 库存足够 先 进行出库操作
  730. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  731. }
  732. // 3、 进行入库操作 查询是否存在库存
  733. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方
  734. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  735. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  736. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  737. } else { // 4、 存在 进行跟新库存
  738. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  739. }
  740. }
  741. } else if ("HQZY".equals(billsType)) { // 货转
  742. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  743. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  744. return AjaxResult.error("库存明细第" + i + "行库存为空");
  745. } else { // 非空修改库存总账
  746. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  747. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  748. return AjaxResult.error("库存明细第" + i + "行库存不足");
  749. } else { // 2、 库存足够 先 进行出库操作
  750. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  751. }
  752. // 3、 进行入库操作 查询是否存在库存
  753. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方
  754. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  755. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  756. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  757. } else { // 4、 存在 进行跟新库存
  758. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  759. }
  760. }
  761. }
  762. i++;
  763. wbItem.setfPid(fPid);
  764. wbItem.setfBillstatus("6");
  765. wbItem.setfBsdate(tWarehouseBills.getfBsdate());
  766. wbItem.setCreateBy(loginUser.getUser().getUserName());
  767. wbItem.setCreateTime(new Date());
  768. int num = 0;
  769. if (StringUtils.isNotNull(wbItem.getfId())) {
  770. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  771. } else {
  772. num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  773. }
  774. if (num <= 0) {
  775. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  776. return AjaxResult.error("库存明细更新失败");
  777. }
  778. }
  779. // 查询所有库存明细 修改仓库主表状态
  780. int notInStorage = 0;
  781. int Stored = 0;
  782. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  783. tWarehousebillsitems.setfPid(fPid);
  784. List<TWarehousebillsitems> warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  785. for (TWarehousebillsitems item : warehousebillsitemsList1) {
  786. if (item.getfBillstatus() == null) {
  787. notInStorage++;
  788. } else if (item.getfBillstatus().equals("6")) {
  789. Stored++;
  790. } else if (item.getfBillstatus().equals("1")) {
  791. notInStorage++;
  792. }
  793. }
  794. // 录入库存明细整体状态
  795. TWarehouseBills warehouseBill = new TWarehouseBills();
  796. warehouseBill.setfId(fPid);
  797. if (Objects.equals(Stored, 0)) { // 未入库
  798. warehouseBill.setfItemsStatus("1");
  799. } else if (Objects.equals(notInStorage, 0)) { // 已入库
  800. warehouseBill.setfItemsStatus("6");
  801. } else { // 有已入库、有未入库
  802. warehouseBill.setfItemsStatus("2");
  803. }
  804. tWarehouseBillsMapper.updateTWarehousebills(warehouseBill);
  805. map.put("fPid", fPid);
  806. map.put("fees", feesList);
  807. map.put("warehousebillsfees", warehousebillsfees);
  808. // 添加成功 主键返回 前台
  809. return AjaxResult.success("成功", map);
  810. }
  811. // 入库 收费明细 校验
  812. public Long check(BigDecimal number, BigDecimal unitPrice) {
  813. BigDecimal result1 = number.multiply(unitPrice);
  814. // 保留两位小数且四舍五入
  815. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  816. // 转换去掉小数点
  817. String result = result1.toString().replace(".", "");
  818. return Long.valueOf(result);
  819. }
  820. /**
  821. * 修改详情主表
  822. *
  823. * @param tWarehousebills 详情主表
  824. * @return 结果
  825. */
  826. @Override
  827. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  828. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  829. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  830. }
  831. /**
  832. * 批量删除详情主表
  833. *
  834. * @param fIds 需要删除的详情主表ID
  835. * @return 结果
  836. */
  837. @Override
  838. public int deleteTWarehousebillsByIds(Long[] fIds) {
  839. // 取出业务编号、 放入 billno_del
  840. for (Long id : fIds) {
  841. // 1、查询主表信息
  842. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  843. // 2、业务编号、客存编号 放入 billno_del
  844. BillnoDel billnoDel = new BillnoDel();
  845. billnoDel.setBillType(tWarehousebills.getfBilltype());
  846. billnoDel.setBillNo(tWarehousebills.getfBillno());
  847. billnoDelMapper.insertBillnoDel(billnoDel);
  848. }
  849. return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  850. }
  851. /**
  852. * 删除详情主表信息
  853. *
  854. * @param fId 详情主表ID
  855. * @return 结果
  856. */
  857. @Override
  858. public int deleteTWarehousebillsById(Long fId) {
  859. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  860. }
  861. @Override
  862. public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) {
  863. return null;
  864. }
  865. @Override
  866. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  867. return null;
  868. }
  869. @Override
  870. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  871. // 查询 仓库主表信息、库存明细信息
  872. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  873. // 修改主表信息
  874. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  875. tWarehousebills.setUpdateTime(new Date());
  876. tWarehousebills.setfBillstatus("3"); //撤销状态
  877. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  878. // 查询库存明细从表数据
  879. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  880. tWarehousebillsitems.setfPid(fId);
  881. List<TWarehousebillsitems> warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  882. // 撤销 库存总账
  883. if (StringUtils.isNotEmpty(warehousebillsitems)) {
  884. int i = 1;
  885. for (TWarehousebillsitems wb : warehousebillsitems) {
  886. // 查询库存总账
  887. TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb);
  888. if ("SJRKRevoke".equals(billsType)) { // 撤销 入库
  889. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  890. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  891. } else { // 撤销数>结余数
  892. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  893. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  894. }
  895. } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库
  896. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  897. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  898. } else {
  899. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  900. return AjaxResult.error("第" + i + "行未查询到库存信息");
  901. }
  902. } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销
  903. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  904. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  905. // 1、新货权方撤销入库
  906. // 查询库存总账
  907. tWarehousebills.setfCorpid(fTocorpid);
  908. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  909. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  910. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  911. } else {
  912. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  913. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  914. }
  915. // 2、原货权方撤销出库
  916. // 查询库存总账
  917. tWarehousebills.setfCorpid(fCorpid);
  918. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  919. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  920. } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke
  921. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  922. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  923. // 1、新货权方撤销入库
  924. // 查询库存总账
  925. tWarehousebills.setfCorpid(fTocorpid);
  926. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  927. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  928. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  929. } else {
  930. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  931. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  932. }
  933. // 2、原货权方撤销出库
  934. // 查询库存总账
  935. tWarehousebills.setfCorpid(fCorpid);
  936. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  937. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  938. }
  939. i++;
  940. }
  941. }
  942. return AjaxResult.success();
  943. }
  944. /**
  945. * 撤销入账
  946. *
  947. * @param warehouseBills 主表
  948. * @param warehousebillsitems 明细
  949. * @param loginUser 当前登录人
  950. * @param billsType 状态
  951. * @return 结果
  952. */
  953. @Override
  954. @Transactional
  955. public AjaxResult revokeTWarehousebillsById1(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) {
  956. Long fPid = null;
  957. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  958. return AjaxResult.error("未找到主表信息");
  959. }
  960. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  961. return AjaxResult.error("未找到入账信息");
  962. }
  963. TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  964. fPid = tWarehousebills.getfId();
  965. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  966. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  967. if (StringUtils.isNotEmpty(warehousebillsitemsList)) {
  968. int i = 1;
  969. for (TWarehousebillsitems wb : warehousebillsitemsList) {
  970. // 查询库存总账
  971. TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb);
  972. if ("SJRKRevoke".equals(billsType)) { // 撤销 入库
  973. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  974. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  975. } else { // 撤销数>结余数
  976. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  977. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  978. }
  979. } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库
  980. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  981. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  982. } else {
  983. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  984. return AjaxResult.error("第" + i + "行未查询到库存信息");
  985. }
  986. } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销
  987. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  988. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  989. // 1、新货权方撤销入库
  990. // 查询库存总账
  991. tWarehousebills.setfCorpid(fTocorpid);
  992. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  993. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  994. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  995. } else {
  996. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  997. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  998. }
  999. // 2、原货权方撤销出库
  1000. // 查询库存总账
  1001. tWarehousebills.setfCorpid(fCorpid);
  1002. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  1003. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  1004. } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke
  1005. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  1006. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  1007. // 1、新货权方撤销入库
  1008. // 查询库存总账
  1009. tWarehousebills.setfCorpid(fTocorpid);
  1010. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  1011. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  1012. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  1013. } else {
  1014. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1015. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  1016. }
  1017. // 2、原货权方撤销出库
  1018. // 查询库存总账
  1019. tWarehousebills.setfCorpid(fCorpid);
  1020. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  1021. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  1022. }
  1023. i++;
  1024. wb.setfBillstatus("1");
  1025. wb.setUpdateBy(loginUser.getUser().getUserName());
  1026. wb.setUpdateTime(new Date());
  1027. if (tWarehousebillsitemsMapper.updateTWarehousebillsitems(wb) <= 0) {
  1028. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1029. return AjaxResult.error("新增库存明细失败");
  1030. }
  1031. }
  1032. }
  1033. // 查询所有库存明细 修改仓库主表状态
  1034. int notInStorage = 0;
  1035. int Stored = 0;
  1036. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  1037. tWarehousebillsitems.setfPid(fPid);
  1038. List<TWarehousebillsitems> warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  1039. for (TWarehousebillsitems item : warehousebillsitemsList1) {
  1040. if (item.getfBillstatus() == null) {
  1041. notInStorage++;
  1042. } else if (item.getfBillstatus().equals("6")) {
  1043. Stored++;
  1044. } else if (item.getfBillstatus().equals("1")) {
  1045. notInStorage++;
  1046. }
  1047. }
  1048. // 录入库存明细整体状态
  1049. TWarehouseBills warehouseBill = new TWarehouseBills();
  1050. warehouseBill.setfId(fPid);
  1051. if (Objects.equals(Stored, 0)) { // 未入库
  1052. warehouseBill.setfItemsStatus("1");
  1053. } else if (Objects.equals(notInStorage, 0)) { // 已入库
  1054. warehouseBill.setfItemsStatus("6");
  1055. } else { // 有已入库、有未入库
  1056. warehouseBill.setfItemsStatus("2");
  1057. }
  1058. tWarehouseBillsMapper.updateTWarehousebills(warehouseBill);
  1059. return AjaxResult.success();
  1060. }
  1061. }