From 214f90a39cdf2d401f9eb50084d062dab878a249 Mon Sep 17 00:00:00 2001
From: maven <2163098428@qq.com>
Date: 星期三, 21 一月 2026 17:42:49 +0800
Subject: [PATCH] yys 1.车俩管理开发 2.调整生产管控流

---
 src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java                     |   86 ++++++
 src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java                                  |   86 ++++++
 src/main/java/com/ruoyi/production/dto/ProductOrderDto.java                              |    6 
 src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java    |  125 ++++++---
 src/main/java/com/ruoyi/CodeGenerator.java                                               |    4 
 src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java               |   38 ++
 src/main/java/com/ruoyi/approve/service/CarInfoService.java                              |   20 +
 src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java |   11 
 src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java                                |   18 +
 src/main/java/com/ruoyi/approve/controller/CarInfoController.java                        |   76 +++++
 src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml               |    9 
 src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java                        |   19 +
 src/main/resources/mapper/production/ProductOrderMapper.xml                              |    3 
 src/main/java/com/ruoyi/production/controller/ProductOrderController.java                |   13 +
 src/main/resources/mapper/approve/CarInfoMapper.xml                                      |   24 +
 src/main/resources/mapper/approve/CarInfoRecordMapper.xml                                |   19 +
 src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java                          |   18 +
 src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java                   |    2 
 src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml                  |    2 
 src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java           |    5 
 src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java                  |   74 +++++
 src/main/java/com/ruoyi/approve/pojo/CarInfo.java                                        |   81 ++++++
 22 files changed, 676 insertions(+), 63 deletions(-)

diff --git a/src/main/java/com/ruoyi/CodeGenerator.java b/src/main/java/com/ruoyi/CodeGenerator.java
index cca67a2..d5619df 100644
--- a/src/main/java/com/ruoyi/CodeGenerator.java
+++ b/src/main/java/com/ruoyi/CodeGenerator.java
@@ -19,11 +19,11 @@
 // 婕旂ず渚嬪瓙锛屾墽琛� main 鏂规硶鎺у埗鍙拌緭鍏ユā鍧楄〃鍚嶅洖杞﹁嚜鍔ㄧ敓鎴愬搴旈」鐩洰褰曚腑
 public class CodeGenerator {
 
-    public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management-new";
+    public static String database_url = "jdbc:mysql://127.0.0.1:3306/product-inventory-management-hsxnynew";
     public static String database_username = "root";
     public static String database_password= "123456";
     public static String author = "鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃";
-    public static String model = "account"; // 妯″潡
+    public static String model = "approve"; // 妯″潡
     public static String setParent = "com.ruoyi."+ model; // 鍖呰矾寰�
     public static String tablePrefix = ""; // 璁剧疆杩囨护琛ㄥ墠缂�
     public static void main(String[] args) {
diff --git a/src/main/java/com/ruoyi/approve/controller/CarInfoController.java b/src/main/java/com/ruoyi/approve/controller/CarInfoController.java
new file mode 100644
index 0000000..5d1ba08
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/controller/CarInfoController.java
@@ -0,0 +1,76 @@
+package com.ruoyi.approve.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.mapper.CarInfoMapper;
+import com.ruoyi.approve.pojo.CarInfo;
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.ruoyi.approve.service.CarInfoRecordService;
+import com.ruoyi.approve.service.CarInfoService;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 杞︿咯绠$悊 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:00:32
+ */
+@RestController
+@RequestMapping("/carInfo")
+@Api(tags = "杞︿咯绠$悊")
+public class CarInfoController {
+
+
+    @Autowired
+    private CarInfoService carInfoService;
+
+    @Autowired
+    private CarInfoRecordService carInfoRecordService;
+
+    @ApiOperation("鍒嗛〉鏌ヨ杞︿咯绠$悊")
+    @GetMapping("/listPage")
+    public AjaxResult listPage(Page page, CarInfo carInfo) {
+        return AjaxResult.success(carInfoService.listPage(page,carInfo));
+    }
+
+    @ApiOperation("鏂板杞︿咯绠$悊")
+    @PostMapping("/add")
+    @Log(title = "杞︿咯绠$悊", businessType = BusinessType.INSERT)
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult add(@RequestBody CarInfo carInfo) {
+        return carInfoService.save(carInfo) ? AjaxResult.success("鏂板鎴愬姛") : AjaxResult.error("鏂板澶辫触");
+    }
+
+    @ApiOperation("淇敼杞︿咯绠$悊")
+    @PostMapping("/update")
+    @Log(title = "杞︿咯绠$悊", businessType = BusinessType.UPDATE)
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult update(@RequestBody CarInfo carInfo) {
+        return carInfoService.updateById(carInfo) ? AjaxResult.success("淇敼鎴愬姛") : AjaxResult.error("淇敼澶辫触");
+    }
+
+    @ApiOperation("鍒犻櫎杞︿咯绠$悊")
+    @DeleteMapping("/delete")
+    @Log(title = "杞︿咯绠$悊", businessType = BusinessType.DELETE)
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        if(CollectionUtils.isEmpty(ids)) return AjaxResult.error("璇烽�夋嫨鑷冲皯涓�鏉℃暟鎹�");
+        carInfoService.removeByIds(ids);
+        carInfoRecordService.remove(new LambdaQueryWrapper<CarInfoRecord>().in(CarInfoRecord::getCarInfoId,ids));
+        return AjaxResult.success("鍒犻櫎鎴愬姛");
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java b/src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java
new file mode 100644
index 0000000..81bacae
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/controller/CarInfoRecordController.java
@@ -0,0 +1,74 @@
+package com.ruoyi.approve.controller;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.mapper.CarInfoMapper;
+import com.ruoyi.approve.pojo.CarInfo;
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.ruoyi.approve.service.CarInfoRecordService;
+import com.ruoyi.approve.service.impl.CarInfoServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.aspectj.lang.annotation.Log;
+import com.ruoyi.framework.aspectj.lang.enums.BusinessType;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+
+/**
+ * <p>
+ * 杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛� 鍓嶇鎺у埗鍣�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:01:21
+ */
+@RestController
+@RequestMapping("/carInfoRecord")
+@Api(tags = "杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�")
+public class CarInfoRecordController {
+
+    @Autowired
+    private CarInfoRecordService carInfoRecordService;
+
+    @Autowired
+    private CarInfoServiceImpl carInfoService;
+
+    @GetMapping("/list")
+    @ApiOperation("鏌ヨ")
+    public AjaxResult list(Page page, CarInfoRecord carInfoRecord) {
+        return carInfoRecordService.getList(page,carInfoRecord);
+    }
+
+    @PostMapping("/add")
+    @ApiOperation("鐢ㄨ溅")
+    @Log(title = "杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�", businessType = BusinessType.INSERT)
+    @Transactional(rollbackFor = Exception.class)
+    public AjaxResult add(@RequestBody CarInfoRecord carInfoRecord) {
+        carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"浣跨敤涓�");
+        return AjaxResult.success(carInfoRecordService.save(carInfoRecord));
+    }
+
+    @PostMapping("/update")
+    @ApiOperation("淇敼")
+    @Log(title = "杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�", businessType = BusinessType.UPDATE)
+    public AjaxResult update(@RequestBody CarInfoRecord carInfoRecord) {
+        if(StringUtils.isNotEmpty(carInfoRecord.getUsageStatus())){
+            carInfoService.updateUsageStatus(carInfoRecord.getCarInfoId(),"绌洪棽");
+        }
+        return AjaxResult.success(carInfoRecordService.updateById(carInfoRecord));
+    }
+
+    @DeleteMapping("/delete")
+    @ApiOperation("鍒犻櫎")
+    @Log(title = "杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�", businessType = BusinessType.DELETE)
+    public AjaxResult delete(@RequestBody List<Long> ids) {
+        return AjaxResult.success(carInfoRecordService.removeBatchByIds(ids));
+    }
+
+
+}
diff --git a/src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java b/src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java
new file mode 100644
index 0000000..e3875ae
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/CarInfoMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.approve.mapper;
+
+import com.ruoyi.approve.pojo.CarInfo;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 杞︿咯绠$悊 Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:00:32
+ */
+@Mapper
+public interface CarInfoMapper extends BaseMapper<CarInfo> {
+
+}
diff --git a/src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java b/src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java
new file mode 100644
index 0000000..0c5d72f
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/mapper/CarInfoRecordMapper.java
@@ -0,0 +1,18 @@
+package com.ruoyi.approve.mapper;
+
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import org.apache.ibatis.annotations.Mapper;
+
+/**
+ * <p>
+ * 杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛� Mapper 鎺ュ彛
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:01:21
+ */
+@Mapper
+public interface CarInfoRecordMapper extends BaseMapper<CarInfoRecord> {
+
+}
diff --git a/src/main/java/com/ruoyi/approve/pojo/CarInfo.java b/src/main/java/com/ruoyi/approve/pojo/CarInfo.java
new file mode 100644
index 0000000..2ead081
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/CarInfo.java
@@ -0,0 +1,81 @@
+package com.ruoyi.approve.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 杞︿咯绠$悊
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:00:32
+ */
+@Getter
+@Setter
+@TableName("car_info")
+@ApiModel(value = "CarInfo瀵硅薄", description = "杞︿咯绠$悊")
+public class CarInfo implements Serializable {
+
+    @TableField(exist = false)
+    @ApiModelProperty("褰撳墠浣跨敤浜�")
+    private String currentUserName;
+
+    @TableField(exist = false)
+    @ApiModelProperty("杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛塱d")
+    private Long carInfoRecordId;
+
+    @TableField(exist = false)
+    @ApiModelProperty("琛ㄦ樉閲岀▼")
+    private String odometerMileage;
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("杞︾墝鍙�")
+    private String carNo;
+
+    @ApiModelProperty("棰滆壊")
+    private String color;
+
+    @ApiModelProperty("鍝佺墝")
+    private String brand;
+
+    @ApiModelProperty("浣跨敤鐘舵��")
+    private String usageStatus;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java b/src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java
new file mode 100644
index 0000000..f00ee32
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/pojo/CarInfoRecord.java
@@ -0,0 +1,86 @@
+package com.ruoyi.approve.pojo;
+
+import com.baomidou.mybatisplus.annotation.FieldFill;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableField;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import java.io.Serializable;
+import java.time.LocalDate;
+import java.time.LocalDateTime;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import org.springframework.format.annotation.DateTimeFormat;
+
+/**
+ * <p>
+ * 杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:01:21
+ */
+@Getter
+@Setter
+@TableName("car_info_record")
+@ApiModel(value = "CarInfoRecord瀵硅薄", description = "杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛�")
+public class CarInfoRecord implements Serializable {
+
+    @ApiModelProperty("浣跨敤鐘舵��")
+    @TableField(exist = false)
+    private String usageStatus;
+
+    private static final long serialVersionUID = 1L;
+
+    @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    @ApiModelProperty("杞﹁締绠$悊id")
+    private Long carInfoId;
+
+    @ApiModelProperty("琛ㄧ幇閲岀▼")
+    private String odometerMileage;
+
+    @ApiModelProperty("鏈棰勮琛岄┒閲岀▼")
+    private String thisTripMileage;
+
+    @ApiModelProperty("鐩殑鍦�")
+    private String destination;
+
+    @ApiModelProperty("杩樿溅鏃ユ湡")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate carReturnDate;
+
+    @ApiModelProperty("鍊熻溅鏃ユ湡")
+    @DateTimeFormat(pattern = "yyyy-MM-dd")
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    private LocalDate carRentalDate;
+
+    @ApiModelProperty("浣跨敤浜�")
+    private String userName;
+
+    @ApiModelProperty("澶囨敞")
+    private String remark;
+
+    @ApiModelProperty("鍒涘缓鏃堕棿")
+    @TableField(fill = FieldFill.INSERT)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
+    private LocalDateTime createTime;
+
+    @ApiModelProperty("鍒涘缓浜�")
+    @TableField(fill = FieldFill.INSERT)
+    private Integer createUser;
+
+    @ApiModelProperty("淇敼鏃堕棿")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private LocalDateTime updateTime;
+
+    @ApiModelProperty("淇敼浜�")
+    @TableField(fill = FieldFill.INSERT_UPDATE)
+    private Integer updateUser;
+}
diff --git a/src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java b/src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java
new file mode 100644
index 0000000..c7560a4
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/CarInfoRecordService.java
@@ -0,0 +1,19 @@
+package com.ruoyi.approve.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.ruoyi.framework.web.domain.AjaxResult;
+
+/**
+ * <p>
+ * 杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛� 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:01:21
+ */
+public interface CarInfoRecordService extends IService<CarInfoRecord> {
+
+    AjaxResult getList(Page page,CarInfoRecord carInfoRecord);
+}
diff --git a/src/main/java/com/ruoyi/approve/service/CarInfoService.java b/src/main/java/com/ruoyi/approve/service/CarInfoService.java
new file mode 100644
index 0000000..3ddb519
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/CarInfoService.java
@@ -0,0 +1,20 @@
+package com.ruoyi.approve.service;
+
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.CarInfo;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.aspectj.weaver.loadtime.Aj;
+
+/**
+ * <p>
+ * 杞︿咯绠$悊 鏈嶅姟绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:00:32
+ */
+public interface CarInfoService extends IService<CarInfo> {
+
+    IPage<CarInfo> listPage(Page page, CarInfo carInfo);
+}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java
new file mode 100644
index 0000000..924b3e4
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/impl/CarInfoRecordServiceImpl.java
@@ -0,0 +1,38 @@
+package com.ruoyi.approve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.ruoyi.approve.mapper.CarInfoRecordMapper;
+import com.ruoyi.approve.service.CarInfoRecordService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 杞﹁締绠$悊瀛愯〃锛堣繕杞﹁〃锛� 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:01:21
+ */
+@Service
+public class CarInfoRecordServiceImpl extends ServiceImpl<CarInfoRecordMapper, CarInfoRecord> implements CarInfoRecordService {
+
+    @Autowired
+    private CarInfoRecordMapper carInfoRecordMapper;
+
+    @Override
+    public AjaxResult getList(Page page,CarInfoRecord carInfoRecord) {
+        LambdaQueryWrapper<CarInfoRecord> carInfoRecordLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(carInfoRecord != null){
+            if(carInfoRecord.getCarInfoId() != null){
+                carInfoRecordLambdaQueryWrapper.eq(CarInfoRecord::getCarInfoId, carInfoRecord.getCarInfoId());
+            }
+        }
+        carInfoRecordLambdaQueryWrapper.orderByDesc(CarInfoRecord::getCreateTime);
+        return AjaxResult.success(carInfoRecordMapper.selectPage(page,carInfoRecordLambdaQueryWrapper));
+    }
+}
diff --git a/src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java b/src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java
new file mode 100644
index 0000000..e2a3a69
--- /dev/null
+++ b/src/main/java/com/ruoyi/approve/service/impl/CarInfoServiceImpl.java
@@ -0,0 +1,86 @@
+package com.ruoyi.approve.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.ruoyi.approve.mapper.CarInfoRecordMapper;
+import com.ruoyi.approve.pojo.CarInfo;
+import com.ruoyi.approve.mapper.CarInfoMapper;
+import com.ruoyi.approve.pojo.CarInfoRecord;
+import com.ruoyi.approve.service.CarInfoService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.ruoyi.common.utils.StringUtils;
+import com.ruoyi.framework.web.domain.AjaxResult;
+import lombok.extern.slf4j.Slf4j;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * <p>
+ * 杞︿咯绠$悊 鏈嶅姟瀹炵幇绫�
+ * </p>
+ *
+ * @author 鑺杞欢锛堟睙鑻忥級鏈夐檺鍏徃
+ * @since 2026-01-21 03:00:32
+ */
+@Service
+@Slf4j
+public class CarInfoServiceImpl extends ServiceImpl<CarInfoMapper, CarInfo> implements CarInfoService {
+
+    @Autowired
+    private CarInfoMapper carInfoMapper;
+
+    @Autowired
+    private CarInfoRecordMapper carInfoRecordMapper;
+
+
+    /**
+     * 鏀瑰彉杞﹁締浣跨敤鐘舵��
+     * @param id
+     */
+    public void updateUsageStatus(Long id, String usageStatus) {
+        CarInfo carInfo = carInfoMapper.selectOne(new LambdaQueryWrapper<CarInfo>()
+                .eq(CarInfo::getId, id)
+                .last("limit 1"));
+        if(carInfo == null) throw new RuntimeException("杞﹁締涓嶅瓨鍦�");
+        if("浣跨敤涓�".equals(usageStatus) && "浣跨敤涓�".equals(carInfo.getUsageStatus())) throw new RuntimeException("杞﹁締宸蹭娇鐢ㄤ腑");
+        carInfo.setUsageStatus(usageStatus);
+        carInfoMapper.updateById(carInfo);
+    }
+
+    @Override
+    public IPage<CarInfo> listPage(Page page, CarInfo carInfo) {
+        LambdaQueryWrapper<CarInfo> carInfoLambdaQueryWrapper = new LambdaQueryWrapper<>();
+        if(carInfo != null){
+            if(StringUtils.isNotEmpty(carInfo.getCarNo())){
+                carInfoLambdaQueryWrapper.like(CarInfo::getCarNo,carInfo.getCarNo());
+            }
+            if(StringUtils.isNotEmpty(carInfo.getBrand())){
+                carInfoLambdaQueryWrapper.like(CarInfo::getBrand,carInfo.getBrand());
+            }
+            if(StringUtils.isNotEmpty(carInfo.getColor())){
+                carInfoLambdaQueryWrapper.like(CarInfo::getColor,carInfo.getColor());
+            }
+            if(StringUtils.isNotEmpty(carInfo.getUsageStatus())){
+                carInfoLambdaQueryWrapper.like(CarInfo::getUsageStatus,carInfo.getUsageStatus());
+            }
+        }
+        carInfoLambdaQueryWrapper.orderByDesc(CarInfo::getCreateTime);
+        Page<CarInfo> page1 = carInfoMapper.selectPage(page, carInfoLambdaQueryWrapper);
+        for (CarInfo record : page1.getRecords()) {
+            // 褰撳墠浣跨敤浜猴紝琛ㄦ樉閲岀▼
+            CarInfoRecord carInfoRecord = carInfoRecordMapper.selectOne(new LambdaQueryWrapper<CarInfoRecord>()
+                    .eq(CarInfoRecord::getCarInfoId, record.getId())
+                    .orderByDesc(CarInfoRecord::getCreateTime)
+                    .last("limit 1"));
+            if(carInfoRecord != null){
+                record.setCarInfoRecordId(carInfoRecord.getId());
+                record.setOdometerMileage(carInfoRecord.getOdometerMileage());
+                if("浣跨敤涓�".equals(record.getUsageStatus())){
+                    record.setCurrentUserName(carInfoRecord.getUserName());
+                }
+            }
+        }
+        return page1;
+    }
+}
diff --git a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
index 6b57f2a..bce6058 100644
--- a/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
+++ b/src/main/java/com/ruoyi/procurementrecord/dto/ProcurementRecordOutPageDto.java
@@ -27,6 +27,11 @@
     private String salesContractNo;
 
     /**
+     * 閲囪喘鍚堝悓鍙�
+     */
+    private String purchaseContractNumber;
+
+    /**
      * 瀹㈡埛鍚堝悓鍙�
      */
     private String customerContractNo;
diff --git a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
index 19509a3..0ff0b05 100644
--- a/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
+++ b/src/main/java/com/ruoyi/procurementrecord/service/impl/ProcurementRecordServiceImpl.java
@@ -775,7 +775,7 @@
                     .type(procurementDto.getType())
                     .warnNum(detail.getWarnNum())
                     .unitPrice(detail.getUnitPrice())
-                    .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice()))
+//                    .totalPrice(detail.getInboundQuantity().multiply(detail.getUnitPrice()))
                     .createTime(LocalDateTime.now())
                     .createUser(loginUser.getUserId())
                     .updateTime(LocalDateTime.now())
@@ -784,15 +784,6 @@
                     .productModelId(detail.getProductModelId())
                     .qualityInspectId(ObjectUtils.isNotNull(procurementDto.getQualityInspectId())?procurementDto.getQualityInspectId():0L);
             this.save(procurementRecordBuilder.build());
-            // 鍏ュ簱鎴愬姛鍑忔帀閲囪喘鏁伴噺
-//            LambdaQueryWrapper<SalesLedgerProduct> salesLedgerProductLambdaQueryWrapper = new LambdaQueryWrapper<>();
-//            salesLedgerProductLambdaQueryWrapper.eq(SalesLedgerProduct::getId, detail.getId());
-//            SalesLedgerProduct salesLedgerProduct = salesLedgerProductMapper.selectOne(salesLedgerProductLambdaQueryWrapper);
-//            if(salesLedgerProduct == null){
-//               throw new RuntimeException("鏈壘鍒拌鍟嗗搧");
-//            }
-//            salesLedgerProduct.setQuantity(salesLedgerProduct.getQuantity().subtract(detail.getInboundQuantity()));
-//            salesLedgerProductMapper.updateById(salesLedgerProduct);
         }
         return 1;
     }
diff --git a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
index 8ea79cd..c0e55c9 100644
--- a/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
+++ b/src/main/java/com/ruoyi/production/controller/ProductOrderController.java
@@ -15,6 +15,7 @@
 import io.swagger.annotations.Api;
 import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.transaction.annotation.Transactional;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
@@ -38,6 +39,18 @@
         return R.ok(1);
     }
 
+    @ApiOperation("鍒犻櫎鐢熶骇璁㈠崟")
+    @DeleteMapping("/delete")
+    @Transactional(rollbackFor = Exception.class)
+    public R delete(@RequestBody List<Long> ids) {
+        // 鎵归噺鍒犻櫎浜у搧瀛愯〃
+        if (!ids.isEmpty()) {
+            salesLedgerProductService.removeByIds(ids);
+        }
+        salesLedgerProductService.deleteProductionData(ids);
+        return R.ok(1);
+    }
+
 
     @ApiOperation("鍒嗛〉鏌ヨ")
     @GetMapping("page")
diff --git a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
index b12803d..0cb023f 100644
--- a/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
+++ b/src/main/java/com/ruoyi/production/dto/ProductOrderDto.java
@@ -13,15 +13,15 @@
 public class ProductOrderDto extends ProductOrder {
 
     @ApiModelProperty(value = "閿�鍞悎鍚屽彿")
-    @Excel(name = "閿�鍞悎鍚屽彿")
+//    @Excel(name = "閿�鍞悎鍚屽彿")
     private String salesContractNo;
 
     @ApiModelProperty(value = "椤圭洰鍚�")
-    @Excel(name = "椤圭洰鍚�")
+//    @Excel(name = "椤圭洰鍚�")
     private String projectName;
 
     @ApiModelProperty(value = "瀹㈡埛鍚嶇О")
-    @Excel(name = "瀹㈡埛鍚嶇О")
+//    @Excel(name = "瀹㈡埛鍚嶇О")
     private String customerName;
 
     @ApiModelProperty(value = "浜у搧鍚嶇О")
diff --git a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
index 67d8bba..cf80649 100644
--- a/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
+++ b/src/main/java/com/ruoyi/production/service/impl/ProductionProductMainServiceImpl.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
 import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.CollectionUtils;
 import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
 import com.baomidou.mybatisplus.core.toolkit.Wrappers;
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
@@ -15,8 +16,10 @@
 import com.ruoyi.basic.pojo.ProductModel;
 import com.ruoyi.common.utils.SecurityUtils;
 import com.ruoyi.common.utils.bean.BeanUtils;
+import com.ruoyi.procurementrecord.mapper.ProcurementRecordMapper;
 import com.ruoyi.procurementrecord.mapper.ProcurementRecordOutMapper;
 import com.ruoyi.procurementrecord.pojo.ProcurementRecordOut;
+import com.ruoyi.procurementrecord.pojo.ProcurementRecordStorage;
 import com.ruoyi.procurementrecord.utils.StockUtils;
 import com.ruoyi.production.controller.ProductWorkOrderController;
 import com.ruoyi.production.dto.ProductStructureDto;
@@ -28,6 +31,8 @@
 import com.ruoyi.project.system.mapper.SysUserMapper;
 import com.ruoyi.quality.mapper.*;
 import com.ruoyi.quality.pojo.*;
+import com.ruoyi.sales.mapper.SalesLedgerProductMapper;
+import com.ruoyi.sales.pojo.SalesLedgerProduct;
 import io.swagger.models.auth.In;
 import lombok.AllArgsConstructor;
 import org.springframework.stereotype.Service;
@@ -43,6 +48,7 @@
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.stream.Collectors;
 
 @Service
 @AllArgsConstructor
@@ -50,6 +56,7 @@
 public class ProductionProductMainServiceImpl extends ServiceImpl<ProductionProductMainMapper, ProductionProductMain> implements ProductionProductMainService {
 
     private final ProcurementRecordOutMapper procurementRecordOutMapper;
+    private ProcurementRecordMapper procurementRecordMapper;
     private ProductionProductMainMapper productionProductMainMapper;
 
     private ProductWorkOrderController productWorkOrderController;
@@ -62,6 +69,8 @@
     private ProductionProductOutputMapper productionProductOutputMapper;
 
     private ProcessRouteItemMapper processRouteItemMapper;
+
+    private SalesLedgerProductMapper salesLedgerProductMapper;
 
     private ProductModelMapper productModelMapper;
 
@@ -155,6 +164,7 @@
         for (ProductStructureDto productStructureDto : productStructureDtos) {
             ProductModel productModel1 = productModelMapper.selectById(productStructureDto.getProductModelId());
             Product product = productMapper.selectById(productModel1.getProductId());
+            // 鏌ヨ浜у搧搴撳瓨
             BigDecimal stockQuantity = stockUtils.getStockQuantity(productModel1.getId()).get("stockQuantity");
             if (!(stockQuantity.compareTo(BigDecimal.ZERO) > 0)) {
                 throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹负0");
@@ -162,6 +172,11 @@
             if (stockQuantity.compareTo(productStructureDto.getUnitQuantity().multiply(dto.getQuantity())) < 0) {
                 throw new RuntimeException(product.getProductName()+"浜у搧鐨�"+productModel1.getModel() + "鐨勮鏍煎簱瀛樹笉瓒�");
             }
+            // 鏌ヨ閲囪喘浜у搧
+            List<SalesLedgerProduct> salesLedgerProducts = salesLedgerProductMapper.selectList(new LambdaQueryWrapper<SalesLedgerProduct>()
+                    .eq(SalesLedgerProduct::getProductModelId, productStructureDto.getProductModelId())
+                    .eq(SalesLedgerProduct::getType, 2));
+
             ProductionProductInput productionProductInput = new ProductionProductInput();
             productionProductInput.setProductModelId(productStructureDto.getProductModelId());
             productionProductInput.setQuantity(productStructureDto.getUnitQuantity().multiply(dto.getQuantity()));
@@ -172,16 +187,49 @@
             LocalDate now = LocalDate.now();
             ProcurementRecordOut procurementRecordOut1 = procurementRecordOutMapper.selectCode(dateFormat.format(now));
             Long aLong = procurementRecordOut1 == null ? 1L : Long.valueOf(procurementRecordOut1.getCode().split("LS" + dateFormat.format(now))[1]);
-            ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
-                    .procurementRecordStorageId(0)
-                    .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
-                    .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
-                    .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
-                    .inboundNum(productionProductInput.getQuantity())
-                    .type(4)
-                    .createBy(user.getNickName())
-                    .productModelId(productModel1.getId());
-            procurementRecordOutMapper.insert(procurementRecordOut.build());
+            // 鏌ヨ閲囪喘鍏ュ簱璁板綍
+            List<ProcurementRecordStorage> procurementRecordStorages = procurementRecordMapper.selectList(new LambdaQueryWrapper<ProcurementRecordStorage>()
+                    .in(ProcurementRecordStorage::getSalesLedgerProductId, salesLedgerProducts.stream()
+                            .map(SalesLedgerProduct::getId)
+                            .collect(Collectors.toList()))
+                    .orderByDesc(ProcurementRecordStorage::getInboundNum));
+            if(CollectionUtils.isNotEmpty(procurementRecordStorages)) {
+                // 鐢熶骇鎵i櫎閲囪喘搴撳瓨鍘熸枡
+                BigDecimal quantity = productionProductInput.getQuantity();
+                int i = 0;
+                while (quantity.compareTo(BigDecimal.ZERO) > 0){
+                    ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
+                            .procurementRecordStorageId(procurementRecordStorages.get(i).getId())
+                            .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
+                            .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
+                            .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
+                            .type(1)
+                            .createBy(user.getNickName())
+                            .productModelId(productModel1.getId());
+
+                    if(quantity.compareTo(procurementRecordStorages.get(i).getInboundNum()) >= 0){
+                        // 涓嬫枡鏁伴噺澶т簬绛変簬閲囪喘鍏ュ簱鏁伴噺锛屽垯鍑哄簱鏁伴噺涓洪噰璐叆搴撴暟閲忥紝骞剁户缁嚭搴撲笅涓�鏉¤褰�
+                        procurementRecordOut.inboundNum(procurementRecordStorages.get(i).getInboundNum());
+                        quantity = quantity.subtract(procurementRecordStorages.get(i).getInboundNum());
+                    }else{
+                        procurementRecordOut.inboundNum(quantity);
+                        quantity = BigDecimal.ZERO;
+                    }
+                    procurementRecordOutMapper.insert(procurementRecordOut.build());
+                    i++;
+                }
+            }else{
+                ProcurementRecordOut.ProcurementRecordOutBuilder procurementRecordOut = ProcurementRecordOut.builder()
+                        .procurementRecordStorageId(0)
+                        .code("LS" + dateFormat.format(now) + String.format("%03d", aLong + 1))
+                        .salesLedgerProductId(productionProductMain.getId())//鍏宠仈鎶ュ伐浜у嚭
+                        .inboundBatches(aLong.equals(0L) ? "绗�1鎵规" : "绗�" + (aLong + 1) + "鎵规")
+                        .inboundNum(productionProductInput.getQuantity())
+                        .type(4)
+                        .createBy(user.getNickName())
+                        .productModelId(productModel1.getId());
+                procurementRecordOutMapper.insert(procurementRecordOut.build());
+            }
         }
         /*鏂板鎶ュ伐浜у嚭琛�*/
         ProductionProductOutput productionProductOutput = new ProductionProductOutput();
@@ -191,38 +239,37 @@
         productionProductOutputMapper.insert(productionProductOutput);
         //瀵瑰簲鐨勮繃绋嬫鎴栬�呭嚭鍘傛
         List<ProductProcessRouteItem> productProcessRouteItems = productProcessRouteItemMapper.selectList(Wrappers.<ProductProcessRouteItem>lambdaQuery().eq(ProductProcessRouteItem::getProductRouteId, productProcessRouteItem.getProductRouteId()));
-        int inspectType = 1;
         if (productProcessRouteItem.getDragSort()==productProcessRouteItems.size()){
             //鏈�鍚庝竴閬撳伐搴忕敓鎴愬嚭鍘傛
-            inspectType = 2;
+            Product product = productMapper.selectById(productModel.getProductId());
+            QualityInspect qualityInspect = new QualityInspect();
+            qualityInspect.setProductId(product.getId());
+            qualityInspect.setProductName(product.getProductName());
+            qualityInspect.setModel(productModel.getModel());
+            qualityInspect.setUnit(productModel.getUnit());
+            qualityInspect.setQuantity(dto.getQuantity());
+            qualityInspect.setProcess(productProcess.getName());
+            qualityInspect.setInspectState(0);
+            qualityInspect.setInspectType(2);  // 鍘绘帀鑷姩杩涘叆杩囩▼妫�楠岄�昏緫
+            qualityInspect.setProductMainId(productionProductMain.getId());
+            qualityInspect.setProductModelId(productModel.getId());
+            qualityInspectMapper.insert(qualityInspect);
+            List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList(
+                    new LambdaQueryWrapper<QualityTestStandardBinding>()
+                            .eq(QualityTestStandardBinding::getProductId, product.getId()));
+            if (qualityTestStandardBindings.size()>0){
+                qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
+                                .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId()))
+                        .forEach(qualityTestStandardParam -> {
+                            QualityInspectParam param = new QualityInspectParam();
+                            BeanUtils.copyProperties(qualityTestStandardParam, param);
+                            param.setId(null);
+                            param.setInspectId(qualityInspect.getId());
+                            qualityInspectParamMapper.insert(param);
+                        });
+            }
         }
-        Product product = productMapper.selectById(productModel.getProductId());
-        QualityInspect qualityInspect = new QualityInspect();
-        qualityInspect.setProductId(product.getId());
-        qualityInspect.setProductName(product.getProductName());
-        qualityInspect.setModel(productModel.getModel());
-        qualityInspect.setUnit(productModel.getUnit());
-        qualityInspect.setQuantity(dto.getQuantity());
-        qualityInspect.setProcess(productProcess.getName());
-        qualityInspect.setInspectState(0);
-        qualityInspect.setInspectType(inspectType);
-        qualityInspect.setProductMainId(productionProductMain.getId());
-        qualityInspect.setProductModelId(productModel.getId());
-        qualityInspectMapper.insert(qualityInspect);
-        List<QualityTestStandardBinding> qualityTestStandardBindings = qualityTestStandardBindingMapper.selectList(
-                new LambdaQueryWrapper<QualityTestStandardBinding>()
-                        .eq(QualityTestStandardBinding::getProductId, product.getId()));
-        if (qualityTestStandardBindings.size()>0){
-            qualityTestStandardParamMapper.selectList(Wrappers.<QualityTestStandardParam>lambdaQuery()
-                    .eq(QualityTestStandardParam::getTestStandardId,qualityTestStandardBindings.get(0).getTestStandardId()))
-                    .forEach(qualityTestStandardParam -> {
-                QualityInspectParam param = new QualityInspectParam();
-                BeanUtils.copyProperties(qualityTestStandardParam, param);
-                param.setId(null);
-                param.setInspectId(qualityInspect.getId());
-                qualityInspectParamMapper.insert(param);
-            });
-        }
+
         /*鏇存柊宸ュ崟鍜岀敓浜ц鍗�*/
         ProductWorkOrder productWorkOrder = productWorkOrderMapper.selectById(dto.getWorkOrderId());
         productWorkOrder.setCompleteQuantity(productWorkOrder.getCompleteQuantity().add(dto.getQuantity()));
diff --git a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
index 83c3587..7cdba61 100644
--- a/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
+++ b/src/main/java/com/ruoyi/sales/service/impl/SalesLedgerServiceImpl.java
@@ -503,6 +503,7 @@
         List<Long> productIds = products.stream()
                 .map(SalesLedgerProduct::getId)
                 .collect(Collectors.toList());
+
         //鍒犻櫎鐢熶骇鏁版嵁
         salesLedgerProductServiceImpl.deleteProductionData(productIds);
 
@@ -510,7 +511,6 @@
         if (!productIds.isEmpty()) {
             salesLedgerProductMapper.deleteBatchIds(productIds);
         }
-
         LambdaQueryWrapper<InvoiceRegistrationProduct> wrapper = new LambdaQueryWrapper<>();
         wrapper.in(InvoiceRegistrationProduct::getSalesLedgerId, idList);
         List<InvoiceRegistrationProduct> invoiceRegistrationProducts = invoiceRegistrationProductMapper.selectList(wrapper);
diff --git a/src/main/resources/mapper/approve/CarInfoMapper.xml b/src/main/resources/mapper/approve/CarInfoMapper.xml
new file mode 100644
index 0000000..9fa3800
--- /dev/null
+++ b/src/main/resources/mapper/approve/CarInfoMapper.xml
@@ -0,0 +1,24 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.approve.mapper.CarInfoMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfo">
+        <id column="id" property="id" />
+        <result column="car_no" property="carNo" />
+        <result column="color" property="color" />
+        <result column="status" property="status" />
+        <result column="brand" property="brand" />
+        <result column="usage_status" property="usageStatus" />
+        <result column="borrowing_date" property="borrowingDate" />
+        <result column="desc" property="desc" />
+        <result column="odometer_mileage" property="odometerMileage" />
+        <result column="this_trip_mileage" property="thisTripMileage" />
+        <result column="remark" property="remark" />
+        <result column="create_time" property="createTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user" property="updateUser" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/approve/CarInfoRecordMapper.xml b/src/main/resources/mapper/approve/CarInfoRecordMapper.xml
new file mode 100644
index 0000000..4b1f853
--- /dev/null
+++ b/src/main/resources/mapper/approve/CarInfoRecordMapper.xml
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.ruoyi.approve.mapper.CarInfoRecordMapper">
+
+    <!-- 閫氱敤鏌ヨ鏄犲皠缁撴灉 -->
+    <resultMap id="BaseResultMap" type="com.ruoyi.approve.pojo.CarInfoRecord">
+        <id column="id" property="id" />
+        <result column="car_info_id" property="carInfoId" />
+        <result column="odometer_mileage" property="odometerMileage" />
+        <result column="car_return_date" property="carReturnDate" />
+        <result column="user_name" property="userName" />
+        <result column="remark" property="remark" />
+        <result column="create_time" property="createTime" />
+        <result column="create_user" property="createUser" />
+        <result column="update_time" property="updateTime" />
+        <result column="update_user" property="updateUser" />
+    </resultMap>
+
+</mapper>
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
index e1d9381..6fc731f 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordMapper.xml
@@ -258,7 +258,7 @@
         t2.warn_num,
         t2.product_id
         from  procurement_record_storage t1
-        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
+        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 3
         left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         <where>
             t1.type = 2 and t1.sales_ledger_product_id != 0
diff --git a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
index adc64dd..1837dd2 100644
--- a/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
+++ b/src/main/resources/mapper/procurementrecord/ProcurementRecordOutMapper.xml
@@ -5,6 +5,7 @@
     <select id="listPage" resultType="com.ruoyi.procurementrecord.dto.ProcurementRecordOutPageDto">
         select
         t3.supplier_name,
+        t3.purchase_contract_number,
         t2.product_category,
         t1.id,
         t1.code,
@@ -21,9 +22,9 @@
         t4.unit_price,
         t4.unit_price * t1.inbound_num as totalPrice
         from procurement_record_out t1
-        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 2
-        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
         left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
+        left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 2
+        left join purchase_ledger t3 on t3.id = t2.sales_ledger_id
         <where>
             and t1.type = 1
             <if test="req.supplierName != null and req.supplierName != ''">
@@ -117,9 +118,9 @@
         t4.unit_price,
         t4.unit_price * t1.inbound_num as totalPrice
         from procurement_record_out t1
-        left join sales_ledger_product t2 on t2.id = t1.sales_ledger_product_id and t2.type = 1
-        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         left join procurement_record_storage t4 on t4.id = t1.procurement_record_storage_id
+        left join sales_ledger_product t2 on t2.id = t4.sales_ledger_product_id and t2.type = 1
+        left join sales_ledger t3 on t3.id = t2.sales_ledger_id
         <where>
             and t1.type = 2
             <if test="req.customerName != null and req.customerName != ''">
diff --git a/src/main/resources/mapper/production/ProductOrderMapper.xml b/src/main/resources/mapper/production/ProductOrderMapper.xml
index 28e03b5..6fb143a 100644
--- a/src/main/resources/mapper/production/ProductOrderMapper.xml
+++ b/src/main/resources/mapper/production/ProductOrderMapper.xml
@@ -15,15 +15,12 @@
     </resultMap>
     <select id="pageProductOrder" resultType="com.ruoyi.production.dto.ProductOrderDto">
         select po.*,
-        sl.sales_contract_no,
-        sl.customer_name,
         slp.product_category,
         slp.specification_model,
         ppr.process_route_code,
         pb.bom_no,
         ROUND(po.complete_quantity / po.quantity * 100, 2) AS completionStatus
         from product_order po
-        left join sales_ledger sl on po.sales_ledger_id = sl.id
         left join sales_ledger_product slp on po.product_model_id = slp.id
         left join product_process_route ppr on po.id = ppr.product_order_id
         left join product_bom pb on pb.id = ppr.bom_id

--
Gitblit v1.9.3