TWarehouseBillsServiceImpl.java 49 KB

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