TWarehouseBillsServiceImpl.java 52 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111
  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. wbItem.setfBilltype(billsType);
  365. if(null!=wbItem.getfId()){
  366. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  367. wbItem.setUpdateTime(new Date());
  368. tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  369. }else{
  370. // 添加主表 业务单号
  371. wbItem.setfBillno(warehouseBills.getfBillno());
  372. wbItem.setfMblno(warehouseBills.getfMblno());
  373. wbItem.setfPid(fPid);
  374. wbItem.setCreateBy(loginUser.getUser().getUserName());
  375. wbItem.setCreateTime(new Date());
  376. wbItem.setfBillstatus("10");
  377. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  378. if(!billsType.equals("HQZY")){
  379. // 添加状态log
  380. insertTWarehousebillsLog(wbItem, 10l,loginUser);
  381. }
  382. }
  383. }
  384. // 录入库存明细整体状态 --> 更新主表 入账状态
  385. updateWarehousebillsItemsStatus(warehouseBills);
  386. }
  387. // 附件添加
  388. if (StringUtils.isNotNull(tWhgenleg)) {
  389. JSONArray jsonDrArray = JSONArray.parseArray(tWhgenleg);
  390. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  391. for (TEnclosure tEnclosure : tEnclosureList) {
  392. tEnclosure.setfPid(fPid);
  393. tEnclosure.setCreateBy(loginUser.getUser().getUserName());
  394. tEnclosure.setCreateTime(new Date());
  395. tEnclosureMapper.insertTEnclosure(tEnclosure);
  396. }
  397. }
  398. // 收款明细添加
  399. if (tWarehousebillsfeesDr != null) {
  400. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  401. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  402. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  403. // 检验 数量*单价=金额
  404. wbDr.setfPid(fPid);
  405. wbDr.setfDc("D");
  406. wbDr.setCreateBy(loginUser.getUser().getUserName());
  407. wbDr.setCreateTime(new Date());
  408. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  409. }
  410. }
  411. // 付款明细添加
  412. if (tWarehousebillsfeesCr != null) {
  413. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  414. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  415. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  416. wbCr.setfPid(fPid);
  417. wbCr.setfDc("C");
  418. wbCr.setCreateBy(loginUser.getUser().getUserName());
  419. wbCr.setCreateTime(new Date());
  420. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  421. }
  422. }
  423. if ("2".equals(warehouseBills.getfBillstatus())) {
  424. return AjaxResult.success(warehouseBills);
  425. }
  426. return AjaxResult.success();
  427. }
  428. /**
  429. * 入库详情入账
  430. *
  431. * @param warehouseBills 主表
  432. * @param warehousebillsitems 明细
  433. * @param loginUser 当前登录人
  434. * @param billsType 状态
  435. * @return 结果
  436. */
  437. @Override
  438. @Transactional
  439. public AjaxResult addCredit(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) {
  440. Long fPid = null;
  441. Map<String, Object> map = new HashMap<>();
  442. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  443. return AjaxResult.error("未找到主表信息");
  444. }
  445. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  446. return AjaxResult.error("未找到入账信息");
  447. }
  448. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  449. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  450. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  451. tWarehouseBills.setUpdateTime(new Date());
  452. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  453. }
  454. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  455. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  456. for (TWarehousebillsitems item : warehousebillsitemsList) {
  457. // 查询库容量 是否可入库
  458. int m=calculation(tWarehouseBills.getfWarehouseid(),item.getfGrossweight());
  459. if(m == 0){
  460. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  461. return AjaxResult.error("更新库存总账失败-->入库毛重大于库容");
  462. }
  463. item.setfBillingway(tWarehouseBills.getfBillingway());
  464. item.setfChargedate(tWarehouseBills.getfChargedate());
  465. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, item);
  466. if (StringUtils.isNotNull(tWhgenle)) {
  467. int i = updateTWhgenlegData(item, tWhgenle.getfId(), billsType);
  468. if (i <= 0) {
  469. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  470. return AjaxResult.error("更新库存总账失败");
  471. }
  472. } else {
  473. if (instalTWhgenleg(tWarehouseBills, item, loginUser.getUser()) <= 0) {
  474. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  475. return AjaxResult.error("新增库存总账失败");
  476. }
  477. }
  478. int num = 0;
  479. if (StringUtils.isNotNull(item.getfId())) {
  480. item.setfBillstatus("40");
  481. item.setUpdateBy(loginUser.getUser().getUserName());
  482. item.setUpdateTime(new Date());
  483. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  484. // 添加状态log
  485. insertTWarehousebillsLog(item,40l,loginUser);
  486. }
  487. if (num <= 0) {
  488. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  489. return AjaxResult.error("新增库存明细失败");
  490. }
  491. }
  492. // 查询所有库存明细 修改仓库主表状态
  493. updateWarehousebillsItemsStatus(tWarehouseBills);
  494. map.put("warehousebillsitems", warehousebillsitemsList);
  495. return AjaxResult.success("成功", map);
  496. }
  497. /**
  498. * 出库、调拨、货转 确认
  499. *
  500. * @param warehouseBills
  501. * @param warehousebillsitems
  502. * @param loginUser
  503. * @param billsType
  504. * @return
  505. */
  506. @Override
  507. @Transactional
  508. public AjaxResult updateCredit(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) {
  509. Long fPid = null;
  510. Map<String, Object> map = new HashMap<>();
  511. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  512. return AjaxResult.error("未找到主表信息");
  513. }
  514. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  515. return AjaxResult.error("未找到入账信息");
  516. }
  517. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  518. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  519. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  520. tWarehouseBills.setUpdateTime(new Date());
  521. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  522. fPid = tWarehouseBills.getfId();
  523. }
  524. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  525. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  526. int i = 1;
  527. List<TFees> feesList = new ArrayList<>();
  528. List<TWarehousebillsfees> warehousebillsfees = new ArrayList<>();
  529. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  530. // 查询总账是否存在
  531. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, wbItem);
  532. // 入库数特殊不判断入账
  533. if ("SJCK".equals(billsType)) { // 出库 查询
  534. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  535. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  536. return AjaxResult.error("库存明细第" + i + "行库存为空");
  537. } else { // 非空修改库存总账
  538. // 库存 < 出库件数 、
  539. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  540. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  541. return AjaxResult.error("库存明细第" + i + "行库存不足");
  542. }
  543. // 更新库存总账
  544. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  545. if (StringUtils.isNull(tWarehouseBills.getfBsdate()) || StringUtils.isNull(wbItem.getfChargedate())) {
  546. return AjaxResult.error("库存明细第" + i + "行请检查日期,操作终止");
  547. }
  548. long dateDay = DateUtils.getDateDay(tWarehouseBills.getfBsdate(), wbItem.getfChargedate());
  549. if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
  550. return AjaxResult.error("库存明细第" + i + "行请检查客户信息,操作终止");
  551. }
  552. /*long fCorpid = tWarehouseBills.getfCorpid();
  553. TGoods tGoods = tGoodsMapper.selectTGoodsById(wbItem.getfGoodsid());
  554. long fGoodsid = tGoods.getfTypeid();
  555. long fBillingway = wbItem.getfBillingway();
  556. long fQty = wbItem.getfQty();
  557. // 计算仓储费明细
  558. Map<String, Object> objectMap = tWarehouseAgreementService.getCarryingCost(fCorpid, fGoodsid, dateDay, fBillingway, fQty , 0L);
  559. if (StringUtils.isNull(objectMap)) {
  560. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  561. return AjaxResult.error("库存明细第" + i + "行没有维护出库明细的仓储协议,操作终止");
  562. }
  563. Long feeId = (Long) objectMap.get("feeId");
  564. BigDecimal amt = (BigDecimal) objectMap.get("amt");
  565. TFees tFees = tFeesMapper.selectTFeesById(feeId);
  566. if (StringUtils.isNotNull(tFees)) {
  567. feesList.add(tFees);
  568. }
  569. TWarehousebillsfees fees = new TWarehousebillsfees();
  570. fees.setfPid(fPid);
  571. fees.setfFeeid(feeId);
  572. fees.setfCorpid(tWarehouseBills.getfCorpid());
  573. fees.setfFeeUnitid(fBillingway);
  574. fees.setfQty(new BigDecimal(1));
  575. fees.setfUnitprice(amt);
  576. fees.setfAmount(amt);
  577. fees.setfExrate(new BigDecimal(1));
  578. fees.setfCurrency("RMB");
  579. fees.setRemark(dateDay + "天" + tFees.getfName());
  580. warehousebillsfees.add(fees);*/
  581. }
  582. } else if ("CKDB".equals(billsType)) { // 调拨查询
  583. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  584. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  585. return AjaxResult.error("库存明细第" + i + "行库存为空");
  586. } else { // 非空修改库存总账
  587. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  588. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  589. return AjaxResult.error("库存明细第" + i + "行库存不足");
  590. } else { // 2、 库存足够 先 进行出库操作
  591. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  592. }
  593. // 3、 进行入库操作 查询是否存在库存
  594. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方
  595. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  596. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  597. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  598. } else { // 4、 存在 进行跟新库存
  599. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  600. }
  601. }
  602. } else if ("HQZY".equals(billsType)) { // 货转
  603. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  604. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  605. return AjaxResult.error("库存明细第" + i + "行库存为空");
  606. } else { // 非空修改库存总账
  607. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  608. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  609. return AjaxResult.error("库存明细第" + i + "行库存不足");
  610. } else { // 2、 库存足够 先 进行出库操作
  611. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  612. }
  613. // 3、 进行入库操作 查询是否存在库存
  614. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid()); // 新货权方
  615. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  616. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  617. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  618. } else { // 4、 存在 进行跟新库存
  619. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  620. }
  621. }
  622. }
  623. i++;
  624. int num = 0;
  625. if (StringUtils.isNotNull(wbItem.getfId())) {
  626. wbItem.setfBillstatus("40");
  627. wbItem.setfBsdate(tWarehouseBills.getfBsdate());
  628. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  629. wbItem.setUpdateTime(new Date());
  630. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  631. if("SJCK".equals(billsType)){
  632. // 添加状态log
  633. insertTWarehousebillsLog(wbItem,40l,loginUser);
  634. }
  635. }
  636. if (num <= 0) {
  637. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  638. return AjaxResult.error("库存明细更新失败");
  639. }
  640. }
  641. // 查询所有库存明细 修改仓库主表状态
  642. updateWarehousebillsItemsStatus(tWarehouseBills);
  643. map.put("fPid", fPid);
  644. map.put("fees", feesList);
  645. map.put("warehousebillsfees", warehousebillsfees);
  646. // 添加成功 主键返回 前台
  647. return AjaxResult.success("成功", map);
  648. }
  649. @Override
  650. public AjaxResult waitWarehousing(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String status,String billtystatus) {
  651. Map<String, Object> map = new HashMap<>();
  652. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  653. return AjaxResult.error("未找到主表信息");
  654. }
  655. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  656. return AjaxResult.error("未找到入账信息");
  657. }
  658. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  659. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  660. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  661. tWarehouseBills.setUpdateTime(new Date());
  662. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  663. }
  664. List<TWarehousebillsitems> tWarehousebillsitemsList=new ArrayList<>();
  665. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  666. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  667. for (TWarehousebillsitems item : warehousebillsitemsList) {
  668. // 生成流水号
  669. Date time = new Date();
  670. String serialNumber;
  671. if(billtystatus.equals("20")){ // 生成 入库 流水号
  672. serialNumber = billnoSerialServiceImpl.getSerialNumber("RK", time);
  673. item.setfSerialNumber(serialNumber);
  674. } else if (billtystatus.equals("70")){ //生成 出库 流水号
  675. serialNumber = billnoSerialServiceImpl.getSerialNumber("CK", time);
  676. item.setfSerialNumber(serialNumber);
  677. }
  678. int num = 0;
  679. if (StringUtils.isNotNull(item.getfId())) {
  680. item.setfBillstatus(status);
  681. item.setUpdateTime(new Date());
  682. item.setUpdateBy(loginUser.getUser().getUserName());
  683. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  684. // 添加状态log
  685. insertTWarehousebillsLog(item,Long.parseLong(status),loginUser);
  686. } else {
  687. item.setfPid(tWarehouseBills.getfId());
  688. item.setfBillno(tWarehouseBills.getfBillno());
  689. item.setfBillstatus(status);
  690. item.setCreateTime(new Date());
  691. item.setCreateBy(loginUser.getUser().getUserName());
  692. num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(item);
  693. // 添加状态log
  694. insertTWarehousebillsLog(item,10L,loginUser);
  695. insertTWarehousebillsLog(item,Long.parseLong(status),loginUser);
  696. }
  697. if (num <= 0) {
  698. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  699. return AjaxResult.error("更新库存明细失败");
  700. }
  701. tWarehousebillsitemsList.add(item);
  702. }
  703. // 添加成功 返回 前台
  704. map.put("warehousebillsitems", tWarehousebillsitemsList);
  705. return AjaxResult.success("成功", map);
  706. }
  707. // 入库 收费明细 校验
  708. public Long check(BigDecimal number, BigDecimal unitPrice) {
  709. BigDecimal result1 = number.multiply(unitPrice);
  710. // 保留两位小数且四舍五入
  711. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  712. // 转换去掉小数点
  713. String result = result1.toString().replace(".", "");
  714. return Long.valueOf(result);
  715. }
  716. /**
  717. * 修改详情主表
  718. *
  719. * @param tWarehousebills 详情主表
  720. * @return 结果
  721. */
  722. @Override
  723. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  724. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  725. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  726. }
  727. /**
  728. * 批量删除详情主表
  729. *
  730. * @param fIds 需要删除的详情主表ID
  731. * @return 结果
  732. */
  733. @Override
  734. public int deleteTWarehousebillsByIds(Long[] fIds) {
  735. // 取出业务编号、 放入 billno_del
  736. for (Long id : fIds) {
  737. // 1、查询主表信息
  738. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  739. // 2、业务编号、客存编号 放入 billno_del
  740. BillnoDel billnoDel = new BillnoDel();
  741. billnoDel.setBillType(tWarehousebills.getfBilltype());
  742. billnoDel.setBillNo(tWarehousebills.getfBillno());
  743. billnoDelMapper.insertBillnoDel(billnoDel);
  744. }
  745. return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  746. }
  747. /**
  748. * 删除详情主表信息
  749. *
  750. * @param fId 详情主表ID
  751. * @return 结果
  752. */
  753. @Override
  754. public int deleteTWarehousebillsById(Long fId) {
  755. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  756. }
  757. @Override
  758. public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) {
  759. return null;
  760. }
  761. @Override
  762. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  763. return null;
  764. }
  765. @Override
  766. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  767. // 查询 仓库主表信息、库存明细信息
  768. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  769. // 修改主表信息
  770. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  771. tWarehousebills.setUpdateTime(new Date());
  772. tWarehousebills.setfBillstatus("3"); //撤销状态
  773. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  774. // 查询库存明细从表数据
  775. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  776. tWarehousebillsitems.setfPid(fId);
  777. List<TWarehousebillsitems> warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  778. // 撤销 库存总账
  779. if (StringUtils.isNotEmpty(warehousebillsitems)) {
  780. int i = 1;
  781. for (TWarehousebillsitems wb : warehousebillsitems) {
  782. // 查询库存总账
  783. TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb);
  784. if ("SJRKRevoke".equals(billsType)) { // 撤销 入库
  785. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  786. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  787. } else { // 撤销数>结余数
  788. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  789. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  790. }
  791. } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库
  792. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  793. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  794. } else {
  795. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  796. return AjaxResult.error("第" + i + "行未查询到库存信息");
  797. }
  798. } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销
  799. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  800. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  801. // 1、新货权方撤销入库
  802. // 查询库存总账
  803. tWarehousebills.setfCorpid(fTocorpid);
  804. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  805. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  806. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  807. } else {
  808. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  809. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  810. }
  811. // 2、原货权方撤销出库
  812. // 查询库存总账
  813. tWarehousebills.setfCorpid(fCorpid);
  814. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  815. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  816. } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke
  817. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  818. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  819. // 1、新货权方撤销入库
  820. // 查询库存总账
  821. tWarehousebills.setfCorpid(fTocorpid);
  822. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  823. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  824. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  825. } else {
  826. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  827. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  828. }
  829. // 2、原货权方撤销出库
  830. // 查询库存总账
  831. tWarehousebills.setfCorpid(fCorpid);
  832. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  833. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  834. }
  835. i++;
  836. }
  837. }
  838. return AjaxResult.success();
  839. }
  840. /**
  841. * 撤销入账
  842. *
  843. * @param warehouseBills 主表
  844. * @param warehousebillsitems 明细
  845. * @param loginUser 当前登录人
  846. * @param billsType 状态
  847. * @return 结果
  848. */
  849. @Override
  850. @Transactional
  851. public AjaxResult revokeTWarehousebillsById1(String warehouseBills, String warehousebillsitems, LoginUser loginUser, String billsType) {
  852. Long fPid = null;
  853. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  854. return AjaxResult.error("未找到主表信息");
  855. }
  856. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  857. return AjaxResult.error("未找到入账信息");
  858. }
  859. TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  860. fPid = tWarehousebills.getfId();
  861. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  862. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  863. if (StringUtils.isNotEmpty(warehousebillsitemsList)) {
  864. int i = 1;
  865. for (TWarehousebillsitems wb : warehousebillsitemsList) {
  866. // 查询库存总账
  867. TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb);
  868. if ("SJRKRevoke".equals(billsType)) { // 撤销 入库
  869. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  870. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  871. } else { // 撤销数>结余数
  872. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  873. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  874. }
  875. } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库
  876. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  877. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  878. } else {
  879. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  880. return AjaxResult.error("第" + i + "行未查询到库存信息");
  881. }
  882. } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销
  883. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  884. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  885. // 1、新货权方撤销入库
  886. // 查询库存总账
  887. tWarehousebills.setfCorpid(fTocorpid);
  888. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  889. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  890. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  891. } else {
  892. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  893. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  894. }
  895. // 2、原货权方撤销出库
  896. // 查询库存总账
  897. tWarehousebills.setfCorpid(fCorpid);
  898. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  899. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  900. } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销 HQZYRevoke
  901. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  902. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  903. // 1、新货权方撤销入库
  904. // 查询库存总账
  905. tWarehousebills.setfCorpid(fTocorpid);
  906. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  907. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  908. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  909. } else {
  910. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  911. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  912. }
  913. // 2、原货权方撤销出库
  914. // 查询库存总账
  915. tWarehousebills.setfCorpid(fCorpid);
  916. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  917. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  918. }
  919. i++;
  920. wb.setfBillstatus("1");
  921. wb.setUpdateBy(loginUser.getUser().getUserName());
  922. wb.setUpdateTime(new Date());
  923. if (tWarehousebillsitemsMapper.updateTWarehousebillsitems(wb) <= 0) {
  924. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  925. return AjaxResult.error("新增库存明细失败");
  926. }
  927. }
  928. }
  929. updateWarehousebillsItemsStatus(tWarehousebills);
  930. return AjaxResult.success();
  931. }
  932. /**
  933. * 主表、库存明细表 更新 入账状态
  934. */
  935. public void updateWarehousebillsItemsStatus(TWarehouseBills warehouseBill){
  936. // 查询所有库存明细 修改仓库主表状态
  937. int notInStorage = 0;
  938. int Stored = 0;
  939. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  940. tWarehousebillsitems.setfPid(warehouseBill.getfId());
  941. List<TWarehousebillsitems> warehousebillsitemsList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  942. for (TWarehousebillsitems item : warehousebillsitemsList1) {
  943. if (item.getfBillstatus().equals("40") | item.getfBillstatus().equals("90")) {
  944. Stored++;
  945. } else {
  946. notInStorage++;
  947. }
  948. }
  949. // 录入库存明细整体状态
  950. TWarehouseBills warehouseBill1 = new TWarehouseBills();
  951. warehouseBill1.setfId(warehouseBill.getfId());
  952. if (Objects.equals(Stored, 0)) { // 未入库
  953. warehouseBill1.setfItemsStatus("1");
  954. } else if (Objects.equals(notInStorage, 0)) { // 已入库
  955. warehouseBill1.setfItemsStatus("6");
  956. } else { // 有已入库、有未入库
  957. warehouseBill1.setfItemsStatus("2");
  958. }
  959. tWarehouseBillsMapper.updateTWarehousebills(warehouseBill1);
  960. }
  961. /**
  962. * 添加 库存明细状态
  963. * @param wbItem
  964. * @param status
  965. * @param loginUser
  966. */
  967. public void insertTWarehousebillsLog(TWarehousebillsitems wbItem,Long status,LoginUser loginUser){
  968. // 添加状态log
  969. TWarehousebillsLog tWarehousebillsLog =new TWarehousebillsLog();
  970. tWarehousebillsLog.setfPid(wbItem.getfPid());
  971. tWarehousebillsLog.setfItmeid(wbItem.getfId());
  972. tWarehousebillsLog.setfItmestatus(status);
  973. tWarehousebillsLog.setCreateTime(new Date());
  974. tWarehousebillsLog.setCreateBy(loginUser.getUser().getUserName());
  975. tWarehousebillsLogMapper.insertTWarehousebillsLog(tWarehousebillsLog);
  976. }
  977. /**
  978. * 删除 库存明细
  979. * @param fid
  980. * @param tWarehousebillsitems
  981. */
  982. public void deleteBillsitems(Long fid,String tWarehousebillsitems){
  983. List<Long> oldList = new ArrayList<Long>();
  984. List<Long> newList = new ArrayList<Long>();
  985. // 查询所有从表数据
  986. TWarehousebillsitems tWarehousebillsitem = new TWarehousebillsitems();
  987. tWarehousebillsitem.setfPid(fid);
  988. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitem);
  989. warehousebillsitemsList.forEach(wb ->
  990. oldList.add(wb.getfId())
  991. );
  992. // 获取提交从表数据ID
  993. if (tWarehousebillsitems != null ) {
  994. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  995. List<TWarehousebillsitems> warehousebillsitemsLists = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  996. warehousebillsitemsLists.forEach(wb->
  997. newList.add(wb.getfId())
  998. );
  999. }
  1000. // 删除多余的ID
  1001. List<Long> reduce1 = oldList.stream().filter(item -> !newList.contains(item)).collect(toList());
  1002. reduce1.forEach(id ->
  1003. tWarehousebillsitemsMapper.deleteByFPid(id)
  1004. );
  1005. }
  1006. /**
  1007. * 库容-结余毛重
  1008. * @param fTotalgross
  1009. * @param fGrossweightblc
  1010. * @return
  1011. */
  1012. public static BigDecimal calculation1(String fTotalgross, String fGrossweightblc){
  1013. BigDecimal num1 = new BigDecimal(fTotalgross);
  1014. BigDecimal num2 = new BigDecimal(fGrossweightblc);
  1015. BigDecimal result = num1.subtract(num2);
  1016. return result.setScale(2,BigDecimal.ROUND_HALF_UP);
  1017. }
  1018. /**
  1019. * 判断 是否允许 入库
  1020. * @param fId
  1021. */
  1022. public int calculation (Long fId,BigDecimal fGrossweight){
  1023. // 仓库库容
  1024. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(fId);
  1025. // 总账使用
  1026. List<Map<String, Object>> whouseList= tWhgenlegMapper.selectWareHouseListWhouse(fId);
  1027. if(whouseList!=null && whouseList.size()>0){
  1028. String fTotalgross = null;
  1029. String fGrossweightblc = null;
  1030. for (Map<String, Object> m : whouseList){
  1031. for (String k : m.keySet()){
  1032. // 获取毛重库容
  1033. if(k.equals("fTotalgross")){
  1034. fTotalgross= m.get(k).toString();
  1035. }
  1036. if(k.equals("fGrossweightD")){
  1037. fGrossweightblc= m.get(k).toString();
  1038. }
  1039. }
  1040. }
  1041. BigDecimal result = calculation1(fTotalgross,fGrossweightblc);
  1042. if(result.compareTo(fGrossweight) == -1){
  1043. return 0;// 结余库容小于入库数
  1044. }else{
  1045. return 1;
  1046. }
  1047. }else{
  1048. if(tWarehouse.getfTotalgross().compareTo(fGrossweight) == -1){
  1049. return 0;// 库容小于入库数
  1050. }else{
  1051. return 1;
  1052. }
  1053. }
  1054. }
  1055. }