From 1b602ba053af06651d5c8f50146866d98f82934c Mon Sep 17 00:00:00 2001
From: skyouc
Date: 星期二, 18 三月 2025 11:12:29 +0800
Subject: [PATCH] #修改 1.库位size字段,修改为长,宽, 高(完成 2.货架批量处理(完成 3.库位初始化功能(完成 4.筛选导出(完成 5.库位可绑定多种类型(中,高,低),可使用类型批量修改库位信息(完成 6.库位信息添加一个使用状态 (出库预约,入库预约,在库,空库,禁用, 空板)(完成 7.物料模板导出添加扩展字段

---
 rsf-server/pom.xml                                                                              |   11 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocModifyParams.java  |   27 ++
 rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocStsType.java                    |   48 ++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreas.java              |    6 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocService.java                 |    8 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java         |   23 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java                 |    7 
 pom.xml                                                                                         |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java                     |  167 ++++++++++++----
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Loc.java                         |   48 +++-
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocServiceImpl.java        |   83 ++++++++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocMastInitParam.java |   52 +++++
 rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java                    |    1 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java        |   27 --
 rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java        |    2 
 rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java                   |    4 
 rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocType.java                       |   25 ++
 rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocController.java           |   46 ++++
 rsf-server/src/main/resources/application-dev.yml                                               |    2 
 19 files changed, 479 insertions(+), 112 deletions(-)

diff --git a/pom.xml b/pom.xml
index 2a6e0c0..4f8f968 100644
--- a/pom.xml
+++ b/pom.xml
@@ -8,12 +8,12 @@
     <version>1.0.0</version>
     <name>rsf</name>
     <packaging>pom</packaging>
-
+    <!-- lookup parent from repository -->
     <parent>
         <groupId>org.springframework.boot</groupId>
         <artifactId>spring-boot-starter-parent</artifactId>
         <version>2.5.3</version>
-        <relativePath/> <!-- lookup parent from repository -->
+        <relativePath/>
     </parent>
 
     <modules>
diff --git a/rsf-server/pom.xml b/rsf-server/pom.xml
index 5dd42bf..1d061c1 100644
--- a/rsf-server/pom.xml
+++ b/rsf-server/pom.xml
@@ -145,12 +145,11 @@
 			<artifactId>easypoi-annotation</artifactId>
 			<version>4.2.0</version>
 		</dependency>
-
-		<!--		<dependency>-->
-<!--			<groupId>com.alibaba</groupId>-->
-<!--			<artifactId>easyexcel</artifactId>-->
-<!--			<version>2.2.6</version>-->
-<!--		</dependency>-->
+		<dependency>
+			<groupId>com.alibaba</groupId>
+			<artifactId>easyexcel</artifactId>
+			<version>2.2.6</version>
+		</dependency>
 <!--        <dependency>-->
 <!--            <groupId>cn.afterturn</groupId>-->
 <!--            <artifactId>easypoi-base</artifactId>-->
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
index 146149b..aefafe3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/common/utils/ExcelUtil.java
@@ -2,28 +2,24 @@
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
 import cn.afterturn.easypoi.excel.entity.ImportParams;
-import cn.afterturn.easypoi.excel.entity.result.ExcelVerifyHandlerResult;
-import cn.afterturn.easypoi.handler.inter.IExcelDataHandler;
-import com.google.common.collect.Lists;
-import com.vincent.rsf.common.domain.BeanValidators;
+import com.alibaba.excel.EasyExcel;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
 import com.vincent.rsf.framework.common.Cools;
-import com.vincent.rsf.server.common.handler.AggregationDataHandler;
-import com.vincent.rsf.server.common.handler.ExcelDictHandlerImpl;
+import com.vincent.rsf.framework.common.SpringUtils;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.manager.entity.Matnr;
+import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate;
 import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
+import com.vincent.rsf.server.system.entity.Fields;
+import com.vincent.rsf.server.system.service.FieldsService;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.extern.slf4j.Slf4j;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.poi.hssf.usermodel.HSSFWorkbook;
-import org.apache.poi.poifs.filesystem.POIFSFileSystem;
+import org.apache.poi.ss.formula.functions.T;
 import org.apache.poi.ss.usermodel.*;
-import org.apache.poi.xssf.usermodel.XSSFWorkbook;
-import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
-import javax.validation.ConstraintViolationException;
-import javax.validation.Validation;
-import javax.validation.Validator;
-import javax.validation.ValidatorFactory;
 import java.io.IOException;
 import java.lang.reflect.Field;
 import java.lang.reflect.Modifier;
@@ -43,11 +39,12 @@
         try {
             response.setHeader("Content-Disposition", "attachment; filename=" + URLEncoder.encode("export", "UTF-8"));
             workbook.write(response.getOutputStream());
-        } catch (IOException ignore) {}
+        } catch (IOException ignore) {
+        }
     }
 
     public static <T> Workbook create(List<T> list, Class<T> clz) {
-        return  create(list, clz, false);
+        return create(list, clz, false);
     }
 
     public static <T> Workbook create(List<T> list, Class<T> clz, boolean flagTemplate) {
@@ -57,6 +54,12 @@
         Row header = sheet.createRow(0);
         Field[] fields = Cools.getAllFields(clz);
         int headerIdx = 0;
+        FieldsService itemService = SpringUtils.getBean(FieldsService.class);
+        List<Fields> sysFields = itemService.list(new LambdaQueryWrapper<Fields>()
+                .eq(Fields::getStatus, 1)
+                .eq(Fields::getFlagEnable, 1));
+
+
         for (Field field : fields) {
             if (Modifier.isFinal(field.getModifiers())
                     || Modifier.isStatic(field.getModifiers())
@@ -65,9 +68,7 @@
             }
             String memo = "Undefined";
             if (flagTemplate) {
-                if (field.isAnnotationPresent(ExcelComment.class)) {
-                    memo = field.getAnnotation(ExcelComment.class).value();
-                }
+                memo = field.getName();
             } else {
                 if (field.isAnnotationPresent(Excel.class)) {
                     memo = field.getAnnotation(Excel.class).name();
@@ -79,39 +80,53 @@
             header.createCell(headerIdx).setCellValue(memo);
             headerIdx++;
         }
-
-        int rowIndex = 1;
-        for (T t : list) {
-            Row row = sheet.createRow(rowIndex++);
-
-            int cellIndex = 0;
-            for (Field field : fields) {
-                if (Modifier.isFinal(field.getModifiers())
-                        || Modifier.isStatic(field.getModifiers())
-                        || Modifier.isTransient(field.getModifiers())) {
-                    continue;
-                }
-
-                // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
-                field.setAccessible(true);
-                Object value = null;
-                try {
-                    value = field.get(t);
-                } catch (IllegalAccessException e) {
-                    e.printStackTrace();
-                }
-                if (value != null) {
-                    if (value instanceof Date) {
-                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
-                        row.createCell(cellIndex).setCellValue(sdf.format((Date) value));
+        if (clz.equals(MatnrsTemplate.class)) {
+            //娣诲姞鎵╁睍瀛楁鍒悕
+            if (!sysFields.isEmpty()) {
+                for (Fields field : sysFields) {
+                    if (flagTemplate) {
+                        header.createCell(headerIdx).setCellValue(field.getFields());
                     } else {
-                        row.createCell(cellIndex).setCellValue(value.toString());
+                        header.createCell(headerIdx).setCellValue(field.getFieldsAlise());
                     }
+                    headerIdx++;
                 }
-                cellIndex++;
             }
         }
 
+        int rowIndex = 1;
+        if (!Objects.isNull(list)) {
+            for (T t : list) {
+                Row row = sheet.createRow(rowIndex++);
+
+                int cellIndex = 0;
+                for (Field field : fields) {
+                    if (Modifier.isFinal(field.getModifiers())
+                            || Modifier.isStatic(field.getModifiers())
+                            || Modifier.isTransient(field.getModifiers())) {
+                        continue;
+                    }
+
+                    // 姝よ寰堥噸瑕侊紝鐗瑰埆鏄瓧娈典负private鏃�
+                    field.setAccessible(true);
+                    Object value = null;
+                    try {
+                        value = field.get(t);
+                    } catch (IllegalAccessException e) {
+                        e.printStackTrace();
+                    }
+                    if (value != null) {
+                        if (value instanceof Date) {
+                            SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+                            row.createCell(cellIndex).setCellValue(sdf.format((Date) value));
+                        } else {
+                            row.createCell(cellIndex).setCellValue(value.toString());
+                        }
+                    }
+                    cellIndex++;
+                }
+            }
+        }
         for (int i = 0; i <= fields.length; i++) {
             sheet.autoSizeColumn(i);
         }
@@ -122,6 +137,7 @@
     /**
      * 娣诲姞瀵煎叆excel閰嶇疆鍙傛暟
      * 娉細榛樿閰嶇疆鍙弧瓒冲綋鍓嶉渶姹�
+     *
      * @return
      */
     public static ImportParams getDefaultImportParams() {
@@ -133,7 +149,68 @@
     }
 
     /**
+     * @author Ryan
+     * @description Excel瀵煎嚭Map鏍煎紡琛ㄦ牸
+     * @param
+     * @return
+     * @time 2025/3/18 09:30
+     */
+    public static void exportForMap(HttpServletResponse response, Class cls, String fileName, List<List<Object>> data) {
+        try {
+            response.setContentType("application/octet-stream; charset=utf-8");
+            response.setCharacterEncoding("utf-8");
+            String name = URLEncoder.encode(fileName, "UTF-8");
+            response.setHeader("Content-disposition", "attachment;filename=" + name + ".xlsx");
+            EasyExcel.write(response.getOutputStream()).head(getHeader(cls)).sheet().doWrite(null);
+        } catch (IOException exception) {
+            exception.printStackTrace();
+        }
+    }
+
+    /**
+     * @author Ryan
+     * @description excel瀵煎嚭map妯″紡
+     * @param  Class<T> 妯℃澘绫诲瀷
+     * @return  List<List<String>> 琛ㄥご淇℃伅
+     * @time 2025/3/18 09:26
+     */
+    public static List<List<String>> getHeader(Class<T> t) {
+        List<List<String>> headList = new ArrayList<List<String>>();
+        if (t.getSuperclass().isInstance(MatnrsTemplate.class)) {
+            Field[] allFields = Cools.getAllFields(t);
+            if (Objects.isNull(allFields) ||  allFields.length < 1) {
+                throw new CoolException("妯℃澘鍒椾笉鑳戒负绌猴紒锛�");
+            }
+            for (Field field : allFields) {
+                List<String> list = new ArrayList<String>();
+                String fieldName = "";
+                if (field.isAnnotationPresent(Excel.class)){
+                    fieldName = field.getAnnotation(Excel.class).name();
+                }
+
+                list.add(field.getName());
+                headList.add(list);
+            }
+
+            FieldsService itemService = SpringUtils.getBean(FieldsService.class);
+            List<Fields> sysFields = itemService.list(new LambdaQueryWrapper<Fields>()
+                    .eq(Fields::getStatus, 1)
+                    .eq(Fields::getFlagEnable, 1));
+            //娣诲姞鎵╁睍瀛楁鍒悕
+            if (!sysFields.isEmpty()) {
+                sysFields.forEach(fields1 -> {
+                    List<String> list = new ArrayList<String>();
+                    list.add(fields1.getFieldsAlise());
+                    headList.add(list);
+                });
+            }
+        }
+        return headList;
+    }
+
+    /**
      * 鏍规嵁 {@code tClass} 鐩稿叧鎴愬憳鍙橀噺鐨� {@link ExcelComment#example()} 瀛楁鍒涘缓妯℃嫙鏁版嵁锛屾殏涓嶆敮鎸� 澶嶆潅绫诲瀷
+     *
      * @param tClass
      * @return
      */
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocController.java
index a8ba725..83cadf6 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/LocController.java
@@ -4,22 +4,31 @@
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.vincent.rsf.framework.common.Cools;
 import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
 import com.vincent.rsf.server.common.utils.ExcelUtil;
 import com.vincent.rsf.server.common.annotation.OperationLog;
 import com.vincent.rsf.server.common.domain.BaseParam;
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
+import com.vincent.rsf.server.manager.controller.params.LocMastInitParam;
+import com.vincent.rsf.server.manager.controller.params.LocModifyParams;
 import com.vincent.rsf.server.manager.entity.Loc;
 import com.vincent.rsf.server.manager.service.LocService;
 import com.vincent.rsf.server.system.controller.BaseController;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiModelProperty;
+import io.swagger.annotations.ApiOperation;
 import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.*;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
 import java.util.*;
 
 
+@Api(tags = "搴撲綅淇℃伅")
 @RestController
 public class LocController extends BaseController {
 
@@ -92,18 +101,49 @@
         List<KeyValVo> vos = new ArrayList<>();
         LambdaQueryWrapper<Loc> wrapper = new LambdaQueryWrapper<>();
         if (!Cools.isEmpty(condition)) {
-            wrapper.like(Loc::getName, condition);
+            wrapper.like(Loc::getCode, condition);
         }
         locService.page(new Page<>(1, 30), wrapper).getRecords().forEach(
-                item -> vos.add(new KeyValVo(item.getId(), item.getName()))
+                item -> vos.add(new KeyValVo(item.getId(), item.getCode()))
         );
         return R.ok().add(vos);
     }
 
     @PreAuthorize("hasAuthority('manager:loc:list')")
+    @ApiOperation("搴撲綅瀵煎嚭")
     @PostMapping("/loc/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(locService.list(), Loc.class), response);
+        List<Loc> locs = new ArrayList<>();
+        if (Objects.isNull(map.get("ids"))) {
+            locs = locService.list();
+        } else {
+            locs = locService.list(new LambdaQueryWrapper<Loc>().in(Loc::getId , map.get("ids")).eq(Loc::getStatus, 1));
+        }
+        ExcelUtil.build(ExcelUtil.create(locs, Loc.class), response);
+    }
+
+    @PreAuthorize("hasAuthority('manager:loc:update')")
+    @ApiOperation("搴撲綅鎵归噺淇敼")
+    @PostMapping("/loc/modify")
+    public R batchUpdate(@RequestBody LocModifyParams locs) {
+        if (Objects.isNull(locs)) {
+            throw new CoolException("鍙備负涓嶈兘涓虹┖锛侊紒");
+        }
+        return locService.modifyLocs(locs);
+    }
+
+
+    @PreAuthorize("hasAuthority('manager:loc:update')")
+    @ApiOperation("搴撲綅鍒濆鍖�")
+    @PostMapping("/loc/init")
+    public R initLocInfo(@Valid @RequestBody LocMastInitParam param) {
+        if (Objects.isNull(param)) {
+            throw new CoolException("鍒濆鍖栦俊鎭笉鑳戒负绌猴紒锛�");
+        }
+        if (Objects.isNull(param.getAreaId())) {
+            throw new CoolException("搴撳尯ID涓嶈兘涓虹┖锛侊紒");
+        }
+        return locService.initLocs(param);
     }
 
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
index 29842a3..3dda955 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/MatnrController.java
@@ -12,6 +12,7 @@
 import com.vincent.rsf.server.common.domain.KeyValVo;
 import com.vincent.rsf.server.common.domain.PageParam;
 import com.vincent.rsf.server.manager.entity.Matnr;
+import com.vincent.rsf.server.manager.entity.excel.MatnrsTemplate;
 import com.vincent.rsf.server.manager.service.MatnrService;
 import com.vincent.rsf.server.system.controller.BaseController;
 import io.swagger.annotations.Api;
@@ -24,6 +25,8 @@
 import org.springframework.web.multipart.MultipartFile;
 
 import javax.servlet.http.HttpServletResponse;
+import javax.validation.Valid;
+import javax.validation.constraints.NotNull;
 import java.util.*;
 
 @RestController
@@ -109,7 +112,6 @@
         return R.ok().add(vos);
     }
 
-    @SecurityRequirement(name = HttpHeaders.AUTHORIZATION)
     @PreAuthorize("hasAuthority('manager:matnr:list')")
     @ApiOperation(value = "鑾峰彇鍒嗙被鐗╂枡鏄庣粏鍒楄〃")
     @PostMapping("/matnr/group")
@@ -129,12 +131,27 @@
     }
 
     @PreAuthorize("hasAuthority('manager:matnr:list')")
+    @ApiOperation("瀵煎嚭鐗╂枡淇℃伅")
     @PostMapping("/matnr/export")
     public void export(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
-        ExcelUtil.build(ExcelUtil.create(matnrService.list(), Matnr.class), response);
+        List<Matnr> matnrs = new ArrayList<>();
+        if (!Objects.isNull(map.get("ids"))) {
+            matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().in(Matnr::getId, map.get("ids")).eq(Matnr::getStatus, 1));
+        } else {
+            matnrs = matnrService.list(new LambdaQueryWrapper<Matnr>().last("limit 1"));
+        }
+        ExcelUtil.build(ExcelUtil.create(null, MatnrsTemplate.class, true), response);
     }
 
-    @PreAuthorize("hasAuthority('manager:matnr:save')")
+    @PreAuthorize("hasAuthority('manager:matnr:list')")
+    @ApiOperation("涓嬭浇鐗╂枡妯℃澘")
+    @PostMapping("/matnr/template/download")
+    public void download(@RequestBody Map<String, Object> map, HttpServletResponse response) throws Exception {
+        ExcelUtil.build(ExcelUtil.create(null, MatnrsTemplate.class, true), response);
+    }
+
+
+    @PreAuthorize("hasAuthority('manager:matnr:update')")
     @ApiOperation(value = "excel琛ㄦ牸瀵煎叆鐗╂枡淇℃伅")
     @PostMapping("/matnr/import")
     public R listImport(MultipartFile file) throws Exception {
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocMastInitParam.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocMastInitParam.java
new file mode 100644
index 0000000..4fe8167
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocMastInitParam.java
@@ -0,0 +1,52 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.experimental.Accessors;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotEmpty;
+import java.io.Serializable;
+
+/**
+ * Created by vincent on 2020/6/13
+ */
+@Data
+@Accessors(chain = true)
+public class LocMastInitParam implements Serializable {
+
+    @ApiModelProperty("搴撳尯ID")
+    private Long areaId;
+
+    @ApiModelProperty("璧峰鎺�")
+    @NotEmpty(message = "璧峰鎺掍笉鑳戒负绌猴紒锛�")
+    private Integer startRow;
+
+    @ApiModelProperty("缁堟鎺�")
+    @NotEmpty(message = "缁堟鎺掍笉鑳戒负绌猴紒锛�")
+    private Integer endRow;
+
+    @ApiModelProperty("璧峰鍒�")
+    @NotEmpty(message = "璧峰鍒椾笉鑳戒负绌猴紒锛�")
+    private Integer startBay;
+
+    @ApiModelProperty("缁堟鍒�")
+    @NotEmpty(message = "缁堟鍒椾笉鑳戒负绌猴紒锛�")
+    private Integer endBay;
+
+    @ApiModelProperty("璧峰灞�")
+    @NotEmpty(message = "璧峰灞備笉鑳戒负绌猴紒锛�")
+    private Integer startLev;
+
+    @ApiModelProperty("缁堟灞�")
+    @NotEmpty(message = "缁堟灞備笉鑳戒负绌猴紒锛�")
+    private Integer endLev;
+
+    @ApiModelProperty("搴撲綅绫诲瀷")
+    @NotBlank(message = "搴撲綅绫诲瀷")
+    private String type;
+
+    @ApiModelProperty("瀹界獎绫诲瀷")
+    private String locType;
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocModifyParams.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocModifyParams.java
new file mode 100644
index 0000000..593bb16
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/controller/params/LocModifyParams.java
@@ -0,0 +1,27 @@
+package com.vincent.rsf.server.manager.controller.params;
+
+import com.vincent.rsf.server.manager.entity.Loc;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+
+import java.io.Serializable;
+import java.util.List;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title LocModifyParams
+ * @description
+ * @create 2025/3/17 15:35
+ */
+@Data
+@ApiModel(value = "LocModifyParams", description = "鎵归噺淇敼鍙傛暟")
+public class LocModifyParams implements Serializable {
+
+    @ApiModelProperty("涓诲崟ID")
+    private List<Long> id;
+
+    @ApiModelProperty("搴撲綅淇℃伅")
+    private Loc loc;
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Loc.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Loc.java
index 3bf2713..24a47ed 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Loc.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/Loc.java
@@ -1,14 +1,13 @@
 package com.vincent.rsf.server.manager.entity;
 
-import com.baomidou.mybatisplus.annotation.TableLogic;
+import com.baomidou.mybatisplus.annotation.*;
+
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import com.vincent.rsf.server.manager.service.WarehouseAreasService;
 import com.vincent.rsf.server.manager.service.WarehouseService;
+import lombok.experimental.Accessors;
 import org.springframework.format.annotation.DateTimeFormat;
-import com.baomidou.mybatisplus.annotation.IdType;
-import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
@@ -19,6 +18,7 @@
 
 @Data
 @TableName("man_loc")
+@Accessors(chain = true)
 public class Loc implements Serializable {
 
     private static final long serialVersionUID = 1L;
@@ -53,11 +53,6 @@
     @ApiModelProperty(value= "搴撲綅绫诲瀷")
     private String type;
 
-    /**
-     * 鍚嶇О
-     */
-    @ApiModelProperty(value= "鍚嶇О")
-    private String name;
 
     /**
      * 铏氭嫙搴撲綅
@@ -87,13 +82,28 @@
      * 闀�/瀹�/楂�
      */
     @ApiModelProperty(value= "闀�/瀹�/楂�")
-    private String size;
+    @TableField("`length`")
+    private Double length;
+
+    /**
+     * 瀹�
+     */
+    @ApiModelProperty("瀹�")
+    @TableField("`width`")
+    private Double width;
+
+    /**
+     * 楂�
+     */
+    @ApiModelProperty("楂�")
+    private Double height;
 
     /**
      * 鎺�
      */
     @ApiModelProperty(value= "鎺�")
-    private Integer lrow;
+    @TableField("`row`")
+    private Integer row;
 
     /**
      * 鍒�
@@ -110,8 +120,13 @@
     /**
      * 閫氶亾
      */
-    @ApiModelProperty(value= "閫氶亾")
+    @ApiModelProperty(value= "宸烽亾")
     private Integer channel;
+
+    /**
+     * 搴撲綅浣跨敤鐘舵��
+     */
+    private String useStatus;
 
     /**
      * 鏈�澶ч浂浠舵暟
@@ -190,18 +205,19 @@
 
     public Loc() {}
 
-    public Loc(Long areaId, Long warehouseId, String code,String type,String name,Short flagLogic,String fucAtrrs,String barcode,String unit,String size,Integer lrow,Integer col,Integer lev,Integer channel,Integer maxParts,Integer maxPack,Short flagLabelMange,String locAttrs,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
+    public Loc(Long areaId, Long warehouseId, String code,String type,Short flagLogic,String fucAtrrs,String barcode,String unit,Double size, Double width, Double height,Integer lrow,Integer col,Integer lev,Integer channel,Integer maxParts,Integer maxPack,Short flagLabelMange,String locAttrs,Integer status,Integer deleted,Integer tenantId,Long createBy,Date createTime,Long updateBy,Date updateTime,String memo) {
         this.warehouseId = warehouseId;
         this.areaId = areaId;
         this.code = code;
         this.type = type;
-        this.name = name;
+        this.width = width;
+        this.height = height;
         this.flagLogic = flagLogic;
         this.fucAtrrs = fucAtrrs;
         this.barcode = barcode;
         this.unit = unit;
-        this.size = size;
-        this.lrow = lrow;
+        this.length = size;
+        this.row = lrow;
         this.col = col;
         this.lev = lev;
         this.channel = channel;
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
index 9d1b124..9b75cc9 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/QlyIsptItem.java
@@ -4,14 +4,10 @@
 import java.text.SimpleDateFormat;
 import java.util.Date;
 import org.springframework.format.annotation.DateTimeFormat;
-import java.text.SimpleDateFormat;
-import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.IdType;
 import com.baomidou.mybatisplus.annotation.TableId;
-import com.baomidou.mybatisplus.annotation.TableLogic;
 import com.baomidou.mybatisplus.annotation.TableName;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
@@ -19,7 +15,6 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
-import java.util.Date;
 
 @Data
 @TableName("man_qly_ispt_item")
@@ -58,7 +53,7 @@
     @ApiModelProperty(value= "鏍囩")
     private String label;
 
-    /**
+    /**鈭�
      * 渚涘簲鍟嗗悕绉�
      */
     @ApiModelProperty(value= "渚涘簲鍟嗗悕绉�")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
index 8a34244..7abbf6c 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/StockItem.java
@@ -13,7 +13,6 @@
 import java.util.Date;
 
 import com.baomidou.mybatisplus.annotation.TableLogic;
-import io.swagger.annotations.ApiModel;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import com.vincent.rsf.framework.common.Cools;
@@ -21,7 +20,6 @@
 import com.vincent.rsf.server.system.service.UserService;
 import com.vincent.rsf.server.system.entity.User;
 import java.io.Serializable;
-import java.util.Date;
 
 @Data
 @TableName("man_stock_item")
@@ -390,7 +388,7 @@
         LocService service = SpringUtils.getBean(LocService.class);
         Loc loc = service.getById(this.locId);
         if (!Cools.isEmpty(loc)){
-            return String.valueOf(loc.getName());
+            return String.valueOf(loc.getCode());
         }
         return null;
     }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreas.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreas.java
index ee03739..4010a81 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreas.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/WarehouseAreas.java
@@ -38,6 +38,12 @@
     private Long id;
 
     /**
+     * 浠撳簱ID
+     */
+    @ApiModelProperty("浠撳簱ID")
+    private Long wareId;
+
+    /**
      * 缂栧彿
      */
     @ApiModelProperty(value= "缂栧彿")
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
index 8ea3665..688ab4d 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/entity/excel/MatnrsTemplate.java
@@ -1,8 +1,6 @@
 package com.vincent.rsf.server.manager.entity.excel;
 
 import cn.afterturn.easypoi.excel.annotation.Excel;
-import cn.afterturn.easypoi.handler.inter.IExcelDataModel;
-import cn.afterturn.easypoi.handler.inter.IExcelModel;
 import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelAutoColumnSize;
 import com.vincent.rsf.server.manager.entity.excel.annotation.ExcelComment;
 import lombok.Data;
@@ -24,7 +22,7 @@
 @Accessors(chain = true)
 @ToString(callSuper = true)
 @EqualsAndHashCode(callSuper = false)
-public class MatnrsTemplate implements IExcelModel, IExcelDataModel, Serializable {
+public class MatnrsTemplate implements Serializable {
 
     @Excel(name = "鐗╂枡鍚嶇О")
     @ExcelComment(example = "鍗庝负鎵嬫満")
@@ -114,28 +112,5 @@
     @ExcelComment(notNull = false, example = "0")
     private String flagCheck;
 
-    private Integer rowNum;
 
-    private String errorMsg;
-
-
-    @Override
-    public Integer getRowNum() {
-        return this.rowNum;
-    }
-
-    @Override
-    public void setRowNum(Integer rowNum) {
-        this.rowNum = rowNum;
-    }
-
-    @Override
-    public String getErrorMsg() {
-        return this.errorMsg;
-    }
-
-    @Override
-    public void setErrorMsg(String errorMsg) {
-        this.errorMsg = errorMsg;
-    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
index 3b15e3a..905a2e2 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/AsnOrderItemService.java
@@ -18,7 +18,5 @@
 
     boolean fieldsSave(Map<String, Object> params);
 
-//    R listByAsnId(Map<String, Object> map);
-
     IPage<Map<String, Object>> listByAsnId(PageParam<AsnOrderItem, BaseParam> pageParam, QueryWrapper<AsnOrderItem> buildWrapper);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocService.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocService.java
index 14f0c35..6cc0cb3 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocService.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/LocService.java
@@ -1,8 +1,16 @@
 package com.vincent.rsf.server.manager.service;
 
 import com.baomidou.mybatisplus.extension.service.IService;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.server.manager.controller.params.LocMastInitParam;
+import com.vincent.rsf.server.manager.controller.params.LocModifyParams;
 import com.vincent.rsf.server.manager.entity.Loc;
+
+import java.util.List;
 
 public interface LocService extends IService<Loc> {
 
+    R modifyLocs(LocModifyParams locs);
+
+    R initLocs(LocMastInitParam param);
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocServiceImpl.java b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocServiceImpl.java
index dea1d43..4dd5ffe 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocServiceImpl.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/manager/service/impl/LocServiceImpl.java
@@ -1,12 +1,95 @@
 package com.vincent.rsf.server.manager.service.impl;
 
+import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
+import com.vincent.rsf.framework.common.R;
+import com.vincent.rsf.framework.exception.CoolException;
+import com.vincent.rsf.server.manager.controller.params.LocMastInitParam;
+import com.vincent.rsf.server.manager.controller.params.LocModifyParams;
+import com.vincent.rsf.server.manager.entity.WarehouseAreas;
 import com.vincent.rsf.server.manager.mapper.LocMapper;
 import com.vincent.rsf.server.manager.entity.Loc;
 import com.vincent.rsf.server.manager.service.LocService;
 import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.vincent.rsf.server.manager.service.WarehouseAreasService;
+import org.springframework.beans.factory.annotation.Autowired;
 import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Objects;
+import java.util.stream.Collectors;
 
 @Service("locService")
 public class LocServiceImpl extends ServiceImpl<LocMapper, Loc> implements LocService {
 
+    @Autowired
+    private WarehouseAreasService warehouseAreasService;
+
+    @Override
+    public R modifyLocs(LocModifyParams locs) {
+        if (locs.getId().isEmpty()) {
+            throw new CoolException("搴撲綅ID涓嶈兘涓虹┖锛侊紒");
+        }
+        Loc loc = locs.getLoc();
+
+        if (Objects.isNull(loc)) {
+            throw new CoolException("淇敼搴撲綅淇℃伅涓嶈兘涓虹┖锛侊紒");
+        }
+
+        boolean update = this.update(new LambdaUpdateWrapper<Loc>()
+                .in(Loc::getId, locs.getId())
+                .eq(Loc::getStatus, 1)
+                .set(!Objects.isNull(loc.getUseStatus()), Loc::getUseStatus, loc.getUseStatus())
+                .set(!Objects.isNull(loc.getType()), Loc::getType, loc.getType())
+                .set(!Objects.isNull(loc.getLength()), Loc::getLength, loc.getLength())
+                .set(!Objects.isNull(loc.getWidth()), Loc::getWidth, loc.getWidth())
+                .set(!Objects.isNull(loc.getHeight()), Loc::getHeight, loc.getHeight())
+                .set(!Objects.isNull(loc.getChannel()), Loc::getChannel, loc.getChannel())
+                .set(!Objects.isNull(loc.getFlagLabelMange()), Loc::getFlagLabelMange, loc.getFlagLabelMange())
+                .set(!Objects.isNull(loc.getStatus()), Loc::getStatus, loc.getStatus()));
+        if (!update) {
+            throw new CoolException("搴撲綅淇℃伅淇敼澶辫触锛侊紒");
+        }
+        return R.ok("鎿嶄綔鎴愬姛锛侊紒");
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public R initLocs(LocMastInitParam param) {
+        //娓呯┖琛�
+        if (this.baseMapper.delete(new LambdaUpdateWrapper<>()) < 0) {
+            throw new CoolException("鏁版嵁搴撳垵濮嬪寲澶辫触锛氳�佹暟鎹垹闄ゅけ璐ワ紒锛�");
+        }
+        WarehouseAreas warehouseAreas = warehouseAreasService.getById(param.getAreaId());
+        if (Objects.isNull(warehouseAreas)) {
+            throw new CoolException("搴撳尯涓嶅瓨鍦紒锛�");
+        }
+
+        List<Loc> list = new ArrayList<>();
+        for (int r = param.getStartRow(); r <= param.getEndRow(); r++) {
+            for (int b = param.getStartBay(); b <= param.getEndBay(); b++) {
+                for (int l = param.getStartLev(); l <= param.getEndLev(); l++) {
+                    // 鑾峰彇搴撲綅鍙�
+                    String locNo = String.format("%02d", r) + String.format("%03d", b) + String.format("%02d", l);
+                    Loc loc = new Loc();
+                    loc.setCode(locNo)
+                            .setUseStatus("O")
+                            .setRow(r)
+                            .setCol(b)
+                            .setLev(l)
+                            .setAreaId(param.getAreaId())
+                            .setWarehouseId(warehouseAreas.getWareId())
+                            .setType(param.getType());
+
+                    list.add(loc);
+                }
+            }
+        }
+        if (!this.saveBatch(list)) {
+            throw new CoolException("搴撲綅鍒濆鍖栧け璐ワ紒锛�");
+        }
+        return R.ok("鍒濆鍖栨垚鍔燂紒锛�");
+    }
 }
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java
index c7ce65b..863c072 100644
--- a/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/constant/CodeRes.java
@@ -10,6 +10,7 @@
     String USER_10003 = "10003-瀵嗙爜閿欒";
 
     String PICK_600 = "600-鎷f枡浠诲姟";
+
     String NO_COMB_700 = "700-璇峰厛缁勬墭";
 
     String SYSTEM_20001 = "20001-璁稿彲璇佸凡澶辨晥";
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocStsType.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocStsType.java
new file mode 100644
index 0000000..946ad6d
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocStsType.java
@@ -0,0 +1,48 @@
+package com.vincent.rsf.server.system.enums;
+
+
+public enum LocStsType {
+
+    //绌烘澘
+    LOC_STS_TYPE_D("D", "绌烘澘"),
+    //鍦ㄥ簱
+    LOC_STS_TYPE_F("F", "鍦ㄥ簱"),
+    //绌哄簱
+    LOC_STS_TYPE_O("O", "绌哄簱"),
+    //绂佺敤
+    LOC_STS_TYPE_X("X", "绂佺敤"),
+    //鍏ュ簱棰勭害
+    LOC_STS_TYPE_S("S", "鍏ュ簱棰勭害"),
+    //鍑哄簱棰勭害
+    LOC_STS_TYPE_R("R", "鍑哄簱棰勭害"),
+    ;
+
+    private String type;
+
+    private String desc;
+
+    LocStsType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+//    public long val() {
+//        LocStsService service = SpringUtils.getBean(LocStsService.class);
+//        LocSts locSts = service.getOne(new LambdaQueryWrapper<LocSts>().eq(LocSts::getLocSts, this.toString()));
+//        if (locSts == null) {
+//            throw new CoolException("LocStsType Error!");
+//        }
+//        return locSts.getId();
+//    }
+
+    public static LocStsType get(String el) {
+        for (LocStsType value : LocStsType.values()) {
+            if (el.equals(value.toString())) {
+                return value;
+            }
+        }
+        return null;
+    }
+
+
+}
diff --git a/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocType.java b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocType.java
new file mode 100644
index 0000000..d3c44b8
--- /dev/null
+++ b/rsf-server/src/main/java/com/vincent/rsf/server/system/enums/LocType.java
@@ -0,0 +1,25 @@
+package com.vincent.rsf.server.system.enums;
+
+/**
+ * @author Ryan
+ * @version 1.0
+ * @title LocType
+ * @description
+ * @create 2025/3/17 13:29
+ */
+public enum LocType {
+    //楂樸�佷腑銆佷綆搴撲綅
+    LOC_TYPE_HEIGHT("H", "楂樺簱浣�"),
+    LOC_TYPE_MIDDLE("M", "涓簱浣�"),
+    LOC_TYPE_LOW("L", "浣庡簱浣�")
+    ;
+
+    LocType(String type, String desc) {
+        this.type = type;
+        this.desc = desc;
+    }
+
+    private String type;
+
+    private String desc;
+}
diff --git a/rsf-server/src/main/resources/application-dev.yml b/rsf-server/src/main/resources/application-dev.yml
index f3d6b37..294179e 100644
--- a/rsf-server/src/main/resources/application-dev.yml
+++ b/rsf-server/src/main/resources/application-dev.yml
@@ -14,6 +14,8 @@
     driver-class-name: com.mysql.jdbc.Driver
     url: jdbc:mysql://127.0.0.1:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
     username: root
+#    url: jdbc:mysql://47.76.147.249:3306/rsf?useUnicode=true&characterEncoding=UTF-8&useSSL=false&serverTimezone=Asia/Shanghai
+#    username: rsf
     password: 34821015
     type: com.alibaba.druid.pool.DruidDataSource
     druid:

--
Gitblit v1.9.1