TWarehouseBillsServiceImpl.java 55 KB

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