TWarehouseBillsServiceImpl.java 179 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646
  1. package com.ruoyi.warehouseBusiness.service.impl;
  2. import cn.hutool.core.bean.BeanUtil;
  3. import com.alibaba.fastjson.JSONArray;
  4. import com.alibaba.fastjson.JSONObject;
  5. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  6. import com.ruoyi.approvalFlow.domain.AuditItems;
  7. import com.ruoyi.approvalFlow.mapper.AuditItemsMapper;
  8. import com.ruoyi.approvalFlow.service.impl.AuditItemsServiceImpl;
  9. import com.ruoyi.basicData.domain.TCorps;
  10. import com.ruoyi.basicData.domain.TFees;
  11. import com.ruoyi.basicData.domain.TGoods;
  12. import com.ruoyi.basicData.domain.TWarehouseArea;
  13. import com.ruoyi.basicData.mapper.*;
  14. import com.ruoyi.basicData.service.impl.TWarehouseServiceImpl;
  15. import com.ruoyi.common.core.domain.AjaxResult;
  16. import com.ruoyi.common.core.domain.entity.SysDept;
  17. import com.ruoyi.common.core.domain.entity.SysDictData;
  18. import com.ruoyi.common.core.domain.entity.SysUser;
  19. import com.ruoyi.common.core.domain.entity.TWarehouse;
  20. import com.ruoyi.common.core.domain.model.LoginUser;
  21. import com.ruoyi.common.utils.DateUtils;
  22. import com.ruoyi.common.utils.SecurityUtils;
  23. import com.ruoyi.common.utils.StringUtils;
  24. import com.ruoyi.reportManagement.domain.TWareHouseItemsExcel;
  25. import com.ruoyi.reportManagement.domain.TWhgenleg;
  26. import com.ruoyi.reportManagement.mapper.TWhgenlegMapper;
  27. import com.ruoyi.shipping.domain.TCntr;
  28. import com.ruoyi.shipping.domain.TVoyage;
  29. import com.ruoyi.shipping.domain.TWarehousebillsCntr;
  30. import com.ruoyi.shipping.domain.TWarehousebillsCntritems;
  31. import com.ruoyi.shipping.mapper.TCntrMapper;
  32. import com.ruoyi.shipping.mapper.TVoyageMapper;
  33. import com.ruoyi.shipping.mapper.TWarehousebillsCntrMapper;
  34. import com.ruoyi.shipping.mapper.TWarehousebillsCntritemsMapper;
  35. import com.ruoyi.system.domain.SysConfig;
  36. import com.ruoyi.system.mapper.SysConfigMapper;
  37. import com.ruoyi.system.mapper.SysDeptMapper;
  38. import com.ruoyi.system.mapper.SysDictDataMapper;
  39. import com.ruoyi.system.mapper.SysUserMapper;
  40. import com.ruoyi.warehouseBusiness.domain.*;
  41. import com.ruoyi.warehouseBusiness.excel.*;
  42. import com.ruoyi.warehouseBusiness.mapper.*;
  43. import com.ruoyi.warehouseBusiness.service.ITWarehouseBillsService;
  44. import org.springframework.beans.factory.annotation.Autowired;
  45. import org.springframework.stereotype.Service;
  46. import org.springframework.transaction.annotation.Transactional;
  47. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  48. import java.math.BigDecimal;
  49. import java.text.ParseException;
  50. import java.text.SimpleDateFormat;
  51. import java.util.*;
  52. import java.util.stream.Collectors;
  53. import static java.util.stream.Collectors.toList;
  54. /**
  55. * 详情主表Service业务层处理
  56. *
  57. * @author ruoyi
  58. * @date 2020-12-11
  59. */
  60. @Service
  61. public class TWarehouseBillsServiceImpl implements ITWarehouseBillsService {
  62. @Autowired
  63. private TFeesMapper tFeesMapper;
  64. @Autowired
  65. private TCntrMapper tCntrMapper;
  66. @Autowired
  67. private TGoodsMapper tGoodsMapper;
  68. @Autowired
  69. private TCorpsMapper tCorpsMapper;
  70. @Autowired
  71. private TVoyageMapper tVoyageMapper;
  72. @Autowired
  73. private SysUserMapper sysUserMapper;
  74. @Autowired
  75. private SysDeptMapper sysDeptMapper;
  76. @Autowired
  77. private BillnoDelMapper billnoDelMapper;
  78. @Autowired
  79. private TWhgenlegMapper tWhgenlegMapper;
  80. @Autowired
  81. private SysConfigMapper sysConfigMapper;
  82. @Autowired
  83. private TWarehouseMapper tWarehouseMapper;
  84. @Autowired
  85. private AuditItemsMapper auditItemsMapper;
  86. @Autowired
  87. private TEnclosureMapper tEnclosureMapper;
  88. @Autowired
  89. private SysDictDataMapper sysDictDataMapper;
  90. @Autowired
  91. private AuditItemsServiceImpl auditItemsService;
  92. @Autowired
  93. private TWarehouseAreaMapper tWarehouseAreaMapper;
  94. @Autowired
  95. private TWarehouseServiceImpl warehouseServiceImpl;
  96. @Autowired
  97. private TWarehouseBillsMapper tWarehouseBillsMapper;
  98. @Autowired
  99. private BillnoSerialServiceImpl billnoSerialServiceImpl;
  100. @Autowired
  101. private TWarehousebillsLogMapper tWarehousebillsLogMapper;
  102. @Autowired
  103. private TWarehousebillsCntrMapper tWarehousebillsCntrMapper;
  104. @Autowired
  105. private TWarehousebillsfeesMapper tWarehousebillsfeesMapper;
  106. @Autowired
  107. private TWarehousebillsitemsMapper tWarehousebillsitemsMapper;
  108. @Autowired
  109. private TWarehouseAgreementServiceImpl tWarehouseAgreementService;
  110. @Autowired
  111. private TWarehousebillsCntritemsMapper tWarehousebillsCntritemsMapper;
  112. /**
  113. * 查询详情主表
  114. *
  115. * @param fId 详情主表ID
  116. * @return 详情主表
  117. */
  118. @Override
  119. public Map<String, Object> selectTWarehousebillsById(Long fId) {
  120. Map<String, Object> map = new HashMap<>();
  121. // 查询仓库主表数据
  122. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  123. // 客户表
  124. List<Long> corpsId = new ArrayList<>();
  125. // 用户表
  126. List<SysUser> sysUserList = new ArrayList<>();
  127. // 仓库表
  128. List<TWarehouse> warehouseList = new ArrayList<>();
  129. // 商品
  130. List<Long> goodsId = new ArrayList<>();
  131. // 费用
  132. List<Long> feesId = new ArrayList<>();
  133. // 库区
  134. List<Long> warehouseAreaId = new ArrayList<>();
  135. if (!StringUtils.isNull(tWarehousebills)) {
  136. if (StringUtils.isNotNull(tWarehousebills.getfTocorpid())) {
  137. corpsId.add(tWarehousebills.getfTocorpid());
  138. }
  139. if (StringUtils.isNotNull(tWarehousebills.getfLabour())) {
  140. corpsId.add(tWarehousebills.getfLabour());
  141. }
  142. if (StringUtils.isNotNull(tWarehousebills.getfFleet())) {
  143. corpsId.add(tWarehousebills.getfFleet());
  144. }
  145. corpsId.add(tWarehousebills.getfCorpid());
  146. corpsId.add(tWarehousebills.getfCorpid());
  147. corpsId.add(tWarehousebills.getfCorpid());
  148. // 查询制单人
  149. SysUser logUser = sysUserMapper.selectUserByUserName(tWarehousebills.getCreateBy());
  150. if (StringUtils.isNotNull(logUser)) {
  151. SysDept sysDept = sysDeptMapper.selectDeptById(logUser.getDeptId());
  152. sysUserList.add(logUser);
  153. map.put("dept", sysDept);
  154. }
  155. SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehousebills.getfStorekeeper());
  156. if (StringUtils.isNotNull(sysUser)) {
  157. sysUserList.add(sysUser);
  158. }
  159. // 查询仓库
  160. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehousebills.getfWarehouseid());
  161. if (StringUtils.isNotNull(tWarehouse)) {
  162. warehouseList.add(tWarehouse);
  163. }
  164. // 查询经营单位
  165. corpsId.add(tWarehousebills.getfSbu());
  166. map.put("warehousebills", tWarehousebills);
  167. }
  168. // 查询箱型 箱量表
  169. TWarehousebillsCntr cntr = new TWarehousebillsCntr();
  170. cntr.setfPid(fId);
  171. map.put("tCntrList", tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(cntr));
  172. // 查询仓库明细从表数据
  173. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  174. tWarehousebillsitems.setfPid(fId);
  175. List<Map<String, Object>> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems);
  176. if (StringUtils.isNotEmpty(mapList)) {
  177. for (Map<String, Object> wb : mapList) {
  178. /*TWhgenleg tWhgenleg = new TWhgenleg();
  179. tWhgenleg.setfCorpid(tWarehousebills.getfCorpid());
  180. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  181. tWhgenleg.setfGoodsid(((Integer) wb.get("fGoodsid")).longValue());
  182. }
  183. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  184. tWhgenleg.setfWarehouseLocationid(((Integer) wb.get("fWarehouselocid")).longValue());
  185. }
  186. tWhgenleg.setfTrademodeid(tWarehousebills.getfTrademodeid());
  187. tWhgenleg.setfMblno(tWarehousebills.getfMblno());
  188. TWhgenleg whgenleg = tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  189. if (StringUtils.isNotNull(whgenleg)) {
  190. wb.put("fQtyblc", whgenleg.getfQtyblc());
  191. }*/
  192. if (StringUtils.isNotNull(wb.get("fGoodsid"))) {
  193. Integer fGoodsid = (Integer) wb.get("fGoodsid");
  194. goodsId.add(fGoodsid.longValue());
  195. }
  196. if (StringUtils.isNotNull(wb.get("fWarehouselocid"))) {
  197. Long fWarehouselocid = Long.valueOf(String.valueOf(wb.get("fWarehouselocid")));
  198. if (wb.get("fTransferWarehouselocid") != null) {
  199. Long fTransferWarehouselocid = Long.valueOf(String.valueOf(wb.get("fTransferWarehouselocid")));
  200. warehouseAreaId.add(fTransferWarehouselocid);
  201. }
  202. warehouseAreaId.add(fWarehouselocid);
  203. }
  204. }
  205. map.put("warehouseBillsItem", mapList);
  206. }
  207. // 查询仓库费用明细表数据
  208. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  209. tWarehousebillsfees.setfPid(fId);
  210. List<TWarehousebillsfees> warehousebillsfeesDr = new ArrayList<>();
  211. List<TWarehousebillsfees> warehousebillsfeesCr = new ArrayList<>();
  212. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  213. if (StringUtils.isNotEmpty(warehousebillsfees)) {
  214. for (TWarehousebillsfees fees : warehousebillsfees) {
  215. if ("C".equals(fees.getfDc())) {
  216. warehousebillsfeesCr.add(fees);
  217. } else {
  218. warehousebillsfeesDr.add(fees);
  219. }
  220. corpsId.add(fees.getfCorpid());
  221. feesId.add(fees.getfFeeid());
  222. }
  223. }
  224. // 查询附件表数据
  225. TEnclosure enclosure = new TEnclosure();
  226. enclosure.setfPid(fId);
  227. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  228. if (StringUtils.isNotEmpty(enclosures)) {
  229. map.put("enclosures", enclosures);
  230. }
  231. List<TCorps> corpsList = new ArrayList<>();
  232. List<Long> corpsIdList = StringUtils.integerDeduplication(corpsId);
  233. for (Long corpId : corpsIdList) {
  234. TCorps corps = tCorpsMapper.selectTCorpsById(corpId);
  235. if (StringUtils.isNotNull(corps)) {
  236. corpsList.add(corps);
  237. }
  238. }
  239. List<TWarehouseArea> warehouseAreaList = new ArrayList<>();
  240. /*List<Long> warehouseAreaIdList = StringUtils.integerDeduplication(warehouseAreaId);
  241. for (Long warehouseArea : warehouseAreaIdList) {
  242. TWarehouseArea tWarehouseArea = tWarehouseAreaMapper.selectTWarehouseAreaById(warehouseArea);
  243. if (StringUtils.isNotNull(tWarehouseArea)) {
  244. warehouseAreaList.add(tWarehouseArea);
  245. }
  246. }*/
  247. List<TGoods> goodsList = new ArrayList<>();
  248. List<Long> goodsIdList = StringUtils.integerDeduplication(goodsId);
  249. for (Long goods : goodsIdList) {
  250. TGoods tGoods = tGoodsMapper.selectTGoodsById(goods);
  251. if (StringUtils.isNotNull(tGoods)) {
  252. goodsList.add(tGoods);
  253. }
  254. }
  255. List<TFees> feesList = new ArrayList<>();
  256. List<Long> longList = StringUtils.integerDeduplication(feesId);
  257. for (Long fees : longList) {
  258. TFees tFees = tFeesMapper.selectTFeesById(fees);
  259. if (StringUtils.isNotNull(tFees)) {
  260. feesList.add(tFees);
  261. }
  262. }
  263. map.put("corps", corpsList);
  264. map.put("goodsList", goodsList);
  265. map.put("feesList", feesList);
  266. map.put("sysUser", sysUserList);
  267. map.put("warehouse", warehouseList);
  268. map.put("warehouseAreas", warehouseAreaList);
  269. map.put("warehousebillsfeesDr", warehousebillsfeesDr);
  270. map.put("warehousebillsfeesCr", warehousebillsfeesCr);
  271. map.put("dept", sysDeptMapper.selectDeptById(tWarehousebills.getfDeptid()));
  272. return map;
  273. }
  274. @Override
  275. public AjaxResult selectTWarehousebills(Long fId) {
  276. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  277. TWarehousebillsCntr tWarehousebillsCntr = new TWarehousebillsCntr();
  278. tWarehousebillsCntr.setfPid(fId);
  279. List<TWarehousebillsCntr> warehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(tWarehousebillsCntr);
  280. TWarehousebillsCntritems tWarehousebillsCntritems = new TWarehousebillsCntritems();
  281. tWarehousebillsCntritems.setfPid(fId);
  282. List<TWarehousebillsCntritems> warehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(tWarehousebillsCntritems);
  283. Map<String, Object> map = new HashMap<>();
  284. map.put("warehouseBills", warehouseBills);
  285. map.put("warehousebillsCntrs", warehousebillsCntrs);
  286. map.put("warehousebillsCntritems", warehousebillsCntritems);
  287. return AjaxResult.success("成功", map);
  288. }
  289. /**
  290. * 查询详情主表列表
  291. *
  292. * @param tWarehousebills 详情主表
  293. * @return 详情主表
  294. */
  295. @Override
  296. public List<Map<String, Object>> selectWarehouseBusinessList(TWarehouseBills tWarehousebills) {
  297. if (tWarehousebills.getfBilltype().equals("JSCCF") || tWarehousebills.getfBilltype().equals("HQZY")) {
  298. return tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  299. } else {
  300. return tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  301. }
  302. }
  303. /**
  304. * 查询导出所需主表列表
  305. *
  306. * @param tWarehousebills 详情主表
  307. * @return 详情主表
  308. */
  309. @Override
  310. public List<TWarehouseBills> selectTWarehousebillsList(TWarehouseBills tWarehousebills) {
  311. return tWarehouseBillsMapper.selectTWarehousebillsList(tWarehousebills);
  312. }
  313. /**
  314. * 根据条件查询总账是否存在
  315. *
  316. * @param warehouseBills 仓库主表
  317. * @param warehousebillsitems 仓库明细表
  318. * @return 库存总账
  319. */
  320. public TWhgenleg queryTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems) {
  321. TWhgenleg tWhgenleg = new TWhgenleg();
  322. // 客户
  323. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  324. // 提单号
  325. if ("HQZY".equals(warehouseBills.getfBilltype()) || "CKDB".equals(warehouseBills.getfBilltype()) || "HWTG".equals(warehouseBills.getfBilltype())) {
  326. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  327. } else {
  328. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  329. }
  330. // 业务类型
  331. tWhgenleg.setfBusinessType(warehousebillsitems.getfBusinessType());
  332. // 业务类型详情
  333. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  334. // 原始入库日期
  335. SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  336. String time = sdf.format(warehousebillsitems.getfOriginalbilldate());
  337. try {
  338. tWhgenleg.setfOriginalbilldate(sdf.parse(time));
  339. } catch (ParseException e) {
  340. e.printStackTrace();
  341. }
  342. // 箱号
  343. if (StringUtils.isNotEmpty(warehousebillsitems.getfCntrno())) {
  344. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  345. }
  346. // 库区
  347. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  348. // 货物品名
  349. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  350. // 贸易方式
  351. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  352. return tWhgenlegMapper.selectTWhgenleg(tWhgenleg);
  353. }
  354. /**
  355. * 新增库存总账
  356. *
  357. * @param warehouseBills 仓库主表
  358. * @param warehousebillsitems 仓库明细表
  359. * @return 结果
  360. */
  361. @Transactional
  362. public int instalTWhgenleg(TWarehouseBills warehouseBills, TWarehousebillsitems warehousebillsitems, SysUser user) {
  363. TWhgenleg tWhgenleg = new TWhgenleg();
  364. if ("SJRK".equals(warehouseBills.getfBilltype())) {
  365. tWhgenleg.setfOriginalbilldate(warehousebillsitems.getfBsdate());
  366. }
  367. if ("HQZY".equals(warehouseBills.getfBilltype()) | "CKDB".equals(warehouseBills.getfBilltype()) | "HWTG".equals(warehouseBills.getfBilltype())) {
  368. tWhgenleg.setfOriginalbilldate(warehousebillsitems.getfOriginalbilldate());
  369. if ("CKDB".equals(warehouseBills.getfBilltype()) | "HWTG".equals(warehouseBills.getfBilltype())) {
  370. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  371. } else {
  372. // 客户
  373. tWhgenleg.setfCorpid(warehouseBills.getfTocorpid());
  374. }
  375. // 提单号
  376. tWhgenleg.setfMblno(warehousebillsitems.getfMblno());
  377. // 原始单号
  378. tWhgenleg.setfOriginalbillno(warehousebillsitems.getfMblno());
  379. } else {
  380. // 客户
  381. tWhgenleg.setfCorpid(warehouseBills.getfCorpid());
  382. // 提单号
  383. tWhgenleg.setfMblno(warehouseBills.getfMblno());
  384. // 原始单号
  385. tWhgenleg.setfOriginalbillno(warehouseBills.getfMblno());
  386. }
  387. // 明细类型
  388. tWhgenleg.setfBusinessType(warehousebillsitems.getfBusinessType());
  389. // 仓库
  390. tWhgenleg.setfWarehouseid(warehouseBills.getfWarehouseid());
  391. // 库区
  392. tWhgenleg.setfWarehouseLocationid(warehousebillsitems.getfWarehouselocid());
  393. // 货物品名
  394. tWhgenleg.setfGoodsid(warehousebillsitems.getfGoodsid());
  395. // 计费方式
  396. tWhgenleg.setfBillingway(warehousebillsitems.getfBillingway());
  397. // 仓储计费日期
  398. tWhgenleg.setfChargedate(warehousebillsitems.getfChargedate());
  399. // 贸易方式
  400. tWhgenleg.setfTrademodeid(warehouseBills.getfTrademodeid());
  401. // 入库数
  402. tWhgenleg.setfQtyd(warehousebillsitems.getfQty());
  403. // 入库尺码
  404. tWhgenleg.setfVolumnd(warehousebillsitems.getfVolumn());
  405. // 唛头
  406. tWhgenleg.setfMarks(warehousebillsitems.getfMarks());
  407. // 入库毛重
  408. tWhgenleg.setfGrossweightd(warehousebillsitems.getfGrossweight());
  409. // 入库净重
  410. tWhgenleg.setfNetweightd(warehousebillsitems.getfNetweight());
  411. // 入库箱号
  412. tWhgenleg.setfCntrno(warehousebillsitems.getfCntrno());
  413. // 创建人
  414. tWhgenleg.setCreateBy(user.getUserName());
  415. // 创建人
  416. tWhgenleg.setCreateTime(new Date());
  417. // 状态
  418. tWhgenleg.setfStatus("T");
  419. // 结余件数
  420. tWhgenleg.setfQtyblc(warehousebillsitems.getfQty());
  421. return tWhgenlegMapper.insertTWhgenleg(tWhgenleg);
  422. }
  423. @Transactional
  424. public int updateTWhgenlegData(TWarehousebillsitems warehousebillsitems, long whgenlegId, String billtype) {
  425. Map<String, Object> map = new HashMap<>();
  426. map.put("whgenlegId", whgenlegId);
  427. map.put("billType", billtype);
  428. map.put("warehousebillsitems", warehousebillsitems);
  429. return tWhgenlegMapper.updateTWhgenlegData(map);
  430. }
  431. /**
  432. * 仓库暂存接口
  433. *
  434. * @param tWarehouseBills 仓库主表
  435. * @param tWarehousebillsfeesCr 仓库费付款用明细表
  436. * @param tWarehousebillsfeesDr 仓库费收
  437. * 款用明细表
  438. * @param tWarehousebillsitems 仓库货物明细表
  439. * @param loginUser 当前登陆人
  440. * @param billsType 判断标识
  441. * @return 结果
  442. */
  443. @Override
  444. @Transactional
  445. public AjaxResult insertTWarehousebills(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr
  446. , String tWarehousebillsitems, String tEnclosure, LoginUser loginUser, String tCntr, String billsType) {
  447. Long fPid = null;
  448. Map<String, Object> map = new HashMap<>();
  449. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  450. if (StringUtils.isNull(warehouseBills.getfId())) {
  451. // 如果是新数据
  452. warehouseBills.setfBillstatus(2L);
  453. warehouseBills.setfItemsStatus(1L);
  454. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  455. warehouseBills.setfBilltype(billsType);
  456. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  457. // 业务编码
  458. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  459. warehouseBills.setfBillno(billNo);
  460. if ("SJRK".equals(billsType)) {
  461. // 存货编码
  462. Date time = new Date();
  463. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  464. warehouseBills.setfBscorpno(bscorpno);
  465. } else {
  466. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  467. }
  468. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  469. fPid = warehouseBills.getfId();
  470. } else {
  471. fPid = warehouseBills.getfId();
  472. if (!"SJRK".equals(billsType)) {
  473. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  474. }
  475. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  476. warehouseBills.setUpdateTime(new Date());
  477. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  478. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  479. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  480. tEnclosureMapper.deleteByFPid(fPid);
  481. // 删除 从表中 未打印账单的数据
  482. deleteBillsitems(fPid, tWarehousebillsitems);
  483. }
  484. // 库存明细添加
  485. if (StringUtils.isNotNull(tWarehousebillsitems) && !"[]".equals(tWarehousebillsitems)) {
  486. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  487. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  488. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  489. boolean warehouseStatus = "SJRK".equals(billsType) || "SJCK".equals(billsType) || "CKDB".equals(billsType) || "HWTG".equals(billsType);
  490. // 仓储计费日期
  491. wbItem.setfBilltype(billsType);
  492. if ("SJRK".equals(billsType)) {
  493. wbItem.setfChargedate(warehouseBills.getfChargedate());
  494. wbItem.setfBillingway(warehouseBills.getfBillingway());
  495. wbItem.setfMblno(warehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  496. }
  497. if (null != wbItem.getfId()) {
  498. wbItem.setUpdateTime(new Date());
  499. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  500. tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  501. } else {
  502. // 添加主表 业务单号
  503. wbItem.setfBillno(warehouseBills.getfBillno());
  504. if (!warehouseStatus) {
  505. // wbItem.setfMblno(warehouseBills.getfMblno());
  506. wbItem.setfBillstatus(1L);
  507. } else {
  508. wbItem.setfBillstatus(10L);
  509. }
  510. wbItem.setfPid(fPid);
  511. wbItem.setCreateBy(loginUser.getUser().getUserName());
  512. wbItem.setCreateTime(new Date());
  513. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  514. if (!warehouseStatus) {
  515. // 添加状态log
  516. insertTWarehousebillsLog(wbItem, 10L, loginUser);
  517. }
  518. }
  519. }
  520. } else {
  521. warehouseBills.setfItemsStatus(1L);
  522. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  523. }
  524. // 附件添加
  525. if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) {
  526. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  527. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  528. for (TEnclosure enclosure : tEnclosureList) {
  529. enclosure.setfPid(fPid);
  530. enclosure.setCreateBy(loginUser.getUser().getUserName());
  531. enclosure.setCreateTime(new Date());
  532. tEnclosureMapper.insertTEnclosure(enclosure);
  533. }
  534. }
  535. // 箱型数据
  536. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  537. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  538. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  539. int line = 0;
  540. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  541. line++;
  542. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  543. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  544. return AjaxResult.error("箱型数据第"+line+"行数据缺少必填数据");
  545. }
  546. cntr.setfPid(fPid);
  547. cntr.setfGoodsid(0L);
  548. cntr.setfPackageid("0");
  549. cntr.setfCntrweight(0L);
  550. cntr.setCreateBy(loginUser.getUser().getUserName());
  551. cntr.setCreateTime(new Date());
  552. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  553. }
  554. }
  555. // 收款明细添加
  556. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  557. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  558. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  559. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  560. // 检验 数量*单价=金额
  561. wbDr.setfPid(fPid);
  562. wbDr.setfDc("D");
  563. wbDr.setfBilltype(billsType);
  564. wbDr.setCreateTime(new Date());
  565. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  566. wbDr.setfChargedate(warehouseBills.getfChargedate());
  567. wbDr.setfBillingDeadline(warehouseBills.getfChargedate());
  568. wbDr.setCreateBy(loginUser.getUser().getUserName());
  569. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  570. wbDr.setfBsdate(warehouseBills.getfBsdate());
  571. }
  572. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  573. }
  574. }
  575. // 付款明细添加
  576. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  577. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  578. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  579. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  580. wbCr.setfPid(fPid);
  581. wbCr.setfDc("C");
  582. wbCr.setfBilltype(billsType);
  583. wbCr.setCreateTime(new Date());
  584. wbCr.setSrcBillNo(warehouseBills.getfBillno());
  585. wbCr.setCreateBy(loginUser.getUser().getUserName());
  586. wbCr.setfChargedate(warehouseBills.getfChargedate());
  587. wbCr.setfBillingDeadline(warehouseBills.getfChargedate());
  588. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  589. wbCr.setfBsdate(warehouseBills.getfBsdate());
  590. }
  591. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  592. }
  593. }
  594. TWarehousebillsitems warehousebillsitems = new TWarehousebillsitems();
  595. warehousebillsitems.setfPid(fPid);
  596. map.put("warehouseBills", warehouseBills);
  597. map.put("warehousebillsitems", tWarehousebillsitemsMapper.selectGoodsTransferitemsList(warehousebillsitems));
  598. return AjaxResult.success("成功", map);
  599. }
  600. @Override
  601. public int insertTWarehousebills(TWarehouseBills tWarehousebills) {
  602. return tWarehouseBillsMapper.insertTWarehousebills(tWarehousebills);
  603. }
  604. /**
  605. * 凯和订单计划暂存
  606. *
  607. * @param tWarehousebills 主表信息
  608. * @param tWarehousebillsCntr 从表信息
  609. * @param billsType
  610. * @param loginUser
  611. * @return
  612. */
  613. @Override
  614. @Transactional
  615. public AjaxResult TSPlantMessage(String tWarehousebills, String tWarehousebillsCntr,
  616. String billsType, LoginUser loginUser) {
  617. Map<String, Object> map = new HashMap<>();
  618. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  619. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  620. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  621. if (warehouseBills.getfId() == null) {
  622. String billNo = billnoSerialServiceImpl.getBillNo("SE", warehouseBills.getfBsdate());
  623. warehouseBills.setfBillno(billNo);
  624. warehouseBills.setCreateTime(DateUtils.getNowDate());
  625. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  626. warehouseBills.setfBilltype("SE");
  627. warehouseBills.setfTypeid(1);
  628. warehouseBills.setfBillstatus(2L);
  629. warehouseBills.setfDeptid(loginUser.getUser().getDeptId());
  630. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  631. int i = tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  632. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  633. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  634. warehousebillsCntr.setfPid(warehouseBills.getfId());
  635. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  636. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  637. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  638. }
  639. }
  640. } else {
  641. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  642. if (!"2".equals(tWarehouseBills.getfBillstatus()) || !"3".equals(tWarehouseBills.getfBillstatus())) {
  643. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  644. return AjaxResult.error("当前数据不允许暂存");
  645. }
  646. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  647. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  648. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  649. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  650. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  651. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  652. warehousebillsCntr.setfPid(warehouseBills.getfId());
  653. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  654. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  655. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  656. }
  657. }
  658. }
  659. map.put("warehouseBills", warehouseBills);
  660. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  661. return AjaxResult.success("msg", map);
  662. }
  663. /**
  664. * 凯和订单计划提交
  665. *
  666. * @param tWarehousebills 主表信息
  667. * @param tWarehousebillsCntr 从表信息
  668. * @param billsType
  669. * @param loginUser
  670. * @return
  671. */
  672. @Override
  673. @Transactional
  674. public AjaxResult submitPlantMessage(String tWarehousebills, String tWarehousebillsCntr,
  675. String billsType, LoginUser loginUser) {
  676. boolean isApprove = false;//是否开启审批流
  677. String key = "";//键
  678. long actId = 0L;//活动id
  679. Long fPid = null;
  680. Map<String, Object> map = new HashMap<>();
  681. if ("KHDD".equals(billsType)) {
  682. actId = 410L;
  683. key = "khwarehouse.warehousebills.ApprovalFlow";
  684. }
  685. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  686. if (StringUtils.isNull(sysConfig)) {
  687. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  688. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  689. }
  690. if ("0".equals(sysConfig.getConfigValue())) {
  691. isApprove = true;
  692. }
  693. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  694. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntr);
  695. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntr.class);
  696. //获取客户单位
  697. Long clientFid = tCorpsMapper.getClientFid(loginUser.getUser().getPhonenumber());
  698. if (warehouseBills.getfId() == null) {
  699. String billNo = billnoSerialServiceImpl.getBillNo("SE", DateUtils.getNowDate());
  700. warehouseBills.setfBillno(billNo);
  701. warehouseBills.setCreateTime(DateUtils.getNowDate());
  702. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  703. warehouseBills.setfBilltype("SE");
  704. warehouseBills.setfTypeid(1);
  705. warehouseBills.setfDeptid(loginUser.getUser().getDeptId());
  706. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  707. warehouseBills.setfCorpid(clientFid);
  708. if (isApprove) {
  709. warehouseBills.setfBillstatus(4L);
  710. } else {
  711. warehouseBills.setfBillstatus(6L);
  712. }
  713. int i = tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  714. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  715. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  716. warehousebillsCntr.setfPid(warehouseBills.getfId());
  717. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  718. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  719. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  720. }
  721. }
  722. fPid = warehouseBills.getfId();
  723. } else {
  724. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  725. if (tWarehouseBills.getfBillstatus() == 2L
  726. || tWarehouseBills.getfBillstatus() == 3L) {
  727. } else {
  728. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  729. return AjaxResult.error("当前数据不允许提交");
  730. }
  731. fPid = warehouseBills.getfId();
  732. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  733. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  734. if (isApprove) {
  735. warehouseBills.setfBillstatus(4L);
  736. } else {
  737. warehouseBills.setfBillstatus(6L);
  738. }
  739. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  740. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(warehouseBills.getfId());
  741. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  742. for (TWarehousebillsCntr warehousebillsCntr : tWarehousebillsCntrs) {
  743. warehousebillsCntr.setfPid(warehouseBills.getfId());
  744. warehousebillsCntr.setCreateTime(DateUtils.getNowDate());
  745. warehousebillsCntr.setCreateBy(SecurityUtils.getUsername());
  746. int cntr = tWarehousebillsCntrMapper.insertTWarehousebillsCntr(warehousebillsCntr);
  747. }
  748. }
  749. }
  750. if (isApprove) {
  751. AuditItems auditItems = new AuditItems();
  752. auditItems.setLevelId(0L);
  753. auditItems.setBillId(fPid);
  754. auditItems.setActId(actId);
  755. auditItems.setIffinalItem("F");
  756. auditItems.setBillNo(warehouseBills.getfBillno());
  757. // 存储委托方(货权方)
  758. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  759. // 存储业务类型(业务类型)
  760. auditItems.setRefno2(warehouseBills.getfBilltype());
  761. // 存储提单号(提单号)
  762. auditItems.setRefno3(warehouseBills.getfMblno());
  763. auditItems.setSendUserId(loginUser.getUser().getUserId());
  764. auditItems.setSendName(SecurityUtils.getUsername());
  765. auditItems.setSendTime(new Date());
  766. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  767. auditItems.setAuditItem(new Date());
  768. auditItems.setAuditOpTime(new Date());
  769. auditItems.setAuditMsg("提交");
  770. auditItems.setAuditStatus("O");
  771. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  772. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  773. String code = approvalFlow.get("code").toString();
  774. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  775. if ("500".equals(code)) {
  776. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  777. }
  778. return approvalFlow;
  779. }
  780. map.put("warehouseBills", warehouseBills);
  781. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  782. return AjaxResult.success("msg", map);
  783. }
  784. /**
  785. * 配船暂存
  786. *
  787. * @param tWarehousebills 主表信息
  788. * @param tWarehousebillsCntritems 从表信息
  789. * @param billsType
  790. * @param loginUser
  791. * @return
  792. */
  793. @Override
  794. @Transactional
  795. public AjaxResult TSMakingMessage(String tWarehousebills, String tWarehousebillsCntritems, String billsType, LoginUser loginUser) {
  796. Map<String, Object> map = new HashMap<>();
  797. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  798. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  799. List<TWarehousebillsCntritems> tWarehousebillsCntrs = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  800. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  801. if (!"7".equals(tWarehouseBills.getfBillstatus()) || !"8".equals(tWarehouseBills.getfBillstatus())) {
  802. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  803. return AjaxResult.error("当前数据不允许暂存");
  804. }
  805. warehouseBills.setfBillstatus(7L);
  806. int i = tWarehouseBillsMapper.updateById(warehouseBills);
  807. int cntritemsfPid = tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  808. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  809. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntrs) {
  810. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  811. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  812. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  813. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  814. }
  815. }
  816. map.put("warehouseBills", warehouseBills);
  817. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  818. return AjaxResult.success("msg", map);
  819. }
  820. /**
  821. * 配船提交
  822. *
  823. * @param tWarehousebills 主表信息
  824. * @param tWarehousebillsCntritems 从表信息
  825. * @param billsType
  826. * @param loginUser
  827. * @return
  828. */
  829. @Override
  830. @Transactional
  831. public AjaxResult submitMakingMessage(String tWarehousebills, String tWarehousebillsCntritems, String billsType, LoginUser loginUser) {
  832. boolean isApprove = false;//是否开启审批流
  833. String key = "";//键
  834. long actId = 0L;//活动id
  835. Long fPid = null;
  836. Map<String, Object> map = new HashMap<>();
  837. if ("KHDD".equals(billsType)) {
  838. actId = 420L;
  839. key = "khwarehouse.makingCargoPlan.ApprovalFlow";
  840. }
  841. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  842. if (StringUtils.isNull(sysConfig)) {
  843. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  844. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  845. }
  846. if ("0".equals(sysConfig.getConfigValue())) {
  847. isApprove = true;
  848. }
  849. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  850. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  851. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  852. fPid = warehouseBills.getfId();
  853. warehouseBills.setUpdateTime(DateUtils.getNowDate());
  854. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  855. if (isApprove) {
  856. warehouseBills.setfBillstatus(9L);
  857. } else {
  858. warehouseBills.setfBillstatus(11L);
  859. }
  860. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  861. if (tWarehouseBills.getfBillstatus() == 6L
  862. || tWarehouseBills.getfBillstatus() == 7L
  863. || tWarehouseBills.getfBillstatus() == 8L) {
  864. } else {
  865. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  866. return AjaxResult.error("当前数据不允许提交");
  867. }
  868. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  869. tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  870. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  871. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  872. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  873. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  874. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  875. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  876. }
  877. }
  878. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  879. warehousebillsCntr.setfPid(warehouseBills.getfId());
  880. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  881. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBills.getfVoyid());
  882. if (isApprove) {
  883. AuditItems auditItems = new AuditItems();
  884. auditItems.setLevelId(0L);
  885. auditItems.setBillId(fPid);
  886. auditItems.setActId(actId);
  887. auditItems.setIffinalItem("F");
  888. auditItems.setBillNo(tWarehouseBills.getfBillno());
  889. // 存储委托方(货权方)
  890. auditItems.setRefno1(tWarehouseBills.getfCorpid() + "");
  891. // 存储业务类型(业务类型)
  892. auditItems.setRefno2(tWarehouseBills.getfBilltype());
  893. // 存储提单号(提单号)
  894. //auditItems.setRefno3(warehouseBills.getfMblno());
  895. auditItems.setSendUserId(loginUser.getUser().getUserId());
  896. auditItems.setSendName(SecurityUtils.getUsername());
  897. auditItems.setSendTime(new Date());
  898. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  899. auditItems.setAuditItem(new Date());
  900. auditItems.setAuditOpTime(new Date());
  901. auditItems.setAuditMsg("提交");
  902. auditItems.setAuditStatus("O");
  903. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  904. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  905. String code = approvalFlow.get("code").toString();
  906. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  907. if ("500".equals(code)) {
  908. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  909. }
  910. return approvalFlow;
  911. }
  912. map.put("warehouseBills", warehouseBills);
  913. map.put("tWarehousebillsCntrs", tWarehousebillsCntrs);
  914. map.put("tVoyageL", tVoyage);
  915. map.put("tWarehousebillsCntritems", tWarehousebillsCntritemsList);
  916. return AjaxResult.success("msg", map);
  917. }
  918. /**
  919. * 仓库模块提交接口
  920. *
  921. * @param tWarehouseBills 仓库主表
  922. * @param tWarehousebillsfeesCr 仓库费用付款明细表
  923. * @param tWarehousebillsfeesDr 仓库费用收款明细表
  924. * @param tWarehousebillsitems 仓库货物明细表
  925. * @param tEnclosure
  926. * @param loginUser 当前登陆人
  927. * @param billsType 操作状态
  928. * @return
  929. */
  930. @Override
  931. @Transactional
  932. public AjaxResult warehouseSubmission(String tWarehouseBills, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr,
  933. String tWarehousebillsitems, String tEnclosure, LoginUser loginUser, String tCntr, String billsType) {
  934. Long fPid = null;
  935. boolean isApprove = false;
  936. String key = "";
  937. long actId = 0L;
  938. if ("SJRK".equals(billsType)) {
  939. actId = 110L;
  940. key = "warehouse.inStock.ApprovalFlow";
  941. } else if ("SJCK".equals(billsType)) {
  942. actId = 120L;
  943. key = "warehouse.outStock.ApprovalFlow";
  944. } else if ("CKDB".equals(billsType)) {
  945. actId = 140L;
  946. key = "warehouse.stockTransfer.ApprovalFlow";
  947. } else if ("HQZY".equals(billsType)) {
  948. actId = 130L;
  949. key = "warehouse.transfer.ApprovalFlow";
  950. } else if ("HWTG".equals(billsType)) {
  951. actId = 160L;
  952. key = "warehouse.cargoClearance.ApprovalFlow";
  953. }
  954. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  955. if (StringUtils.isNull(sysConfig)) {
  956. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  957. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  958. }
  959. if ("0".equals(sysConfig.getConfigValue())) {
  960. isApprove = true;
  961. }
  962. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  963. warehouseBills.setfItemsStatus(4L);
  964. if (StringUtils.isNull(warehouseBills.getfId())) {
  965. if (isApprove) {
  966. warehouseBills.setfBillstatus(4L);
  967. } else {
  968. warehouseBills.setfBillstatus(6L);
  969. warehouseBills.setfReviewDate(new Date());
  970. }
  971. warehouseBills.setfBilltype(billsType);
  972. if (!"SJRK".equals(billsType)) {
  973. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  974. }
  975. warehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  976. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  977. String billNo = billnoSerialServiceImpl.getBillNo(billsType, warehouseBills.getfBsdate());
  978. warehouseBills.setfBillno(billNo);
  979. Date time = new Date();
  980. String bscorpno = billnoSerialServiceImpl.getCorpNo(warehouseBills.getfCorpid(), time);
  981. warehouseBills.setfBscorpno(bscorpno);
  982. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  983. fPid = warehouseBills.getfId();
  984. } else {
  985. fPid = warehouseBills.getfId();
  986. if (isApprove) {
  987. warehouseBills.setfBillstatus(4L);
  988. } else {
  989. warehouseBills.setfBillstatus(6L);
  990. warehouseBills.setfReviewDate(new Date());
  991. }
  992. warehouseBills.setUpdateTime(new Date());
  993. if (!"SJRK".equals(billsType)) {
  994. warehouseBills.setfChargedate(warehouseBills.getfBsdate());
  995. }
  996. warehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  997. tEnclosureMapper.deleteByFPid(fPid);
  998. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  999. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  1000. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1001. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  1002. }
  1003. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  1004. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  1005. int line = 0;
  1006. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  1007. line++;
  1008. if ("SJRK".equals(billsType) || "SJCK".equals(billsType) || "CKDB".equals(billsType) || "HWTG".equals(billsType)) {
  1009. // 除了入库其他模块不需要更新主表的 仓储费计费日期到明细表,其他模块 应从库存总账把仓储费计费日期 赋给明细表
  1010. if ("SJRK".equals(billsType)) {
  1011. wbItem.setfMblno(warehouseBills.getfMblno());
  1012. wbItem.setfBillingway(warehouseBills.getfBillingway());
  1013. wbItem.setfChargedate(warehouseBills.getfChargedate());
  1014. wbItem.setfOriginalbilldate(warehouseBills.getfBsdate());
  1015. wbItem.setfMblno(warehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  1016. }
  1017. if (!wbItem.getfBillstatus().equals(40L)) {
  1018. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1019. return AjaxResult.error("库存明细第" + line + "行状态异常,请确认");
  1020. }
  1021. } else {
  1022. if (!wbItem.getfBillstatus().equals(6L)) {
  1023. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1024. return AjaxResult.error("库存明细第" + line + "行状态异常,请确认");
  1025. }
  1026. }
  1027. if (StringUtils.isNull(wbItem.getfChargedate())) {
  1028. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1029. return AjaxResult.error("库存明细第" + line + "行未找到仓储费计费日期,请确认");
  1030. }
  1031. if (StringUtils.isNull(wbItem.getfBillingway())) {
  1032. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1033. return AjaxResult.error("库存明细第" + line + "行未找到计费方式,请确认");
  1034. }
  1035. if (StringUtils.isNull(wbItem.getfOriginalbilldate())) {
  1036. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1037. return AjaxResult.error("库存明细第" + line + "行未找到入库日期,请确认");
  1038. }
  1039. wbItem.setfPid(fPid);
  1040. wbItem.setfBilltype(billsType);
  1041. wbItem.setCreateTime(new Date());
  1042. wbItem.setfBillno(warehouseBills.getfBillno());
  1043. wbItem.setCreateBy(loginUser.getUser().getUserName());
  1044. tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  1045. }
  1046. // 箱型数据
  1047. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  1048. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  1049. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  1050. int cntrLine = 0;
  1051. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  1052. cntrLine++;
  1053. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  1054. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1055. return AjaxResult.error("箱型数据第"+cntrLine+"行数据缺少必填数据");
  1056. }
  1057. cntr.setfPid(fPid);
  1058. cntr.setfGoodsid(0L);
  1059. cntr.setfPackageid("0");
  1060. cntr.setfCntrweight(0L);
  1061. cntr.setCreateBy(loginUser.getUser().getUserName());
  1062. cntr.setCreateTime(new Date());
  1063. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  1064. }
  1065. }
  1066. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  1067. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  1068. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1069. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  1070. wbCr.setfPid(fPid);
  1071. wbCr.setfDc("C");
  1072. wbCr.setfBilltype(billsType);
  1073. wbCr.setCreateTime(new Date());
  1074. wbCr.setSrcBillNo(warehouseBills.getfBillno());
  1075. wbCr.setCreateBy(loginUser.getUser().getUserName());
  1076. wbCr.setfChargedate(warehouseBills.getfChargedate());
  1077. wbCr.setfBillingDeadline(warehouseBills.getfChargedate());
  1078. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  1079. wbCr.setfBsdate(warehouseBills.getfBsdate());
  1080. }
  1081. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  1082. }
  1083. }
  1084. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  1085. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  1086. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1087. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  1088. wbDr.setfPid(fPid);
  1089. wbDr.setfDc("D");
  1090. wbDr.setfBillstatus(4L);
  1091. wbDr.setfBilltype(billsType);
  1092. wbDr.setCreateTime(new Date());
  1093. wbDr.setSrcBillNo(warehouseBills.getfBillno());
  1094. wbDr.setCreateBy(loginUser.getUser().getUserName());
  1095. wbDr.setfChargedate(warehouseBills.getfChargedate());
  1096. wbDr.setfBillingDeadline(warehouseBills.getfChargedate());
  1097. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  1098. wbDr.setfBsdate(warehouseBills.getfBsdate());
  1099. }
  1100. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  1101. }
  1102. }
  1103. if (StringUtils.isNotNull(tEnclosure) && !"[]".equals(tEnclosure)) {
  1104. JSONArray jsonEnclosureArray = JSONArray.parseArray(tEnclosure);
  1105. List<TEnclosure> enclosuresList = JSONObject.parseArray(jsonEnclosureArray.toJSONString(), TEnclosure.class);
  1106. long lineNo = 0L;
  1107. for (TEnclosure enclosure : enclosuresList) {
  1108. lineNo++;
  1109. enclosure.setfPid(fPid);
  1110. enclosure.setfLineno(lineNo);
  1111. enclosure.setCreateTime(new Date());
  1112. enclosure.setCreateBy(loginUser.getUser().getUserName());
  1113. tEnclosureMapper.insertTEnclosure(enclosure);
  1114. }
  1115. }
  1116. // 这里加个判断取系统参数来确定是否需要启用审批流
  1117. if (isApprove) {
  1118. AuditItems auditItems = new AuditItems();
  1119. auditItems.setLevelId(0L);
  1120. auditItems.setBillId(fPid);
  1121. auditItems.setActId(actId);
  1122. auditItems.setIffinalItem("F");
  1123. auditItems.setBillNo(warehouseBills.getfBillno());
  1124. // 存储委托方(货权方)
  1125. auditItems.setRefno1(warehouseBills.getfCorpid() + "");
  1126. // 存储业务类型(业务类型)
  1127. auditItems.setRefno2(warehouseBills.getfBilltype());
  1128. // 存储提单号(提单号)
  1129. auditItems.setRefno3(warehouseBills.getfMblno());
  1130. auditItems.setSendUserId(loginUser.getUser().getUserId());
  1131. auditItems.setSendName(loginUser.getUsername());
  1132. auditItems.setSendTime(new Date());
  1133. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  1134. auditItems.setAuditItem(new Date());
  1135. auditItems.setAuditOpTime(new Date());
  1136. auditItems.setAuditMsg("提交");
  1137. auditItems.setAuditStatus("O");
  1138. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  1139. // Long code = Long.valueOf(String.valueOf(approvalFlow.get("code"))).longValue();
  1140. String code = approvalFlow.get("code").toString();
  1141. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  1142. if ("500".equals(code)) {
  1143. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1144. }
  1145. return approvalFlow;
  1146. } else {
  1147. AjaxResult ajaxResult = warehouseFollow(fPid, 6L);
  1148. String code = ajaxResult.get("code").toString();
  1149. if ("500".equals(code)) {
  1150. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1151. }
  1152. return ajaxResult;
  1153. }
  1154. }
  1155. @Override
  1156. public List<TWareHouseExcelItems> selectTWarehousebillsItemsList(Long fId) {
  1157. return tWarehouseBillsMapper.selectTWarehousebillsItemsList(fId);
  1158. }
  1159. @Override
  1160. public List<Map<String, Object>> selectInventoryList(TWarehouseBills tWarehouseBills) {
  1161. if (StringUtils.isNotNull(tWarehouseBills.getfWarehouseid())) {
  1162. // 获取仓库信息
  1163. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(tWarehouseBills.getfWarehouseid());
  1164. if (tWarehouse.getfLocation() == 1) {
  1165. tWarehouseBills.setfLocation(1L);
  1166. } else {
  1167. tWarehouseBills.setfLocation(0L);
  1168. }
  1169. }
  1170. if (tWarehouseBills.getfBilltype().equals("SJRK")) {
  1171. return tWarehouseBillsMapper.selectInventorySJRKList(tWarehouseBills);
  1172. } else {
  1173. return tWarehouseBillsMapper.selectInventorySJCKList(tWarehouseBills);
  1174. }
  1175. }
  1176. @Override
  1177. public List<TWareHouseItemsExcel> selectTWarehousebillsItemsList(TWarehouseBills tWarehouseBills) {
  1178. return tWarehouseBillsMapper.selectTWarehousebillsItemList(tWarehouseBills);
  1179. }
  1180. @Override
  1181. public AjaxResult serialNumber(String billsType) {
  1182. Map<String, Object> map = new HashMap<>();
  1183. Date time = new Date();
  1184. String serialNumber = null;
  1185. // 查询流水号
  1186. if ("SJRK".equals(billsType)) {
  1187. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("RK", time);
  1188. } else if ("SJCK".equals(billsType)) {
  1189. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("CK", time);
  1190. } else if ("CKDB".equals(billsType)) {
  1191. serialNumber = billnoSerialServiceImpl.getFictitiousNumber("DB", time);
  1192. }
  1193. map.put("fSerialNumber", serialNumber);
  1194. return AjaxResult.success("成功", map);
  1195. }
  1196. @Override
  1197. public int derecognition(Long fId) {
  1198. // 查询对账
  1199. int reconciliation = tWarehousebillsfeesMapper.selectReconciliation(fId);
  1200. // 查询收费
  1201. int charge = tWarehousebillsfeesMapper.selectCharge(fId);
  1202. // 查询付费
  1203. int pay = tWarehousebillsfeesMapper.selectPay(fId);
  1204. if (reconciliation > 0) {
  1205. return 1;
  1206. } else if (charge > 0) {
  1207. return 2;
  1208. } else if (pay > 0) {
  1209. return 3;
  1210. } else {
  1211. return 4;
  1212. }
  1213. }
  1214. @Override
  1215. public List<Map<String, Object>> selectWareHouseNumber() {
  1216. List<Map<String, Object>> map = new ArrayList<>();
  1217. Map<String, Object> maps = new HashMap<>();
  1218. // 入库待办数量
  1219. maps.put("inStock", tWarehousebillsitemsMapper.inStock());
  1220. // 出库待办数量
  1221. maps.put("outStock", tWarehousebillsitemsMapper.outStock());
  1222. List<String> timeInterval = new ArrayList<>();
  1223. SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
  1224. //获取当前月第一天:
  1225. Calendar c = Calendar.getInstance();
  1226. c.add(Calendar.MONTH, 0);
  1227. c.set(Calendar.DAY_OF_MONTH, 1);//设置为1号,当前日期既为本月第一天
  1228. timeInterval.add(format.format(c.getTime()));
  1229. //获取前月的最后一天
  1230. Calendar ca = Calendar.getInstance();
  1231. ca.set(Calendar.DAY_OF_MONTH, ca.getActualMaximum(Calendar.DAY_OF_MONTH));
  1232. timeInterval.add(format.format(ca.getTime()));
  1233. maps.put("monthInStock", tWarehousebillsitemsMapper.monthInStock(timeInterval));
  1234. // 当月出库待办数量
  1235. maps.put("monthOutStock", tWarehousebillsitemsMapper.monthOutStock(timeInterval));
  1236. map.add(maps);
  1237. return map;
  1238. }
  1239. @Override
  1240. @Transactional
  1241. public AjaxResult waitWarehousingItems(TWarehousebillsitems tWarehousebillsitems) {
  1242. // 先查询是否已经处理
  1243. TWarehousebillsitems tWarehousebillsitems1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1244. if (tWarehousebillsitems1.getfBillstatus().equals(30)) {
  1245. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1246. return AjaxResult.error("更新库存明细失败,该信息已操作,请重新加载");
  1247. }
  1248. tWarehousebillsitems.setfSerialNumber(tWarehousebillsitems1.getfSerialNumber());
  1249. int num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1250. // 主表变更状态
  1251. TWarehouseBills tWarehousebills = new TWarehouseBills();
  1252. tWarehousebills.setfId(tWarehousebillsitems1.getfPid());
  1253. tWarehousebills.setfItemsStatus(3L);
  1254. int num1 = tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  1255. if (num <= 0 && num1 <= 0) {
  1256. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1257. return AjaxResult.error("更新库存明细失败");
  1258. } else {
  1259. return AjaxResult.success();
  1260. }
  1261. }
  1262. /**
  1263. * app仓储新行保存业务
  1264. *
  1265. * @param item 明细数据
  1266. * @param attachs 附件数据
  1267. * @return 结果
  1268. */
  1269. @Override
  1270. public AjaxResult submitWarehouse(String item, String attachs) {
  1271. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  1272. if (StringUtils.isNull(tWarehousebillsitems.getfPid())) {
  1273. return AjaxResult.error("未找到主表id信息,请确认");
  1274. }
  1275. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehousebillsitems.getfPid());
  1276. if (StringUtils.isNotNull(tWarehousebillsitems.getfGoodsid())) {
  1277. TGoods goods = tGoodsMapper.selectTGoodsById(tWarehousebillsitems.getfGoodsid());
  1278. if (!warehouseBills.getfProductName().contains(goods.getfName())) {
  1279. warehouseBills.setfProductName(warehouseBills.getfProductName() + "/" + goods.getfName());
  1280. }
  1281. }
  1282. if (StringUtils.isNotNull(tWarehousebillsitems.getfGoodsid())) {
  1283. TGoods goods = tGoodsMapper.selectTGoodsById(tWarehousebillsitems.getfGoodsid());
  1284. if (!warehouseBills.getfProductName().contains(goods.getfName())) {
  1285. warehouseBills.setfProductName(warehouseBills.getfProductName() + "/" + goods.getfName());
  1286. }
  1287. }
  1288. if (StringUtils.isNull(tWarehousebillsitems.getfId())) {
  1289. tWarehousebillsitems.setCreateTime(new Date());
  1290. tWarehousebillsitems.setCreateBy(SecurityUtils.getUsername());
  1291. tWarehousebillsitemsMapper.insertTWarehousebillsitems(tWarehousebillsitems);
  1292. } else {
  1293. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1294. if (StringUtils.isNull(warehousebillsitems)) {
  1295. return AjaxResult.error("未找到明细信息,请确认该明细信息是否存在");
  1296. }
  1297. if (warehousebillsitems.getfBillstatus() != 30L) {
  1298. return AjaxResult.error("该明细信息异常" + warehousebillsitems.getfBillstatus() + ",请确认");
  1299. }
  1300. tWarehousebillsitems.setUpdateTime(new Date());
  1301. tWarehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  1302. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1303. }
  1304. tEnclosureMapper.deleteByFPid(tWarehousebillsitems.getfPid());
  1305. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1306. // 附件添加
  1307. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  1308. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  1309. for (TEnclosure enclosure : tEnclosureList) {
  1310. enclosure.setfStatus("2");
  1311. enclosure.setCreateTime(new Date());
  1312. enclosure.setfPid(tWarehousebillsitems.getfPid());
  1313. enclosure.setCreateBy(SecurityUtils.getUsername());
  1314. tEnclosureMapper.insertTEnclosure(enclosure);
  1315. }
  1316. }
  1317. return AjaxResult.success();
  1318. }
  1319. /**
  1320. * 查看集港业务
  1321. *
  1322. * @param fId 集港id
  1323. * @return
  1324. */
  1325. @Override
  1326. public AjaxResult selectContainerPort(Long fId) {
  1327. Map<String, Object> map = new HashMap<>();
  1328. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1329. if (StringUtils.isNull(warehouseBills)) {
  1330. return AjaxResult.error("未找到主表信息,请确认该信息是否存在");
  1331. }
  1332. map.put("warehouseBills", warehouseBills);
  1333. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  1334. warehousebillsfees.setfPid(fId);
  1335. warehousebillsfees.setfDc("D");
  1336. List<TWarehousebillsfees> feesDr = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1337. List<TCorps> transportationList = new ArrayList<>();
  1338. if (StringUtils.isNotEmpty(feesDr)) {
  1339. for (TWarehousebillsfees dr : feesDr) {
  1340. TCorps corp = tCorpsMapper.selectTCorpsById(dr.getfCorpid());
  1341. if (StringUtils.isNotNull(corp)) {
  1342. transportationList.add(corp);
  1343. }
  1344. }
  1345. transportationList = transportationList.stream().distinct().collect(toList());
  1346. }
  1347. map.put("feesDrList", feesDr);
  1348. map.put("corpList", transportationList);
  1349. List<TCorps> corpsList = new ArrayList<>();
  1350. warehousebillsfees.setfDc("C");
  1351. List<TWarehousebillsfees> feesCr = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1352. if (StringUtils.isNotEmpty(feesCr)) {
  1353. for (TWarehousebillsfees cr : feesCr) {
  1354. TCorps corp = tCorpsMapper.selectTCorpsById(cr.getfCorpid());
  1355. if (StringUtils.isNotNull(corp)) {
  1356. corpsList.add(corp);
  1357. }
  1358. }
  1359. corpsList = corpsList.stream().distinct().collect(toList());
  1360. }
  1361. map.put("feesCrList", feesCr);
  1362. map.put("transportationList", corpsList);
  1363. return AjaxResult.success(map);
  1364. }
  1365. /**
  1366. * 集港业务保存、提交接口
  1367. *
  1368. * @param tWarehouseBills 主表业务
  1369. * @param feesCr 收费
  1370. * @param feesDr 付费
  1371. * @return
  1372. */
  1373. @Override
  1374. @Transactional
  1375. public AjaxResult saveContainerPort(String tWarehouseBills, String feesCr, String feesDr, String type) {
  1376. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  1377. warehouseBills.setfBilltype("CKJG");
  1378. // 判断提单号是否存在
  1379. if (StringUtils.isNull(warehouseBills.getfId()) && tWarehouseBillsMapper.selectContainMblno(warehouseBills) > 0) {
  1380. return AjaxResult.error("该提单号已存在");
  1381. }
  1382. Long billStatus = 2L;
  1383. if ("add".equals(type)) {
  1384. billStatus = 6L;
  1385. warehouseBills.setfReviewDate(warehouseBills.getfBsdate());
  1386. warehouseBills.setfBillstatus(billStatus);
  1387. } else {
  1388. if (StringUtils.isNull(warehouseBills.getfBillstatus())) {
  1389. warehouseBills.setfBillstatus(billStatus);
  1390. }
  1391. }
  1392. if (StringUtils.isNull(warehouseBills.getfId())) {
  1393. warehouseBills.setCreateTime(new Date());
  1394. warehouseBills.setCreateBy(SecurityUtils.getUsername());
  1395. warehouseBills.setfDeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  1396. warehouseBills.setfBsdeptid(SecurityUtils.getLoginUser().getUser().getDeptId());
  1397. tWarehouseBillsMapper.insertTWarehousebills(warehouseBills);
  1398. } else {
  1399. warehouseBills.setUpdateTime(new Date());
  1400. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1401. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1402. }
  1403. tWarehousebillsfeesMapper.deleteByFPid(warehouseBills.getfId());
  1404. if (StringUtils.isNotEmpty(feesCr) && !"[]".equals(feesCr)) {
  1405. JSONArray jsonDrArray = JSONArray.parseArray(feesCr);
  1406. List<TWarehousebillsfees> warehousebillsfeesCr = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  1407. int line = 1;
  1408. for (TWarehousebillsfees cr : warehousebillsfeesCr) {
  1409. if (StringUtils.isNull(cr.getfCorpid()) || StringUtils.isNull(cr.getfFeeunitid()) || StringUtils.isNull(cr.getfInventoryDays())) {
  1410. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1411. return AjaxResult.error("付款费用第" + line + "行,缺少必填信息");
  1412. }
  1413. cr.setfDc("C");
  1414. cr.setfBillstatus(billStatus);
  1415. cr.setCreateTime(new Date());
  1416. cr.setfPid(warehouseBills.getfId());
  1417. cr.setCreateBy(SecurityUtils.getUsername());
  1418. tWarehousebillsfeesMapper.insertTWarehousebillsfees(cr);
  1419. line++;
  1420. }
  1421. }
  1422. if (StringUtils.isNotEmpty(feesDr) && !"[]".equals(feesDr)) {
  1423. JSONArray jsonDrArray = JSONArray.parseArray(feesDr);
  1424. List<TWarehousebillsfees> warehousebillsfeesDr = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  1425. int line = 1;
  1426. for (TWarehousebillsfees dr : warehousebillsfeesDr) {
  1427. if (StringUtils.isNull(dr.getfCorpid()) || StringUtils.isNull(dr.getfFeeunitid()) || StringUtils.isNull(dr.getfInventoryDays())) {
  1428. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1429. return AjaxResult.error("收款费用第" + line + "行,缺少必填信息");
  1430. }
  1431. dr.setfDc("D");
  1432. dr.setfBillstatus(billStatus);
  1433. dr.setCreateTime(new Date());
  1434. dr.setfPid(warehouseBills.getfId());
  1435. dr.setCreateBy(SecurityUtils.getUsername());
  1436. tWarehousebillsfeesMapper.insertTWarehousebillsfees(dr);
  1437. line++;
  1438. }
  1439. }
  1440. return AjaxResult.success();
  1441. }
  1442. /**
  1443. * 查询集港业务基础资料
  1444. *
  1445. * @return
  1446. */
  1447. @Override
  1448. public AjaxResult selectBasicInformation() {
  1449. Map<String, Object> map = new HashMap<>();
  1450. TCorps corps = new TCorps();
  1451. String typeValue = "[\"1\"]";
  1452. corps.setfTypeid(typeValue);
  1453. corps.setfStatus("0");
  1454. // 应收 取客户
  1455. map.put("corpList", tCorpsMapper.selectTCorpsListLimit200(corps));
  1456. // 应付 取陆运公司
  1457. TCorps transportation = new TCorps();
  1458. typeValue = "[\"2\"]";
  1459. transportation.setfTypeid(typeValue);
  1460. transportation.setfStatus("0");
  1461. map.put("transportationList", tCorpsMapper.selectTCorpsListLimit200(transportation));
  1462. // 查询箱信息
  1463. TCntr tCntr = new TCntr();
  1464. tCntr.setfStatus("T");
  1465. map.put("cntrList", tCntrMapper.selectRcntrName(tCntr));
  1466. map.put("pierList", sysDictDataMapper.selectDictDataByType("pier"));
  1467. TFees tFees = tFeesMapper.selectTFeesByFName("集港费");
  1468. if (StringUtils.isNull(tFees)) {
  1469. map.put("fees", tFees);
  1470. return AjaxResult.success("未找到集港费用信息,请添加", map);
  1471. }
  1472. List<TFees> feesList = new ArrayList<>();
  1473. feesList.add(tFees);
  1474. map.put("fees", feesList);
  1475. return AjaxResult.success(map);
  1476. }
  1477. /**
  1478. * 集港业务撤销
  1479. *
  1480. * @param fId 主表id
  1481. * @param type
  1482. * @return
  1483. */
  1484. @Override
  1485. @Transactional
  1486. public AjaxResult revokeContainerPort(Long fId, String type) {
  1487. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1488. if (StringUtils.isNull(warehouseBills)) {
  1489. return AjaxResult.error("未找到主表信息,请确认是否存在");
  1490. }
  1491. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  1492. warehousebillsfees.setfPid(fId);
  1493. List<TWarehousebillsfees> warehousebillsfeesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  1494. if (StringUtils.isEmpty(warehousebillsfeesList)) {
  1495. return AjaxResult.error("未找到费用信息,请确认是否存在");
  1496. }
  1497. for (TWarehousebillsfees fee : warehousebillsfeesList) {
  1498. if (StringUtils.isNotEmpty(fee.getfStatementNo()) || StringUtils.isNotEmpty(fee.getfStlamountNo())) {
  1499. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1500. return AjaxResult.error("费用信息存在已对账或已收费付费操作,无法撤销");
  1501. }
  1502. if ("remove".equals(type)) {
  1503. tWarehousebillsfeesMapper.deleteTWarehousebillsfeesById(fee.getfId());
  1504. } else {
  1505. fee.setfStatus("2");
  1506. fee.setUpdateTime(new Date());
  1507. fee.setUpdateBy(SecurityUtils.getUsername());
  1508. tWarehousebillsfeesMapper.updateTWarehousebillsfees(fee);
  1509. }
  1510. }
  1511. if ("remove".equals(type)) {
  1512. if (warehouseBills.getfBillstatus() != 2L) {
  1513. return AjaxResult.error("主表状态有误,请确认状态是否为暂存状态");
  1514. }
  1515. tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  1516. return AjaxResult.success();
  1517. } else {
  1518. if (warehouseBills.getfBillstatus() != 6L) {
  1519. return AjaxResult.error("主表状态有误,请确认状态是否已提交");
  1520. }
  1521. }
  1522. warehouseBills.setfBillstatus(2L);
  1523. warehouseBills.setUpdateTime(new Date());
  1524. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1525. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1526. return AjaxResult.success();
  1527. }
  1528. /**
  1529. * app仓储新行提交业务
  1530. *
  1531. * @param item 仓库明细数据
  1532. * @param attachs 附件
  1533. * @return 结果
  1534. */
  1535. @Override
  1536. @Transactional
  1537. public AjaxResult saveWarehouse(String item, String attachs) {
  1538. TWarehousebillsitems warehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  1539. if (StringUtils.isNull(warehousebillsitems.getfPid())) {
  1540. return AjaxResult.error("未找到主表id信息,请确认");
  1541. }
  1542. warehousebillsitems.setfBillstatus(10L);
  1543. warehousebillsitems.setCreateTime(new Date());
  1544. warehousebillsitems.setCreateBy(SecurityUtils.getUsername());
  1545. tWarehousebillsitemsMapper.insertTWarehousebillsitems(warehousebillsitems);
  1546. tEnclosureMapper.deleteByFPid(warehousebillsitems.getfPid());
  1547. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1548. // 附件添加
  1549. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1550. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  1551. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  1552. for (TEnclosure enclosure : tEnclosureList) {
  1553. enclosure.setfStatus("2");
  1554. enclosure.setCreateTime(new Date());
  1555. enclosure.setfPid(warehousebillsitems.getfPid());
  1556. enclosure.setCreateBy(SecurityUtils.getUsername());
  1557. tEnclosureMapper.insertTEnclosure(enclosure);
  1558. }
  1559. }
  1560. }
  1561. return AjaxResult.success();
  1562. }
  1563. /**
  1564. * 查询提单号是否在一天当中出现多次
  1565. *
  1566. * @param tWarehouseBills 仓库数据
  1567. * @return 结果
  1568. */
  1569. @Override
  1570. public AjaxResult selectContainMblno(String tWarehouseBills, String billsType) {
  1571. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehouseBills, TWarehouseBills.class);
  1572. warehouseBills.setfBilltype(billsType);
  1573. String mblno = warehouseBills.getfMblno();
  1574. Date bsdate = warehouseBills.getfBsdate();
  1575. int count = tWarehouseBillsMapper.selectContainMblno(warehouseBills);
  1576. if (count > 1) {
  1577. return AjaxResult.success("提单号:" + mblno + ",日期:" + DateUtils.dateTime(bsdate) + ",出现" + count + "次", false);
  1578. }
  1579. return AjaxResult.success(true);
  1580. }
  1581. @Override
  1582. public List<TWarehouseBills> webVersionOrder(TWarehouseBills tWarehouseBills) {
  1583. List<TWarehouseBills> warehouseBills = tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  1584. if (CollectionUtils.isNotEmpty(warehouseBills)) {
  1585. for (TWarehouseBills warehouseBill : warehouseBills) {
  1586. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  1587. warehousebillsCntr.setfPid(warehouseBill.getfId());
  1588. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  1589. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  1590. warehouseBill.settWarehousebillsCntrList(tWarehousebillsCntrs);
  1591. }
  1592. TWarehousebillsCntritems warehousebillsCntritems = new TWarehousebillsCntritems();
  1593. warehousebillsCntritems.setfPid(warehouseBill.getfId());
  1594. List<TWarehousebillsCntritems> tWarehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(warehousebillsCntritems);
  1595. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritems)) {
  1596. warehouseBill.settWarehousebillsCntritemsList(tWarehousebillsCntritems);
  1597. }
  1598. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBill.getfVoyid());
  1599. warehouseBill.settVoyageL(tVoyage);
  1600. }
  1601. }
  1602. return warehouseBills;
  1603. }
  1604. @Override
  1605. public List<TWarehouseBills> webVersionOrderMessage(TWarehouseBills tWarehouseBills) {
  1606. return tWarehouseBillsMapper.webVersionOrderList(tWarehouseBills);
  1607. }
  1608. @Override
  1609. public List<Map<String, Object>> ruoYiVersionOrderList(LoginUser loginUser, TWarehouseBills tWarehouseBills) {
  1610. //tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  1611. return tWarehouseBillsMapper.ruoYiVersionOrderList(tWarehouseBills);
  1612. }
  1613. @Override
  1614. public List<Map<String, Object>> webVersionOrderMessage(LoginUser loginUser, TWarehouseBills tWarehouseBills) {
  1615. TWarehouseBills warehouseBills = new TWarehouseBills();
  1616. if (tWarehouseBills != null) {
  1617. BeanUtil.copyProperties(tWarehouseBills, warehouseBills);
  1618. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  1619. } else {
  1620. warehouseBills.setCreateBy(loginUser.getUser().getUserName());
  1621. }
  1622. return tWarehouseBillsMapper.ruoYiVersionOrderList(warehouseBills);
  1623. }
  1624. @Override
  1625. public List<TWarehouseBills> webVersionOrderDetails(TWarehouseBills tWarehouseBills) {
  1626. List<TWarehouseBills> warehouseBills = tWarehouseBillsMapper.webVersionOrderById(tWarehouseBills);
  1627. if (CollectionUtils.isNotEmpty(warehouseBills)) {
  1628. for (TWarehouseBills warehouseBill : warehouseBills) {
  1629. //货物信息
  1630. TWarehousebillsCntr warehousebillsCntr = new TWarehousebillsCntr();
  1631. warehousebillsCntr.setfPid(warehouseBill.getfId());
  1632. List<TWarehousebillsCntr> tWarehousebillsCntrs = tWarehousebillsCntrMapper.selectTWarehousebillsCntrList(warehousebillsCntr);
  1633. if (CollectionUtils.isNotEmpty(tWarehousebillsCntrs)) {
  1634. warehouseBill.settWarehousebillsCntrList(tWarehousebillsCntrs);
  1635. }
  1636. //配箱信息
  1637. TWarehousebillsCntritems warehousebillsCntritems = new TWarehousebillsCntritems();
  1638. warehousebillsCntritems.setfPid(warehouseBill.getfId());
  1639. List<TWarehousebillsCntritems> tWarehousebillsCntritems = tWarehousebillsCntritemsMapper.selectTWarehousebillsCntritemsList(warehousebillsCntritems);
  1640. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritems)) {
  1641. warehouseBill.settWarehousebillsCntritemsList(tWarehousebillsCntritems);
  1642. }
  1643. //航次信息
  1644. TVoyage tVoyage = tVoyageMapper.selectTVoyageById(warehouseBill.getfVoyid());
  1645. warehouseBill.settVoyageL(tVoyage);
  1646. //应收信息
  1647. List<TWarehousebillsfees> tWarehousebillsfeesDr = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBill.getfId(), "D");
  1648. warehouseBill.settWarehousebillsfeesDr(tWarehousebillsfeesDr);
  1649. //应付信息
  1650. List<TWarehousebillsfees> warehousebillsfeesCr = tWarehousebillsfeesMapper.selectFeesByPId(warehouseBill.getfId(), "C");
  1651. warehouseBill.setWarehousebillsfeesCr(warehousebillsfeesCr);
  1652. }
  1653. }
  1654. return warehouseBills;
  1655. }
  1656. @Override
  1657. @Transactional
  1658. public AjaxResult ruoYiUpdateOrderMessage(String tWarehousebills, String tWarehousebillsCntritems, String tWarehousebillsfeesCr,
  1659. String tWarehousebillsfeesDr, LoginUser loginUser, String billsType) {
  1660. TWarehouseBills warehouseBills = JSONArray.parseObject(tWarehousebills, TWarehouseBills.class);
  1661. Map<String, Object> map = new HashMap<>();
  1662. if (StringUtils.isEmpty(warehouseBills.getfMblno())) {
  1663. return AjaxResult.error("提单号不能为空");
  1664. }
  1665. TWarehouseBills mblno = tWarehouseBillsMapper.selectTWarehousebillsfMblno(warehouseBills);
  1666. if (StringUtils.isNotNull(mblno) && !mblno.getfId().equals(mblno.getfId())) {
  1667. return AjaxResult.error("提单号已存在,请重新提交");
  1668. }
  1669. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehouseBills.getfId());
  1670. if (tWarehouseBills.getfBillstatus() != 11L) {
  1671. return AjaxResult.error("订单未审核完成,暂不支持维护提单号");
  1672. }
  1673. TWarehouseBills bills = new TWarehouseBills();
  1674. bills.setfId(warehouseBills.getfId());
  1675. bills.setfMblno(warehouseBills.getfMblno());
  1676. Integer integer = tWarehouseBillsMapper.updateTWarehousebills(bills);
  1677. map.put("tWarehouseBills", tWarehouseBills);
  1678. if (StringUtils.isNotEmpty(tWarehousebillsCntritems)) {
  1679. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsCntritems);
  1680. List<TWarehousebillsCntritems> tWarehousebillsCntritemsList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsCntritems.class);
  1681. if (CollectionUtils.isNotEmpty(tWarehousebillsCntritemsList)) {
  1682. int cntritemsfPid = tWarehousebillsCntritemsMapper.deleteTWarehousebillsCntritemsfPid(warehouseBills.getfId());
  1683. for (TWarehousebillsCntritems warehousebillsCntritems : tWarehousebillsCntritemsList) {
  1684. warehousebillsCntritems.setfPid(warehouseBills.getfId());
  1685. warehousebillsCntritems.setCreateTime(DateUtils.getNowDate());
  1686. warehousebillsCntritems.setCreateBy(SecurityUtils.getUsername());
  1687. int cntr = tWarehousebillsCntritemsMapper.insertTWarehousebillsCntritems(warehousebillsCntritems);
  1688. }
  1689. }
  1690. map.put("tWarehousebillsCntritemsList", tWarehousebillsCntritemsList);
  1691. }
  1692. int c = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "C");
  1693. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  1694. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  1695. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1696. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  1697. wbCr.setfPid(warehouseBills.getfId());
  1698. wbCr.setfDc("C");
  1699. wbCr.setfBilltype(billsType);
  1700. wbCr.setCreateTime(new Date());
  1701. wbCr.setSrcBillNo(tWarehouseBills.getfBillno());
  1702. wbCr.setCreateBy(loginUser.getUser().getUserName());
  1703. //wbCr.setfChargedate(warehouseBills.getfChargedate());
  1704. //wbCr.setfBillingDeadline(warehouseBills.getfChargedate());
  1705. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  1706. wbCr.setfBsdate(warehouseBills.getfBsdate());
  1707. }
  1708. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  1709. }
  1710. map.put("warehousebillsfeesCrList", warehousebillsfeesCrList);
  1711. }
  1712. int d = tWarehousebillsfeesMapper.deleteFessByFPid(warehouseBills.getfId(), "D");
  1713. if (StringUtils.isNotNull(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  1714. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  1715. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  1716. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  1717. wbDr.setfPid(warehouseBills.getfId());
  1718. wbDr.setfDc("D");
  1719. wbDr.setfBillstatus(4L);
  1720. wbDr.setfBilltype(billsType);
  1721. wbDr.setCreateTime(new Date());
  1722. wbDr.setSrcBillNo(tWarehouseBills.getfBillno());
  1723. wbDr.setCreateBy(loginUser.getUser().getUserName());
  1724. //wbDr.setfChargedate(warehouseBills.getfChargedate());
  1725. //wbDr.setfBillingDeadline(warehouseBills.getfChargedate());
  1726. if (warehouseBills.getfBsdate() != null && !warehouseBills.getfBsdate().equals("")) {
  1727. wbDr.setfBsdate(warehouseBills.getfBsdate());
  1728. }
  1729. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  1730. }
  1731. map.put("warehousebillsfeesDrList", warehousebillsfeesDrList);
  1732. }
  1733. return AjaxResult.success("success", map);
  1734. }
  1735. /**
  1736. * app 查询业务主表信息
  1737. *
  1738. * @param warehouseBills
  1739. * @return
  1740. */
  1741. @Override
  1742. public List<Map<String, Object>> selectAppStockList(TWarehouseBills warehouseBills) {
  1743. return tWarehouseBillsMapper.selectAppStockList(warehouseBills);
  1744. }
  1745. /**
  1746. * app 根据主表id查询主表对应明细列表数据
  1747. *
  1748. * @param warehouseBills
  1749. * @return
  1750. */
  1751. @Override
  1752. public List<Map<String, Object>> warehouseItemById(TWarehouseBills warehouseBills) {
  1753. return tWarehouseBillsMapper.selectWarehouseItemListById(warehouseBills);
  1754. }
  1755. /**
  1756. * app 根据明细id查询对应明细表数据
  1757. *
  1758. * @param fId
  1759. * @return
  1760. */
  1761. @Override
  1762. public AjaxResult selectWarehouseItemDataById(Long fId) {
  1763. Map<String, Object> map = new HashMap<>();
  1764. Map<String, Object> itemMap = tWarehousebillsitemsMapper.selectWarehouseItemsByPId(fId);
  1765. if (StringUtils.isNull(itemMap) || !itemMap.containsKey("fPid")) {
  1766. return AjaxResult.error("未找到库存明细数据,请确认该明细是否存在");
  1767. }
  1768. map.put("item", itemMap);
  1769. if (itemMap.containsKey("fPid") && StringUtils.isNotNull(itemMap.get("fPid"))) {
  1770. long fPid = Long.valueOf(String.valueOf(itemMap.get("fPid")));
  1771. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  1772. map.put("warehouseBills", tWarehouseBills);
  1773. // 查询附件
  1774. map.put("enclosure", tEnclosureMapper.selectTEnclosureByPId(tWarehouseBills.getfId()));
  1775. }
  1776. return AjaxResult.success(map);
  1777. }
  1778. /**
  1779. * 查询app 添加新行 必要的基础资料
  1780. *
  1781. * @param fId
  1782. * @return
  1783. */
  1784. @Override
  1785. public AjaxResult getAppBasicInformation(Long fId) {
  1786. Map<String, Object> map = new HashMap<>();
  1787. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  1788. map.put("warehouseBills", tWarehouseBills);
  1789. if (StringUtils.isNotNull(tWarehouseBills.getfLabour())) {
  1790. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfLabour());
  1791. if (StringUtils.isNotNull(corps)) {
  1792. map.put("labourName", corps.getfName());
  1793. }
  1794. }
  1795. if (StringUtils.isNotNull(tWarehouseBills.getfFleet())) {
  1796. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfFleet());
  1797. if (StringUtils.isNotNull(corps)) {
  1798. map.put("fleetName", corps.getfName());
  1799. }
  1800. }
  1801. if (StringUtils.isNotNull(tWarehouseBills.getfGoodsid())) {
  1802. TGoods goods = tGoodsMapper.selectTGoodsById(tWarehouseBills.getfGoodsid());
  1803. if (StringUtils.isNotNull(goods)) {
  1804. map.put("goodsName", goods.getfName());
  1805. }
  1806. }
  1807. // 查询劳务公司
  1808. TCorps corps = new TCorps();
  1809. corps.setfTypeid("\"6\"");
  1810. corps.setfStatus("0");
  1811. map.put("corpsList", tCorpsMapper.selectTCorpsList(corps));
  1812. // 查询车队
  1813. TCorps fleetCorp = new TCorps();
  1814. corps.setfTypeid("\"2\"");
  1815. fleetCorp.setfStatus("0");
  1816. map.put("feelCorpList", tCorpsMapper.selectTCorpsList(fleetCorp));
  1817. // 查询商品品名
  1818. TGoods goods = new TGoods();
  1819. goods.setfStatus("0");
  1820. map.put("goodsList", tGoodsMapper.selectTGoodsList(goods));
  1821. // 查询库区
  1822. TWarehouse tWarehouse = new TWarehouse();
  1823. tWarehouse.setAncestors(tWarehouseBills.getfWarehouseid() + "");
  1824. List<TWarehouse> warehouses = tWarehouseMapper.selectTWarehouseList(tWarehouse);
  1825. if (StringUtils.isNotEmpty(warehouses)) {
  1826. map.put("warehouse", warehouseServiceImpl.buildDeptTreeSelect(warehouses));
  1827. }
  1828. map.put("attributes", sysDictDataMapper.selectDictDataByType("storage_type"));
  1829. // 查询箱型数据
  1830. map.put("cntrList", sysDictDataMapper.selectDictDataByType("data_cntrId"));
  1831. return AjaxResult.success(map);
  1832. }
  1833. /**
  1834. * app确认入库、出库、货转
  1835. *
  1836. * @param item 明细数据
  1837. * @param attachs 附件数据
  1838. * @return 结果
  1839. */
  1840. @Override
  1841. public AjaxResult warehouseOperationConfirmation(String item, String attachs) {
  1842. LoginUser loginUser = SecurityUtils.getLoginUser();
  1843. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  1844. if (StringUtils.isNull(tWarehousebillsitems.getfId()) || StringUtils.isNull(tWarehousebillsitems.getfPid())) {
  1845. return AjaxResult.error("未找到仓库明细id,或未找到上级id,请确认");
  1846. }
  1847. // 查询主表
  1848. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(tWarehousebillsitems.getfPid());
  1849. if (StringUtils.isNull(warehouseBills.getfBsdate())) {
  1850. return AjaxResult.error("库存明细请检查日期,操作终止");
  1851. }
  1852. if (StringUtils.isNull(warehouseBills.getfCorpid())) {
  1853. return AjaxResult.error("库存明细请检查客户信息,操作终止");
  1854. }
  1855. // 查询最新明细表
  1856. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1857. if (StringUtils.isNull(warehousebillsitems) || warehousebillsitems.getfBillstatus() != 30L) {
  1858. return AjaxResult.error("请确认是该明细数据是否存在,或该明细数据状态异常");
  1859. }
  1860. String billsType = warehousebillsitems.getfBilltype();
  1861. if ("SJRK".equals(billsType)) {
  1862. // 查询库容量 是否可入库
  1863. int m = calculation(warehouseBills.getfWarehouseid(), warehousebillsitems.getfGrossweight());
  1864. if (m == 0) {
  1865. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1866. return AjaxResult.error("更新库存总账失败-->入库毛重大于库容");
  1867. }
  1868. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, warehousebillsitems);
  1869. if (StringUtils.isNotNull(tWhgenle)) {
  1870. int i = updateTWhgenlegData(tWarehousebillsitems, tWhgenle.getfId(), billsType);
  1871. if (i <= 0) {
  1872. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1873. return AjaxResult.error("更新库存总账失败");
  1874. }
  1875. } else {
  1876. warehousebillsitems.setfQty(tWarehousebillsitems.getfQty());
  1877. warehousebillsitems.setfGrossweight(tWarehousebillsitems.getfGrossweight());
  1878. warehousebillsitems.setfNetweight(tWarehousebillsitems.getfNetweight());
  1879. if (instalTWhgenleg(warehouseBills, warehousebillsitems, loginUser.getUser()) <= 0) {
  1880. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1881. return AjaxResult.error("新增库存总账失败");
  1882. }
  1883. }
  1884. tWarehousebillsitems.setfIsInventory(0L);
  1885. tWarehousebillsitems.setfSerialNumber(warehousebillsitems.getfSerialNumber());
  1886. if (StringUtils.isNotNull(tWarehousebillsitems.getfId())) {
  1887. tWarehousebillsitems.setfBillstatus(40L);
  1888. tWarehousebillsitems.setUpdateTime(new Date());
  1889. tWarehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  1890. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1891. // 添加状态log
  1892. insertTWarehousebillsLog(tWarehousebillsitems, 40L, loginUser);
  1893. }
  1894. } else if ("SJCK".equals(billsType)) {
  1895. // 查询总账是否存在
  1896. TWhgenleg tWhgenle = queryTWhgenleg(warehouseBills, warehousebillsitems);
  1897. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  1898. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1899. return AjaxResult.error("库存明细库存为空");
  1900. }
  1901. // 库存 < 出库件数
  1902. if (tWhgenle.getfQtyblc() < tWarehousebillsitems.getfQty()) {
  1903. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  1904. return AjaxResult.error("库存明细库存不足");
  1905. }
  1906. tWarehousebillsitems.setfVolumn(warehousebillsitems.getfVolumn());
  1907. // 跟新库存总账
  1908. updateTWhgenlegData(tWarehousebillsitems, tWhgenle.getfId(), billsType);
  1909. tWarehousebillsitems.setfBillstatus(40L);
  1910. tWarehousebillsitems.setUpdateTime(new Date());
  1911. tWarehousebillsitems.setfPid(warehouseBills.getfId());
  1912. tWarehousebillsitems.setfBsdate(warehouseBills.getfBsdate());
  1913. tWarehousebillsitems.setfBillno(warehouseBills.getfBillno());
  1914. tWarehousebillsitems.setUpdateBy(loginUser.getUser().getUserName());
  1915. tWarehousebillsitems.setfSerialNumber(warehousebillsitems.getfSerialNumber());
  1916. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  1917. // 添加状态log
  1918. insertTWarehousebillsLog(tWarehousebillsitems, 40L, loginUser);
  1919. }
  1920. tEnclosureMapper.deleteByFPid(warehouseBills.getfId());
  1921. // 附件添加
  1922. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1923. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  1924. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  1925. for (TEnclosure enclosure : tEnclosureList) {
  1926. enclosure.setfStatus("6");
  1927. enclosure.setCreateTime(new Date());
  1928. enclosure.setfPid(warehouseBills.getfId());
  1929. enclosure.setCreateBy(loginUser.getUser().getUserName());
  1930. tEnclosureMapper.insertTEnclosure(enclosure);
  1931. }
  1932. }
  1933. return AjaxResult.success();
  1934. }
  1935. /**
  1936. * app查询入库数量
  1937. */
  1938. @Override
  1939. public List<Map<String, Object>> selectWarehouseBusinessInStockList(TWarehousebillsitems tWarehousebillsitems) {
  1940. List<Map<String, Object>> mapList = null;
  1941. if (tWarehousebillsitems.getfBilltype().equals("SJRK")) {
  1942. mapList = tWarehousebillsitemsMapper.selectWarehouseBusinesInList(tWarehousebillsitems);
  1943. } else {
  1944. mapList = tWarehousebillsitemsMapper.selectWarehouseBusinesOutList(tWarehousebillsitems);
  1945. }
  1946. if (StringUtils.isNotEmpty(mapList)) {
  1947. for (Map<String, Object> map : mapList) {
  1948. Long fId = Long.valueOf(String.valueOf(map.get("fPid")));
  1949. TEnclosure enclosure = new TEnclosure();
  1950. enclosure.setfPid(fId);
  1951. map.put("enclosure", tEnclosureMapper.selectWarehouseAccessoriesList(enclosure));
  1952. }
  1953. }
  1954. return mapList;
  1955. }
  1956. /**
  1957. * 叫车进场
  1958. * @param item 明细数据
  1959. * @param attachs 附件
  1960. * @return 结果
  1961. */
  1962. @Override
  1963. @Transactional
  1964. public AjaxResult addCreditItems(String item, String attachs) {
  1965. TWarehousebillsitems tWarehousebillsitems = JSONArray.parseObject(item, TWarehousebillsitems.class);
  1966. if (StringUtils.isNull(tWarehousebillsitems.getfId())) {
  1967. return AjaxResult.error("未找到仓库明细id,请确认");
  1968. }
  1969. TWarehousebillsitems warehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(tWarehousebillsitems.getfId());
  1970. if (StringUtils.isNull(warehousebillsitems)) {
  1971. return AjaxResult.error("未找到该条明细数据,请确认明细数据是否存在");
  1972. }
  1973. if (StringUtils.isNull(warehousebillsitems.getfBillstatus())) {
  1974. return AjaxResult.error("未找到仓库明细状态信息,请确认");
  1975. }
  1976. if (warehousebillsitems.getfBillstatus() != 20L) {
  1977. return AjaxResult.error("该仓库明细状态异常,请确认状态信息");
  1978. }
  1979. warehousebillsitems.setfBillstatus(30L);
  1980. warehousebillsitems.setUpdateTime(new Date());
  1981. warehousebillsitems.setUpdateBy(SecurityUtils.getUsername());
  1982. tWarehousebillsitemsMapper.updateTWarehousebillsitems(warehousebillsitems);
  1983. // 更新主表明细状态
  1984. TWarehouseBills warehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(warehousebillsitems.getfPid());
  1985. warehouseBills.setfItemsStatus(3L);
  1986. warehouseBills.setUpdateTime(new Date());
  1987. warehouseBills.setUpdateBy(SecurityUtils.getUsername());
  1988. tWarehouseBillsMapper.updateTWarehousebills(warehouseBills);
  1989. tEnclosureMapper.deleteByFPid(warehouseBills.getfId());
  1990. // 附件添加
  1991. if (StringUtils.isNotEmpty(attachs) && !"[]".equals(attachs)) {
  1992. JSONArray jsonDrArray = JSONArray.parseArray(attachs);
  1993. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  1994. for (TEnclosure enclosure : tEnclosureList) {
  1995. enclosure.setfStatus("6");
  1996. enclosure.setCreateTime(new Date());
  1997. enclosure.setfPid(warehouseBills.getfId());
  1998. enclosure.setCreateBy(SecurityUtils.getUsername());
  1999. tEnclosureMapper.insertTEnclosure(enclosure);
  2000. }
  2001. }
  2002. return AjaxResult.success();
  2003. }
  2004. @Override
  2005. public List<InStock> inStockExport(TWarehouseBills tWarehousebills) throws Exception {
  2006. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  2007. List<InStock> list1 = ListMapToBeanUtils.castMapToBean(list, InStock.class);
  2008. return list1;
  2009. }
  2010. @Override
  2011. public List<OutStock> outStockExport(TWarehouseBills tWarehousebills) throws Exception {
  2012. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  2013. List<OutStock> list1 = ListMapToBeanUtils.castMapToBean(list, OutStock.class);
  2014. return list1;
  2015. }
  2016. @Override
  2017. public List<StockTransfer> stockTransferExport(TWarehouseBills tWarehousebills) throws Exception {
  2018. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList(tWarehousebills);
  2019. List<StockTransfer> list1 = ListMapToBeanUtils.castMapToBean(list, StockTransfer.class);
  2020. return list1;
  2021. }
  2022. @Override
  2023. public List<GoodsTransfer> goodsTransferExport(TWarehouseBills tWarehousebills) throws Exception {
  2024. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  2025. List<GoodsTransfer> list1 = ListMapToBeanUtils.castMapToBean(list, GoodsTransfer.class);
  2026. return list1;
  2027. }
  2028. @Override
  2029. public List<StorageFee> storageFeeExport(TWarehouseBills tWarehousebills) throws Exception {
  2030. List<Map<String, Object>> list = tWarehouseBillsMapper.selectWarehouseBusinessList1(tWarehousebills);
  2031. List<StorageFee> list1 = ListMapToBeanUtils.castMapToBean(list, StorageFee.class);
  2032. return list1;
  2033. }
  2034. /**
  2035. * 根据仓库主表id 更新对应明细表状态
  2036. *
  2037. * @param fPid 仓库主表id
  2038. * @return 结果
  2039. */
  2040. @Transactional
  2041. public AjaxResult warehouseFollow(Long fPid, long fettle) {
  2042. if (StringUtils.isNull(fPid)) {
  2043. return AjaxResult.error("仓库更新状态未找到主表信息,请与管理员联系");
  2044. }
  2045. try {
  2046. tWarehouseBillsMapper.warehouseFollowUpdate(fPid, fettle, new Date());
  2047. tWarehousebillsfeesMapper.warehouseFeesFollowUpdate(fPid, fettle, new Date());
  2048. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fPid);
  2049. if ("SJRK".equals(tWarehouseBills.getfBilltype()) || "SJCK".equals(tWarehouseBills.getfBilltype())) {
  2050. fettle = 40L;
  2051. }
  2052. tWarehousebillsitemsMapper.warehouseItemFollowUpdate(fPid, fettle);
  2053. } catch (Exception e) {
  2054. return AjaxResult.error("更新库存费用状态失败,请联系管理员");
  2055. }
  2056. return AjaxResult.success();
  2057. }
  2058. /**
  2059. * 根据仓库主表id 更新对应明细表状态
  2060. *
  2061. * @param fPid 仓库主表id
  2062. * @return 结果
  2063. */
  2064. @Transactional
  2065. public AjaxResult storageFeeFollow(Long fPid, long fettle) {
  2066. if (StringUtils.isNull(fPid)) {
  2067. return AjaxResult.error("仓库更新状态未找到主表信息,请与管理员联系");
  2068. }
  2069. int warehouseUpdateResult = tWarehouseBillsMapper.warehouseFollowUpdate(fPid, fettle, new Date());
  2070. if (warehouseUpdateResult <= 0) {
  2071. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2072. return AjaxResult.error("更新库存明细状态失败,请联系管理员");
  2073. }
  2074. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  2075. warehousebillsfees.setfPid(fPid);
  2076. List<TWarehousebillsfees> warehousebillsfeesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  2077. for (TWarehousebillsfees wareItem : warehousebillsfeesList) {
  2078. if (StringUtils.isNull(wareItem.getSrcId())) {
  2079. continue;
  2080. }
  2081. if ("KCZZ".equals(wareItem.getfBilltype())) {
  2082. TWhgenleg tWhgenleg = tWhgenlegMapper.selectTWhgenlegById(wareItem.getSrcId());
  2083. tWhgenleg.setfChargedate(DateUtils.dateAdd(wareItem.getfBillingDeadline(), 1));
  2084. int i = tWhgenlegMapper.updateTWhgenleg(tWhgenleg);
  2085. if (i <= 0) {
  2086. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2087. return AjaxResult.error("更新库存费用状态失败,请联系管理员");
  2088. }
  2089. } else {
  2090. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(wareItem.getSrcId());
  2091. tWarehousebillsitems.setfChargedate(DateUtils.dateAdd(wareItem.getfBillingDeadline(), 1));
  2092. if ("SJCK".equals(wareItem.getfBilltype())) {
  2093. tWarehousebillsitems.setfStorageFeeDeadline(wareItem.getfBillingDeadline());
  2094. }
  2095. tWarehousebillsitemsMapper.updateTWarehousebillsitems(tWarehousebillsitems);
  2096. }
  2097. }
  2098. int feesUpdateResult = tWarehousebillsfeesMapper.warehouseFeesFollowUpdate(fPid, fettle, new Date());
  2099. if (feesUpdateResult <= 0) {
  2100. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2101. return AjaxResult.error("更新库存费用状态失败,请联系管理员");
  2102. }
  2103. return AjaxResult.success();
  2104. }
  2105. /**
  2106. * 入库详情入账
  2107. *
  2108. * @param warehouseBills 主表
  2109. * @param warehousebillsitems 明细
  2110. * @param loginUser 当前登录人
  2111. * @param billsType 状态
  2112. * @return 结果
  2113. */
  2114. @Override
  2115. @Transactional
  2116. public AjaxResult addCredit(String warehouseBills, String warehousebillsitems, String tEnclosure, String warehousebillsfeesCr,
  2117. String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  2118. Map<String, Object> map = new HashMap<>();
  2119. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  2120. return AjaxResult.error("未找到主表信息");
  2121. }
  2122. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  2123. return AjaxResult.error("未找到入账信息");
  2124. }
  2125. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  2126. tWarehouseBills.setfItemsStatus(4L);
  2127. tWarehouseBills.setfBilltype(billsType);
  2128. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  2129. tWarehouseBills.setUpdateTime(new Date());
  2130. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  2131. tEnclosureMapper.deleteByFPid(tWarehouseBills.getfId());
  2132. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  2133. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehouseBills.getfId());
  2134. boolean businessStatus = "场地直装".equals(tWarehouseBills.getfBusinessType());
  2135. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  2136. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  2137. int i = 1;
  2138. for (TWarehousebillsitems item : warehousebillsitemsList) {
  2139. // 查询是否可以修改
  2140. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(item.getfId());
  2141. if (tWarehousebillsitems.getfBillstatus() == 40) {
  2142. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2143. return AjaxResult.error("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  2144. }
  2145. if (!businessStatus) {
  2146. // 查询库容量 是否可入库
  2147. int m = calculation(tWarehouseBills.getfWarehouseid(), item.getfGrossweight());
  2148. if (m == 0) {
  2149. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2150. return AjaxResult.error("更新库存总账失败-->入库毛重大于库容");
  2151. }
  2152. item.setfOriginalbilldate(item.getfBsdate());
  2153. item.setfBillingway(tWarehouseBills.getfBillingway());
  2154. item.setfChargedate(item.getfBsdate());
  2155. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, item);
  2156. if (StringUtils.isNotNull(tWhgenle)) {
  2157. int i1 = updateTWhgenlegData(item, tWhgenle.getfId(), billsType);
  2158. if (i1 <= 0) {
  2159. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2160. return AjaxResult.error("更新库存总账失败");
  2161. }
  2162. } else {
  2163. if (instalTWhgenleg(tWarehouseBills, item, loginUser.getUser()) <= 0) {
  2164. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2165. return AjaxResult.error("新增库存总账失败");
  2166. }
  2167. }
  2168. item.setfIsInventory(0L);
  2169. } else {
  2170. item.setfIsInventory(1L);
  2171. }
  2172. int num = 0;
  2173. if (StringUtils.isNotNull(item.getfId())) {
  2174. item.setfBillstatus(40L);
  2175. item.setUpdateBy(loginUser.getUser().getUserName());
  2176. item.setUpdateTime(new Date());
  2177. if ("SJRK".equals(billsType)) {
  2178. item.setfMblno(tWarehouseBills.getfMblno());// 入库更新库存前执行update更新明细的提单号等于主表的提单号
  2179. }
  2180. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  2181. // 添加状态log
  2182. insertTWarehousebillsLog(item, 40L, loginUser);
  2183. }
  2184. if (num <= 0) {
  2185. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2186. return AjaxResult.error("新增库存明细失败");
  2187. }
  2188. i++;
  2189. }
  2190. // 箱型数据
  2191. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  2192. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  2193. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  2194. int line = 0;
  2195. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  2196. line++;
  2197. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  2198. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2199. return AjaxResult.error("箱型数据第"+line+"行数据缺少必填数据");
  2200. }
  2201. cntr.setfPid(tWarehouseBills.getfId());
  2202. cntr.setfGoodsid(0L);
  2203. cntr.setfPackageid("0");
  2204. cntr.setfCntrweight(0L);
  2205. cntr.setCreateBy(loginUser.getUser().getUserName());
  2206. cntr.setCreateTime(new Date());
  2207. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  2208. }
  2209. }
  2210. // 附件添加
  2211. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  2212. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  2213. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  2214. for (TEnclosure enclosure : tEnclosureList) {
  2215. enclosure.setfPid(tWarehouseBills.getfId());
  2216. enclosure.setCreateBy(loginUser.getUser().getUserName());
  2217. enclosure.setCreateTime(new Date());
  2218. tEnclosureMapper.insertTEnclosure(enclosure);
  2219. }
  2220. }
  2221. // 收款明细添加
  2222. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  2223. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  2224. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  2225. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2226. wbDr.setfPid(tWarehouseBills.getfId());
  2227. wbDr.setfDc("D");
  2228. wbDr.setCreateBy(loginUser.getUser().getUserName());
  2229. wbDr.setCreateTime(new Date());
  2230. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  2231. wbDr.setfBsdate(tWarehouseBills.getfBsdate());
  2232. }
  2233. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2234. }
  2235. }
  2236. // 付款明细添加
  2237. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  2238. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  2239. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2240. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2241. wbCr.setfPid(tWarehouseBills.getfId());
  2242. wbCr.setfDc("C");
  2243. wbCr.setCreateBy(loginUser.getUser().getUserName());
  2244. wbCr.setCreateTime(new Date());
  2245. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  2246. wbCr.setfBsdate(tWarehouseBills.getfBsdate());
  2247. }
  2248. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2249. }
  2250. }
  2251. map.put("warehousebillsitems", warehousebillsitemsList);
  2252. return AjaxResult.success("成功", map);
  2253. }
  2254. /**
  2255. * 出库、调拨、货转 确认
  2256. *
  2257. * @param warehouseBills
  2258. * @param warehousebillsitems
  2259. * @param loginUser
  2260. * @param billsType
  2261. * @return
  2262. */
  2263. @Override
  2264. @Transactional
  2265. public AjaxResult updateCredit(String warehouseBills, String warehousebillsitems, String tEnclosure, String warehousebillsfeesCr,
  2266. String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  2267. Long fPid = null;
  2268. Map<String, Object> map = new HashMap<>();
  2269. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  2270. tWarehouseBills.setfItemsStatus(4L);
  2271. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  2272. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  2273. tWarehouseBills.setUpdateTime(new Date());
  2274. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  2275. fPid = tWarehouseBills.getfId();
  2276. } else {
  2277. tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  2278. tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  2279. tWarehouseBills.setCreateTime(new Date());
  2280. String billNo = billnoSerialServiceImpl.getBillNo(billsType, tWarehouseBills.getfBsdate());
  2281. tWarehouseBills.setfBillno(billNo);
  2282. tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
  2283. fPid = tWarehouseBills.getfId();
  2284. }
  2285. tEnclosureMapper.deleteByFPid(fPid);
  2286. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  2287. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(fPid);
  2288. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  2289. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  2290. int i = 1;
  2291. List<TFees> feesList = new ArrayList<>();
  2292. List<TWarehousebillsfees> warehousebillsfees = new ArrayList<>();
  2293. for (TWarehousebillsitems wbItem : warehousebillsitemsList) {
  2294. // 查询是否可以修改
  2295. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(wbItem.getfId());
  2296. if (tWarehousebillsitems.getfBillstatus() == 40) {
  2297. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2298. return AjaxResult.error("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  2299. }
  2300. long warehouselocId = 0L;
  2301. long transferWarehouselocid = 0L;
  2302. if ("CKDB".equals(billsType) | "HWTG".equals(billsType)) {
  2303. warehouselocId = wbItem.getfWarehouselocid();
  2304. transferWarehouselocid = wbItem.getfTransferWarehouselocid();
  2305. // wbItem.setfWarehouselocid(transferWarehouselocid);
  2306. }
  2307. // 查询总账是否存在
  2308. TWhgenleg tWhgenle = queryTWhgenleg(tWarehouseBills, wbItem);
  2309. // 入库数特殊不判断入账
  2310. if ("SJCK".equals(billsType)) { // 出库 查询
  2311. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  2312. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2313. return AjaxResult.error("库存明细第" + i + "行库存为空");
  2314. } else { // 非空修改库存总账
  2315. // 库存 < 出库件数
  2316. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) {
  2317. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2318. return AjaxResult.error("库存明细第" + i + "行库存不足");
  2319. }
  2320. // 更新库存总账
  2321. updateTWhgenlegData(wbItem, tWhgenle.getfId(), billsType);
  2322. if (StringUtils.isNull(tWarehouseBills.getfBsdate()) || StringUtils.isNull(wbItem.getfChargedate())) {
  2323. return AjaxResult.error("库存明细第" + i + "行请检查日期,操作终止");
  2324. }
  2325. long dateDay = DateUtils.getDateDay(tWarehouseBills.getfBsdate(), wbItem.getfChargedate());
  2326. if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
  2327. return AjaxResult.error("库存明细第" + i + "行请检查客户信息,操作终止");
  2328. }
  2329. /*long fCorpid = tWarehouseBills.getfCorpid();
  2330. TGoods tGoods = tGoodsMapper.selectTGoodsById(wbItem.getfGoodsid());
  2331. long fGoodsid = tGoods.getfTypeid();
  2332. long fBillingway = wbItem.getfBillingway();
  2333. long fQty = wbItem.getfQty();
  2334. // 计算仓储费明细
  2335. Map<String, Object> objectMap = tWarehouseAgreementService.getCarryingCost(fCorpid, fGoodsid, dateDay, fBillingway, fQty , 0L);
  2336. if (StringUtils.isNull(objectMap)) {
  2337. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2338. return AjaxResult.error("库存明细第" + i + "行没有维护出库明细的仓储协议,操作终止");
  2339. }
  2340. Long feeId = (Long) objectMap.get("feeId");
  2341. BigDecimal amt = (BigDecimal) objectMap.get("amt");
  2342. TFees tFees = tFeesMapper.selectTFeesById(feeId);
  2343. if (StringUtils.isNotNull(tFees)) {
  2344. feesList.add(tFees);
  2345. }
  2346. TWarehousebillsfees fees = new TWarehousebillsfees();
  2347. fees.setfPid(fPid);
  2348. fees.setfFeeid(feeId);
  2349. fees.setfCorpid(tWarehouseBills.getfCorpid());
  2350. fees.setfFeeUnitid(fBillingway);
  2351. fees.setfQty(new BigDecimal(1));
  2352. fees.setfUnitprice(amt);
  2353. fees.setfAmount(amt);
  2354. fees.setfExrate(new BigDecimal(1));
  2355. fees.setfCurrency("RMB");
  2356. fees.setRemark(dateDay + "天" + tFees.getfName());
  2357. warehousebillsfees.add(fees);*/
  2358. }
  2359. wbItem.setfBillstatus(40L);
  2360. } else if ("CKDB".equals(billsType) || "HWTG".equals(billsType)) { // 调拨查询
  2361. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  2362. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2363. return AjaxResult.error("库存明细第" + i + "行库存为空");
  2364. } else { // 非空修改库存总账
  2365. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  2366. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2367. return AjaxResult.error("库存明细第" + i + "行库存不足");
  2368. } else { // 2、 库存足够 先 进行出库操作
  2369. wbItem.setfWarehouselocid(warehouselocId);
  2370. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  2371. }
  2372. if ("HWTG".equals(billsType)) {
  2373. tWarehouseBills.setfTrademodeid(tWarehouseBills.getfNewTrademodeid());
  2374. }
  2375. // 3、 进行入库操作 查询是否存在库存
  2376. wbItem.setfWarehouselocid(transferWarehouselocid); // 新库区
  2377. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  2378. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  2379. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  2380. } else { // 4、 存在 进行跟新库存
  2381. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  2382. }
  2383. }
  2384. wbItem.setfWarehouselocid(warehouselocId);
  2385. wbItem.setfBillstatus(40L);
  2386. } else if ("HQZY".equals(billsType)) { // 货转
  2387. wbItem.setfBillstatus(6L);
  2388. wbItem.setfChargedate(tWarehouseBills.getfChargedate());
  2389. wbItem.setfBillingway(tWarehouseBills.getfBillingway());
  2390. if (StringUtils.isNull(tWhgenle)) { // 为空 提示没有库存
  2391. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2392. return AjaxResult.error("库存明细第" + i + "行库存为空");
  2393. } else { // 非空修改库存总账
  2394. if (tWhgenle.getfQtyblc() < wbItem.getfQty()) { // 1、 库存 < 调拨件数 提示库存不足
  2395. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2396. return AjaxResult.error("库存明细第" + i + "行库存不足");
  2397. } else { // 2、 库存足够 先 进行出库操作
  2398. updateTWhgenlegData(wbItem, tWhgenle.getfId(), "SJCK");
  2399. }
  2400. long corpId = tWarehouseBills.getfCorpid();
  2401. tWarehouseBills.setfCorpid(tWarehouseBills.getfTocorpid());
  2402. // 3、 进行入库操作 查询是否存在库存
  2403. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehouseBills, wbItem);
  2404. if (StringUtils.isNull(tWhgenle1)) { // 5、 不存在 进行新增库存
  2405. instalTWhgenleg(tWarehouseBills, wbItem, loginUser.getUser());
  2406. } else { // 4、 存在 进行跟新库存
  2407. updateTWhgenlegData(wbItem, tWhgenle1.getfId(), "SJRK");
  2408. }
  2409. tWarehouseBills.setfCorpid(corpId);
  2410. }
  2411. }
  2412. i++;
  2413. int num = 0;
  2414. wbItem.setfPid(fPid);
  2415. wbItem.setfBilltype(billsType);
  2416. wbItem.setfBillno(tWarehouseBills.getfBillno());
  2417. wbItem.setfBsdate(tWarehouseBills.getfBsdate());
  2418. if (StringUtils.isNotNull(wbItem.getfId())) {
  2419. wbItem.setUpdateBy(loginUser.getUser().getUserName());
  2420. wbItem.setUpdateTime(new Date());
  2421. num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(wbItem);
  2422. if ("SJCK".equals(billsType)) {
  2423. // 添加状态log
  2424. insertTWarehousebillsLog(wbItem, 40L, loginUser);
  2425. }
  2426. } else {
  2427. wbItem.setCreateTime(new Date());
  2428. wbItem.setCreateBy(loginUser.getUsername());
  2429. num = tWarehousebillsitemsMapper.insertTWarehousebillsitems(wbItem);
  2430. }
  2431. if (num <= 0) {
  2432. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2433. return AjaxResult.error("库存明细更新失败");
  2434. }
  2435. }
  2436. // 箱型数据
  2437. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  2438. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  2439. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  2440. int line = 0;
  2441. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  2442. line++;
  2443. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  2444. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2445. return AjaxResult.error("箱型数据第"+line+"行数据缺少必填数据");
  2446. }
  2447. cntr.setfPid(tWarehouseBills.getfId());
  2448. cntr.setfGoodsid(0L);
  2449. cntr.setfPackageid("0");
  2450. cntr.setfCntrweight(0L);
  2451. cntr.setCreateBy(loginUser.getUser().getUserName());
  2452. cntr.setCreateTime(new Date());
  2453. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  2454. }
  2455. }
  2456. // 附件添加
  2457. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  2458. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  2459. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  2460. for (TEnclosure enclosure : tEnclosureList) {
  2461. enclosure.setfPid(tWarehouseBills.getfId());
  2462. enclosure.setCreateBy(loginUser.getUser().getUserName());
  2463. enclosure.setCreateTime(new Date());
  2464. tEnclosureMapper.insertTEnclosure(enclosure);
  2465. }
  2466. }
  2467. // 收款明细添加
  2468. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  2469. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  2470. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  2471. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2472. wbDr.setfPid(tWarehouseBills.getfId());
  2473. wbDr.setfDc("D");
  2474. wbDr.setCreateBy(loginUser.getUser().getUserName());
  2475. wbDr.setCreateTime(new Date());
  2476. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2477. }
  2478. }
  2479. // 付款明细添加
  2480. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  2481. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  2482. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2483. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2484. wbCr.setfPid(tWarehouseBills.getfId());
  2485. wbCr.setfDc("C");
  2486. wbCr.setCreateBy(loginUser.getUser().getUserName());
  2487. wbCr.setCreateTime(new Date());
  2488. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2489. }
  2490. }
  2491. map.put("fPid", fPid);
  2492. map.put("warehouse", tWarehouseBills);
  2493. map.put("warehouseItem", warehousebillsitemsList);
  2494. map.put("fees", feesList);
  2495. map.put("warehousebillsfees", warehousebillsfees);
  2496. // 添加成功 主键返回 前台
  2497. return AjaxResult.success("成功", map);
  2498. }
  2499. /**
  2500. * 打印作业单
  2501. *
  2502. * @param warehouseBills
  2503. * @param warehousebillsitems
  2504. * @param tEnclosure
  2505. * @param tWarehousebillsfeesCr
  2506. * @param tWarehousebillsfeesDr
  2507. * @param loginUser
  2508. * @param status
  2509. * @param billtystatus
  2510. * @return
  2511. */
  2512. @Override
  2513. @Transactional
  2514. public AjaxResult waitWarehousing(String warehouseBills, String warehousebillsitems,
  2515. String tEnclosure, String tWarehousebillsfeesCr, String tWarehousebillsfeesDr,
  2516. LoginUser loginUser, String tCntr, Long status, String billtystatus) {
  2517. Map<String, Object> map = new HashMap<>();
  2518. List<TWarehousebillsitems> mapList = new ArrayList<>();
  2519. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  2520. return AjaxResult.error("未找到主表信息");
  2521. }
  2522. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  2523. return AjaxResult.error("未找到入账信息");
  2524. }
  2525. TWarehouseBills tWarehouseBills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  2526. if (status == 20) {
  2527. tWarehouseBills.setfItemsStatus(2L);
  2528. } else if (status == 30) {
  2529. tWarehouseBills.setfItemsStatus(3L);
  2530. }
  2531. if (StringUtils.isNotNull(tWarehouseBills.getfId())) {
  2532. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  2533. tWarehouseBills.setUpdateTime(new Date());
  2534. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  2535. }
  2536. tEnclosureMapper.deleteByFPid(tWarehouseBills.getfId());
  2537. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  2538. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehouseBills.getfId());
  2539. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  2540. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  2541. /**
  2542. * 1、 查询回收表是否有可用数据
  2543. * 2、 流水号生成 --> 打印一次 只记录一个号
  2544. */
  2545. Date time = new Date();
  2546. String serialNumber = null;
  2547. if (status == 20) {
  2548. if ("RK".equals(billtystatus)) {
  2549. serialNumber = billnoSerialServiceImpl.getSerialNumber("RK", time);
  2550. } else if ("CK".equals(billtystatus)) { //生成 出库 流水号
  2551. serialNumber = billnoSerialServiceImpl.getSerialNumber("CK", time);
  2552. } else if ("DB".equals(billtystatus)) { //生成 出库 流水号
  2553. serialNumber = billnoSerialServiceImpl.getSerialNumber("DB", time);
  2554. } else if ("TG".equals(billtystatus)) { //生成 出库 流水号
  2555. serialNumber = billnoSerialServiceImpl.getSerialNumber("TG", time);
  2556. }
  2557. }
  2558. int i = 1;
  2559. for (TWarehousebillsitems item : warehousebillsitemsList) {
  2560. // 查询是否可以修改
  2561. TWarehousebillsitems tWarehousebillsitems = tWarehousebillsitemsMapper.selectTWarehousebillsitemsById(item.getfId());
  2562. if (tWarehousebillsitems.getfBillstatus() == 30) {
  2563. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2564. return AjaxResult.error("更新库存明细第" + i + "行失败,已处理,请刷新网页");
  2565. }
  2566. if (item.getfBillstatus() < 30L) {
  2567. if (item.getfSerialNumber() == null || item.getfSerialNumber().equals("")) {
  2568. item.setfSerialNumber(serialNumber);
  2569. }
  2570. item.setfBillstatus(status);
  2571. item.setUpdateTime(new Date());
  2572. item.setUpdateBy(loginUser.getUser().getUserName());
  2573. int num = tWarehousebillsitemsMapper.updateTWarehousebillsitems(item);
  2574. // 添加状态log
  2575. insertTWarehousebillsLog(item, status, loginUser);
  2576. if (num <= 0) {
  2577. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2578. return AjaxResult.error("更新库存明细失败");
  2579. }
  2580. }
  2581. mapList.add(item);
  2582. i++;
  2583. }
  2584. // 箱型数据
  2585. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  2586. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  2587. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  2588. int line = 0;
  2589. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  2590. line++;
  2591. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  2592. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2593. return AjaxResult.error("箱型数据第"+line+"行数据缺少必填数据");
  2594. }
  2595. cntr.setfPid(tWarehouseBills.getfId());
  2596. cntr.setfGoodsid(0L);
  2597. cntr.setfPackageid("0");
  2598. cntr.setfCntrweight(0L);
  2599. cntr.setCreateBy(loginUser.getUser().getUserName());
  2600. cntr.setCreateTime(new Date());
  2601. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  2602. }
  2603. }
  2604. // 附件添加
  2605. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  2606. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  2607. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  2608. for (TEnclosure enclosure : tEnclosureList) {
  2609. enclosure.setfPid(tWarehouseBills.getfId());
  2610. enclosure.setCreateBy(loginUser.getUser().getUserName());
  2611. enclosure.setCreateTime(new Date());
  2612. tEnclosureMapper.insertTEnclosure(enclosure);
  2613. }
  2614. }
  2615. // 收款明细添加
  2616. if (StringUtils.isNotEmpty(tWarehousebillsfeesDr) && !"[]".equals(tWarehousebillsfeesDr)) {
  2617. JSONArray jsonDrArray = JSONArray.parseArray(tWarehousebillsfeesDr);
  2618. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  2619. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  2620. wbDr.setfPid(tWarehouseBills.getfId());
  2621. wbDr.setfDc("D");
  2622. wbDr.setCreateBy(loginUser.getUser().getUserName());
  2623. wbDr.setCreateTime(new Date());
  2624. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  2625. wbDr.setfBsdate(tWarehouseBills.getfBsdate());
  2626. }
  2627. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  2628. }
  2629. }
  2630. // 付款明细添加
  2631. if (StringUtils.isNotNull(tWarehousebillsfeesCr) && !"[]".equals(tWarehousebillsfeesCr)) {
  2632. JSONArray jsonCrArray = JSONArray.parseArray(tWarehousebillsfeesCr);
  2633. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  2634. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  2635. wbCr.setfPid(tWarehouseBills.getfId());
  2636. wbCr.setfDc("C");
  2637. wbCr.setCreateBy(loginUser.getUser().getUserName());
  2638. wbCr.setCreateTime(new Date());
  2639. if (tWarehouseBills.getfBsdate() != null && !tWarehouseBills.getfBsdate().equals("")) {
  2640. wbCr.setfBsdate(tWarehouseBills.getfBsdate());
  2641. }
  2642. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  2643. }
  2644. }
  2645. // 添加成功 返回 前台
  2646. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  2647. tWarehousebillsitems.setfPid(tWarehouseBills.getfId());
  2648. List<TWarehousebillsitems> mapList1 = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitems);
  2649. map.put("warehousebillsitems", mapList);
  2650. map.put("warehousebillsitems1", mapList1);
  2651. return AjaxResult.success("成功", map);
  2652. }
  2653. /**
  2654. * 生成计算仓储费信息
  2655. *
  2656. * @param warehouseBills
  2657. * @param mapItem
  2658. * @param loginUser
  2659. * @return
  2660. */
  2661. public Map<String, Object> getWarehouseItems(TWarehouseBills warehouseBills, List<Map<String, Object>> mapItem, LoginUser loginUser) {
  2662. Map<String, Object> map = new HashMap<>();
  2663. long feeId = 0L;
  2664. BigDecimal sumAmt = new BigDecimal(0);
  2665. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  2666. List<SysDictData> taxRate = sysDictDataMapper.selectDictDataByType("tax_rate");
  2667. for (Map<String, Object> item : mapItem) {
  2668. if (StringUtils.isNull(item.get("fBillingway"))) {
  2669. map.put("error", "单号:" + item.get("fBillno") + ",业务日期:" + item.get("fBsdate") + "未找到库存总账的计费单位,请确认");
  2670. return map;
  2671. }
  2672. Date fBsdate = (Date) item.get("fBsdate");
  2673. long fCorpid = warehouseBills.getfCorpid();
  2674. String fBilltype = (String) item.get("fBilltype");
  2675. long fGoodsid = Long.parseLong((String) item.get("fTypeid"));
  2676. long fId = Long.valueOf(String.valueOf(item.get("fId"))).longValue();
  2677. // 累计计费天数
  2678. long accumulatedDays = DateUtils.getDateDay((Date) item.get("fChargedate"), (Date) item.get("fOriginalbilldate"));
  2679. // 库存天数
  2680. long fInventoryDays = 0L;
  2681. // 要计费天数
  2682. long fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fOriginalbilldate"));
  2683. if ("SJCK".equals(fBilltype)) {
  2684. fInventoryDays = DateUtils.getDateDay(fBsdate, (Date) item.get("fOriginalbilldate"));
  2685. fBillingDays = fInventoryDays;
  2686. } else if ("HQZY".equals(fBilltype)) {
  2687. fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), fBsdate);
  2688. } else {
  2689. fBillingDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fChargedate"));
  2690. fInventoryDays = DateUtils.getDateDay(warehouseBills.getfBillingDeadline(), (Date) item.get("fOriginalbilldate"));
  2691. }
  2692. /*if ("KCZZ".equals(fBilltype)) {
  2693. } else {
  2694. fInventoryDays = Long.valueOf(String.valueOf(item.get("fBillingDays")));
  2695. }*/
  2696. Long dictLabel = Long.valueOf(String.valueOf(item.get("fBillingway")));
  2697. BigDecimal fQty = acquiredQuantity(item, dictLabel);
  2698. if (fQty.equals(BigDecimal.ZERO)) {
  2699. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2700. return AjaxResult.error("单号:" + item.get("fBillno") + ",业务日期:" + item.get("fBsdate") + "未找到计费单位,请确认");
  2701. }
  2702. // 计算仓储费明细
  2703. Map<String, Object> objectMap = tWarehouseAgreementService.getCarryingCost(fCorpid, fGoodsid, fBillingDays, dictLabel, fQty, accumulatedDays);
  2704. if (StringUtils.isNull(objectMap)) {
  2705. map.put("error", "单号:" + item.get("fBillno") + ",业务日期:" + item.get("fBsdate") + "未找到仓储费协议,请确认");
  2706. return map;
  2707. }
  2708. String mblno = "";
  2709. if (StringUtils.isNotNull(item.get("fMblno"))) {
  2710. mblno = item.get("fMblno").toString();
  2711. }
  2712. String remark = objectMap.get("remark").toString();
  2713. feeId = Long.valueOf(String.valueOf(objectMap.get("feeId"))).longValue();
  2714. BigDecimal amt = (BigDecimal) objectMap.get("amt");
  2715. map.put("feeId", feeId);
  2716. map.put("itemFeeId", objectMap.get("feeId"));
  2717. sumAmt = sumAmt.add(amt).setScale(2, BigDecimal.ROUND_HALF_UP);
  2718. TWarehousebillsfees fees = new TWarehousebillsfees();
  2719. fees.setfFeeid(feeId);
  2720. fees.setfDc("D");
  2721. fees.setfAmt(amt);
  2722. fees.setSrcId(fId);
  2723. fees.setfMblno(mblno);
  2724. fees.setRemark(remark);
  2725. fees.setfFeeunitid(2L);
  2726. fees.setfAmount(sumAmt);
  2727. fees.setfBillstatus(2L);
  2728. fees.setfCurrency("RMB");
  2729. fees.setfBsdate(fBsdate);
  2730. fees.setfBillingQty(fQty);
  2731. fees.setfUnitprice(sumAmt);
  2732. fees.setfBilltype(fBilltype);
  2733. fees.setfBillingDays(fBillingDays);
  2734. fees.setCreateTime(new Date());
  2735. fees.setfQty(new BigDecimal(1));
  2736. fees.setfPid(warehouseBills.getfId());
  2737. fees.setfInventoryDays(fInventoryDays);
  2738. fees.setfExrate(new BigDecimal(1));
  2739. fees.setfCorpid(warehouseBills.getfCorpid());
  2740. fees.setfMarks(item.get("fMarks").toString());
  2741. fees.setSrcBillNo((String) item.get("fBillno"));
  2742. fees.setfChargedate((Date) item.get("fChargedate"));
  2743. fees.setCreateBy(loginUser.getUser().getUserName());
  2744. fees.setfProductName(item.get("fGoodsids").toString());
  2745. if ("SJCK".equals(fBilltype)) {
  2746. fees.setfBillingDeadline(fBsdate);
  2747. } else {
  2748. fees.setfBillingDeadline(warehouseBills.getfBillingDeadline());
  2749. }
  2750. fees.setfTaxrate(new BigDecimal(taxRate.get(0).getDictValue()));
  2751. fees.setfOriginalbilldate((Date) item.get("fOriginalbilldate"));
  2752. fees.setfBillingway(Long.valueOf(String.valueOf(item.get("fBillingway"))).longValue());
  2753. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
  2754. itemsList.add(fees);
  2755. }
  2756. map.put("sumAmt", sumAmt);
  2757. map.put("itemsList", itemsList);
  2758. return map;
  2759. }
  2760. /**
  2761. * 新增库存费计算
  2762. *
  2763. * @param tWarehouseBills 主表的查询条件
  2764. * @param loginUser 登录用户
  2765. * @param billsType 状态
  2766. * @return 结果
  2767. */
  2768. @Override
  2769. @Transactional
  2770. public AjaxResult calculateStorageFees(TWarehouseBills tWarehouseBills, LoginUser loginUser, String billsType) {
  2771. if (StringUtils.isNull(tWarehouseBills.getfCorpid())) {
  2772. return AjaxResult.error("请选择客户信息");
  2773. }
  2774. long fPid = 0L;
  2775. if (StringUtils.isNull(tWarehouseBills.getfId())) {
  2776. // 生成流水号
  2777. Date time = new Date();
  2778. String billNo = billnoSerialServiceImpl.getSerialNumber("JSCCF", time);
  2779. tWarehouseBills.setfBillno(billNo);
  2780. if (StringUtils.isNull(tWarehouseBills.getfBillstatus())) {
  2781. tWarehouseBills.setfBillstatus(2L);
  2782. }
  2783. tWarehouseBills.setfBilltype(billsType);
  2784. tWarehouseBills.setfBsdeptid(loginUser.getUser().getDeptId());
  2785. tWarehouseBills.setCreateBy(loginUser.getUser().getUserName());
  2786. tWarehouseBills.setCreateTime(new Date());
  2787. tWarehouseBillsMapper.insertTWarehousebills(tWarehouseBills);
  2788. fPid = tWarehouseBills.getfId();
  2789. } else {
  2790. tWarehousebillsfeesMapper.deleteByFPid(tWarehouseBills.getfId());
  2791. tWarehousebillsitemsMapper.deleteByFPid(tWarehouseBills.getfId());
  2792. tWarehouseBills.setUpdateBy(loginUser.getUser().getUserName());
  2793. tWarehouseBills.setUpdateTime(new Date());
  2794. tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  2795. fPid = tWarehouseBills.getfId();
  2796. }
  2797. // 计划物资明细
  2798. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  2799. BigDecimal bigDecimal = new BigDecimal(0);
  2800. Map<String, Object> map = new HashMap<>();
  2801. // 库存总账id
  2802. long whgenlegFeeId = 0;
  2803. // 计费单位
  2804. long feeUnitid = 1;
  2805. // 查询 出库 货转的库存明细
  2806. List<Map<String, Object>> warehousebillsitemsList = tWarehousebillsitemsMapper.selectStorageFeeItemList(tWarehouseBills);
  2807. if (warehousebillsitemsList.size() != 0) {
  2808. Map<String, Object> mapItem = getWarehouseItems(tWarehouseBills, warehousebillsitemsList, loginUser);
  2809. if (mapItem.containsKey("error")) {
  2810. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2811. return AjaxResult.error((String) mapItem.get("error"));
  2812. }
  2813. itemsList = (List<TWarehousebillsfees>) mapItem.get("itemsList");
  2814. }
  2815. List<Map<String, Object>> tWhgenlegs = tWhgenlegMapper.selectStorageFeeItemList(tWarehouseBills);
  2816. if (tWhgenlegs.size() != 0) {
  2817. Map<String, Object> mapItem = getWarehouseItems(tWarehouseBills, tWhgenlegs, loginUser);
  2818. if (mapItem.containsKey("error")) {
  2819. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2820. return AjaxResult.error((String) mapItem.get("error"));
  2821. }
  2822. List<TWarehousebillsfees> itemList = (List<TWarehousebillsfees>) mapItem.get("itemsList");
  2823. if (itemList.size() != 0) {
  2824. for (TWarehousebillsfees ite : itemList) {
  2825. itemsList.add(ite);
  2826. }
  2827. }
  2828. }
  2829. TFees tFees = new TFees();
  2830. tFees.setfStatus("2");
  2831. tFees.setDelFlag("0");
  2832. List<TFees> feesList = tFeesMapper.selectTFeesList(tFees);
  2833. if (itemsList.size() <= 0) {
  2834. return AjaxResult.error("未找到合适的库存明细");
  2835. }
  2836. map.put("feesList", feesList);
  2837. map.put("warehouseBills", tWarehouseBills);
  2838. map.put("warehouseItemList", itemsList);
  2839. return AjaxResult.success(map);
  2840. }
  2841. /**
  2842. * 仓储费计算提交以及暂存
  2843. *
  2844. * @param warehouseBills
  2845. * @param warehouseItems
  2846. * @param warehouseFees
  2847. * @param loginUser
  2848. * @param billsType
  2849. * @return
  2850. */
  2851. @Override
  2852. @Transactional
  2853. public AjaxResult insertStorageFee(String warehouseBills, String warehouseItems, String warehouseFees, LoginUser loginUser, String billsType) {
  2854. TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  2855. long fPid = 0L;
  2856. boolean billstatus = tWarehousebills.getfBillstatus().equals(4L);
  2857. if (billstatus && (StringUtils.isNull(warehouseItems) || "[]".equals(warehouseItems))) {
  2858. return AjaxResult.error("未找到计费物资明细无法提交");
  2859. }
  2860. /*if (billstatus && (StringUtils.isNull(warehouseFees) || "[]".equals(warehouseFees))) {
  2861. return AjaxResult.error("未找到应收款明细无法提交");
  2862. }*/
  2863. if (StringUtils.isNotNull(tWarehousebills.getfId())) {
  2864. fPid = tWarehousebills.getfId();
  2865. tWarehousebills.setUpdateTime(new Date());
  2866. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  2867. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  2868. tWarehousebillsfeesMapper.deleteByFPid(fPid);
  2869. tWarehousebillsitemsMapper.deleteByFPid(fPid);
  2870. } else {
  2871. // 生成流水号
  2872. Date time = new Date();
  2873. String billNo = billnoSerialServiceImpl.getSerialNumber("JSCCF", time);
  2874. tWarehousebills.setfBillno(billNo);
  2875. tWarehousebills.setfDeptid(loginUser.getUser().getDeptId());
  2876. tWarehousebills.setfBsdeptid(loginUser.getUser().getDeptId());
  2877. tWarehousebills.setCreateBy(loginUser.getUser().getUserName());
  2878. tWarehousebills.setCreateTime(new Date());
  2879. tWarehousebills.setfBilltype(billsType);
  2880. tWarehouseBillsMapper.insertTWarehousebills(tWarehousebills);
  2881. fPid = tWarehousebills.getfId();
  2882. }
  2883. JSONArray warehouseJSON = JSONArray.parseArray(warehouseItems);
  2884. List<TWarehousebillsfees> itemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsfees.class);
  2885. for (TWarehousebillsfees item : itemsList) {
  2886. item.setfId(null);
  2887. item.setSrcBillNo(tWarehousebills.getfBillno());
  2888. item.setfPid(fPid);
  2889. item.setfBillstatus(tWarehousebills.getfBillstatus());
  2890. tWarehousebillsfeesMapper.insertTWarehousebillsfees(item);
  2891. }
  2892. if (StringUtils.isNotNull(warehouseFees) && !"[]".equals(warehouseFees)) {
  2893. JSONArray feesJSON = JSONArray.parseArray(warehouseFees);
  2894. List<TWarehousebillsfees> warehousebillsfeesList = JSONObject.parseArray(feesJSON.toJSONString(), TWarehousebillsfees.class);
  2895. for (TWarehousebillsfees fees : warehousebillsfeesList) {
  2896. fees.setfId(null);
  2897. fees.setfPid(fPid);
  2898. fees.setfDc("D");
  2899. fees.setfBilltype("JSCCF");
  2900. fees.setSrcBillNo(tWarehousebills.getfBillno());
  2901. fees.setfBillstatus(tWarehousebills.getfBillstatus());
  2902. tWarehousebillsfeesMapper.insertTWarehousebillsfees(fees);
  2903. }
  2904. }
  2905. if (billstatus) {
  2906. String key = "warehouse.storageFeeCalculation.ApprovalFlow";
  2907. SysConfig sysConfig = sysConfigMapper.checkConfigKeyUnique(key);
  2908. if (StringUtils.isNull(sysConfig)) {
  2909. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2910. return AjaxResult.error("系统参数异常,未找到开启审批流参数");
  2911. }
  2912. if ("0".equals(sysConfig.getConfigValue())) {
  2913. AuditItems auditItems = new AuditItems();
  2914. auditItems.setLevelId(0L);
  2915. auditItems.setBillId(fPid);
  2916. auditItems.setActId(150L);
  2917. auditItems.setIffinalItem("F");
  2918. auditItems.setBillNo(tWarehousebills.getfBillno());
  2919. // 存储委托方(货权方)
  2920. auditItems.setRefno1(tWarehousebills.getfCorpid() + "");
  2921. // 存储业务类型(业务类型)
  2922. auditItems.setRefno2(tWarehousebills.getfBilltype());
  2923. // 存储提单号(提单号)
  2924. auditItems.setRefno3(tWarehousebills.getfMblno());
  2925. auditItems.setSendUserId(loginUser.getUser().getUserId());
  2926. auditItems.setSendName(loginUser.getUsername());
  2927. auditItems.setSendTime(new Date());
  2928. auditItems.setAuditUserId(loginUser.getUser().getUserId());
  2929. auditItems.setAuditItem(new Date());
  2930. auditItems.setAuditOpTime(new Date());
  2931. auditItems.setAuditMsg("提交");
  2932. auditItems.setAuditStatus("O");
  2933. AjaxResult approvalFlow = auditItemsService.createApprovalFlow(auditItems);
  2934. String code = approvalFlow.get("code").toString();
  2935. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  2936. if ("500".equals(code)) {
  2937. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2938. }
  2939. return approvalFlow;
  2940. } else {
  2941. AjaxResult ajaxResult = storageFeeFollow(fPid, 6L);
  2942. String code = ajaxResult.get("code").toString();
  2943. // Long code = Long.valueOf(String.valueOf(ajaxResult.get("code"))).longValue();
  2944. if ("500".equals(code)) {
  2945. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  2946. }
  2947. return ajaxResult;
  2948. }
  2949. }
  2950. return AjaxResult.success(tWarehousebills);
  2951. }
  2952. /**
  2953. * 根据id查询仓储费计算信息
  2954. *
  2955. * @param fId
  2956. * @return
  2957. */
  2958. @Override
  2959. public AjaxResult selectStorageFeeById(Long fId) {
  2960. TWarehouseBills tWarehouseBills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  2961. if (StringUtils.isNull(tWarehouseBills)) {
  2962. return AjaxResult.error("未找到信息,请刷新页面重试");
  2963. }
  2964. Map<String, Object> map = new HashMap<>();
  2965. List<TWarehousebillsfees> feesList = new ArrayList<>();
  2966. List<TWarehousebillsfees> itemsList = new ArrayList<>();
  2967. TWarehousebillsfees warehousebillsfees = new TWarehousebillsfees();
  2968. warehousebillsfees.setfPid(fId);
  2969. List<TWarehousebillsfees> warehouseFeesList = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(warehousebillsfees);
  2970. for (TWarehousebillsfees fees : warehouseFeesList) {
  2971. if (StringUtils.isNotNull(fees.getSrcId())) {
  2972. itemsList.add(fees);
  2973. } else {
  2974. feesList.add(fees);
  2975. }
  2976. }
  2977. TGoods tGoods = new TGoods();
  2978. tGoods.setfStatus("0");
  2979. tGoods.setDelFlag("0");
  2980. List<TGoods> goods = tGoodsMapper.selectTGoodsList(tGoods);
  2981. TFees tFees = new TFees();
  2982. tFees.setfStatus("2");
  2983. tFees.setDelFlag("0");
  2984. List<TFees> feesLists = tFeesMapper.selectTFeesList(tFees);
  2985. // 查询联系人
  2986. List<SysUser> sysUserList = new ArrayList<>();
  2987. SysUser sysUser = sysUserMapper.selectUserByUserName(tWarehouseBills.getCreateBy());
  2988. if (StringUtils.isNotNull(sysUser)) {
  2989. sysUserList.add(sysUser);
  2990. }
  2991. TCorps corps = tCorpsMapper.selectTCorpsById(tWarehouseBills.getfCorpid());
  2992. map.put("corps", corps);
  2993. map.put("goodsList", goods);
  2994. map.put("feesList", feesLists);
  2995. map.put("sysUser", sysUserList);
  2996. map.put("warehouse", tWarehouseBills);
  2997. map.put("warehouseFeesList", feesList);
  2998. map.put("warehouseItemsList", itemsList);
  2999. return AjaxResult.success(map);
  3000. }
  3001. /**
  3002. * 根据不同计费单位获取不同 计算库存明细数量
  3003. *
  3004. * @param item 库存明细
  3005. * @param dictLabel 计费单位
  3006. * @return 结果
  3007. */
  3008. public BigDecimal acquiredQuantity(Map<String, Object> item, Long dictLabel) {
  3009. BigDecimal fQty = new BigDecimal(0);
  3010. // 件数
  3011. long boxNum = 1;
  3012. // 毛重
  3013. long grossWeight = 2;
  3014. // 净重
  3015. long netWeight = 3;
  3016. // 尺码
  3017. long size = 4;
  3018. // 统一
  3019. long fixed = 5;
  3020. if (dictLabel.equals(boxNum)) {
  3021. fQty = new BigDecimal(((Number) item.get("fQty")).doubleValue());
  3022. return fQty.setScale(2, BigDecimal.ROUND_HALF_UP);
  3023. } else if (dictLabel.equals(grossWeight)) {
  3024. fQty = new BigDecimal(((Number) item.get("fGrossweight")).doubleValue());
  3025. } else if (dictLabel.equals(netWeight)) {
  3026. fQty = new BigDecimal(((Number) item.get("fNetweight")).doubleValue());
  3027. } else if (dictLabel.equals(size)) {
  3028. fQty = new BigDecimal(((Number) item.get("fVolumn")).doubleValue());
  3029. } else if (dictLabel.equals(fixed)) {
  3030. fQty = new BigDecimal(1);
  3031. }
  3032. //return fQty.setScale(2, BigDecimal.ROUND_HALF_UP);
  3033. // 结果值除以1000 保留两位
  3034. BigDecimal divisor = new BigDecimal("1000");
  3035. BigDecimal result = fQty.divide(divisor, 2, BigDecimal.ROUND_HALF_UP);
  3036. return result;
  3037. }
  3038. // 入库 收费明细 校验
  3039. public Long check(BigDecimal number, BigDecimal unitPrice) {
  3040. BigDecimal result1 = number.multiply(unitPrice);
  3041. // 保留两位小数且四舍五入
  3042. result1 = result1.setScale(2, BigDecimal.ROUND_HALF_UP);
  3043. // 转换去掉小数点
  3044. String result = result1.toString().replace(".", "");
  3045. return Long.valueOf(result);
  3046. }
  3047. /**
  3048. * 修改详情主表
  3049. *
  3050. * @param tWarehousebills 详情主表
  3051. * @return 结果
  3052. */
  3053. @Override
  3054. public int updateTWarehousebills(TWarehouseBills tWarehousebills) {
  3055. tWarehousebills.setUpdateTime(DateUtils.getNowDate());
  3056. return tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  3057. }
  3058. /**
  3059. * 批量删除详情主表
  3060. *
  3061. * @param fIds 需要删除的详情主表ID
  3062. * @return 结果
  3063. */
  3064. @Override
  3065. public int deleteTWarehousebillsByIds(Long[] fIds) {
  3066. // 取出业务编号、 放入 billno_del
  3067. for (Long id : fIds) {
  3068. // 1、查询主表信息
  3069. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  3070. // 2、业务编号、客存编号 放入 billno_del
  3071. BillnoDel billnoDel = new BillnoDel();
  3072. billnoDel.setBillType(tWarehousebills.getfBilltype());
  3073. billnoDel.setBillNo(tWarehousebills.getfBillno());
  3074. billnoDelMapper.insertBillnoDel(billnoDel);
  3075. }
  3076. return tWarehouseBillsMapper.deleteTWarehousebillsByIds(fIds);
  3077. }
  3078. @Override
  3079. public int deleteTWarehousebills(Long[] fIds) {
  3080. // 取出业务编号、 放入 billno_del
  3081. for (Long id : fIds) {
  3082. // 1、查询主表信息
  3083. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(id);
  3084. // 2、业务编号、客存编号 放入 billno_del
  3085. BillnoDel billnoDel = new BillnoDel();
  3086. billnoDel.setBillType(tWarehousebills.getfBilltype());
  3087. billnoDel.setBillNo(tWarehousebills.getfBillno());
  3088. billnoDelMapper.insertBillnoDel(billnoDel);
  3089. }
  3090. return tWarehouseBillsMapper.deleteKHTWarehousebillsByIds(fIds);
  3091. }
  3092. @Override
  3093. public AjaxResult queryRemove(Long fId) {
  3094. // 查询主表明细
  3095. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  3096. // 查询仓库明细从表数据
  3097. TWarehousebillsitems tWarehousebillsitems = new TWarehousebillsitems();
  3098. tWarehousebillsitems.setfPid(tWarehousebills.getfId());
  3099. List<Map<String, Object>> mapList = tWarehousebillsitemsMapper.selectGoodsTransferitemsList(tWarehousebillsitems);
  3100. // 查询仓库费用明细表数据
  3101. TWarehousebillsfees tWarehousebillsfees = new TWarehousebillsfees();
  3102. tWarehousebillsfees.setfPid(tWarehousebills.getfId());
  3103. List<TWarehousebillsfees> warehousebillsfees = tWarehousebillsfeesMapper.selectTWarehousebillsfeesList(tWarehousebillsfees);
  3104. // 查询附件表数据
  3105. TEnclosure enclosure = new TEnclosure();
  3106. enclosure.setfPid(tWarehousebills.getfId());
  3107. List<TEnclosure> enclosures = tEnclosureMapper.selectTEnclosureList(enclosure);
  3108. if (StringUtils.isNull(tWarehousebills)) {
  3109. return AjaxResult.success("0");
  3110. } else if (StringUtils.isNotNull(tWarehousebills)
  3111. && StringUtils.isEmpty(warehousebillsfees)
  3112. && StringUtils.isEmpty(enclosures)
  3113. && StringUtils.isEmpty(mapList)) {
  3114. return AjaxResult.success("1");
  3115. } else {
  3116. return AjaxResult.success("2");
  3117. }
  3118. }
  3119. /**
  3120. * 删除详情主表信息
  3121. *
  3122. * @param fId 详情主表ID
  3123. * @return 结果
  3124. */
  3125. @Override
  3126. public int deleteTWarehousebillsById(Long fId) {
  3127. return tWarehouseBillsMapper.deleteTWarehousebillsById(fId);
  3128. }
  3129. @Override
  3130. public String getWarehouseInStockBillsNo(TWarehouseBills tWarehouseBills) {
  3131. return null;
  3132. }
  3133. @Override
  3134. public String getWarehouseOutStockBillsNo(TWarehouseBills tWarehouseBills) {
  3135. return null;
  3136. }
  3137. /**
  3138. * 撤销入库
  3139. *
  3140. * @param fId
  3141. * @param loginUser
  3142. * @param billsType
  3143. * @return
  3144. */
  3145. @Override
  3146. @Transactional
  3147. public AjaxResult revokeTWarehousebillsById(Long fId, LoginUser loginUser, String billsType) {
  3148. // 查询 仓库主表信息、库存明细信息
  3149. TWarehouseBills tWarehousebills = tWarehouseBillsMapper.selectTWarehousebillsById(fId);
  3150. // 修改主表信息
  3151. tWarehousebills.setUpdateBy(loginUser.getUser().getUserName());
  3152. tWarehousebills.setUpdateTime(new Date());
  3153. tWarehousebills.setfBillstatus(2L); //撤销状态
  3154. tWarehousebills.setfReviewDate(null);// 审核通过时间清空
  3155. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  3156. tWarehousebillsfeesMapper.warehouseFeesFollowUpdate(tWarehousebills.getfId(), 2L, new Date());
  3157. if ("JSCCF".equals(tWarehousebills.getfBilltype())) {
  3158. List<TWarehousebillsfees> feesList = tWarehousebillsfeesMapper.selectWarehousebillsfeesByPId(fId);
  3159. for (TWarehousebillsfees wareItem : feesList) {
  3160. if (StringUtils.isNull(wareItem.getSrcId())) {
  3161. continue;
  3162. }
  3163. if ("KCZZ".equals(wareItem.getfBilltype())) {
  3164. TWhgenleg whgenleg = new TWhgenleg();
  3165. whgenleg.setfId(wareItem.getSrcId());
  3166. whgenleg.setfChargedate(wareItem.getfChargedate());
  3167. int i = tWhgenlegMapper.updateTWhgenleg(whgenleg);
  3168. if (i <= 0) {
  3169. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3170. return AjaxResult.error("更新库存费用状态失败,请联系管理员");
  3171. }
  3172. } else {
  3173. TWarehousebillsitems billsItem = new TWarehousebillsitems();
  3174. billsItem.setfId(wareItem.getSrcId());
  3175. billsItem.setfBilltype(wareItem.getfBilltype());
  3176. if (!"SJCK".equals(wareItem.getfBilltype())) {
  3177. billsItem.setfChargedate(wareItem.getfBillingDeadline());
  3178. tWarehousebillsitemsMapper.updateTWarehousebillsitems(billsItem);
  3179. } else {
  3180. billsItem.setfChargedate(wareItem.getfChargedate());
  3181. }
  3182. tWarehousebillsitemsMapper.agreementApprovalRejected(billsItem);
  3183. }
  3184. }
  3185. }
  3186. return AjaxResult.success();
  3187. }
  3188. /**
  3189. * 撤销入账
  3190. *
  3191. * @param warehouseBills 主表
  3192. * @param warehousebillsitems 明细
  3193. * @param loginUser 当前登录人
  3194. * @param billsType 状态
  3195. * @return 结果
  3196. */
  3197. @Override
  3198. @Transactional
  3199. public AjaxResult revokeTWarehousebillsById1(String warehouseBills, String warehousebillsitems, String tEnclosure,
  3200. String warehousebillsfeesCr, String warehousebillsfeesDr, LoginUser loginUser, String tCntr, String billsType) {
  3201. if (StringUtils.isNull(warehouseBills) || "[]".equals(warehouseBills)) {
  3202. return AjaxResult.error("未找到主表信息");
  3203. }
  3204. if (StringUtils.isNull(warehousebillsitems) || "[]".equals(warehousebillsitems)) {
  3205. return AjaxResult.error("未找到入账信息");
  3206. }
  3207. TWarehouseBills tWarehousebills = JSONArray.parseObject(warehouseBills, TWarehouseBills.class);
  3208. tWarehousebills.setfItemsStatus(1L); //撤销状态
  3209. tWarehouseBillsMapper.updateTWarehousebills(tWarehousebills);
  3210. tEnclosureMapper.deleteByFPid(tWarehousebills.getfId());
  3211. tWarehousebillsfeesMapper.deleteByFPid(tWarehousebills.getfId());
  3212. tWarehousebillsCntrMapper.deleteTWarehousebillsCntrfPid(tWarehousebills.getfId());
  3213. JSONArray warehouseJSON = JSONArray.parseArray(warehousebillsitems);
  3214. List<TWarehousebillsitems> warehousebillsitemsList = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  3215. /**
  3216. * 流水号回收
  3217. * 1、 获取所有流水号
  3218. */
  3219. List<String> SerialNumberList = new ArrayList<>();
  3220. if (StringUtils.isNotEmpty(warehousebillsitemsList)) {
  3221. int i = 1;
  3222. for (TWarehousebillsitems wb : warehousebillsitemsList) {
  3223. SerialNumberList.add(wb.getfSerialNumber()); // 流水号回收
  3224. // 查询库存总账
  3225. TWhgenleg tWhgenle = queryTWhgenleg(tWarehousebills, wb);
  3226. if ("SJRKRevoke".equals(billsType)) { // 撤销 入库
  3227. if (wb.getfIsInventory().equals(0L)) {
  3228. if (StringUtils.isNotNull(tWhgenle) && (wb.getfQty() <= tWhgenle.getfQtyblc())) { // 非空 且 撤销数 <= 结余数
  3229. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  3230. } else { // 撤销数>结余数
  3231. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3232. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  3233. }
  3234. }
  3235. wb.setfBillstatus(10L);
  3236. } else if ("SJCKRevoke".equals(billsType)) { // 撤销出库
  3237. if (StringUtils.isNotNull(tWhgenle)) { // 非空
  3238. updateTWhgenlegData(wb, tWhgenle.getfId(), billsType);
  3239. } else {
  3240. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3241. return AjaxResult.error("第" + i + "行未查询到库存信息");
  3242. }
  3243. wb.setfBillstatus(10L);
  3244. } else if ("CKDBRevoke".equals(billsType)) { // 调拨 撤销
  3245. Long warehouselocid = wb.getfWarehouselocid();// 原货仓库
  3246. Long transferWarehouselocid = wb.getfTransferWarehouselocid(); // 新仓库
  3247. // 1、新货权方撤销入库
  3248. // 查询库存总账
  3249. wb.setfWarehouselocid(transferWarehouselocid);
  3250. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  3251. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  3252. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  3253. } else {
  3254. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3255. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  3256. }
  3257. // 2、原货权方撤销出库
  3258. // 查询库存总账
  3259. wb.setfWarehouselocid(warehouselocid);
  3260. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  3261. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  3262. wb.setfBillstatus(10L);
  3263. } else if ("HWTGRevoke".equals(billsType)) { // 调拨 撤销
  3264. // 贸易方式
  3265. Long oldfTrademodeid = tWarehousebills.getfTrademodeid();
  3266. // 新贸易方式
  3267. Long newfTrademodeid = tWarehousebills.getfNewTrademodeid();
  3268. Long warehouselocid = wb.getfWarehouselocid();// 原货仓库
  3269. Long transferWarehouselocid = wb.getfTransferWarehouselocid(); // 新仓库
  3270. // 1、新货权方撤销入库
  3271. // 查询库存总账
  3272. wb.setfWarehouselocid(transferWarehouselocid);
  3273. tWarehousebills.setfTrademodeid(newfTrademodeid); // 查询用新的
  3274. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  3275. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  3276. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  3277. } else {
  3278. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3279. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  3280. }
  3281. // 2、原货权方撤销出库
  3282. // 查询库存总账
  3283. wb.setfWarehouselocid(warehouselocid);
  3284. tWarehousebills.setfTrademodeid(oldfTrademodeid); // 撤销回到旧的
  3285. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  3286. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  3287. wb.setfBillstatus(10L);
  3288. } else if ("HQZYRevoke".equals(billsType)) { // 货转撤销
  3289. Long fCorpid = tWarehousebills.getfCorpid();// 原货权方
  3290. Long fTocorpid = tWarehousebills.getfTocorpid(); // 新货权方
  3291. // 1、新货权方撤销入库
  3292. // 查询库存总账
  3293. tWarehousebills.setfCorpid(fTocorpid);
  3294. TWhgenleg tWhgenle1 = queryTWhgenleg(tWarehousebills, wb);
  3295. if (StringUtils.isNotNull(tWhgenle1) && (wb.getfQty() <= tWhgenle1.getfQtyblc())) {
  3296. updateTWhgenlegData(wb, tWhgenle1.getfId(), "SJRKRevoke");
  3297. } else {
  3298. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3299. return AjaxResult.error("第" + i + "行撤销数大于库存结余数");
  3300. }
  3301. // 2、原货权方撤销出库
  3302. // 查询库存总账
  3303. tWarehousebills.setfCorpid(fCorpid);
  3304. TWhgenleg tWhgenle2 = queryTWhgenleg(tWarehousebills, wb);
  3305. updateTWhgenlegData(wb, tWhgenle2.getfId(), "SJCKRevoke");
  3306. wb.setfBillstatus(1L);
  3307. }
  3308. i++;
  3309. wb.setUpdateBy(loginUser.getUser().getUserName());
  3310. wb.setUpdateTime(new Date());
  3311. wb.setfSerialNumber(null);
  3312. if (tWarehousebillsitemsMapper.updateTWarehousebillsitems(wb) <= 0) {
  3313. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3314. return AjaxResult.error("新增库存明细失败");
  3315. }
  3316. }
  3317. }
  3318. /**
  3319. * 流水号回收
  3320. * 2、 流水号去重
  3321. * 3、 添加到 billno_del
  3322. */
  3323. List<String> serialNumberNewList = delRepeat(SerialNumberList);
  3324. serialNumberNewList.forEach(item -> {
  3325. BillnoDel billnoDel = new BillnoDel();
  3326. billnoDel.setBillType(item.substring(0, 2));
  3327. billnoDel.setBillNo(item);
  3328. billnoDelMapper.insertBillnoDel(billnoDel);
  3329. });
  3330. // 箱型数据
  3331. if (StringUtils.isNotNull(tCntr) && !"[]".equals(tCntr)) {
  3332. JSONArray jsonDrArray = JSONArray.parseArray(tCntr);
  3333. List<TWarehousebillsCntr> tWarehousebillsCntrs = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsCntr.class);
  3334. int line = 0;
  3335. for (TWarehousebillsCntr cntr : tWarehousebillsCntrs) {
  3336. line++;
  3337. if (StringUtils.isNull(cntr.getfCntrid()) || StringUtils.isNull(cntr.getfCntrcount()) || cntr.getfCntrcount() == 0) {
  3338. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3339. return AjaxResult.error("箱型数据第"+line+"行数据缺少必填数据");
  3340. }
  3341. cntr.setfPid(tWarehousebills.getfId());
  3342. cntr.setfGoodsid(0L);
  3343. cntr.setfPackageid("0");
  3344. cntr.setfCntrweight(0L);
  3345. cntr.setCreateBy(loginUser.getUser().getUserName());
  3346. cntr.setCreateTime(new Date());
  3347. tWarehousebillsCntrMapper.insertTWarehousebillsCntr(cntr);
  3348. }
  3349. }
  3350. // 附件添加
  3351. if (StringUtils.isNotEmpty(tEnclosure) && !"[]".equals(tEnclosure)) {
  3352. JSONArray jsonDrArray = JSONArray.parseArray(tEnclosure);
  3353. List<TEnclosure> tEnclosureList = JSONObject.parseArray(jsonDrArray.toJSONString(), TEnclosure.class);
  3354. for (TEnclosure enclosure : tEnclosureList) {
  3355. enclosure.setfPid(tWarehousebills.getfId());
  3356. enclosure.setCreateBy(loginUser.getUser().getUserName());
  3357. enclosure.setCreateTime(new Date());
  3358. tEnclosureMapper.insertTEnclosure(enclosure);
  3359. }
  3360. }
  3361. // 收款明细添加
  3362. if (StringUtils.isNotEmpty(warehousebillsfeesDr) && !"[]".equals(warehousebillsfeesDr)) {
  3363. JSONArray jsonDrArray = JSONArray.parseArray(warehousebillsfeesDr);
  3364. List<TWarehousebillsfees> warehousebillsfeesDrList = JSONObject.parseArray(jsonDrArray.toJSONString(), TWarehousebillsfees.class);
  3365. for (TWarehousebillsfees wbDr : warehousebillsfeesDrList) {
  3366. wbDr.setfPid(tWarehousebills.getfId());
  3367. wbDr.setfDc("D");
  3368. wbDr.setCreateBy(loginUser.getUser().getUserName());
  3369. wbDr.setCreateTime(new Date());
  3370. if (tWarehousebills.getfBsdate() != null && !tWarehousebills.getfBsdate().equals("")) {
  3371. wbDr.setfBsdate(tWarehousebills.getfBsdate());
  3372. }
  3373. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbDr);
  3374. }
  3375. }
  3376. // 付款明细添加
  3377. if (StringUtils.isNotNull(warehousebillsfeesCr) && !"[]".equals(warehousebillsfeesCr)) {
  3378. JSONArray jsonCrArray = JSONArray.parseArray(warehousebillsfeesCr);
  3379. List<TWarehousebillsfees> warehousebillsfeesCrList = JSONObject.parseArray(jsonCrArray.toJSONString(), TWarehousebillsfees.class);
  3380. for (TWarehousebillsfees wbCr : warehousebillsfeesCrList) {
  3381. wbCr.setfPid(tWarehousebills.getfId());
  3382. wbCr.setfDc("C");
  3383. wbCr.setCreateBy(loginUser.getUser().getUserName());
  3384. wbCr.setCreateTime(new Date());
  3385. if (tWarehousebills.getfBsdate() != null && !tWarehousebills.getfBsdate().equals("")) {
  3386. wbCr.setfBsdate(tWarehousebills.getfBsdate());
  3387. }
  3388. tWarehousebillsfeesMapper.insertTWarehousebillsfees(wbCr);
  3389. }
  3390. }
  3391. return AjaxResult.success();
  3392. }
  3393. public static List<String> delRepeat(List<String> list) {
  3394. List<String> myList = list.stream().distinct().collect(Collectors.toList());
  3395. return myList;
  3396. }
  3397. /**
  3398. * 添加 库存明细状态
  3399. *
  3400. * @param wbItem
  3401. * @param status
  3402. * @param loginUser
  3403. */
  3404. public void insertTWarehousebillsLog(TWarehousebillsitems wbItem, Long status, LoginUser loginUser) {
  3405. // 添加状态log
  3406. TWarehousebillsLog tWarehousebillsLog = new TWarehousebillsLog();
  3407. tWarehousebillsLog.setfPid(wbItem.getfPid());
  3408. tWarehousebillsLog.setfItmeid(wbItem.getfId());
  3409. tWarehousebillsLog.setfItmestatus(status);
  3410. tWarehousebillsLog.setCreateTime(new Date());
  3411. tWarehousebillsLog.setCreateBy(loginUser.getUser().getUserName());
  3412. tWarehousebillsLogMapper.insertTWarehousebillsLog(tWarehousebillsLog);
  3413. }
  3414. /**
  3415. * 删除 库存明细
  3416. *
  3417. * @param fid
  3418. * @param tWarehousebillsitems
  3419. */
  3420. public void deleteBillsitems(Long fid, String tWarehousebillsitems) {
  3421. List<Long> oldList = new ArrayList<Long>();
  3422. List<Long> newList = new ArrayList<Long>();
  3423. // 查询所有从表数据
  3424. TWarehousebillsitems tWarehousebillsitem = new TWarehousebillsitems();
  3425. tWarehousebillsitem.setfPid(fid);
  3426. List<TWarehousebillsitems> warehousebillsitemsList = tWarehousebillsitemsMapper.selectTWarehousebillsitemsList(tWarehousebillsitem);
  3427. warehousebillsitemsList.forEach(wb ->
  3428. oldList.add(wb.getfId())
  3429. );
  3430. // 获取提交从表数据ID
  3431. if (tWarehousebillsitems != null) {
  3432. JSONArray warehouseJSON = JSONArray.parseArray(tWarehousebillsitems);
  3433. List<TWarehousebillsitems> warehousebillsitemsLists = JSONObject.parseArray(warehouseJSON.toJSONString(), TWarehousebillsitems.class);
  3434. warehousebillsitemsLists.forEach(wb ->
  3435. newList.add(wb.getfId())
  3436. );
  3437. }
  3438. // 删除多余的ID
  3439. List<Long> reduce1 = oldList.stream().filter(item -> !newList.contains(item)).collect(toList());
  3440. reduce1.forEach(id ->
  3441. tWarehousebillsitemsMapper.deleteTWarehousebillsitemsById(id)
  3442. );
  3443. }
  3444. /**
  3445. * 库容-结余毛重
  3446. *
  3447. * @param fTotalgross
  3448. * @param fGrossweightblc
  3449. * @return
  3450. */
  3451. public static BigDecimal calculation1(String fTotalgross, String fGrossweightblc) {
  3452. BigDecimal num1 = new BigDecimal(fTotalgross);
  3453. BigDecimal num2 = new BigDecimal(fGrossweightblc);
  3454. BigDecimal result = num1.subtract(num2);
  3455. return result.setScale(2, BigDecimal.ROUND_HALF_UP);
  3456. }
  3457. /**
  3458. * 判断 是否允许 入库
  3459. *
  3460. * @param fId
  3461. */
  3462. public int calculation(Long fId, BigDecimal fGrossweight) {
  3463. // 仓库库容
  3464. TWarehouse tWarehouse = tWarehouseMapper.selectTWarehouseById(fId);
  3465. // 毛重公斤转化为吨
  3466. fGrossweight = fGrossweight.divide(new BigDecimal(1000), 0, BigDecimal.ROUND_HALF_UP);
  3467. // 总账使用
  3468. List<Map<String, Object>> whouseList = tWhgenlegMapper.selectWareHouseListWhouse(fId);
  3469. if (whouseList != null && whouseList.size() > 0) {
  3470. String fTotalgross = null;
  3471. String fGrossweightblc = null;
  3472. for (Map<String, Object> m : whouseList) {
  3473. for (String k : m.keySet()) {
  3474. // 获取毛重库容
  3475. if (k.equals("fTotalgross")) {
  3476. fTotalgross = m.get(k).toString();
  3477. }
  3478. if (k.equals("fGrossweightD")) {
  3479. fGrossweightblc = m.get(k).toString();
  3480. }
  3481. }
  3482. }
  3483. BigDecimal bd = new BigDecimal(fGrossweightblc);
  3484. fGrossweightblc = bd.divide(new BigDecimal(1000), 0, BigDecimal.ROUND_HALF_UP).toString();
  3485. BigDecimal result = calculation1(fTotalgross, fGrossweightblc);
  3486. if (result.compareTo(fGrossweight) == -1) {
  3487. return 0;// 结余库容小于入库数
  3488. } else {
  3489. return 1;
  3490. }
  3491. } else {
  3492. if (tWarehouse.getfTotalgross() != null) {
  3493. if (tWarehouse.getfTotalgross().compareTo(fGrossweight) == -1) {
  3494. return 0;// 库容小于入库数
  3495. } else {
  3496. return 1;
  3497. }
  3498. } else {
  3499. return 0;// 库容小于入库数
  3500. }
  3501. }
  3502. }
  3503. @Transactional
  3504. public AjaxResult updateKaHeOrder(Long fPid, long fettle) {
  3505. if (StringUtils.isNull(fPid)) {
  3506. return AjaxResult.error("协议更新状态未找到主表信息,请与管理员联系");
  3507. }
  3508. TWarehouseBills tWarehouseBills = new TWarehouseBills();
  3509. tWarehouseBills.setfId(fPid);
  3510. tWarehouseBills.setfBillstatus(fettle);
  3511. int tFeeUpdateResult = tWarehouseBillsMapper.updateTWarehousebills(tWarehouseBills);
  3512. if (tFeeUpdateResult <= 0) {
  3513. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  3514. return AjaxResult.error("更新订单主表状态失败,请联系管理员");
  3515. }
  3516. return AjaxResult.success();
  3517. }
  3518. /**
  3519. * 根据fid获取订单主表信息
  3520. *
  3521. * @param fid
  3522. * @return
  3523. */
  3524. public TWarehouseBills selectKaHeById(Long fid) {
  3525. return tWarehouseBillsMapper.selectTWarehousebillsById(fid);
  3526. }
  3527. }