HeHeNewOrderService.java 15 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293
  1. package com.caimei.modules.hehe.service;
  2. import com.caimei.modules.hehe.dao.HeHeNewOrderDao;
  3. import com.caimei.modules.hehe.entity.CmHeheCouponOrderRecord;
  4. import com.caimei.modules.order.dao.*;
  5. import com.caimei.modules.order.entity.*;
  6. import com.caimei.modules.order.service.CmReceiptOrderRelationService;
  7. import com.caimei.modules.order.service.OrderUserInfoService;
  8. import com.caimei.modules.order.utils.NewOrderStatus;
  9. import com.caimei.modules.product.dao.CmPromotionDao;
  10. import com.caimei.modules.product.entity.OrderProductLadderPrice;
  11. import com.caimei.modules.user.dao.CmUserDao;
  12. import com.caimei.modules.user.entity.CmUser;
  13. import com.caimei.utils.AppKeys;
  14. import com.caimei.utils.AppUtils;
  15. import com.caimei.utils.SysConfig;
  16. import com.thinkgem.jeesite.common.persistence.Page;
  17. import com.thinkgem.jeesite.common.service.CrudService;
  18. import com.thinkgem.jeesite.common.utils.StringUtils;
  19. import org.apache.commons.collections.CollectionUtils;
  20. import org.springframework.beans.factory.annotation.Autowired;
  21. import org.springframework.stereotype.Service;
  22. import org.springframework.transaction.annotation.Transactional;
  23. import javax.annotation.Resource;
  24. import java.util.ArrayList;
  25. import java.util.List;
  26. import java.util.stream.Collectors;
  27. import java.util.stream.IntStream;
  28. /**
  29. * Description
  30. *
  31. * @author : plf
  32. * @date : 2021/4/27
  33. */
  34. @Service
  35. @Transactional(readOnly = false)
  36. public class HeHeNewOrderService extends CrudService<HeHeNewOrderDao, NewOrder> {
  37. @Autowired
  38. private HeHeNewOrderDao heHeNewOrderDao;
  39. @Resource
  40. private NewOrderProductDao newOrderProductDao;
  41. @Resource
  42. private OrderUserInfoService orderUserInfoService;
  43. @Resource
  44. private NewShopOrderDao newShopOrderDao;
  45. @Resource
  46. private CmUserDao cmUserDao;
  47. @Resource
  48. private CmDiscernReceiptDao cmDiscernReceiptDao;
  49. @Resource
  50. private CmReturnedPurchaseDao cmReturnedPurchaseDao;
  51. @Resource
  52. private CmPayShopRecordDao cmPayShopRecordDao;
  53. @Resource
  54. private CmReceiptOrderRelationDao cmReceiptOrderRelationDao;
  55. @Autowired
  56. private CmReceiptOrderRelationService cmReceiptOrderRelationService;
  57. @Autowired
  58. private CmPromotionDao cmPromotionDao;
  59. @Override
  60. public NewOrder get(String id) {
  61. NewOrder newOrder = super.get(id);
  62. CmUser user = cmUserDao.get(newOrder.getUserID().toString());
  63. if (user != null) {
  64. //查询用户余额,机构名
  65. newOrder.setBuyer(user.getName());
  66. Double ableUserMoney = user.getAbleUserMoney() == null ? 0d : user.getAbleUserMoney();
  67. newOrder.setAbleUserMoney(ableUserMoney);
  68. }
  69. List<Integer> l = new ArrayList<>();
  70. l.add(newOrder.getOrderID());
  71. List<Integer> orderIds = cmDiscernReceiptDao.findRebateOrderID(l);
  72. if (orderIds.contains(newOrder.getOrderID()))
  73. newOrder.setRebateOrder("1");
  74. else
  75. newOrder.setRebateOrder("0");
  76. if (null != newOrder) {
  77. // 获取订单优惠券使用记录
  78. if (newOrder.getCouponAmount() != null && newOrder.getCouponAmount() > 0) {
  79. CmHeheCouponOrderRecord couponRecord = heHeNewOrderDao.findOrderCouponRecord(newOrder.getOrderID());
  80. if (couponRecord != null) {
  81. newOrder.setReceiveCouponId(couponRecord.getReceiveCouponId());
  82. newOrder.setHeheCouponRecord(couponRecord);
  83. }
  84. }
  85. // 获取订单分享减免记录
  86. if (newOrder.getReductionAmount() != null && newOrder.getReductionAmount() > 0) {
  87. Double reductionTouchPrice = heHeNewOrderDao.findReductionTouchPrice(newOrder.getOrderID());
  88. newOrder.setReductionTouchPrice(reductionTouchPrice);
  89. }
  90. //获取订单客户
  91. OrderUserInfo orderUserInfo = orderUserInfoService.findByOrderID(newOrder.getOrderID());
  92. if (null != orderUserInfo) {
  93. newOrder.setBpOrderUserinfo(orderUserInfo);
  94. }
  95. //获取订单商品
  96. List<NewOrderProduct> list = new ArrayList<>();
  97. List<NewShopOrder> shopOrders = newShopOrderDao.findListByOrderID(newOrder.getOrderID());
  98. if (CollectionUtils.isNotEmpty(shopOrders)) {
  99. for (NewShopOrder shopOrder : shopOrders) {
  100. List<NewOrderProduct> pList = newOrderProductDao.findListByShopOrderID(shopOrder.getShopOrderID());
  101. pList.forEach(orderProduct -> {
  102. if (orderProduct.getLadderPriceFlag() == 1) {
  103. // 查询订单商品阶梯价格
  104. List<OrderProductLadderPrice> ladderPriceList = newOrderProductDao.findladderPriceList(orderProduct.getOrderProductID());
  105. if (null != ladderPriceList && ladderPriceList.size() > 0) {
  106. IntStream.range(0, ladderPriceList.size()).forEach(i -> {
  107. if (i == ladderPriceList.size() - 1) {
  108. ladderPriceList.get(i).setBuyNumRangeShow("≥" + ladderPriceList.get(i).getBuyNum());
  109. } else {
  110. String buyNumRangeShow = ladderPriceList.get(i).getBuyNum() + "~" + (ladderPriceList.get(i + 1).getBuyNum() - 1);
  111. ladderPriceList.get(i).setBuyNumRangeShow(buyNumRangeShow);
  112. }
  113. });
  114. orderProduct.setOrderProductLadderPriceList(ladderPriceList);
  115. }
  116. }
  117. //分销者名称
  118. if (orderProduct.getHeUserId() != null && orderProduct.getHeUserId() > 0) {
  119. String name = heHeNewOrderDao.findHeUser(orderProduct.getHeUserId());
  120. orderProduct.setHeUserName(name);
  121. }
  122. });
  123. list.addAll(pList);
  124. shopOrder.setNewOrderProducts(pList);
  125. if (pList.stream().anyMatch(p -> p.getProductID() == 999))
  126. shopOrder.setPostFeeCos("1");
  127. pList.forEach(item -> {
  128. if (NewOrderStatus.hasReturn(newOrder.getStatus())) {
  129. Integer returningNum = newOrderProductDao.getReturningNum(item.getOrderProductID());
  130. Integer returnedNum = newOrderProductDao.getReturnedNum(item.getOrderProductID());
  131. item.setReturningNum(returningNum);
  132. item.setReturnedNum(returnedNum);
  133. }
  134. /**确认收货信息*/
  135. if (NewOrderStatus.hasReceived(newOrder.getStatus())) {
  136. Integer receivedNum = newOrderProductDao.getReceivedNum(item.getOrderProductID());
  137. item.setReceivedNum(receivedNum);
  138. }
  139. String domain = SysConfig.getStringConfig("crm.server.domain");
  140. item.setProductImage(AppUtils.getProductImageURL(item.getProductImage(), AppKeys.ORIGINAL_PICTURE, domain));
  141. if (item != null && item.getOrderPromotionsId() != null && item.getOrderPromotionsId() > 0) {
  142. item.setProductPromotion(cmPromotionDao.findOrderPromotions(item.getOrderPromotionsId()));
  143. }
  144. });
  145. Double payed = cmPayShopRecordDao.sumByShopOrderID(shopOrder.getShopOrderID());
  146. shopOrder.setPayed(payed);
  147. }
  148. newOrder.setNewShopOrders(shopOrders);
  149. }
  150. if (CollectionUtils.isNotEmpty(list)) {
  151. newOrder.setOrderProduct(list);
  152. double freight = 0D;
  153. double totalAddedValueTax = 0D;
  154. for (NewOrderProduct op : list) {
  155. if (op.getProductID().intValue() == 999) { //邮费商品
  156. freight += op.getPrice();
  157. }
  158. totalAddedValueTax += op.getTotalAddedValueTax();
  159. }
  160. if ("1".equals(newOrder.getFreePostFlag())) newOrder.setFreight(freight);
  161. newOrder.setTotalAddedValueTax(totalAddedValueTax);
  162. }
  163. shopOrders.sort((so1, so2) -> {
  164. //给子订单排序 邮费排在最后 其余的按shopOrderID asc
  165. if ("1".equals(so1.getPostFeeCos())) return 1;
  166. return so1.getShopOrderID() - so2.getShopOrderID();
  167. });
  168. }
  169. return newOrder;
  170. }
  171. public Page<NewOrder> findPage(Page<NewOrder> page, NewOrder entity) {
  172. Page<NewOrder> pageResult = super.findPage(page, entity);
  173. List<NewOrder> results = pageResult.getList();
  174. List<Integer> oId = results.stream().map(NewOrder::getOrderID).collect(Collectors.toList());
  175. //看看这些订单有哪些是返佣订单 返回他们的orderID
  176. List<Integer> orderIds = null;
  177. if (CollectionUtils.isNotEmpty(oId)) {
  178. orderIds = cmDiscernReceiptDao.findRebateOrderID(results.stream().map(NewOrder::getOrderID).collect(Collectors.toList()));
  179. }
  180. //从查询到的订单列表中 找到正在退款中的订单集合
  181. List<Integer> orderIdsInReturn = null;
  182. List<Integer> orderIdsInApplyReturn = null;//查询可以申请退款的订单ID
  183. if (CollectionUtils.isNotEmpty(oId)) {
  184. orderIdsInReturn = cmReturnedPurchaseDao.findOrderIDInReturnPurchase(oId);
  185. orderIdsInApplyReturn = cmReturnedPurchaseDao.findOrderIDsInApplyReturnFlag(oId);
  186. }
  187. for (NewOrder order : results) {
  188. order.setAbleUserMoney(0d);
  189. if ((orderIds != null && orderIds.contains(order.getOrderID())) || "1".equals(order.getRebateFlag())) {
  190. order.setRebateOrder("1");
  191. } else {
  192. order.setRebateOrder("0");
  193. List<Integer> ids = cmReceiptOrderRelationDao.toAudit(order.getOrderID());
  194. if (ids != null && ids.size() > 0) {
  195. order.setToAudit("1");
  196. }
  197. }
  198. if (orderIdsInReturn != null && orderIdsInReturn.contains(order.getOrderID())) {
  199. order.setReturnedPurchaseStatus("1");
  200. } else {
  201. order.setReturnedPurchaseStatus("0");
  202. }
  203. if (orderIdsInApplyReturn != null && orderIdsInApplyReturn.contains(order.getOrderID())) {
  204. order.setApplyReturnedPurchaseFlag("0");
  205. } else {
  206. order.setApplyReturnedPurchaseFlag("1");
  207. }
  208. List<NewShopOrder> shopOrders = order.getNewShopOrders();
  209. if (shopOrders != null && shopOrders.size() == 1) {
  210. order.setShopName(shopOrders.get(0).getShopName());
  211. }
  212. int count = 0;
  213. for (NewShopOrder shopOrder : order.getNewShopOrders()) {
  214. shopOrder.setOrderID(order.getOrderID());
  215. shopOrder.setOrderNo(order.getOrderNo());
  216. shopOrder.setOrderType(Integer.parseInt(order.getOrderType()));
  217. shopOrder.setReceiver(order.getReceiver());
  218. shopOrder.setOrderSource(order.getOrderSource());
  219. shopOrder.setOrderTime(order.getOrderTime());
  220. shopOrder.setBuyer(order.getBuyer());
  221. if (shopOrder.getShopID() != 998) {
  222. count++;
  223. }
  224. Integer shopOrderID = shopOrder.getShopOrderID();//子订单ID
  225. //通过子订单ID查询子订单信息
  226. NewShopOrder newShopOrder = newShopOrderDao.get(String.valueOf(shopOrderID));
  227. if (null != newShopOrder) {
  228. shopOrder.setFee(newShopOrder.getFee());
  229. shopOrder.setShouldPayProduct(newShopOrder.getShouldPayProduct());
  230. List<NewOrderProduct> pList = newOrderProductDao.findListByShopOrderID(shopOrderID);
  231. pList.forEach(orderProduct -> {
  232. //充值定金商品
  233. if (6060 == orderProduct.getProductID()) {
  234. order.setRechargeGoods(1);
  235. }
  236. });
  237. } else {
  238. shopOrder.setFee(0d);
  239. shopOrder.setShouldPayProduct(0d);
  240. }
  241. }
  242. //一个子订单只有一个商品时,不可拆分
  243. if (order.getProductCount() == null) {
  244. order.setProductCount(1);
  245. }
  246. if (order.getProductCount() <= count) {
  247. order.setSplitFlag("0");
  248. }
  249. //是否抹平支付过(抹平最多只允许存在一次)
  250. CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findSmoothoutInfo(order.getOrderID().toString());
  251. if (null != cmDiscernReceipt) {
  252. order.setAssociationType(cmDiscernReceipt.getAssociationType());
  253. String confirmType = cmDiscernReceipt.getConfirmType();
  254. order.setConfirmType(confirmType);
  255. // 是否是一比款收了多个订单
  256. if (StringUtils.equals(confirmType, "1") || StringUtils.equals(confirmType, "2") || StringUtils.equals(confirmType, "3")) {
  257. List<CmReceiptOrderRelation> byReceiptList = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId());
  258. if (CollectionUtils.isNotEmpty(byReceiptList) && byReceiptList.size() > 1) {
  259. order.setReceiptOrderFlag(true);
  260. }
  261. }
  262. }
  263. // 订单已收款才会出现抹平或者多收退余额,(已收再退款或者撤销退款订单即使存在抹平也需要当未抹平重新计算付款)
  264. // 抹平明细
  265. String receiptStatus = order.getReceiptStatus();
  266. if (StringUtils.equals("3", receiptStatus)) {
  267. if (null != cmDiscernReceipt) {
  268. String confirmType = cmDiscernReceipt.getConfirmType();
  269. order.setConfirmType(confirmType);
  270. double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(order.getOrderID()));
  271. order.setOrderReceivedAmount(associateAmount);
  272. //大额退余额
  273. if (StringUtils.equals("3", confirmType)) {
  274. String id = cmDiscernReceipt.getId();
  275. double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id);
  276. order.setReturnBalanceAmount(returnBalanceAmount);
  277. }
  278. }
  279. }
  280. }
  281. return pageResult;
  282. }
  283. }