BmstruckDetailsOrderServiceImpl.java 70 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507
  1. package com.steerinfo.dil.service.impl;
  2. import com.steerinfo.dil.feign.AmsFeign;
  3. import com.steerinfo.dil.feign.JoinApiFeign;
  4. import com.steerinfo.dil.feign.OmsFeign;
  5. import com.steerinfo.dil.mapper.AmsContractTransportPriceMapper;
  6. import com.steerinfo.dil.mapper.BmstruckDetailsOrderMapper;
  7. import com.steerinfo.dil.mapper.OmstruckOrderMapper;
  8. import com.steerinfo.dil.model.AmsContractTransportPrice;
  9. import com.steerinfo.dil.model.BmstruckDetailsOrder;
  10. import com.steerinfo.dil.model.OmstruckOrder;
  11. import com.steerinfo.dil.service.IBmstruckDetailsOrderService;
  12. import com.steerinfo.dil.util.DataChange;
  13. import com.steerinfo.dil.util.EASUtil;
  14. import com.steerinfo.dil.util.NoUtil;
  15. import com.steerinfo.dil.util.SaleLogUtil;
  16. import io.swagger.models.auth.In;
  17. import org.apache.shiro.crypto.hash.Hash;
  18. import org.junit.Test;
  19. import org.springframework.beans.factory.annotation.Autowired;
  20. import org.springframework.stereotype.Service;
  21. import org.springframework.transaction.annotation.Transactional;
  22. import javax.annotation.Resource;
  23. import java.lang.reflect.Array;
  24. import java.math.BigDecimal;
  25. import java.math.RoundingMode;
  26. import java.text.DecimalFormat;
  27. import java.util.*;
  28. import java.util.regex.Matcher;
  29. import java.util.regex.Pattern;
  30. /**
  31. * @Description:
  32. * @Author:HuJianGuo
  33. * @GreateTime:2021/9/24 17:34
  34. * @Version:V2.0
  35. */
  36. @Service
  37. public class BmstruckDetailsOrderServiceImpl implements IBmstruckDetailsOrderService {
  38. @Autowired
  39. BmstruckDetailsOrderMapper bmstruckDetailsOrderMapper;
  40. @Autowired
  41. BmstruckFormulaServiceImpl bmstruckFormulaService;
  42. @Autowired
  43. NoUtil noUtil;
  44. @Autowired
  45. JoinApiFeign joinApiFeign;
  46. @Autowired
  47. EASUtil easUtil;
  48. @Autowired
  49. OmstruckOrderMapper omstruckOrderMapper;
  50. @Autowired
  51. OmsFeign omsFeign;
  52. @Autowired
  53. AmsFeign amsFeign;
  54. @Autowired
  55. SaleLogUtil saleLogUtil;
  56. @Autowired
  57. AmsContractTransportPriceMapper amsContractTransportPriceMapper;
  58. //以下订单类型是需要算计量实绩的
  59. final private List<Integer> inwardTypeList = Arrays.asList(10,11,15,16,23,24,20,25);
  60. //以下订单类型是需要根据线路去匹配承运起止范围以及物资
  61. final private List<Integer> toLineAndMaterial = Arrays.asList(10,20,23,24);
  62. //以下订单类型是需要去根据固定承运起止范围以及物资
  63. final private List<Integer> fixLineList = Arrays.asList(15,16);
  64. //以下订单类型是钢材
  65. final private List<Integer> steelTypeList = Arrays.asList(25);
  66. /**
  67. * 展示汽运详单列表
  68. * @param mapVal
  69. * @return
  70. */
  71. @Override
  72. public List<Map<String, Object>> getTruckDetailsOrderList(Map<String, Object> mapVal) {
  73. Integer orderType = (Integer) mapVal.get("orderType");
  74. List<Map<String, Object>> truckDetailsOrderList;
  75. if (orderType <= 3 && orderType >= 1) {
  76. truckDetailsOrderList = bmstruckDetailsOrderMapper.getSaleTruckDetailsOrderList(mapVal);
  77. }
  78. else {
  79. truckDetailsOrderList = bmstruckDetailsOrderMapper.getTruckDetailsOrderList(mapVal);
  80. }
  81. return truckDetailsOrderList;
  82. }
  83. /**
  84. * 新增详单
  85. * @param orderId
  86. * @return
  87. */
  88. @Override
  89. public synchronized int insertSelective(BigDecimal orderId) throws Exception {
  90. System.out.println(orderId + "生成计费详单");
  91. List<Map<String,Object>> weightTaskResultIdList = bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId);
  92. //根据该id寻找相同的订单号
  93. List<BigDecimal> orderIds = bmstruckDetailsOrderMapper.getOrderIds(orderId);
  94. for (BigDecimal orderId1 : orderIds) {
  95. weightTaskResultIdList.addAll(bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId1));
  96. }
  97. Map<String,Object> priceMap = getPriceId(orderId);
  98. if (priceMap == null || priceMap.size() == 0) {
  99. return 0;
  100. }
  101. BigDecimal priceId = (BigDecimal) priceMap.get("priceId");
  102. if (priceId.intValue() == 0) {
  103. return 0;
  104. }
  105. int result = 0;
  106. //优先根据计量批次新增详单
  107. List<Map<String,Object>> batchIdList = bmstruckDetailsOrderMapper.getWeightBatchIds(orderId);
  108. if(batchIdList.size()>0){
  109. for(Map<String, Object> map : batchIdList){
  110. if(map == null) {
  111. System.out.println("空Map,释放");
  112. continue;
  113. }
  114. BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
  115. //判断该批次有没有结算数据
  116. if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrderByBatch(weightBatchId) > 0 ){
  117. continue;
  118. }
  119. try {
  120. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  121. BigDecimal priceValue = getPriceValue(priceId);
  122. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  123. // 得到计费公式
  124. String formula_string = null;
  125. if (orderType.intValue() == 3) {
  126. // 得到采购汽运计费公式
  127. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(8));
  128. // 替换采购汽运运计算公式
  129. formula_string = formula_string.replace("到厂计量湿吨",netWeight.toString())
  130. .replace("单价",priceValue.toString());
  131. }
  132. if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
  133. // 得到销售10km差距内的汽运计费公式
  134. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  135. // 替换采购汽运运计算公式
  136. formula_string = formula_string.replace("运输单价",priceValue.toString())
  137. .replace("物资净重",netWeight.toString());
  138. }
  139. String s = toSufExpr(formula_string);
  140. BigDecimal detailsAmountOld = calSufExpr(s);
  141. Double amount = detailsAmountOld.doubleValue();
  142. BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
  143. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  144. if (orderType.intValue() == 3) {
  145. BigDecimal purchaseOrderId = getFormulaMembers(orderId);
  146. bmstruckDetailsOrder.setPurchaseOrderId(purchaseOrderId);
  147. }
  148. if (orderType.intValue() == 2 || orderType.intValue() == 1) {
  149. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  150. }
  151. // 得到最大id
  152. BigDecimal detailsId = selectMaxId();
  153. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  154. bmstruckDetailsOrder.setDetailsId(detailsId);
  155. bmstruckDetailsOrder.setWeightBatchId(weightBatchId);
  156. bmstruckDetailsOrder.setOrderId(orderId);
  157. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  158. bmstruckDetailsOrder.setPriceId(priceId);
  159. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  160. bmstruckDetailsOrder.setDetailsTime(new Date());
  161. // 设置常规字段
  162. bmstruckDetailsOrder.setInsertTime(new Date());
  163. bmstruckDetailsOrder.setUpdateTime(new Date());
  164. bmstruckDetailsOrder.setInsertUsername("admin");
  165. bmstruckDetailsOrder.setUpdateUsername("admin");
  166. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  167. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  168. }catch (Exception e){
  169. //不打印给控制台(有可能是正常情况)
  170. e.printStackTrace();
  171. }
  172. }
  173. return result;
  174. }
  175. //根据计量实绩新增详单
  176. for (Map<String, Object> map : weightTaskResultIdList) {
  177. if(map == null) {
  178. System.out.println("空Map,释放");
  179. continue;
  180. }
  181. BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
  182. if(weightTaskResultId == null) {
  183. System.out.println("计量实绩Id为空,释放");
  184. continue;
  185. }
  186. //判断该计量实绩有没有结算数据
  187. if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrder(weightTaskResultId) > 0 ){
  188. continue;
  189. }
  190. BigDecimal netWeightIsNull = bmstruckDetailsOrderMapper.getNetWeight(weightTaskResultId);
  191. if (netWeightIsNull == null) {
  192. System.out.println("没有计量实绩,不生成结算数据:" + orderId);
  193. continue;
  194. }
  195. //BigDecimal detailsAmountOld=new BigDecimal(0);
  196. try {
  197. BigDecimal detailsAmountOld = generateTruckFees(orderId, weightTaskResultId);
  198. Double amount = detailsAmountOld.doubleValue();
  199. BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
  200. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  201. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  202. if (orderType.intValue() == 3) {
  203. BigDecimal purchaseOrderId = getFormulaMembers(orderId);
  204. bmstruckDetailsOrder.setPurchaseOrderId(purchaseOrderId);
  205. }
  206. if (orderType.intValue() == 2 || orderType.intValue() == 1) {
  207. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  208. }
  209. // 得到最大id
  210. BigDecimal detailsId = selectMaxId();
  211. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  212. bmstruckDetailsOrder.setDetailsId(detailsId);
  213. bmstruckDetailsOrder.setWeightTaskResultId(weightTaskResultId);
  214. bmstruckDetailsOrder.setOrderId(orderId);
  215. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  216. bmstruckDetailsOrder.setPriceId(priceId);
  217. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  218. bmstruckDetailsOrder.setDetailsTime(new Date());
  219. // 设置常规字段
  220. bmstruckDetailsOrder.setInsertTime(new Date());
  221. bmstruckDetailsOrder.setUpdateTime(new Date());
  222. bmstruckDetailsOrder.setInsertUsername("admin");
  223. bmstruckDetailsOrder.setUpdateUsername("admin");
  224. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  225. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  226. }catch (Exception e){
  227. //不打印给控制台(有可能是正常情况)
  228. e.printStackTrace();
  229. }
  230. }
  231. return result;
  232. }
  233. /**
  234. * 新增详单(只为计费详单修改数据时才使用)
  235. * @param orderId
  236. * @return
  237. */
  238. @Override
  239. public synchronized int insertSelectiveNew(BigDecimal orderId) throws Exception {
  240. List<Map<String,Object>> weightTaskResultIdList = bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId);
  241. System.out.println("根据运单查询到的计量实绩数据为," + weightTaskResultIdList);
  242. Map<String,Object> priceMap = getPriceId(orderId);
  243. System.out.println("根据运单查询到单价数据为," + priceMap);
  244. if (priceMap == null || priceMap.size() == 0 || DataChange.dataToBigDecimal(priceMap.get("priceId")).intValue() == 0) {
  245. return 0;
  246. }
  247. BigDecimal priceId = (BigDecimal) priceMap.get("priceId");
  248. //if (priceId.intValue() == 0) {
  249. // return 0;
  250. //}
  251. int result = 0;
  252. //优先根据计量批次新增详单
  253. List<Map<String,Object>> batchIdList = bmstruckDetailsOrderMapper.getWeightBatchIds(orderId);
  254. if(batchIdList.size()>0){
  255. for(Map<String, Object> map : batchIdList){
  256. if(map == null) {
  257. System.out.println("空Map,释放");
  258. continue;
  259. }
  260. BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
  261. //判断该批次有没有结算数据
  262. if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrderByBatch(weightBatchId) > 0 ){
  263. continue;
  264. }
  265. try {
  266. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  267. BigDecimal priceValue = getPriceValue(priceId);
  268. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  269. // 得到计费公式
  270. String formula_string = null;
  271. if (orderType.intValue() == 3) {
  272. // 得到采购汽运计费公式
  273. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(8));
  274. // 替换采购汽运运计算公式
  275. formula_string = formula_string.replace("到厂计量湿吨",netWeight.toString())
  276. .replace("单价",priceValue.toString());
  277. }
  278. if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
  279. // 得到销售10km差距内的汽运计费公式
  280. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  281. // 替换采购汽运运计算公式
  282. formula_string = formula_string.replace("运输单价",priceValue.toString())
  283. .replace("物资净重",netWeight.toString());
  284. }
  285. String s = toSufExpr(formula_string);
  286. BigDecimal detailsAmountOld = calSufExpr(s);
  287. Double amount = detailsAmountOld.doubleValue();
  288. BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
  289. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  290. if (orderType.intValue() == 3) {
  291. BigDecimal purchaseOrderId = getFormulaMembers(orderId);
  292. bmstruckDetailsOrder.setPurchaseOrderId(purchaseOrderId);
  293. }
  294. if (orderType.intValue() == 2 || orderType.intValue() == 1) {
  295. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  296. }
  297. // 得到最大id
  298. BigDecimal detailsId = selectMaxId();
  299. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  300. bmstruckDetailsOrder.setDetailsId(detailsId);
  301. bmstruckDetailsOrder.setWeightBatchId(weightBatchId);
  302. bmstruckDetailsOrder.setOrderId(orderId);
  303. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  304. bmstruckDetailsOrder.setPriceId(priceId);
  305. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  306. bmstruckDetailsOrder.setDetailsTime(new Date());
  307. // 设置常规字段
  308. bmstruckDetailsOrder.setInsertTime(new Date());
  309. bmstruckDetailsOrder.setUpdateTime(new Date());
  310. bmstruckDetailsOrder.setInsertUsername("admin");
  311. bmstruckDetailsOrder.setUpdateUsername("admin");
  312. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  313. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  314. }catch (Exception e){
  315. //不打印给控制台(有可能是正常情况)
  316. e.printStackTrace();
  317. }
  318. }
  319. return result;
  320. }
  321. for (Map<String, Object> map : weightTaskResultIdList) {
  322. if(map == null) {
  323. System.out.println("map为空");
  324. continue;
  325. }
  326. BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
  327. if (weightTaskResultId == null) {
  328. System.out.println("计量实绩Id为空");
  329. continue;
  330. }
  331. //判断该计量实绩有没有结算数据
  332. if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrder(weightTaskResultId) > 0 ){
  333. continue;
  334. }
  335. BigDecimal netWeightIsNull = bmstruckDetailsOrderMapper.getNetWeight(weightTaskResultId);
  336. if (netWeightIsNull == null) {
  337. System.out.println("没有计量实绩,不生成结算数据:" + orderId);
  338. continue;
  339. }
  340. //BigDecimal detailsAmountOld=new BigDecimal(0);
  341. try {
  342. BigDecimal detailsAmountOld = generateTruckFeesNew(orderId, weightTaskResultId);
  343. Double amount = detailsAmountOld.doubleValue();
  344. BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
  345. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  346. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  347. if (orderType.intValue() == 3) {
  348. BigDecimal purchaseOrderId = getFormulaMembers(orderId);
  349. bmstruckDetailsOrder.setPurchaseOrderId(purchaseOrderId);
  350. }
  351. if (orderType.intValue() == 2 || orderType.intValue() == 1) {
  352. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  353. }
  354. // 得到最大id
  355. BigDecimal detailsId = selectMaxId();
  356. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  357. bmstruckDetailsOrder.setDetailsId(detailsId);
  358. bmstruckDetailsOrder.setWeightTaskResultId(weightTaskResultId);
  359. bmstruckDetailsOrder.setOrderId(orderId);
  360. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  361. bmstruckDetailsOrder.setPriceId(priceId);
  362. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  363. bmstruckDetailsOrder.setDetailsTime(new Date());
  364. // 设置常规字段
  365. bmstruckDetailsOrder.setInsertTime(new Date());
  366. bmstruckDetailsOrder.setUpdateTime(new Date());
  367. bmstruckDetailsOrder.setInsertUsername("admin");
  368. bmstruckDetailsOrder.setUpdateUsername("admin");
  369. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  370. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  371. System.out.println("订单生成了结算单据" + orderId);
  372. }catch (Exception e){
  373. //不打印给控制台(有可能是正常情况)
  374. e.printStackTrace();
  375. }
  376. }
  377. return result;
  378. }
  379. /**
  380. * 查询最大id
  381. * @return
  382. */
  383. @Override
  384. public BigDecimal selectMaxId() {
  385. return bmstruckDetailsOrderMapper.selectDetailsId();
  386. }
  387. /**
  388. * 展示汽运实绩列表
  389. * @param mapVal
  390. * @return
  391. */
  392. @Override
  393. public List<Map<String, Object>> getTruckResultList(Map<String, Object> mapVal) {
  394. BigDecimal orderId = (BigDecimal) mapVal.get("orderId") ;
  395. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  396. List<Map<String,Object>> mapList;
  397. if (orderType.intValue() <= 3 && orderType.intValue() >= 1) {
  398. mapList = bmstruckDetailsOrderMapper.getSaleTruckResultList(mapVal);
  399. }
  400. else {
  401. mapList = bmstruckDetailsOrderMapper.getTruckResultList(mapVal);
  402. }
  403. return mapList;
  404. }
  405. /**
  406. * 得到计算因子
  407. * @param orderId
  408. * @return
  409. */
  410. @Override
  411. public BigDecimal getFormulaMembers(BigDecimal orderId) {
  412. return bmstruckDetailsOrderMapper.getFormulaMembers(orderId);
  413. }
  414. /**
  415. * 得到价格id
  416. * @return
  417. */
  418. @Override
  419. public Map<String, Object> getPriceId(BigDecimal orderId) {
  420. return bmstruckDetailsOrderMapper.getPriceId(orderId);
  421. }
  422. /**
  423. * 得到单价
  424. * @param priceId
  425. * @return
  426. */
  427. @Override
  428. public BigDecimal getPriceValue(BigDecimal priceId) {
  429. return bmstruckDetailsOrderMapper.getPriceValue(priceId);
  430. }
  431. /**
  432. * 得到到厂湿重
  433. * @param weightTaskResultId
  434. * @return
  435. */
  436. @Override
  437. public BigDecimal getNetWeight(BigDecimal weightTaskResultId) {
  438. return bmstruckDetailsOrderMapper.getNetWeight(weightTaskResultId);
  439. }
  440. /**
  441. * 展示未转成销售账单的销售详单
  442. * @param mapVal
  443. * @param orderType
  444. * @return
  445. */
  446. @Override
  447. public List<Map<String, Object>> getUnFinishedTruckDetailsOrderList(Map<String, Object> mapVal, Integer orderType) {
  448. if (mapVal == null) {
  449. mapVal = new HashMap<>();
  450. }
  451. mapVal.put("orderType",new BigDecimal(orderType));
  452. return bmstruckDetailsOrderMapper.getUnFinishedTruckDetailsOrderList(mapVal);
  453. }
  454. //通过不同的值,查询未生成账单的计费详单
  455. @Override
  456. public List<Map<String, Object>> getUnFinishedConvertedTruckDetailsOrderList(Map<String, Object> mapVal, Integer orderType) {
  457. //orderType:1:计时,2:计数,3:计重,4:包月
  458. if(orderType==1){
  459. return bmstruckDetailsOrderMapper.getUnFinishedTimeTruckDetailsOrderList(mapVal);
  460. }
  461. else if(orderType==2){
  462. return bmstruckDetailsOrderMapper.getUnFinishedNumTruckDetailsOrderList(mapVal);
  463. }
  464. else if(orderType==3){
  465. return bmstruckDetailsOrderMapper.getUnFinishedWeightTruckDetailsOrderList(mapVal);
  466. }
  467. else if(orderType==4){
  468. return bmstruckDetailsOrderMapper.getUnFinishedMonthTruckDetailsOrderList(mapVal);
  469. }
  470. return null;
  471. }
  472. /**
  473. * 替换汽运费公式并进行计算
  474. * @param orderId
  475. * @return
  476. * @throws Exception
  477. */
  478. public BigDecimal generateTruckFees(BigDecimal orderId,BigDecimal weightTaskResultId) throws Exception {
  479. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  480. Map<String, Object> priceMap = getPriceId(orderId);
  481. BigDecimal priceId = (BigDecimal) priceMap.get("priceId");
  482. BigDecimal priceValue = getPriceValue(priceId);
  483. BigDecimal netWeight = getNetWeight(weightTaskResultId);
  484. //用于给单价id为2400的生成详单
  485. // if (priceValue==null||priceValue.compareTo(BigDecimal.ZERO)==0){
  486. // //该值为任意给的值
  487. // priceValue=BigDecimal.TEN;
  488. // }
  489. // 得到计费公式
  490. String formula_string = null;
  491. if (orderType.intValue() == 3) {
  492. // 得到采购汽运计费公式
  493. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(8));
  494. // 替换采购汽运运计算公式
  495. formula_string = formula_string.replace("到厂计量湿吨",netWeight.toString())
  496. .replace("单价",priceValue.toString());
  497. }
  498. if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
  499. // BigDecimal distance = new BigDecimal(101);
  500. // 得到销售汽运计费公式
  501. // if (distance.intValue() >= 91 || distance.intValue() <= 109) {
  502. // 得到销售10km差距内的汽运计费公式
  503. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  504. // 替换采购汽运运计算公式
  505. formula_string = formula_string.replace("运输单价",priceValue.toString())
  506. .replace("物资净重",netWeight.toString());
  507. // }
  508. // else {
  509. // // 得到销售10km差距外的汽运计费公式
  510. // formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(11));
  511. // // 替换采购汽运运计算公式
  512. // formula_string = formula_string.replace("运输单价",priceValue.toString())
  513. // .replace("运输距离",distance.toString())
  514. // .replace("物资净重",netWeight.toString());
  515. // }
  516. }
  517. String s = toSufExpr(formula_string);
  518. return calSufExpr(s);
  519. }
  520. /**
  521. * 钢材直接修改计算运费
  522. * @param priceValue
  523. * @param weightTaskResultId
  524. * @return
  525. * @throws Exception
  526. */
  527. public BigDecimal generateTruckFeesForDirect(BigDecimal priceValue,BigDecimal weightTaskResultId) throws Exception {
  528. BigDecimal netWeight = getNetWeight(weightTaskResultId);
  529. // 得到计费公式
  530. String formula_string = null;
  531. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  532. // 替换采购汽运运计算公式
  533. formula_string = formula_string.replace("运输单价",priceValue.toString())
  534. .replace("物资净重",netWeight.toString());
  535. String s = toSufExpr(formula_string);
  536. return calSufExpr(s);
  537. }
  538. /**
  539. * 替换汽运费公式并进行计算(专为计费详单服务)
  540. * @param orderId
  541. * @return
  542. * @throws Exception
  543. */
  544. public BigDecimal generateTruckFeesNew (BigDecimal orderId,BigDecimal weightTaskResultId) throws Exception {
  545. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  546. Map<String, Object> priceMap = getPriceId(orderId);
  547. BigDecimal priceId = (BigDecimal) priceMap.get("priceId");
  548. BigDecimal priceValue = getPriceValue(priceId);
  549. BigDecimal netWeight = getNetWeight(weightTaskResultId);
  550. //用于给单价id为2400的生成详单
  551. if (priceValue==null||priceValue.compareTo(BigDecimal.ZERO)==0){
  552. //该值为任意给的值
  553. priceValue=BigDecimal.TEN;
  554. }
  555. // 得到计费公式
  556. String formula_string = null;
  557. if (orderType.intValue() == 3) {
  558. // 得到采购汽运计费公式
  559. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(8));
  560. // 替换采购汽运运计算公式
  561. formula_string = formula_string.replace("到厂计量湿吨",netWeight.toString())
  562. .replace("单价",priceValue.toString());
  563. }
  564. if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
  565. // BigDecimal distance = new BigDecimal(101);
  566. // 得到销售汽运计费公式
  567. // if (distance.intValue() >= 91 || distance.intValue() <= 109) {
  568. // 得到销售10km差距内的汽运计费公式
  569. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  570. // 替换采购汽运运计算公式
  571. formula_string = formula_string.replace("运输单价",priceValue.toString())
  572. .replace("物资净重",netWeight.toString());
  573. // }
  574. // else {
  575. // // 得到销售10km差距外的汽运计费公式
  576. // formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(11));
  577. // // 替换采购汽运运计算公式
  578. // formula_string = formula_string.replace("运输单价",priceValue.toString())
  579. // .replace("运输距离",distance.toString())
  580. // .replace("物资净重",netWeight.toString());
  581. // }
  582. }
  583. String s = toSufExpr(formula_string);
  584. return calSufExpr(s);
  585. }
  586. public BigDecimal updateSteelAmounts(Map<String,Object> map) throws Exception {
  587. BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  588. BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
  589. BigDecimal weightBatchId = DataChange.dataToBigDecimal(map.get("weightBatchId"));
  590. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  591. BigDecimal priceId = DataChange.dataToBigDecimal(map.get("priceId"));
  592. BigDecimal priceValue = getPriceValue(priceId);
  593. if(priceValue==null){
  594. //单价为Null,则返回0
  595. return new BigDecimal(0);
  596. }
  597. BigDecimal netWeight = null;
  598. if(weightBatchId != null && weightBatchId.intValue() != 0) {
  599. netWeight = getWeightBatchNetWeight(weightBatchId);
  600. }else{
  601. netWeight = getNetWeight(weightTaskResultId);
  602. }
  603. // 得到计费公式
  604. String formula_string = null;
  605. if (orderType.intValue() >= 1 && orderType.intValue() <= 3) {
  606. // BigDecimal distance = new BigDecimal(101);
  607. // 得到销售汽运计费公式
  608. // if (distance.intValue() >= 91 || distance.intValue() <= 109) {
  609. // 得到销售10km差距内的汽运计费公式
  610. formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(10));
  611. // 替换采购汽运运计算公式
  612. formula_string = formula_string.replace("运输单价",priceValue.toString())
  613. .replace("物资净重",netWeight.toString());
  614. // }
  615. // else {
  616. // // 得到销售10km差距外的汽运计费公式
  617. // formula_string = bmstruckFormulaService.getTruckFormula(new BigDecimal(11));
  618. // // 替换采购汽运运计算公式
  619. // formula_string = formula_string.replace("运输单价",priceValue.toString())
  620. // .replace("运输距离",distance.toString())
  621. // .replace("物资净重",netWeight.toString());
  622. // }
  623. }
  624. String s = toSufExpr(formula_string);
  625. return calSufExpr(s);
  626. }
  627. private BigDecimal getWeightBatchNetWeight(BigDecimal weightBatchId) {
  628. return bmstruckDetailsOrderMapper.getWeightBatchNetWeight(weightBatchId);
  629. }
  630. /**
  631. * 中缀转换后缀表达式
  632. */
  633. public String toSufExpr(String s) {
  634. StringBuffer sufExpr = new StringBuffer();
  635. Stack<String> stack = new Stack<>();
  636. //压入空方便判断
  637. stack.push(null);
  638. Pattern pattern = Pattern.compile("\\(int\\)|(?<!\\d|[)])-?\\d+(\\.\\d+)?|!=|>=|<=|==|[+\\-*/%()><=|]");
  639. Matcher matcher = pattern.matcher(s);
  640. while (matcher.find()) {
  641. String group = matcher.group();
  642. if (group.matches("!=|>=|<=|==|[+\\-*/%()><=|]|\\(int\\)")) {//是运算符
  643. if (group.equals("(")) {//之间压栈
  644. stack.push(group);
  645. } else if (group.equals(")")) {//等于右括号,一直弹栈,直到遇到左括号
  646. String pop = null;
  647. while (!(pop = stack.pop()).equals("(")) {//遍历循环至左括号
  648. sufExpr.append(pop + " ");
  649. }
  650. } else {//是运算符:加减乘除强转,根据优先级压栈
  651. while (getPriority(group) <= getPriority(stack.peek())) {
  652. String pop = stack.pop();
  653. System.out.println(pop);
  654. System.out.println(sufExpr);
  655. if(pop!=null&&!pop.equals("|")){
  656. sufExpr.append(pop + " ");
  657. }
  658. }
  659. stack.push(group);
  660. }
  661. } else {//是数字
  662. sufExpr.append(group + " ");
  663. }
  664. }
  665. String pop = null;
  666. while (null != (pop = stack.pop())) {
  667. sufExpr.append(pop + " ");
  668. }
  669. return sufExpr.toString();
  670. }
  671. /**
  672. * 设置出栈优先级,(:优先级最低,表示只有遇到)才能出栈
  673. * 当栈顶遇到优先级比自己小或等于的弹栈
  674. */
  675. public Integer getPriority(String c) {
  676. if (c == null) {
  677. return 0;
  678. }
  679. switch (c) {
  680. case "(":
  681. return 1;
  682. case "+":
  683. case "-":
  684. return 2;
  685. case "*":
  686. case "/":
  687. case "%":
  688. return 3;
  689. case ">":
  690. case "<":
  691. case ">=":
  692. case "<=":
  693. case "!=":
  694. case "==":
  695. return 4;
  696. case "|":
  697. return 5;
  698. case "=":
  699. return 6;
  700. case "(int)":
  701. return 7;
  702. }
  703. return 0;
  704. }
  705. /**
  706. * 计算值
  707. */
  708. public BigDecimal cal(BigDecimal a1, BigDecimal a2, String operator) throws Exception {
  709. switch (operator){
  710. case "+":return a1.add(a2);
  711. case "-":return a1.subtract(a2);
  712. case "*":return a1.multiply(a2);
  713. case "/":return a1.divide(a2,3,BigDecimal.ROUND_CEILING);
  714. case "%":return a1.divideAndRemainder(a2)[1];
  715. default:
  716. break;
  717. }
  718. throw new Exception("非法运算符");
  719. }
  720. public Boolean calBoolean(BigDecimal a1, BigDecimal a2, String operator) throws Exception {
  721. switch (operator){
  722. case ">":return a1.compareTo(a2) == 1;
  723. case "<":return a1.compareTo(a2) == -1;
  724. case ">=":return a1.compareTo(a2) > -1;
  725. case "<=":return a1.compareTo(a2) < 1;
  726. case "!=":return a1.compareTo(a2) != 0;
  727. case "==":return a1.compareTo(a2) == 0;
  728. default:
  729. break;
  730. }
  731. throw new Exception("非法运算符");
  732. }
  733. /**
  734. * 计算后缀表达式
  735. */
  736. public BigDecimal calSufExpr(String sufExpr) throws Exception {
  737. Stack<BigDecimal> stack = new Stack<>();
  738. Pattern pattern=Pattern.compile("\\(int\\)|-?\\d+(\\.\\d+)?|!=|>=|<=|==|[+\\-*/%><=]");//提取运算符和数字
  739. Matcher matcher = pattern.matcher(sufExpr);
  740. BigDecimal result=new BigDecimal("0.0");
  741. while (matcher.find()){
  742. String group = matcher.group();
  743. if(group.matches("[+\\-*/%]")){
  744. BigDecimal a1 =stack.pop();
  745. BigDecimal a2 =stack.pop();
  746. result = cal(a2, a1, group);
  747. stack.push(result);
  748. }
  749. else if(group.equals("(int)")){
  750. BigDecimal pop = stack.pop();
  751. BigDecimal bigDecimal = pop.setScale(0, BigDecimal.ROUND_DOWN);
  752. stack.push(bigDecimal);
  753. }
  754. else if(group.matches("!=|>=|<=|==|[><]")){
  755. BigDecimal a1 =stack.pop();
  756. BigDecimal a2 =stack.pop();
  757. stack.push(calBoolean(a2,a1,group)?new BigDecimal(1):new BigDecimal(0));
  758. }
  759. else if(group.equals("=")){
  760. BigDecimal a1 =stack.pop();
  761. BigDecimal a2 =stack.pop();
  762. if (a2.compareTo(new BigDecimal(1))==0) {
  763. stack.push(a1);
  764. }
  765. }
  766. else {//为数字直接压栈
  767. stack.push(new BigDecimal(group));
  768. }
  769. }
  770. return result;
  771. }
  772. /**
  773. * 新增内转汽运详单
  774. * @param orderId
  775. * @return
  776. * @throws Exception
  777. */
  778. @Override
  779. public int addConvertedDetailsOrder(BigDecimal orderId) throws Exception {
  780. // 得到最大id
  781. BigDecimal detailsId = selectMaxId();
  782. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  783. // 新增详单实体
  784. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  785. // 设置常规字段
  786. bmstruckDetailsOrder.setInsertTime(new Date());
  787. bmstruckDetailsOrder.setInsertUsername("admin");
  788. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  789. // 通过订单号获取物资信息以及结算方式
  790. Map<String, Object> mapVal=getSettlement(orderId);
  791. //需求类型(0:计重;1:计时;2:计次;3:包月)
  792. String requirementType=mapVal.get("requirementType").toString();
  793. Integer materialId =Integer.parseInt(mapVal.get("materialId").toString());
  794. //通过物资id以及结算方式获取单价;
  795. BigDecimal priceId=getPriceByWz(requirementType,materialId);
  796. // 将单价存入实体
  797. bmstruckDetailsOrder.setPriceId(priceId);
  798. // 获取物资数量/计时获取时长/计数为一次/包月为包月价
  799. if("0".equals(requirementType)){
  800. //通过单价ID获取单价
  801. BigDecimal price=getPriceValue(priceId);
  802. //获取物资重量
  803. BigDecimal weight=getNetWeight(priceId);
  804. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(price.doubleValue()*weight.doubleValue()));
  805. }
  806. else{
  807. //通过单价ID获取单价
  808. BigDecimal price=getPriceValue(priceId);
  809. bmstruckDetailsOrder.setDetailsAmount(price);
  810. }
  811. return bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  812. }
  813. //通过物资id以及结算方式获取单价;
  814. @Override
  815. public BigDecimal getPriceByWz(String requirementType, Integer materialId) {
  816. return bmstruckDetailsOrderMapper.getPriceByWz(requirementType,materialId);
  817. }
  818. @Override
  819. // 通过订单号获取物资信息以及结算方式
  820. public Map<String, Object> getSettlement(BigDecimal orderId) {
  821. return bmstruckDetailsOrderMapper.getSettlement(orderId);
  822. }
  823. /**
  824. * 修改详单
  825. * @param mapValue
  826. * @return
  827. */
  828. @Transactional
  829. @Override
  830. public synchronized int updateDetailsOrder(Map<String, Object> mapValue) {
  831. System.out.println("修改单价,时间:" + new Date() + "-----------" + mapValue);
  832. BigDecimal orderId = DataChange.dataToBigDecimal(mapValue.get("orderId"));
  833. BigDecimal priceId = DataChange.dataToBigDecimal(mapValue.get("priceId"));
  834. System.out.println("运单Id,为" + orderId);
  835. System.out.println("随接口传输过来的单价Id,为" + priceId);
  836. try {
  837. int i = insertSelectiveNew(orderId);
  838. } catch (Exception e) {
  839. //不打印给控制台(可能是正常情况)
  840. }
  841. //根据运输订单id查询计费详单id
  842. OmstruckOrder omstruckOrder = new OmstruckOrder();
  843. omstruckOrder.setOrderId(orderId);
  844. omstruckOrder.setPriceId(priceId);
  845. try{
  846. //通过userId查询出用户名
  847. String carrierName = bmstruckDetailsOrderMapper.getCarrierNameForPriceValue((String) mapValue.get("userId"));
  848. System.out.println("正在执行该操作的人员为:" + carrierName + "时间为:" + new Date()) ;
  849. //根据运输ID查询出记录下来的用户名
  850. String recordUserName = bmstruckDetailsOrderMapper.getUserName(orderId);
  851. if (recordUserName==null){
  852. omstruckOrder.setRecordUsername(carrierName+",");
  853. }else {
  854. String[] s = recordUserName.split(",");
  855. if (s.length < 2){
  856. omstruckOrder.setRecordUsername(recordUserName+carrierName+",");
  857. }else if (s.length ==2){
  858. omstruckOrder.setRecordUsername(recordUserName+carrierName);
  859. }else if (s.length==3){
  860. s[0]=s[1];
  861. s[1]=s[2];
  862. s[2]=carrierName;
  863. omstruckOrder.setRecordUsername(s[0]+","+s[1]+","+s[2]);
  864. }
  865. }
  866. }catch (Exception e){
  867. System.out.println("e"+e.getMessage());
  868. }
  869. omstruckOrderMapper.updateByPrimaryKeySelective(omstruckOrder);
  870. List<BigDecimal> detailIds = bmstruckDetailsOrderMapper.getDetailIds(orderId);
  871. int result = 0;
  872. for (BigDecimal detailsId : detailIds) {
  873. BmstruckDetailsOrder bmstruckDetailsOrder = bmstruckDetailsOrderMapper.selectByPrimaryKey(detailsId);
  874. bmstruckDetailsOrder.setHistoryDetailsAmount(bmstruckDetailsOrder.getDetailsAmount());
  875. // 重新设置单价
  876. BigDecimal priceId1 = bmstruckDetailsOrder.getPriceId();
  877. bmstruckDetailsOrder.setPriceids(priceId1+","+priceId);
  878. bmstruckDetailsOrder.setPriceId(priceId);
  879. BigDecimal weightTaskResultId = bmstruckDetailsOrder.getWeightTaskResultId();
  880. BigDecimal weightBatchId = bmstruckDetailsOrder.getWeightBatchId();
  881. Map<String,Object> map = new HashMap<>();
  882. if(weightBatchId != null) {
  883. map.put("orderId",orderId);
  884. map.put("weightBatchId",weightBatchId);
  885. map.put("priceId",priceId);
  886. }else{
  887. map.put("orderId",orderId);
  888. map.put("weightTaskResultId",weightTaskResultId);
  889. map.put("priceId",priceId);
  890. }
  891. try {
  892. // 计算出新的详单金额
  893. BigDecimal newAmount = updateSteelAmounts(map);
  894. bmstruckDetailsOrder.setDetailsAmount(newAmount.divide(new BigDecimal(1),2, RoundingMode.HALF_UP));
  895. //修改单价的历史时间
  896. //omstruckOrderMapper.modifyOldTime(priceId,new Date());
  897. }catch (Exception e) {
  898. System.out.println("更新历史时间失败");
  899. }
  900. System.out.println("更新详单数据成功");
  901. result = bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  902. }
  903. /*try {
  904. amsFeign.copySteelPrice(mapValue);
  905. } catch (Exception e) {
  906. e.printStackTrace();
  907. }*/
  908. if(DataChange.dataToBigDecimal(mapValue.get("updatePlace")).intValue() == 1) {
  909. System.out.println("更新asom里面的实际地址数据");
  910. Map<String, Object> stringObjectMap = bmstruckDetailsOrderMapper.getsaleShippingAddressId(mapValue);
  911. BigDecimal saleShippingAddressId = (BigDecimal) stringObjectMap.get("saleShippingAddressId");
  912. BigDecimal historyShippingAddressId = (BigDecimal) stringObjectMap.get("historyShippingAddressId");
  913. bmstruckDetailsOrderMapper.updateActuallyPlace(mapValue);
  914. //if (historyShippingAddressId!=null){
  915. // //修改地址(不修改历史地址)
  916. // bmstruckDetailsOrderMapper.updatePlaceNew(mapValue);
  917. //}else if (historyShippingAddressId==null ) {
  918. // mapValue.put("historyPlaceId", saleShippingAddressId);
  919. // //修改地址(不修改历史地址)
  920. // bmstruckDetailsOrderMapper.updatePlace(mapValue);
  921. //}
  922. }
  923. System.out.println("修改单价,时间:" + new Date() + "-----------" + mapValue);
  924. return result;
  925. }
  926. @Override
  927. public int updateAsomPriceId(Map<String, Object> mapValue) {
  928. System.out.println("更新ASOM表里面的数据实际地址数据" + mapValue + "----------" + new Date());
  929. //前面更新运单时更新过地址了,这里就不更新了,如果订单ID为空,才更新
  930. if(DataChange.dataToBigDecimal(mapValue.get("updatePlace")).intValue() == 1 && mapValue.get("orderId")==null) {
  931. Map<String, Object> stringObjectMap = bmstruckDetailsOrderMapper.getsaleShippingAddressId(mapValue);
  932. BigDecimal saleShippingAddressId = (BigDecimal) stringObjectMap.get("saleShippingAddressId");
  933. BigDecimal historyShippingAddressId = (BigDecimal) stringObjectMap.get("historyShippingAddressId");
  934. bmstruckDetailsOrderMapper.updateActuallyPlace(mapValue);
  935. //if (historyShippingAddressId!=null){
  936. // //修改地址(不修改历史地址)
  937. // bmstruckDetailsOrderMapper.updatePlaceNew(mapValue);
  938. //}else if (historyShippingAddressId==null ) {
  939. // mapValue.put("historyPlaceId", saleShippingAddressId);
  940. // //修改地址(不修改历史地址)
  941. // bmstruckDetailsOrderMapper.updatePlace(mapValue);
  942. //}
  943. }
  944. return bmstruckDetailsOrderMapper.updateAsomPriceId(mapValue);
  945. }
  946. @Override
  947. public BigDecimal getCarrierIdBySSO(String carrierSsoId) {
  948. return bmstruckDetailsOrderMapper.getCarrierIdBySSO(carrierSsoId);
  949. }
  950. // 根据单价id查询价格和地址
  951. @Override
  952. public Map<String,Object> findAddressAndPrice(Integer priceId) {
  953. return bmstruckDetailsOrderMapper.findAddressAndPrice(new BigDecimal(priceId));
  954. }
  955. /**
  956. * 增加焦炭途损费
  957. * @param map
  958. * @return
  959. */
  960. @Override
  961. public int addLossFeeOfCoke(Map<String,Object> map) {
  962. BigDecimal lossFees = DataChange.dataToBigDecimal(map.get("lossFees"));
  963. BigDecimal detailsId = DataChange.dataToBigDecimal(map.get("detailsId"));
  964. BmstruckDetailsOrder bmstruckDetailsOrder = bmstruckDetailsOrderMapper.selectByPrimaryKey(detailsId);
  965. BigDecimal detailsAmount = bmstruckDetailsOrder.getDetailsAmount();
  966. DecimalFormat df = new DecimalFormat("0.00");
  967. Double newAmount = detailsAmount.doubleValue() - lossFees.doubleValue();
  968. String newAmountStr = df.format(newAmount);
  969. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(newAmountStr));
  970. int result = bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  971. return result;
  972. }
  973. /*
  974. 内转计重计费详单
  975. */
  976. @Override
  977. public List<Map<String, Object>> getInwardWeightDetailsOrder(Map<String, Object> mapValue, Integer orderType) {
  978. List<Map<String,Object>>mapList = new ArrayList<>();
  979. switch (orderType){
  980. case 10:
  981. List<Map<String, Object>> inwardReportResult = bmstruckDetailsOrderMapper.getPurInwarWeightDetailsOrder(mapValue);
  982. return inwardReportResult;
  983. case 21:
  984. return bmstruckDetailsOrderMapper.getInwardTimeDetailsOrder(mapValue);
  985. case 11:
  986. return bmstruckDetailsOrderMapper.getAllInwardWeight(mapValue);
  987. case 26:
  988. return bmstruckDetailsOrderMapper.getInwardCountDetailsOrder(mapValue);
  989. default:
  990. break;
  991. }
  992. return mapList;
  993. }
  994. @Override
  995. public synchronized int inserInwardOrder(Map<String, Object> mapVal) {
  996. //获取运输订单ID
  997. BigDecimal orderId= DataChange.dataToBigDecimal(mapVal.get("orderId"));
  998. //根据运输订单去查找订单类型
  999. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  1000. //根据运输订单id去查询计费详单id
  1001. if(bmstruckDetailsOrderMapper.selectDetailsByOrder(orderId) > 0){
  1002. return -1;
  1003. }
  1004. List<Map<String,Object>> priceAmountList = new ArrayList<>();
  1005. if(inwardTypeList.contains(orderType.intValue())){
  1006. //获取该订单的计量实绩ID以及净重,只会返回一条数据
  1007. priceAmountList = bmstruckDetailsOrderMapper.getWeightTaskResultId(orderId);
  1008. }
  1009. if(toLineAndMaterial.contains(orderType.intValue())){
  1010. //如果在以上订单类型里面则需要根据运输订单ID去找线路和物资
  1011. Map<String,Object> priceInfoPur = bmstruckDetailsOrderMapper.getPriceInfoPur(orderId);
  1012. //根据物资品类ID和承运起止范围去匹配单价
  1013. Map<String,Object> map = bmstruckDetailsOrderMapper.getPurInwardPrice(priceInfoPur);
  1014. if(map != null){
  1015. mapVal.putAll(map);
  1016. }else{
  1017. return -1;
  1018. }
  1019. }
  1020. if(fixLineList.contains(orderType.intValue())){
  1021. //拼装车皮进厂以及一焦化采购焦炭进厂
  1022. Map<String,Object> priceInfoPur = bmstruckDetailsOrderMapper.getPriceInfoPur(orderId);
  1023. priceInfoPur.put("transRangeId",1);
  1024. //根据物资品类ID和承运起止范围去匹配单价
  1025. Map<String,Object> map = bmstruckDetailsOrderMapper.getPurInwardPrice(priceInfoPur);
  1026. if(map != null){
  1027. mapVal.putAll(map);
  1028. }else{
  1029. return -1;
  1030. }
  1031. }
  1032. if(steelTypeList.contains(orderType.intValue())){
  1033. //钢材倒库
  1034. //首先获取净重
  1035. //BigDecimal netWeight = bmstruckDetailsOrderMapper.selectNetWeight(orderId);
  1036. //mapVal.put("netWeight",netWeight);
  1037. //获取单价
  1038. Map<String, Object> priceInfoPur = new HashMap<>();
  1039. priceInfoPur.put("transRangeId",1);
  1040. priceInfoPur.put("materialTypeId",5102);
  1041. Map<String,Object> map = bmstruckDetailsOrderMapper.getPurInwardPrice(priceInfoPur);
  1042. if(map != null){
  1043. mapVal.putAll(map);
  1044. }else{
  1045. return -1;
  1046. }
  1047. }
  1048. if(orderType.intValue() == 21 || orderType.intValue()==26){
  1049. //计时/计次
  1050. priceAmountList.add(mapVal);
  1051. }
  1052. //获取单价ID
  1053. BigDecimal priceId = DataChange.dataToBigDecimal(mapVal.get("priceId")) ;
  1054. //获取单价值
  1055. BigDecimal priceValue = DataChange.dataToBigDecimal(mapVal.get("priceValue"));
  1056. if(priceId == null){
  1057. System.out.println(orderId + "没有单价");
  1058. return 1;
  1059. }
  1060. int result = 0;
  1061. for (Map<String, Object> map : priceAmountList) {
  1062. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1063. //查询计重且计时
  1064. String s = bmstruckDetailsOrderMapper.selectWeightAndTimeByOrderId(orderId);
  1065. int num=0;
  1066. if (s!=null && s.contains("计时且过计量")){
  1067. num=21;
  1068. }
  1069. if(inwardTypeList.contains(orderType.intValue()) && num==0){
  1070. BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
  1071. BigDecimal netWeight = null;
  1072. if(mapVal.get("netWeight") != null) {
  1073. //因为事务的关系,部分订单结束时可能没有净重,故需要添加净重
  1074. netWeight = DataChange.dataToBigDecimal(mapVal.get("netWeight"));
  1075. }
  1076. else{
  1077. netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  1078. }
  1079. //计算详单金额
  1080. BigDecimal detailsAmount = new BigDecimal(priceValue.doubleValue()*netWeight.doubleValue());
  1081. //保留两位小数
  1082. DecimalFormat df = new DecimalFormat("0.00");
  1083. String format = df.format(detailsAmount);
  1084. //关联计量实绩
  1085. bmstruckDetailsOrder.setWeightTaskResultId(weightTaskResultId);
  1086. if(priceId != null && priceValue !=null && detailsAmount.intValue() > 0){
  1087. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(format));
  1088. }
  1089. }
  1090. //内转计时结算
  1091. if(orderType.intValue() == 21 || num==21){
  1092. BigDecimal resultTime = DataChange.dataToBigDecimal(mapVal.get("Time1"));
  1093. //保留两位小数
  1094. DecimalFormat df = new DecimalFormat("0.00");
  1095. BigDecimal settleTime = new BigDecimal(String.valueOf(resultTime.divide(new BigDecimal(60), 14, BigDecimal.ROUND_HALF_UP)));
  1096. if(settleTime.doubleValue()<2.00){
  1097. BigDecimal detailsAmount = new BigDecimal(priceValue.doubleValue()*2);
  1098. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(df.format(detailsAmount)));
  1099. }else{
  1100. BigDecimal detailsAmount = new BigDecimal(priceValue.doubleValue()*settleTime.doubleValue());
  1101. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(df.format(detailsAmount)));
  1102. }
  1103. }
  1104. //内转计次结算
  1105. if(orderType.intValue() == 26){
  1106. //保留两位小数
  1107. DecimalFormat df = new DecimalFormat("0.00");
  1108. BigDecimal detailsAmount = new BigDecimal(priceValue.doubleValue());
  1109. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(df.format(detailsAmount)));
  1110. }
  1111. bmstruckDetailsOrder.setPriceId(priceId);
  1112. bmstruckDetailsOrder.setInsertUpdateRemark("单价存在");
  1113. // 得到最大id
  1114. BigDecimal detailsId = selectMaxId();
  1115. bmstruckDetailsOrder.setOrderId(orderId);
  1116. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  1117. bmstruckDetailsOrder.setDetailsId(detailsId);
  1118. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  1119. bmstruckDetailsOrder.setDetailsTime(new Date());
  1120. // 设置常规字段
  1121. bmstruckDetailsOrder.setInsertTime(new Date());
  1122. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  1123. bmstruckDetailsOrder.setInsertUsername("admin");
  1124. bmstruckDetailsOrder.setUpdateUsername("admin");
  1125. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  1126. }
  1127. return result;
  1128. }
  1129. @Override
  1130. public int updateDetails() {
  1131. List<Map<String,Object>>mapList = bmstruckDetailsOrderMapper.selectDetailsNoAmount();
  1132. int i=0;
  1133. for (Map<String,Object>map:mapList
  1134. ) {
  1135. //获取详单ID、价格值,净重
  1136. BigDecimal detailsId = DataChange.dataToBigDecimal(map.get("detailsId"));
  1137. BigDecimal netWeight = DataChange.dataToBigDecimal(map.get("netWeight"));
  1138. BigDecimal priceValue = DataChange.dataToBigDecimal(map.get("priceValue"));
  1139. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1140. bmstruckDetailsOrder.setDetailsId(detailsId);
  1141. BigDecimal detailsAmount = new BigDecimal(priceValue.doubleValue()*netWeight.doubleValue());
  1142. DecimalFormat df = new DecimalFormat("0.00");
  1143. String format = df.format(detailsAmount);
  1144. bmstruckDetailsOrder.setDetailsAmount(new BigDecimal(format));
  1145. i += bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  1146. }
  1147. return i;
  1148. }
  1149. /*
  1150. 内转计重+计时计费详单
  1151. */
  1152. @Override
  1153. public List<Map<String, Object>> getInwardWeightTimeDetailsOrder(Map<String, Object> mapValue, Integer orderType) {
  1154. List<Map<String,Object>>mapListWeight = new ArrayList<>();
  1155. List<Map<String,Object>>mapListTime = new ArrayList<>();
  1156. //计重计费详单查询结果
  1157. mapListWeight = bmstruckDetailsOrderMapper.getInwardWeightDetailsOrder(mapValue);
  1158. //for(Map<String, Object> mapListWeightOne : mapListWeight)
  1159. //{
  1160. // mapListWeightOne.put("resultTime","null");
  1161. //}
  1162. //计时计费详单查询结果
  1163. mapListTime = bmstruckDetailsOrderMapper.getInwardTimeDetailsOrder(mapValue);
  1164. //将计时查询结果加入到计重查询结果中
  1165. for(Map<String, Object> mapListTimeOne:mapListTime)
  1166. { mapListTimeOne.put("capacityNumber",mapListTimeOne.remove("capacityNum"));
  1167. mapListWeight.add(mapListTimeOne);
  1168. }
  1169. //返回计重+计时计费详单查询结果
  1170. return mapListWeight;
  1171. }
  1172. @Override
  1173. public List<Map<String, Object>> getNoInwardDetails(Map<String, Object> mapValue) {
  1174. return bmstruckDetailsOrderMapper.getNoInwardDetails(mapValue);
  1175. }
  1176. @Override
  1177. public List<Map<String, Object>> getSteelTruckDetailsOrder(Map<String, Object> mapValue) {
  1178. return bmstruckDetailsOrderMapper.getSteelTruckDetailsOrder(mapValue);
  1179. }
  1180. @Override
  1181. public int newInwardSettle(List<Map<String,Object>> orderIds) {
  1182. int count = 0;
  1183. //遍历数组
  1184. for(Map<String,Object> orderIdMap:orderIds){
  1185. Integer orderId = DataChange.dataToBigDecimal(orderIdMap.get("orderId")).intValue();
  1186. //根据运输ID获取订单类型
  1187. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(new BigDecimal(orderId));
  1188. //根据订单类型调用不同的方法
  1189. //如果订单类型是11,
  1190. if(orderType.intValue() == 11){
  1191. List<BigDecimal> detailsIds = bmstruckDetailsOrderMapper.getDetailsIdByOrderId(orderId);
  1192. if(detailsIds.size() == 0){
  1193. omsFeign.closeInwardOrder(orderId);
  1194. count++;
  1195. }else{
  1196. for(int i=0;i<detailsIds.size();i++){
  1197. bmstruckDetailsOrderMapper.deleteByPrimaryKey(detailsIds.get(i));
  1198. omsFeign.closeInwardOrder(orderId);
  1199. count++;
  1200. }
  1201. }
  1202. }
  1203. if(orderType.intValue() == 10 || orderType.intValue() == 20){
  1204. //根据运输订单ID找寻计费详单ID
  1205. List<BigDecimal> detailsIds = bmstruckDetailsOrderMapper.getDetailsIdByOrderId(orderId);
  1206. for(BigDecimal detailsId:detailsIds){
  1207. //根据详单ID物理删除详单
  1208. bmstruckDetailsOrderMapper.deleteByPrimaryKey(detailsId);
  1209. count++;
  1210. }
  1211. inserInwardOrder(orderIdMap);
  1212. }
  1213. if(orderType.intValue() == 23 || orderType.intValue() == 24){
  1214. List<BigDecimal> detailsIds = bmstruckDetailsOrderMapper.getDetailsIdByOrderId(orderId);
  1215. for(BigDecimal detailsId:detailsIds){
  1216. //根据详单ID物理删除详单
  1217. bmstruckDetailsOrderMapper.deleteByPrimaryKey(detailsId);
  1218. count++;
  1219. }
  1220. inserInwardOrder(orderIdMap);
  1221. }
  1222. if(orderType.intValue() == 16 || orderType.intValue() == 15){
  1223. List<BigDecimal> detailsIds = bmstruckDetailsOrderMapper.getDetailsIdByOrderId(orderId);
  1224. for(BigDecimal detailsId:detailsIds){
  1225. //根据详单ID物理删除详单
  1226. bmstruckDetailsOrderMapper.deleteByPrimaryKey(detailsId);
  1227. count++;
  1228. }
  1229. inserInwardOrder(orderIdMap);
  1230. }
  1231. }
  1232. return count;
  1233. }
  1234. @Override
  1235. public int updateDetailsStatus(List<Integer> detailsOrderList) {
  1236. int i = 0;
  1237. for(Integer detailsId :detailsOrderList) {
  1238. if(detailsId == null) {
  1239. continue;
  1240. }
  1241. //BigDecimal detailId = DataChange.dataToBigDecimal(map.get("detailId"));
  1242. //BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1243. //bmstruckDetailsOrder.setDetailsId(detailId);
  1244. //bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(1));
  1245. //i += bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  1246. try {
  1247. i += bmstruckDetailsOrderMapper.updateDetailsStatus(detailsId);
  1248. } catch (Exception e) {
  1249. e.printStackTrace();
  1250. }
  1251. /*BigDecimal priceId = omstruckOrderMapper.getPriceId(orderId);
  1252. omstruckOrderMapper.modifyOldTime(priceId,new Date());*/
  1253. }
  1254. return i;
  1255. }
  1256. @Override
  1257. public int getSaleOrderStatus(BigDecimal orderId) {
  1258. return bmstruckDetailsOrderMapper.getSaleOrderStatus(orderId);
  1259. }
  1260. @Override
  1261. public synchronized int insertPriceValue(List<Map<String, Object>> mapList) {
  1262. for (Map<String, Object> map : mapList) {
  1263. Integer placeId =(Integer) map.get("placeId");
  1264. //根据位置ID去查询是否有单价存在,如果有就跳过
  1265. BigDecimal priceIdInt = bmstruckDetailsOrderMapper.getPriceIdInt(placeId);
  1266. if (priceIdInt!=null&&priceIdInt.compareTo(BigDecimal.ZERO)!=0){
  1267. break;
  1268. }else {
  1269. ////新增单价
  1270. //BigDecimal orderId = DataChange.dataToBigDecimal(map.get("orderId"));
  1271. //BigDecimal omsTruckOrderPriceId = bmstruckDetailsOrderMapper.getOmsTruckOrderPriceId(orderId);
  1272. //Map<String,Object> map1=new HashMap<>();
  1273. //map1.put("orderId",orderId);
  1274. //map1.put("priceId",omsTruckOrderPriceId);
  1275. //try {
  1276. // amsFeign.copySteelPrice(map1);
  1277. //} catch (Exception e) {
  1278. // e.printStackTrace();
  1279. //}
  1280. //单价的主键
  1281. //map1.put("priceId",bmstruckDetailsOrderMapper.selectMaxIdNew());
  1282. //map1.put("priceValue",map.get("priceValue"));
  1283. //map1.put("placeId",placeId);
  1284. //bmstruckDetailsOrderMapper.insertPriceValue(map1);
  1285. }
  1286. }
  1287. return 0;
  1288. }
  1289. public int cancelMakeSure(List<Integer> detailsOrderList) {
  1290. int i = 0;
  1291. for(Integer detailsId :detailsOrderList) {
  1292. if(detailsId == null) {
  1293. continue;
  1294. }
  1295. //BigDecimal detailId = DataChange.dataToBigDecimal(map.get("detailId"));
  1296. //BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1297. //bmstruckDetailsOrder.setDetailsId(detailId);
  1298. //bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(1));
  1299. //i += bmstruckDetailsOrderMapper.updateByPrimaryKeySelective(bmstruckDetailsOrder);
  1300. i += bmstruckDetailsOrderMapper.cancelMakeSure(detailsId);
  1301. /*BigDecimal priceId = omstruckOrderMapper.getPriceId(orderId);
  1302. omstruckOrderMapper.modifyOldTime(priceId,new Date());*/
  1303. }
  1304. return i;
  1305. }
  1306. @Override
  1307. public int updateDetailsDirect(Map<String, Object> mapValue) throws Exception {
  1308. List<BigDecimal> orderIds = (List<BigDecimal>) mapValue.get("orderList");
  1309. BigDecimal priceValue = DataChange.dataToBigDecimal(mapValue.get("detailAmount"));//以java变量名为准,这里是所填写的单价值
  1310. if(priceValue.intValue() < 0){
  1311. throw new Exception("单价不能小于等于0");
  1312. }
  1313. String detailRemark = mapValue.get("detailRemark").toString();
  1314. String userId = mapValue.get("userId").toString();
  1315. String userName = bmstruckDetailsOrderMapper.getUserNameByUserId(userId);
  1316. String url = mapValue.get("url").toString();
  1317. AmsContractTransportPrice amsContractTransportPrice = new AmsContractTransportPrice();
  1318. BigDecimal priceId = amsContractTransportPriceMapper.selectMaxId();
  1319. amsContractTransportPrice.setPriceId(priceId);
  1320. amsContractTransportPrice.setPriceValue(priceValue);
  1321. amsContractTransportPrice.setPriceDate(new Date());
  1322. int result = 0;
  1323. for(int i=0;i<orderIds.size();i++){
  1324. BigDecimal orderId = DataChange.dataToBigDecimal(orderIds.get(i));
  1325. //校验
  1326. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  1327. if(orderType.intValue() != 1){
  1328. throw new Exception("订单类型错误,不允许生成汽运计费详单");
  1329. }
  1330. //更新订单表单价
  1331. bmstruckDetailsOrderMapper.updateOrderPrice(orderId,priceId);
  1332. //更新车序号表单价
  1333. bmstruckDetailsOrderMapper.updateAsomPriceIdByOrderId(orderId,priceId);
  1334. saleLogUtil.logOrder(orderId,"直接修改单价",userName,SaleLogUtil.UPDATE);
  1335. //查询订单计量详情
  1336. List<Map<String,Object>> weightTaskResultIdList = bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId);
  1337. for (Map<String, Object> map : weightTaskResultIdList) {
  1338. BigDecimal weightTaskResultId = DataChange.dataToBigDecimal(map.get("weightTaskResultId"));
  1339. BigDecimal netWeightIsNull = bmstruckDetailsOrderMapper.getNetWeight(weightTaskResultId);
  1340. if (netWeightIsNull == null) {
  1341. System.out.println("没有计量实绩,不生成结算数据:" + orderId);
  1342. continue;
  1343. }
  1344. //计算总费用
  1345. BigDecimal detailsAmountOld = generateTruckFeesForDirect(priceValue, weightTaskResultId);
  1346. Double amount = detailsAmountOld.doubleValue();
  1347. BigDecimal detailsAmount = new BigDecimal(amount).setScale(2,RoundingMode.HALF_UP);
  1348. //判断该计量实绩有没有结算数据
  1349. if(bmstruckDetailsOrderMapper.getIsHaveDetailsOrder(weightTaskResultId) > 0 ){
  1350. //如果有,更新
  1351. Map<String,Object> temp =new HashMap<>();
  1352. temp.put("orderId",orderId);
  1353. temp.put("weightTaskResultId",weightTaskResultId);
  1354. temp.put("priceValue",priceValue);
  1355. temp.put("detailAmount",detailsAmount);
  1356. temp.put("detailRemark",detailRemark);
  1357. temp.put("url",url);
  1358. temp.put("userId",userId);
  1359. result +=bmstruckDetailsOrderMapper.updateTruckDetails(temp);
  1360. continue;
  1361. }
  1362. //否则,新增详单
  1363. try {
  1364. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1365. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  1366. // 得到最大id
  1367. BigDecimal detailsId = selectMaxId();
  1368. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  1369. bmstruckDetailsOrder.setDetailsId(detailsId);
  1370. bmstruckDetailsOrder.setWeightTaskResultId(weightTaskResultId);
  1371. bmstruckDetailsOrder.setOrderId(orderId);
  1372. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  1373. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  1374. bmstruckDetailsOrder.setDetailsTime(new Date());
  1375. bmstruckDetailsOrder.setPriceValue(priceValue);//填写的单价
  1376. bmstruckDetailsOrder.setPhoto(url);//上传的凭证图片路径
  1377. bmstruckDetailsOrder.setRemark(detailRemark);//凭证备注
  1378. // 设置常规字段
  1379. bmstruckDetailsOrder.setInsertTime(new Date());
  1380. bmstruckDetailsOrder.setUpdateTime(new Date());
  1381. bmstruckDetailsOrder.setInsertUsername(userId);
  1382. bmstruckDetailsOrder.setUpdateUsername("admin");
  1383. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  1384. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  1385. }catch (Exception e){
  1386. //不打印给控制台(有可能是正常情况)
  1387. e.printStackTrace();
  1388. }
  1389. }
  1390. }
  1391. amsContractTransportPriceMapper.insertSelective(amsContractTransportPrice);
  1392. return result;
  1393. }
  1394. @Override
  1395. public int addTruckDetail(Map<String, Object> mapValue) throws Exception {
  1396. List<BigDecimal> orderIds = (List<BigDecimal>) mapValue.get("orderList");
  1397. BigDecimal detailsAmount = DataChange.dataToBigDecimal(mapValue.get("detailAmount"));
  1398. String detailRemark = mapValue.get("detailRemark").toString();
  1399. String userId = mapValue.get("userId").toString();
  1400. String urls = "" + mapValue.get("urls");
  1401. int result = 0;
  1402. for(int i=0;i<orderIds.size();i++){
  1403. BigDecimal orderId = DataChange.dataToBigDecimal(orderIds.get(i));
  1404. //校验
  1405. BigDecimal orderType = bmstruckDetailsOrderMapper.getOrderType(orderId);
  1406. if(orderType.intValue() != 1){
  1407. throw new Exception("订单类型错误,不允许生成汽运计费详单");
  1408. }
  1409. List<Map<String,Object>> weightTaskResultIdList = bmstruckDetailsOrderMapper.getSteelWeightTaskResultId(orderId);
  1410. if(weightTaskResultIdList.size()<=0){
  1411. throw new Exception("没有计量实绩,无法冲红");
  1412. }
  1413. //新增详单
  1414. try {
  1415. // 得到最大id
  1416. BigDecimal detailsId = selectMaxId();
  1417. BmstruckDetailsOrder bmstruckDetailsOrder = new BmstruckDetailsOrder();
  1418. bmstruckDetailsOrder.setWetherToStatement(new BigDecimal(0));
  1419. String detailsNo = noUtil.setResultNo("QYXD", detailsId);
  1420. bmstruckDetailsOrder.setWeightTaskResultId(DataChange.dataToBigDecimal(weightTaskResultIdList.get(0).get("weightTaskResultId")));
  1421. bmstruckDetailsOrder.setDetailsId(detailsId);
  1422. bmstruckDetailsOrder.setOrderId(orderId);
  1423. bmstruckDetailsOrder.setDetailsNo(detailsNo);
  1424. bmstruckDetailsOrder.setDetailsAmount(detailsAmount);
  1425. bmstruckDetailsOrder.setDetailsTime(new Date());
  1426. bmstruckDetailsOrder.setRemark(detailRemark);//凭证备注
  1427. bmstruckDetailsOrder.setPhoto(urls);//图片
  1428. // 设置常规字段
  1429. bmstruckDetailsOrder.setInsertTime(new Date());
  1430. bmstruckDetailsOrder.setUpdateTime(new Date());
  1431. bmstruckDetailsOrder.setInsertUsername(userId);
  1432. bmstruckDetailsOrder.setUpdateUsername("admin");
  1433. bmstruckDetailsOrder.setInsertUpdateRemark("无");
  1434. result += bmstruckDetailsOrderMapper.insertSelective(bmstruckDetailsOrder);
  1435. }catch (Exception e){
  1436. e.printStackTrace();
  1437. }
  1438. }
  1439. return result;
  1440. }
  1441. @Override
  1442. public int updateConsignee(Map<String, Object> map) throws Exception {
  1443. bmstruckDetailsOrderMapper.updateConsignee(map);
  1444. //记录日志
  1445. saleLogUtil.logOrder(map,"修改计费详单的收货客户",SaleLogUtil.UPDATE);
  1446. return 0;
  1447. }
  1448. }