瀏覽代碼

栋舍阶段

Newspaper 1 年之前
父節點
當前提交
f36c6199e0
共有 55 個文件被更改,包括 2132 次插入160 次删除
  1. 3 3
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/enums/BizOrgCategoryEnum.java
  2. 2 1
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/service/impl/BizOrgServiceImpl.java
  3. 0 0
      snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/mapper/mapping/InventoryService.xml
  4. 0 0
      snowy-plugin/snowy-plugin-client/src/main/java/vip/xiaonuo/client/modular/user/mapper/mapping/InventoryService.xml
  5. 0 0
      snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/mapper/mapping/InventoryService.xml
  6. 0 0
      snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/dict/mapper/mapping/InventoryService.xml
  7. 1 0
      snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/dict/service/impl/DevDictServiceImpl.java
  8. 0 0
      snowy-plugin/snowy-plugin-gen/src/main/java/vip/xiaonuo/gen/modular/basic/mapper/mapping/InventoryService.xml
  9. 0 0
      snowy-plugin/snowy-plugin-mobile/src/main/java/vip/xiaonuo/mobile/modular/resource/mapper/mapping/InventoryService.xml
  10. 3 3
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/enums/SysOrgCategoryEnum.java
  11. 1 1
      snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java
  12. 67 0
      snowy-web-app/src/main/java/vip/xiaonuo/core/config/BaseConfigure.java
  13. 29 0
      snowy-web-app/src/main/java/vip/xiaonuo/core/config/GlobalConfigure.java
  14. 7 1
      snowy-web-app/src/main/java/vip/xiaonuo/core/enums/BaseDataTypeEnum.java
  15. 127 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/controller/BaseConfigController.java
  16. 35 20
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/entity/PigpenStage.java
  17. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/enums/BaseConfigEnum.java
  18. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/mapper/BaseConfigMapper.java
  19. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/mapper/mapping/BaseConfigMapper.xml
  20. 21 20
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageAddParam.java
  21. 60 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigEditParam.java
  22. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigIdParam.java
  23. 49 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigPageParam.java
  24. 81 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/service/BaseConfigService.java
  25. 101 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/service/impl/BaseConfigServiceImpl.java
  26. 140 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/controller/DepartmentController.java
  27. 103 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/entity/Department.java
  28. 5 5
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/enums/PigpenStageEnum.java
  29. 5 6
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/mapper/PigpenStageMapper.java
  30. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/mapper/mapping/DepartmentMapper.xml
  31. 72 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/param/DepartmentAddParam.java
  32. 76 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/param/DepartmentEditParam.java
  33. 4 4
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageIdParam.java
  34. 4 4
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStagePageParam.java
  35. 83 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/service/DepartmentService.java
  36. 123 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/department/service/impl/DepartmentServiceImpl.java
  37. 139 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/controller/InventoryUseController.java
  38. 120 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/entity/InventoryUse.java
  39. 34 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/enums/InventoryUseEnum.java
  40. 25 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/mapper/InventoryUseMapper.java
  41. 5 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/mapper/mapping/InventoryUseMapper.xml
  42. 90 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseAddParam.java
  43. 103 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseEditParam.java
  44. 35 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseIdParam.java
  45. 53 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUsePageParam.java
  46. 17 23
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageEditParam.java
  47. 27 30
      snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/service/PigpenStageService.java
  48. 114 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/service/impl/InventoryUseServiceImpl.java
  49. 2 2
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/controller/BasePigpenController.java
  50. 28 15
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/entity/BasePigpen.java
  51. 0 0
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/mapper/mapping/InventoryService.xml
  52. 4 2
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenAddParam.java
  53. 3 13
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenEditParam.java
  54. 0 2
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenPageParam.java
  55. 27 5
      snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/service/impl/BasePigpenServiceImpl.java

+ 3 - 3
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/enums/BizOrgCategoryEnum.java

@@ -27,8 +27,8 @@ public enum BizOrgCategoryEnum {
     /** 公司 */
     COMPANY("COMPANY"),
 
-    /** 部门 */
-    DEPT("DEPT");
+    /** 牧场 */
+    PASTURE("PASTURE");
 
     private final String value;
 
@@ -37,7 +37,7 @@ public enum BizOrgCategoryEnum {
     }
 
     public static void validate(String value) {
-        boolean flag = COMPANY.getValue().equals(value) || DEPT.getValue().equals(value);
+        boolean flag = COMPANY.getValue().equals(value) || PASTURE.getValue().equals(value);
         if(!flag) {
             throw new CommonException("不支持的机构分类:{}", value);
         }

+ 2 - 1
snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/org/service/impl/BizOrgServiceImpl.java

@@ -156,6 +156,7 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void edit(BizOrgEditParam bizOrgEditParam) {
+        System.out.println(bizOrgEditParam.getCategory());
         BizOrgCategoryEnum.validate(bizOrgEditParam.getCategory());
         BizOrg bizOrg = this.queryEntity(bizOrgEditParam.getId());
         // 校验数据范围
@@ -302,7 +303,7 @@ public class BizOrgServiceImpl extends ServiceImpl<BizOrgMapper, BizOrg> impleme
         bizOrg.setName(orgName);
         bizOrg.setCode(RandomUtil.randomString(10));
         bizOrg.setParentId(parentId);
-        bizOrg.setCategory("0".equals(parentId)?BizOrgCategoryEnum.COMPANY.getValue():BizOrgCategoryEnum.DEPT.getValue());
+        bizOrg.setCategory("0".equals(parentId)?BizOrgCategoryEnum.COMPANY.getValue():BizOrgCategoryEnum.PASTURE.getValue());
         bizOrg.setSortCode(99);
         this.save(bizOrg);
         // 发布增加事件

snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/mapper/mapping/BizUserMapper.xml → snowy-plugin/snowy-plugin-biz/src/main/java/vip/xiaonuo/biz/modular/user/mapper/mapping/InventoryService.xml


snowy-plugin/snowy-plugin-client/src/main/java/vip/xiaonuo/client/modular/user/mapper/mapping/ClientUserMapper.xml → snowy-plugin/snowy-plugin-client/src/main/java/vip/xiaonuo/client/modular/user/mapper/mapping/InventoryService.xml


snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/mapper/mapping/DevConfigMapper.xml → snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/config/mapper/mapping/InventoryService.xml


snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/dict/mapper/mapping/DevDictMapper.xml → snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/dict/mapper/mapping/InventoryService.xml


+ 1 - 0
snowy-plugin/snowy-plugin-dev/src/main/java/vip/xiaonuo/dev/modular/dict/service/impl/DevDictServiceImpl.java

@@ -66,6 +66,7 @@ public class DevDictServiceImpl extends ServiceImpl<DevDictMapper, DevDict> impl
             queryWrapper.lambda().and(q -> q.eq(DevDict::getParentId, devDictPageParam.getParentId())
                     .or().eq(DevDict::getId, devDictPageParam.getParentId()));
         }
+
         if (ObjectUtil.isNotEmpty(devDictPageParam.getCategory())) {
             queryWrapper.lambda().eq(DevDict::getCategory, devDictPageParam.getCategory());
         }

snowy-plugin/snowy-plugin-gen/src/main/java/vip/xiaonuo/gen/modular/basic/mapper/mapping/GenBasicMapper.xml → snowy-plugin/snowy-plugin-gen/src/main/java/vip/xiaonuo/gen/modular/basic/mapper/mapping/InventoryService.xml


snowy-plugin/snowy-plugin-mobile/src/main/java/vip/xiaonuo/mobile/modular/resource/mapper/mapping/MobileButtonMapper.xml → snowy-plugin/snowy-plugin-mobile/src/main/java/vip/xiaonuo/mobile/modular/resource/mapper/mapping/InventoryService.xml


+ 3 - 3
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/enums/SysOrgCategoryEnum.java

@@ -27,8 +27,8 @@ public enum SysOrgCategoryEnum {
     /** 公司 */
     COMPANY("COMPANY"),
 
-    /** 部门 */
-    DEPT("DEPT");
+    /** 牧场 */
+    PASTURE("PASTURE");
 
     private final String value;
 
@@ -37,7 +37,7 @@ public enum SysOrgCategoryEnum {
     }
 
     public static void validate(String value) {
-        boolean flag = COMPANY.getValue().equals(value) || DEPT.getValue().equals(value);
+        boolean flag = COMPANY.getValue().equals(value) || PASTURE.getValue().equals(value);
         if(!flag) {
             throw new CommonException("不支持的组织分类:{}", value);
         }

+ 1 - 1
snowy-plugin/snowy-plugin-sys/src/main/java/vip/xiaonuo/sys/modular/org/service/impl/SysOrgServiceImpl.java

@@ -264,7 +264,7 @@ public class SysOrgServiceImpl extends ServiceImpl<SysOrgMapper, SysOrg> impleme
         sysOrg.setName(orgName);
         sysOrg.setCode(RandomUtil.randomString(10));
         sysOrg.setParentId(parentId);
-        sysOrg.setCategory("0".equals(parentId)?SysOrgCategoryEnum.COMPANY.getValue():SysOrgCategoryEnum.DEPT.getValue());
+        sysOrg.setCategory("0".equals(parentId)?SysOrgCategoryEnum.COMPANY.getValue():SysOrgCategoryEnum.PASTURE.getValue());
         sysOrg.setSortCode(99);
         this.save(sysOrg);
         // 发布增加事件

+ 67 - 0
snowy-web-app/src/main/java/vip/xiaonuo/core/config/BaseConfigure.java

@@ -0,0 +1,67 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.core.config;
+
+import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.bind.annotation.RequestMethod;
+import springfox.documentation.builders.ApiInfoBuilder;
+import springfox.documentation.builders.PathSelectors;
+import springfox.documentation.builders.RequestHandlerSelectors;
+import springfox.documentation.service.Contact;
+import springfox.documentation.spi.DocumentationType;
+import springfox.documentation.spring.web.plugins.Docket;
+import vip.xiaonuo.common.pojo.CommonResult;
+
+import javax.annotation.Resource;
+
+/**
+ * 业务相关配置
+ *
+ * @author xuyuxiang
+ * @date 2022/7/7 16:18
+ **/
+@Configuration
+public class BaseConfigure {
+
+    @Resource
+    private OpenApiExtensionResolver openApiExtensionResolver;
+
+    /**
+     * API文档分组配置
+     *
+     * @author xuyuxiang
+     * @date 2022/7/7 16:18
+     **/
+    @Bean(value = "baseDocApi")
+    public Docket bizDocApi() {
+        return new Docket(DocumentationType.SWAGGER_2)
+                .apiInfo(new ApiInfoBuilder()
+                        .title("基本功能")
+                        .description("基本功能")
+                        .termsOfServiceUrl("https://www.xiaonuo.vip")
+                        .contact(new Contact("SNOWY_TEAM","https://www.xiaonuo.vip", "xuyuxiang29@foxmail.com"))
+                        .version("2.0.0")
+                        .build())
+                .globalResponseMessage(RequestMethod.GET, CommonResult.responseList())
+                .globalResponseMessage(RequestMethod.POST, CommonResult.responseList())
+                .groupName("基本功能")
+                .select()
+                .apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class))
+                .apis(RequestHandlerSelectors.basePackage("vip.xiaonuo.modular"))
+                .paths(PathSelectors.any())
+                .build().extensions(openApiExtensionResolver.buildExtensions("基本功能"));
+    }
+}

+ 29 - 0
snowy-web-app/src/main/java/vip/xiaonuo/core/config/GlobalConfigure.java

@@ -57,6 +57,7 @@ import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
 import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
 import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
 import vip.xiaonuo.auth.core.util.StpClientUtil;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
 import vip.xiaonuo.common.annotation.CommonNoRepeat;
 import vip.xiaonuo.common.annotation.CommonWrapper;
 import vip.xiaonuo.common.cache.CommonCacheOperator;
@@ -543,6 +544,9 @@ public class GlobalConfigure implements WebMvcConfigurer {
     @Component
     public static class CustomMetaObjectHandler implements MetaObjectHandler {
 
+        /** 组织ID */
+        private static final String ORG_ID = "orgId";
+
         /** 删除标志 */
         private static final String DELETE_FLAG = "deleteFlag";
 
@@ -562,6 +566,13 @@ public class GlobalConfigure implements WebMvcConfigurer {
         public void insertFill(MetaObject metaObject) {
             try {
                 //为空则设置deleteFlag
+                Object orgId = metaObject.getValue(ORG_ID);
+                if (ObjectUtil.isNull(orgId)) {
+                    setFieldValByName(ORG_ID, this.getUserOrgId(), metaObject);
+                }
+            } catch (ReflectionException ignored) { }
+            try {
+                //为空则设置deleteFlag
                 Object deleteFlag = metaObject.getValue(DELETE_FLAG);
                 if (ObjectUtil.isNull(deleteFlag)) {
                     setFieldValByName(DELETE_FLAG, EnumUtil.toString(CommonDeleteFlagEnum.NOT_DELETE), metaObject);
@@ -611,6 +622,24 @@ public class GlobalConfigure implements WebMvcConfigurer {
             }
 
         }
+
+        /**
+         * 获取用户组织id
+         */
+        private String getUserOrgId() {
+            try {
+                String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+                if (ObjectUtil.isNotEmpty(orgId)) {
+
+                    return orgId;
+                } else {
+                    return "-1";
+                }
+            } catch (Exception e) {
+                return "-1";
+            }
+
+        }
     }
 
     /**

+ 7 - 1
snowy-web-app/src/main/java/vip/xiaonuo/core/enums/BaseDataTypeEnum.java

@@ -9,7 +9,13 @@ public enum BaseDataTypeEnum {
      */
     PIGPEN("PIGPEN"),
 
-    STAGE("STAGE");
+    STAGE("STAGE"),
+
+    INVENTORY("INVENTORY"),
+
+    WAREHOUSE("WAREHOUSE"),
+
+    INVENTORY_IN("INVENTORY_IN");
 
     private final String value;
 

+ 127 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/controller/BaseConfigController.java

@@ -0,0 +1,127 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import cn.hutool.core.lang.tree.Tree;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RestController;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.baseConfig.entity.BaseConfig;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigAddParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigEditParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigIdParam;
+import vip.xiaonuo.modular.baseConfig.service.BaseConfigService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 基础设置控制器
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ */
+@Api(tags = "基础设置控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class BaseConfigController {
+
+    @Resource
+    private BaseConfigService baseConfigService;
+
+    /**
+     * 获取基础设置分页
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取基础设置树")
+    @GetMapping("/biz/baseConfig/tree")
+    public CommonResult<List<Tree<String>>> tree() {
+        return CommonResult.data(baseConfigService.tree());
+    }
+
+    /**
+     * 添加基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加基础设置")
+    @CommonLog("添加基础设置")
+    @PostMapping("/biz/baseConfig/add")
+    public CommonResult<String> add(@RequestBody @Valid BaseConfigAddParam baseConfigAddParam) {
+        baseConfigService.add(baseConfigAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑基础设置")
+    @CommonLog("编辑基础设置")
+    @PostMapping("/biz/baseConfig/edit")
+    public CommonResult<String> edit(@RequestBody @Valid BaseConfigEditParam baseConfigEditParam) {
+        baseConfigService.edit(baseConfigEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除基础设置")
+    @CommonLog("删除基础设置")
+    @PostMapping("/biz/baseConfig/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<BaseConfigIdParam> baseConfigIdParamList) {
+        baseConfigService.delete(baseConfigIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取基础设置详情
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取基础设置详情")
+    @SaCheckPermission("/biz/baseConfig/detail")
+    @GetMapping("/biz/baseConfig/detail")
+    public CommonResult<BaseConfig> detail(@Valid BaseConfigIdParam baseConfigIdParam) {
+        return CommonResult.data(baseConfigService.detail(baseConfigIdParam));
+    }
+}

+ 35 - 20
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/entity/PigpenStage.java

@@ -10,64 +10,79 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.entity;
+package vip.xiaonuo.modular.baseConfig.entity;
 
 import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
+
 import java.util.Date;
 
 /**
- * 栋舍阶段实体
+ * 基础设置实体
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/08 10:22
  **/
 @Getter
 @Setter
-@TableName("PIGPEN_STAGE")
-public class PigpenStage {
+@TableName("base_config")
+public class BaseConfig {
 
     /** ID */
     @TableId
     @ApiModelProperty(value = "ID", position = 1)
     private String id;
 
-    /** 阶段 */
-    @ApiModelProperty(value = "阶段名称", position = 2)
-    private String stageName;
+    /** 名称 */
+    @ApiModelProperty(value = "名称", position = 2)
+    private String configName;
 
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 3)
-    private String orgId;
+    /** 父ID */
+    @ApiModelProperty(value = "父ID", position = 3)
+    private String parentId;
+
+    /** 状态 0:禁用 1:启用 */
+    @ApiModelProperty(value = "状态 0:禁用 1:启用", position = 4)
+    private Integer status;
 
     /** 排序码 */
-    @ApiModelProperty(value = "排序码", position = 4)
+    @ApiModelProperty(value = "排序码", position = 5)
     private Integer sortCode;
 
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 6)
+    private String remarks;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 7)
+    @TableField(fill = FieldFill.INSERT)
+    private String orgId;
+
     /** 删除标志 */
-    @ApiModelProperty(value = "删除标志", position = 5)
+    @ApiModelProperty(value = "删除标志", position = 8)
     @TableLogic
     @TableField(fill = FieldFill.INSERT)
     private String deleteFlag;
 
     /** 创建时间 */
-    @ApiModelProperty(value = "创建时间", position = 6)
+    @ApiModelProperty(value = "创建时间", position = 9)
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;
 
     /** 创建用户 */
-    @ApiModelProperty(value = "创建用户", position = 7)
-    private String createBy;
+    @ApiModelProperty(value = "创建用户", position = 10)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
 
     /** 修改时间 */
-    @ApiModelProperty(value = "修改时间", position = 8)
+    @ApiModelProperty(value = "修改时间", position = 11)
     @TableField(fill = FieldFill.UPDATE)
     private Date updateTime;
 
     /** 修改用户 */
-    @ApiModelProperty(value = "修改用户", position = 9)
-    private String updateBy;
+    @ApiModelProperty(value = "修改用户", position = 12)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
 }

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/enums/BaseConfigEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.enums;
+
+import lombok.Getter;
+
+/**
+ * 基础设置枚举
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Getter
+public enum BaseConfigEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    BaseConfigEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/mapper/BaseConfigMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.baseConfig.entity.BaseConfig;
+
+/**
+ * 基础设置Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+public interface BaseConfigMapper extends BaseMapper<BaseConfig> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/mapper/mapping/BaseConfigMapper.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="vip.xiaonuo.modular.baseConfig.mapper.BaseConfigMapper">
+
+</mapper>

+ 21 - 20
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageAddParam.java

@@ -10,7 +10,7 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.param;
+package vip.xiaonuo.modular.baseConfig.param;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -18,37 +18,38 @@ import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
- * 栋舍阶段添加参数
+ * 基础设置添加参数
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/08 10:22
  **/
 @Getter
 @Setter
-public class PigpenStageAddParam {
+public class BaseConfigAddParam {
 
-    /** 阶段 */
-    @ApiModelProperty(value = "阶段名称", position = 2)
-    private String stageName;
+    /** 名称 */
+    @ApiModelProperty(value = "名称", required = true, position = 2)
+    @NotBlank(message = "configName不能为空")
+    private String configName;
 
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 3)
-    private String orgId;
+    /** 父ID */
+    @ApiModelProperty(value = "父ID", required = true, position = 3)
+    @NotBlank(message = "parentId不能为空")
+    private String parentId;
+
+    /** 状态 0:禁用 1:启用 */
+    @ApiModelProperty(value = "状态 0:禁用 1:启用", required = true, position = 4)
+    @NotNull(message = "status不能为空")
+    private Integer status;
 
     /** 排序码 */
-    @ApiModelProperty(value = "排序码", position = 4)
+    @ApiModelProperty(value = "排序码", position = 5)
     private Integer sortCode;
 
-    /** 创建用户 */
-    @ApiModelProperty(value = "创建用户", position = 7)
-    private String createBy;
-
-    /** 修改用户 */
-    @ApiModelProperty(value = "修改用户", position = 9)
-    private String updateBy;
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 6)
+    private String remarks;
 
 }

+ 60 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigEditParam.java

@@ -0,0 +1,60 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+
+/**
+ * 基础设置编辑参数
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Getter
+@Setter
+public class BaseConfigEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 名称 */
+    @ApiModelProperty(value = "名称", required = true, position = 2)
+    @NotBlank(message = "configName不能为空")
+    private String configName;
+
+    /** 父ID */
+    @ApiModelProperty(value = "父ID", required = true, position = 3)
+    @NotBlank(message = "parentId不能为空")
+    private String parentId;
+
+    /** 状态 0:禁用 1:启用 */
+    @ApiModelProperty(value = "状态 0:禁用 1:启用", required = true, position = 4)
+    @NotNull(message = "status不能为空")
+    private Integer status;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", position = 5)
+    private Integer sortCode;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 6)
+    private String remarks;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 基础设置Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Getter
+@Setter
+public class BaseConfigIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 49 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/param/BaseConfigPageParam.java

@@ -0,0 +1,49 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 基础设置查询参数
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Getter
+@Setter
+public class BaseConfigPageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+}

+ 81 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/service/BaseConfigService.java

@@ -0,0 +1,81 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.service;
+
+import cn.hutool.core.lang.tree.Tree;
+import com.baomidou.mybatisplus.extension.service.IService;
+import vip.xiaonuo.modular.baseConfig.entity.BaseConfig;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigAddParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigEditParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigIdParam;
+
+import java.util.List;
+
+/**
+ * 基础设置Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+public interface BaseConfigService extends IService<BaseConfig> {
+
+    /**
+     * 获取基础设置树
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    List<Tree<String>> tree();
+
+    /**
+     * 添加基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    void add(BaseConfigAddParam baseConfigAddParam);
+
+    /**
+     * 编辑基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    void edit(BaseConfigEditParam baseConfigEditParam);
+
+    /**
+     * 删除基础设置
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    void delete(List<BaseConfigIdParam> baseConfigIdParamList);
+
+    /**
+     * 获取基础设置详情
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     */
+    BaseConfig detail(BaseConfigIdParam baseConfigIdParam);
+
+    /**
+     * 获取基础设置详情
+     *
+     * @author newspaper
+     * @date  2023/12/08 10:22
+     **/
+    BaseConfig queryEntity(String id);
+
+
+}

+ 101 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/baseConfig/service/impl/BaseConfigServiceImpl.java

@@ -0,0 +1,101 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.baseConfig.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.lang.tree.Tree;
+import cn.hutool.core.lang.tree.TreeNode;
+import cn.hutool.core.lang.tree.TreeUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.json.JSONUtil;
+import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.modular.baseConfig.entity.BaseConfig;
+import vip.xiaonuo.modular.baseConfig.mapper.BaseConfigMapper;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigAddParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigEditParam;
+import vip.xiaonuo.modular.baseConfig.param.BaseConfigIdParam;
+import vip.xiaonuo.modular.baseConfig.service.BaseConfigService;
+
+import java.util.ArrayList;
+import java.util.List;
+import java.util.stream.Collectors;
+
+/**
+ * 基础设置Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/08 10:22
+ **/
+@Service
+public class BaseConfigServiceImpl extends ServiceImpl<BaseConfigMapper, BaseConfig> implements BaseConfigService {
+
+    @Override
+    public List<Tree<String>> tree() {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        List<BaseConfig> allConfigs = new ArrayList<>();
+        List<BaseConfig> baseConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getParentId, 0));
+        List<BaseConfig> childConfigs = this.list(new LambdaQueryWrapper<BaseConfig>().eq(BaseConfig::getOrgId, orgId));
+
+        allConfigs.addAll(baseConfigs);
+        allConfigs.addAll(childConfigs);
+        List<TreeNode<String>> treeNodeList = allConfigs.stream().map(baseConfig ->
+                new TreeNode<>(baseConfig.getId(), baseConfig.getParentId(),
+                        baseConfig.getConfigName(), baseConfig.getSortCode()).setExtra(JSONUtil.parseObj(baseConfig)))
+                .collect(Collectors.toList());
+        return TreeUtil.build(treeNodeList, "0");
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(BaseConfigAddParam baseConfigAddParam) {
+        BaseConfig baseConfig = BeanUtil.toBean(baseConfigAddParam, BaseConfig.class);
+        this.save(baseConfig);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(BaseConfigEditParam baseConfigEditParam) {
+        BaseConfig baseConfig = this.queryEntity(baseConfigEditParam.getId());
+        BeanUtil.copyProperties(baseConfigEditParam, baseConfig);
+        this.updateById(baseConfig);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<BaseConfigIdParam> baseConfigIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(baseConfigIdParamList, BaseConfigIdParam::getId));
+    }
+
+    @Override
+    public BaseConfig detail(BaseConfigIdParam baseConfigIdParam) {
+        return this.queryEntity(baseConfigIdParam.getId());
+    }
+
+    @Override
+    public BaseConfig queryEntity(String id) {
+        BaseConfig baseConfig = this.getById(id);
+        if(ObjectUtil.isEmpty(baseConfig)) {
+            throw new CommonException("基础设置不存在,id值为:{}", id);
+        }
+        return baseConfig;
+    }
+
+
+}

+ 140 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/controller/DepartmentController.java

@@ -0,0 +1,140 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.controller;
+
+import cn.dev33.satoken.annotation.SaCheckPermission;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.department.entity.Department;
+import vip.xiaonuo.modular.department.param.DepartmentAddParam;
+import vip.xiaonuo.modular.department.param.DepartmentEditParam;
+import vip.xiaonuo.modular.department.param.DepartmentIdParam;
+import vip.xiaonuo.modular.department.param.DepartmentPageParam;
+import vip.xiaonuo.modular.department.service.DepartmentService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.List;
+
+/**
+ * 部门控制器
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ */
+@Api(tags = "部门控制器")
+@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@RestController
+@Validated
+public class DepartmentController {
+
+    @Resource
+    private DepartmentService departmentService;
+
+    /**
+     * 获取部门分页
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取部门分页")
+    @GetMapping("/biz/department/page")
+    public CommonResult<Page<Department>> page(DepartmentPageParam departmentPageParam) {
+        return CommonResult.data(departmentService.page(departmentPageParam));
+    }
+
+    /**
+     * 添加部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加部门")
+    @CommonLog("添加部门")
+    @PostMapping("/biz/department/add")
+    public CommonResult<String> add(@RequestPart @Valid DepartmentAddParam departmentAddParam,
+                                    @RequestPart(required = false) MultipartFile departmentImgUrl) {
+        departmentService.add(departmentAddParam,departmentImgUrl);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑部门")
+    @CommonLog("编辑部门")
+    @PostMapping("/biz/department/edit")
+    public CommonResult<String> edit(@RequestPart @Valid DepartmentEditParam departmentEditParam,
+                                     @RequestPart(required = false) MultipartFile departmentImgUrl) {
+        departmentService.edit(departmentEditParam,departmentImgUrl);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除部门")
+    @CommonLog("删除部门")
+    @PostMapping("/biz/department/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<DepartmentIdParam> departmentIdParamList) {
+        departmentService.delete(departmentIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取部门详情
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取部门详情")
+    @GetMapping("/biz/department/detail")
+    public CommonResult<Department> detail(@Valid DepartmentIdParam departmentIdParam) {
+        return CommonResult.data(departmentService.detail(departmentIdParam));
+    }
+
+    /**
+     * 获取所有部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("获取所有部门")
+    @GetMapping("/biz/department/departmentSelector")
+    public CommonResult<List<Department>> departmentSelector() {
+        return CommonResult.data(departmentService.departmentSelector());
+    }
+}

+ 103 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/entity/Department.java

@@ -0,0 +1,103 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 部门实体
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ **/
+@Getter
+@Setter
+@TableName("department")
+public class Department {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** 部门名称 */
+    @ApiModelProperty(value = "部门名称", position = 2)
+    private String departmentName;
+
+    /** 部门照片 */
+    @ApiModelProperty(value = "部门照片", position = 3)
+    private String departmentImgUrl;
+
+    /** 上级部门ID */
+    @ApiModelProperty(value = "上级部门ID", position = 4)
+    private String parentId;
+
+    /** 所在区域 */
+    @ApiModelProperty(value = "所在区域", position = 5)
+    private String departmentRegion;
+
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", position = 6)
+    private String detailLocation;
+
+    /** 部门电话 */
+    @ApiModelProperty(value = "部门电话", position = 7)
+    private String departmentPhone;
+
+    /** 部门负责人ID */
+    @ApiModelProperty(value = "部门负责人ID", position = 8)
+    private String departmentManager;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述", position = 9)
+    private String remarks;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", position = 10)
+    private Integer sortCode;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 11)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 12)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 13)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 14)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 15)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 16)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 5 - 5
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/enums/PigpenStageEnum.java

@@ -10,25 +10,25 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.enums;
+package vip.xiaonuo.modular.department.enums;
 
 import lombok.Getter;
 
 /**
- * 栋舍阶段枚举
+ * 部门枚举
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/13 08:44
  **/
 @Getter
-public enum PigpenStageEnum {
+public enum DepartmentEnum {
 
     /** 测试 */
     TEST("TEST");
 
     private final String value;
 
-    PigpenStageEnum(String value) {
+    DepartmentEnum(String value) {
         this.value = value;
     }
 }

+ 5 - 6
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/mapper/PigpenStageMapper.java

@@ -10,17 +10,16 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.mapper;
+package vip.xiaonuo.modular.department.mapper;
 
 import com.baomidou.mybatisplus.core.mapper.BaseMapper;
-import vip.xiaonuo.modular.stage.entity.PigpenStage;
-
+import vip.xiaonuo.modular.department.entity.Department;
 
 /**
- * 栋舍阶段Mapper接口
+ * 部门Mapper接口
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/13 08:44
  **/
-public interface PigpenStageMapper extends BaseMapper<PigpenStage> {
+public interface DepartmentMapper extends BaseMapper<Department> {
 }

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/mapper/mapping/DepartmentMapper.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="vip.xiaonuo.modular.department.mapper.DepartmentMapper">
+
+</mapper>

+ 72 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/param/DepartmentAddParam.java

@@ -0,0 +1,72 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 部门添加参数
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ **/
+@Getter
+@Setter
+public class DepartmentAddParam {
+
+    /** 部门名称 */
+    @ApiModelProperty(value = "部门名称", required = true, position = 2)
+    @NotBlank(message = "departmentName不能为空")
+    private String departmentName;
+
+    /** 上级部门ID */
+    @ApiModelProperty(value = "上级部门ID", required = true, position = 4)
+    @NotBlank(message = "parentId不能为空")
+    private String parentId;
+
+    /** 所在区域 */
+    @ApiModelProperty(value = "所在区域", required = true, position = 5)
+    @NotBlank(message = "departmentRegion不能为空")
+    private String departmentRegion;
+
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", required = true, position = 6)
+    @NotBlank(message = "detailLocation不能为空")
+    private String detailLocation;
+
+    /** 部门电话 */
+    @ApiModelProperty(value = "部门电话", position = 7)
+    private String departmentPhone;
+
+    /** 部门负责人ID */
+    @ApiModelProperty(value = "部门负责人ID", position = 8)
+    private String departmentManager;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述", position = 9)
+    private String remarks;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", required = true, position = 10)
+    @NotNull(message = "sortCode不能为空")
+    private Integer sortCode;
+
+
+}

+ 76 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/param/DepartmentEditParam.java

@@ -0,0 +1,76 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 部门编辑参数
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ **/
+@Getter
+@Setter
+public class DepartmentEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 部门名称 */
+    @ApiModelProperty(value = "部门名称", required = true, position = 2)
+    @NotBlank(message = "departmentName不能为空")
+    private String departmentName;
+
+    /** 上级部门ID */
+    @ApiModelProperty(value = "上级部门ID", required = true, position = 4)
+    @NotBlank(message = "parentId不能为空")
+    private String parentId;
+
+    /** 所在区域 */
+    @ApiModelProperty(value = "所在区域", required = true, position = 5)
+    @NotBlank(message = "departmentRegion不能为空")
+    private String departmentRegion;
+
+    /** 详细地址 */
+    @ApiModelProperty(value = "详细地址", required = true, position = 6)
+    @NotBlank(message = "detailLocation不能为空")
+    private String detailLocation;
+
+    /** 部门电话 */
+    @ApiModelProperty(value = "部门电话", position = 7)
+    private String departmentPhone;
+
+    /** 部门负责人ID */
+    @ApiModelProperty(value = "部门负责人ID", position = 8)
+    private String departmentManager;
+
+    /** 描述 */
+    @ApiModelProperty(value = "描述", position = 9)
+    private String remarks;
+
+    /** 排序码 */
+    @ApiModelProperty(value = "排序码", required = true, position = 10)
+    @NotNull(message = "sortCode不能为空")
+    private Integer sortCode;
+
+}

+ 4 - 4
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageIdParam.java

@@ -10,7 +10,7 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.param;
+package vip.xiaonuo.modular.department.param;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -19,14 +19,14 @@ import lombok.Setter;
 import javax.validation.constraints.NotBlank;
 
 /**
- * 栋舍阶段Id参数
+ * 部门Id参数
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/13 08:44
  **/
 @Getter
 @Setter
-public class PigpenStageIdParam {
+public class DepartmentIdParam {
 
     /** ID */
     @ApiModelProperty(value = "ID", required = true)

+ 4 - 4
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStagePageParam.java

@@ -10,7 +10,7 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.param;
+package vip.xiaonuo.modular.department.param;
 
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
@@ -19,14 +19,14 @@ import java.math.BigDecimal;
 import java.util.Date;
 
 /**
- * 栋舍阶段查询参数
+ * 部门查询参数
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/13 08:44
  **/
 @Getter
 @Setter
-public class PigpenStagePageParam {
+public class DepartmentPageParam {
 
     /** 当前页 */
     @ApiModelProperty(value = "当前页码")

+ 83 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/service/DepartmentService.java

@@ -0,0 +1,83 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.service;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.IService;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.modular.department.entity.Department;
+import vip.xiaonuo.modular.department.param.DepartmentAddParam;
+import vip.xiaonuo.modular.department.param.DepartmentEditParam;
+import vip.xiaonuo.modular.department.param.DepartmentIdParam;
+import vip.xiaonuo.modular.department.param.DepartmentPageParam;
+
+import java.util.List;
+
+/**
+ * 部门Service接口
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ **/
+public interface DepartmentService extends IService<Department> {
+
+    /**
+     * 获取部门分页
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    Page<Department> page(DepartmentPageParam departmentPageParam);
+
+    /**
+     * 添加部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    void add(DepartmentAddParam departmentAddParam, MultipartFile departmentImgUrl);
+
+    /**
+     * 编辑部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    void edit(DepartmentEditParam departmentEditParam, MultipartFile departmentImgUrl);
+
+    /**
+     * 删除部门
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    void delete(List<DepartmentIdParam> departmentIdParamList);
+
+    /**
+     * 获取部门详情
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     */
+    Department detail(DepartmentIdParam departmentIdParam);
+
+    /**
+     * 获取部门详情
+     *
+     * @author newspaper
+     * @date  2023/12/13 08:44
+     **/
+    Department queryEntity(String id);
+
+    List<Department> departmentSelector();
+}

+ 123 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/department/service/impl/DepartmentServiceImpl.java

@@ -0,0 +1,123 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.department.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.auth.core.util.StpLoginUserUtil;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.dev.modular.file.service.DevFileService;
+import vip.xiaonuo.modular.department.entity.Department;
+import vip.xiaonuo.modular.department.mapper.DepartmentMapper;
+import vip.xiaonuo.modular.department.param.DepartmentAddParam;
+import vip.xiaonuo.modular.department.param.DepartmentEditParam;
+import vip.xiaonuo.modular.department.param.DepartmentIdParam;
+import vip.xiaonuo.modular.department.param.DepartmentPageParam;
+import vip.xiaonuo.modular.department.service.DepartmentService;
+
+import java.util.List;
+
+/**
+ * 部门Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/13 08:44
+ **/
+@Service
+public class DepartmentServiceImpl extends ServiceImpl<DepartmentMapper, Department> implements DepartmentService {
+
+    private static final String SNOWY_SYS_DEFAULT_FILE_ENGINE_KEY = "SNOWY_SYS_DEFAULT_FILE_ENGINE";
+
+    @Autowired
+    private DevFileService devFileService;
+
+    @Override
+    public Page<Department> page(DepartmentPageParam departmentPageParam) {
+        QueryWrapper<Department> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isAllNotEmpty(departmentPageParam.getSortField(), departmentPageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(departmentPageParam.getSortOrder());
+            queryWrapper.orderBy(true, departmentPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(departmentPageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(Department::getSortCode);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(DepartmentAddParam departmentAddParam, MultipartFile departmentImgUrl) {
+        Department department = BeanUtil.toBean(departmentAddParam, Department.class);
+        if (ObjectUtil.isNotEmpty(departmentImgUrl)){
+            String uploadReturnUrl = devFileService.uploadReturnUrl(SNOWY_SYS_DEFAULT_FILE_ENGINE_KEY, departmentImgUrl);
+            department.setDepartmentImgUrl(uploadReturnUrl);
+        }
+        this.save(department);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(DepartmentEditParam departmentEditParam, MultipartFile departmentImgUrl) {
+        Department department = this.queryEntity(departmentEditParam.getId());
+        BeanUtil.copyProperties(departmentEditParam, department);
+        if (ObjectUtil.isNotEmpty(departmentImgUrl)){
+            String uploadReturnUrl = devFileService.uploadReturnUrl(SNOWY_SYS_DEFAULT_FILE_ENGINE_KEY, departmentImgUrl);
+            department.setDepartmentImgUrl(uploadReturnUrl);
+        }
+        this.updateById(department);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<DepartmentIdParam> departmentIdParamList) {
+        for (DepartmentIdParam departmentIdParam : departmentIdParamList) {
+            if (this.count(new QueryWrapper<Department>().eq("parent_id",departmentIdParam.getId())) > 0) {
+                throw new CommonException("部门存在下级,请先删除下级部门!");
+            }
+        }
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(departmentIdParamList, DepartmentIdParam::getId));
+    }
+
+    @Override
+    public Department detail(DepartmentIdParam departmentIdParam) {
+        return this.queryEntity(departmentIdParam.getId());
+    }
+
+    @Override
+    public Department queryEntity(String id) {
+        Department department = this.getById(id);
+        if(ObjectUtil.isEmpty(department)) {
+            throw new CommonException("部门不存在,id值为:{}", id);
+        }
+        return department;
+    }
+
+    @Override
+    public List<Department> departmentSelector() {
+        String orgId = StpLoginUserUtil.getLoginUser().getOrgId();
+        List<Department> departmentList = this.list(new QueryWrapper<Department>().lambda().eq(Department::getOrgId, orgId));
+        return departmentList;
+    }
+}

+ 139 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/controller/InventoryUseController.java

@@ -0,0 +1,139 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.controller;
+
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.github.xiaoymin.knife4j.annotations.ApiOperationSupport;
+import com.github.xiaoymin.knife4j.annotations.ApiSupport;
+import io.swagger.annotations.Api;
+import io.swagger.annotations.ApiOperation;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.common.annotation.CommonLog;
+import vip.xiaonuo.common.pojo.CommonResult;
+import vip.xiaonuo.common.pojo.CommonValidList;
+import vip.xiaonuo.modular.inventoryUse.entity.InventoryUse;
+import vip.xiaonuo.modular.inventoryUse.param.*;
+import vip.xiaonuo.modular.inventoryUse.service.InventoryUseService;
+
+import javax.annotation.Resource;
+import javax.validation.Valid;
+import javax.validation.constraints.NotEmpty;
+import java.util.Date;
+
+/**
+ * 物资领用控制器
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ */
+@Api(tags = "物资领用控制器")
+@ApiSupport(author = "HUIMV", order = 1)
+@RestController
+@Validated
+public class InventoryUseController {
+
+    @Resource
+    private InventoryUseService inventoryUseService;
+
+    /**
+     * 获取物资领用分页
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 1)
+    @ApiOperation("获取物资领用分页")
+    @GetMapping("/biz/inventoryUse/page")
+    public CommonResult<Page<InventoryUse>> page(InventoryUsePageParam inventoryUsePageParam) {
+        return CommonResult.data(inventoryUseService.page(inventoryUsePageParam));
+    }
+
+    /**
+     * 添加物资领用
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 2)
+    @ApiOperation("添加物资领用")
+    @CommonLog("添加物资领用")
+    @PostMapping("/biz/inventoryUse/add")
+    public CommonResult<String> add(@RequestBody @Valid InventoryUseAddParam inventoryUseAddParam) {
+        inventoryUseService.add(inventoryUseAddParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 编辑物资领用
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 3)
+    @ApiOperation("编辑物资领用")
+    @CommonLog("编辑物资领用")
+    @PostMapping("/biz/inventoryUse/edit")
+    public CommonResult<String> edit(@RequestBody @Valid InventoryUseEditParam inventoryUseEditParam) {
+        inventoryUseService.edit(inventoryUseEditParam);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 删除物资领用
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 4)
+    @ApiOperation("删除物资领用")
+    @CommonLog("删除物资领用")
+    @PostMapping("/biz/inventoryUse/delete")
+    public CommonResult<String> delete(@RequestBody @Valid @NotEmpty(message = "集合不能为空")
+                                                   CommonValidList<InventoryUseIdParam> inventoryUseIdParamList) {
+        inventoryUseService.delete(inventoryUseIdParamList);
+        return CommonResult.ok();
+    }
+
+    /**
+     * 获取物资领用详情
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 5)
+    @ApiOperation("获取物资领用详情")
+    @GetMapping("/biz/inventoryUse/detail")
+    public CommonResult<InventoryUse> detail(@Valid InventoryUseIdParam inventoryUseIdParam) {
+        return CommonResult.data(inventoryUseService.detail(inventoryUseIdParam));
+    }
+
+    /**
+     * 编辑物资领用
+     *
+     * @author newspaper
+     * @date  2023/12/11 10:43
+     */
+    @ApiOperationSupport(order = 6)
+    @ApiOperation("归还物资领用")
+    @CommonLog("归还物资领用")
+    @PostMapping("/biz/inventoryUse/revert")
+    public CommonResult<String> revert(@RequestParam MultipartFile returnImgUrl,
+                                       @RequestParam String id,
+                                       @RequestParam Date returnTime,
+                                       @RequestParam String remarks) {
+        inventoryUseService.revert(returnImgUrl,id,returnTime,remarks);
+        return CommonResult.ok();
+    }
+}

+ 120 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/entity/InventoryUse.java

@@ -0,0 +1,120 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.entity;
+
+import com.baomidou.mybatisplus.annotation.*;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 物资领用实体
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+@Setter
+@TableName("inventory_use")
+public class InventoryUse {
+
+    /** ID */
+    @TableId
+    @ApiModelProperty(value = "ID", position = 1)
+    private String id;
+
+    /** 物资编号 */
+    @ApiModelProperty(value = "物资编号", position = 2)
+    private String itemCode;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称", position = 3)
+    private String itemName;
+
+    /** 物资类别 */
+    @ApiModelProperty(value = "物资类别", position = 4)
+    private String itemType;
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌", position = 5)
+    private String brand;
+
+    /** 型号规格 */
+    @ApiModelProperty(value = "型号规格", position = 6)
+    private String specification;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位", position = 7)
+    private String unit;
+
+    /** 领用时间 */
+    @ApiModelProperty(value = "领用时间", position = 8)
+    private Date useTime;
+
+    /** 领用数量 */
+    @ApiModelProperty(value = "领用数量", position = 9)
+    private BigDecimal useQuantity;
+
+    /** 领用部门ID */
+    @ApiModelProperty(value = "领用部门ID", position = 10)
+    private String useOrgId;
+
+    /** 领用人ID */
+    @ApiModelProperty(value = "领用人ID", position = 11)
+    private String userId;
+
+    /** 归还时间 */
+    @ApiModelProperty(value = "归还时间", position = 12)
+    private Date returnTime;
+
+    /** 归还图片地址 */
+    @ApiModelProperty(value = "归还图片地址", position = 13)
+    private String returnImgUrl;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 14)
+
+    private String remarks;
+
+    /** 组织ID */
+    @ApiModelProperty(value = "组织ID", position = 15)
+    private String orgId;
+
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 16)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
+
+    /** 创建时间 */
+    @ApiModelProperty(value = "创建时间", position = 17)
+    @TableField(fill = FieldFill.INSERT)
+    private Date createTime;
+
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 18)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
+    /** 修改时间 */
+    @ApiModelProperty(value = "修改时间", position = 19)
+    @TableField(fill = FieldFill.UPDATE)
+    private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 20)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
+}

+ 34 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/enums/InventoryUseEnum.java

@@ -0,0 +1,34 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.enums;
+
+import lombok.Getter;
+
+/**
+ * 物资领用枚举
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+public enum InventoryUseEnum {
+
+    /** 测试 */
+    TEST("TEST");
+
+    private final String value;
+
+    InventoryUseEnum(String value) {
+        this.value = value;
+    }
+}

+ 25 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/mapper/InventoryUseMapper.java

@@ -0,0 +1,25 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import vip.xiaonuo.modular.inventoryUse.entity.InventoryUse;
+
+/**
+ * 物资领用Mapper接口
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+public interface InventoryUseMapper extends BaseMapper<InventoryUse> {
+}

+ 5 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/mapper/mapping/InventoryUseMapper.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="vip.xiaonuo.modular.inventoryUse.mapper.InventoryUseMapper">
+
+</mapper>

+ 90 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseAddParam.java

@@ -0,0 +1,90 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 物资领用添加参数
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+@Setter
+public class InventoryUseAddParam {
+
+    /** 物资编号 */
+    @ApiModelProperty(value = "物资编号", required = true, position = 2)
+    @NotBlank(message = "itemCode不能为空")
+    private String itemCode;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称", required = true, position = 3)
+    @NotBlank(message = "itemName不能为空")
+    private String itemName;
+
+    /** 物资类别 */
+    @ApiModelProperty(value = "物资类别", required = true, position = 4)
+    @NotNull(message = "itemType不能为空")
+    private String itemType;
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌", required = true, position = 5)
+    @NotBlank(message = "brand不能为空")
+    private String brand;
+
+    /** 型号规格 */
+    @ApiModelProperty(value = "型号规格", required = true, position = 6)
+    @NotBlank(message = "specification不能为空")
+    private String specification;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位", required = true, position = 7)
+    @NotBlank(message = "unit不能为空")
+    private String unit;
+
+    /** 领用时间 */
+    @ApiModelProperty(value = "领用时间", required = true, position = 8)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @NotNull(message = "useTime不能为空")
+    private Date useTime;
+
+    /** 领用数量 */
+    @ApiModelProperty(value = "领用数量", required = true, position = 9)
+    @NotNull(message = "useQuantity不能为空")
+    private BigDecimal useQuantity;
+
+    /** 领用部门ID */
+    @ApiModelProperty(value = "领用部门ID", required = true, position = 10)
+    @NotBlank(message = "useOrgId不能为空")
+    private String useOrgId;
+
+    /** 领用人ID */
+    @ApiModelProperty(value = "领用人ID", required = true, position = 11)
+    @NotBlank(message = "userId不能为空")
+    private String userId;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 14)
+    private String remarks;
+
+}

+ 103 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseEditParam.java

@@ -0,0 +1,103 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.param;
+
+import com.fasterxml.jackson.annotation.JsonFormat;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+import javax.validation.constraints.NotNull;
+import java.math.BigDecimal;
+import java.util.Date;
+
+/**
+ * 物资领用编辑参数
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+@Setter
+public class InventoryUseEditParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true, position = 1)
+    @NotBlank(message = "id不能为空")
+    private String id;
+
+    /** 物资编号 */
+    @ApiModelProperty(value = "物资编号", required = true, position = 2)
+    @NotBlank(message = "itemCode不能为空")
+    private String itemCode;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称", required = true, position = 3)
+    @NotBlank(message = "itemName不能为空")
+    private String itemName;
+
+    /** 物资类别 */
+    @ApiModelProperty(value = "物资类别", required = true, position = 4)
+    @NotNull(message = "itemType不能为空")
+    private String itemType;
+
+    /** 品牌 */
+    @ApiModelProperty(value = "品牌", required = true, position = 5)
+    @NotBlank(message = "brand不能为空")
+    private String brand;
+
+    /** 型号规格 */
+    @ApiModelProperty(value = "型号规格", required = true, position = 6)
+    @NotBlank(message = "specification不能为空")
+    private String specification;
+
+    /** 单位 */
+    @ApiModelProperty(value = "单位", required = true, position = 7)
+    @NotBlank(message = "unit不能为空")
+    private String unit;
+
+    /** 领用时间 */
+    @ApiModelProperty(value = "领用时间", required = true, position = 8)
+    @NotNull(message = "useTime不能为空")
+    private Date useTime;
+
+    /** 领用数量 */
+    @ApiModelProperty(value = "领用数量", required = true, position = 9)
+    @NotNull(message = "useQuantity不能为空")
+    private BigDecimal useQuantity;
+
+    /** 领用部门ID */
+    @ApiModelProperty(value = "领用部门ID", required = true, position = 10)
+    @NotBlank(message = "useOrgId不能为空")
+    private String useOrgId;
+
+    /** 领用人ID */
+    @ApiModelProperty(value = "领用人ID", required = true, position = 11)
+    @NotBlank(message = "userId不能为空")
+    private String userId;
+
+    /** 归还时间 */
+    @ApiModelProperty(value = "归还时间", position = 12)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date returnTime;
+
+    /** 归还图片地址 */
+    @ApiModelProperty(value = "归还图片地址", position = 13)
+    private String returnImgUrl;
+
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 14)
+    private String remarks;
+
+}

+ 35 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUseIdParam.java

@@ -0,0 +1,35 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+import javax.validation.constraints.NotBlank;
+
+/**
+ * 物资领用Id参数
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+@Setter
+public class InventoryUseIdParam {
+
+    /** ID */
+    @ApiModelProperty(value = "ID", required = true)
+    @NotBlank(message = "id不能为空")
+    private String id;
+}

+ 53 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/param/InventoryUsePageParam.java

@@ -0,0 +1,53 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.param;
+
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Getter;
+import lombok.Setter;
+
+/**
+ * 物资领用查询参数
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Getter
+@Setter
+public class InventoryUsePageParam {
+
+    /** 当前页 */
+    @ApiModelProperty(value = "当前页码")
+    private Integer current;
+
+    /** 每页条数 */
+    @ApiModelProperty(value = "每页条数")
+    private Integer size;
+
+    /** 排序字段 */
+    @ApiModelProperty(value = "排序字段,字段驼峰名称,如:userName")
+    private String sortField;
+
+    /** 排序方式 */
+    @ApiModelProperty(value = "排序方式,升序:ASCEND;降序:DESCEND")
+    private String sortOrder;
+
+    /** 关键词 */
+    @ApiModelProperty(value = "关键词")
+    private String searchKey;
+
+    /** 物资名称 */
+    @ApiModelProperty(value = "物资名称")
+    private String itemName;
+
+}

+ 17 - 23
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/param/PigpenStageEditParam.java

@@ -10,50 +10,44 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.param;
+package vip.xiaonuo.modular.inventoryUse.param;
 
+import com.fasterxml.jackson.annotation.JsonFormat;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
-import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
 import java.util.Date;
 
 /**
- * 栋舍阶段编辑参数
+ * 物资领用添加参数
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/11 10:43
  **/
 @Getter
 @Setter
-public class PigpenStageEditParam {
+public class InventoryUseRevertParam {
 
     /** ID */
     @ApiModelProperty(value = "ID", required = true, position = 1)
     @NotBlank(message = "id不能为空")
     private String id;
 
-    /** 阶段 */
-    @ApiModelProperty(value = "阶段名称", position = 2)
-    private String stageName;
+    /** 归还时间 */
+    @ApiModelProperty(value = "归还时间", position = 2)
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    @NotBlank(message = "归还时间不能为空")
+    private Date returnTime;
 
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 3)
-    private String orgId;
+    /** 归还图片地址 */
+    @ApiModelProperty(value = "归还图片地址", position = 3)
+    @NotBlank(message = "归还图片不能为空")
+    private String returnImgUrl;
 
-    /** 排序码 */
-    @ApiModelProperty(value = "排序码", position = 4)
-    private Integer sortCode;
-
-    /** 创建用户 */
-    @ApiModelProperty(value = "创建用户", position = 7)
-    private String createBy;
-
-    /** 修改用户 */
-    @ApiModelProperty(value = "修改用户", position = 9)
-    private String updateBy;
+    /** 备注 */
+    @ApiModelProperty(value = "备注", position = 4)
+    private String remarks;
 
 }

+ 27 - 30
snowy-web-app/src/main/java/vip/xiaonuo/modular/stage/service/PigpenStageService.java

@@ -10,75 +10,72 @@
  * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
  * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
  */
-package vip.xiaonuo.modular.stage.service;
-
-
+package vip.xiaonuo.modular.inventoryUse.service;
 
 import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
 import com.baomidou.mybatisplus.extension.service.IService;
-import vip.xiaonuo.modular.stage.param.PigpenStageAddParam;
-import vip.xiaonuo.modular.stage.param.PigpenStageEditParam;
-import vip.xiaonuo.modular.stage.param.PigpenStageIdParam;
-import vip.xiaonuo.modular.stage.param.PigpenStagePageParam;
-import vip.xiaonuo.modular.stage.entity.PigpenStage;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.modular.inventoryUse.entity.InventoryUse;
+import vip.xiaonuo.modular.inventoryUse.param.*;
 
+import java.util.Date;
 import java.util.List;
 
 /**
- * 栋舍阶段Service接口
+ * 物资领用Service接口
  *
  * @author newspaper
- * @date  2023/12/05 15:12
+ * @date  2023/12/11 10:43
  **/
-public interface PigpenStageService extends IService<PigpenStage> {
+public interface InventoryUseService extends IService<InventoryUse> {
 
     /**
-     * 获取栋舍阶段分页
+     * 获取物资领用分页
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      */
-    Page<PigpenStage> page(PigpenStagePageParam pigpenStagePageParam);
+    Page<InventoryUse> page(InventoryUsePageParam inventoryUsePageParam);
 
     /**
-     * 添加栋舍阶段
+     * 添加物资领用
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      */
-    void add(PigpenStageAddParam pigpenStageAddParam);
+    void add(InventoryUseAddParam inventoryUseAddParam);
 
     /**
-     * 编辑栋舍阶段
+     * 编辑物资领用
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      */
-    void edit(PigpenStageEditParam pigpenStageEditParam);
+    void edit(InventoryUseEditParam inventoryUseEditParam);
 
     /**
-     * 删除栋舍阶段
+     * 删除物资领用
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      */
-    void delete(List<PigpenStageIdParam> pigpenStageIdParamList);
+    void delete(List<InventoryUseIdParam> inventoryUseIdParamList);
 
     /**
-     * 获取栋舍阶段详情
+     * 获取物资领用详情
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      */
-    PigpenStage detail(PigpenStageIdParam pigpenStageIdParam);
+    InventoryUse detail(InventoryUseIdParam inventoryUseIdParam);
 
     /**
-     * 获取栋舍阶段详情
+     * 获取物资领用详情
      *
      * @author newspaper
-     * @date  2023/12/05 15:12
+     * @date  2023/12/11 10:43
      **/
-    PigpenStage queryEntity(String id);
+    InventoryUse queryEntity(String id);
 
-    List<PigpenStage> getAllPigpenList();
+    void revert(MultipartFile returnImgUrl, String id, Date returnTime, String remarks);
 }

+ 114 - 0
snowy-web-app/src/main/java/vip/xiaonuo/modular/inventoryUse/service/impl/InventoryUseServiceImpl.java

@@ -0,0 +1,114 @@
+/*
+ * Copyright [2022] [https://www.xiaonuo.vip]
+ *
+ * Snowy采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点:
+ *
+ * 1.请不要删除和修改根目录下的LICENSE文件。
+ * 2.请不要删除和修改Snowy源码头部的版权声明。
+ * 3.本项目代码可免费商业使用,商业使用请保留源码和相关描述文件的项目出处,作者声明等。
+ * 4.分发源码时候,请注明软件出处 https://www.xiaonuo.vip
+ * 5.不可二次分发开源参与同类竞品,如有想法可联系团队xiaonuobase@qq.com商议合作。
+ * 6.若您的项目无法满足以上几点,需要更多功能代码,获取Snowy商业授权许可,请在官网购买授权,地址为 https://www.xiaonuo.vip
+ */
+package vip.xiaonuo.modular.inventoryUse.service.impl;
+
+import cn.hutool.core.bean.BeanUtil;
+import cn.hutool.core.collection.CollStreamUtil;
+import cn.hutool.core.util.ObjectUtil;
+import cn.hutool.core.util.StrUtil;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+import org.springframework.web.multipart.MultipartFile;
+import vip.xiaonuo.common.enums.CommonSortOrderEnum;
+import vip.xiaonuo.common.exception.CommonException;
+import vip.xiaonuo.common.page.CommonPageRequest;
+import vip.xiaonuo.dev.modular.file.service.DevFileService;
+import vip.xiaonuo.modular.inventoryUse.entity.InventoryUse;
+import vip.xiaonuo.modular.inventoryUse.mapper.InventoryUseMapper;
+import vip.xiaonuo.modular.inventoryUse.param.*;
+import vip.xiaonuo.modular.inventoryUse.service.InventoryUseService;
+
+import java.util.Date;
+import java.util.List;
+
+/**
+ * 物资领用Service接口实现类
+ *
+ * @author newspaper
+ * @date  2023/12/11 10:43
+ **/
+@Service
+public class InventoryUseServiceImpl extends ServiceImpl<InventoryUseMapper, InventoryUse> implements InventoryUseService {
+
+    @Autowired
+    private DevFileService devFileService;
+
+    @Override
+    public Page<InventoryUse> page(InventoryUsePageParam inventoryUsePageParam) {
+        QueryWrapper<InventoryUse> queryWrapper = new QueryWrapper<>();
+        if(ObjectUtil.isNotEmpty(inventoryUsePageParam.getItemName())) {
+            queryWrapper.lambda().like(InventoryUse::getItemName, inventoryUsePageParam.getItemName());
+        }
+        if(ObjectUtil.isAllNotEmpty(inventoryUsePageParam.getSortField(), inventoryUsePageParam.getSortOrder())) {
+            CommonSortOrderEnum.validate(inventoryUsePageParam.getSortOrder());
+            queryWrapper.orderBy(true, inventoryUsePageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
+                    StrUtil.toUnderlineCase(inventoryUsePageParam.getSortField()));
+        } else {
+            queryWrapper.lambda().orderByAsc(InventoryUse::getId);
+        }
+        return this.page(CommonPageRequest.defaultPage(), queryWrapper);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void add(InventoryUseAddParam inventoryUseAddParam) {
+        InventoryUse inventoryUse = BeanUtil.toBean(inventoryUseAddParam, InventoryUse.class);
+        this.save(inventoryUse);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void edit(InventoryUseEditParam inventoryUseEditParam) {
+        InventoryUse inventoryUse = this.queryEntity(inventoryUseEditParam.getId());
+        BeanUtil.copyProperties(inventoryUseEditParam, inventoryUse);
+        this.updateById(inventoryUse);
+    }
+
+    @Transactional(rollbackFor = Exception.class)
+    @Override
+    public void delete(List<InventoryUseIdParam> inventoryUseIdParamList) {
+        // 执行删除
+        this.removeByIds(CollStreamUtil.toList(inventoryUseIdParamList, InventoryUseIdParam::getId));
+    }
+
+    @Override
+    public InventoryUse detail(InventoryUseIdParam inventoryUseIdParam) {
+        return this.queryEntity(inventoryUseIdParam.getId());
+    }
+
+    @Override
+    public InventoryUse queryEntity(String id) {
+        InventoryUse inventoryUse = this.getById(id);
+        if(ObjectUtil.isEmpty(inventoryUse)) {
+            throw new CommonException("物资领用不存在,id值为:{}", id);
+        }
+        return inventoryUse;
+    }
+
+    @Override
+    public void revert(MultipartFile returnImgUrl, String id, Date returnTime, String remarks) {
+        InventoryUse inventoryUse = this.getById(id);
+        String url = devFileService.uploadReturnUrl("SNOWY_SYS_DEFAULT_FILE_ENGINE", returnImgUrl);
+        inventoryUse.setReturnTime(returnTime);
+        inventoryUse.setReturnImgUrl(url);
+        inventoryUse.setRemarks(remarks);
+        this.updateById(inventoryUse);
+
+
+    }
+
+}

+ 2 - 2
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/controller/BasePigpenController.java

@@ -44,8 +44,8 @@ import java.util.List;
  * @author newspaper
  * @date  2023/12/05 08:55
  */
-@Api(tags = "base_pigpen控制器")
-@ApiSupport(author = "SNOWY_TEAM", order = 1)
+@Api(tags = "栋舍控制器")
+@ApiSupport(author = "HUIMV", order = 1)
 @RestController
 @Validated
 public class BasePigpenController {

+ 28 - 15
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/entity/BasePigpen.java

@@ -17,7 +17,7 @@ import com.baomidou.mybatisplus.annotation.*;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
+
 import java.util.Date;
 
 /**
@@ -52,33 +52,46 @@ public class BasePigpen {
     @ApiModelProperty(value = "阶段", position = 5)
     private String remarks;
 
+
+    /** 容量 */
+    @ApiModelProperty(value = "容量", position = 6)
+    private Integer capacity;
+
     /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 6)
+    @ApiModelProperty(value = "组织id", position = 7)
     private String orgId;
 
     /** 排序 */
-    @ApiModelProperty(value = "排序", position = 7)
+    @ApiModelProperty(value = "排序", position = 8)
     private Integer sort;
 
-    /** 逻辑删除标识 */
-    @ApiModelProperty(value = "逻辑删除标识", position = 8)
-    private String deleteFlag;
-
-    /** 创建者 */
-    @ApiModelProperty(value = "创建者", position = 9)
-    private String createBy;
+    /** 排序 */
+    @ApiModelProperty(value = "栋舍全名", position = 9)
+    private String fullName;
 
-    /** 修改者 */
-    @ApiModelProperty(value = "修改者", position = 10)
-    private String updateBy;
+    /** 删除标志 */
+    @ApiModelProperty(value = "删除标志", position = 10)
+    @TableLogic
+    @TableField(fill = FieldFill.INSERT)
+    private String deleteFlag;
 
     /** 创建时间 */
-    @ApiModelProperty(value = "创建时间", position = 10)
+    @ApiModelProperty(value = "创建时间", position = 11)
     @TableField(fill = FieldFill.INSERT)
     private Date createTime;
 
+    /** 创建用户 */
+    @ApiModelProperty(value = "创建用户", position = 12)
+    @TableField(fill = FieldFill.INSERT)
+    private String createUser;
+
     /** 修改时间 */
-    @ApiModelProperty(value = "修改时间", position = 11)
+    @ApiModelProperty(value = "修改时间", position = 13)
     @TableField(fill = FieldFill.UPDATE)
     private Date updateTime;
+
+    /** 修改用户 */
+    @ApiModelProperty(value = "修改用户", position = 14)
+    @TableField(fill = FieldFill.UPDATE)
+    private String updateUser;
 }

snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/mapper/mapping/BasePigpenMapper.xml → snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/mapper/mapping/InventoryService.xml


+ 4 - 2
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenAddParam.java

@@ -18,8 +18,6 @@ import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * base_pigpen添加参数
@@ -49,6 +47,10 @@ public class BasePigpenAddParam {
     @ApiModelProperty(value = "阶段", position = 4)
     private String remarks;
 
+    /** 容量 */
+    @ApiModelProperty(value = "容量", position = 6)
+    private Integer capacity;
+
     /** 排序 */
     @ApiModelProperty(value = "排序", required = true, position = 5)
     @NotNull(message = "sort不能为空")

+ 3 - 13
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenEditParam.java

@@ -18,8 +18,6 @@ import lombok.Setter;
 
 import javax.validation.constraints.NotBlank;
 import javax.validation.constraints.NotNull;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * base_pigpen编辑参数
@@ -46,21 +44,13 @@ public class BasePigpenEditParam {
     @NotNull(message = "parentId不能为空")
     private String parentId;
 
-    /** 类型 0:栋舍 1:楼层 2:单元 */
-    @ApiModelProperty(value = "类型 0:栋舍 1:楼层 2:单元", position = 4)
-    private Integer type;
-
     /** 阶段 */
     @ApiModelProperty(value = "阶段", position = 5)
     private String remarks;
 
-    /** 逻辑删除标识 */
-    @ApiModelProperty(value = "逻辑删除标识 ", position = 6)
-    private Long deleted;
-
-    /** 组织id */
-    @ApiModelProperty(value = "组织id", position = 7)
-    private String orgId;
+    /** 容量 */
+    @ApiModelProperty(value = "容量", position = 6)
+    private Integer capacity;
 
     /** 排序 */
     @ApiModelProperty(value = "排序", required = true, position = 8)

+ 0 - 2
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/param/BasePigpenPageParam.java

@@ -15,8 +15,6 @@ package vip.xiaonuo.modular.pigpen.param;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Getter;
 import lombok.Setter;
-import java.math.BigDecimal;
-import java.util.Date;
 
 /**
  * base_pigpen查询参数

+ 27 - 5
snowy-web-app/src/main/java/vip/xiaonuo/modular/pigpen/service/impl/BasePigpenServiceImpl.java

@@ -70,7 +70,6 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
             queryWrapper.lambda().like(BasePigpen::getBuildName, basePigpenPageParam.getSearchKey());
         }
 
-
         if(ObjectUtil.isAllNotEmpty(basePigpenPageParam.getSortField(), basePigpenPageParam.getSortOrder())) {
             CommonSortOrderEnum.validate(basePigpenPageParam.getSortOrder());
             queryWrapper.orderBy(true, basePigpenPageParam.getSortOrder().equals(CommonSortOrderEnum.ASC.getValue()),
@@ -87,9 +86,16 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
         SaBaseLoginUser user = StpLoginUserUtil.getLoginUser();
         String orgId = user.getOrgId();
         BasePigpen basePigpen = BeanUtil.toBean(basePigpenAddParam, BasePigpen.class);
+
         if (basePigpen.getParentId().equals("0")){
             basePigpen.setType(0);
+            basePigpen.setFullName(basePigpen.getBuildName());
         }else {
+            BasePigpen pigpen = this.getById(basePigpen.getParentId());
+            if (pigpen.getType() == 2){
+                throw new CommonException("无法将单元作为上级栋舍!");
+            }
+            basePigpen.setFullName(pigpen.getFullName()+basePigpen.getBuildName());
             basePigpen.setType(this.queryEntity(basePigpen.getParentId()).getType()+1);
         }
         basePigpen.setOrgId(orgId);
@@ -98,7 +104,6 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
         if(repeatName) {
             throw new CommonException("存在重复的同级栋舍,名称为:{}", basePigpen.getBuildName());
         }
-        basePigpen.setCreateBy(user.getId());
         this.save(basePigpen);
 
         // 发布增加事件
@@ -108,14 +113,28 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
     @Transactional(rollbackFor = Exception.class)
     @Override
     public void edit(BasePigpenEditParam basePigpenEditParam) {
-        SaBaseLoginUser user = StpLoginUserUtil.getLoginUser();
         BasePigpen basePigpen = this.queryEntity(basePigpenEditParam.getId());
         BeanUtil.copyProperties(basePigpenEditParam, basePigpen);
         if (basePigpen.getParentId().equals("0")){
+            if (basePigpen.getType() != 0){
+                throw new CommonException("顶级只能作为栋舍的上级栋舍!");
+            }
             basePigpen.setType(0);
+            basePigpen.setFullName(basePigpen.getBuildName());
         }else {
+            BasePigpen pigpen = this.getById(basePigpen.getParentId());
+            System.out.println(pigpen.getType());
+            System.out.println(basePigpen.getType());
+            if (!basePigpen.getType().equals(pigpen.getType()+1)){
+                throw new CommonException("上级栋舍只能为上一级!");
+            }
+            if (pigpen.getType() == 2){
+                throw new CommonException("无法将单元作为上级栋舍!");
+            }
+            basePigpen.setFullName(pigpen.getFullName()+basePigpen.getBuildName());
             basePigpen.setType(this.queryEntity(basePigpen.getParentId()).getType()+1);
         }
+
         boolean repeatName = this.count(new LambdaQueryWrapper<BasePigpen>().eq(BasePigpen::getParentId, basePigpen.getParentId())
                 .eq(BasePigpen::getBuildName, basePigpen.getBuildName()).ne(BasePigpen::getId, basePigpen.getId())) > 0;
         if(repeatName) {
@@ -127,7 +146,6 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
         if(errorLevel) {
             throw new CommonException("不可选择上级栋舍:{}", this.getById(originDataList, basePigpen.getParentId()).getBuildName());
         }
-        basePigpen.setUpdateBy(user.getId());
         this.updateById(basePigpen);
 
         // 发布更新事件
@@ -139,8 +157,12 @@ public class BasePigpenServiceImpl extends ServiceImpl<BasePigpenMapper, BasePig
     public void delete(List<BasePigpenIdParam> basePigpenIdParamList) {
         List<String> toDeletePigpenIdList = CollStreamUtil.toList(basePigpenIdParamList, BasePigpenIdParam::getId);
         // 执行删除
+        for (String pigpenId : toDeletePigpenIdList) {
+            if (this.count(new LambdaQueryWrapper<BasePigpen>().eq(BasePigpen::getParentId,pigpenId)) > 0){
+                throw new CommonException("{}存在下级栋舍", this.getById(pigpenId).getBuildName());
+            }
+        }
         this.removeByIds(toDeletePigpenIdList);
-
         // 发布删除事件
         CommonDataChangeEventCenter.doDeleteWithDataId(SysDataTypeEnum.ORG.getValue(), toDeletePigpenIdList);
     }