OrderServiceImpl.java 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562
  1. package com.caimei.service.impl;
  2. import com.alibaba.fastjson.JSONArray;
  3. import com.caimei.mapper.CollageMapper;
  4. import com.caimei.mapper.CouponMapper;
  5. import com.caimei.mapper.OrderMapper;
  6. import com.caimei.mapper.ProductMapper;
  7. import com.caimei.model.ResponseJson;
  8. import com.caimei.model.po.CmPayShopRecordPo;
  9. import com.caimei.model.po.CouponSharePo;
  10. import com.caimei.model.po.ReceiveCouponPo;
  11. import com.caimei.model.po.UserSearchHistoryPo;
  12. import com.caimei.model.vo.*;
  13. import com.caimei.service.OrderService;
  14. import com.caimei.service.ShoppingCartService;
  15. import com.caimei.util.MathUtil;
  16. import com.caimei.util.ProductUtils;
  17. import com.github.pagehelper.PageHelper;
  18. import com.github.pagehelper.PageInfo;
  19. import lombok.extern.slf4j.Slf4j;
  20. import org.apache.commons.lang3.StringUtils;
  21. import org.springframework.beans.factory.annotation.Value;
  22. import org.springframework.stereotype.Service;
  23. import org.springframework.transaction.annotation.Transactional;
  24. import javax.annotation.Resource;
  25. import java.math.BigDecimal;
  26. import java.util.*;
  27. import java.util.concurrent.atomic.AtomicBoolean;
  28. /**
  29. * Description
  30. *
  31. * @author : plf
  32. * @date : 2021/3/26
  33. */
  34. @Slf4j
  35. @Service
  36. public class OrderServiceImpl implements OrderService {
  37. @Resource
  38. private OrderMapper orderMapper;
  39. @Resource
  40. private CollageMapper collageMapper;
  41. @Resource
  42. private ProductMapper productMapper;
  43. @Resource
  44. private CouponMapper couponMapper;
  45. @Value("${caimei.oldapi}")
  46. private String domain;
  47. @Override
  48. public ResponseJson<PageInfo<OrderVo>> getOrderList(Integer orderState, Integer userId, Integer pageNum, Integer pageSize) {
  49. PageHelper.startPage(pageNum, pageSize);
  50. List<OrderVo> orderList = orderMapper.findOrderList(userId, orderState);
  51. getOrderData(orderList);
  52. PageInfo<OrderVo> pageData = new PageInfo<>(orderList);
  53. return ResponseJson.success(pageData);
  54. }
  55. /**
  56. * 主订单下信息
  57. */
  58. private void getOrderData(List<OrderVo> orderList) {
  59. for (OrderVo order : orderList) {
  60. initOrder(order);
  61. }
  62. }
  63. @Override
  64. public ResponseJson<Map<String, Object>> getOrderDetail(Integer orderId) {
  65. Map<String, Object> map = new HashMap<>(6);
  66. //收货地址
  67. UserInfoVo userInfo = orderMapper.findUserInfo(orderId);
  68. //订单信息,运费
  69. OrderVo order = orderMapper.findOrder(orderId);
  70. if (order == null) {
  71. return ResponseJson.error("该订单已删除", null);
  72. }
  73. initOrder(order);
  74. map.put("order", order);
  75. map.put("userInfo", userInfo);
  76. map.put("shopOrderList", order.getShopOrderList());
  77. map.put("discernReceiptList", order.getDiscernReceiptVoList());
  78. if (order.getFlag()) {
  79. map.put("returnGoodsStutas", 2);
  80. map.put("helpContent", order.getHelpContent());
  81. } else {
  82. map.put("returnGoodsStutas", 1);
  83. map.put("helpContent", null);
  84. }
  85. return ResponseJson.success(map);
  86. }
  87. private void setOrderStatus(OrderVo order) {
  88. Integer orderId = order.getOrderId();
  89. //111,待付待收待发
  90. if ("11".equals(order.getStatus()) && "1".equals(order.getPayStatus())) {
  91. order.setStatus("111");
  92. }
  93. //判断交易全退情况下,是否发过货,77,交易全退可以查看物流
  94. List<LogisticsBatchVo> batchList = orderMapper.findLogistics(orderId);
  95. if ("7".equals(order.getStatus()) && batchList != null && batchList.size() > 0) {
  96. order.setStatus("77");
  97. }
  98. //部分付款/已付款订单,设置拼团状态
  99. if ((order.getStatus().startsWith("2") || order.getStatus().startsWith("3")) && null != order.getCollageStatus()) {
  100. if (1 == order.getCollageStatus()) {
  101. // 拼团中
  102. order.setStatus("81");
  103. } else if (2 == order.getCollageStatus()) {
  104. if (order.getStatus().endsWith("1") || order.getStatus().endsWith("2")) {
  105. // 拼团成功,待发货
  106. order.setStatus("82");
  107. } else if (order.getStatus().endsWith("3")) {
  108. // 拼团成功,已发货
  109. order.setStatus("83");
  110. }
  111. } else if (0 == order.getCollageStatus() && new Date().compareTo(order.getCollageEndTime()) > 0) {
  112. // 拼团结束,关闭订单
  113. order.setStatus("6");
  114. }
  115. }
  116. }
  117. @Override
  118. public ResponseJson<List<LogisticsBatchVo>> logistics(Integer orderId) {
  119. OrderVo order = orderMapper.findOrder(orderId);
  120. if (order == null) {
  121. return ResponseJson.error("订单已删除", null);
  122. }
  123. List<LogisticsBatchVo> batchList = orderMapper.findLogistics(orderId);
  124. for (LogisticsBatchVo batch : batchList) {
  125. List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(orderId);
  126. for (ShopOrderVo shopOrder : shopOrderList) {
  127. initShopOrder(shopOrder);
  128. List<LogisticsRecordVo> logisticsRecordList = orderMapper.findLogisticsRecord(shopOrder.getShopOrderId(), batch.getId());
  129. for (LogisticsRecordVo logisticsRecord : logisticsRecordList) {
  130. logisticsRecord.setImage(ProductUtils.getImageURL("product", logisticsRecord.getImage(), 0, domain));
  131. }
  132. shopOrder.setLogisticsRecordList(logisticsRecordList);
  133. shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
  134. }
  135. //物流信息
  136. List<LogisticsInformationVo> logisticsInfoList = orderMapper.findLogisticsInfo(batch.getId());
  137. for (LogisticsInformationVo logisticsInfo : logisticsInfoList) {
  138. List<RouterVo> routers = JSONArray.parseArray(logisticsInfo.getInfo(), RouterVo.class);
  139. logisticsInfo.setRouterList(routers);
  140. }
  141. batch.setLogisticsInformationList(logisticsInfoList);
  142. batch.setShopOrderList(shopOrderList);
  143. }
  144. return ResponseJson.success(batchList);
  145. }
  146. @Override
  147. public ResponseJson<String> affirmCargo(Integer orderId) {
  148. OrderVo order = orderMapper.findOrder(orderId);
  149. if (order == null) {
  150. return ResponseJson.error("订单不存在", null);
  151. }
  152. if ("33".equals(order.getStatus()) && "3".equals(order.getPayStatus())) {
  153. //已付款供应商,订单完成
  154. order.setStatus("5");
  155. orderMapper.updateOrderStatus(order);
  156. orderMapper.updateLogisticsBatch(orderId);
  157. } else if ("33".equals(order.getStatus())) {
  158. //交易完成
  159. order.setStatus("4");
  160. orderMapper.updateOrderStatus(order);
  161. orderMapper.updateLogisticsBatch(orderId);
  162. } else {
  163. return ResponseJson.error("订单异常", null);
  164. }
  165. return ResponseJson.success("");
  166. }
  167. @Override
  168. @Transactional(rollbackFor = Exception.class)
  169. public ResponseJson<String> deleteOrder(Integer orderId) {
  170. OrderVo order = orderMapper.findOrder(orderId);
  171. if (order == null) {
  172. return ResponseJson.error("订单不存在", null);
  173. }
  174. if (!("6".equals(order.getStatus()))) {
  175. return ResponseJson.error("订单异常", null);
  176. }
  177. orderMapper.deleteOrder(orderId);
  178. //逻辑删除子订单
  179. orderMapper.deleteShopOrder(orderId);
  180. //逻辑删除收款记录
  181. List<DiscernReceiptVo> discernReceipt = orderMapper.findDiscernReceipt(orderId);
  182. if (discernReceipt != null && discernReceipt.size() > 0) {
  183. orderMapper.deleteReceiptOrderRelation(orderId);
  184. for (DiscernReceiptVo receipt : discernReceipt) {
  185. orderMapper.deleteDiscernReceipt(receipt.getId());
  186. }
  187. }
  188. String[] shopOrderIds = order.getShopOrderIds().split(",");
  189. //逻辑删除付款记录
  190. for (String shopOrderId : shopOrderIds) {
  191. if (StringUtils.isNotBlank(shopOrderId)) {
  192. List<CmPayShopRecordPo> payShopRecordList = orderMapper.findPayShopRecord(Integer.valueOf(shopOrderId));
  193. if (payShopRecordList != null && payShopRecordList.size() > 0) {
  194. orderMapper.deletePayShopRecord(Integer.valueOf(shopOrderId));
  195. for (CmPayShopRecordPo payShopRecord : payShopRecordList) {
  196. orderMapper.updatePayShop(payShopRecord.getPayShopID());
  197. }
  198. }
  199. }
  200. }
  201. return ResponseJson.success(null);
  202. }
  203. @Override
  204. public ResponseJson<String> cancelOrder(Integer orderId) {
  205. OrderVo order = orderMapper.findOrder(orderId);
  206. if (order == null) {
  207. return ResponseJson.error("订单不存在", null);
  208. }
  209. if (!("11".equals(order.getStatus()) || "0".equals(order.getStatus()))) {
  210. return ResponseJson.error("订单异常", null);
  211. }
  212. order.setStatus("6");
  213. orderMapper.cancelOrder(orderId,"用户主动取消订单");
  214. orderMapper.cancelShopOrder(orderId,"用户主动取消订单");
  215. Integer receiveCouponId = orderMapper.findOrderCoupon(orderId);
  216. ReceiveCouponPo receiveCoupon = couponMapper.getReceiveCouponById(receiveCouponId);
  217. if (null != receiveCoupon) {
  218. if (1 == receiveCoupon.getSource() || 2 == receiveCoupon.getSource()) {
  219. // 取消订单回退优惠券
  220. orderMapper.revertCoupon(receiveCouponId);
  221. }
  222. if (3 == receiveCoupon.getSource()) {
  223. // 领券购买取消订单撤销领取
  224. couponMapper.deleteReceiveCoupon(receiveCouponId);
  225. }
  226. }
  227. return ResponseJson.success(null);
  228. }
  229. @Override
  230. public ResponseJson<PageInfo<OrderVo>> searchOrder(String searchWord, Integer userId, Integer pageNum, Integer pageSize) {
  231. //保存订单搜索记录
  232. saveHistory(searchWord, userId);
  233. PageHelper.startPage(pageNum, pageSize);
  234. List<OrderVo> orderList = orderMapper.searchOrder(searchWord, userId);
  235. //获取主订单数据
  236. getOrderData(orderList);
  237. PageInfo<OrderVo> pageData = new PageInfo<>(orderList);
  238. return ResponseJson.success(pageData);
  239. }
  240. /**
  241. * 保存订单搜索记录
  242. */
  243. private void saveHistory(String searchWord, Integer userId) {
  244. //保存并删除大于10条的历史记录
  245. UserSearchHistoryPo historyRecord = new UserSearchHistoryPo();
  246. historyRecord.setUserId(userId.longValue());
  247. historyRecord.setSearchDate(new Date());
  248. historyRecord.setSearchWord(searchWord);
  249. historyRecord.setDelFlag("0");
  250. Long recordId = orderMapper.getHistoryIdByWord(userId, searchWord);
  251. if (recordId != null && recordId > 0L) {
  252. historyRecord.setId(recordId);
  253. orderMapper.updateHistoryById(historyRecord);
  254. } else {
  255. orderMapper.insertHistory(historyRecord);
  256. }
  257. orderMapper.deleteHistoryByUserId(userId);
  258. }
  259. @Override
  260. public ResponseJson<List<String>> getSearchHistory(Integer userId) {
  261. List<String> searchHistoryList = orderMapper.getSearchHistoryList(userId);
  262. return ResponseJson.success(searchHistoryList);
  263. }
  264. @Override
  265. public ResponseJson<String> deleteSearchHistory(Integer userId) {
  266. orderMapper.deleteSearchHistory(userId);
  267. return ResponseJson.success(null);
  268. }
  269. @Override
  270. public ResponseJson<Map<String, Object>> orderTotal(Integer userId) {
  271. Map<String, Object> map = new HashMap<>(5);
  272. //待付款数量
  273. Integer paymentCount = orderMapper.findOrderCount(userId, 1);
  274. paymentCount = paymentCount == null ? 0 : paymentCount;
  275. map.put("paymentCount", paymentCount);
  276. //待发货数量
  277. Integer waitShipmentsCount = orderMapper.findOrderCount(userId, 2);
  278. waitShipmentsCount = waitShipmentsCount == null ? 0 : waitShipmentsCount;
  279. map.put("waitShipmentsCount", waitShipmentsCount);
  280. //已发货数量
  281. Integer shipmentsCount = orderMapper.findOrderCount(userId, 3);
  282. shipmentsCount = shipmentsCount == null ? 0 : shipmentsCount;
  283. map.put("shipmentsCount", shipmentsCount);
  284. //退货款数量
  285. Integer salesReturnCount = orderMapper.findOrderCount(userId, 4);
  286. salesReturnCount = salesReturnCount == null ? 0 : salesReturnCount;
  287. map.put("salesReturnCount", salesReturnCount);
  288. return ResponseJson.success(map);
  289. }
  290. @Override
  291. public ResponseJson<PageInfo<OrderVo>> dealerOrderList(Integer orderState, Integer orderType, Integer userId, String searchWord, Integer pageNum, Integer pageSize) {
  292. //保存订单搜索记录
  293. if (StringUtils.isNotBlank(searchWord)) {
  294. saveHistory(searchWord, userId);
  295. }
  296. PageHelper.startPage(pageNum, pageSize);
  297. List<OrderVo> orderList = orderMapper.dealerOrderList(orderState, orderType, userId, searchWord);
  298. getOrderData(orderList);
  299. PageInfo<OrderVo> pageData = new PageInfo<>(orderList);
  300. return ResponseJson.success(pageData);
  301. }
  302. @Override
  303. public ResponseJson<List<OrderProductVo>> buyAgain(Integer orderId) {
  304. List<OrderProductVo> orderProductList = orderMapper.findOrderProductAll(orderId);
  305. List<OrderProductVo> list = new ArrayList<>();
  306. //商品是否全部下架
  307. AtomicBoolean isOff = new AtomicBoolean(true);
  308. orderProductList.forEach(orderProduct -> {
  309. orderProduct.setProductImage(ProductUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain));
  310. Integer validFlag = orderMapper.findProductStatus(orderProduct.getProductId());
  311. if (validFlag == 2) {
  312. list.add(orderProduct);
  313. } else {
  314. isOff.set(false);
  315. }
  316. });
  317. if (isOff.get()) {
  318. return ResponseJson.error("订单内商品已全部下架,不能购买!", null);
  319. }
  320. if (list.size() > 0) {
  321. return ResponseJson.error(list);
  322. }
  323. return ResponseJson.success(null);
  324. }
  325. @Override
  326. public ResponseJson<CollageDetailsVo> collageDetails(Integer collageId, Integer userId) {
  327. CollageDetailsVo collageDetails = collageMapper.getCollageDetails(collageId);
  328. if (2 == collageDetails.getStatus()) {
  329. collageDetails.setExistNum(collageDetails.getMemberNum());
  330. }
  331. ProductDetailsVo product = productMapper.findProductByProductId(collageDetails.getSkuId());
  332. // 拼团价
  333. product.setPrice(collageDetails.getPrice());
  334. collageDetails.setUnit(product.getUnit());
  335. if (null != userId && userId > 0) {
  336. Integer orderId = collageMapper.getMemberOrderId(collageId, userId);
  337. collageDetails.setOrderId(orderId);
  338. //税费
  339. boolean addTaxFlag = ("0".equals(product.getIncludedTax()) && ("1".equals(product.getInvoiceType()) || "2".equals(product.getInvoiceType())));
  340. if (addTaxFlag) {
  341. BigDecimal addedValueTax = MathUtil.div(MathUtil.mul(product.getPrice(), product.getClubTaxPoint()), BigDecimal.valueOf(100), 2);
  342. BigDecimal price = MathUtil.add(product.getPrice(), addedValueTax);
  343. product.setPrice(price);
  344. if (null != product.getNormalPrice()) {
  345. addedValueTax = MathUtil.div(MathUtil.mul(product.getNormalPrice(), product.getClubTaxPoint()), BigDecimal.valueOf(100), 2);
  346. price = MathUtil.add(product.getNormalPrice(), addedValueTax);
  347. product.setNormalPrice(price);
  348. }
  349. }
  350. collageDetails.setPrice(product.getPrice());
  351. collageDetails.setNormalPrice(product.getNormalPrice());
  352. // 查询该订单是否已有分享记录
  353. Integer shareRecordCount = couponMapper.getShareRecordCount(orderId);
  354. if (0 == shareRecordCount) {
  355. collageDetails.setShareFlag(1);
  356. }
  357. }
  358. return ResponseJson.success(collageDetails);
  359. }
  360. @Override
  361. public ResponseJson shareOrder(Integer orderId, Integer userId) {
  362. // 查询该订单是否已有分享记录
  363. Integer shareRecordCount = couponMapper.getShareRecordCount(orderId);
  364. if (0 == shareRecordCount) {
  365. // 只能获得一次优惠券领取资格
  366. List<Integer> couponIds = couponMapper.getCurrentCouponIds(6);
  367. CouponSharePo couponSharePo = new CouponSharePo();
  368. couponSharePo.setShareUserId(userId);
  369. couponSharePo.setOrderId(orderId);
  370. couponSharePo.setType(3);
  371. couponIds.forEach(couponId->{
  372. couponSharePo.setShareCouponId(couponId);
  373. couponMapper.insertCouponShare(couponSharePo);
  374. });
  375. }
  376. return ResponseJson.success("分享成功");
  377. }
  378. /**
  379. * 支付金额,待付金额
  380. */
  381. public List<DiscernReceiptVo> getDiscernReceipt(OrderVo order) {
  382. //支付记录
  383. List<DiscernReceiptVo> discernReceiptList = orderMapper.findDiscernReceipt(order.getOrderId());
  384. BigDecimal receiptAmount = BigDecimal.ZERO;
  385. //订单款
  386. if (discernReceiptList != null && discernReceiptList.size() > 0) {
  387. for (DiscernReceiptVo discernReceipt : discernReceiptList) {
  388. receiptAmount = receiptAmount.add(discernReceipt.getAssociateAmount());
  389. }
  390. order.setReceiptDate(discernReceiptList.get(0).getReceiptDate());
  391. }
  392. //待付总金额
  393. order.setPendingPayments(MathUtil.sub(order.getPayableAmount(), receiptAmount));
  394. //支付总金额
  395. order.setReceiptAmount(receiptAmount);
  396. return discernReceiptList;
  397. }
  398. public void initShopOrder(ShopOrderVo shopOrder) {
  399. if (1 == shopOrder.getShopStatus()) {
  400. if ("1".equals(shopOrder.getReceiptStatus()) && "1".equals(shopOrder.getSendOutStatus())) {
  401. shopOrder.setShopStatus(11);
  402. } else if ("1".equals(shopOrder.getReceiptStatus()) && "2".equals(shopOrder.getSendOutStatus())) {
  403. shopOrder.setShopStatus(12);
  404. } else if ("1".equals(shopOrder.getReceiptStatus()) && "3".equals(shopOrder.getSendOutStatus())) {
  405. shopOrder.setShopStatus(13);
  406. } else if ("2".equals(shopOrder.getReceiptStatus()) && "1".equals(shopOrder.getSendOutStatus())) {
  407. shopOrder.setShopStatus(21);
  408. } else if ("2".equals(shopOrder.getReceiptStatus()) && "2".equals(shopOrder.getSendOutStatus())) {
  409. shopOrder.setShopStatus(22);
  410. } else if ("2".equals(shopOrder.getReceiptStatus()) && "3".equals(shopOrder.getSendOutStatus())) {
  411. shopOrder.setShopStatus(23);
  412. } else if ("3".equals(shopOrder.getReceiptStatus()) && "1".equals(shopOrder.getSendOutStatus())) {
  413. shopOrder.setShopStatus(31);
  414. } else if ("3".equals(shopOrder.getReceiptStatus()) && "2".equals(shopOrder.getSendOutStatus())) {
  415. shopOrder.setShopStatus(32);
  416. } else if ("3".equals(shopOrder.getReceiptStatus()) && "3".equals(shopOrder.getSendOutStatus())) {
  417. shopOrder.setShopStatus(33);
  418. }
  419. }
  420. //拼接运费
  421. Double ColdChina = Double.valueOf(700);
  422. String shopPostFlag = shopOrder.getShopPostFlag() != null ? shopOrder.getShopPostFlag() : "-2";
  423. String postageInfo = null;
  424. if (null != shopOrder.getIsColdChina() && shopOrder.getIsColdChina() == 1) {
  425. if ("2" == shopOrder.getShopPostFlag()) {
  426. // 到付
  427. postageInfo = "¥" + ColdChina + "(" + (shopOrder.getIsColdChina() == 1 ? "冷链费: ¥" + ColdChina + "," : "") + "其他: 到付)";
  428. } else if ("0" == shopOrder.getShopPostFlag()) {
  429. // 包邮
  430. postageInfo = "¥" + ColdChina + "(" + (shopOrder.getIsColdChina() == 1 ? "冷链费: ¥" + ColdChina + "," : "") + "其他: 包邮)";
  431. } else {
  432. // 有运费
  433. postageInfo = "¥" + MathUtil.add(shopOrder.getShopPostFee(), ColdChina) + "(" + (shopOrder.getIsColdChina() == 1 ? "冷链费: ¥" + ColdChina + "," : "") + "其他: ¥" + shopOrder.getShopPostFee() + ")";
  434. }
  435. } else {
  436. postageInfo = shopPostFlag.equals("2") ? "到付" : shopPostFlag.equals("0") ? "包邮" : "¥" + shopOrder.getShopPostFee();
  437. }
  438. shopOrder.setPostageInfo(postageInfo);
  439. }
  440. public void initOrder(OrderVo order) {
  441. order.setOrderMark("#" + order.getOrderId() + "#");
  442. setOrderStatus(order);
  443. //商品信息
  444. List<ShopOrderVo> shopOrderList = orderMapper.findAllShopOrder(order.getOrderId());
  445. BigDecimal expensesOfTaxation = new BigDecimal(0);
  446. int returnedNumTotal = 0;
  447. int actualCancelNumTotal = 0;
  448. String helpContent = null;
  449. boolean flag = false;
  450. //bug
  451. order.setPayTotalFee(new BigDecimal(0));
  452. order.setPayableAmount(new BigDecimal(0));
  453. order.setPendingPayments(new BigDecimal(0));
  454. for (ShopOrderVo shopOrder : shopOrderList) {
  455. order.setPayTotalFee(MathUtil.add(order.getPayTotalFee(),shopOrder.getTotalAmount()));
  456. order.setPayableAmount(MathUtil.add(order.getPayableAmount(),shopOrder.getRealPay()));
  457. order.setPendingPayments(MathUtil.add(order.getPendingPayments(),shopOrder.getRestAmount()));
  458. if ("81".equals(order.getStatus())) {
  459. shopOrder.setShopStatus(81);
  460. } else if ("82".equals(order.getStatus())) {
  461. shopOrder.setShopStatus(82);
  462. } else if ("83".equals(order.getStatus())) {
  463. shopOrder.setShopStatus(83);
  464. } else if ("6".equals(order.getStatus())) {
  465. shopOrder.setShopStatus(4);
  466. }
  467. initShopOrder(shopOrder);
  468. List<OrderProductVo> orderProductList = orderMapper.findOrderProduct(shopOrder.getShopOrderId());
  469. for (OrderProductVo orderProduct : orderProductList) {
  470. //订单中存在不能退货的商品则给出不能退货提示
  471. if (null != orderProduct.getReturnGoodsStutas() && orderProduct.getReturnGoodsStutas() == 2) {
  472. flag = true;
  473. helpContent = orderMapper.getHelpContent(1040);
  474. }
  475. //运费
  476. if (shopOrder.getShopId() == 998) {
  477. order.setFreight(orderProduct.getPrice());
  478. }
  479. //总税费
  480. expensesOfTaxation = expensesOfTaxation.add(orderProduct.getTotalAddedValueTax());
  481. orderProduct.setProductImage(ProductUtils.getImageURL("product", orderProduct.getProductImage(), 0, domain));
  482. //已发货数量
  483. orderProduct.setShipmentsNum(orderProduct.getNum() + orderProduct.getPresentNum() - orderProduct.getNotOutStore());
  484. //已退货数量
  485. Integer returnedNum = orderMapper.returnedPurchase(orderProduct.getShopOrderId(), orderProduct.getProductId());
  486. returnedNum = null != returnedNum ? returnedNum : 0;
  487. returnedNumTotal += returnedNum;
  488. orderProduct.setReturnedNum(returnedNum);
  489. //已取消发货数量
  490. Integer actualCancelNum = orderMapper.actualCancelNum(orderProduct.getShopOrderId(), orderProduct.getProductId());
  491. actualCancelNum = null != actualCancelNum ? actualCancelNum : 0;
  492. actualCancelNumTotal += actualCancelNum;
  493. orderProduct.setActualCancelNum(actualCancelNum);
  494. //判断商品价格是否含税
  495. if ("1".equals(orderProduct.getIncludedTax()) || ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType())))) {
  496. orderProduct.setIncludedTaxFlag("2");
  497. } else if (orderProduct.getIncludedTax() != null && "0".equals(orderProduct.getIncludedTax()) && "3".equals(orderProduct.getInvoiceType())) {
  498. orderProduct.setIncludedTaxFlag("1");
  499. } else {
  500. orderProduct.setIncludedTaxFlag("3");
  501. }
  502. //不含税可开票商品,单价/折后单价在原基础上加上税费
  503. if ("0".equals(orderProduct.getIncludedTax()) && ("1".equals(orderProduct.getInvoiceType()) || "2".equals(orderProduct.getInvoiceType()))) {
  504. //计算单价的税费
  505. BigDecimal valueTax = MathUtil.div(MathUtil.mul(orderProduct.getPrice(), orderProduct.getTaxRate()), 100);
  506. orderProduct.setPrice(MathUtil.add(orderProduct.getPrice(), valueTax));
  507. orderProduct.setDiscountPrice(MathUtil.add(orderProduct.getDiscountPrice(), orderProduct.getAddedValueTax()));
  508. }
  509. }
  510. shopOrder.setOrderProductList(orderProductList);
  511. shopOrder.setShopLogo(ProductUtils.getImageURL("shopLogo", shopOrder.getShopLogo(), 0, domain));
  512. }
  513. order.setExpensesOfTaxation(expensesOfTaxation);
  514. order.setReturnedNum(returnedNumTotal);
  515. order.setActualCancelNum(actualCancelNumTotal);
  516. order.setFlag(flag);
  517. order.setHelpContent(helpContent);
  518. // 查询该订单是否已有分享记录
  519. Integer shareRecordCount = couponMapper.getShareRecordCount(order.getOrderId());
  520. if (0 == shareRecordCount) {
  521. order.setShareFlag(1);
  522. }
  523. //删除运费商品
  524. shopOrderList.removeIf(student -> 998 == student.getShopId());
  525. List<DiscernReceiptVo> discernReceiptList = getDiscernReceipt(order);
  526. //退款总金额
  527. BigDecimal returnedPurchaseFee = orderMapper.findReturnedPurchase(order.getOrderId());
  528. order.setReturnedPurchaseFee(returnedPurchaseFee);
  529. order.setShopOrderList(shopOrderList);
  530. order.setDiscernReceiptVoList(discernReceiptList);
  531. }
  532. }