From e3a037adf3861fee78ad5478784f24e59cc598a2 Mon Sep 17 00:00:00 2001
From: lyh <925863403@qq.com>
Date: 星期一, 30 六月 2025 14:55:40 +0800
Subject: [PATCH] 设备车间管理与用户

---
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartUserMapper.xml         |    5 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartController.java        |  215 ++++++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepart.java                      |  113 +++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartUserController.java    |  177 ++++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepartUser.java                  |   47 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartServiceImpl.java     |  219 ++++++++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartUserServiceImpl.java |   19 
 lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java                              |   23 +
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/util/FindsWorkShopDepartsChildrenUtil.java      |  108 +++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartMapper.java                |   17 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartUserService.java         |   14 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartUserMapper.java            |   17 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartService.java             |   53 ++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/EamWorkShopDepartTreeModel.java           |  122 +++++
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartMapper.xml             |    5 
 lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/WorkShopIdModel.java                      |   73 +++
 16 files changed, 1,227 insertions(+), 0 deletions(-)

diff --git a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
index 87c7bf5..54174c2 100644
--- a/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
+++ b/lxzn-boot-base-core/src/main/java/org/jeecg/config/Swagger2Config.java
@@ -103,6 +103,29 @@
                 .groupName("MDC");
     }
 
+    /**
+     * swagger2鐨勯厤缃枃浠讹紝杩欓噷鍙互閰嶇疆swagger2鐨勪竴浜涘熀鏈殑鍐呭锛屾瘮濡傛壂鎻忕殑鍖呯瓑绛� 锛圡DC锛�
+     *
+     * @return Docket
+     */
+    @Bean(value = "defaultApi1")
+    public Docket defaultApi1() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(apiInfo())
+                .select()
+                //姝ゅ寘璺緞涓嬬殑绫伙紝鎵嶇敓鎴愭帴鍙f枃妗�
+                .apis(RequestHandlerSelectors.basePackage("org.jeecg.modules.eam"))
+                //鍔犱簡ApiOperation娉ㄨВ鐨勭被锛屾墠鐢熸垚鎺ュ彛鏂囨。
+                .apis(RequestHandlerSelectors.withClassAnnotation(RestController.class))
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .paths(PathSelectors.any())
+                .build()
+                .securitySchemes(Collections.singletonList(securityScheme()))
+                .securityContexts(securityContexts())
+                .globalOperationParameters(setHeaderToken())
+                .groupName("EAM");
+    }
+
     /***
      * oauth2閰嶇疆
      * 闇�瑕佸鍔爏wagger鎺堟潈鍥炶皟鍦板潃
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartController.java
new file mode 100644
index 0000000..fc1b34c
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartController.java
@@ -0,0 +1,215 @@
+package org.jeecg.modules.eam.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import org.jeecg.modules.eam.model.EamWorkShopDepartTreeModel;
+import org.jeecg.modules.eam.service.IWorkShopDepartService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.CacheEvict;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.servlet.ModelAndView;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 璁惧杞﹂棿绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Api(tags="璁惧杞﹂棿绠$悊")
+@RestController
+@RequestMapping("/eam/workShopDepart")
+@Slf4j
+public class WorkShopDepartController extends JeecgController<WorkShopDepart, IWorkShopDepartService> {
+	@Autowired
+	private IWorkShopDepartService workShopDepartService;
+
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param workShopDepart
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "璁惧杞﹂棿绠$悊-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧杞﹂棿绠$悊-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<WorkShopDepart>> queryPageList(WorkShopDepart workShopDepart,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<WorkShopDepart> queryWrapper = QueryGenerator.initQueryWrapper(workShopDepart, req.getParameterMap());
+		Page<WorkShopDepart> page = new Page<WorkShopDepart>(pageNo, pageSize);
+		IPage<WorkShopDepart> pageList = workShopDepartService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	 @AutoLog(value = "璁惧杞﹂棿绠$悊-鏍戝舰鍒楄〃")
+	 @ApiOperation(value = "璁惧杞﹂棿绠$悊-鏍戝舰鍒楄〃", notes = "璁惧杞﹂棿绠$悊-鏍戝舰鍒楄〃")
+	 @GetMapping(value = "/queryTreeList")
+	 public Result<List<EamWorkShopDepartTreeModel>> queryTreeList(@RequestParam(name = "ids", required = false) String ids) {
+		 Result<List<EamWorkShopDepartTreeModel>> result = new Result<>();
+		 try {
+			 if (oConvertUtils.isNotEmpty(ids)) {
+				 List<EamWorkShopDepartTreeModel> productionList = workShopDepartService.queryTreeList(ids);
+				 result.setResult(productionList);
+			 } else {
+				 List<EamWorkShopDepartTreeModel> list = workShopDepartService.queryTreeList();
+				 result.setResult(list);
+			 }
+			 result.setSuccess(true);
+		 } catch (Exception e) {
+			 log.error(e.getMessage(), e);
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 娣诲姞
+	  *
+	  * @param WorkShopDepart
+	  * @return
+	  */
+	 @AutoLog(value = "璁惧杞﹂棿绠$悊-娣诲姞")
+	 @ApiOperation(value = "璁惧杞﹂棿绠$悊-娣诲姞", notes = "璁惧杞﹂棿绠$悊-娣诲姞")
+	 @PostMapping(value = "/add")
+	 @CacheEvict(value = {"eam:cache:workShop:alldata", "eam:cache:workShop:allids"}, allEntries = true)
+	 public Result<WorkShopDepart> add(@RequestBody WorkShopDepart WorkShopDepart) {
+		 Result<WorkShopDepart> result = new Result<>();
+		 try {
+			 workShopDepartService.saveWorkShopDepartData(WorkShopDepart);
+			 result.success("娣诲姞鎴愬姛锛�");
+		 } catch (Exception e) {
+			 log.error(e.getMessage(), e);
+			 result.error500("鎿嶄綔澶辫触");
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 缂栬緫
+	  *
+	  * @param WorkShopDepart
+	  * @return
+	  */
+	 @AutoLog(value = "璁惧杞﹂棿绠$悊-缂栬緫")
+	 @ApiOperation(value = "璁惧杞﹂棿绠$悊-缂栬緫", notes = "璁惧杞﹂棿绠$悊-缂栬緫")
+	 @RequestMapping(value = "/edit", method = {RequestMethod.PUT, RequestMethod.POST})
+	 @CacheEvict(value = {"eam:cache:workShop:alldata", "eam:cache:workShop:allids"}, allEntries = true)
+	 public Result<WorkShopDepart> edit(@RequestBody WorkShopDepart WorkShopDepart) {
+		 Result<WorkShopDepart> result = new Result<>();
+		 WorkShopDepart eamProductionEntity = workShopDepartService.getById(WorkShopDepart.getId());
+		 if (eamProductionEntity == null) {
+			 result.error500("鏈壘鍒板搴斿疄浣�");
+		 } else {
+			 boolean ok = workShopDepartService.updateWorkShopDepartDataById(WorkShopDepart);
+			 if (ok) {
+				 result.success("淇敼鎴愬姛!");
+			 }
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 閫氳繃id鍒犻櫎
+	  *
+	  * @param id
+	  * @return
+	  */
+	 @AutoLog(value = "璁惧杞﹂棿绠$悊-閫氳繃id鍒犻櫎")
+	 @ApiOperation(value = "璁惧杞﹂棿绠$悊-閫氳繃id鍒犻櫎", notes = "璁惧杞﹂棿绠$悊-閫氳繃id鍒犻櫎")
+	 @DeleteMapping(value = "/delete")
+	 @CacheEvict(value = {"eam:cache:workShop:alldata", "eam:cache:workShop:allids"}, allEntries = true)
+	 public Result<WorkShopDepart> delete(@RequestParam(name = "id", required = true) String id) {
+		 Result<WorkShopDepart> result = new Result<>();
+		 WorkShopDepart WorkShopDepart = workShopDepartService.getById(id);
+		 if (WorkShopDepart == null) {
+			 result.error500("鏈壘鍒板搴斿疄浣�");
+		 } else {
+			 boolean ok = workShopDepartService.delete(id);
+			 if (ok) {
+				 result.success("鍒犻櫎鎴愬姛!");
+			 }
+		 }
+		 return result;
+	 }
+
+	 /**
+	  * 鎵归噺鍒犻櫎
+	  *
+	  * @param ids
+	  * @return
+	  */
+	 @AutoLog(value = "璁惧杞﹂棿绠$悊-鎵归噺鍒犻櫎")
+	 @ApiOperation(value = "璁惧杞﹂棿绠$悊-鎵归噺鍒犻櫎", notes = "璁惧杞﹂棿绠$悊-鎵归噺鍒犻櫎")
+	 @DeleteMapping(value = "/deleteBatch")
+	 @CacheEvict(value = {"eam:cache:workShop:alldata", "eam:cache:workShop:allids"}, allEntries = true)
+	 public Result<WorkShopDepart> deleteBatch(@RequestParam(name = "ids", required = true) String ids) {
+		 Result<WorkShopDepart> result = new Result<>();
+		 if (ids == null || "".equals(ids.trim())) {
+			 result.error500("鍙傛暟涓嶈瘑鍒紒");
+		 } else {
+			 this.workShopDepartService.deleteBatchWithChildren(Arrays.asList(ids.split(",")));
+			 result.success("鍒犻櫎鎴愬姛!");
+		 }
+		 return result;
+	 }
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "璁惧杞﹂棿绠$悊-閫氳繃id鏌ヨ")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊-閫氳繃id鏌ヨ", notes="璁惧杞﹂棿绠$悊-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<WorkShopDepart> queryById(@RequestParam(name="id",required=true) String id) {
+		WorkShopDepart workShopDepart = workShopDepartService.getById(id);
+		if(workShopDepart==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(workShopDepart);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param workShopDepart
+    */
+    //@RequiresPermissions("org.jeecg.modules.eam:sys_work_shop_depart:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, WorkShopDepart workShopDepart) {
+        return super.exportXls(request, workShopDepart, WorkShopDepart.class, "璁惧杞﹂棿绠$悊");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("sys_work_shop_depart:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, WorkShopDepart.class);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartUserController.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartUserController.java
new file mode 100644
index 0000000..6627a9b
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/controller/WorkShopDepartUserController.java
@@ -0,0 +1,177 @@
+package org.jeecg.modules.eam.controller;
+
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import org.jeecg.common.api.vo.Result;
+import org.jeecg.common.system.query.QueryGenerator;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.entity.WorkShopDepartUser;
+import org.jeecg.modules.eam.service.IWorkShopDepartUserService;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.core.metadata.IPage;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import lombok.extern.slf4j.Slf4j;
+
+import org.jeecgframework.poi.excel.ExcelImportUtil;
+import org.jeecgframework.poi.excel.def.NormalExcelConstants;
+import org.jeecgframework.poi.excel.entity.ExportParams;
+import org.jeecgframework.poi.excel.entity.ImportParams;
+import org.jeecgframework.poi.excel.view.JeecgEntityExcelView;
+import org.jeecg.common.system.base.controller.JeecgController;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import org.springframework.web.multipart.MultipartHttpServletRequest;
+import org.springframework.web.servlet.ModelAndView;
+import com.alibaba.fastjson.JSON;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.jeecg.common.aspect.annotation.AutoLog;
+
+ /**
+ * @Description: 璁惧杞﹂棿绠$悊涓庣敤鎴�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Api(tags="璁惧杞﹂棿绠$悊涓庣敤鎴�")
+@RestController
+@RequestMapping("/eam/workShopDepartUser")
+@Slf4j
+public class WorkShopDepartUserController extends JeecgController<WorkShopDepartUser, IWorkShopDepartUserService> {
+	@Autowired
+	private IWorkShopDepartUserService workShopDepartUserService;
+
+	/**
+	 * 鍒嗛〉鍒楄〃鏌ヨ
+	 *
+	 * @param workShopDepartUser
+	 * @param pageNo
+	 * @param pageSize
+	 * @param req
+	 * @return
+	 */
+	//@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-鍒嗛〉鍒楄〃鏌ヨ")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-鍒嗛〉鍒楄〃鏌ヨ", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-鍒嗛〉鍒楄〃鏌ヨ")
+	@GetMapping(value = "/list")
+	public Result<IPage<WorkShopDepartUser>> queryPageList(WorkShopDepartUser workShopDepartUser,
+								   @RequestParam(name="pageNo", defaultValue="1") Integer pageNo,
+								   @RequestParam(name="pageSize", defaultValue="10") Integer pageSize,
+								   HttpServletRequest req) {
+		QueryWrapper<WorkShopDepartUser> queryWrapper = QueryGenerator.initQueryWrapper(workShopDepartUser, req.getParameterMap());
+		Page<WorkShopDepartUser> page = new Page<WorkShopDepartUser>(pageNo, pageSize);
+		IPage<WorkShopDepartUser> pageList = workShopDepartUserService.page(page, queryWrapper);
+		return Result.OK(pageList);
+	}
+
+	/**
+	 *   娣诲姞
+	 *
+	 * @param workShopDepartUser
+	 * @return
+	 */
+	@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-娣诲姞")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-娣诲姞", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-娣诲姞")
+	//@RequiresPermissions("org.jeecg.modules.mdc:sys_work_shop_depart_user:add")
+	@PostMapping(value = "/add")
+	public Result<String> add(@RequestBody WorkShopDepartUser workShopDepartUser) {
+		workShopDepartUserService.save(workShopDepartUser);
+		return Result.OK("娣诲姞鎴愬姛锛�");
+	}
+
+	/**
+	 *  缂栬緫
+	 *
+	 * @param workShopDepartUser
+	 * @return
+	 */
+	@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-缂栬緫")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-缂栬緫", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-缂栬緫")
+	//@RequiresPermissions("org.jeecg.modules.mdc:sys_work_shop_depart_user:edit")
+	@RequestMapping(value = "/edit", method = {RequestMethod.PUT,RequestMethod.POST})
+	public Result<String> edit(@RequestBody WorkShopDepartUser workShopDepartUser) {
+		workShopDepartUserService.updateById(workShopDepartUser);
+		return Result.OK("缂栬緫鎴愬姛!");
+	}
+
+	/**
+	 *   閫氳繃id鍒犻櫎
+	 *
+	 * @param id
+	 * @return
+	 */
+	@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鍒犻櫎")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鍒犻櫎", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules.mdc:sys_work_shop_depart_user:delete")
+	@DeleteMapping(value = "/delete")
+	public Result<String> delete(@RequestParam(name="id",required=true) String id) {
+		workShopDepartUserService.removeById(id);
+		return Result.OK("鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 *  鎵归噺鍒犻櫎
+	 *
+	 * @param ids
+	 * @return
+	 */
+	@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-鎵归噺鍒犻櫎")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-鎵归噺鍒犻櫎", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-鎵归噺鍒犻櫎")
+	//@RequiresPermissions("org.jeecg.modules.mdc:sys_work_shop_depart_user:deleteBatch")
+	@DeleteMapping(value = "/deleteBatch")
+	public Result<String> deleteBatch(@RequestParam(name="ids",required=true) String ids) {
+		this.workShopDepartUserService.removeByIds(Arrays.asList(ids.split(",")));
+		return Result.OK("鎵归噺鍒犻櫎鎴愬姛!");
+	}
+
+	/**
+	 * 閫氳繃id鏌ヨ
+	 *
+	 * @param id
+	 * @return
+	 */
+	//@AutoLog(value = "璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鏌ヨ")
+	@ApiOperation(value="璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鏌ヨ", notes="璁惧杞﹂棿绠$悊涓庣敤鎴�-閫氳繃id鏌ヨ")
+	@GetMapping(value = "/queryById")
+	public Result<WorkShopDepartUser> queryById(@RequestParam(name="id",required=true) String id) {
+		WorkShopDepartUser workShopDepartUser = workShopDepartUserService.getById(id);
+		if(workShopDepartUser==null) {
+			return Result.error("鏈壘鍒板搴旀暟鎹�");
+		}
+		return Result.OK(workShopDepartUser);
+	}
+
+    /**
+    * 瀵煎嚭excel
+    *
+    * @param request
+    * @param workShopDepartUser
+    */
+    //@RequiresPermissions("org.jeecg.modules.mdc:sys_work_shop_depart_user:exportXls")
+    @RequestMapping(value = "/exportXls")
+    public ModelAndView exportXls(HttpServletRequest request, WorkShopDepartUser workShopDepartUser) {
+        return super.exportXls(request, workShopDepartUser, WorkShopDepartUser.class, "璁惧杞﹂棿绠$悊涓庣敤鎴�");
+    }
+
+    /**
+      * 閫氳繃excel瀵煎叆鏁版嵁
+    *
+    * @param request
+    * @param response
+    * @return
+    */
+    //@RequiresPermissions("sys_work_shop_depart_user:importExcel")
+    @RequestMapping(value = "/importExcel", method = RequestMethod.POST)
+    public Result<?> importExcel(HttpServletRequest request, HttpServletResponse response) {
+        return super.importExcel(request, response, WorkShopDepartUser.class);
+    }
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepart.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepart.java
new file mode 100644
index 0000000..748b50f
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepart.java
@@ -0,0 +1,113 @@
+package org.jeecg.modules.eam.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+
+import com.baomidou.mybatisplus.annotation.*;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("mom_eam_work_shop_depart")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="mom_eam_work_shop_depart", description="璁惧杞﹂棿绠$悊")
+public class WorkShopDepart implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**鐖剁骇id*/
+	@Excel(name = "鐖剁骇id", width = 15)
+    @ApiModelProperty(value = "鐖剁骇id")
+    private String parentId;
+	/**鏈烘瀯鍚嶇О*/
+	@Excel(name = "鏈烘瀯鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鏈烘瀯鍚嶇О")
+    private String workShopName;
+	/**鑻辨枃鍚嶇О*/
+	@Excel(name = "鑻辨枃鍚嶇О", width = 15)
+    @ApiModelProperty(value = "鑻辨枃鍚嶇О")
+    private String workShopNameEn;
+	/**鎺掑簭*/
+	@Excel(name = "鎺掑簭", width = 15)
+    @ApiModelProperty(value = "鎺掑簭")
+    private Integer workShopOrder;
+	/**鎻忚堪*/
+	@Excel(name = "鎻忚堪", width = 15)
+    @ApiModelProperty(value = "鎻忚堪")
+    private String description;
+	/**鏈烘瀯绫诲埆 0 鍏徃 1.涓績2.宸ュ尯3.宸ユ*/
+	@Excel(name = "鏈烘瀯绫诲埆 0 鍏徃 1.涓績2.宸ュ尯3.宸ユ", width = 15)
+    @ApiModelProperty(value = "鏈烘瀯绫诲埆1.涓績2.宸ュ尯3.宸ユ")
+    private String orgCategory;
+	/**鏈烘瀯绫诲瀷 1閮ㄩ棬 2瀛愰儴闂�*/
+	@Excel(name = "鏈烘瀯绫诲瀷 1閮ㄩ棬 2瀛愰儴闂�", width = 15)
+    @ApiModelProperty(value = "鏈烘瀯绫诲瀷 1閮ㄩ棬 2瀛愰儴闂�")
+    private String orgType;
+	/**鏈烘瀯缂栫爜*/
+	@Excel(name = "鏈烘瀯缂栫爜", width = 15)
+    @ApiModelProperty(value = "鏈烘瀯缂栫爜")
+    private String orgCode;
+    /**瀵瑰簲缂栫爜*/
+    @Excel(name = "瀵瑰簲缂栫爜", width = 15)
+    @ApiModelProperty(value = "瀵瑰簲缂栫爜")
+    private String workShopCode;
+    /**鍦板潃*/
+    @Excel(name = "鍦板潃", width = 15)
+    @ApiModelProperty(value = "鍦板潃")
+    private String address;
+    /**澶囨敞*/
+    @Excel(name = "澶囨敞", width = 20)
+    @ApiModelProperty(value = "澶囨敞")
+    private String memo;
+	/**鐘舵�侊紙1鍚敤锛�0涓嶅惎鐢級*/
+	@Excel(name = "鐘舵�侊紙1鍚敤锛�0涓嶅惎鐢級", width = 15)
+    @ApiModelProperty(value = "鐘舵�侊紙1鍚敤锛�0涓嶅惎鐢級")
+    private String status;
+	/**鍒犻櫎鐘舵�侊紙0锛屾甯革紝1宸插垹闄わ級*/
+	@Excel(name = "鍒犻櫎鐘舵�侊紙0锛屾甯革紝1宸插垹闄わ級", width = 15)
+    @ApiModelProperty(value = "鍒犻櫎鐘舵�侊紙0锛屾甯革紝1宸插垹闄わ級")
+    @TableLogic
+    private String delFlag;
+	/**鍒涘缓浜�*/
+    @ApiModelProperty(value = "鍒涘缓浜�")
+    private String createBy;
+	/**鍒涘缓鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鍒涘缓鏃ユ湡")
+    private Date createTime;
+	/**鏇存柊浜�*/
+    @ApiModelProperty(value = "鏇存柊浜�")
+    private String updateBy;
+	/**鏇存柊鏃ユ湡*/
+	@JsonFormat(timezone = "GMT+8",pattern = "yyyy-MM-dd HH:mm:ss")
+    @DateTimeFormat(pattern="yyyy-MM-dd HH:mm:ss")
+    @ApiModelProperty(value = "鏇存柊鏃ユ湡")
+    private Date updateTime;
+	/**鎵�灞為儴闂�*/
+    @ApiModelProperty(value = "鎵�灞為儴闂�")
+    private String sysOrgCode;
+
+    /**閮ㄩ棬璐熻矗浜虹殑ids*/
+    @TableField(exist = false)
+    private String directorUserIds;
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepartUser.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepartUser.java
new file mode 100644
index 0000000..c7aa177
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/entity/WorkShopDepartUser.java
@@ -0,0 +1,47 @@
+package org.jeecg.modules.eam.entity;
+
+import java.io.Serializable;
+import java.io.UnsupportedEncodingException;
+import java.util.Date;
+import java.math.BigDecimal;
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.baomidou.mybatisplus.annotation.TableName;
+import com.baomidou.mybatisplus.annotation.TableLogic;
+import lombok.Data;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import org.springframework.format.annotation.DateTimeFormat;
+import org.jeecgframework.poi.excel.annotation.Excel;
+import org.jeecg.common.aspect.annotation.Dict;
+import io.swagger.annotations.ApiModel;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊涓庣敤鎴�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Data
+@TableName("mom_eam_work_shop_depart_user")
+@Accessors(chain = true)
+@EqualsAndHashCode(callSuper = false)
+@ApiModel(value="sys_work_shop_depart_user瀵硅薄", description="璁惧杞﹂棿绠$悊涓庣敤鎴�")
+public class WorkShopDepartUser implements Serializable {
+    private static final long serialVersionUID = 1L;
+
+	/**涓婚敭*/
+	@TableId(type = IdType.ASSIGN_ID)
+    @ApiModelProperty(value = "涓婚敭")
+    private String id;
+	/**璁惧杞﹂棿绠$悊id*/
+	@Excel(name = "璁惧杞﹂棿绠$悊id", width = 15)
+    @ApiModelProperty(value = "璁惧杞﹂棿绠$悊id")
+    private String workShopDepartId;
+	/**鐢ㄦ埛id*/
+	@Excel(name = "鐢ㄦ埛id", width = 15)
+    @ApiModelProperty(value = "鐢ㄦ埛id")
+    private String userId;
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartMapper.java
new file mode 100644
index 0000000..6a90fd3
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.eam.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface WorkShopDepartMapper extends BaseMapper<WorkShopDepart> {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartUserMapper.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartUserMapper.java
new file mode 100644
index 0000000..9cfcdbc
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/WorkShopDepartUserMapper.java
@@ -0,0 +1,17 @@
+package org.jeecg.modules.eam.mapper;
+
+import java.util.List;
+
+import org.apache.ibatis.annotations.Param;
+import org.jeecg.modules.eam.entity.WorkShopDepartUser;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊涓庣敤鎴�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface WorkShopDepartUserMapper extends BaseMapper<WorkShopDepartUser> {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartMapper.xml
new file mode 100644
index 0000000..b6e65be
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.eam.mapper.WorkShopDepartMapper">
+
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartUserMapper.xml b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartUserMapper.xml
new file mode 100644
index 0000000..200a841
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/mapper/xml/WorkShopDepartUserMapper.xml
@@ -0,0 +1,5 @@
+<?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="org.jeecg.modules.eam.mapper.WorkShopDepartUserMapper">
+
+</mapper>
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/EamWorkShopDepartTreeModel.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/EamWorkShopDepartTreeModel.java
new file mode 100644
index 0000000..ad09bc1
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/EamWorkShopDepartTreeModel.java
@@ -0,0 +1,122 @@
+package org.jeecg.modules.eam.model;
+
+import io.swagger.annotations.ApiModel;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @author: LiuS
+ * @create: 2023-03-23 14:16
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+@ApiModel(value = "璁惧杞﹂棿绠$悊鏍戠粨鏋勬暟鎹疄浣�", description = "璁惧杞﹂棿绠$悊")
+public class EamWorkShopDepartTreeModel implements Serializable {
+
+    private static final long serialVersionUID = -1309711609760828658L;
+
+    /**
+     * 瀵瑰簲workShopDepart涓殑id瀛楁,鍓嶇鏁版嵁鏍戜腑鐨刱ey
+     */
+    private String key;
+
+    /**
+     * 瀵瑰簲workShopDepart涓殑id瀛楁,鍓嶇鏁版嵁鏍戜腑鐨剉alue
+     */
+    private String value;
+
+    /**
+     * 瀵瑰簲depart_name瀛楁,鍓嶇鏁版嵁鏍戜腑鐨則itle
+     */
+    private String title;
+
+    private boolean isLeaf;
+
+    /**
+     * 绫诲瀷
+     */
+    private Integer type;
+    //浠ヤ笅鎵�鏈夊瓧娈靛潎涓巜orkShopDepart鐩稿悓
+
+    private String id;
+
+    private String parentId;
+
+    private String productionName;
+
+    private String productionNameAbbr;
+
+    private Integer productionOrder;
+
+    private String description;
+
+    private String orgType;
+
+    private String orgCode;
+
+    private String productionCode;
+
+    private String address;
+
+    private String memo;
+
+    private String status;
+
+    private String delFlag;
+
+    private String createBy;
+
+    private Date createTime;
+
+    private String updateBy;
+
+    private Date updateTime;
+
+    private String mdcFlag;
+
+    /**
+     * 浜х嚎璐熻矗浜篿ds
+     */
+    private String directorUserIds;
+
+    private List<EamWorkShopDepartTreeModel> children = new ArrayList<>();
+
+    public EamWorkShopDepartTreeModel() {
+
+    }
+
+    /**
+     * 灏唚orkShopDepart瀵硅薄杞崲鎴怑amWorkShopDepartTreeModel瀵硅薄
+     *
+     * @param workShopDepart
+     */
+    public EamWorkShopDepartTreeModel(WorkShopDepart workShopDepart) {
+        this.key = workShopDepart.getId();
+        this.value = workShopDepart.getId();
+        this.title = workShopDepart.getWorkShopName();
+        this.id = workShopDepart.getId();
+        this.parentId = workShopDepart.getParentId();
+        this.productionName = workShopDepart.getWorkShopName();
+        this.productionNameAbbr = workShopDepart.getWorkShopNameEn();
+        this.productionOrder = workShopDepart.getWorkShopOrder();
+        this.description = workShopDepart.getDescription();
+        this.orgType = workShopDepart.getOrgType();
+        this.orgCode = workShopDepart.getOrgCode();
+        this.productionCode = workShopDepart.getWorkShopCode();
+        this.address = workShopDepart.getAddress();
+        this.memo = workShopDepart.getMemo();
+        this.status = workShopDepart.getStatus();
+        this.delFlag = workShopDepart.getDelFlag();
+        this.createBy = workShopDepart.getCreateBy();
+        this.createTime = workShopDepart.getCreateTime();
+        this.updateBy = workShopDepart.getUpdateBy();
+        this.updateTime = workShopDepart.getUpdateTime();
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/WorkShopIdModel.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/WorkShopIdModel.java
new file mode 100644
index 0000000..ed8d869
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/model/WorkShopIdModel.java
@@ -0,0 +1,73 @@
+package org.jeecg.modules.eam.model;
+
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.experimental.Accessors;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import org.jeecg.modules.system.entity.MdcProduction;
+import org.jeecg.modules.system.model.MdcProductionTreeModel;
+
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 浜х嚎琛� 灏佽鏍戠粨鏋勭殑浜х嚎鐨勫悕绉扮殑瀹炰綋绫�
+ *
+ * @author: LiuS
+ * @create: 2023-03-23 15:15
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+@Accessors(chain = true)
+public class WorkShopIdModel implements Serializable {
+
+    private static final long serialVersionUID = 6403075134223338239L;
+
+    /**
+     * 涓婚敭ID
+     */
+    private String key;
+
+    /**
+     * 涓婚敭ID
+     */
+    private String value;
+
+    /**
+     * 浜х嚎鍚嶇О
+     */
+    private String title;
+
+    /**
+     * 鏄惁鍙��
+     */
+    private Boolean selectable = true;
+
+    List<WorkShopIdModel> children = new ArrayList<>();
+
+    /**
+     * 灏咵amWorkShopDepartTreeModel鐨勯儴鍒嗘暟鎹斁鍦ㄨ瀵硅薄褰撲腑
+     *
+     * @param treeModel
+     * @return
+     */
+    public WorkShopIdModel convert(EamWorkShopDepartTreeModel treeModel) {
+        this.key = treeModel.getId();
+        this.value = treeModel.getId();
+        this.title = treeModel.getProductionName();
+        return this;
+    }
+
+    /**
+     * 璇ユ柟娉曚负鐢ㄦ埛浜х嚎鐨勫疄鐜扮被鎵�浣跨敤
+     *
+     * @return
+     */
+    public WorkShopIdModel convertByUserProduction(WorkShopDepart workShopDepart) {
+        this.key = workShopDepart.getId();
+        this.value = workShopDepart.getId();
+        this.title = workShopDepart.getWorkShopName();
+        return this;
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartService.java
new file mode 100644
index 0000000..c7da5cf
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartService.java
@@ -0,0 +1,53 @@
+package org.jeecg.modules.eam.service;
+
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.jeecg.modules.eam.model.EamWorkShopDepartTreeModel;
+
+import java.util.List;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface IWorkShopDepartService extends IService<WorkShopDepart> {
+
+    /**
+     * 鏌ヨ鎵�鏈変骇绾夸俊鎭紝骞跺垎鑺傜偣杩涜鏄剧ず
+     */
+    List<EamWorkShopDepartTreeModel> queryTreeList();
+
+
+    /**
+     * 鏌ヨ鎵�鏈変骇绾夸俊鎭紝骞跺垎鑺傜偣杩涜鏄剧ず
+     */
+    List<EamWorkShopDepartTreeModel> queryTreeList(String ids);
+
+
+    /**
+     * 鏍规嵁鍏抽敭瀛楁悳绱㈢浉鍏崇殑浜х嚎鏁版嵁
+     */
+    List<EamWorkShopDepartTreeModel> searchByKeyWord(String keyWord);
+
+    /**
+     * 淇濆瓨浜х嚎鏁版嵁
+     */
+    void saveWorkShopDepartData(WorkShopDepart workShopDepart);
+
+    /**
+     * 鏇存柊浜х嚎鏁版嵁
+     */
+    boolean updateWorkShopDepartDataById(WorkShopDepart workShopDepart);
+
+    /**
+     * 鏍规嵁浜х嚎id鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾т骇绾�
+     */
+    boolean delete(String id);
+
+    /**
+     * 鏍规嵁浜х嚎id鎵归噺鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾т骇绾�
+     */
+    void deleteBatchWithChildren(List<String> ids);
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartUserService.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartUserService.java
new file mode 100644
index 0000000..c464f10
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/IWorkShopDepartUserService.java
@@ -0,0 +1,14 @@
+package org.jeecg.modules.eam.service;
+
+import org.jeecg.modules.eam.entity.WorkShopDepartUser;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊涓庣敤鎴�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+public interface IWorkShopDepartUserService extends IService<WorkShopDepartUser> {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartServiceImpl.java
new file mode 100644
index 0000000..6df5ebc
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartServiceImpl.java
@@ -0,0 +1,219 @@
+package org.jeecg.modules.eam.service.impl;
+
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.core.toolkit.IdWorker;
+import org.apache.commons.lang3.StringUtils;
+import org.jeecg.common.constant.CommonConstant;
+import org.jeecg.common.constant.FillRuleConstant;
+import org.jeecg.common.util.FillRuleUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import org.jeecg.modules.eam.entity.WorkShopDepartUser;
+import org.jeecg.modules.eam.mapper.WorkShopDepartMapper;
+import org.jeecg.modules.eam.mapper.WorkShopDepartUserMapper;
+import org.jeecg.modules.eam.model.EamWorkShopDepartTreeModel;
+import org.jeecg.modules.eam.service.IWorkShopDepartService;
+import org.jeecg.modules.eam.util.FindsWorkShopDepartsChildrenUtil;
+import org.jeecg.modules.system.entity.MdcUserProduction;
+import org.jeecg.modules.system.entity.SysUser;
+import org.jeecg.modules.system.mapper.SysUserMapper;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.cache.annotation.Cacheable;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.*;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class WorkShopDepartServiceImpl extends ServiceImpl<WorkShopDepartMapper, WorkShopDepart> implements IWorkShopDepartService {
+
+    @Autowired
+    private SysUserMapper sysUserMapper;
+
+    @Autowired
+    private WorkShopDepartUserMapper workShopDepartUserMapper;
+
+    /**
+     * queryTreeList 瀵瑰簲 queryTreeList 鏌ヨ鎵�鏈夌殑璁惧杞﹂棿绠$悊鏁版嵁,浠ユ爲缁撴瀯褰㈠紡鍝嶅簲缁欏墠绔�
+     */
+    @Override
+    @Cacheable(value = "eam:cache:workShopDepart:alldata")
+    public List<EamWorkShopDepartTreeModel> queryTreeList() {
+        LambdaQueryWrapper<WorkShopDepart> query = new LambdaQueryWrapper<WorkShopDepart>();
+        query.eq(WorkShopDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        query.orderByAsc(WorkShopDepart::getWorkShopOrder);
+        List<WorkShopDepart> list = this.list(query);
+        //璁剧疆鐢ㄦ埛id锛岃鍓嶅彴鏄剧ず
+        this.setUserIdsByProList(list);
+        //璋冪敤wrapTreeDataToTreeList鏂规硶鐢熸垚鏍戠姸鏁版嵁
+        return FindsWorkShopDepartsChildrenUtil.wrapTreeDataToTreeList(list);
+    }
+
+    /**
+     * queryTreeList 鏍规嵁璁惧杞﹂棿绠$悊id鏌ヨ,鍓嶇鍥炴樉璋冪敤
+     */
+    @Override
+    public List<EamWorkShopDepartTreeModel> queryTreeList(String ids) {
+        List<EamWorkShopDepartTreeModel> listResult = new ArrayList<>();
+        LambdaQueryWrapper<WorkShopDepart> query = new LambdaQueryWrapper<WorkShopDepart>();
+        query.eq(WorkShopDepart::getDelFlag, CommonConstant.DEL_FLAG_0.toString());
+        if (oConvertUtils.isNotEmpty(ids)) {
+            query.in(true, WorkShopDepart::getId, ids.split(","));
+        }
+        query.orderByAsc(WorkShopDepart::getWorkShopOrder);
+        List<WorkShopDepart> list = this.list(query);
+        for (WorkShopDepart production : list) {
+            if (production.getDescription().isEmpty()){
+                production.setDescription("");
+            }
+            listResult.add(new EamWorkShopDepartTreeModel(production));
+        }
+        return listResult;
+    }
+
+    /**
+     * 鏍规嵁鍏抽敭瀛楁悳绱㈢浉鍏崇殑閮ㄩ棬鏁版嵁
+     */
+    @Override
+    public List<EamWorkShopDepartTreeModel> searchByKeyWord(String keyWord) {
+        LambdaQueryWrapper<WorkShopDepart> query = new LambdaQueryWrapper<>();
+        List<EamWorkShopDepartTreeModel> newList = new ArrayList<>();
+        query.like(WorkShopDepart::getWorkShopName, keyWord);
+        EamWorkShopDepartTreeModel model = new EamWorkShopDepartTreeModel();
+        List<WorkShopDepart> productionList = this.list(query);
+        if (!productionList.isEmpty()) {
+            for (WorkShopDepart WorkShopDepart : productionList) {
+                model = new EamWorkShopDepartTreeModel(WorkShopDepart);
+                model.setChildren(null);
+                newList.add(model);
+            }
+            return newList;
+        }
+        return Collections.emptyList();
+    }
+
+    /**
+     * saveProductionData 瀵瑰簲 add 淇濆瓨鐢ㄦ埛鍦ㄩ〉闈㈡坊鍔犵殑鏂扮殑璁惧杞﹂棿绠$悊瀵硅薄鏁版嵁
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void saveWorkShopDepartData(WorkShopDepart WorkShopDepart) {
+        if (WorkShopDepart != null) {
+            if (WorkShopDepart.getParentId() == null) {
+                WorkShopDepart.setParentId("");
+            }
+            WorkShopDepart.setId(IdWorker.getIdStr(WorkShopDepart));
+            // 鍏堝垽鏂瀵硅薄鏈夋棤鐖剁骇ID,鏈夊垯鎰忓懗鐫�涓嶆槸鏈�楂樼骇,鍚﹀垯鎰忓懗鐫�鏄渶楂樼骇
+            // 鑾峰彇鐖剁骇ID
+            String parentId = WorkShopDepart.getParentId();
+            JSONObject formData = new JSONObject();
+            formData.put("parentId",parentId);
+            String[] codeArray = (String[]) FillRuleUtil.executeRule(FillRuleConstant.PRODUCTION,formData);
+            WorkShopDepart.setOrgCode(codeArray[0]);
+            String orgType = codeArray[1];
+            WorkShopDepart.setOrgType(String.valueOf(orgType));
+            WorkShopDepart.setDelFlag(CommonConstant.DEL_FLAG_0.toString());
+            this.save(WorkShopDepart);
+        }
+    }
+
+    /**
+     * updateProductionDataById 瀵瑰簲 edit 鏍规嵁璁惧杞﹂棿绠$悊涓婚敭鏉ユ洿鏂板搴旂殑璁惧杞﹂棿绠$悊鏁版嵁
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean updateWorkShopDepartDataById(WorkShopDepart WorkShopDepart) {
+        if (WorkShopDepart != null) {
+            this.updateById(WorkShopDepart);
+            return true;
+        }
+        return false;
+    }
+
+    /**
+     * 鏍规嵁璁惧杞﹂棿绠$悊id鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾ц澶囪溅闂寸鐞�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public boolean delete(String id) {
+        List<String> idList = new ArrayList<>();
+        idList.add(id);
+        this.checkChildrenExists(id, idList);
+        boolean result = this.removeByIds(idList);
+        //鏍规嵁璁惧杞﹂棿绠$悊id鍒犻櫎鐢ㄦ埛涓庤澶囪溅闂寸鐞嗗叧绯�
+        workShopDepartUserMapper.delete(new LambdaQueryWrapper<WorkShopDepartUser>().in(WorkShopDepartUser::getWorkShopDepartId, idList));
+        return result;
+    }
+
+    /**
+     * 鏍规嵁璁惧杞﹂棿绠$悊id鎵归噺鍒犻櫎骞跺垹闄ゅ叾鍙兘瀛樺湪鐨勫瓙绾ц澶囪溅闂寸鐞�
+     */
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public void deleteBatchWithChildren(List<String> ids) {
+        List<String> idList = new ArrayList<>();
+        for (String id : ids) {
+            idList.add(id);
+            this.checkChildrenExists(id, idList);
+        }
+        this.removeByIds(idList);
+        //鏍规嵁璁惧杞﹂棿绠$悊id鍒犻櫎鐢ㄦ埛涓庤澶囪溅闂寸鐞嗗叧绯�
+        workShopDepartUserMapper.delete(new LambdaQueryWrapper<WorkShopDepartUser>().in(WorkShopDepartUser::getWorkShopDepartId, idList));
+    }
+
+    /**
+     * 閫氳繃璁惧杞﹂棿绠$悊闆嗗悎涓鸿澶囪溅闂寸鐞嗚缃敤鎴穒d锛岀敤浜庡墠鍙板睍绀�
+     */
+    private void setUserIdsByProList(List<WorkShopDepart> productionList) {
+        //鏌ヨ璐熻矗閮ㄩ棬涓嶄负绌虹殑鎯呭喌
+        LambdaQueryWrapper<SysUser> query = new LambdaQueryWrapper<>();
+        query.isNotNull(SysUser::getDepartIds);
+        List<SysUser> users = sysUserMapper.selectList(query);
+        Map<String, Object> map = new HashMap(5);
+        //鍏堝惊鐜竴閬嶆壘鍒颁笉鍚岀殑璐熻矗璁惧杞﹂棿绠$悊id
+        for (SysUser user : users) {
+            String productionIds = user.getProductionIds();
+            if (StringUtils.isNotBlank(productionIds)) {
+                String[] productionIdArray = productionIds.split(",");
+                for (String productionId : productionIdArray) {
+                    if (map.containsKey(productionId)) {
+                        String userIds = map.get(productionId) + "," + user.getId();
+                        map.put(productionId, userIds);
+                    } else {
+                        map.put(productionId, user.getId());
+                    }
+                }
+            }
+        }
+        //寰幆璁惧杞﹂棿绠$悊闆嗗悎鎵惧埌璁惧杞﹂棿绠$悊id瀵瑰簲鐨勮礋璐g敤鎴�
+        for (WorkShopDepart WorkShopDepart : productionList) {
+            if (map.containsKey(WorkShopDepart.getId())) {
+                WorkShopDepart.setDirectorUserIds(map.get(WorkShopDepart.getId()).toString());
+            }
+        }
+    }
+
+    /**
+     * delete 鏂规硶璋冪敤 閫掑綊鏌ユ壘瀛愰泦id
+     */
+    private void checkChildrenExists(String id, List<String> idList) {
+        LambdaQueryWrapper<WorkShopDepart> query = new LambdaQueryWrapper<>();
+        query.eq(WorkShopDepart::getParentId, id);
+        List<WorkShopDepart> workShopDepartList = this.list(query);
+        if (workShopDepartList != null && !workShopDepartList.isEmpty()) {
+            for (WorkShopDepart workShopDepart : workShopDepartList) {
+                idList.add(workShopDepart.getId());
+                this.checkChildrenExists(workShopDepart.getId(), idList);
+            }
+        }
+    }
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartUserServiceImpl.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartUserServiceImpl.java
new file mode 100644
index 0000000..324b6e6
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/service/impl/WorkShopDepartUserServiceImpl.java
@@ -0,0 +1,19 @@
+package org.jeecg.modules.eam.service.impl;
+
+import org.jeecg.modules.eam.entity.WorkShopDepartUser;
+import org.jeecg.modules.eam.mapper.WorkShopDepartUserMapper;
+import org.jeecg.modules.eam.service.IWorkShopDepartUserService;
+import org.springframework.stereotype.Service;
+
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+
+/**
+ * @Description: 璁惧杞﹂棿绠$悊涓庣敤鎴�
+ * @Author: jeecg-boot
+ * @Date:   2025-06-30
+ * @Version: V1.0
+ */
+@Service
+public class WorkShopDepartUserServiceImpl extends ServiceImpl<WorkShopDepartUserMapper, WorkShopDepartUser> implements IWorkShopDepartUserService {
+
+}
diff --git a/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/util/FindsWorkShopDepartsChildrenUtil.java b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/util/FindsWorkShopDepartsChildrenUtil.java
new file mode 100644
index 0000000..576b4ff
--- /dev/null
+++ b/lxzn-module-eam/src/main/java/org/jeecg/modules/eam/util/FindsWorkShopDepartsChildrenUtil.java
@@ -0,0 +1,108 @@
+package org.jeecg.modules.eam.util;
+
+import cn.hutool.core.util.StrUtil;
+import org.jeecg.common.util.oConvertUtils;
+import org.jeecg.modules.eam.entity.WorkShopDepart;
+import org.jeecg.modules.eam.model.EamWorkShopDepartTreeModel;
+import org.jeecg.modules.eam.model.WorkShopIdModel;
+
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 瀵瑰簲浜х嚎鐨勮〃锛屽鐞嗗苟鏌ユ壘鏍戠粨鏋勬暟鎹�
+ *
+ * @author: LiuS
+ * @create: 2023-03-23 14:46
+ */
+public class FindsWorkShopDepartsChildrenUtil {
+
+    /**
+     * queryTreeList鐨勫瓙鏂规硶 ====1=====
+     * 璇ユ柟娉曟槸s灏哤orkShopDepart绫诲瀷鐨刲ist闆嗗悎杞崲鎴怑amWorkShopDepartTreeModel绫诲瀷鐨勯泦鍚�
+     */
+    public static List<EamWorkShopDepartTreeModel> wrapTreeDataToTreeList(List<WorkShopDepart> recordList) {
+        List<WorkShopIdModel> idList = new ArrayList<>();
+        List<EamWorkShopDepartTreeModel> records = new ArrayList<>();
+        for (int i = 0; i < recordList.size(); i++) {
+            WorkShopDepart WorkShopDepart = recordList.get(i);
+            if (StrUtil.isEmpty(WorkShopDepart.getDescription())){
+                WorkShopDepart.setDescription("");
+            }
+            records.add(new EamWorkShopDepartTreeModel(WorkShopDepart));
+        }
+        List<EamWorkShopDepartTreeModel> tree = findChildren(records, idList);
+        setEmptyChildrenAsNull(tree);
+        return tree;
+    }
+
+    /**
+     * queryTreeList鐨勫瓙鏂规硶 ====1=====
+     * 璇ユ柟娉曟槸鎵惧埌骞跺皝瑁呴《绾х埗绫荤殑鑺傜偣鍒癟reeList闆嗗悎
+     */
+    public static List<EamWorkShopDepartTreeModel> findChildren(List<EamWorkShopDepartTreeModel> recordList, List<WorkShopIdModel> workShopIdModelList) {
+        List<EamWorkShopDepartTreeModel> treeList = new ArrayList<>();
+        for (int i = 0; i < recordList.size(); i++) {
+            EamWorkShopDepartTreeModel branch = recordList.get(i);
+            if (oConvertUtils.isEmpty(branch.getParentId())) {
+                treeList.add(branch);
+                WorkShopIdModel WorkShopIdModel = new WorkShopIdModel().convert(branch);
+                workShopIdModelList.add(WorkShopIdModel);
+            }
+        }
+        getGrandChildren(treeList, recordList, workShopIdModelList);
+        return treeList;
+    }
+
+    /**
+     * queryTreeList鐨勫瓙鏂规硶====3====
+     *璇ユ柟娉曟槸鎵惧埌椤剁骇鐖剁被涓嬬殑鎵�鏈夊瓙鑺傜偣闆嗗悎骞跺皝瑁呭埌TreeList闆嗗悎
+     */
+    private static void getGrandChildren(List<EamWorkShopDepartTreeModel> treeList, List<EamWorkShopDepartTreeModel> recordList, List<WorkShopIdModel> idList) {
+        for (int i = 0; i < treeList.size(); i++) {
+            EamWorkShopDepartTreeModel model = treeList.get(i);
+            WorkShopIdModel idModel = idList.get(i);
+            for (int i1 = 0; i1 < recordList.size(); i1++) {
+                EamWorkShopDepartTreeModel m = recordList.get(i1);
+                if (m.getParentId() != null && m.getParentId().equals(model.getId())) {
+                    model.getChildren().add(m);
+                    WorkShopIdModel pim = new WorkShopIdModel().convert(m);
+                    idModel.setSelectable(false);
+                    idModel.getChildren().add(pim);
+                }
+            }
+            getGrandChildren(treeList.get(i).getChildren(), recordList, idList.get(i).getChildren());
+        }
+    }
+
+    /**
+     * queryTreeList鐨勫瓙鏂规硶 ====4====
+     * 璇ユ柟娉曟槸灏嗗瓙鑺傜偣涓虹┖鐨凩ist闆嗗悎璁剧疆涓篘ull鍊�
+     */
+    private static void setEmptyChildrenAsNull(List<EamWorkShopDepartTreeModel> treeList) {
+        for (int i = 0; i < treeList.size(); i++) {
+            EamWorkShopDepartTreeModel model = treeList.get(i);
+            if (model.getChildren().size() == 0) {
+                model.setChildren(null);
+                model.setLeaf(true);
+            } else {
+                setEmptyChildrenAsNull(model.getChildren());
+                model.setLeaf(false);
+            }
+        }
+    }
+
+    /**
+     * 鑾峰彇 DepartIdModel
+     */
+    public static List<WorkShopIdModel> wrapTreeDataToProductionIdTreeList(List<WorkShopDepart> recordList) {
+        List<WorkShopIdModel> idList = new ArrayList<>();
+        List<EamWorkShopDepartTreeModel> records = new ArrayList<>();
+        for (int i = 0; i < recordList.size(); i++) {
+            WorkShopDepart WorkShopDepart = recordList.get(i);
+            records.add(new EamWorkShopDepartTreeModel(WorkShopDepart));
+        }
+        findChildren(records, idList);
+        return idList;
+    }
+}

--
Gitblit v1.9.3