TCntrnoServiceImpl.java 47 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963
  1. package com.ruoyi.shipping.service.impl;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.math.BigDecimal;
  5. import java.text.ParseException;
  6. import java.text.SimpleDateFormat;
  7. import java.util.*;
  8. import java.util.concurrent.ConcurrentHashMap;
  9. import java.util.function.Function;
  10. import java.util.function.Predicate;
  11. import java.util.stream.Collectors;
  12. import com.alibaba.fastjson.JSONArray;
  13. import com.alibaba.fastjson.JSONObject;
  14. import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
  15. import com.ruoyi.common.constant.UserConstants;
  16. import com.ruoyi.common.core.domain.AjaxResult;
  17. import com.ruoyi.common.core.domain.entity.SysDictData;
  18. import com.ruoyi.common.core.domain.model.LoginUser;
  19. import com.ruoyi.common.utils.DateUtils;
  20. import com.ruoyi.common.utils.SecurityUtils;
  21. import com.ruoyi.common.utils.StringUtils;
  22. import com.ruoyi.shipping.domain.*;
  23. import com.ruoyi.shipping.excel.*;
  24. import com.ruoyi.shipping.mapper.*;
  25. import com.ruoyi.system.mapper.SysDictDataMapper;
  26. import org.apache.poi.hssf.usermodel.HSSFDateUtil;
  27. import org.apache.poi.ss.usermodel.*;
  28. import org.apache.poi.ss.util.CellReference;
  29. import org.apache.poi.xssf.streaming.SXSSFWorkbook;
  30. import org.apache.poi.xssf.usermodel.XSSFWorkbook;
  31. import org.springframework.beans.BeanUtils;
  32. import org.springframework.beans.factory.annotation.Autowired;
  33. import org.springframework.stereotype.Service;
  34. import com.ruoyi.shipping.service.ITCntrnoService;
  35. import org.springframework.transaction.annotation.Transactional;
  36. import org.springframework.transaction.interceptor.TransactionAspectSupport;
  37. import org.springframework.web.multipart.MultipartFile;
  38. import static com.ruoyi.common.utils.poi.Excel.filter;
  39. /**
  40. * 集装箱号Service业务层处理
  41. *
  42. * @author ruoyi
  43. * @date 2021-03-22
  44. */
  45. @Service
  46. public class TCntrnoServiceImpl implements ITCntrnoService {
  47. @Autowired
  48. private TCntrnoMapper tCntrnoMapper;
  49. @Autowired
  50. private TCntrtrackingMapper tCntrtrackingMapper;
  51. @Autowired
  52. private TCntrMapper tCntrMapper;
  53. @Autowired
  54. private SysDictDataMapper sysDictDataMapper;
  55. @Autowired
  56. private TAddressMapper tAddressMapper;
  57. @Autowired
  58. private TConditionAccessoryMapper tConditionAccessoryMapper;
  59. /**
  60. * 查询集装箱号
  61. *
  62. * @param fId 集装箱号ID
  63. * @return 集装箱号
  64. */
  65. @Override
  66. public TCntrno selectTCntrnoById(Long fId) {
  67. return tCntrnoMapper.selectTCntrnoById(fId);
  68. }
  69. /**
  70. * 查询集装箱号列表
  71. *
  72. * @param tCntrno 集装箱号
  73. * @return 集装箱号
  74. */
  75. @Override
  76. public List<TCntrno> selectTCntrnoList(TCntrno tCntrno) {
  77. return tCntrnoMapper.selectTCntrnoList(tCntrno);
  78. }
  79. /**
  80. * 新增集装箱号
  81. *
  82. * @param tCntrno 集装箱号
  83. * @return 结果
  84. */
  85. @Override
  86. public int insertTCntrno(TCntrno tCntrno) {
  87. tCntrno.setCreateTime(DateUtils.getNowDate());
  88. tCntrno.setCreateBy(SecurityUtils.getUsername());
  89. tCntrno.setfUpdatetime(DateUtils.getNowDate());
  90. tCntrno.setfStatus("T");
  91. return tCntrnoMapper.insertTCntrno(tCntrno);
  92. }
  93. /**
  94. * 修改集装箱号
  95. *
  96. * @param tCntrno 集装箱号
  97. * @return 结果
  98. */
  99. @Override
  100. @Transactional
  101. public int updateTCntrno(List<TCntrno> tCntrno) {
  102. int update = 0;
  103. if (CollectionUtils.isNotEmpty(tCntrno)) {
  104. for (TCntrno cntrno : tCntrno) {
  105. String remark = cntrno.getRemark();
  106. cntrno.setUpdateTime(DateUtils.getNowDate());
  107. cntrno.setUpdateBy(SecurityUtils.getUsername());
  108. //最新时间
  109. if (cntrno.getFoldtime() == null) {
  110. cntrno.setfUpdatetime(DateUtils.getNowDate());
  111. } else {
  112. cntrno.setfUpdatetime(cntrno.getFoldtime());
  113. }
  114. //调入地点
  115. if (StringUtils.isNotEmpty(cntrno.getFoldSite())) {
  116. cntrno.setfUpdateaddress(cntrno.getFoldSite());
  117. }
  118. //调入空重
  119. if (StringUtils.isNotEmpty(cntrno.getFoldFUpdateef())) {
  120. cntrno.setfUpdateef(cntrno.getFoldFUpdateef());
  121. }
  122. //调入状态
  123. if (StringUtils.isNotEmpty(cntrno.getFoldFCntrstatus())) {
  124. cntrno.setfCntrstatus(cntrno.getFoldFCntrstatus());
  125. }
  126. if (StringUtils.isNotEmpty(remark)) {
  127. cntrno.setRemark(null);
  128. }
  129. //更改t_cntro表信息
  130. update = tCntrnoMapper.updateTCntrno((cntrno));
  131. //保存信息
  132. TCntrno cntrnoById = tCntrnoMapper.selectTCntrnoById(cntrno.getfId());
  133. if (cntrnoById.getfStatus().equals("T") || cntrnoById.getfStatus().equals("正常")) {
  134. cntrnoById.setfStatus("T");
  135. } else {
  136. cntrnoById.setfStatus("F");
  137. }
  138. if (StringUtils.isNotEmpty(cntrno.getfMblno())) {//提单号
  139. cntrnoById.setfMblno(cntrno.getfMblno());
  140. }
  141. if (StringUtils.isNotEmpty(cntrno.getfVoy())) {//航次
  142. cntrnoById.setfVoy(cntrno.getfVoy());
  143. }
  144. if (StringUtils.isNotEmpty(cntrno.getfVsl())) {//船名
  145. cntrnoById.setfVsl(cntrno.getfVsl());
  146. }
  147. if (StringUtils.isNotEmpty(remark)) {
  148. cntrnoById.setRemark(remark);
  149. }
  150. TCntrtracking setfield = setfield(cntrnoById);
  151. tCntrtrackingMapper.insertTCntrtracking(setfield);
  152. if (CollectionUtils.isNotEmpty(cntrno.getAccessoryList())) {
  153. for (TConditionAccessory tConditionAccessory : cntrno.getAccessoryList()) {
  154. tConditionAccessory.setfOrgId(10L);
  155. tConditionAccessory.setfPid(setfield.getfId());
  156. tConditionAccessory.setCreateBy(SecurityUtils.getUsername());
  157. tConditionAccessory.setCreateTime(DateUtils.getNowDate());
  158. tConditionAccessoryMapper.insertTConditionAccessory(tConditionAccessory);
  159. }
  160. }
  161. }
  162. }
  163. return update;
  164. }
  165. @Override
  166. @Transactional
  167. public AjaxResult updateAirForceStation(List<TCntrno> tCntrno) {
  168. int update = 0;
  169. if (CollectionUtils.isNotEmpty(tCntrno)) {
  170. for (TCntrno cntrno : tCntrno) {
  171. String remark = cntrno.getRemark();
  172. cntrno.setUpdateTime(DateUtils.getNowDate());
  173. cntrno.setUpdateBy(SecurityUtils.getUsername());
  174. TCntrno cnTrNoByfNo = tCntrnoMapper.selectTCnTrNoByfNo(cntrno.getfNo());
  175. if (cnTrNoByfNo == null){
  176. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  177. return AjaxResult.error("箱号:"+cntrno.getfNo()+"系统中不存在请维护");
  178. }else {
  179. cntrno.setfId(cnTrNoByfNo.getfId());
  180. //更改t_cntro表信息
  181. update = tCntrnoMapper.updateTCntrno((cntrno));
  182. }
  183. //保存历史信息
  184. TCntrno cntrnoById = tCntrnoMapper.selectTCntrnoById(cntrno.getfId());
  185. if (cntrnoById.getfStatus().equals("T") || cntrnoById.getfStatus().equals("正常")) {
  186. cntrnoById.setfStatus("T");
  187. } else {
  188. cntrnoById.setfStatus("F");
  189. }
  190. if (StringUtils.isNotEmpty(cntrno.getfMblno())) {//提单号
  191. cntrnoById.setfMblno(cntrno.getfMblno());
  192. }
  193. if (StringUtils.isNotEmpty(cntrno.getfVoy())) {//航次
  194. cntrnoById.setfVoy(cntrno.getfVoy());
  195. }
  196. if (StringUtils.isNotEmpty(cntrno.getfVsl())) {//船名
  197. cntrnoById.setfVsl(cntrno.getfVsl());
  198. }
  199. if (StringUtils.isNotEmpty(remark)) {
  200. cntrnoById.setRemark(remark);
  201. }
  202. TCntrtracking setfield = setfield(cntrnoById);
  203. update = tCntrtrackingMapper.insertTCntrtracking(setfield);
  204. }
  205. }
  206. if (update <= 0 ){
  207. TransactionAspectSupport.currentTransactionStatus().setRollbackOnly();
  208. return AjaxResult.error("保存场站信息失败");
  209. }
  210. return AjaxResult.success();
  211. }
  212. @Override
  213. @Transactional
  214. public int updateTCntrnoMessage(TCntrno tCntrno) {
  215. tCntrno.setUpdateTime(DateUtils.getNowDate());
  216. tCntrno.setUpdateBy(SecurityUtils.getUsername());
  217. tCntrno.setfUpdatetime(DateUtils.getNowDate());
  218. if (tCntrno.getfStatus().equals("T") || tCntrno.getfStatus().equals("正常")) {
  219. tCntrno.setfStatus("T");
  220. } else {
  221. tCntrno.setfStatus("F");
  222. }
  223. TCntrtracking setfield = setfield(tCntrno);
  224. tCntrtrackingMapper.insertTCntrtracking(setfield);
  225. //更改t_cntro表信息
  226. return tCntrnoMapper.updateTCntrno((tCntrno));
  227. }
  228. /**
  229. * 批量删除集装箱号
  230. *
  231. * @param fIds 需要删除的集装箱号ID
  232. * @return 结果
  233. */
  234. @Override
  235. public int deleteTCntrnoByIds(Long[] fIds) {
  236. return tCntrnoMapper.deleteTCntrnoByIds(fIds);
  237. }
  238. /**
  239. * 删除集装箱号信息
  240. *
  241. * @param fId 集装箱号ID
  242. * @return 结果
  243. */
  244. @Override
  245. public int deleteTCntrnoById(Long fId) {
  246. return tCntrnoMapper.deleteTCntrnoById(fId);
  247. }
  248. /**
  249. * 批量更新数据状态将正常状态改为停用
  250. *
  251. * @param fIds
  252. * @return
  253. */
  254. @Override
  255. public int updateTcntrnoStatus(Long[] fIds) {
  256. return tCntrnoMapper.updateTcntrnoStatus(fIds);
  257. }
  258. @Override
  259. public List<TCntrno> selectTcntrnoMessage(TCntrno tCntrno) {
  260. return tCntrnoMapper.selectTcntrnoMessage(tCntrno, null, null, null, null, null);
  261. }
  262. @Override
  263. public List<Map<String, Object>> getTCntrnoMessage(TCntrno tCntrno,List<String> list ) {
  264. List<Map<String, Object>> mapList = new ArrayList<>();
  265. StringBuffer stringBuffer = new StringBuffer();//查类型数据
  266. StringBuffer standBuffer = new StringBuffer();//查空重
  267. /*StringBuffer bareWeightBuffer = new StringBuffer();//查好坏*/
  268. String sql = null;//查类型数据
  269. String stand = null;//查空重
  270. /*String bareWeight = null;//查好坏*/
  271. if (CollectionUtils.isNotEmpty(list)) {
  272. for (String s : list) {
  273. stringBuffer.append("MAX( CASE WHEN tt.f_no = '" + s);
  274. stringBuffer.append("' THEN tt.typeidCount ELSE 0 END ) AS '" + s + "',");
  275. standBuffer.append("MAX( CASE WHEN a.typeName ='"+s+"' AND a.dict_label = '空'");
  276. standBuffer.append("THEN a.efCount ELSE 0 END ) AS '" + s + "空',");
  277. standBuffer.append("MAX( CASE WHEN a.typeName ='"+s+"' AND a.dict_label = '重'");
  278. standBuffer.append("THEN a.efCount ELSE 0 END ) AS '" + s + "重',");
  279. /*bareWeightBuffer.append("MAX( CASE WHEN b.typeName ='"+s+"' AND b.dict_label = '好'");
  280. bareWeightBuffer.append("THEN b.statusCount ELSE 0 END ) AS '" + s + "好',");
  281. bareWeightBuffer.append("MAX( CASE WHEN b.typeName ='"+s+"' AND b.dict_label = '坏'");
  282. bareWeightBuffer.append("THEN b.statusCount ELSE 0 END ) AS '" + s + "坏',");*/
  283. }
  284. sql = stringBuffer.subSequence(0, stringBuffer.length() - 1).toString();
  285. stand = standBuffer.subSequence(0, standBuffer.length() - 1).toString();
  286. /*bareWeight = bareWeightBuffer.subSequence(0, bareWeightBuffer.length() - 1).toString();*/
  287. mapList = tCntrnoMapper.getTCntrnoMessage(sql,stand,tCntrno);
  288. }
  289. return mapList;
  290. }
  291. @Override
  292. public List<TCntrno> getTCntrnoDistribute(TCntrno tCntrno) {
  293. //箱类型不为空查箱类型id
  294. String address = null;//地点
  295. String typeidName = null;//箱类型
  296. String cntrstatusName = null;//箱状态
  297. String updateEFName = null;//空重
  298. if (StringUtils.isNotEmpty(tCntrno.getAddressName())) {
  299. address = tCntrno.getAddressName();
  300. }else {
  301. tCntrno.setfUpdateaddress("0");
  302. }
  303. if (StringUtils.isNotEmpty(tCntrno.getTypeidName())) {
  304. typeidName = tCntrno.getTypeidName();
  305. }
  306. //箱状态不为空查箱状态
  307. if (StringUtils.isNotEmpty(tCntrno.getCntrstatusName())) {
  308. cntrstatusName = tCntrno.getCntrstatusName();
  309. }
  310. //箱空重部位空查空重
  311. if (StringUtils.isNotEmpty(tCntrno.getUpdateEFName())) {
  312. updateEFName = tCntrno.getUpdateEFName();
  313. }
  314. return tCntrnoMapper.selectTcntrnoMessage(tCntrno, address, typeidName, cntrstatusName, updateEFName, tCntrno.getCntrsize());
  315. }
  316. @Override
  317. public List<String> getTCntrnoChange(TCntrno tCntrno) {
  318. List<String> key = new ArrayList<>();
  319. key.add("地点");
  320. /*List<String> list = tCntrMapper.selectTCntrFNo();
  321. List<String> mapList = new ArrayList<>();
  322. if (CollectionUtils.isNotEmpty(list)){
  323. for (String s : list) {
  324. mapList.add(s);
  325. mapList.add(s+"空");
  326. mapList.add(s+"重");
  327. *//* mapList.add(s+"好");
  328. mapList.add(s+"坏");*//*
  329. }
  330. }
  331. list.addAll(mapList);
  332. Collections.sort(list);*/
  333. key.add("20GP");
  334. key.add("20HC");
  335. key.add("20GP空");
  336. key.add("20GP重");
  337. key.add("20HC空");
  338. key.add("20HC重");
  339. return key;
  340. }
  341. @Override
  342. public String selectTCntrnoFNo(TCntrno tCntrno) {
  343. TCntrno cntrno = tCntrnoMapper.selectTCntrnoFNo(tCntrno);
  344. if (StringUtils.isNotNull(cntrno) && !cntrno.getfId().equals(tCntrno.getfId())) {
  345. return UserConstants.NOT_UNIQUE;
  346. }
  347. return UserConstants.UNIQUE;
  348. }
  349. /**
  350. * 后续维护
  351. *
  352. * @param fileName 更新箱信息数据列表
  353. * @return
  354. */
  355. @Override
  356. public AjaxResult importUpdateDataTcntrnoExcel(MultipartFile fileName) {
  357. return null;
  358. }
  359. /**
  360. * 后续维护
  361. *
  362. * @param fileName 更新箱信息数据列表
  363. * @return
  364. */
  365. @Override
  366. public AjaxResult importTcntrnoDataExcel(MultipartFile fileName) {
  367. return null;
  368. }
  369. @Override
  370. public AjaxResult importCreateCompanyMsg(MultipartFile file) throws Exception {
  371. List<TCntrnoExcel> fleetCompanyMsgs = new ArrayList<>();
  372. InputStream inputStream = null;
  373. try {
  374. inputStream = file.getInputStream();
  375. String originalFilename = file.getOriginalFilename();
  376. Workbook workbook = null;
  377. if (originalFilename.endsWith("xls")) {
  378. workbook = WorkbookFactory.create(inputStream);
  379. } else if (originalFilename.endsWith("xlsx")) {
  380. workbook = new XSSFWorkbook(inputStream);
  381. }
  382. Sheet sheet = workbook.getSheetAt(0);
  383. int line = 0;
  384. for (Row rows : sheet) {
  385. line++;
  386. if (rows.getRowNum() == 0) {
  387. continue;
  388. }
  389. TCntrnoExcel companyMsg = new TCntrnoExcel();
  390. for (int a = 0; a < rows.getPhysicalNumberOfCells(); a++) {
  391. Cell cell = rows.getCell(a);
  392. if (cell == null){
  393. continue;
  394. }
  395. String value = filter(sheet.getRow(0), CellReference.convertNumToColString(cell.getColumnIndex()));
  396. switch (value) {
  397. case "箱号":
  398. //设置单元格类型
  399. cell.setCellType(CellType.STRING);
  400. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  401. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱号");*/
  402. break;
  403. }
  404. companyMsg.setfNo(cell.getStringCellValue());
  405. break;
  406. case "箱类型":
  407. //设置单元格类型
  408. cell.setCellType(CellType.STRING);
  409. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  410. /*return AjaxResult.error("Excel箱信息数据第" + line + "箱类型");*/
  411. break;
  412. }
  413. companyMsg.setTypeidName(cell.getStringCellValue());
  414. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  415. Long fId = tCntrMapper.selectRcntrFId(companyMsg.getTypeidName());
  416. companyMsg.setfTypeid(fId);
  417. }
  418. break;
  419. case "最新地点":
  420. //设置单元格类型
  421. cell.setCellType(CellType.STRING);
  422. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  423. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少最新地点");*/
  424. break;
  425. }
  426. companyMsg.setAddressName((cell.getStringCellValue()));
  427. break;
  428. case "租赁公司":
  429. //设置单元格类型
  430. cell.setCellType(CellType.STRING);
  431. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  432. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少货名");*/
  433. break;
  434. }
  435. companyMsg.setOwnerName(cell.getStringCellValue());
  436. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  437. String fPackageid = sysDictDataMapper.selectDictValue("f_owner", cell.getStringCellValue());
  438. if (StringUtils.isNotEmpty(fPackageid)) {
  439. companyMsg.setfOwner(fPackageid);
  440. }
  441. }
  442. break;
  443. case "箱状态":
  444. //设置单元格类型
  445. cell.setCellType(CellType.STRING);
  446. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  447. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱状态");*/
  448. break;
  449. }
  450. companyMsg.setCntrstatusName(cell.getStringCellValue());
  451. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  452. String setCntrstatusid = sysDictDataMapper.selectDictValue("f_cntrstatus", cell.getStringCellValue());
  453. if (StringUtils.isNotEmpty(setCntrstatusid)) {
  454. companyMsg.setfCntrstatus(setCntrstatusid);
  455. }
  456. }
  457. break;
  458. case "空重":
  459. //设置单元格类型
  460. cell.setCellType(CellType.STRING);
  461. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  462. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱型");*/
  463. break;
  464. }
  465. companyMsg.setUpdateEFName(cell.getStringCellValue());
  466. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  467. String setUpdateEFid = sysDictDataMapper.selectDictValue("f_updateEF", cell.getStringCellValue());
  468. if (StringUtils.isNotEmpty(setUpdateEFid)) {
  469. companyMsg.setfUpdateef(setUpdateEFid);
  470. }
  471. }
  472. break;
  473. case "地点类型":
  474. //设置单元格类型
  475. cell.setCellType(CellType.STRING);
  476. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  477. /*return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少地点类型");*/
  478. break;
  479. }
  480. companyMsg.setAddressType(cell.getStringCellValue());
  481. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  482. String fPackageid = sysDictDataMapper.selectDictValue("f_types", cell.getStringCellValue());
  483. if (StringUtils.isNotEmpty(fPackageid)) {
  484. companyMsg.setAddressTypeId(fPackageid);
  485. }
  486. }
  487. break;
  488. /*case "箱来源":
  489. //设置单元格类型
  490. cell.setCellType(CellType.STRING);
  491. companyMsg.setSourceName(cell.getStringCellValue());
  492. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  493. String setSourceid = sysDictDataMapper.selectDictValue("f_source", cell.getStringCellValue());
  494. if (StringUtils.isNotEmpty(setSourceid)) {
  495. companyMsg.setfSource(setSourceid);
  496. }
  497. }
  498. break;
  499. case "租赁方式":
  500. //设置单元格类型
  501. cell.setCellType(CellType.STRING);
  502. companyMsg.setRentName(cell.getStringCellValue());
  503. if (StringUtils.isNotEmpty(cell.getStringCellValue())) {
  504. String setRentid = sysDictDataMapper.selectDictValue("f_rent", cell.getStringCellValue());
  505. if (StringUtils.isNotEmpty(setRentid)) {
  506. companyMsg.setfRent(setRentid);
  507. }
  508. }
  509. break;
  510. case "备注":
  511. //设置单元格类型
  512. cell.setCellType(CellType.STRING);
  513. companyMsg.setRemark(cell.getStringCellValue());
  514. break;*/
  515. }
  516. if (StringUtils.isNotEmpty(companyMsg.getAddressName()) && StringUtils.isNotEmpty(companyMsg.getAddressTypeId())) {
  517. TAddress tAddress = new TAddress();
  518. tAddress.setfName(companyMsg.getAddressName());
  519. tAddress.setfTypes(companyMsg.getAddressTypeId());
  520. TAddress address = tAddressMapper.selectAddressFName(tAddress);
  521. if (address != null){
  522. companyMsg.setfUpdateaddress(address.getfId().toString());
  523. }
  524. }
  525. }
  526. if (StringUtils.isNotEmpty(companyMsg.getfNo())){
  527. fleetCompanyMsgs.add(companyMsg);
  528. }
  529. }
  530. fleetCompanyMsgs = fleetCompanyMsgs.stream().filter(distinctByKey(TCntrnoExcel::getfNo)).collect(Collectors.toList());
  531. } catch (IOException e) {
  532. return AjaxResult.error("上传文件失败,请检查文件是否损坏");
  533. }
  534. return AjaxResult.success("success", fleetCompanyMsgs);
  535. }
  536. @Override
  537. @Transactional
  538. public AjaxResult batch(String tCntrno, LoginUser loginUser) {
  539. JSONArray jsonCrArray = JSONArray.parseArray(tCntrno);
  540. List<TCntrno> tCntrnoList = JSONObject.parseArray(jsonCrArray.toJSONString(), TCntrno.class);
  541. StringBuffer stringBuffer = new StringBuffer();
  542. if (CollectionUtils.isNotEmpty(tCntrnoList)) {
  543. for (TCntrno cntrno : tCntrnoList) {
  544. if (UserConstants.NOT_UNIQUE.equals(this.selectTCntrnoFNo(cntrno))) {
  545. stringBuffer.append(cntrno.getfNo() + "编号已存在,");
  546. continue;
  547. } else {
  548. cntrno.setCreateTime(DateUtils.getNowDate());
  549. cntrno.setCreateBy(SecurityUtils.getUsername());
  550. cntrno.setfUpdatetime(DateUtils.getNowDate());
  551. cntrno.setfStatus("T");
  552. tCntrnoMapper.insertTCntrno(cntrno);
  553. }
  554. }
  555. }
  556. if (StringUtils.isNotEmpty(stringBuffer)){
  557. return AjaxResult.success("success",stringBuffer.toString());
  558. }else {
  559. return AjaxResult.success();
  560. }
  561. }
  562. @Override
  563. public List<Map<String, Object>> getTcntrnoFno(TCntrno tCntrno) {
  564. return tCntrnoMapper.getTcntrnoFno(tCntrno);
  565. }
  566. @Override
  567. public AjaxResult importAirForceStation(MultipartFile file) throws Exception{
  568. List<TCntrno> tCntrno = new ArrayList<>();
  569. InputStream inputStream = null;
  570. inputStream = file.getInputStream();
  571. String originalFilename = file.getOriginalFilename();
  572. Workbook workbook = null;
  573. if (originalFilename.endsWith("xls")){
  574. workbook = WorkbookFactory.create(inputStream);
  575. }else if (originalFilename.endsWith("xlsx")){
  576. workbook = new XSSFWorkbook(inputStream);
  577. }
  578. Sheet sheet = workbook.getSheetAt(0);
  579. int line = 0;
  580. for (Row rows : sheet) {
  581. line++;
  582. if (rows.getRowNum() == 0) {
  583. continue;
  584. }
  585. TCntrno companyMsg = new TCntrno();
  586. for (int a = 0; a < rows.getPhysicalNumberOfCells(); a++) {
  587. Cell cell = rows.getCell(a);
  588. if (cell == null){
  589. continue;
  590. }
  591. String value = filter(sheet.getRow(0), CellReference.convertNumToColString(cell.getColumnIndex()));
  592. switch (value) {
  593. case "箱动态":
  594. //设置单元格类型
  595. cell.setCellType(CellType.STRING);
  596. companyMsg.setOpctnstatusName(cell.getStringCellValue());
  597. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  598. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱动态");
  599. }
  600. String fOpCTnsTaTus = sysDictDataMapper.selectDictValue("f_opctnstatus", cell.getStringCellValue());
  601. if (StringUtils.isEmpty(fOpCTnsTaTus)){
  602. return AjaxResult.error("系统缺少箱动态"+cell.getStringCellValue()+"请维护");
  603. }
  604. companyMsg.setfOpctnstatus(fOpCTnsTaTus);
  605. break;
  606. case "箱号":
  607. //设置单元格类型
  608. cell.setCellType(CellType.STRING);
  609. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  610. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱号");
  611. }
  612. companyMsg.setfNo(cell.getStringCellValue());
  613. break;
  614. case "空重":
  615. //设置单元格类型
  616. cell.setCellType(CellType.STRING);
  617. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  618. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少空重");
  619. }
  620. String fUpDaTeEf = sysDictDataMapper.selectDictValue("f_updateEF", cell.getStringCellValue());
  621. if (StringUtils.isEmpty(fUpDaTeEf)){
  622. return AjaxResult.error("系统缺少空重:"+cell.getStringCellValue()+"请维护");
  623. }
  624. companyMsg.setfUpdateef(fUpDaTeEf);
  625. companyMsg.setUpdateEFName(cell.getStringCellValue());
  626. break;
  627. case "动态日期":
  628. //设置单元格类型
  629. cell.setCellType(CellType.STRING);
  630. String dataFormatString = cell.getStringCellValue();
  631. if (StringUtils.isEmpty(dataFormatString)) {
  632. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少动态日期");
  633. }
  634. Date parse = null;
  635. try {
  636. parse = HSSFDateUtil.getJavaDate(Double.valueOf(dataFormatString));
  637. }catch (Exception e){
  638. SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  639. parse = simpleDateFormat.parse(dataFormatString);
  640. }
  641. companyMsg.setfUpdatetime(parse);
  642. break;
  643. case "船名":
  644. //设置单元格类型
  645. cell.setCellType(CellType.STRING);
  646. /*if (StringUtils.isEmpty(cell.getStringCellValue())) {
  647. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少船名");
  648. }*/
  649. companyMsg.setfVsl(cell.getStringCellValue());
  650. break;
  651. case "航次":
  652. //设置单元格类型
  653. cell.setCellType(CellType.STRING);
  654. /*if (StringUtils.isEmpty(cell.getStringCellValue())) {
  655. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少航次");
  656. }*/
  657. companyMsg.setfVoy(cell.getStringCellValue());
  658. break;
  659. case "重量":
  660. //设置单元格类型
  661. cell.setCellType(CellType.STRING);
  662. /*if (StringUtils.isEmpty(cell.getStringCellValue())) {
  663. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少重量");
  664. }*/
  665. BigDecimal bigDecimal = new BigDecimal(cell.getStringCellValue());
  666. companyMsg.setfBoxWeight(bigDecimal);
  667. break;
  668. case "地点类型 如: 堆场,码头":
  669. //设置单元格类型
  670. cell.setCellType(CellType.STRING);
  671. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  672. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少港口名称");
  673. }
  674. String fTypes = sysDictDataMapper.selectDictValue("f_types", cell.getStringCellValue());
  675. if (StringUtils.isEmpty(fTypes)){
  676. return AjaxResult.error("系统缺少地点类型"+cell.getStringCellValue()+"请维护");
  677. }
  678. companyMsg.setPort(fTypes);
  679. companyMsg.setPortName(cell.getStringCellValue());
  680. break;
  681. case "堆放地点":
  682. //设置单元格类型
  683. cell.setCellType(CellType.STRING);
  684. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  685. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少堆放地点");
  686. }
  687. companyMsg.setAddressName(cell.getStringCellValue());
  688. if (StringUtils.isEmpty(companyMsg.getPort())){
  689. return AjaxResult.error("缺少地点类型"+companyMsg.getPortName());
  690. }
  691. TAddress aLong = tAddressMapper.selectTAddressByfNameType(cell.getStringCellValue(), companyMsg.getPort());
  692. if (aLong == null){
  693. return AjaxResult.error("系统缺少类型为"+companyMsg.getPortName()+"的地点"+cell.getStringCellValue()+"请维护");
  694. }
  695. companyMsg.setfUpdateaddress(aLong.getfId().toString());
  696. break;
  697. case "提单号":
  698. //设置单元格类型
  699. cell.setCellType(CellType.STRING);
  700. /*if (StringUtils.isEmpty(cell.getStringCellValue())) {
  701. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少提单号");
  702. }*/
  703. companyMsg.setfMblno(cell.getStringCellValue());
  704. break;
  705. case "铅封号":
  706. //设置单元格类型
  707. cell.setCellType(CellType.STRING);
  708. /*if (StringUtils.isEmpty(cell.getStringCellValue())) {
  709. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少铅封号");
  710. }*/
  711. companyMsg.setfSealno(cell.getStringCellValue());
  712. break;
  713. case "是否箱损 如:好,坏":
  714. //设置单元格类型
  715. cell.setCellType(CellType.STRING);
  716. companyMsg.setCntrstatusName(cell.getStringCellValue());
  717. if (StringUtils.isEmpty(cell.getStringCellValue())) {
  718. return AjaxResult.error("Excel箱信息数据第" + line + "行数据缺少箱损状态");
  719. }
  720. String fCnTrsTaTus = sysDictDataMapper.selectDictValue("f_cntrstatus", cell.getStringCellValue());
  721. if (StringUtils.isEmpty(fCnTrsTaTus)){
  722. return AjaxResult.error("系统缺少箱状态"+cell.getStringCellValue()+"请维护");
  723. }
  724. companyMsg.setfCntrstatus(fCnTrsTaTus);
  725. break;
  726. case "箱损描述(备注)":
  727. //设置单元格类型
  728. cell.setCellType(CellType.STRING);
  729. companyMsg.setRemark(cell.getStringCellValue());
  730. break;
  731. }
  732. }
  733. tCntrno.add(companyMsg);
  734. }
  735. return AjaxResult.success("success", tCntrno);
  736. }
  737. @Override
  738. public List<BoxDistributionStatistics> boxDistributedStatistics() {
  739. List<BoxDistributionStatistics> list = new ArrayList<>();
  740. //先获取箱地址为港口信息
  741. List<TCntrno> boxPortMessage = tCntrnoMapper.getBoxPortMessage();
  742. //获取箱信息地址不为港口的信息
  743. List<TCntrno> addressMessageList = tCntrnoMapper.getBoxAddressMessage();
  744. //获取箱动态信息
  745. List<SysDictData> fOpcTnsTaTus = sysDictDataMapper.selectDictDataByType("f_opctnstatus");
  746. //获取箱空重状态
  747. List<SysDictData> fUpdateEF = sysDictDataMapper.selectDictDataByType("f_updateEF");
  748. //获取箱好坏状态
  749. List<SysDictData> fCnTrStatus = sysDictDataMapper.selectDictDataByType("f_cntrstatus");
  750. //在获取港口下的堆场对应的箱信息
  751. if (CollectionUtils.isNotEmpty(boxPortMessage) && CollectionUtils.isNotEmpty(fOpcTnsTaTus)){
  752. for (TCntrno cntrno : boxPortMessage) {
  753. BoxDistributionStatistics boxDistributionStatistics = new BoxDistributionStatistics();
  754. boxDistributionStatistics.setHaven(cntrno.getAddressName());
  755. List<BoxAddressMessage> boxAddressMessageList = new ArrayList<>();
  756. if (CollectionUtils.isNotEmpty(addressMessageList)){
  757. for (TCntrno trno : addressMessageList) {
  758. if (cntrno.getAddressName().equals(trno.getPortName()) && !trno.getAddressName().equals("在船")){
  759. List<BoxMessage> boxMessageList = new ArrayList<>();
  760. BoxAddressMessage boxAddressMessage = new BoxAddressMessage();
  761. boxAddressMessage.setAddress(trno.getAddressName());
  762. boxAddressMessage.setNumberSize(fOpcTnsTaTus.size()+fUpdateEF.size()+fCnTrStatus.size());
  763. List<BoxMessage> opcTnsTaTus = this.getOpcTnsTaTus(fOpcTnsTaTus, trno);//获取调箱状态的箱新
  764. List<BoxMessage> updateEF = this.getUpdateEF(fUpdateEF, trno);//获取空重的箱信息
  765. List<BoxMessage> cnTrStatus = this.getCnTrStatus(fCnTrStatus, trno);//获取好坏的箱信息
  766. if (CollectionUtils.isNotEmpty(opcTnsTaTus)){
  767. boxMessageList.addAll(opcTnsTaTus);
  768. }
  769. if (CollectionUtils.isNotEmpty(updateEF)){
  770. boxMessageList.addAll(updateEF);
  771. }if (CollectionUtils.isNotEmpty(cnTrStatus)){
  772. boxMessageList.addAll(cnTrStatus);
  773. }
  774. boxAddressMessage.setBoxMessages(boxMessageList);
  775. boxAddressMessageList.add(boxAddressMessage);
  776. }else if (cntrno.getAddressName().equals(trno.getPortName()) && trno.getAddressName().equals("在船")){
  777. //获取在船的备注
  778. List<TCntrno> boxRemark = tCntrnoMapper.getBoxRemark(trno.getfUpdateaddress());
  779. if (CollectionUtils.isNotEmpty(boxRemark)){
  780. for (TCntrno tCntrno : boxRemark) {
  781. List<BoxMessage> boxMessageList = new ArrayList<>();
  782. BoxAddressMessage boxAddressMessage = new BoxAddressMessage();
  783. boxAddressMessage.setAddress(trno.getAddressName()+tCntrno.getRemark());
  784. boxAddressMessage.setNumberSize(fOpcTnsTaTus.size()+fUpdateEF.size()+fCnTrStatus.size());
  785. List<BoxMessage> opcTnsTaTus = this.getOpcTnsTaTus(fOpcTnsTaTus, trno);//获取调箱状态的箱新
  786. List<BoxMessage> updateEF = this.getUpdateEF(fUpdateEF, trno);//获取空重的箱信息
  787. List<BoxMessage> cnTrStatus = this.getCnTrStatus(fCnTrStatus, trno);//获取好坏的箱信息
  788. if (CollectionUtils.isNotEmpty(opcTnsTaTus)){
  789. boxMessageList.addAll(opcTnsTaTus);
  790. }
  791. if (CollectionUtils.isNotEmpty(updateEF)){
  792. boxMessageList.addAll(updateEF);
  793. }if (CollectionUtils.isNotEmpty(cnTrStatus)){
  794. boxMessageList.addAll(cnTrStatus);
  795. }
  796. boxAddressMessage.setBoxMessages(boxMessageList);
  797. boxAddressMessageList.add(boxAddressMessage);
  798. }
  799. }
  800. }
  801. }
  802. }
  803. boxDistributionStatistics.setBoxAddressMessages(boxAddressMessageList);
  804. boxDistributionStatistics.setNumber(fOpcTnsTaTus.size()*boxAddressMessageList.size()+fUpdateEF.size()*boxAddressMessageList.size()+fCnTrStatus.size()*boxAddressMessageList.size());
  805. list.add(boxDistributionStatistics);
  806. }
  807. }
  808. return list;
  809. }
  810. @Override
  811. public List<Map<String, Object>> homeBox() {
  812. List<Map<String, Object>> list = tCntrnoMapper.homeBox();
  813. list.get(list.size() - 1).put("details", tCntrnoMapper.homeBoxCount());
  814. return list;
  815. }
  816. @Override
  817. @Transactional
  818. public int updateHire(TCntrno tCntrno) {
  819. return tCntrnoMapper.updateHire(tCntrno);
  820. }
  821. /**
  822. * set字段
  823. *
  824. * @param tCntrno
  825. * @return
  826. */
  827. public TCntrtracking setfield(TCntrno tCntrno) {
  828. TCntrtracking tCntrtracking = new TCntrtracking();
  829. BeanUtils.copyProperties(tCntrno, tCntrtracking);
  830. tCntrtracking.setfId(null);
  831. return tCntrtracking;
  832. }
  833. public List<String> GetMapKey(List<Map<String, Object>> listResult) {
  834. if ((listResult != null) && (!listResult.isEmpty())) {
  835. List listKey = new ArrayList();
  836. Map mapResult = (Map) listResult.get(0);
  837. Set mapKeySet = mapResult.keySet();
  838. String listHead = "";
  839. Iterator iteratorKey = mapKeySet.iterator();
  840. while (iteratorKey.hasNext()) {
  841. listHead = iteratorKey.next().toString();
  842. listKey.add(listHead);
  843. }
  844. return listKey;
  845. }
  846. return null;
  847. }
  848. private static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
  849. Map<Object, Boolean> seen = new ConcurrentHashMap<>();
  850. return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
  851. }
  852. /**
  853. * 获取调箱动态的箱信息
  854. * @param fOpcTnsTaTus
  855. * @param trno
  856. * @return
  857. */
  858. public List<BoxMessage> getOpcTnsTaTus(List<SysDictData> fOpcTnsTaTus,TCntrno trno){
  859. List<BoxMessage> boxMessageList = new ArrayList<>();
  860. if (CollectionUtils.isNotEmpty(fOpcTnsTaTus)){
  861. for (SysDictData opcTnsTaTus : fOpcTnsTaTus) {
  862. TCntrno tro = new TCntrno();
  863. BoxMessage boxMessage = new BoxMessage();
  864. tro.setfUpdateaddress(trno.getfUpdateaddress());
  865. tro.setfOpctnstatus(opcTnsTaTus.getDictValue());
  866. BoxMessage message = tCntrnoMapper.boxDistributionStatistics(tro);
  867. if (message != null){
  868. boxMessage = message;
  869. }
  870. boxMessage.setOpcTnStatus(opcTnsTaTus.getDictLabel());
  871. boxMessage.setUNIT(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  872. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()+boxMessage.getFORTYGP()
  873. +boxMessage.getFORTYHC()+boxMessage.getFORTYHR()+boxMessage.getFORTYOT()+boxMessage.getFORTYTK());
  874. boxMessage.setTEU(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  875. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()*2+boxMessage.getFORTYGP()*2
  876. +boxMessage.getFORTYHC()*2+boxMessage.getFORTYHR()*2+boxMessage.getFORTYOT()*2+boxMessage.getFORTYTK()*2);
  877. boxMessageList.add(boxMessage);
  878. }
  879. }
  880. return boxMessageList;
  881. }
  882. public List<BoxMessage> getUpdateEF(List<SysDictData> fUpdateEF,TCntrno trno){
  883. List<BoxMessage> boxMessageList = new ArrayList<>();
  884. if (CollectionUtils.isNotEmpty(fUpdateEF)){
  885. for (SysDictData sysDictData : fUpdateEF) {
  886. TCntrno tro = new TCntrno();
  887. BoxMessage boxMessage = new BoxMessage();
  888. tro.setfUpdateaddress(trno.getfUpdateaddress());
  889. tro.setfUpdateef(sysDictData.getDictValue());
  890. BoxMessage message = tCntrnoMapper.boxDistributionStatistics(tro);
  891. if (message != null){
  892. boxMessage = message;
  893. }
  894. boxMessage.setOpcTnStatus(sysDictData.getDictLabel());
  895. boxMessage.setUNIT(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  896. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()+boxMessage.getFORTYGP()
  897. +boxMessage.getFORTYHC()+boxMessage.getFORTYHR()+boxMessage.getFORTYOT()+boxMessage.getFORTYTK());
  898. boxMessage.setTEU(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  899. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()*2+boxMessage.getFORTYGP()*2
  900. +boxMessage.getFORTYHC()*2+boxMessage.getFORTYHR()*2+boxMessage.getFORTYOT()*2+boxMessage.getFORTYTK()*2);
  901. boxMessageList.add(boxMessage);
  902. }
  903. }
  904. return boxMessageList;
  905. }
  906. public List<BoxMessage> getCnTrStatus(List<SysDictData> fCnTrStatus,TCntrno trno){
  907. List<BoxMessage> boxMessageList = new ArrayList<>();
  908. if (CollectionUtils.isNotEmpty(fCnTrStatus)){
  909. for (SysDictData cnTrStatus : fCnTrStatus) {
  910. TCntrno tro = new TCntrno();
  911. BoxMessage boxMessage = new BoxMessage();
  912. tro.setfUpdateaddress(trno.getfUpdateaddress());
  913. tro.setfCntrstatus(cnTrStatus.getDictValue());
  914. BoxMessage message = tCntrnoMapper.boxDistributionStatistics(tro);
  915. if (message != null){
  916. boxMessage = message;
  917. }
  918. boxMessage.setOpcTnStatus(cnTrStatus.getDictLabel());
  919. boxMessage.setUNIT(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  920. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()+boxMessage.getFORTYGP()
  921. +boxMessage.getFORTYHC()+boxMessage.getFORTYHR()+boxMessage.getFORTYOT()+boxMessage.getFORTYTK());
  922. boxMessage.setTEU(boxMessage.getTWENTYFR() +boxMessage.getTWENTYGP() + boxMessage.getTWENTYOT()
  923. +boxMessage.getTWENTYRF()+boxMessage.getTWENTYTK() +boxMessage.getFORTYFR()*2+boxMessage.getFORTYGP()*2
  924. +boxMessage.getFORTYHC()*2+boxMessage.getFORTYHR()*2+boxMessage.getFORTYOT()*2+boxMessage.getFORTYTK()*2);
  925. boxMessageList.add(boxMessage);
  926. }
  927. }
  928. return boxMessageList;
  929. }
  930. }