package com.caimei.modules.hehe.service; import com.caimei.modules.bulkpurchase.dao.OrderInvoiceDao; import com.caimei.modules.bulkpurchase.service.OrderInvoiceService; import com.caimei.modules.hehe.dao.CmHeheUserDao; import com.caimei.modules.hehe.dao.HeHeNewOrderDao; import com.caimei.modules.order.dao.*; import com.caimei.modules.order.entity.*; import com.caimei.modules.order.service.CmReceiptOrderRelationService; import com.caimei.modules.order.service.OrderUserInfoService; import com.caimei.modules.order.utils.NewOrderStatus; import com.caimei.modules.product.dao.CmPromotionDao; import com.caimei.modules.product.dao.ProductDao; import com.caimei.modules.product.entity.OrderProductLadderPrice; import com.caimei.modules.user.dao.CmUserDao; import com.caimei.modules.user.dao.NewCmClubDao; import com.caimei.modules.user.dao.NewCmShopDao; import com.caimei.modules.user.entity.CmUser; import com.caimei.modules.user.service.CmUserBalanceRecordService; import com.caimei.modules.user.service.CmUserService; import com.caimei.utils.AppKeys; import com.caimei.utils.AppUtils; import com.caimei.utils.SysConfig; import com.thinkgem.jeesite.common.persistence.Page; import com.thinkgem.jeesite.common.service.CrudService; import com.thinkgem.jeesite.common.utils.StringUtils; import org.apache.commons.collections.CollectionUtils; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; import java.util.stream.IntStream; /** * Description * * @author : plf * @date : 2021/4/27 */ @Service @Transactional(readOnly = false) public class HeHeNewOrderService extends CrudService { @Autowired private HeHeNewOrderDao heHeNewOrderDao; @Resource private NewOrderProductDao newOrderProductDao; @Resource private OrderInvoiceService orderInvoiceService; @Resource private OrderUserInfoService orderUserInfoService; @Resource private NewShopOrderDao newShopOrderDao; @Resource private NewCmClubDao newCmClubDao; @Resource private LogisticsBatchDao logisticsBatchDao; @Resource private LogisticsRecordDao logisticsRecordDao; @Resource private LogisticsInformationDao logisticsInformationDao; @Resource private OrderInvoiceDao orderInvoiceDao; @Resource private NewOrderConfigDao newOrderConfigDao; @Resource private ProductDao productDao; @Resource private NewCmShopDao newCmShopDao; @Resource private CmUserDao cmUserDao; @Resource private CmUserService cmUserService; @Resource private CmReturnedPurchaseProductDao cmReturnedPurchaseProductDao; @Resource private CmDiscernReceiptDao cmDiscernReceiptDao; @Resource private CmUserBalanceRecordService cmUserBalanceRecordService; @Resource private CmReturnedPurchaseDao cmReturnedPurchaseDao; @Resource private CmPayShopRecordDao cmPayShopRecordDao; @Resource private CmReceiptOrderRelationDao cmReceiptOrderRelationDao; @Autowired private CmReceiptOrderRelationService cmReceiptOrderRelationService; @Autowired private CmPromotionDao cmPromotionDao; @Autowired private CmHeheUserDao cmHeheUserDao; @Override public NewOrder get(String id) { NewOrder newOrder = super.get(id); CmUser user = cmUserDao.get(newOrder.getUserID().toString()); if (user != null) { //查询用户余额,机构名 newOrder.setBuyer(user.getName()); Double ableUserMoney = user.getAbleUserMoney() == null ? 0d : user.getAbleUserMoney(); newOrder.setAbleUserMoney(ableUserMoney); } List l = new ArrayList<>(); l.add(newOrder.getOrderID()); List orderIds = cmDiscernReceiptDao.findRebateOrderID(l); if (orderIds.contains(newOrder.getOrderID())) newOrder.setRebateOrder("1"); else newOrder.setRebateOrder("0"); if (null != newOrder) { //获取订单客户 OrderUserInfo orderUserInfo = orderUserInfoService.findByOrderID(newOrder.getOrderID()); if (null != orderUserInfo) { newOrder.setBpOrderUserinfo(orderUserInfo); } //获取订单商品 List list = new ArrayList<>(); List shopOrders = newShopOrderDao.findListByOrderID(newOrder.getOrderID()); if (CollectionUtils.isNotEmpty(shopOrders)) { for (NewShopOrder shopOrder : shopOrders) { List pList = newOrderProductDao.findListByShopOrderID(shopOrder.getShopOrderID()); pList.forEach(orderProduct -> { if (orderProduct.getLadderPriceFlag() == 1) { // 查询订单商品阶梯价格 List ladderPriceList = newOrderProductDao.findladderPriceList(orderProduct.getOrderProductID()); if (null != ladderPriceList && ladderPriceList.size() > 0) { IntStream.range(0, ladderPriceList.size()).forEach(i -> { if (i == ladderPriceList.size() - 1) { ladderPriceList.get(i).setBuyNumRangeShow("≥" + ladderPriceList.get(i).getBuyNum()); } else { String buyNumRangeShow = ladderPriceList.get(i).getBuyNum() + "~" + (ladderPriceList.get(i + 1).getBuyNum() - 1); ladderPriceList.get(i).setBuyNumRangeShow(buyNumRangeShow); } }); orderProduct.setOrderProductLadderPriceList(ladderPriceList); } } //分销者名称 if (orderProduct.getHeUserId() != null && orderProduct.getHeUserId() > 0) { String name = heHeNewOrderDao.findHeUser(orderProduct.getHeUserId()); orderProduct.setHeUserName(name); } }); list.addAll(pList); shopOrder.setNewOrderProducts(pList); if (pList.stream().anyMatch(p -> p.getProductID() == 999)) shopOrder.setPostFeeCos("1"); pList.forEach(item -> { if (NewOrderStatus.hasReturn(newOrder.getStatus())) { Integer returningNum = newOrderProductDao.getReturningNum(item.getOrderProductID()); Integer returnedNum = newOrderProductDao.getReturnedNum(item.getOrderProductID()); item.setReturningNum(returningNum); item.setReturnedNum(returnedNum); } /**确认收货信息*/ if (NewOrderStatus.hasReceived(newOrder.getStatus())) { Integer receivedNum = newOrderProductDao.getReceivedNum(item.getOrderProductID()); item.setReceivedNum(receivedNum); } String domain = SysConfig.getStringConfig("crm.server.domain"); item.setProductImage(AppUtils.getProductImageURL(item.getProductImage(), AppKeys.ORIGINAL_PICTURE, domain)); if (item != null && item.getOrderPromotionsId() != null && item.getOrderPromotionsId() > 0) { item.setProductPromotion(cmPromotionDao.findOrderPromotions(item.getOrderPromotionsId())); } }); Double payed = cmPayShopRecordDao.sumByShopOrderID(shopOrder.getShopOrderID()); shopOrder.setPayed(payed); } newOrder.setNewShopOrders(shopOrders); } if (CollectionUtils.isNotEmpty(list)) { newOrder.setOrderProduct(list); double freight = 0D; double totalAddedValueTax = 0D; for (NewOrderProduct op : list) { if (op.getProductID().intValue() == 999) { //邮费商品 freight += op.getPrice(); } totalAddedValueTax += op.getTotalAddedValueTax(); } if ("1".equals(newOrder.getFreePostFlag())) newOrder.setFreight(freight); newOrder.setTotalAddedValueTax(totalAddedValueTax); } shopOrders.sort((so1, so2) -> { //给子订单排序 邮费排在最后 其余的按shopOrderID asc if ("1".equals(so1.getPostFeeCos())) return 1; return so1.getShopOrderID() - so2.getShopOrderID(); }); } return newOrder; } public Page findPage(Page page, NewOrder entity) { Page pageResult = super.findPage(page, entity); List results = pageResult.getList(); List oId = results.stream().map(NewOrder::getOrderID).collect(Collectors.toList()); //看看这些订单有哪些是返佣订单 返回他们的orderID List orderIds = null; if (CollectionUtils.isNotEmpty(oId)) { orderIds = cmDiscernReceiptDao.findRebateOrderID(results.stream().map(NewOrder::getOrderID).collect(Collectors.toList())); } //从查询到的订单列表中 找到正在退款中的订单集合 List orderIdsInReturn = null; List orderIdsInApplyReturn = null;//查询可以申请退款的订单ID if (CollectionUtils.isNotEmpty(oId)) { orderIdsInReturn = cmReturnedPurchaseDao.findOrderIDInReturnPurchase(oId); orderIdsInApplyReturn = cmReturnedPurchaseDao.findOrderIDsInApplyReturnFlag(oId); } for (NewOrder order : results) { order.setAbleUserMoney(0d); if ((orderIds != null && orderIds.contains(order.getOrderID())) || "1".equals(order.getRebateFlag())) { order.setRebateOrder("1"); } else { order.setRebateOrder("0"); List ids = cmReceiptOrderRelationDao.toAudit(order.getOrderID()); if (ids != null && ids.size() > 0) { order.setToAudit("1"); } } if (orderIdsInReturn != null && orderIdsInReturn.contains(order.getOrderID())) { order.setReturnedPurchaseStatus("1"); } else { order.setReturnedPurchaseStatus("0"); } if (orderIdsInApplyReturn != null && orderIdsInApplyReturn.contains(order.getOrderID())) { order.setApplyReturnedPurchaseFlag("0"); } else { order.setApplyReturnedPurchaseFlag("1"); } List shopOrders = order.getNewShopOrders(); if (shopOrders != null && shopOrders.size() == 1) { order.setShopName(shopOrders.get(0).getShopName()); } int count = 0; for (NewShopOrder shopOrder : order.getNewShopOrders()) { shopOrder.setOrderID(order.getOrderID()); shopOrder.setOrderNo(order.getOrderNo()); shopOrder.setOrderType(Integer.parseInt(order.getOrderType())); shopOrder.setReceiver(order.getReceiver()); shopOrder.setOrderSource(order.getOrderSource()); shopOrder.setOrderTime(order.getOrderTime()); shopOrder.setBuyer(order.getBuyer()); if (shopOrder.getShopID() != 998) { count++; } Integer shopOrderID = shopOrder.getShopOrderID();//子订单ID //通过子订单ID查询子订单信息 NewShopOrder newShopOrder = newShopOrderDao.get(String.valueOf(shopOrderID)); if (null != newShopOrder) { shopOrder.setFee(newShopOrder.getFee()); shopOrder.setShouldPayProduct(newShopOrder.getShouldPayProduct()); List pList = newOrderProductDao.findListByShopOrderID(shopOrderID); pList.forEach(orderProduct -> { //充值定金商品 if (6060 == orderProduct.getProductID()) { order.setRechargeGoods(1); } }); } else { shopOrder.setFee(0d); shopOrder.setShouldPayProduct(0d); } } //一个子订单只有一个商品时,不可拆分 if (order.getProductCount() == null) { order.setProductCount(1); } if (order.getProductCount() <= count) { order.setSplitFlag("0"); } //是否抹平支付过(抹平最多只允许存在一次) CmDiscernReceipt cmDiscernReceipt = cmDiscernReceiptDao.findSmoothoutInfo(order.getOrderID().toString()); if (null != cmDiscernReceipt) { order.setAssociationType(cmDiscernReceipt.getAssociationType()); String confirmType = cmDiscernReceipt.getConfirmType(); order.setConfirmType(confirmType); // 是否是一比款收了多个订单 if (StringUtils.equals(confirmType, "1") || StringUtils.equals(confirmType, "2") || StringUtils.equals(confirmType, "3")) { List byReceiptList = cmReceiptOrderRelationService.findByReceiptID(cmDiscernReceipt.getId()); if (CollectionUtils.isNotEmpty(byReceiptList) && byReceiptList.size() > 1) { order.setReceiptOrderFlag(true); } } } // 订单已收款才会出现抹平或者多收退余额,(已收再退款或者撤销退款订单即使存在抹平也需要当未抹平重新计算付款) // 抹平明细 String receiptStatus = order.getReceiptStatus(); if (StringUtils.equals("3", receiptStatus)) { if (null != cmDiscernReceipt) { String confirmType = cmDiscernReceipt.getConfirmType(); order.setConfirmType(confirmType); double associateAmount = cmDiscernReceiptDao.getAssociateAmount(String.valueOf(order.getOrderID())); order.setOrderReceivedAmount(associateAmount); //大额退余额 if (StringUtils.equals("3", confirmType)) { String id = cmDiscernReceipt.getId(); double returnBalanceAmount = cmDiscernReceiptDao.getReturnBalanceAmount(id); order.setReturnBalanceAmount(returnBalanceAmount); } } } } return pageResult; } }