BmstruckStatementServiceImpl.java 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.JoinApiFeign;
  3. import com.steerinfo.dil.mapper.BmstruckCheckMapper;
  4. import com.steerinfo.dil.mapper.BmstruckDetailsOrderMapper;
  5. import com.steerinfo.dil.mapper.BmstruckDetailsStatementMapper;
  6. import com.steerinfo.dil.model.BmstruckCheck;
  7. import com.steerinfo.dil.model.BmstruckDetailsOrder;
  8. import com.steerinfo.dil.model.BmstruckDetailsStatement;
  9. import com.steerinfo.dil.util.DataChange;
  10. import com.steerinfo.dil.util.EASUtil;
  11. import com.steerinfo.dil.util.NoUtil;
  12. import com.steerinfo.dil.model.BmstruckStatement;
  13. import com.steerinfo.dil.mapper.BmstruckStatementMapper;
  14. import com.steerinfo.dil.service.IBmstruckStatementService;
  15. import org.springframework.beans.factory.annotation.Autowired;
  16. import org.springframework.stereotype.Service;
  17. import org.springframework.transaction.annotation.Transactional;
  18. import java.text.DecimalFormat;
  19. import java.util.*;
  20. import java.math.BigDecimal;
  21. /**
  22. * BmstruckStatement服务实现:
  23. *
  24. * @author generator
  25. * @version 1.0-SNAPSHORT 2021-10-15 06:20
  26. * 类描述
  27. * 修订历史:
  28. * 日期:2021-10-15
  29. * 作者:generator
  30. * 参考:
  31. * 描述:BmstruckStatement服务实现
  32. * @Copyright 湖南视拓信息技术股份有限公司. All rights reserved.
  33. * @see null
  34. */
  35. @Service(value = "bmstruckStatementService")
  36. public class BmstruckStatementServiceImpl implements IBmstruckStatementService {
  37. @Autowired
  38. BmstruckStatementMapper bmstruckStatementMapper;
  39. @Autowired
  40. BmstruckDetailsStatementMapper bmstruckDetailsStatementMapper;
  41. @Autowired
  42. BmstruckDetailsOrderMapper bmstruckDetailsOrderMapper;
  43. @Autowired
  44. BmstruckCheckMapper bmstruckCheckMapper;
  45. @Autowired
  46. NoUtil noUtil;
  47. @Autowired
  48. JoinApiFeign joinApiFeign;
  49. @Autowired
  50. EASUtil easUtil;
  51. /**
  52. * 展示计费账单
  53. *
  54. * @param mapValue
  55. * @return
  56. */
  57. @Override
  58. public List<Map<String, Object>> getTruckStatementList(Map<String, Object> mapValue) {
  59. List<Map<String, Object>> mapList = bmstruckStatementMapper.getTruckStatementList(mapValue);
  60. return mapList;
  61. }
  62. /**
  63. * 生成汽运账单
  64. *
  65. * @param map
  66. * @return
  67. */
  68. @Transactional
  69. @Override
  70. public int addTruckStatement(Map<String, Object> map) throws Exception {
  71. BigDecimal excludeTax = DataChange.dataToBigDecimal( map.get("excludeTax"));
  72. String url = map.get("url").toString();
  73. //查询统计信息
  74. //List<Integer> orderList = (List<Integer>) map.get("orderList");
  75. //HashSet set = new HashSet<>(orderList);
  76. //map.put("orderList",set);
  77. Map<String,Object> count = bmstruckStatementMapper.getDetails(map);
  78. //查询单位
  79. List<Map<String, Object>> companys = bmstruckStatementMapper.getDetailIds(map);
  80. if(companys.size()>1){
  81. List<Map<String,Object>> saleAreaList = bmstruckStatementMapper.getSaleAreaList(map);
  82. if (saleAreaList.size() > 1) {
  83. throw new Exception("存在多个承运商和收货客户或一票制多个片区和多个收款客户!请检查所勾选的订单!");
  84. }else if(saleAreaList.size() == 1 && saleAreaList.get(0) != null) {
  85. if(!"钢材工程组".equals(saleAreaList.get(0).get("saleArea"))) {
  86. throw new Exception("非一票制禁止上传多家客户");
  87. }
  88. String receiverCustomer = saleAreaList.get(0).get("receiverCustomer") + "";
  89. BigDecimal receiverCustomerId = bmstruckStatementMapper.getReceiverCustomerId(receiverCustomer);
  90. companys.get(0).put("consigneeId",receiverCustomerId);
  91. }
  92. }else if(companys.size() == 0){
  93. throw new Exception("没有查询到承运商和收货客户!");
  94. }
  95. //校验是否已经绑定账单
  96. List<BigDecimal> oldStatementIds= bmstruckStatementMapper.getStatementIds(map);
  97. if(oldStatementIds.size()>0){
  98. //删除所有订单
  99. bmstruckStatementMapper.batchDelete(oldStatementIds);
  100. //取消所有绑定
  101. bmstruckStatementMapper.updateAllBind(oldStatementIds);
  102. }
  103. BmstruckStatement bmstruckStatement = new BmstruckStatement();
  104. bmstruckStatement.setCarNum(DataChange.dataToBigDecimal(count.get("carNum")).setScale(2,BigDecimal.ROUND_HALF_UP));
  105. bmstruckStatement.setSumAmount(DataChange.dataToBigDecimal(count.get("sumAmount")).setScale(2,BigDecimal.ROUND_HALF_UP));
  106. bmstruckStatement.setConsigneeId(DataChange.dataToBigDecimal(companys.get(0).get("consigneeId")));
  107. bmstruckStatement.setCarrierId(DataChange.dataToBigDecimal(companys.get(0).get("carrierId")));
  108. bmstruckStatement.setStatementExcludTax(excludeTax.setScale(2,BigDecimal.ROUND_HALF_UP));
  109. String statementTime=""+map.get("statementTime");
  110. String statementEndTime = "" + map.get("statementEndTime");
  111. bmstruckStatement.setStatementTime(new Date(Long.parseLong(statementTime)));
  112. bmstruckStatement.setStatementEndTime(new Date(Long.parseLong(statementEndTime)));
  113. bmstruckStatement.setPhoto(url);
  114. // 汽运账单主键
  115. BigDecimal statementId = bmstruckStatementMapper.selectStatementId();
  116. bmstruckStatement.setStatementId(statementId);
  117. // 汽运账单编号
  118. String statementNumber = noUtil.setResultNo("QYZD", statementId);
  119. bmstruckStatement.setStatementNumber(statementNumber);
  120. // 支付单位
  121. bmstruckStatement.setStatementPaymentUnit("四川达州钢铁集团有限责任公司");
  122. // 备注
  123. bmstruckStatement.setStatementRemark("汽运费账单");
  124. // 常规字段
  125. bmstruckStatement.setInsertTime(new Date());
  126. bmstruckStatement.setInsertUsername(map.get("userId").toString());
  127. bmstruckStatement.setUpdateTime(new Date());
  128. bmstruckStatement.setUpdateUsername("admin");
  129. bmstruckStatement.setInsertUpdateRemark("无");
  130. int code = bmstruckStatementMapper.insertSelective(bmstruckStatement);
  131. //详单绑定账单ID
  132. map.put("statementId",statementId);
  133. bmstruckStatementMapper.batchUpdateDetails(map);
  134. return code;
  135. }
  136. /**
  137. * 展示账单下的详单
  138. *
  139. * @param mapVal
  140. * @return
  141. */
  142. @Override
  143. public List<Map<String, Object>> getSaleTruckStatementDetailsOrderList(Map<String, Object> mapVal) {
  144. return bmstruckStatementMapper.getSaleTruckStatementDetailsOrderList(mapVal);
  145. }
  146. /**
  147. * 新增内转汽运账单
  148. *
  149. * @param mapList
  150. * @param orderType
  151. * @return
  152. */
  153. @Override
  154. public int addConvertedTruckStatement(List<Map<String, Object>> mapList, Integer orderType) {
  155. //orderType:1:计时,2:计数,3:计重,4:包月
  156. // 生成汽运账单主键
  157. BigDecimal statementId = bmstruckStatementMapper.selectStatementId();
  158. // 创建账单实体
  159. BmstruckStatement bmstruckStatement = new BmstruckStatement();
  160. // 常规字段
  161. bmstruckStatement.setInsertTime(new Date());
  162. bmstruckStatement.setInsertUsername("admin");
  163. bmstruckStatement.setInsertUpdateRemark("无");
  164. // 计算账单总金额
  165. Double doubleTotalAmount = new Double(0);
  166. //将详单id与账单id绑定至中间表
  167. for (Map<String, Object> map : mapList) {
  168. // 中间表主键
  169. BigDecimal detailsStatementId = bmstruckDetailsStatementMapper.selectDetailsStatementId();
  170. // 详单id
  171. BigDecimal detailsId = new BigDecimal((Integer) map.get("detailsId"));
  172. // 获取详单信息
  173. BmstruckDetailsOrder bmstruckDetailsOrder = bmstruckDetailsOrderMapper.selectByPrimaryKey(detailsId);
  174. // 将该详单状态变为已生成账单
  175. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(1));
  176. bmstruckDetailsOrder.setUpdateTime(new Date());
  177. bmstruckDetailsOrder.setUpdateUsername("admin");
  178. // 修改详单信息
  179. bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  180. // 新增中间表实体
  181. BmstruckDetailsStatement bmstruckDetailsStatement = new BmstruckDetailsStatement();
  182. //设置主键
  183. bmstruckDetailsStatement.setDetailsStatementId(detailsStatementId);
  184. bmstruckDetailsStatement.setStatementId(statementId);
  185. bmstruckDetailsStatement.setDetailsId(detailsId);
  186. // 设置常规字段
  187. bmstruckDetailsStatement.setInsertTime(new Date());
  188. bmstruckDetailsStatement.setInsertUsername("admin");
  189. bmstruckDetailsStatement.setInsertUpdateRemark("无");
  190. BigDecimal detailsAmount = new BigDecimal((Double) map.get("detailsAmount"));
  191. Double detailsAmountDouble = Double.valueOf(detailsAmount.toString());
  192. doubleTotalAmount += detailsAmountDouble;
  193. bmstruckDetailsStatementMapper.insertSelective(bmstruckDetailsStatement);
  194. }
  195. if (orderType == 1) {
  196. // 备注
  197. bmstruckStatement.setStatementRemark("计时汽运费账单");
  198. } else if (orderType == 2) {
  199. // 备注
  200. bmstruckStatement.setStatementRemark("计数汽运费账单");
  201. } else if (orderType == 3) {
  202. // 备注
  203. bmstruckStatement.setStatementRemark("计重汽运费账单");
  204. } else if (orderType == 4) {
  205. // 备注
  206. bmstruckStatement.setStatementRemark("包月汽运费账单");
  207. }
  208. bmstruckStatement.setStatementExcludTax(new BigDecimal(doubleTotalAmount));
  209. return bmstruckStatementMapper.insertSelective(bmstruckStatement);
  210. }
  211. @Override
  212. public int delete(BigDecimal statementId) {
  213. //取消所有绑定
  214. List<BigDecimal> oldStatementIds=new ArrayList<>();
  215. oldStatementIds.add(statementId);
  216. bmstruckStatementMapper.updateAllBind(oldStatementIds);
  217. //删除账单
  218. return bmstruckStatementMapper.deleteByPrimaryKey(statementId);
  219. }
  220. @Override
  221. public int update(BigDecimal statementId) {
  222. BmstruckStatement bmstruckStatement = new BmstruckStatement();
  223. bmstruckStatement.setStatementType(new BigDecimal(1));
  224. bmstruckStatement.setUpdateTime(new Date());
  225. bmstruckStatement.setUpdateUsername("admin");
  226. return bmstruckStatementMapper.updateByPrimaryKeySelective(bmstruckStatement);
  227. }
  228. @Override
  229. public List<Map<String, Object>> findDetailsForStatement(Map<String, Object> map) {
  230. return bmstruckStatementMapper.findDetailsForStatement(map);
  231. }
  232. @Override
  233. public String getStatementPhoto(BigDecimal statementId) {
  234. return bmstruckStatementMapper.selectByPrimaryKey(statementId).getPhoto();
  235. }
  236. }