Bladeren bron

订单与发票抬头关系

guoshuai 1 week geleden
bovenliggende
commit
417ec09ab0

+ 15 - 0
src/main/java/com/qmrb/system/controller/ParkingInvoiceRelationController.java

@@ -100,6 +100,21 @@ public class ParkingInvoiceRelationController{
         boolean result = parkingInvoiceRelationService.updateForm(id,form);
         return Result.judge(result);
     }
+    
+    @Operation(summary = "修改停车记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
+    @PostMapping(value = "/generateInvoice/{ids}")
+    public Result<?> generateInvoice(
+            @Parameter(description = "停车记录与发票抬头关系表ID") @PathVariable String ids) {
+
+        if(StrUtil.isBlank(ids)) {
+            return Result.failed(ResultCode.PARAM_ERROR, "删除的停车记录与发票抬头关系表数据为空");
+        }
+        // 逻辑删除
+        List<Long> idList = Arrays.asList(ids.split(",")).stream()
+                .map(idStr -> Long.parseLong(idStr)).collect(Collectors.toList());
+        boolean result = parkingInvoiceRelationService.generateInvoice(idList);
+        return Result.judge(result);
+    }
 
     @Operation(summary = "删除停车记录与发票抬头关系表", security = {@SecurityRequirement(name = "Authorization")})
     @DeleteMapping("/{ids}")

+ 5 - 0
src/main/java/com/qmrb/system/pojo/entity/Order.java

@@ -129,4 +129,9 @@ public class Order extends BaseEntity implements Serializable {
      */
     @TableField("refund_pid")
     private Long refundPid;
+    /**
+     * '开票标志1已开票 0 待开发票'
+     */
+    @TableField("invoice_ind")
+    private String  invoiceInd;
 }

+ 15 - 0
src/main/java/com/qmrb/system/pojo/vo/ParkingInvoiceRelationVO.java

@@ -3,6 +3,8 @@ package com.qmrb.system.pojo.vo;
 import java.math.BigDecimal;
 import java.util.Date;
 import java.util.List;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.v3.oas.annotations.media.Schema;
 import lombok.Data;
 
@@ -89,6 +91,19 @@ public class ParkingInvoiceRelationVO {
      */
 	@Schema(description = "订单ID",type="Long")
     private Long orderId;
+    
+    /**
+     * 车牌号
+     */
+	@Schema(description = "车牌号",type="String")
+    private String plateNumber;
+
+    /**
+     * 支付时间
+     */
+    @Schema(description = "支付时间",type="Date")
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private Date payTime;
 
 	@Schema(description = "子分类")
     private List<ParkingInvoiceRelationVO> children;

+ 3 - 0
src/main/java/com/qmrb/system/service/IParkingInvoiceRelationService.java

@@ -40,4 +40,7 @@ public interface IParkingInvoiceRelationService extends IService<ParkingInvoiceR
 	public ParkingInvoiceRelationForm getFormData(Long id);
 
 	List<ParkingInvoiceRelationForm> saveFormByOrderId(ApplyInvoiceDTO dto);
+
+	boolean generateInvoice(List<Long> idList);
+	
 }

+ 38 - 0
src/main/java/com/qmrb/system/service/impl/ParkingInvoiceRelationServiceImpl.java

@@ -29,6 +29,7 @@ import cn.hutool.core.collection.CollectionUtil;
 import cn.hutool.core.util.StrUtil;
 import cn.hutool.core.lang.Assert;
 import jakarta.validation.Valid;
+import org.springframework.transaction.annotation.Transactional;
 
 /**
  * <p>
@@ -111,9 +112,21 @@ public class ParkingInvoiceRelationServiceImpl extends ServiceImpl<ParkingInvoic
 		ArrayList<ParkingInvoiceRelation> parkingInvoiceRelations = new ArrayList<>();
 		
 		if(CollectionUtil.isNotEmpty(dto.getOrderIds())){
+			//订单已开发票,不再重复开
+			List ids = new ArrayList();
+			List<ParkingInvoiceRelation> list = this.list(new LambdaQueryWrapper<ParkingInvoiceRelation>().in(ParkingInvoiceRelation::getOrderId, dto.getOrderIds()));
+			if(CollectionUtil.isNotEmpty(list)){
+				ids = list.stream().map(item->{
+					return item.getOrderId();
+				}).toList();
+			}
 			List<Order> orders = orderService.listByIds(dto.getOrderIds());
 			InvoiceTitle invoiceTitle = invoiceTitleService.getById(dto.getInvoiceTitleId());
 			for (Order order : orders) {
+				// 已存在,本订单不再开发票
+				if(ids.contains(order.getId())){
+					continue;
+				}
 				ParkingInvoiceRelation parkingInvoiceRelation = new ParkingInvoiceRelation();
 				
 				parkingInvoiceRelation.setParkingRecordId(order.getGoodId() != null ? order.getGoodId().toString() : "");//停车记录ID
@@ -134,5 +147,30 @@ public class ParkingInvoiceRelationServiceImpl extends ServiceImpl<ParkingInvoic
 		return result;
 	}
 
+	/**
+	 * 开具发票
+	 * @param idList
+	 * @return
+	 */
+	@Transactional
+	@Override
+	public boolean generateInvoice(List<Long> idList) {
+		List<ParkingInvoiceRelation> parkingInvoiceRelations = this.listByIds(idList);
+		ArrayList<Long> orderIds = new ArrayList<>();
+		parkingInvoiceRelations = parkingInvoiceRelations.stream().map(item->{
+			item.setStatus(1);//状态(0:待开票,1:已开票,2:已退票)
+			orderIds.add(item.getOrderId());
+			return item;
+		}).collect(Collectors.toList());
+		List<Order> orders = orderService.listByIds(orderIds);
+		orders = orders.stream().map(item->{
+			item.setInvoiceInd("1");//'开票标志1已开票 0 待开发票'
+			return item;
+		}).collect(Collectors.toList());
+		this.updateBatchById(parkingInvoiceRelations);
+		orderService.updateBatchById(orders);
+		return true;
+	}
+
 
 }

+ 2 - 3
src/main/resources/mapper/ParkingInvoiceRelationMapper.xml

@@ -5,15 +5,14 @@
     <select id="getInvoicePage" resultType="com.qmrb.system.pojo.vo.ParkingInvoiceRelationVO">
         select 
             po.plate_number,
-            po.amounts_payable,
             po.pay_time,
-            pi.`status` 
+            pi.* 
         from parking_invoice_relation pi 
             left join pay_order po on pi.order_id = po.id 
             LEFT JOIN invoice_title it on pi.invoice_title_id = it.id
         <where>
             <if test="queryParams.plateNumber != null and queryParams.plateNumber != ''">
-                po.plateNumber = #{queryParams.plateNumber}
+                po.plate_number = #{queryParams.plateNumber}
             </if>
             <if test="queryParams.status != null">
                 pi.`status` = #{queryParams.status}