From 2be9b7f9c675e6ffe64adfac0a3e37f30404af99 Mon Sep 17 00:00:00 2001
From: cuilei <ray_tsu1@163.com>
Date: 星期三, 11 六月 2025 10:35:58 +0800
Subject: [PATCH] 工具管理-刀具准备单功能接口开发

---
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java                           |   39 ++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java         |    5 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java                        |    3 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java                   |   56 ++++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java                  |   34 +++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java                  |    7 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java |   16 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java          |   15 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml         |   75 ++++++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java          |   22 +
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java                          |    2 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java               |    7 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java            |    8 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java       |  176 ++++++++++++++++++
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java                        |    3 
 lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml               |   24 ++
 16 files changed, 472 insertions(+), 20 deletions(-)

diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
index bbe1a7f..0a84ad8 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/controller/PreparationOrderController.java
@@ -1,5 +1,6 @@
 package org.jeecg.modules.tms.controller;
 
+import com.alibaba.fastjson.JSONObject;
 import org.jeecg.common.system.query.QueryGenerator;
 import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
 import com.baomidou.mybatisplus.core.metadata.IPage;
@@ -72,9 +73,10 @@
                                                          @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
                                                          @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
                                                          HttpServletRequest req) {
-        QueryWrapper<PreparationOrder> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrder, req.getParameterMap());
+        Map<String, String[]> parameterMap = req.getParameterMap();
+        QueryWrapper<PreparationOrder> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrder, parameterMap);
         Page<PreparationOrder> page = new Page<PreparationOrder>(pageNo, pageSize);
-        IPage<PreparationOrder> pageList = preparationOrderService.page(page, queryWrapper);
+        IPage<PreparationOrder> pageList = preparationOrderService.queryPageList(page, parameterMap);
         return Result.OK(pageList);
     }
 
@@ -139,8 +141,17 @@
     //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:deleteBatch")
     @DeleteMapping(value = "/deleteBatch")
     public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
-        this.preparationOrderService.delBatchMain(Arrays.asList(ids.split(",")));
+        preparationOrderService.delBatchMain(Arrays.asList(ids.split(",")));
         return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+    }
+
+    @AutoLog(value = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟")
+    @ApiOperation(value = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟", notes = "鍒�鍏峰噯澶囧崟-杞嚭搴撶敵璇峰崟")
+    //@RequiresPermissions("org.jeecg.modules:tms_preparation_order:convert")
+    @PostMapping(value = "/convertToOutboundOrder")
+    public Result<String> convertToOutboundOrder(@RequestBody List<String> preparationOrderIds) {
+        List<String> result = preparationOrderService.convertToOutboundOrder(preparationOrderIds);
+        return Result.OK(JSONObject.toJSONString(result));
     }
 
     /**
@@ -177,9 +188,10 @@
                                                                                     @RequestParam(name = "pageNo", defaultValue = "1") Integer pageNo,
                                                                                     @RequestParam(name = "pageSize", defaultValue = "10") Integer pageSize,
                                                                                     HttpServletRequest req) {
-        QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, req.getParameterMap());
+        Map<String, String[]> parameterMap = req.getParameterMap();
+        QueryWrapper<PreparationOrderDetail> queryWrapper = QueryGenerator.initQueryWrapper(preparationOrderDetail, parameterMap);
         Page<PreparationOrderDetail> page = new Page<PreparationOrderDetail>(pageNo, pageSize);
-        IPage<PreparationOrderDetail> pageList = preparationOrderDetailService.page(page, queryWrapper);
+        IPage<PreparationOrderDetail> pageList = preparationOrderDetailService.queryPageList(page, parameterMap);
         return Result.OK(pageList);
     }
 
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java
index 23b6d36..b821f7e 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundDetail.java
@@ -5,6 +5,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.experimental.Accessors;
 import org.jeecg.common.aspect.annotation.Dict;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -22,6 +23,7 @@
  * @Version: V1.0
  */
 @Data
+@Accessors(chain = true)
 @TableName("tms_outbound_detail")
 @ApiModel(value="tms_outbound_detail瀵硅薄", description="鍑哄簱鐢宠鍗曟槑缁�")
 public class OutboundDetail implements Serializable {
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java
index 4520bf9..d8c9232 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/OutboundOrder.java
@@ -5,6 +5,8 @@
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.*;
+import liquibase.pro.packaged.E;
+import lombok.experimental.Accessors;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -20,6 +22,7 @@
  * @Version: V1.0
  */
 @Data
+@Accessors(chain = true)
 @TableName("tms_outbound_order")
 @ApiModel(value="tms_outbound_order瀵硅薄", description="tms_outbound_order")
 public class OutboundOrder implements Serializable {
@@ -98,6 +101,42 @@
     @Excel(name = "澶囨敞", width = 15)
     @ApiModelProperty(value = "澶囨敞")
     private String remark;
+    /**鍑嗗鍗曠紪鍙�*/
+    @Excel(name = "鍑嗗鍗曠紪鍙�", width = 15)
+    @ApiModelProperty(value = "鍑嗗鍗曠紪鍙�")
+    private String preparationOrderId;
+    /**闆朵欢鍥惧彿*/
+    @Excel(name = "闆朵欢鍥惧彿", width = 15)
+    @ApiModelProperty(value = "闆朵欢鍥惧彿")
+    private String partDrawingNo;
+    /**闆朵欢鍚嶇О*/
+    @Excel(name = "闆朵欢鍚嶇О", width = 15)
+    @ApiModelProperty(value = "闆朵欢鍚嶇О")
+    private String partName;
+    /**闆朵欢鏉愭枡*/
+    @Excel(name = "闆朵欢鏉愭枡", width = 15)
+    @ApiModelProperty(value = "闆朵欢鏉愭枡")
+    private String partMaterial;
+    /**鍔犲伐鎵规*/
+    @Excel(name = "宸ュ簭锛堝伐姝ュ彿锛�", width = 15)
+    @ApiModelProperty(value = "宸ュ簭锛堝伐姝ュ彿锛�")
+    private String productionProcessesNo;
+    /**鍔犲伐鎵规*/
+    @Excel(name = "鍔犲伐鎵规", width = 15)
+    @ApiModelProperty(value = "鍔犲伐鎵规")
+    private String batchCode;
+    /**鍔犲伐鏁伴噺*/
+    @Excel(name = "鍔犲伐鏁伴噺", width = 15)
+    @ApiModelProperty(value = "鍔犲伐鏁伴噺")
+    private String machiningCount;
+    /**鍔犲伐璁惧*/
+    @Excel(name = "鍔犲伐璁惧", width = 15)
+    @ApiModelProperty(value = "鍔犲伐璁惧")
+    private String equipmentCode;
+    /**绋嬪簭鍚�*/
+    @Excel(name = "绋嬪簭鍚�", width = 15)
+    @ApiModelProperty(value = "绋嬪簭鍚�")
+    private String ncName;
 	/**绉熸埛鍙�*/
     @Excel(name = "绉熸埛鍙�", width = 15)
     @ApiModelProperty(value = "绉熸埛鍙�")
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java
index ba322a2..6f2e2b9 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrder.java
@@ -7,6 +7,7 @@
 import com.baomidou.mybatisplus.annotation.TableId;
 import com.baomidou.mybatisplus.annotation.TableName;
 import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.experimental.Accessors;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
@@ -22,6 +23,7 @@
  * @Version: V1.0
  */
 @Data
+@Accessors(chain = true)
 @TableName("tms_preparation_order")
 @ApiModel(value="tms_preparation_order瀵硅薄", description="鍒�鍏峰噯澶囧崟")
 public class PreparationOrder implements Serializable {
@@ -72,6 +74,7 @@
     @ApiModelProperty(value = "鍑嗗鍗曞嚭搴撴暟閲�")
     private java.math.BigDecimal outboundQuantity;
     /**鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠*/
+    @Dict(dicCode = "preparation_order_status")
     @Excel(name = "鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠", width = 15)
     @ApiModelProperty(value = "鍗曞瓙鐘舵��;1.鏈鏍革紱2.璋冩満鍛樺凡瀹℃牳锛�3.宸茶浆鍑哄簱鐢宠")
     private String orderStatus;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
index 2865536..99f9164 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/entity/PreparationOrderDetail.java
@@ -2,10 +2,12 @@
 
 import java.io.Serializable;
 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 lombok.Data;
 import com.fasterxml.jackson.annotation.JsonFormat;
+import org.jeecg.common.aspect.annotation.Dict;
 import org.springframework.format.annotation.DateTimeFormat;
 import org.jeecgframework.poi.excel.annotation.Excel;
 import java.util.Date;
@@ -33,7 +35,7 @@
     private String preparationOrderId;
     /**鍒�鍏风紪鐮�*/
     @Excel(name = "鍒�鍏风紪鐮�", width = 15)
-    @ApiModelProperty(value = "鍒�鍏风紪鐮�")
+    @ApiModelProperty(value = "鍒�鍏风紪鐮�(tms_base_tool琛╥d瀛楁)")
     private String toolCode;
     /**鍒�鍏风紪鍙�*/
     @Excel(name = "鍒�鍏风紪鍙�", width = 15)
@@ -63,4 +65,34 @@
     @DateTimeFormat(pattern="yyyy-MM-dd")
     @ApiModelProperty(value = "鏇存柊鏃堕棿")
     private Date updateTime;
+
+    /**鍒�鍏风紪鐮�(tms_base_tool琛╰ool_code瀛楁)*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍒�鍏风紪鐮�(tms_base_tool琛╰ool_code瀛楁)")
+    private String toolNum;
+    /**涓枃鍚嶇О*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "涓枃鍚嶇О")
+    private String chineseName;
+    /**鍨嬪彿/鍥惧彿*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍨嬪彿/鍥惧彿")
+    private String toolModel;
+    /**宸ュ叿绫诲瀷*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "宸ュ叿绫诲瀷")
+    @Dict(dicCode = "application_type")
+    private String applicationType;
+    /**鍒�鍏锋潗鏂�*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍒�鍏锋潗鏂�")
+    private String toolMaterial;
+    /**闆朵欢鏉愭枡*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "闆朵欢鏉愭枡")
+    private String partMaterial;
+    /**鍘傚*/
+    @TableField(exist = false)
+    @ApiModelProperty(value = "鍘傚")
+    private String supplierId;
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java
index e8e8165..274955b 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/OutStorehouseType.java
@@ -8,7 +8,8 @@
     TOOL_BORROW("1", "宸ュ叿鍊熺敤"),
     MAINTENANCE_OUTBOUND("2", "缁翠慨鍑哄簱"),
     CALIBRATION_OUTBOUND("3", "妫�瀹氬嚭搴�"),
-    GRINDING_OUTBOUND("4", "鍒冪(鍑哄簱");
+    GRINDING_OUTBOUND("4", "鍒冪(鍑哄簱"),
+    PREPARATION_OUTBOUND("5", "鍑嗗鍗曞嚭搴�");
 
     private final String value;
     private final String description;
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java
new file mode 100644
index 0000000..7335ee4
--- /dev/null
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/enums/PreparationOrderStatus.java
@@ -0,0 +1,56 @@
+package org.jeecg.modules.tms.enums;
+
+
+import lombok.Getter;
+
+import java.util.Objects;
+
+/**
+ * 鍒�鍏峰噯澶囧崟鐘舵�佹灇涓剧被
+ */
+@Getter
+public enum PreparationOrderStatus {
+    /**
+     * 寰呭鏍哥姸鎬侊紝鍊间负1
+     */
+    PENDING_AUDIT("1", "鏈鏍�"),
+
+    /**
+     * 瀹℃牳閫氳繃鐘舵�侊紝鍊间负2
+     */
+    AUDITED("2", "璋冩満鍛樺凡瀹℃牳"),
+
+    /**
+     * 杞嚭搴撶敵璇风姸鎬侊紝鍊间负3
+     */
+    CONVERT("3", "宸茶浆鍑哄簱鐢宠");
+
+    private final String value;
+    private final String description;
+
+    /**
+     * 鏋勯�犳柟娉�
+     *
+     * @param value       鐘舵�佸��
+     * @param description 鐘舵�佹弿杩�
+     */
+    PreparationOrderStatus(String value, String description) {
+        this.value = value;
+        this.description = description;
+    }
+
+    /**
+     * 鏍规嵁鐘舵�佸�艰幏鍙栧搴旂殑鏋氫妇瀹炰緥
+     *
+     * @param value 鐘舵�佸��
+     * @return 瀵瑰簲鐨勬灇涓惧疄渚嬶紝濡傛灉鎵句笉鍒板尮閰嶇殑鍊煎垯杩斿洖null
+     */
+    public static PreparationOrderStatus fromValue(String value) {
+        for (PreparationOrderStatus status : values()) {
+            if (Objects.equals(status.getValue(), value)) {
+                return status;
+            }
+        }
+        return null;
+    }
+}
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java
index d308eff..e521471 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderDetailMapper.java
@@ -1,6 +1,12 @@
 package org.jeecg.modules.tms.mapper;
 
 import java.util.List;
+
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.tms.entity.PreparationOrderDetail;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
 import org.apache.ibatis.annotations.Param;
@@ -29,4 +35,6 @@
      */
     public List<PreparationOrderDetail> selectByMainId(@Param("mainId") String mainId);
 
+    IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page,
+                                                @Param(Constants.WRAPPER) Wrapper<PreparationOrderDetail> queryWrapper);
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java
index 3871f46..5965d11 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/PreparationOrderMapper.java
@@ -2,6 +2,11 @@
 
 import java.util.List;
 
+import com.baomidou.mybatisplus.core.conditions.Wrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Constants;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.apache.ibatis.annotations.Param;
 import org.jeecg.modules.tms.entity.PreparationOrder;
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
@@ -14,4 +19,6 @@
  */
 public interface PreparationOrderMapper extends BaseMapper<PreparationOrder> {
 
+    IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page,
+                                          @Param(Constants.WRAPPER) Wrapper<PreparationOrder> queryWrapper);
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml
index 860fd10..4f99dc4 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderDetailMapper.xml
@@ -15,4 +15,79 @@
         WHERE
             preparation_order_id = #{mainId}
     </select>
+    <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrderDetail">
+        SELECT
+            t1.id id,
+            t1.preparation_order_id preparationOrderId,
+            t1.tool_code toolCode,
+            t1.outbound_quantity outboundQuantity,
+            t1.tenant_id tenantId,
+            t1.create_by createBy,
+            t1.create_time createTime,
+            t1.update_by updateBy,
+            t1.update_time updateTime,
+            t2.tool_code toolNum,
+            t2.chinese_name chineseName,
+            t2.tool_model toolModel,
+            t2.parama_table_name paramaTableName,
+            t3.application_type applicationType,
+            t3.supplier_id supplierId,
+        <choose>
+            <when test="ew.paramNameValuePairs.paramaTableName == '1'">
+                t4.tool_material toolMaterial,
+                t4.part_material partMaterial
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '2'">
+                t5.tool_material toolMaterial,
+                t5.part_material partMaterial
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '3'">
+                t6.tool_material toolMaterial,
+                t6.part_material partMaterial
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '4'">
+                t7.tool_material toolMaterial,
+                t7.part_material partMaterial
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '5'">
+                t8.tool_material toolMaterial,
+                t8.part_material partMaterial
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '6'">
+                t9.tool_material toolMaterial,
+                t9.part_material partMaterial
+            </when>
+            <otherwise>
+                t10.tool_material toolMaterial,
+                t10.part_material partMaterial
+            </otherwise>
+        </choose>
+        FROM tms_preparation_order_detail t1
+        LEFT JOIN tms_base_tools t2 on t1.tool_code = t2.id
+        LEFT JOIN tms_tools_config_property t3 on t3.tool_code = t2.id
+        <choose>
+            <when test="ew.paramNameValuePairs.paramaTableName == '1'">
+                LEFT JOIN tms_para_common_tool t4 on t4.tool_code = t2.id
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '2'">
+                LEFT JOIN tms_para_hole_tools t5 on t5.tool_code = t2.id
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '3'">
+                LEFT JOIN tms_para_threading_tool t6 on t6.tool_code = t2.id
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '4'">
+                LEFT JOIN tms_para_mill_tool t7 on t7.tool_code = t2.id
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '5'">
+                LEFT JOIN tms_para_turning_tools t8 on t8.tool_code = t2.id
+            </when>
+            <when test="ew.paramNameValuePairs.paramaTableName == '6'">
+                LEFT JOIN tms_para_blade t9 on t9.tool_code = t2.id
+            </when>
+            <otherwise>
+                LEFT JOIN tms_para_common_tool t10 on t10.tool_code = t2.id
+            </otherwise>
+        </choose>
+        ${ew.customSqlSegment}
+    </select>
 </mapper>
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml
index ef724a9..b610ad3 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/mapper/xml/PreparationOrderMapper.xml
@@ -2,4 +2,28 @@
 <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
 <mapper namespace="org.jeecg.modules.tms.mapper.PreparationOrderMapper">
 
+    <select id="queryPageList" resultType="org.jeecg.modules.tms.entity.PreparationOrder">
+        SELECT
+            t.id AS id,
+            t.preparation_order_num AS preparationOrderNum,
+            t.part_drawing_no AS partDrawingNo,
+            t.part_name AS partName,
+            t.part_material AS partMaterial,
+            t.production_processes_no AS productionProcessesNo,
+            t.batch_code AS batchCode,
+            t.machining_count AS machiningCount,
+            t.equipment_code AS equipmentCode,
+            t.nc_name AS ncName,
+            t.outbound_quantity AS outboundQuantity,
+            t.order_status AS orderStatus,
+            t.outbound_time AS outboundTime,
+            t.remark AS remark,
+            t.tenant_id AS tenantId,
+            t.create_by AS createBy,
+            t.create_time AS createTime,
+            t.update_by AS updateBy,
+            t.update_time AS updateTime
+        FROM tms_preparation_order t
+        ${ew.customSqlSegment}
+    </select>
 </mapper>
\ No newline at end of file
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java
index 9f4d09e..81b2380 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderDetailService.java
@@ -1,8 +1,11 @@
 package org.jeecg.modules.tms.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.tms.entity.PreparationOrderDetail;
 import com.baomidou.mybatisplus.extension.service.IService;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 鍒�鍏峰噯澶囧崟鏄庣粏
@@ -19,4 +22,6 @@
    * @return List<PreparationOrderDetail>
    */
 	public List<PreparationOrderDetail> selectByMainId(String mainId);
+
+    IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap);
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
index a4d558f..3c2026c 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/IPreparationOrderService.java
@@ -1,5 +1,7 @@
 package org.jeecg.modules.tms.service;
 
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.tms.entity.PreparationOrderDetail;
 import org.jeecg.modules.tms.entity.PreparationOrder;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -8,6 +10,7 @@
 import java.io.Serializable;
 import java.util.Collection;
 import java.util.List;
+import java.util.Map;
 
 /**
  * @Description: 鍒�鍏峰噯澶囧崟
@@ -33,4 +36,8 @@
 
 
 	void editTotal(PreparationOrderAndDetailDto preparationOrderAndDetailDto);
+
+	List<String> convertToOutboundOrder(List<String> preparationOrderIds);
+
+	IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap);
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
index f236aa3..cc05fae 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/OutboundOrderServiceImpl.java
@@ -175,13 +175,14 @@
 		if (!Objects.equals(outboundOrder.getOrderStatus(), OutBillStatus.DRAFT.getValue())) {
 			throw new JeecgBootException("鏃犳硶鎻愪氦闈炶崏绋跨姸鎬佺殑鍑哄簱鐢宠鍗曪紒");
 		}
-		//閿佸畾鐢宠鍗曟槑缁嗕腑宸ュ叿搴撳瓨
-		if (lockOutboundStock(id)) {
-			//鍚姩娴佺▼
-			if (triggerProcess(outboundOrder)) {
-				outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue());
-				updateById(outboundOrder);
-			}
+		if (!OutStorehouseType.PREPARATION_OUTBOUND.getValue().equals(outboundOrder.getOutStorehouseType())) {
+			//涓嶆槸浠庡噯澶囧崟杞叆鐨勫嚭搴撶敵璇凤紝鎵ц閿佸簱
+			lockOutboundStock(id);
+		}
+		//鍚姩娴佺▼
+		if (triggerProcess(outboundOrder)) {
+			outboundOrder.setOrderStatus(OutBillStatus.SUBMITTED.getValue());
+			updateById(outboundOrder);
 		}
     }
 
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java
index 2eaadd9..f904465 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderDetailServiceImpl.java
@@ -1,10 +1,16 @@
 package org.jeecg.modules.tms.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import org.jeecg.modules.tms.entity.PreparationOrderDetail;
 import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper;
 import org.jeecg.modules.tms.service.IPreparationOrderDetailService;
 import org.springframework.stereotype.Service;
 import java.util.List;
+import java.util.Map;
+
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 
@@ -24,4 +30,14 @@
 	public List<PreparationOrderDetail> selectByMainId(String mainId) {
 		return preparationOrderDetailMapper.selectByMainId(mainId);
 	}
+
+	@Override
+	public IPage<PreparationOrderDetail> queryPageList(Page<PreparationOrderDetail> page, Map<String, String[]> parameterMap) {
+		QueryWrapper<PreparationOrderDetail> queryWrapper = Wrappers.query();
+		String[] preparationOrderIds = parameterMap.get("preparationOrderId");
+		if (preparationOrderIds != null && preparationOrderIds.length > 0) {
+			queryWrapper.eq("t1.preparation_order_id", preparationOrderIds[0]);
+		}
+		return this.baseMapper.queryPageList(page, queryWrapper);
+	}
 }
diff --git a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
index 2cecbd3..0fb2bcc 100644
--- a/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
+++ b/lxzn-module-tms/src/main/java/org/jeecg/modules/tms/service/impl/PreparationOrderServiceImpl.java
@@ -1,22 +1,31 @@
 package org.jeecg.modules.tms.service.impl;
 
 import cn.hutool.core.collection.CollectionUtil;
+import cn.hutool.core.util.StrUtil;
 import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.core.toolkit.Wrappers;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import org.apache.shiro.SecurityUtils;
+import org.apache.shiro.subject.Subject;
+import org.jeecg.common.system.vo.LoginUser;
+import org.jeecg.modules.system.service.ISysBusinessCodeRuleService;
 import org.jeecg.modules.tms.convert.PreparationOrderConvert;
-import org.jeecg.modules.tms.entity.PreparationOrder;
-import org.jeecg.modules.tms.entity.PreparationOrderDetail;
+import org.jeecg.modules.tms.entity.*;
 import org.jeecg.modules.tms.entity.dto.PreparationOrderAndDetailDto;
+import org.jeecg.modules.tms.enums.*;
 import org.jeecg.modules.tms.mapper.PreparationOrderDetailMapper;
 import org.jeecg.modules.tms.mapper.PreparationOrderMapper;
-import org.jeecg.modules.tms.service.IPreparationOrderDetailService;
-import org.jeecg.modules.tms.service.IPreparationOrderService;
+import org.jeecg.modules.tms.service.*;
 import org.springframework.stereotype.Service;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.transaction.annotation.Transactional;
 import java.io.Serializable;
-import java.util.List;
-import java.util.Collection;
+import java.math.BigDecimal;
+import java.util.*;
+import java.util.stream.Collectors;
 
 /**
  * @Description: 鍒�鍏峰噯澶囧崟
@@ -33,6 +42,18 @@
 	private PreparationOrderDetailMapper preparationOrderDetailMapper;
 	@Autowired
 	private IPreparationOrderDetailService preparationOrderDetailService;
+	@Autowired
+	private IToolLedgerService toolLedgerService;
+	@Autowired
+	private IToolLedgerDetailService toolLedgerDetailService;
+	@Autowired
+	private IOutboundOrderService outboundOrderService;
+	@Autowired
+	private IOutboundDetailService outboundDetailService;
+	@Autowired
+	private ISysBusinessCodeRuleService businessCodeRuleService;
+	@Autowired
+	private IBaseToolsService baseToolsService;
 	
 	@Override
 	@Transactional(rollbackFor = Exception.class)
@@ -66,4 +87,147 @@
 		preparationOrderDetailService.saveBatch(detailUpdateList);
 	}
 
+	@Override
+	@Transactional(rollbackFor = Exception.class)
+	public List<String> convertToOutboundOrder(List<String> preparationOrderIds) {
+		List<String> resultMessage = CollectionUtil.newArrayList();
+		List<PreparationOrder> preparationOrderList = listByIds(preparationOrderIds);
+		//鏍¢獙鍑嗗鍗曟槑缁嗕腑鐨勬暟閲�
+		for (PreparationOrder preparationOrder : preparationOrderList) {
+			if (PreparationOrderStatus.PENDING_AUDIT.getValue().equals(preparationOrder.getOrderStatus())) {
+				resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戞湭瀹℃牳锛屾棤娉曡浆鍑哄簱鐢宠锛�");
+				continue;
+			}
+			if (PreparationOrderStatus.CONVERT.getValue().equals(preparationOrder.getOrderStatus())) {
+				resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戝凡缁忚浆鍑猴紝璇峰嬁閲嶅鎻愪氦锛�");
+				continue;
+			}
+			List<PreparationOrderDetail> preparationOrderDetailList = preparationOrderDetailService.list(new LambdaQueryWrapper<PreparationOrderDetail>()
+					.eq(PreparationOrderDetail::getPreparationOrderId, preparationOrder.getId()));
+			Map<String, BigDecimal> preparationOrderToolCodeMap = preparationOrderDetailList.stream().collect(Collectors.toMap(PreparationOrderDetail::getToolCode,
+					PreparationOrderDetail::getOutboundQuantity, (k1, k2) -> k1));
+			List<ToolLedgerDetail> toolLedgerDetailList = toolLedgerDetailService.list(new LambdaQueryWrapper<ToolLedgerDetail>()
+					.in(ToolLedgerDetail::getToolCode, preparationOrderToolCodeMap.keySet())
+					.eq(ToolLedgerDetail::getQuantity, BigDecimal.ONE)
+					.eq(ToolLedgerDetail::getStatus, ToolCirculationStatus.IN_STOCK.getValue()));
+			Map<String, List<ToolLedgerDetail>> ledgerDetailToolCodeMap = toolLedgerDetailList.stream().collect(Collectors.groupingBy(ToolLedgerDetail::getToolCode));
+
+			List<OutboundDetail> outboundDetailList = CollectionUtil.newArrayList();
+			for (PreparationOrderDetail preparationOrderDetail : preparationOrderDetailList) {
+				String toolCode = preparationOrderDetail.getToolCode();
+				BigDecimal needQuantity = preparationOrderDetail.getOutboundQuantity();
+				List<ToolLedgerDetail> toolLedgerDetails = ledgerDetailToolCodeMap.get(toolCode);
+				BigDecimal stockQuantity = Optional.ofNullable(toolLedgerDetails).orElse(Collections.emptyList()).stream()
+						.map(ToolLedgerDetail::getQuantity)
+						.reduce(BigDecimal.ZERO, BigDecimal::add);
+				if (CollectionUtil.isEmpty(toolLedgerDetails) || stockQuantity.compareTo(needQuantity) < 0) {
+					BaseTools tools = baseToolsService.getById(toolCode);
+					resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() +"銆戜腑锛岀紪鐮佷负銆�" + tools.getToolCode() + "銆戠殑宸ュ叿锛屽簱瀛樹笉瓒筹紝杞嚭搴撶敵璇峰崟澶辫触锛�");
+					break;
+				} else {
+					//浠庡簱瀛樻槑缁嗕腑鍙栧嚭闇�瑕佺殑鏁伴噺锛屾寚瀹氬埌鎶�
+					List<ToolLedgerDetail> selectedTools = toolLedgerDetails.subList(0, needQuantity.intValue());
+					//鐢熸垚鐢宠鍗曟槑缁�
+					selectedTools.forEach(item->{
+						OutboundDetail detail = new OutboundDetail()
+								.setToolCode(item.getToolCode())
+								.setToolId(item.getToolId())
+								.setOutboundQuantity(item.getQuantity())
+								.setStorageLocation(item.getWarehouseId())
+								.setOutboundLocation(item.getPositionCode())
+								.setStatus(OutBoundStatusEnum.NOT_OUTBOUND.getValue())
+								.setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername())
+								.setCreateTime(new Date());
+						outboundDetailList.add(detail);
+					});
+				}
+			}
+			BigDecimal totalOutboundQuantity = preparationOrderDetailList.stream()
+					.map(detail -> Optional.ofNullable(detail.getOutboundQuantity()).orElse(BigDecimal.ZERO))
+					.reduce(BigDecimal.ZERO, BigDecimal::add);
+			if (outboundDetailList.size() == totalOutboundQuantity.intValue()) {
+				//鎸囧畾鍒版妸鐨勬暟閲忎笌闇�姹傛暟閲忎竴鑷达紝婊¤冻杞嚭搴撶敵璇峰崟鐨勬潯浠讹紝鐢熸垚鍑哄簱鐢宠鍗�
+				OutboundOrder order = new OutboundOrder()
+						.setOutNum(businessCodeRuleService.generateBusinessCodeSeq("outBoundOrder"))
+						.setOutStorehouseType(OutStorehouseType.PREPARATION_OUTBOUND.getValue())
+						.setHandler(Objects.requireNonNull(getCurrentUser()).getId())
+						.setReviewer(Objects.requireNonNull(getCurrentUser()).getUsername())
+						.setOrderStatus(OutBillStatus.DRAFT.getValue())
+						.setSubjectMatter("鍒�鍏峰噯澶囧崟杞叆")
+						.setPreparationOrderId(preparationOrder.getId())
+						.setPartDrawingNo(preparationOrder.getPartDrawingNo())
+						.setPartName(preparationOrder.getPartName())
+						.setPartMaterial(preparationOrder.getPartMaterial())
+						.setProductionProcessesNo(preparationOrder.getProductionProcessesNo())
+						.setBatchCode(preparationOrder.getBatchCode())
+						.setMachiningCount(preparationOrder.getMachiningCount())
+						.setEquipmentCode(preparationOrder.getEquipmentCode())
+						.setNcName(preparationOrder.getNcName())
+						.setCreateBy(Objects.requireNonNull(getCurrentUser()).getUsername())
+						.setCreateTime(new Date());
+				outboundOrderService.save(order);
+				outboundDetailList.forEach(item -> item.setOutStorehouseId(order.getId()));
+				outboundDetailService.saveBatch(outboundDetailList);
+				//閿佸畾搴撳瓨鍙拌处鏄庣粏搴撳瓨
+				LambdaQueryWrapper<ToolLedgerDetail> queryWrapper = new LambdaQueryWrapper<>();
+				String codeIdString = outboundDetailList.stream()
+						.map(detail -> "'" + detail.getToolCode() + ":" + detail.getToolId() + "'")
+						.collect(Collectors.joining(","));
+				String sql = "(tool_code + ':' + tool_id) IN (" + codeIdString + ")";
+				queryWrapper.apply(sql);
+				toolLedgerDetailService.update(new ToolLedgerDetail().setQuantity(BigDecimal.ZERO), queryWrapper);
+				//閿佸畾搴撳瓨鍙拌处涓昏〃
+				List<ToolLedger> toolLedgerList = toolLedgerService.list(new LambdaQueryWrapper<ToolLedger>()
+						.in(ToolLedger::getToolId, preparationOrderToolCodeMap.keySet()));
+				toolLedgerList.forEach(item -> {
+					BigDecimal outboundQuantity = preparationOrderToolCodeMap.getOrDefault(item.getToolId(), BigDecimal.ZERO);
+					item.setAvailableCount(Optional.ofNullable(item.getAvailableCount()).orElse(BigDecimal.ZERO).subtract(outboundQuantity));
+				});
+				toolLedgerService.updateBatchById(toolLedgerList);
+				//鏇存柊鍑嗗鍗曠姸鎬�
+				updateById(new PreparationOrder()
+						.setId(preparationOrder.getId())
+						.setOutboundTime(new Date())
+						.setOrderStatus(PreparationOrderStatus.CONVERT.getValue()));//3.宸茶浆鍑哄簱鐢宠
+				resultMessage.add("鍑嗗鍗曘��" + preparationOrder.getPreparationOrderNum() + "銆戣浆鍑哄簱鐢宠鍗曟垚鍔燂紒");
+			}
+		}
+		return resultMessage;
+	}
+
+	@Override
+	public IPage<PreparationOrder> queryPageList(Page<PreparationOrder> page, Map<String, String[]> parameterMap) {
+		QueryWrapper<PreparationOrder> queryWrapper = Wrappers.query();
+		String[] preparationOrderNums = parameterMap.get("preparationOrderNum");
+		if (preparationOrderNums != null && preparationOrderNums.length > 0) {
+			queryWrapper.like("t.preparation_order_num", preparationOrderNums[0]);
+		}
+		String[] orderStatuses = parameterMap.get("orderStatus");
+		if (orderStatuses != null && orderStatuses.length > 0) {
+			queryWrapper.eq("t.order_status", orderStatuses[0]);
+		}
+		String[] beginTimes = parameterMap.get("beginTime");
+		if (beginTimes != null && beginTimes.length > 0) {
+			queryWrapper.ge("t.create_time", beginTimes[0]);
+		}
+		String[] endTimes = parameterMap.get("endTime");
+		if (endTimes != null && endTimes.length > 0) {
+			queryWrapper.le("t.create_time", endTimes[0]);
+		}
+		queryWrapper.orderByAsc("t.create_time");
+		return this.baseMapper.queryPageList(page, queryWrapper);
+	}
+
+	private LoginUser getCurrentUser() {
+		// 鑾峰彇褰撳墠璁よ瘉鐨勭櫥褰曠敤鎴蜂俊鎭�
+		Subject currentUser = SecurityUtils.getSubject();
+		if (currentUser != null && currentUser.isAuthenticated()) {
+			Object principal = currentUser.getPrincipal();
+			if (principal instanceof LoginUser) {
+				return (LoginUser) principal;
+			}
+		}
+		return null;
+	}
+
 }

--
Gitblit v1.9.3