Ver código fonte

会员订单开发票

zoujiajian 1 ano atrás
pai
commit
6a8c163ff8

+ 3 - 2
netflix-dao/src/main/java/com/cyksj/model/views/UserInvoiceApplyRecordView.java

@@ -18,7 +18,8 @@ import java.util.Date;
 @Setter
 @SearchBean(tables = "user_invoice_apply_record uar inner join user_invoice_order_relate uor on uor.record_id = uar.id" +
 		" left join order_don o on o.id = uor.order_id and uor.type = 1" +
-		" left join upgrade_order_don uod on uod.id = uor.order_id and uor.type = 2"
+		" left join upgrade_order_don uod on uod.id = uor.order_id and uor.type = 2" +
+		" left join vip_order_don vod on vod.id = uor.order_id and uor.type = 3"
 		, groupBy = "uar.id,uar.user_id,uar.money,uar.zfb_payment,uar.head,uar.tax_no,uar.bank,uar.bank_no,uar.email,uar.status,uar.invoice_img,uar.created_time,uar.update_time")
 public class UserInvoiceApplyRecordView {
 
@@ -79,7 +80,7 @@ public class UserInvoiceApplyRecordView {
 	@DbField("uar.invoice_img")
 	private String invoiceImg;
 
-	@DbField("group_concat(ifnull(o.order_no,uod.order_no))")
+	@DbField("group_concat(ifnull(o.order_no,ifnull(uod.order_no,vod.order_no)))")
 	private String orderNoStr;
 
 	@DbField("uar.created_time")

+ 2 - 2
netflix-dao/src/main/java/com/cyksj/model/views/UserInvoiceChoseOrderViews.java

@@ -17,9 +17,9 @@ import java.util.Date;
  */
 @Getter
 @Setter
-@SearchBean(tables = " (:uq: (select id,goods_id,sku_id,order_no,money,user_id,pay_time,shop_id,created_time,1 as type from order_don where money > 0 and status not in ('close','noPayment','refund') and type = 'ALI_PAY')) o left join user_invoice_order_relate uor on uor.order_id = o.id" +
+@SearchBean(tables = " (:order:) o left join user_invoice_order_relate uor on uor.order_id = o.id and uor.type = o.type" +
 		" inner join goods_don g on g.id = o.goods_id and (g.id in (select goods_id from goods_don_category_relate where category = 1) or g.id = 40)" +
-		" inner join goods_don_sku sku on sku.id = o.sku_id" +
+		" left join goods_don_sku sku on sku.id = o.sku_id" +
 		" inner join shop_config sc on sc.app_id = o.shop_id",
 		where = " uor.id is null :dc:",
 		orderBy = "o.id desc")

+ 9 - 5
netflix-dao/src/main/java/com/cyksj/model/views/UserInvoiceOrderViews.java

@@ -18,17 +18,21 @@ import java.util.Date;
 @Setter
 @SearchBean(tables = "user_invoice_order_relate uor left join order_don o on o.id = uor.order_id and uor.type = 1" +
 		" left join upgrade_order_don uod on uod.id = uor.order_id and uor.type = 2" +
-		" inner join goods_don g on (g.id = o.goods_id or g.id = uod.goods_id)" +
-		" inner join goods_don_sku sku on (sku.id = o.sku_id or sku.id = uod.sku_id)")
+		" left join vip_order_don vod on vod.id = uor.order_id and uor.type = 3 " +
+		" left join goods_don g on (g.id = o.goods_id or g.id = uod.goods_id or g.id = vod.goods_id)" +
+		" left join goods_don_sku sku on (sku.id = o.sku_id or sku.id = uod.sku_id)")
 public class UserInvoiceOrderViews {
 
 	@DbField("uor.record_id")
 	private Long recordId;
 
-	@DbField("ifnull(o.order_no,uod.order_no)")
+	@DbField("uor.type")
+	private Integer type;
+
+	@DbField("ifnull(o.order_no,ifnull(uod.order_no,vod.order_no))")
 	private String orderNo;
 
-	@DbField("ifnull(o.money,uod.money)")
+	@DbField("ifnull(o.money,ifnull(uod.money,vod.money))")
 	private BigDecimal money;
 
 	@DbField("g.title")
@@ -40,6 +44,6 @@ public class UserInvoiceOrderViews {
 	@DbField("g.logo")
 	private String logo;
 
-	@DbField("ifnull(o.pay_time,uod.pay_time)")
+	@DbField("ifnull(o.pay_time,ifnull(uod.pay_time,vod.pay_time))")
 	private Date payTime;
 }

+ 17 - 1
netflix-service/src/main/java/com/cyksj/service/invoice/impl/UserInvoiceApplyRecordServiceImpl.java

@@ -10,6 +10,7 @@ import com.cyksj.mapper.UpgradeOrderDonMapper;
 import com.cyksj.mapper.UserInvoiceApplyRecordMapper;
 import com.cyksj.mapper.UserInvoiceOrderRelateMapper;
 import com.cyksj.mapper.channel.ShopConfigMapper;
+import com.cyksj.mapper.vip.VipOrderDonMapper;
 import com.cyksj.model.dto.InvoiceOrderDto;
 import com.cyksj.model.entity.*;
 import com.cyksj.model.request.UserInvoiceOrderReq;
@@ -50,6 +51,8 @@ public class UserInvoiceApplyRecordServiceImpl implements UserInvoiceApplyRecord
 
 	private final UpgradeOrderDonMapper upgradeOrderDonMapper;
 
+	private final VipOrderDonMapper vipOrderDonMapper;
+
 	@Override
 	@Transactional(rollbackFor = Throwable.class)
 	public Long applyOrderInvoice(UserInvoiceOrderReq req) {
@@ -80,6 +83,7 @@ public class UserInvoiceApplyRecordServiceImpl implements UserInvoiceApplyRecord
 				List<Long> orderIds = orders.stream().map(InvoiceOrderDto::getOrderId).collect(Collectors.toList());
 				//订单里是否存在开过发票
 				Integer selectCount = userInvoiceOrderRelateMapper.selectCount(Wrappers.lambdaQuery(UserInvoiceOrderRelate.class)
+						.eq(UserInvoiceOrderRelate::getType, type)
 						.in(UserInvoiceOrderRelate::getOrderId, orderIds));
 				if (selectCount > 0) {
 					throw BusinessRuntimeException.getInstance("您选择的订单存在开过发票,请刷新页面重新选择");
@@ -97,7 +101,7 @@ public class UserInvoiceApplyRecordServiceImpl implements UserInvoiceApplyRecord
 						shopIdSet.add(o.getShopId());
 					}
 					selfOrderIdSize = orderDonList.size();
-				}else {
+				} else if (type == 2) {
 					List<UpgradeOrderDon> upgradeOrderDons = upgradeOrderDonMapper.selectList(Wrappers.lambdaQuery(UpgradeOrderDon.class)
 							.in(UpgradeOrderDon::getId, orderIds)
 							.in(UpgradeOrderDon::getUserId, userIdList)
@@ -108,6 +112,18 @@ public class UserInvoiceApplyRecordServiceImpl implements UserInvoiceApplyRecord
 						shopIdSet.add(o.getShopId());
 					}
 					selfOrderIdSize = upgradeOrderDons.size();
+				}else {
+					//会员订单
+					List<VipOrderDon> VipOrderDons = vipOrderDonMapper.selectList(Wrappers.lambdaQuery(VipOrderDon.class)
+							.in(VipOrderDon::getId, orderIds)
+							.in(VipOrderDon::getUserId, userIdList)
+							.notIn(VipOrderDon::getStatus, Constant.noOrderAllStatus)
+							.select(VipOrderDon::getId, VipOrderDon::getMoney, VipOrderDon::getShopId));
+					for (VipOrderDon o : VipOrderDons) {
+						invoiceApplyRecord.setMoney(invoiceApplyRecord.getMoney().add(o.getMoney()));
+						shopIdSet.add(o.getShopId());
+					}
+					selfOrderIdSize = VipOrderDons.size();
 				}
 				if (selfOrderIdSize != orderIds.size()) {
 					throw BusinessRuntimeException.getInstance("订单选择错误,请刷新页面重新选择");

+ 47 - 9
netflix-web/src/main/java/com/cyksj/web/controller/invoice/UserInvoiceFrontController.java

@@ -1,13 +1,18 @@
 package com.cyksj.web.controller.invoice;
 
+import cn.hutool.core.collection.CollUtil;
 import cn.hutool.core.date.DateTime;
 import cn.hutool.core.date.DateUtil;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.cyksj.common.constant.Constant;
 import com.cyksj.dto.Result;
 import com.cyksj.enums.GatewayResponse;
+import com.cyksj.mapper.OrderDonMapper;
 import com.cyksj.mapper.UpgradeOrderDonMapper;
+import com.cyksj.mapper.vip.VipOrderDonMapper;
+import com.cyksj.model.entity.OrderDon;
 import com.cyksj.model.entity.UpgradeOrderDon;
+import com.cyksj.model.entity.VipOrderDon;
 import com.cyksj.model.request.UserInvoiceOrderReq;
 import com.cyksj.model.views.UserInvoiceChoseOrderViews;
 import com.cyksj.model.views.UserInvoiceFrontView;
@@ -27,6 +32,7 @@ import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletRequest;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.List;
 import java.util.stream.Collectors;
 
@@ -50,11 +56,15 @@ public class UserInvoiceFrontController {
 
 	private final UpgradeOrderDonMapper upgradeOrderDonMapper;
 
+	private final VipOrderDonMapper vipOrderDonMapper;
+
+	private final OrderDonMapper orderDonMapper;
+
 	/**
 	 * 发票 用户可选AI车票订单
 	 */
 	@GetMapping("/get/orders")
-	public Result<SearchResult<UserInvoiceChoseOrderViews>> getOrders() {
+	public Result<List<UserInvoiceChoseOrderViews>> getOrders() {
 		long userId = StpUserUtil.getLoginIdAsLong();
 		List<Long> userIdList = userBindRelationService.getRelationUserIdList(userId, null);
 		String dateCondition;
@@ -73,19 +83,47 @@ public class UserInvoiceFrontController {
 		if (now.isAfter(DateUtil.parse("2025-02-01"))) {
 			appIds.add("2021003171697073");
 		}
-		String upgrade_sql = "(select id,goods_id,sku_id,order_no,money,user_id,pay_time,shop_id,created_time,2 as type from upgrade_order_don where goods_id = 26 and money > 0 and status not in ('close','noPayment','refund') and type = 'ALI_PAY') union all ";
+		Integer orderCount = orderDonMapper.selectCount(Wrappers.lambdaQuery(OrderDon.class)
+				.in(OrderDon::getUserId, userIdList)
+				.notIn(OrderDon::getStatus, Constant.noOrderAllStatus));
+		builder.field(UserInvoiceChoseOrderViews::getShopId, appIds).op(Operator.NotIn)
+				.put("dc", dateCondition)
+				.field(UserInvoiceChoseOrderViews::getUserId, userIdList).op(Operator.InList);
+		List<UserInvoiceChoseOrderViews> list = new ArrayList<>();
+		if (orderCount > 0) {
+			//普通订单
+			String order_sql = "(select id,goods_id,sku_id,order_no,money,user_id,pay_time,shop_id,created_time,1 as type from order_don where money > 0 and status not in ('close','noPayment','refund') and type = 'ALI_PAY')";
+			List<UserInvoiceChoseOrderViews> orderViewsList = beanSearcher.searchAll(UserInvoiceChoseOrderViews.class, builder.put("order", order_sql).build());
+			if (CollUtil.isNotEmpty(orderViewsList)) {
+				list.addAll(orderViewsList);
+			}
+		}
 		Integer upgradeOrders = upgradeOrderDonMapper.selectCount(Wrappers.lambdaQuery(UpgradeOrderDon.class)
 				.in(UpgradeOrderDon::getUserId, userIdList)
 				.notIn(UpgradeOrderDon::getStatus, Constant.noOrderAllStatus));
 		if (upgradeOrders > 0) {
-			builder.put("uq", upgrade_sql);
+			//增值订单
+			String upgrade_order_sql = "(select id,goods_id,sku_id,order_no,money,user_id,pay_time,shop_id,created_time,2 as type from upgrade_order_don where goods_id = 26 and money > 0 and status not in ('close','noPayment','refund') and type = 'ALI_PAY')";
+			List<UserInvoiceChoseOrderViews> upgradeOrderList = beanSearcher.searchAll(UserInvoiceChoseOrderViews.class, builder.put("order", upgrade_order_sql).build());
+			if (CollUtil.isNotEmpty(upgradeOrderList)) {
+				list.addAll(upgradeOrderList);
+			}
 		}
-		builder.field(UserInvoiceChoseOrderViews::getShopId, appIds).op(Operator.NotIn);
-		SearchResult<UserInvoiceChoseOrderViews> search = beanSearcher.search(UserInvoiceChoseOrderViews.class, builder
-				.put("dc", dateCondition)
-				.field(UserInvoiceChoseOrderViews::getUserId, userIdList).op(Operator.InList)
-				.build());
-		return GatewayResponse.SUCCESS.newBuilder().toResult(search);
+		Integer vipOrderCount = vipOrderDonMapper.selectCount(Wrappers.lambdaQuery(VipOrderDon.class)
+				.in(VipOrderDon::getUserId, userIdList)
+				.notIn(VipOrderDon::getStatus, Constant.noOrderAllStatus));
+		if (vipOrderCount > 0) {
+			//会员订单
+			String vip_order_sql = "(select id,goods_id,0 as sku_id,order_no,money,user_id,pay_time,shop_id,created_time,3 as type from vip_order_don where money > 0 and status not in ('close','noPayment','refund') and type = 'ALI_PAY')";
+			List<UserInvoiceChoseOrderViews> vipOrderList = beanSearcher.searchAll(UserInvoiceChoseOrderViews.class, builder.put("order", vip_order_sql).build());
+			if (CollUtil.isNotEmpty(vipOrderList)) {
+				list.addAll(vipOrderList);
+			}
+		}
+		if (CollUtil.isNotEmpty(list)) {
+			list.sort(Comparator.comparing(UserInvoiceChoseOrderViews::getPayTime).reversed());
+		}
+		return GatewayResponse.SUCCESS.newBuilder().toResult(list);
 	}
 
 	/**