HeHeNewOrderService.java 15 KB

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