Преглед на файлове

增加系统管理模块

zhuoning преди 2 години
родител
ревизия
657ba9a692
променени са 56 файла, в които са добавени 3801 реда и са изтрити 15 реда
  1. 22 0
      huimv-cattle/pom.xml
  2. 2 0
      huimv-cattle/src/main/java/com/huimv/cattle/HuimvCattleApplication.java
  3. 67 0
      huimv-cattle/src/main/java/com/huimv/cattle/config/GlobalInterceptor.java
  4. 44 0
      huimv-cattle/src/main/java/com/huimv/cattle/config/MybatisPlusConfig.java
  5. 31 0
      huimv-cattle/src/main/java/com/huimv/cattle/config/WebConfig.java
  6. 74 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysFarmController.java
  7. 60 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysFarmServiceController.java
  8. 53 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysGroupController.java
  9. 39 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysGroupMenuController.java
  10. 70 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysMenuController.java
  11. 132 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysUserAccountController.java
  12. 39 0
      huimv-cattle/src/main/java/com/huimv/cattle/controller/SysUserGroupController.java
  13. 16 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysFarmMapper.java
  14. 17 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysFarmServiceMapper.java
  15. 16 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysGroupMapper.java
  16. 16 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysGroupMenuMapper.java
  17. 23 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysMenuMapper.java
  18. 16 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysUserAccountMapper.java
  19. 16 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysUserGroupMapper.java
  20. 22 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysFarmMapper.xml
  21. 22 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysFarmServiceMapper.xml
  22. 18 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysGroupMapper.xml
  23. 17 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysGroupMenuMapper.xml
  24. 48 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysMenuMapper.xml
  25. 25 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysUserAccountMapper.xml
  26. 17 0
      huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysUserGroupMapper.xml
  27. 42 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysFarm.java
  28. 48 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysFarmService.java
  29. 42 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysGroup.java
  30. 33 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysGroupMenu.java
  31. 48 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysMenu.java
  32. 53 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysUserAccount.java
  33. 32 0
      huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysUserGroup.java
  34. 33 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysFarmService.java
  35. 31 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysFarmServiceService.java
  36. 22 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysGroupMenuService.java
  37. 29 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysGroupService.java
  38. 32 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysMenuService.java
  39. 40 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysUserAccountService.java
  40. 22 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/SysUserGroupService.java
  41. 164 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysFarmServiceImpl.java
  42. 183 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysFarmServiceServiceImpl.java
  43. 138 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysGroupMenuServiceImpl.java
  44. 146 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysGroupServiceImpl.java
  45. 283 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysMenuServiceImpl.java
  46. 470 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysUserAccountServiceImpl.java
  47. 82 0
      huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysUserGroupServiceImpl.java
  48. 124 0
      huimv-cattle/src/main/java/com/huimv/cattle/session/AccessToken.java
  49. 20 0
      huimv-cattle/src/main/java/com/huimv/cattle/token/TokenConstant.java
  50. 149 0
      huimv-cattle/src/main/java/com/huimv/cattle/token/TokenSign.java
  51. 18 0
      huimv-cattle/src/main/java/com/huimv/cattle/utils/Const.java
  52. 87 0
      huimv-cattle/src/main/java/com/huimv/cattle/utils/ConstUtil.java
  53. 477 0
      huimv-cattle/src/main/java/com/huimv/cattle/utils/DateUtil.java
  54. 25 0
      huimv-cattle/src/main/java/com/huimv/cattle/utils/ResultUtil.java
  55. 2 2
      huimv-cattle/src/main/resources/application-dev.yml
  56. 4 13
      huimv-cattle/src/main/resources/application.properties

+ 22 - 0
huimv-cattle/pom.xml

@@ -109,6 +109,28 @@
             <artifactId>lombok</artifactId>
             <scope>compile</scope>
         </dependency>
+        <dependency>
+            <groupId>com.auth0</groupId>
+            <artifactId>java-jwt</artifactId>
+            <version>3.3.0</version>
+        </dependency>
+        <dependency>
+            <groupId>io.jsonwebtoken</groupId>
+            <artifactId>jjwt</artifactId>
+            <version>0.9.1</version>
+        </dependency>
+        <dependency>
+            <groupId>commons-lang</groupId>
+            <artifactId>commons-lang</artifactId>
+            <version>2.6</version>
+            <scope>compile</scope>
+        </dependency>
+        <!-- -->
+        <dependency>
+            <groupId>com.huimv</groupId>
+            <artifactId>huimv-common</artifactId>
+            <version>0.0.6-SNAPSHOT</version>
+        </dependency>
     </dependencies>
 
     <build>

+ 2 - 0
huimv-cattle/src/main/java/com/huimv/cattle/HuimvCattleApplication.java

@@ -1,9 +1,11 @@
 package com.huimv.cattle;
 
+import org.mybatis.spring.annotation.MapperScan;
 import org.springframework.boot.SpringApplication;
 import org.springframework.boot.autoconfigure.SpringBootApplication;
 
 @SpringBootApplication
+@MapperScan("com.huimv.cattle.mapper")
 public class HuimvCattleApplication {
 
     public static void main(String[] args) {

+ 67 - 0
huimv-cattle/src/main/java/com/huimv/cattle/config/GlobalInterceptor.java

@@ -0,0 +1,67 @@
+package com.huimv.cattle.config;
+
+import lombok.extern.slf4j.Slf4j;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.web.servlet.HandlerInterceptor;
+import org.springframework.web.servlet.ModelAndView;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.PrintWriter;
+
+/**
+ * @Project : huimv-breed
+ * @Package : IntelliJ IDEA
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/9/28
+ **/
+@Slf4j
+public class GlobalInterceptor implements HandlerInterceptor {
+//    @Resource(name="redisUUID_common")
+//    private RedisUUID redisUUID;
+
+    @Override
+    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
+        String secreKey = request.getHeader("from");
+        System.out.println("判断是否直连服务 secreKey="+secreKey);
+//        if (!StringUtils.isNotBlank(secreKey) || secreKey.equals(redisUUID.get("from"))) {
+//            response.setContentType("application/json; charset=utf-8");
+//            PrintWriter writer = response.getWriter();
+//            writer.write("不能直连服务接口,必须请求gateway网关转发.");
+//            return false;
+//        }
+        return true;
+    }
+
+    //    @Override
+//    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object obj) throws Exception {
+//        long exist =  authIgnoreConfig.getIgnoreUrls().stream().filter(url-> url.trim().equals(request.getRequestURI())).count();
+//        if(exist != 0){
+//            return true;
+//        }
+//        String secretKey = request.getHeader(Const.SECRET_KEY);
+//        if(StringUtils.isNotBlank(secretKey)){
+//            String key = (String) redisUUID.get(Const.SECRET_KEY);
+//            if(!StringUtils.isBlank(key) && secretKey.equals(key)){
+//                return true;
+//            }
+//        }
+//        response.setContentType("application/json; charset=utf-8");
+//        PrintWriter writer = response.getWriter();
+//        writer.write(JSONUtil.toJsonStr(R.error("illegal request")));
+//        return false;
+//    }
+
+    @Override
+    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
+
+    }
+
+    @Override
+    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
+
+    }
+}

+ 44 - 0
huimv-cattle/src/main/java/com/huimv/cattle/config/MybatisPlusConfig.java

@@ -0,0 +1,44 @@
+package com.huimv.cattle.config;
+
+import com.baomidou.mybatisplus.annotation.DbType;
+import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor;
+import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Configuration
+public class MybatisPlusConfig {
+    /**
+     * 注册插件
+     */
+    @Bean
+    public MybatisPlusInterceptor mybatisPlusInterceptor() {
+
+        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+        // 添加分页插件
+        PaginationInnerInterceptor pageInterceptor = new PaginationInnerInterceptor();
+        // 设置请求的页面大于最大页后操作,true调回到首页,false继续请求。默认false
+        pageInterceptor.setOverflow(false);
+        // 单页分页条数限制,默认无限制
+        pageInterceptor.setMaxLimit(500L);
+        // 设置数据库类型
+        pageInterceptor.setDbType(DbType.MYSQL);
+
+        interceptor.addInnerInterceptor(pageInterceptor);
+        return interceptor;
+
+//        MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor();
+//        interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL));
+//        return interceptor;
+
+
+    }
+}

+ 31 - 0
huimv-cattle/src/main/java/com/huimv/cattle/config/WebConfig.java

@@ -0,0 +1,31 @@
+package com.huimv.cattle.config;
+
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
+import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
+
+/**
+ * @Project : huimv-breed
+ * @Package : IntelliJ IDEA
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/9/28
+ **/
+@Configuration
+public class WebConfig implements WebMvcConfigurer {
+    @Bean
+    public GlobalInterceptor globalInterceptor() {
+        return new GlobalInterceptor();
+    }
+
+    @Override
+    public void addInterceptors(InterceptorRegistry registry) {
+        registry.addInterceptor(globalInterceptor())
+                .addPathPatterns("/**")
+                .excludePathPatterns("/admin/v1.0.0/account/login",
+                        "/admin/v1.0.0/account/logout",
+                        "/admin/v1.0.0/account/loginApp");
+    }
+}

+ 74 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysFarmController.java

@@ -0,0 +1,74 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysFarmService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@RestController
+@RequestMapping("/platform/v1.0.0/farm")
+public class SysFarmController {
+    @Resource
+    private SysFarmService sysFarmService;
+
+    /**
+     * @Method      : initFarm
+     * @Description : 初始化牧场
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9
+     * @Time        : 16:47
+     */
+    @PostMapping("/initFarm")
+    public Result initFarm(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.initFarmFlow(request,paramsMap);
+    }
+
+    @PostMapping("/list")
+    public Result listFarm(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.listFarm(request,paramsMap);
+    }
+
+    @PostMapping("/getAllFarmId")
+    public Result getAllFarms(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.getAllFarmId(request,paramsMap);
+    }
+
+    @PostMapping("/new")
+    public Result newFarm(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.newFarm(request,paramsMap);
+    }
+
+    @PostMapping("/edit")
+    public Result editFarm(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.editFarm(request,paramsMap);
+    }
+
+    @PostMapping("/remove")
+    public Result remove(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.removeFarm(request,paramsMap);
+    }
+
+    @PostMapping("/password/reset")
+    public Result resetPassword(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmService.resetPassword(request,paramsMap);
+    }
+}
+

+ 60 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysFarmServiceController.java

@@ -0,0 +1,60 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysFarmServiceService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@RestController
+@RequestMapping("/platform/v1.0.0/service")
+public class SysFarmServiceController {
+    @Resource
+    private SysFarmServiceService sysFarmServiceService;
+
+    @PostMapping("/listAll")
+    public Result listAllService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmServiceService.listAllService(request,paramsMap);
+    }
+
+    @PostMapping("/listMyService")
+    public Result listMyService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmServiceService.listMyService(request,paramsMap);
+    }
+
+    @PostMapping("/new")
+    public Result newService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap) throws ParseException {
+        return sysFarmServiceService.newService(request,paramsMap);
+    }
+
+    @PostMapping("/remove")
+    public Result removeService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmServiceService.removeService(request,paramsMap);
+    }
+
+    @PostMapping("/timeout")
+    public Result timeoutService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmServiceService.timeoutService(request,paramsMap);
+    }
+
+    @PostMapping("/cancel")
+    public Result cancelService(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysFarmServiceService.cancelService(request,paramsMap);
+    }
+}
+

+ 53 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysGroupController.java

@@ -0,0 +1,53 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysGroupService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@RestController
+@RequestMapping("/v1.0.0/group")
+public class SysGroupController {
+    @Resource
+    private SysGroupService sysGroupService;
+
+    @PostMapping("/list")
+    public Result listGroup(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupService.listGroup(request,paramsMap);
+    }
+    @PostMapping("/listByUserId")
+    public Result listByUserId(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupService.listByUserId(request,paramsMap);
+    }
+
+    @PostMapping("/new")
+    public Result newGroup(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupService.newGroup(request,paramsMap);
+    }
+
+    @PostMapping("/edit")
+    public Result editGroup(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupService.editGroup(request,paramsMap);
+    }
+
+    @PostMapping("/remove")
+    public Result removeGroup(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupService.removeGroup(request,paramsMap);
+    }
+}
+

+ 39 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysGroupMenuController.java

@@ -0,0 +1,39 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysGroupMenuService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@RestController
+@RequestMapping("/v1.0.0/group-menu")
+public class SysGroupMenuController {
+    @Resource
+    private SysGroupMenuService sysGroupMenuService;
+
+    @PostMapping("/saveGroupMenu")
+    public Result saveGroupMenu(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupMenuService.saveGroupMenu(paramsMap);
+    }
+
+    @PostMapping("/getMenuByGroupId")
+    public Result getMenuByGroupId(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysGroupMenuService.getMenuByGroupId(paramsMap);
+    }
+}
+

+ 70 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysMenuController.java

@@ -0,0 +1,70 @@
+package com.huimv.cattle.controller;
+
+
+import cn.hutool.core.util.ObjectUtil;
+import com.huimv.cattle.service.SysMenuService;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+
+@RestController
+@RequestMapping("/v1.0.0/menu")
+public class SysMenuController {
+    @Resource
+    private SysMenuService sysMenuService;
+
+    @PostMapping("/list")
+    public Result list(@RequestBody Map<String,String> paramMap){
+        return sysMenuService.list(paramMap);
+    }
+
+    @PostMapping("/getMyMenu")
+    public Result listMyMenu(HttpServletRequest request, @RequestBody Map<String,String> paramMap){
+        return sysMenuService.getMyMenu(request,paramMap);
+    }
+
+    @PostMapping("/new")
+    public Result newMenu(@RequestBody Map<String,String> paramMap){
+        return sysMenuService.newMenu(paramMap);
+    }
+
+    @PostMapping("/edit")
+    public Result editMenu(@RequestBody Map<String,String> paramMap){
+        return sysMenuService.editMenu(paramMap);
+    }
+
+    @PostMapping("/remove")
+    public Result removeMenu(@RequestBody Map<String,String> paramMap){
+        return sysMenuService.removeMenu(paramMap);
+    }
+
+    @PostMapping("/getMyButton")
+    public Result getMyButton(HttpServletRequest request, @RequestBody Map<String, String> paramMap) {
+        List<String> myButton = sysMenuService.getMyButton(request, paramMap);
+        if (ObjectUtil.isNotEmpty(myButton)){
+            return new Result(ResultCode.SUCCESS,myButton);
+        }else {
+            return new Result(ResultCode.FAIL,myButton);
+        }
+
+    }
+
+}
+

+ 132 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysUserAccountController.java

@@ -0,0 +1,132 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysUserAccountService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+
+@RestController
+@RequestMapping("/v1.0.0/account")
+public class SysUserAccountController {
+    @Resource
+    private SysUserAccountService sysUserAccountService;
+
+    @PostMapping("/login")
+    public Result login(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+       return sysUserAccountService.login(request,paramsMap);
+    }
+    @PostMapping("/loginApp")
+    public Result loginApp(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserAccountService.loginApp(request,paramsMap);
+    }
+
+    @PostMapping("/logout")
+    public Result logout(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+//        return sysUserAccountService.logout(request,paramsMap);
+        return null;
+//        return new Result(ResultCode.SUCCESS,null);
+    }
+
+    /**
+     * @Method      : newUserAccount
+     * @Description : 新建账户
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9
+     * @Time        : 16:47
+     */
+    @PostMapping("/new")
+    public Result newUserAccount(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserAccountService.newUserAccount(request,paramsMap);
+    }
+
+    /**
+     * @Method      : editUserAccount
+     * @Description : 编辑账户
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9
+     * @Time        : 16:47
+     */
+    @PostMapping("/edit")
+    public Result editUserAccount(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserAccountService.editUserAccount(paramsMap);
+    }
+
+    /**
+     * @Method      : removeUserAccount
+     * @Description : 删除账户
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     *
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9
+     * @Time        : 16:47
+     */
+    @PostMapping("/remove")
+    public Result removeUserAccount(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserAccountService.removeUserAccount(paramsMap);
+    }
+
+    /**
+     * @Method      : listUserAccount
+     * @Description : 列表展示账户
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9       
+     * @Time        : 16:47
+     */
+    @PostMapping("/list")
+    public Result listUserAccount(HttpServletRequest request, @RequestBody Map<String, String> paramsMap) throws ParseException {
+        return sysUserAccountService.listUserAccount(request,paramsMap);
+    }
+
+    /**
+     * @Method      : listPlatformUserAndFarmAdmin
+     * @Description : 显示平台账号和牧场管理员两类账户信息
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/13       
+     * @Time        : 19:48
+     */
+    @PostMapping("/listPlatformUserAndFarmAdmin")
+    public Result listPlatformUserAndFarmAdmin(HttpServletRequest request, @RequestBody Map<String, String> paramsMap) throws ParseException {
+        return sysUserAccountService.listPlatformUserAndFarmAdmin(request,paramsMap);
+    }
+
+    @PostMapping("/password/reset")
+    public Result resetPassword(HttpServletRequest request, @RequestBody Map<String, String> paramsMap) throws ParseException {
+        return sysUserAccountService.resetPassword(paramsMap);
+    }
+
+    @PostMapping("/resetMyPassword")
+    public Result resetMyPassword(HttpServletRequest request, @RequestBody Map<String, String> paramsMap) throws ParseException {
+        return sysUserAccountService.resetMyPassword(request,paramsMap);
+    }
+}
+

+ 39 - 0
huimv-cattle/src/main/java/com/huimv/cattle/controller/SysUserGroupController.java

@@ -0,0 +1,39 @@
+package com.huimv.cattle.controller;
+
+
+import com.huimv.cattle.service.SysUserGroupService;
+import com.huimv.common.utils.Result;
+import org.springframework.web.bind.annotation.PostMapping;
+import org.springframework.web.bind.annotation.RequestBody;
+import org.springframework.web.bind.annotation.RequestMapping;
+import org.springframework.web.bind.annotation.RestController;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  前端控制器
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@RestController
+@RequestMapping("/v1.0.0/user-group")
+public class SysUserGroupController {
+    @Resource
+    private SysUserGroupService sysUserGroupService;
+
+    @PostMapping("/saveUserGroup")
+    public Result saveUserGroup(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserGroupService.saveUserGroup(paramsMap);
+    }
+
+    @PostMapping("/getGroupByUserId")
+    public Result getGroupByUserId(HttpServletRequest request, @RequestBody Map<String, String> paramsMap){
+        return sysUserGroupService.getGroupByUserId(paramsMap);
+    }
+}
+

+ 16 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysFarmMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysFarm;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysFarmMapper extends BaseMapper<SysFarm> {
+
+}

+ 17 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysFarmServiceMapper.java

@@ -0,0 +1,17 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysFarmService;
+
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysFarmServiceMapper extends BaseMapper<SysFarmService> {
+
+}

+ 16 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysGroupMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysGroup;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysGroupMapper extends BaseMapper<SysGroup> {
+
+}

+ 16 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysGroupMenuMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysGroupMenu;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysGroupMenuMapper extends BaseMapper<SysGroupMenu> {
+
+}

+ 23 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysMenuMapper.java

@@ -0,0 +1,23 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysMenu;
+
+import java.util.List;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysMenuMapper extends BaseMapper<SysMenu> {
+
+    List<SysMenu> getMyMenu(String userId);
+
+    List<SysMenu> getMyMenu2(String userId);
+
+    List<String>  getMyButton(Integer userId);
+}

+ 16 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysUserAccountMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysUserAccount;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysUserAccountMapper extends BaseMapper<SysUserAccount> {
+
+}

+ 16 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/SysUserGroupMapper.java

@@ -0,0 +1,16 @@
+package com.huimv.cattle.mapper;
+
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+import com.huimv.cattle.pojo.SysUserGroup;
+
+/**
+ * <p>
+ *  Mapper 接口
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysUserGroupMapper extends BaseMapper<SysUserGroup> {
+
+}

+ 22 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysFarmMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysFarmMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysFarm">
+        <id column="id" property="id" />
+        <result column="farm_name" property="farmName" />
+        <result column="farm_code" property="farmCode" />
+        <result column="linkman" property="linkman" />
+        <result column="phone" property="phone" />
+        <result column="address" property="address" />
+        <result column="farm_status" property="farmStatus" />
+        <result column="remark" property="remark" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, farm_name, farm_code, linkman, phone, address, farm_status, remark
+    </sql>
+
+</mapper>

+ 22 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysFarmServiceMapper.xml

@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysFarmServiceMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysFarmService">
+        <id column="id" property="id" />
+        <result column="farm_code" property="farmCode" />
+        <result column="start_date" property="startDate" />
+        <result column="end_date" property="endDate" />
+        <result column="service_cycle" property="serviceCycle" />
+        <result column="service_days" property="serviceDays" />
+        <result column="service_status" property="serviceStatus" />
+        <result column="current_status" property="currentStatus" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, farm_code, start_date, end_date, service_cycle, service_days, service_status, current_status
+    </sql>
+
+</mapper>

+ 18 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysGroupMapper.xml

@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysGroupMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysGroup">
+        <id column="id" property="id" />
+        <result column="group_name" property="groupName" />
+        <result column="group_type" property="groupType" />
+        <result column="group_class" property="groupClass" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, group_name, group_type, group_class
+    </sql>
+
+</mapper>

+ 17 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysGroupMenuMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysGroupMenuMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysGroupMenu">
+        <id column="id" property="id" />
+        <result column="group_id" property="groupId" />
+        <result column="menu_id" property="menuId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, group_id, menu_id
+    </sql>
+
+</mapper>

+ 48 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysMenuMapper.xml

@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysMenuMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysMenu">
+        <id column="id" property="id" />
+        <result column="title" property="title" />
+        <result column="url" property="url" />
+        <result column="remark" property="remark" />
+        <result column="parent_id" property="parentId" />
+        <result column="sort" property="sort" />
+        <result column="weight" property="weight" />
+        <result column="permission" property="permission" />
+        <result column="if_show" property="ifShow" />
+        <result column="menu_type" property="menuType" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, title, url, remark, parent_id, sort, weight, permission, if_show, menu_type
+    </sql>
+
+    <!-- 查询我的所有授权菜单 -->
+    <select id="getMyMenu" resultType="com.huimv.cattle.pojo.SysMenu" parameterType="java.lang.String">
+        SELECT * FROM `sys_menu` WHERE id IN(
+            SELECT DISTINCT(menu_id) AS menu_id FROM `sys_group_menu` WHERE group_id IN(
+                SELECT group_id FROM `sys_user_group` WHERE user_id=${user_id}
+            )
+        ) ORDER BY sort ASC
+    </select>
+
+    <select id="getMyMenu2" resultType="com.huimv.cattle.pojo.SysMenu" parameterType="java.lang.String">
+        SELECT * FROM `sys_menu` WHERE id IN(
+            SELECT DISTINCT(menu_id ) AS menu_id FROM `sys_user_group` ug LEFT JOIN `sys_group_menu` gm
+            ON ug.group_id=gm.group_id WHERE user_id=${user_id}
+        ) ORDER BY sort ASC
+    </select>
+    <select id="getMyButton" resultType="java.lang.String" parameterType="java.lang.Integer">
+
+  SELECT permission FROM sys_menu
+        WHERE id IN
+        (SELECT DISTINCT(menu_id) FROM sys_group_menu WHERE group_id IN
+        (SELECT group_id FROM sys_user_group WHERE
+        user_id=#{userId})) and weight =2
+        ORDER BY sort ASC
+    </select>
+</mapper>

+ 25 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysUserAccountMapper.xml

@@ -0,0 +1,25 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysUserAccountMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysUserAccount">
+        <id column="id" property="id" />
+        <result column="user_name" property="userName" />
+        <result column="male" property="male" />
+        <result column="job" property="job" />
+        <result column="mobile" property="mobile" />
+        <result column="account_class" property="accountClass" />
+        <result column="account_type" property="accountType" />
+        <result column="account_name" property="accountName" />
+        <result column="password" property="password" />
+        <result column="login_time" property="loginTime" />
+        <result column="farm_code" property="farmCode" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_name, male, job, mobile, account_class, account_type, login_name, password, login_time, farm_code
+    </sql>
+
+</mapper>

+ 17 - 0
huimv-cattle/src/main/java/com/huimv/cattle/mapper/xml/SysUserGroupMapper.xml

@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
+<mapper namespace="com.huimv.cattle.mapper.SysUserGroupMapper">
+
+    <!-- 通用查询映射结果 -->
+    <resultMap id="BaseResultMap" type="com.huimv.cattle.pojo.SysUserGroup">
+        <id column="id" property="id" />
+        <result column="user_id" property="userId" />
+        <result column="group_id" property="groupId" />
+    </resultMap>
+
+    <!-- 通用查询结果列 -->
+    <sql id="Base_Column_List">
+        id, user_id, group_id
+    </sql>
+
+</mapper>

+ 42 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysFarm.java

@@ -0,0 +1,42 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysFarm implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String farmName;
+
+    private String farmCode;
+
+    private String linkman;
+
+    private String phone;
+
+    private String address;
+
+    private Integer farmStatus;
+
+    private String remark;
+
+
+}

+ 48 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysFarmService.java

@@ -0,0 +1,48 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysFarmService implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String farmCode;
+
+    private String farmName;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date startDate;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date endDate;
+
+    private Integer serviceCycle;
+
+    private Integer serviceDays;
+
+    private Integer serviceStatus;
+
+    private Integer currentStatus;
+
+
+}

+ 42 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysGroup.java

@@ -0,0 +1,42 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysGroup implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String groupName;
+
+    /**
+     * 平台权限组:1、牧场权限组:2
+     */
+    private Integer groupType;
+
+    /**
+     * 管理员权限组:1、普通用户权限组:2
+     */
+    private Integer groupClass;
+
+    private String farmCode;
+
+
+}

+ 33 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysGroupMenu.java

@@ -0,0 +1,33 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysGroupMenu implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer groupId;
+
+    private Integer menuId;
+    private Integer isAll;
+
+
+}

+ 48 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysMenu.java

@@ -0,0 +1,48 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysMenu implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private String title;
+
+    private String url;
+
+    private String remark;
+
+    private Integer parentId;
+
+    private Integer sort;
+
+    private Integer weight;
+
+    private String permission;
+
+    private Integer ifShow;
+
+    private Integer menuType;
+
+    private Object children;
+
+
+}

+ 53 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysUserAccount.java

@@ -0,0 +1,53 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import com.fasterxml.jackson.annotation.JsonFormat;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+import java.util.Date;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysUserAccount implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Long id;
+
+    private String userName;
+
+    private Integer male;
+
+    private String job;
+
+    private String mobile;
+
+    private Integer accountClass;
+
+    private Integer accountType;
+
+    private String accountName;
+
+    private String password;
+
+    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss",timezone = "GMT+8")
+    private Date loginTime;
+
+    private String farmCode;
+
+    private Integer loginStatus;
+
+
+}

+ 32 - 0
huimv-cattle/src/main/java/com/huimv/cattle/pojo/SysUserGroup.java

@@ -0,0 +1,32 @@
+package com.huimv.cattle.pojo;
+
+import com.baomidou.mybatisplus.annotation.IdType;
+import com.baomidou.mybatisplus.annotation.TableId;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.io.Serializable;
+
+/**
+ * <p>
+ * 
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Data
+@EqualsAndHashCode(callSuper = false)
+public class SysUserGroup implements Serializable {
+
+    private static final long serialVersionUID=1L;
+
+      @TableId(value = "id", type = IdType.AUTO)
+    private Integer id;
+
+    private Integer userId;
+
+    private Integer groupId;
+
+
+}

+ 33 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysFarmService.java

@@ -0,0 +1,33 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysFarm;
+import com.huimv.common.utils.Result;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysFarmService extends IService<SysFarm> {
+
+    Result initFarmFlow(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result listFarm(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result newFarm(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result editFarm(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result removeFarm(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result resetPassword(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result getAllFarmId(HttpServletRequest request, Map<String, String> paramsMap);
+}

+ 31 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysFarmServiceService.java

@@ -0,0 +1,31 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.common.utils.Result;
+import com.huimv.cattle.pojo.SysFarmService;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysFarmServiceService extends IService<SysFarmService> {
+
+    Result listAllService(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result listMyService(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result newService(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException;
+
+    Result removeService(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result timeoutService(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result cancelService(HttpServletRequest request, Map<String, String> paramsMap);
+}

+ 22 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysGroupMenuService.java

@@ -0,0 +1,22 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysGroupMenu;
+import com.huimv.common.utils.Result;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysGroupMenuService extends IService<SysGroupMenu> {
+
+    Result saveGroupMenu(Map<String, String> paramsMap);
+
+    Result getMenuByGroupId(Map<String, String> paramsMap);
+}

+ 29 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysGroupService.java

@@ -0,0 +1,29 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysGroup;
+import com.huimv.common.utils.Result;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysGroupService extends IService<SysGroup> {
+
+    Result listGroup(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result newGroup(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result editGroup(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result removeGroup(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result listByUserId(HttpServletRequest request, Map<String, String> paramsMap);
+}

+ 32 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysMenuService.java

@@ -0,0 +1,32 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysMenu;
+import com.huimv.common.utils.Result;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysMenuService extends IService<SysMenu> {
+
+    Result list(Map<String, String> paramMap);
+
+    Result newMenu(Map<String, String> paramMap);
+
+    Result editMenu(Map<String, String> paramMap);
+
+    Result removeMenu(Map<String, String> paramMap);
+    
+    Result getMyMenu(HttpServletRequest request, Map<String, String> paramMap);
+
+    List<String> getMyButton(HttpServletRequest request, Map<String, String> paramMap);
+}

+ 40 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysUserAccountService.java

@@ -0,0 +1,40 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysUserAccount;
+import com.huimv.common.utils.Result;
+
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysUserAccountService extends IService<SysUserAccount> {
+
+    Result login(HttpServletRequest req, Map<String, String> paramsMap);
+
+    Result logout(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result newUserAccount(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result editUserAccount(Map<String, String> paramsMap);
+
+    Result removeUserAccount(Map<String, String> paramsMap);
+
+    Result listUserAccount(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException;
+
+    Result resetPassword(Map<String, String> paramsMap);
+
+    Result loginApp(HttpServletRequest request, Map<String, String> paramsMap);
+
+    Result listPlatformUserAndFarmAdmin(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException;
+
+    Result resetMyPassword(HttpServletRequest request, Map<String, String> paramsMap);
+}

+ 22 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/SysUserGroupService.java

@@ -0,0 +1,22 @@
+package com.huimv.cattle.service;
+
+import com.baomidou.mybatisplus.extension.service.IService;
+import com.huimv.cattle.pojo.SysUserGroup;
+import com.huimv.common.utils.Result;
+
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+public interface SysUserGroupService extends IService<SysUserGroup> {
+
+    Result saveUserGroup(Map<String, String> paramsMap);
+
+    Result getGroupByUserId(Map<String, String> paramsMap);
+}

+ 164 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysFarmServiceImpl.java

@@ -0,0 +1,164 @@
+package com.huimv.cattle.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+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 com.huimv.breed.common.utils.ResultUtil;
+import com.huimv.cattle.mapper.SysFarmMapper;
+import com.huimv.cattle.mapper.SysUserAccountMapper;
+import com.huimv.cattle.pojo.SysFarm;
+import com.huimv.cattle.pojo.SysUserAccount;
+import com.huimv.cattle.service.SysFarmService;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+//import com.huimv.saas.admin.mapper.SysFarmMapper;
+//import com.huimv.saas.admin.mapper.SysUserAccountMapper;
+//import com.huimv.saas.admin.pojo.SysFarm;
+//import com.huimv.saas.admin.pojo.SysUserAccount;
+//import com.huimv.saas.admin.service.SysFarmService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysFarmServiceImpl extends ServiceImpl<SysFarmMapper, SysFarm> implements SysFarmService {
+    @Resource
+    private SysFarmMapper sysFarmMapper;
+    @Resource
+    private SysUserAccountMapper sysUserAccountMapper;
+    @Resource
+    private ResultUtil resultUtil;
+    @Value("${manager.defaultPassword}")
+    private String defaultPassword;
+
+    @Override
+    public Result initFarmFlow(HttpServletRequest request, Map<String, String> paramsMap) {
+        //--step1:创建牧场;
+        //--step2:根据默认牧场管理员权限组创建牧场账号;
+
+        return null;
+    }
+
+    @Override
+    public Result listFarm(HttpServletRequest request, Map<String, String> paramsMap) {
+        String pageNo = paramsMap.get("pageNo")+"";
+        if (pageNo == null) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize")+"";
+        if (pageSize == null) {
+            pageSize = "10";
+        }
+        //牧场名称
+        String farmName = paramsMap.get("farmName");
+        QueryWrapper<SysFarm> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotBlank(farmName),"farm_name",farmName);
+        queryWrapper.orderByDesc("id");
+        Page<SysFarm> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS,sysFarmMapper.selectPage(page,queryWrapper));
+    }
+
+    @Override
+    public Result newFarm(HttpServletRequest request, Map<String, String> paramsMap) {
+        //
+        String farmStatus = paramsMap.get("farmStatus");
+        if(StringUtils.isBlank(farmStatus)){
+            farmStatus = "1";
+        }
+        String farmCode = paramsMap.get("farmCode");
+        List<SysFarm> farms = sysFarmMapper.selectList(new QueryWrapper<SysFarm>().eq("farm_code", farmCode));
+        System.out.println(farms.toString());
+        if (ObjectUtil.isNotEmpty(farms)){
+            return new Result(10010,"牧场编号已存在",false);
+        }
+
+
+        SysFarm sysFarm = new SysFarm();
+        sysFarm.setFarmName(paramsMap.get("farmName"));
+        sysFarm.setFarmCode(paramsMap.get("farmCode"));
+        sysFarm.setLinkman(paramsMap.get("linkman"));
+        sysFarm.setPhone(paramsMap.get("phone"));
+        sysFarm.setAddress(paramsMap.get("address"));
+        sysFarm.setFarmStatus(Integer.parseInt(farmStatus));
+        sysFarm.setRemark(paramsMap.get("remark"));
+        return resultUtil.getResult(sysFarmMapper.insert(sysFarm));
+    }
+
+    @Override
+    public Result editFarm(HttpServletRequest request, Map<String, String> paramsMap) {
+        //
+        String farmStatus = paramsMap.get("farmStatus");
+        if(StringUtils.isBlank(farmStatus)){
+            farmStatus = "1";
+        }
+        SysFarm sysFarm = new SysFarm();
+        sysFarm.setId(Integer.parseInt(paramsMap.get("id")));
+        sysFarm.setFarmName(paramsMap.get("farmName"));
+        sysFarm.setFarmCode(paramsMap.get("farmCode"));
+        sysFarm.setLinkman(paramsMap.get("linkman"));
+        sysFarm.setPhone(paramsMap.get("phone"));
+        sysFarm.setAddress(paramsMap.get("address"));
+        sysFarm.setFarmStatus(Integer.parseInt(farmStatus));
+        sysFarm.setRemark(paramsMap.get("remark"));
+        return resultUtil.getResult(sysFarmMapper.updateById(sysFarm));
+    }
+
+    @Override
+    public Result removeFarm(HttpServletRequest request, Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        String[] idArray = ids.split(",");
+        List<String> idList= Arrays.asList(idArray);
+        return resultUtil.getResult(sysFarmMapper.deleteBatchIds(idList));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result resetPassword(HttpServletRequest request, Map<String, String> paramsMap) {
+        String ids = paramsMap.get("farmCodes");
+        String[] idArray = ids.split(",");
+        int rows = 0;
+        for(String id:idArray){
+            SysUserAccount SysUserAccount = new SysUserAccount();
+            SysUserAccount.setFarmCode(id);
+            SysUserAccount.setPassword(defaultPassword);
+            rows += sysUserAccountMapper.updateById(SysUserAccount);
+        }
+        return resultUtil.getResult(rows);
+    }
+
+    @Override
+    public Result getAllFarmId(HttpServletRequest request, Map<String, String> paramsMap) {
+        QueryWrapper<SysFarm> queryWrapper = new QueryWrapper<>();
+        queryWrapper.orderByDesc("id");
+        List<SysFarm> sysFarmList = sysFarmMapper.selectList(queryWrapper);
+        StringBuilder idSb = new StringBuilder();
+        for(SysFarm farmData:sysFarmList){
+            if(idSb.length()>0){
+                idSb.append(",");
+            }
+            idSb.append(farmData.getFarmCode());
+        }
+        if(idSb.length()>0){
+            return new Result(ResultCode.SUCCESS,idSb.toString());
+        }else{
+            return new Result(ResultCode.FAIL);
+        }
+    }
+}

+ 183 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysFarmServiceServiceImpl.java

@@ -0,0 +1,183 @@
+package com.huimv.cattle.service.impl;
+
+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 com.huimv.breed.common.utils.ConstUtil;
+//import com.huimv.breed.common.utils.DateUtil;
+//import com.huimv.breed.common.utils.ResultUtil;
+import com.huimv.cattle.utils.ConstUtil;
+import com.huimv.cattle.utils.DateUtil;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+import com.huimv.cattle.mapper.SysFarmMapper;
+import com.huimv.cattle.mapper.SysFarmServiceMapper;
+import com.huimv.cattle.pojo.SysFarm;
+import com.huimv.cattle.pojo.SysFarmService;
+import com.huimv.cattle.service.SysFarmServiceService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysFarmServiceServiceImpl extends ServiceImpl<SysFarmServiceMapper, SysFarmService> implements SysFarmServiceService {
+    @Resource
+    private SysFarmServiceMapper sysFarmServiceMapper;
+    @Resource
+    private SysFarmMapper sysFarmMapper;
+    @Resource
+    private ResultUtil resultUtil;
+
+    @Override
+    public Result listAllService(HttpServletRequest request, Map<String, String> paramsMap) {
+        String pageNo = paramsMap.get("pageNo") + "";
+        if (pageNo == null) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize") + "";
+        if (pageSize == null) {
+            pageSize = "10";
+        }
+        //牧场名称
+        String farmName = paramsMap.get("farmName");
+        QueryWrapper<SysFarmService> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotBlank(farmName), "farm_name", farmName);
+        queryWrapper.orderByDesc("id");
+        Page<SysFarmService> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS, sysFarmServiceMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    public Result listMyService(HttpServletRequest request, Map<String, String> paramsMap) {
+        String pageNo = paramsMap.get("pageNo") + "";
+        if (pageNo == null) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize") + "";
+        if (pageSize == null) {
+            pageSize = "10";
+        }
+        //牧场名称
+        String farmCode = paramsMap.get("farmCode");
+        QueryWrapper<SysFarmService> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(farmCode), "farm_code", farmCode);
+        Page<SysFarmService> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS, sysFarmServiceMapper.selectPage(page, queryWrapper));
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result newService(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException {
+        //--Logic Rule:
+        //--服务周期期间不能重叠;
+        //--当前只能有一个有效期(添加最新有效期的时候,将其余的都是为无效)
+        //--添加之前先判断新的有效期是否合格。
+        //--End
+//        String farmCode = request.getHeader("farmCode");
+        String farmCode =    paramsMap.get("farmCode");
+        DateUtil dateUtil = new DateUtil();
+        Date currentStartDate = dateUtil.parseDate(paramsMap.get("startDate"));
+        int serviceCycle = Integer.parseInt(paramsMap.get("serviceCycle"));
+        int serviceStatus = Integer.parseInt(paramsMap.get("serviceStatus"));
+
+        //Step1:读取当前周期,先判断日期是否合理
+        QueryWrapper<SysFarmService> queryWrapperFarmService = new QueryWrapper<>();
+        queryWrapperFarmService.eq("farm_code", farmCode);
+//        queryWrapperFarmService.eq("current_service", "1");
+        queryWrapperFarmService.orderByDesc("id");
+        List<SysFarmService> sysFarmServiceList = sysFarmServiceMapper.selectList(queryWrapperFarmService);
+        if (sysFarmServiceList.size() == 0) {
+            //Step2:不存在服务周期,直接插入最新的服务周期记录
+            saveNewServiceCycle(farmCode, currentStartDate, serviceCycle, serviceStatus);
+            return resultUtil.getResult(1);
+        } else {
+            //判断当前开始的服务周期是否晚于当前系统中最后一条的结束日期
+            SysFarmService lastSysFarmService = sysFarmServiceList.get(0);
+            Date lastEndDate = lastSysFarmService.getEndDate();
+            if (currentStartDate.after(lastEndDate)) {
+                //Step2:插入最新的服务周期记录
+                saveNewServiceCycle(farmCode, currentStartDate, serviceCycle, serviceStatus);
+
+                //Step3:将已经存在记录的周期状态设置为0(非当前周期)
+                lastSysFarmService.setCurrentStatus(0);
+                sysFarmServiceMapper.updateById(lastSysFarmService);
+                return resultUtil.getResult(1);
+            } else {
+                return new Result(ConstUtil.ERR_SERVICE_SAME_CODE, ConstUtil.ERR_SERVICE_SAME_INFO, false);
+            }
+        }
+    }
+
+    //保存新的服务周期
+    private void saveNewServiceCycle(String farmCode, Date currentStartDate, Integer serviceCycle, Integer serviceStatus) {
+        SysFarm sysFarm = sysFarmMapper.selectOne(new QueryWrapper<SysFarm>().eq("farm_code", farmCode));
+        SysFarmService sysFarmService = new SysFarmService();
+        sysFarmService.setFarmName(sysFarm.getFarmName());
+        sysFarmService.setFarmCode(farmCode);
+        sysFarmService.setStartDate(currentStartDate);
+        sysFarmService.setEndDate(cn.hutool.core.date.DateUtil.offsetMonth(currentStartDate, serviceCycle));
+        sysFarmService.setServiceCycle(serviceCycle);
+//        sysFarmService.setServiceDays(Integer.parseInt(paramsMap.get("serviceDays")));
+        sysFarmService.setServiceStatus(serviceStatus);
+        sysFarmService.setCurrentStatus(1);
+        sysFarmServiceMapper.insert(sysFarmService);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result removeService(HttpServletRequest request, Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        String[] idArray = ids.split(",");
+        List<String> idList = Arrays.asList(idArray);
+        sysFarmServiceMapper.deleteBatchIds(idList);
+        //将最后一条记录的“是否当前周期”设置为1(当前服务周期)
+        String farmCode = request.getHeader("farmCode");
+        QueryWrapper<SysFarmService> queryWrapperFarmService = new QueryWrapper<>();
+        queryWrapperFarmService.eq("farm_code", farmCode);
+        queryWrapperFarmService.orderByDesc("id");
+        List<SysFarmService> sysFarmServiceList = sysFarmServiceMapper.selectList(queryWrapperFarmService);
+        if (sysFarmServiceList.size() > 0) {
+            SysFarmService lastSysFarmService = sysFarmServiceList.get(0);
+            lastSysFarmService.setCurrentStatus(1);
+            sysFarmServiceMapper.updateById(lastSysFarmService);
+        }
+        return resultUtil.getResult(1);
+    }
+
+    @Override
+    public Result timeoutService(HttpServletRequest request, Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        String serviceStatus = paramsMap.get("serviceStatus");
+        SysFarmService sysFarmService = new SysFarmService();
+        sysFarmService.setId(Integer.parseInt(id));
+        sysFarmService.setServiceStatus(Integer.parseInt(serviceStatus));
+        return resultUtil.getResult(sysFarmServiceMapper.updateById(sysFarmService));
+    }
+
+    @Override
+    public Result cancelService(HttpServletRequest request, Map<String, String> paramsMap) {
+        String id = paramsMap.get("id");
+        String serviceStatus = paramsMap.get("serviceStatus");
+        SysFarmService sysFarmService = new SysFarmService();
+        sysFarmService.setId(Integer.parseInt(id));
+        sysFarmService.setServiceStatus(Integer.parseInt(serviceStatus));
+        return resultUtil.getResult(sysFarmServiceMapper.updateById(sysFarmService));
+    }
+}

+ 138 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysGroupMenuServiceImpl.java

@@ -0,0 +1,138 @@
+package com.huimv.cattle.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import com.huimv.cattle.mapper.SysGroupMenuMapper;
+import com.huimv.cattle.pojo.SysGroupMenu;
+import com.huimv.cattle.service.SysGroupMenuService;
+import com.huimv.cattle.utils.ConstUtil;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysGroupMenuServiceImpl extends ServiceImpl<SysGroupMenuMapper, SysGroupMenu> implements SysGroupMenuService {
+    @Resource
+    private SysGroupMenuMapper sysGroupMenuMapper;
+
+    @Resource
+    private ResultUtil resultUtil;
+
+    // 事务处理
+     @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result saveGroupMenu(Map<String, String> paramsMap) {
+
+         String groupId = paramsMap.get("groupId");
+         String isAll = paramsMap.get("isAll");
+         String menuIds = paramsMap.get("menuIds");
+         QueryWrapper<SysGroupMenu> queryWrapper = new QueryWrapper<>();
+         queryWrapper.eq(StringUtils.isNotBlank(groupId),"group_id",groupId);
+         sysGroupMenuMapper.delete(queryWrapper);
+         if (com.baomidou.mybatisplus.core.toolkit.StringUtils.isNotBlank(menuIds)) {
+             String[] menuIdsArray = menuIds.split(",");
+             String[] split = isAll.split(",");
+             boolean isAlla = StringUtils.isNotBlank(isAll);
+             for (int a = 0; a < menuIdsArray.length; a++) {
+                 SysGroupMenu groupMenu = new SysGroupMenu();
+                 groupMenu.setGroupId(Integer.parseInt(groupId));
+                 groupMenu.setMenuId(Integer.parseInt(menuIdsArray[a]));
+                 if (isAlla){
+                     for (String s : split) {
+                         if (groupMenu.getMenuId() == Integer.parseInt(s)) {
+                             groupMenu.setIsAll(1);
+                         }
+                     }
+                 }
+
+                 sysGroupMenuMapper.insert(groupMenu);
+             }
+
+
+         }
+
+
+         return resultUtil.getResult(1);
+
+     }
+    /*@Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result saveGroupMenu(Map<String, String> paramsMap) {
+        String groupId = paramsMap.get("groupId");
+        String isAll = paramsMap.get("isAll");
+        String[] isAllArray = isAll.split(",");
+        String menuIds = paramsMap.get("menuIds");
+        String[] menuArray = menuIds.split(",");
+        // 过滤上级菜单id
+        List<String> menuList = new ArrayList();
+        for(int a=0;a<menuArray.length;a++){
+            boolean isExist = false;
+            for(int b=0;b<isAllArray.length;b++){
+                if(menuArray[a].trim().equalsIgnoreCase(isAllArray[b])){
+                    isExist = true;
+                    break;
+                }
+            }
+            if(!isExist){
+                menuList.add(menuArray[a]);
+            }
+        }
+        //-- 删除权限组绑定才菜单 --//
+        QueryWrapper<SysGroupMenu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(groupId),"group_id",groupId);
+        sysGroupMenuMapper.delete(queryWrapper);
+        //-- 新增权限组绑定菜单 --//
+        int rows = 0;
+        for(int a=0;a<menuList.size();a++){
+            SysGroupMenu newSysGroupMenu = new SysGroupMenu();
+            newSysGroupMenu.setGroupId(Integer.parseInt(groupId));
+            newSysGroupMenu.setMenuId(Integer.parseInt(menuList.get(a)));
+            rows += sysGroupMenuMapper.insert(newSysGroupMenu);
+        }
+        return resultUtil.getResult(rows);
+    }*/
+
+    /**
+     * @Method      : getMenuByGroupId
+     * @Description : 根据权限组获取菜单
+     * @Params      : [paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/10       
+     * @Time        : 14:07
+     */
+    @Override
+    public Result getMenuByGroupId(Map<String, String> paramsMap) {
+        String groupId = paramsMap.get("groupId");
+        QueryWrapper<SysGroupMenu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(groupId),"group_id",groupId);
+        List<SysGroupMenu> sysGroupMenuList = sysGroupMenuMapper.selectList(queryWrapper);
+        if(sysGroupMenuList.size() == 0){
+            return new Result(ConstUtil.ERR_MYMENU_EMPTY_CODE,ConstUtil.ERR_MYMENU_EMPTY_INFO,false);
+        }
+        StringBuilder menuIdSb = new StringBuilder();
+        for(SysGroupMenu groupMenu:sysGroupMenuList){
+            menuIdSb.append(groupMenu.getMenuId());
+            if(menuIdSb.length()>0){
+                menuIdSb.append(",");
+            }
+        }
+        return new Result(ResultCode.SUCCESS,menuIdSb.toString());
+    }
+}

+ 146 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysGroupServiceImpl.java

@@ -0,0 +1,146 @@
+package com.huimv.cattle.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+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 com.huimv.cattle.mapper.SysGroupMapper;
+import com.huimv.cattle.mapper.SysUserGroupMapper;
+import com.huimv.cattle.pojo.SysGroup;
+import com.huimv.cattle.pojo.SysUserGroup;
+import com.huimv.cattle.service.SysGroupService;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.Arrays;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ *  服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysGroupServiceImpl extends ServiceImpl<SysGroupMapper, SysGroup> implements SysGroupService {
+    @Resource
+    private ResultUtil resultUtil;
+    @Resource
+    private SysGroupMapper sysGroupMapper;
+
+    @Resource
+    private SysUserGroupMapper sysUserGroupMapper;
+
+    /**
+     * @Method      : listGroup
+     * @Description : 
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9       
+     * @Time        : 19:35
+     */
+    @Override
+    public Result listGroup(HttpServletRequest request, Map<String, String> paramsMap) {
+        String pageNo = paramsMap.get("pageNo")+"";
+        if (StringUtils.isBlank(pageNo)) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize")+"";
+        if (StringUtils.isBlank(pageSize)) {
+            pageSize = "10";
+        }
+        String farmCode = request.getHeader("farmCode");
+        String groupClass = paramsMap.get("groupClass");
+        String groupName = paramsMap.get("groupName");
+        QueryWrapper<SysGroup> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNoneBlank(farmCode),"farm_code",farmCode);
+        queryWrapper.like(StringUtils.isNotBlank(groupName),"group_name",groupName);
+        queryWrapper.eq(StringUtils.isNotBlank(groupClass),"group_class",groupClass);
+        queryWrapper.orderByDesc("id");
+        Page<SysGroup> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        return new Result(ResultCode.SUCCESS,sysGroupMapper.selectPage(page,queryWrapper));
+    }
+
+    /**
+     * @Method      : newGroup
+     * @Description : 
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9       
+     * @Time        : 19:35
+     */
+    @Override
+    public Result newGroup(HttpServletRequest request, Map<String, String> paramsMap) {
+        SysGroup sysGroup = new SysGroup();
+        String farmCode = request.getHeader("farmIds");
+        sysGroup.setGroupName(paramsMap.get("groupName"));
+        sysGroup.setGroupClass(Integer.parseInt(paramsMap.get("groupClass")));
+        sysGroup.setGroupType(Integer.parseInt(paramsMap.get("groupType")));
+        sysGroup.setFarmCode(farmCode);
+        return resultUtil.getResult(sysGroupMapper.insert(sysGroup));
+    }
+
+    /**
+     * @Method      : editGroup
+     * @Description : 
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9       
+     * @Time        : 19:35
+     */
+    @Override
+    public Result editGroup(HttpServletRequest request, Map<String, String> paramsMap) {
+        SysGroup sysGroup = new SysGroup();
+        sysGroup.setId(Integer.parseInt(paramsMap.get("id")));
+        sysGroup.setGroupName(paramsMap.get("groupName"));
+//        sysGroup.setGroupClass(Integer.parseInt(paramsMap.get("groupClass")));
+//        sysGroup.setGroupType(Integer.parseInt(paramsMap.get("groupType")));
+        return resultUtil.getResult(sysGroupMapper.updateById(sysGroup));
+    }
+
+    /**
+     * @Method      : removeGroup
+     * @Description : 
+     * @Params      : [request, paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/9       
+     * @Time        : 19:35
+     */
+    @Override
+    public Result removeGroup(HttpServletRequest request, Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        String[] idArray = ids.split(",");
+        List<String> idList= Arrays.asList(idArray);
+        return resultUtil.getResult(sysGroupMapper.deleteBatchIds(idList));
+    }
+
+    @Override
+    public Result listByUserId(HttpServletRequest request, Map<String, String> paramsMap) {
+        String userId = paramsMap.get("userId");
+
+        List<SysUserGroup> userGroups = sysUserGroupMapper.selectList(new QueryWrapper<SysUserGroup>().eq("user_id", userId));
+        if (ObjectUtil.isNotEmpty(userGroups)){
+            return new Result(ResultCode.SUCCESS, userGroups.get(0).getGroupId());
+        }else {
+            return new Result(10001,"未授权角色",false);
+        }
+
+
+    }
+}

+ 283 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysMenuServiceImpl.java

@@ -0,0 +1,283 @@
+package com.huimv.cattle.service.impl;
+
+import com.alibaba.fastjson.JSON;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.huimv.breed.common.token.TokenSign;
+//import com.huimv.breed.common.utils.ConstUtil;
+//import com.huimv.breed.common.utils.ResultUtil;
+import com.huimv.cattle.mapper.SysMenuMapper;
+import com.huimv.cattle.pojo.SysMenu;
+import com.huimv.cattle.service.SysMenuService;
+import com.huimv.cattle.token.TokenSign;
+import com.huimv.cattle.utils.ConstUtil;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+//import com.huimv.saas.admin.mapper.SysMenuMapper;
+//import com.huimv.saas.admin.pojo.SysMenu;
+//import com.huimv.saas.admin.service.SysMenuService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Map;
+import java.util.Objects;
+import java.util.stream.Collectors;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysMenuServiceImpl extends ServiceImpl<SysMenuMapper, SysMenu> implements SysMenuService {
+    @Resource
+    private SysMenuMapper sysMenuMapper;
+    @Resource
+    private ResultUtil resultUtil;
+
+    @Override
+    public Result newMenu(Map<String, String> paramMap) {
+        //
+        String weight = paramMap.get("weight");
+        if(StringUtils.isBlank(weight)){
+            weight = "0";
+        }
+        //parentId
+        String parentId = paramMap.get("parentId");
+        if(StringUtils.isBlank(parentId)){
+            parentId = "0";
+        }
+        //sort
+        String sort = paramMap.get("sort");
+        if(StringUtils.isBlank(sort)){
+            sort = "0";
+        }
+        //ifShow
+        String ifShow = paramMap.get("ifShow");
+        if(StringUtils.isBlank(ifShow)){
+            ifShow = "1";
+        }
+        //menuType
+        String menuType = paramMap.get("menuType");
+        if(StringUtils.isBlank(menuType)){
+            menuType = "1";
+        }
+        SysMenu newSysMenu = new SysMenu();
+        newSysMenu.setTitle(paramMap.get("title"));
+        newSysMenu.setUrl(paramMap.get("url"));
+        newSysMenu.setWeight(Integer.parseInt(weight));
+        newSysMenu.setParentId(Integer.parseInt(parentId));
+        newSysMenu.setSort(Integer.parseInt(sort));
+        newSysMenu.setPermission(paramMap.get("permission") );
+        newSysMenu.setIfShow(Integer.parseInt(ifShow));
+        newSysMenu.setMenuType(Integer.parseInt(menuType));
+        return resultUtil.getResult(sysMenuMapper.insert(newSysMenu));
+    }
+
+    @Override
+    public Result editMenu(Map<String, String> paramMap) {
+        //
+        String weight = paramMap.get("weight");
+        if(StringUtils.isBlank(weight)){
+            weight = "0";
+        }
+        //parentId
+        String parentId = paramMap.get("parentId");
+        if(StringUtils.isBlank(parentId)){
+            parentId = "0";
+        }
+        //sort
+        String sort = paramMap.get("sort");
+        if(StringUtils.isBlank(sort)){
+            sort = "0";
+        }
+        //ifShow
+        String ifShow = paramMap.get("ifShow");
+        if(StringUtils.isBlank(ifShow)){
+            ifShow = "1";
+        }
+        //menuType
+        String menuType = paramMap.get("menuType");
+        if(StringUtils.isBlank(menuType)){
+            menuType = "1";
+        }
+        SysMenu newSysMenu = new SysMenu();
+        newSysMenu.setId(Integer.parseInt(paramMap.get("id") + ""));
+        newSysMenu.setTitle(paramMap.get("title"));
+        newSysMenu.setUrl(paramMap.get("url"));
+        newSysMenu.setWeight(Integer.parseInt(weight));
+        newSysMenu.setParentId(Integer.parseInt(parentId));
+        newSysMenu.setSort(Integer.parseInt(sort));
+        newSysMenu.setPermission(paramMap.get("permission") );
+        newSysMenu.setIfShow(Integer.parseInt(ifShow));
+//        newSysMenu.setMenuType(Integer.parseInt(menuType));
+        return resultUtil.getResult(sysMenuMapper.updateById(newSysMenu));
+    }
+
+    @Override
+    public Result removeMenu(Map<String, String> paramMap) {
+        QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("parent_id", Integer.parseInt(paramMap.get("id") + ""));
+        if (sysMenuMapper.selectCount(queryWrapper) > 0) {
+            return new Result(ConstUtil.ERR_CHILDMENU_CODE, ConstUtil.ERR_CHILDMENU_INFO, false);
+        } else {
+            return resultUtil.getResult(sysMenuMapper.deleteById(Integer.parseInt(paramMap.get("id") + "")));
+        }
+    }
+
+    /**
+     * @Method : listMyMenu
+     * @Description : 显示我的个人所有菜单
+     * @Params : [paramMap]
+     * @Return : com.huimv.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/10
+     * @Time : 9:47
+     */
+    @Override
+    public Result getMyMenu(HttpServletRequest request, Map<String, String> paramMap) {
+        //从header中获取参数uid
+//        String uid = request.getHeader("uid");
+        //从Body中获取参数
+//        String userId = paramMap.get("userId");
+        String userId = TokenSign.getMemberIdByJwtToken(request)+"";
+        List<SysMenu> myMenuList = new ArrayList<SysMenu>();
+        if (userId.equals("1")){
+            myMenuList = sysMenuMapper.selectList(new QueryWrapper<SysMenu>().orderByAsc("sort"));
+        }else {
+            myMenuList = sysMenuMapper.getMyMenu(userId);
+        }
+
+//        List<SysMenu> myMenuList = sysMenuMapper.getMyMenu2(userId);
+        //--构建菜单树--//
+//        JSONArray menuTreeJa = _buildMenuTree(myMenuList);
+        List<SysMenu> menuTreeJa = _buildMenuTreeY(myMenuList);
+        return new Result(ResultCode.SUCCESS, menuTreeJa);
+    }
+
+    @Override
+    public List<String>  getMyButton(HttpServletRequest request,Map<String, String> paramMap) {
+        Integer userId = TokenSign.getMemberIdByJwtToken(request);
+
+        if (userId == 1){
+            List<SysMenu> menus = sysMenuMapper.selectList(null);
+            List<String> list = new ArrayList<>();
+            for (SysMenu menu : menus) {
+                list.add(menu.getPermission());
+            }
+            return list;
+        }
+        return sysMenuMapper.getMyButton(userId);
+    }
+
+    /**
+     * @Method      : list
+     * @Description : 展示所有菜单
+     * @Params      : [paramMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/11       
+     * @Time        : 15:17
+     */
+    @Override
+    public Result list(Map<String, String> paramMap) {
+        String menuType = paramMap.get("menuType");
+        QueryWrapper<SysMenu> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(menuType),"menu_type", menuType);
+        queryWrapper.orderByAsc("sort");
+        List<SysMenu> allMenuList = sysMenuMapper.selectList(queryWrapper);
+        //构建菜单树
+//        JSONArray menuTreeJa = _buildMenuTree(allMenuList);
+        List<SysMenu> menuTreeJa = _buildMenuTreeY(allMenuList);
+        return new Result(ResultCode.SUCCESS, menuTreeJa);
+    }
+
+    //构建树
+    private List<SysMenu> _buildMenuTreeY(List<SysMenu> allMenuList) {
+
+        List<SysMenu> collect = allMenuList.stream().filter(m -> m.getParentId() == 0).map(
+                (m) -> {
+                    m.setChildren(getChildrenList(m, allMenuList));
+                    return m;
+                }
+        ).collect(Collectors.toList());
+        return collect;
+    }
+    public  List<SysMenu> getChildrenList(SysMenu tree, List<SysMenu> list){
+        List<SysMenu> children = list.stream().filter(item -> Objects.equals(item.getParentId(), tree.getId())).map(
+                (item) -> {
+                    item.setChildren(getChildrenList(item, list));
+                    return item;
+                }
+        ).collect(Collectors.toList());
+        return children;
+    }
+
+
+    //构建菜单树
+    private JSONArray _buildMenuTree(List<SysMenu> menuList) {
+        JSONArray rootMenuJa = new JSONArray();
+        List<SysMenu> nonRootNodeList = new ArrayList();
+        // 构建顶级菜单节点
+        for (SysMenu sysMenu : menuList) {
+            if (sysMenu.getParentId() == 0) {
+//                JSONObject rootJo = JSON.parseObject(JSON.toJSONString(sysMenu));
+                JSONObject rootJo = _createNode(sysMenu);
+                rootJo.put("children", new JSONArray());
+                rootMenuJa.add(rootJo);
+            } else {
+                nonRootNodeList.add(sysMenu);
+            }
+        }
+        // 构建非顶级菜单节点
+        for (SysMenu newMenu : nonRootNodeList) {
+            //新建菜单树节点
+            _appendMenuTreeNode(newMenu, rootMenuJa);
+        }
+        return rootMenuJa;
+    }
+
+    //创建新节点
+    public JSONObject _createNode(SysMenu sysMenu) {
+        JSONObject nodeJo = JSON.parseObject(JSON.toJSONString(sysMenu));
+        nodeJo.put("pid", sysMenu.getParentId());
+        nodeJo.put("value", sysMenu.getId());
+        return nodeJo;
+    }
+
+    //构建菜单树节点
+    private void _appendMenuTreeNode(SysMenu newMenu, JSONArray rootMenuJa) {
+        for (int a = 0; a < rootMenuJa.size(); a++) {
+            JSONObject rootJo = rootMenuJa.getJSONObject(a);
+            if (newMenu.getParentId().equals(rootJo.getInteger("id"))) {
+                JSONArray childrenJa = rootJo.getJSONArray("children");
+                if (childrenJa == null) {
+                    childrenJa = new JSONArray();
+//                    childrenJa.add(JSON.parseObject(JSON.toJSONString(newMenu)));
+                    childrenJa.add(_createNode(newMenu));
+                    rootJo.put("children", childrenJa);
+                } else {
+//                    childrenJa.add(JSON.parseObject(JSON.toJSONString(newMenu)));
+                    childrenJa.add(_createNode(newMenu));
+                }
+            } else {
+                JSONArray childrenJa = rootJo.getJSONArray("children");
+                if (childrenJa != null && childrenJa.size() > 0) {
+                    //递归构建菜单树节点
+                    _appendMenuTreeNode(newMenu, childrenJa);
+                }
+            }
+        }
+    }
+}

+ 470 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysUserAccountServiceImpl.java

@@ -0,0 +1,470 @@
+package com.huimv.cattle.service.impl;
+
+import cn.hutool.core.util.ObjectUtil;
+import com.alibaba.fastjson.JSONArray;
+import com.alibaba.fastjson.JSONObject;
+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 com.huimv.cattle.mapper.SysFarmMapper;
+import com.huimv.cattle.mapper.SysFarmServiceMapper;
+import com.huimv.cattle.mapper.SysUserAccountMapper;
+import com.huimv.cattle.pojo.SysFarm;
+import com.huimv.cattle.pojo.SysFarmService;
+import com.huimv.cattle.pojo.SysUserAccount;
+import com.huimv.cattle.service.SysUserAccountService;
+import com.huimv.cattle.session.AccessToken;
+import com.huimv.cattle.token.TokenSign;
+import com.huimv.cattle.utils.ConstUtil;
+import com.huimv.cattle.utils.DateUtil;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.beans.factory.annotation.Value;
+//import org.springframework.data.redis.core.RedisTemplate;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
+import java.text.ParseException;
+import java.util.Arrays;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysUserAccountServiceImpl extends ServiceImpl<SysUserAccountMapper, SysUserAccount> implements SysUserAccountService {
+    @Resource
+    private SysUserAccountMapper sysUserAccountMapper;
+
+    @Resource
+    private SysFarmServiceMapper farmServiceMapper;
+    @Resource
+    private SysFarmMapper farmMapper;
+//    @Resource
+//    private RedisTemplate redisTemplate;
+    @Resource
+    private ResultUtil resultUtil;
+    @Value("${user.defaultPassword}")
+    private String defaultPassword;
+
+    @Override
+    public Result login(HttpServletRequest request, Map<String, String> paramsMap) {
+        String accountName = paramsMap.get("accountName");
+        String password = paramsMap.get("password");
+        String remoteHost = request.getRemoteHost();
+
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_name", accountName).eq("password", password);
+        SysUserAccount resultSysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
+        System.out.println("sysUserAccount=" + resultSysUserAccount);
+        if (resultSysUserAccount == null) {
+            //账号、密码错误
+            return new Result(ConstUtil.ERR_NO_EXIST_CODE, ConstUtil.ERR_NO_EXIST_INFO, false);
+        }
+        if (resultSysUserAccount.getLoginStatus() == 0) {
+            //牧场状态不能为中止服务状态(0)
+            return new Result(ConstUtil.ERR_FARM_TIMEOUT_CODE, ConstUtil.ERR_FARM_TIMEOUT_INFO, false);
+        } else if (resultSysUserAccount.getLoginStatus() == 2) {
+            //牧场状态不能为注销状态(2)
+            return new Result(ConstUtil.ERR_FARM_CANCEL_CODE, ConstUtil.ERR_FARM_CANCEL_INFO, false);
+        }
+
+        //判断服务状态
+        Integer accountClass = resultSysUserAccount.getAccountClass();
+        if (accountClass == 2) {
+            Date now = new Date();
+            List<SysFarmService> farmServices = farmServiceMapper.selectList(new QueryWrapper<SysFarmService>().eq("farm_code", resultSysUserAccount.getFarmCode()).ge("end_date", now).le("start_date", now));
+            if (ObjectUtil.isEmpty(farmServices)) {
+                return new Result(ConstUtil.ERR_FARM_OVERDUE_CODE, ConstUtil.ERR_FARM_OVERDUE_INFO, false);
+            }
+        }
+
+        //--更新当前登录状态 --//
+        resultSysUserAccount.setLoginTime(new Date());
+        sysUserAccountMapper.updateById(resultSysUserAccount);
+
+        //将当前账号加入到set集合当中(退出时从该集合删除该账号信息)
+//        _createLoginStatus(accountName);
+
+        //-- 构造token --//
+        AccessToken accessToken = new AccessToken();
+        Long id = resultSysUserAccount.getId();
+        String farmCode = resultSysUserAccount.getFarmCode();
+        accessToken.setAccountName(accountName);
+        accessToken.setCreated(new Date());
+        accessToken.setCode(null);
+        accessToken.setMessage("");
+        accessToken.setFarmId(farmCode);
+        System.out.println("login.farmCode >>>>>>>>>>>>>>>>>>> " + farmCode);
+        //构造token
+        String token = TokenSign.sign(accountName, id, farmCode, "");
+        accessToken.setToken(token);
+        accessToken.setId(id.intValue());
+        accessToken.setLoginIp(remoteHost);
+        accessToken.setUserName(resultSysUserAccount.getUserName());
+        accessToken.setType(null);
+        accessToken.setAccontClass(resultSysUserAccount.getAccountClass());
+        return new Result(ResultCode.SUCCESS, accessToken);
+    }
+
+//    private void _createLoginStatus(String accountName) {
+//        //-- 将有令牌的登录账户加入缓存集合 --//
+//        String key = "TOKEN:ACCOUNT:SET";
+////        redisTemplate.opsForValue().set(key, accountName);
+//        redisTemplate.opsForSet().add(key, accountName);
+//        System.out.println("_createLoginStatus");
+//    }
+
+    @Override
+    public Result logout(HttpServletRequest request, Map<String, String> paramsMap) {
+//        String accountName = paramsMap.get("accountName");
+//        String accountName = request.getHeader("accountName");
+//        String accountName2 = request.getQueryString();
+        //--将有令牌的登录账户从缓存集合中删除--//
+//        String key = "TOKEN:ACCOUNT:SET";
+//        redisTemplate.opsForSet().remove(key, accountName);
+//        return new Result(ResultCode.SUCCESS);
+        return null;
+    }
+
+    /**
+     * @Method : newUserAccount
+     * @Description : 创建用户账号
+     * @Params : [paramsMap]
+     * @Return : com.huimv.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/9
+     * @Time : 18:03
+     */
+    @Override
+    public Result newUserAccount(HttpServletRequest request, Map<String, String> paramsMap) {
+        //登录状态
+        String loginStatus = paramsMap.get("loginStatus");
+        if (StringUtils.isBlank(loginStatus)) {
+            loginStatus = "1";
+        }
+        String accountType = paramsMap.get("accountType");
+        String farmCode ="";
+        if ("1".equals(accountType)){
+            farmCode = paramsMap.get("farmCode");
+        }else {
+             farmCode = TokenSign.getFarmIds(request);
+        }
+        System.out.println(farmCode);
+        //查询判断是否有重名存在
+        QueryWrapper<SysUserAccount> queryWrapperUserAccount = new QueryWrapper<>();
+        queryWrapperUserAccount.eq("account_name", paramsMap.get("accountName"));
+        Long userCount = sysUserAccountMapper.selectCount(queryWrapperUserAccount);
+        if (userCount > 0) {
+            return new Result(ConstUtil.ERR_ACCOUNT_SAME_CODE, ConstUtil.ERR_ACCOUNT_SAME_INFO, false);
+        }
+        SysUserAccount userAccount = new SysUserAccount();
+        userAccount.setUserName(paramsMap.get("userName"));
+        userAccount.setMale(Integer.parseInt(paramsMap.get("male")));
+        userAccount.setJob(paramsMap.get("job"));
+        userAccount.setMobile(paramsMap.get("mobile"));
+        userAccount.setAccountClass(Integer.parseInt(paramsMap.get("accountClass")));
+        userAccount.setAccountType(Integer.parseInt(paramsMap.get("accountType")));
+        userAccount.setAccountName(paramsMap.get("accountName"));
+        userAccount.setPassword(paramsMap.get("password"));
+//        userAccount.setLoginTime(new java.sql.Date(new Date().getTime()));
+        userAccount.setFarmCode(farmCode);
+        userAccount.setLoginStatus(Integer.parseInt(loginStatus));
+        return resultUtil.getResult(sysUserAccountMapper.insert(userAccount));
+    }
+
+    /**
+     * @Method : editUserAccount
+     * @Description : 编辑用户账号
+     * @Params : [paramsMap]
+     * @Return : com.huimv.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/9
+     * @Time : 18:03
+     */
+    @Override
+    public Result editUserAccount(Map<String, String> paramsMap) {
+        //登录状态
+        String loginStatus = paramsMap.get("loginStatus");
+        if (StringUtils.isBlank(loginStatus)) {
+            loginStatus = "1";
+        }
+        //
+        String farmCode = paramsMap.get("farmCode");
+        if (StringUtils.isBlank(farmCode)) {
+            farmCode = "0";
+        }
+        String id = paramsMap.get("id");
+        SysUserAccount sysUserAccount = sysUserAccountMapper.selectById(id);
+        Date loginTime = sysUserAccount.getLoginTime();
+        SysUserAccount userAccount = new SysUserAccount();
+        userAccount.setId(Long.parseLong(id));
+        userAccount.setUserName(paramsMap.get("userName"));
+        userAccount.setMale(Integer.parseInt(paramsMap.get("male")));
+        userAccount.setJob(paramsMap.get("job"));
+        userAccount.setMobile(paramsMap.get("mobile"));
+        userAccount.setAccountClass(Integer.parseInt(paramsMap.get("accountClass")));
+        userAccount.setAccountType(Integer.parseInt(paramsMap.get("accountType")));
+        userAccount.setAccountName(paramsMap.get("accountName"));
+        userAccount.setPassword(paramsMap.get("password"));
+        userAccount.setLoginTime(loginTime);
+        userAccount.setLoginStatus(Integer.parseInt(loginStatus));
+        userAccount.setFarmCode(farmCode);
+        return resultUtil.getResult(sysUserAccountMapper.updateById(userAccount));
+    }
+
+    /**
+     * @Method : removeUserAccount
+     * @Description : 批量删除用户账户信息
+     * @Params : [paramsMap]
+     * @Return : com.huimv.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/9
+     * @Time : 17:45
+     */
+    @Override
+    public Result removeUserAccount(Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        String[] idArray = ids.split(",");
+        List<String> idList = Arrays.asList(idArray);
+
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper<>();
+        for (String id : idArray) {
+            queryWrapper.eq("id", id);
+            SysUserAccount userAccount = sysUserAccountMapper.selectOne(queryWrapper);
+            if (userAccount.getAccountClass() == 1 && userAccount.getAccountType() == 1) {
+                return new Result(ConstUtil.ERR_NO_DELETE_ADMIN_CODE, ConstUtil.ERR_NO_DELETE_ADMIN_INFO, false);
+            } else {
+                sysUserAccountMapper.deleteById(userAccount);
+            }
+        }
+        return new Result(ResultCode.SUCCESS);
+//        return resultUtil.getResult(sysUserAccountMapper.deleteBatchIds(idList));
+    }
+
+    /**
+     * @Method : listUserAccount
+     * @Description : 列表展示用户账户
+     * @Params : [paramsMap]
+     * @Return : com.huimv.common.utils.Result
+     * @Author : ZhuoNing
+     * @Date : 2022/10/9
+     * @Time : 18:02
+     */
+    @Override
+    public Result listUserAccount(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException {
+        //
+        Integer userId = TokenSign.getMemberIdByJwtToken(request);
+        DateUtil dateUtil = new DateUtil();
+        String pageNo = paramsMap.get("pageNo") + "";
+        if (pageNo == null) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize") + "";
+        if (pageSize == null) {
+            pageSize = "10";
+        }
+        String farmCode = request.getHeader("farmCode");
+        String accountName = paramsMap.get("accountName");
+        String userName = paramsMap.get("userName");
+        String accountClass = paramsMap.get("accountClass");
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.ne("id",userId);
+        queryWrapper.eq(StringUtils.isNotBlank(farmCode), "farm_code", farmCode);
+        queryWrapper.like(StringUtils.isNotBlank(accountName), "account_name", accountName);
+        queryWrapper.like(StringUtils.isNotBlank(userName), "user_name", userName);
+//        queryWrapper.eq(StringUtils.isNotBlank(accountClass),"account_class",accountClass);
+//        queryWrapper.and(wrapper ->wrapper.eq("account_class", 1).or().eq("account_type",1));
+        queryWrapper.and(wrapper -> wrapper.eq("account_type", 1).or().eq("account_type", 2));
+        queryWrapper.orderByDesc("login_time");
+        //
+        Page<SysUserAccount> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        Page<SysUserAccount> pageSysUserAccount = sysUserAccountMapper.selectPage(page, queryWrapper);
+        List<SysUserAccount> sysUserAccountList = pageSysUserAccount.getRecords();
+        JSONArray dataJa = new JSONArray();
+        for (SysUserAccount sysUserAccount : sysUserAccountList) {
+            String farmCode1 = sysUserAccount.getFarmCode();
+            SysFarm sysFarm = farmMapper.selectOne(new QueryWrapper<SysFarm>().eq("farm_code", farmCode1));
+            JSONObject dataJo = (JSONObject) JSONObject.toJSON(sysUserAccount);
+            dataJo.put("loginTime", dateUtil.formatDatetimeText(dataJo.getDate("loginTime")));
+            dataJo.put("farmName", "");
+            if (ObjectUtil.isNotEmpty(sysFarm)) {
+                dataJo.put("farmName", sysFarm.getFarmName());
+            }
+            dataJa.add(dataJo);
+        }
+        JSONObject resultJo = new JSONObject();
+        resultJo.put("records", dataJa);
+        resultJo.put("total", pageSysUserAccount.getTotal());
+        resultJo.put("size", pageSysUserAccount.getSize());
+        resultJo.put("current", pageSysUserAccount.getCurrent());
+        resultJo.put("orders", pageSysUserAccount.orders());
+        resultJo.put("optimizeCountSql", pageSysUserAccount.optimizeCountSql());
+        resultJo.put("searchCount", pageSysUserAccount.searchCount());
+        resultJo.put("countId", pageSysUserAccount.countId());
+        resultJo.put("maxLimit", pageSysUserAccount.maxLimit());
+        resultJo.put("pages", pageSysUserAccount.getPages());
+        return new Result(ResultCode.SUCCESS, resultJo);
+    }
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result resetPassword(Map<String, String> paramsMap) {
+        String ids = paramsMap.get("ids");
+        String[] idArray = ids.split(",");
+        int rows = 0;
+        for (String id : idArray) {
+            SysUserAccount SysUserAccount = new SysUserAccount();
+            SysUserAccount.setId(Long.parseLong(id));
+            SysUserAccount.setPassword(defaultPassword);
+            rows += sysUserAccountMapper.updateById(SysUserAccount);
+        }
+        return resultUtil.getResult(rows);
+    }
+
+    @Override
+    public Result loginApp(HttpServletRequest request, Map<String, String> paramsMap) {
+        String accountName = paramsMap.get("accountName");
+        String password = paramsMap.get("password");
+        String remoteHost = request.getRemoteHost();
+
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq("account_name", accountName).eq("password", password).eq("account_class", 2);
+        SysUserAccount resultSysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
+        System.out.println("sysUserAccount=" + resultSysUserAccount);
+        if (resultSysUserAccount == null) {
+            //账号、密码错误
+            return new Result(ConstUtil.ERR_NO_EXIST_CODE, ConstUtil.ERR_NO_EXIST_INFO, false);
+        }
+        if (resultSysUserAccount.getLoginStatus() == 0) {
+            //牧场状态不能为中止服务状态(0)
+            return new Result(ConstUtil.ERR_FARM_TIMEOUT_CODE, ConstUtil.ERR_FARM_TIMEOUT_INFO, false);
+        } else if (resultSysUserAccount.getLoginStatus() == 2) {
+            //牧场状态不能为注销状态(2)
+            return new Result(ConstUtil.ERR_FARM_CANCEL_CODE, ConstUtil.ERR_FARM_CANCEL_INFO, false);
+        }
+
+        //判断服务状态
+        Integer accountClass = resultSysUserAccount.getAccountClass();
+        if (accountClass == 2) {
+            Date now = new Date();
+            List<SysFarmService> farmServices = farmServiceMapper.selectList(new QueryWrapper<SysFarmService>().eq("farm_code", resultSysUserAccount.getFarmCode()).ge("end_date", now).le("start_date", now));
+
+            if (ObjectUtil.isEmpty(farmServices)) {
+                return new Result(100012, "该牧场未在服务有效期", false);
+            }
+
+        }
+
+
+        //--更新当前登录状态 --//
+        resultSysUserAccount.setLoginTime(new Date());
+        sysUserAccountMapper.updateById(resultSysUserAccount);
+
+        //将当前账号加入到set集合当中(退出时从该集合删除该账号信息)
+//        _createLoginStatus(accountName);
+
+        //-- 构造token --//
+        AccessToken accessToken = new AccessToken();
+        Long id = resultSysUserAccount.getId();
+        String farmCode = resultSysUserAccount.getFarmCode();
+        accessToken.setAccountName(accountName);
+        accessToken.setCreated(new Date());
+        accessToken.setCode(null);
+        accessToken.setMessage("");
+        accessToken.setFarmId(farmCode);
+        System.out.println("login.farmCode >>>>>>>>>>>>>>>>>>> " + farmCode);
+        //构造token
+        String token = TokenSign.sign(accountName, id, farmCode, "");
+        accessToken.setToken(token);
+        accessToken.setId(id.intValue());
+        accessToken.setLoginIp(remoteHost);
+        accessToken.setUserName(resultSysUserAccount.getUserName());
+        accessToken.setType(null);
+        accessToken.setAccontClass(resultSysUserAccount.getAccountClass());
+        return new Result(ResultCode.SUCCESS, accessToken);
+    }
+
+    @Override
+    public Result listPlatformUserAndFarmAdmin(HttpServletRequest request, Map<String, String> paramsMap) throws ParseException {
+        //
+        DateUtil dateUtil = new DateUtil();
+        String pageNo = paramsMap.get("pageNo") + "";
+        if (StringUtils.isBlank(pageNo)) {
+            pageNo = "1";
+        }
+        String pageSize = paramsMap.get("pageSize") + "";
+        if (StringUtils.isBlank(pageSize)) {
+            pageSize = "10";
+        }
+        String accountName = paramsMap.get("accountName");
+        String userName = paramsMap.get("userName");
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper<>();
+        queryWrapper.like(StringUtils.isNotBlank(accountName), "account_name", accountName);
+        queryWrapper.like(StringUtils.isNotBlank(userName), "user_name", userName);
+        queryWrapper.and(wrapper -> wrapper.eq("account_class", 1).or().eq("account_type", 1));
+        queryWrapper.orderByDesc("login_time");
+        //
+        Page<SysUserAccount> page = new Page<>(Integer.parseInt(pageNo), Integer.parseInt(pageSize));
+        Page<SysUserAccount> pageSysUserAccount = sysUserAccountMapper.selectPage(page, queryWrapper);
+        List<SysUserAccount> sysUserAccountList = pageSysUserAccount.getRecords();
+        JSONArray dataJa = new JSONArray();
+        for (SysUserAccount sysUserAccount : sysUserAccountList) {
+            String farmCode1 = sysUserAccount.getFarmCode();
+            SysFarm sysFarm = farmMapper.selectOne(new QueryWrapper<SysFarm>().eq("farm_code", farmCode1));
+            JSONObject dataJo = (JSONObject) JSONObject.toJSON(sysUserAccount);
+            dataJo.put("loginTime", dateUtil.formatDatetimeText(dataJo.getDate("loginTime")));
+            dataJo.put("farmName", "");
+            if (ObjectUtil.isNotEmpty(sysFarm)) {
+                dataJo.put("farmName", sysFarm.getFarmName());
+            }
+            dataJa.add(dataJo);
+        }
+        JSONObject resultJo = new JSONObject();
+        resultJo.put("records", dataJa);
+        resultJo.put("total", pageSysUserAccount.getTotal());
+        resultJo.put("size", pageSysUserAccount.getSize());
+        resultJo.put("current", pageSysUserAccount.getCurrent());
+        resultJo.put("orders", pageSysUserAccount.orders());
+        resultJo.put("optimizeCountSql", pageSysUserAccount.optimizeCountSql());
+        resultJo.put("searchCount", pageSysUserAccount.searchCount());
+        resultJo.put("countId", pageSysUserAccount.countId());
+        resultJo.put("maxLimit", pageSysUserAccount.maxLimit());
+        resultJo.put("pages", pageSysUserAccount.getPages());
+        return new Result(ResultCode.SUCCESS, resultJo);
+    }
+
+    @Override
+    public Result resetMyPassword(HttpServletRequest request, Map<String, String> paramsMap) {
+        String accountName = request.getHeader("accountName");
+        String oldPassword = paramsMap.get("oldPassword");
+        String password = paramsMap.get("password");
+        QueryWrapper<SysUserAccount> queryWrapper = new QueryWrapper();
+        queryWrapper.eq("account_name", accountName);
+        queryWrapper.eq("password", oldPassword);
+        SysUserAccount sysUserAccount = sysUserAccountMapper.selectOne(queryWrapper);
+        if (sysUserAccount == null) {
+            return new Result(ConstUtil.ERR_PASSWORD_ERROR_CODE, ConstUtil.ERR_PASSWORD_ERROR_INFO, false);
+        }
+        sysUserAccount.setPassword(password);
+        int rows = sysUserAccountMapper.updateById(sysUserAccount);
+        if (rows == 0) {
+            return new Result(ConstUtil.ERR_UPDATE_PASSWORD_CODE, ConstUtil.ERR_UPDATE_PASSWORD_INFO,false);
+        } else {
+            return new Result(ResultCode.SUCCESS);
+        }
+    }
+
+}

+ 82 - 0
huimv-cattle/src/main/java/com/huimv/cattle/service/impl/SysUserGroupServiceImpl.java

@@ -0,0 +1,82 @@
+package com.huimv.cattle.service.impl;
+
+import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+//import com.huimv.breed.common.utils.ConstUtil;
+//import com.huimv.breed.common.utils.ResultUtil;
+import com.huimv.cattle.mapper.SysUserGroupMapper;
+import com.huimv.cattle.pojo.SysUserGroup;
+import com.huimv.cattle.service.SysUserGroupService;
+import com.huimv.cattle.utils.ConstUtil;
+import com.huimv.cattle.utils.ResultUtil;
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+//import com.huimv.saas.admin.mapper.SysUserGroupMapper;
+//import com.huimv.saas.admin.pojo.SysUserGroup;
+//import com.huimv.saas.admin.service.SysUserGroupService;
+import org.apache.commons.lang3.StringUtils;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.Resource;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * <p>
+ * 服务实现类
+ * </p>
+ *
+ * @author zn
+ * @since 2022-09-26
+ */
+@Service
+public class SysUserGroupServiceImpl extends ServiceImpl<SysUserGroupMapper, SysUserGroup> implements SysUserGroupService {
+    @Resource
+    private SysUserGroupMapper sysUserGroupMapper;
+    @Resource
+    private ResultUtil resultUtil;
+
+    @Override
+    @Transactional(rollbackFor = Exception.class)
+    public Result saveUserGroup(Map<String, String> paramsMap) {
+        String userId = paramsMap.get("userId");
+        String groupIds = paramsMap.get("groupIds");
+        //-- 删除权限组绑定才菜单 --//
+        QueryWrapper<SysUserGroup> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(userId), "user_id", userId);
+        sysUserGroupMapper.delete(queryWrapper);
+        //-- 新增用户绑定权限组 --//
+        String[] groupIdArray = groupIds.split(",");
+        int rows = 0;
+        for (int a = 0; a < groupIdArray.length; a++) {
+            SysUserGroup newSysUserGroup = new SysUserGroup();
+            newSysUserGroup.setUserId(Integer.parseInt(userId));
+            newSysUserGroup.setGroupId(Integer.parseInt(groupIdArray[a]));
+            rows += sysUserGroupMapper.insert(newSysUserGroup);
+        }
+        return resultUtil.getResult(rows);
+    }
+
+    /**
+     * @Method      : getGroupByUserId
+     * @Description : 根据用户获取权限组
+     * @Params      : [paramsMap]
+     * @Return      : com.huimv.common.utils.Result
+     * 
+     * @Author      : ZhuoNing
+     * @Date        : 2022/10/10       
+     * @Time        : 13:55
+     */
+    @Override
+    public Result getGroupByUserId(Map<String, String> paramsMap) {
+        String userId = paramsMap.get("userId");
+        QueryWrapper<SysUserGroup> queryWrapper = new QueryWrapper<>();
+        queryWrapper.eq(StringUtils.isNotBlank(userId), "user_id", userId);
+        List<SysUserGroup> sysUserGroupList = sysUserGroupMapper.selectList(queryWrapper);
+        if(sysUserGroupList.size() == 0){
+            return new Result(ConstUtil.ERR_MYGROUP_EMPTY_CODE,ConstUtil.ERR_MYGROUP_EMPTY_INFO,false);
+        }
+        return new Result(ResultCode.SUCCESS,sysUserGroupList);
+    }
+}

+ 124 - 0
huimv-cattle/src/main/java/com/huimv/cattle/session/AccessToken.java

@@ -0,0 +1,124 @@
+package com.huimv.cattle.session;
+
+import java.util.Date;
+
+/**
+ * 登录的token信息
+ * @author guojian
+ */
+public class AccessToken {
+    private String token;
+    private String loginIp;
+    private Date created;
+    private String accountName;
+    private Integer code;
+    private Integer id;
+    private Integer type;
+    private String farmId;
+    private String message;
+    private Integer accontClass;
+    private String  userName;
+
+    public String getUserName() {
+        return userName;
+    }
+
+    public void setUserName(String userName) {
+        this.userName = userName;
+    }
+
+    public Integer getAccontClass() {
+        return accontClass;
+    }
+
+    public void setAccontClass(Integer accontClass) {
+        this.accontClass = accontClass;
+    }
+
+    public AccessToken() {
+    }
+
+    public String getToken() {
+        return token;
+    }
+
+    public void setToken(String token) {
+        this.token = token;
+    }
+
+    public String getLoginIp() {
+        return loginIp;
+    }
+
+    public void setLoginIp(String loginIp) {
+        this.loginIp = loginIp;
+    }
+
+    public Date getCreated() {
+        return created;
+    }
+
+    public void setCreated(Date created) {
+        this.created = created;
+    }
+
+    public String getAccountName() {
+        return accountName;
+    }
+
+    public void setAccountName(String accountName) {
+        this.accountName = accountName;
+    }
+
+    public Integer getCode() {
+        return code;
+    }
+
+    public void setCode(Integer code) {
+        this.code = code;
+    }
+
+    public Integer getId() {
+        return id;
+    }
+
+    public void setId(Integer id) {
+        this.id = id;
+    }
+
+    public Integer getType() {
+        return type;
+    }
+
+    public void setType(Integer type) {
+        this.type = type;
+    }
+
+    public String getFarmId() {
+        return farmId;
+    }
+
+    public void setFarmId(String farmId) {
+        this.farmId = farmId;
+    }
+
+    public String getMessage() {
+        return message;
+    }
+
+    public void setMessage(String message) {
+        this.message = message;
+    }
+
+    public AccessToken(String token, String loginIp, Date created, String accountName, Integer code, Integer id, Integer type, String farmId, String message) {
+        this.token = token;
+        this.loginIp = loginIp;
+        this.created = created;
+        this.accountName = accountName;
+        this.code = code;
+        this.id = id;
+        this.type = type;
+        this.farmId = farmId;
+        this.message = message;
+    }
+}

+ 20 - 0
huimv-cattle/src/main/java/com/huimv/cattle/token/TokenConstant.java

@@ -0,0 +1,20 @@
+package com.huimv.cattle.token;
+ 
+import java.util.HashMap;
+import java.util.Map;
+
+public class TokenConstant {
+ 
+    private static Map<String,String> map=new HashMap();
+ 
+ 
+    public static String getToken(){
+            return map.get("token");
+    }
+ 
+    public static void updateTokenMap(String token){
+        map.put("token",token);
+    }
+ 
+ 
+}

+ 149 - 0
huimv-cattle/src/main/java/com/huimv/cattle/token/TokenSign.java

@@ -0,0 +1,149 @@
+package com.huimv.cattle.token;
+
+
+import io.jsonwebtoken.*;
+import org.apache.commons.lang.StringUtils;
+
+import javax.servlet.http.HttpServletRequest;
+import java.util.Date;
+
+public class TokenSign {
+
+    /**
+     * 过期时间60分钟
+     */
+    private static final long EXPIRE_TIME= 24 * 60 * 60 * 1000;
+
+    /**
+     * 私钥,使用它生成token,最好进行下加密
+     */
+    private static final String TOKEN_SECRET="Token";
+    private static final String APP_SECRET = "ukc8BDbRigUDaY6pZFfWus2jZWLPHO";
+    private static final int REFRESH_TIME = 300;
+
+
+    /**
+     * 产生token
+     * @return
+     */
+    public static String sign(String userName,Long id,String farmIds,String orgId){
+
+        String JwtToken = Jwts.builder()
+                //头部信息
+                .setHeaderParam("typ", "JWT")
+                .setHeaderParam("alg", "HS256")
+                .setSubject("hm-user")
+                .setIssuedAt(new Date())
+                //过期时间
+                .setExpiration(new Date(System.currentTimeMillis() + EXPIRE_TIME))
+                //token主体部分,存储用户信息
+                .claim("userName", userName)
+                .claim("id",id)
+                .claim("farmIds",farmIds)
+                .claim("orgId",orgId)
+                .signWith(SignatureAlgorithm.HS256, APP_SECRET)
+                .compact();
+
+        return JwtToken;
+    }
+
+
+    /**
+     * token校验是否正确
+     * @param token
+     * @return
+     */
+
+    public static boolean verify(String token){
+
+        if (StringUtils.isBlank(token)) {
+            return false;
+        }
+        try {
+            Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(token);
+        } catch (Exception e) {
+            e.printStackTrace();
+            return false;
+        }
+        return true;
+
+    }
+
+
+    /**
+     * 根据token获取会员id
+     *
+     * @param request
+     * @return
+     */
+    public static Integer getMemberIdByJwtToken(HttpServletRequest request) {
+        String jwtToken = request.getHeader("accessToken");
+        if (StringUtils.isBlank(jwtToken)) {
+            return null;
+        }
+        Claims claims = getClaims(jwtToken);
+        return (Integer) claims.get("id");
+    }
+
+    public static String getFarmIds(HttpServletRequest request) {
+        String jwtToken = request.getHeader("accessToken");
+        if (StringUtils.isBlank(jwtToken)) {
+            return null;
+        }
+        Claims claims = getClaims(jwtToken);
+        return (String) claims.get("farmIds");
+    }
+
+    public static String getOrgId(HttpServletRequest request) {
+        String jwtToken = request.getHeader("accessToken");
+        if (StringUtils.isBlank(jwtToken)) {
+            return null;
+        }
+        Claims claims = getClaims(jwtToken);
+        return (String) claims.get("orgId");
+    }
+
+    /**
+     * 获取claims对象
+     *
+     * @param jwtToken
+     * @return
+     */
+    public static Claims getClaims(String jwtToken) {
+        try {
+            Jws<Claims> claimsJws = Jwts.parser().setSigningKey(APP_SECRET).parseClaimsJws(jwtToken);
+            return claimsJws.getBody();
+        }catch (ExpiredJwtException e){
+            return null;
+        }
+
+
+    }
+    /**
+     * 是否过期
+     *
+     * @param claims
+     * @return -1:有效,0:有效,1:过期,2:被篡改
+     */
+    public static int verifyToken(Claims claims) {
+        if (claims == null) {
+            return 1;
+        }
+        try {
+            claims.getExpiration()
+                    .before(new Date());
+            // 需要自动刷新TOKEN
+            if ((claims.getExpiration().getTime() - System.currentTimeMillis()) < REFRESH_TIME * 1000) {
+                return -1;
+            } else {
+                return 0;
+            }
+        } catch (ExpiredJwtException ex) {
+            return 1;
+        } catch (Exception e) {
+            return 2;
+        }
+    }
+
+
+}

+ 18 - 0
huimv-cattle/src/main/java/com/huimv/cattle/utils/Const.java

@@ -0,0 +1,18 @@
+package com.huimv.cattle.utils;
+
+/**
+ * @Project : huimv-breed
+ * @Package : IntelliJ IDEA
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/9/28
+ **/
+public class Const {
+    public static final String SECRET_KEY = "huimvkeji";
+
+    public final static String STOCK_EXCHANGE = "topic.stock.exchange";
+    public final static String STOCK_ROUTING = "topic.stock.routeKey";
+    public final static String STOCK_QUEUE = "topic.stock.queue";
+
+}

+ 87 - 0
huimv-cattle/src/main/java/com/huimv/cattle/utils/ConstUtil.java

@@ -0,0 +1,87 @@
+package com.huimv.cattle.utils;
+
+/**
+ * @Project : huimv-breed
+ * @Package : IntelliJ IDEA
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/9/27
+ **/
+public class ConstUtil {
+   public static final String SECRET_KEY = "huimvkeji";
+   public final static Integer ERR_NOFOUND_CODE = 10004;
+   public final static String ERR_NOFOUND_INFO = "暂无数据.";
+
+   public final static Integer ERR_CHILDMENU_CODE = 10005;
+   public final static String ERR_CHILDMENU_INFO = "存在下级菜单,请先删除下级菜单.";
+
+   public final static Integer ERR_NO_EXIST_CODE = 10006;
+   public final static String ERR_NO_EXIST_INFO = "账号或密码错误.";
+
+   public final static Integer ERR_FARM_TIMEOUT_CODE = 10007;
+   public final static String ERR_FARM_TIMEOUT_INFO = "牧场已经中止服务.";
+
+   public final static Integer ERR_FARM_CANCEL_CODE = 10008;
+   public final static String ERR_FARM_CANCEL_INFO = "牧场已经注销.";
+
+   public final static Integer ERR_MYMENU_EMPTY_CODE = 10009;
+   public final static String ERR_MYMENU_EMPTY_INFO = "该用户无任何授权菜单.";
+
+   public final static Integer ERR_MYGROUP_EMPTY_CODE = 10010;
+   public final static String ERR_MYGROUP_EMPTY_INFO = "该用户无任何授权权限组.";
+
+   public final static Integer ERR_NO_DELETE_ADMIN_CODE = 10011;
+   public final static String ERR_NO_DELETE_ADMIN_INFO = "平台管理员账户不能删除.";
+
+   public final static Integer ERR_FARM_OVERDUE_CODE = 10012;
+   public final static String ERR_FARM_OVERDUE_INFO = "该牧场未在服务有效期";
+
+   public final static Integer ERR_SERVICE_SAME_CODE = 10013;
+   public final static String ERR_SERVICE_SAME_INFO = "当前服务周期时间不能和已经存在的服务时间重合.";
+
+   public final static Integer ERR_ACCOUNT_SAME_CODE = 10014;
+   public final static String ERR_ACCOUNT_SAME_INFO = "当前填写的账号名称已经存在,请重命名.";
+
+   public final static Integer ERR_RECORD_EMPTY_CODE = 10015;
+   public final static String ERR_RECORD_EMPTY_INFO = "暂无数据.";
+
+   public final static Integer ERR_SALE_LESS_CODE = 10016;
+   public final static String ERR_SALE_LESS_INFO = "本批次剩余数量不足,不满足销售数量.";
+
+   public final static Integer ERR_ELIMINATE_LESS_CODE = 10017;
+   public final static String ERR_ELIMINATE_LESS_INFO = "本批次剩余数量不足,不满足淘汰数量.";
+
+   public static final Integer ERR_EARTAG_NOT_EXIST_CODE = 10018;
+   public static final String ERR_EARTAG_NOT_EXIST_INFO = "耳标号不存在.";
+
+   public static final Integer ERR_NOT_BOAR_CODE = 10019;
+   public static final String ERR_NOT_BOAR_INFO = "你当前输入的是母猪耳标号,不能采精。只有公猪才能采精.";
+
+   public static final Integer ERR_SAME_GENDER_CODE = 10020;
+   public static final String ERR_SAME_GENDE_INFO = "配种对象为同一性别类型.";
+
+   public static final Integer ERR_GESTATION_CHECK_OBJECT_CODE = 10021;
+   public static final String ERR_GESTATION_CHECK_OBJECT_INFO = "妊检对象只能是雌性(母).";
+
+   public static final Integer ERR_BIRTH_OBJECT_CODE = 10022;
+   public static final String ERR_BIRTH_OBJECT_INFO = "分娩对象只能是雌性(母).";
+
+   public static final Integer ERR_ABLACTATION_CODE = 10023;
+   public static final String ERR_ABLACTATION_INFO = "断奶对象只能是雌性(母).";
+
+   public static final Integer ERR_INVALID_EARMARK_CODE = 10024;
+   public static final String ERR_INVALID_EARMARK_INFO = "该耳标所属对象已经销售或淘汰.";
+
+   public static final Integer ERR_SAME_EARMARK_CODE = 10025;
+   public static final String ERR_SAME_EARMARK_INFO = "该耳标号与其他记录存在耳标重名.";
+
+   public static final Integer ERR_SAME_BATCH_CODE = 10026;
+   public static final String ERR_SAME_BATCH_INFO = "该批次号与其他记录存在批次号重名.";
+
+   public static final Integer ERR_UPDATE_PASSWORD_CODE = 10027;
+   public static final String ERR_UPDATE_PASSWORD_INFO = "更新密码出错.";
+
+   public static final Integer ERR_PASSWORD_ERROR_CODE = 10028;
+   public static final String ERR_PASSWORD_ERROR_INFO = "密码输入错误.";
+}

+ 477 - 0
huimv-cattle/src/main/java/com/huimv/cattle/utils/DateUtil.java

@@ -0,0 +1,477 @@
+package com.huimv.cattle.utils;
+
+import cn.hutool.core.date.DateTime;
+import org.springframework.stereotype.Component;
+
+import java.sql.Timestamp;
+import java.text.DateFormat;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * @Project : huimv.shiwan
+ * @Package : com.huimv.biosafety.uface.controller
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2020-12-25
+ **/
+@Component
+//@Slf4j
+public class DateUtil {
+
+    public int getIntervalDays(String startDate,String endDate) throws ParseException {
+        DateFormat dft = new SimpleDateFormat("yyyy-MM-dd");
+        Date starDay = dft.parse(startDate);    //开始时间
+        Date endDay = dft.parse(endDate);       //结束时间
+        Long starTime = starDay.getTime();
+        Long endTime = endDay.getTime();
+        Long num = endTime - starTime;//时间戳相差的毫秒数
+        Long days = num / (24 * 60 * 60 * 1000);
+        return new Long(days).intValue();
+    }
+
+    public int getIntervalDays(Date startDay,Date endDay){
+        Long starTime = startDay.getTime();
+        Long endTime = endDay.getTime();
+        Long num = endTime - starTime;//时间戳相差的毫秒数
+        Long days = num / (24 * 60 * 60 * 1000);
+        return new Long(days).intValue();
+    }
+
+    public String getTheDateByMonth(int months) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = new Date();
+        Calendar calendar = Calendar.getInstance();
+        // 设置为当前时间
+        calendar.setTime(date);
+        calendar.add(Calendar.MONTH, -months);
+        // 设置为上一个月
+        //calendar.set(Calendar.MONTH, calendar.get(Calendar.MONTH) - 1);
+        date = calendar.getTime();
+        return format.format(date);
+    }
+
+    public String getTheMonthFirstDay(Date newDate) {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(newDate);
+//        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+//        System.out.println("上个月第一天:"+format.format(calendar.getTime()));
+        return format.format(calendar.getTime());
+    }
+
+    public String getTheMonthEndDay(Date newDate) {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar1 = Calendar.getInstance();
+        calendar1.setTime(newDate);
+        int month = calendar1.get(Calendar.MONTH);
+//        calendar1.set(Calendar.MONTH, month - 1);
+        calendar1.set(Calendar.DAY_OF_MONTH, calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));
+//        System.out.println("上个月最后一天:"+sf.format(calendar1.getTime()));
+        return sf.format(calendar1.getTime());
+    }
+
+    public int getNowHour() {
+        Calendar cal = Calendar.getInstance();
+        return cal.get(Calendar.HOUR_OF_DAY);
+    }
+
+    public int setCalendarNewTime(String newTime) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss:SSS");
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(sdf.parse(newTime));
+        return cal.get(Calendar.HOUR_OF_DAY);
+    }
+
+    public int setCalendarNewTime(Timestamp newTime) throws ParseException {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(newTime);
+        return cal.get(Calendar.HOUR_OF_DAY);
+    }
+
+    //格式化日期(Long --> Date)
+    public String formatLongToDate(Long longDate) {
+        SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = new Date(longDate);
+        return df.format(date);
+    }
+
+    //格式化本年
+    public String getThisYear() {
+        Calendar cal = Calendar.getInstance();
+        int year = cal.get(Calendar.YEAR);
+        return String.valueOf(year);
+    }
+
+    //获取本月
+    public String getThisMonth() {
+        Calendar cal = Calendar.getInstance();
+        int month = cal.get(Calendar.MONTH) + 1;
+        if (String.valueOf(month).length() == 1) {
+            return "0" + String.valueOf(month);
+        } else {
+            return String.valueOf(month);
+        }
+    }
+
+    //格式化本月
+    public String getLastMonth() {
+        Calendar cal = Calendar.getInstance();
+        cal.add(Calendar.MONTH, -1);
+        int month = cal.get(Calendar.MONTH) + 1;
+        if (String.valueOf(month).length() == 1) {
+            return "0" + String.valueOf(month);
+        } else {
+            return String.valueOf(month);
+        }
+    }
+
+    //格式化本月
+    public String getLastMonthAndYear(Date date) {
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(date);
+        cal.add(Calendar.MONTH, -1);
+        int month = cal.get(Calendar.MONTH) + 1;
+        int year = cal.get(Calendar.YEAR);
+        return year + "-" + month;
+    }
+
+    //格式化日期时间
+    public String formatDateTime(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = sdf.parse(dateText);
+        return sdf.format(date);
+    }
+
+    //格式化日期时间
+    public String formatDateText(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = sdf.parse(dateText);
+        return sdf.format(date);
+    }
+//    public String formatDateText(Date date) throws ParseException {
+//        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+//        return sdf.format(date);
+//    }
+
+    public Date parseDateTime(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.parse(dateText);
+    }
+
+    public Date parseDate(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.parse(dateText);
+    }
+
+    public Long parseDateTimeTextToLong(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        Date date = sdf.parse(dateText);
+        return date.getTime();
+    }
+
+    public Long parseDateTextToLong(String dateText) throws ParseException {
+        if (dateText.indexOf("T") != -1) {
+            dateText = dateText.replace("T", " ");
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        Date date = sdf.parse(dateText);
+        return date.getTime();
+    }
+
+    //
+    public Date getTodayDate() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.parse(sdf.format(new Date()));
+    }
+
+    public Date getTodayDatetime() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.parse(sdf.format(new Date()));
+    }
+
+    public String getTodayDateText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(new Date());
+    }
+
+    public java.sql.Date getTodayMySQLDate() {
+        java.sql.Date todayDate = new java.sql.Date(new Date().getTime());
+        return todayDate;
+    }
+
+    public Timestamp getTimestamp() {
+        Timestamp nowTimestamp = new Timestamp(new Date().getTime());
+        return nowTimestamp;
+    }
+
+    public String getTodayText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(new Date());
+    }
+
+    public String formatDateText(Date date) throws ParseException {
+        if (date == null) {
+            return "";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
+        return sdf.format(date);
+    }
+
+    public String formatDatetimeText(Date date) throws ParseException {
+        if (date == null || date.toString().length() == 0) {
+            return "";
+        }
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
+        return sdf.format(date);
+    }
+
+    public String getNowText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
+        return sdf.format(new Date());
+    }
+
+    public String getTodayMissionText() throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS");
+        return sdf.format(new Date());
+    }
+
+    public String getStartDateInThisMonth() {
+        DateTime date = cn.hutool.core.date.DateUtil.date();
+        return (cn.hutool.core.date.DateUtil.beginOfMonth(date) + "").substring(0, 10);
+    }
+
+    public String getEndDateInThisMonth() {
+        DateTime date = cn.hutool.core.date.DateUtil.date();
+        return (date + "").substring(0, 10);
+    }
+
+    public String get(int beforeMonths) {
+        DateUtil dateUtil = new DateUtil();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+        cal.roll(Calendar.DAY_OF_MONTH, -1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
+    }
+
+    public String getThisMonthFirstDay() {
+        DateUtil dateUtil = new DateUtil();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
+//        cal.roll(Calendar.DAY_OF_MONTH, -1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+    }
+
+    public String getThisMonthEndDay() {
+        DateUtil dateUtil = new DateUtil();
+        Calendar cal = Calendar.getInstance();
+        cal.setTime(new Date());
+        cal.set(Calendar.DAY_OF_MONTH, 1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+        cal.roll(Calendar.DAY_OF_MONTH, -1);
+//        System.out.println (new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime()));
+        return new SimpleDateFormat("yyyy-MM-dd").format(cal.getTime());
+    }
+
+    public String getLastMonthFirstDay() {
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar = Calendar.getInstance();
+        calendar.add(Calendar.MONTH, -1);
+        calendar.set(Calendar.DAY_OF_MONTH, 1);
+//        System.out.println("上个月第一天:"+format.format(calendar.getTime()));
+        return format.format(calendar.getTime());
+    }
+
+    public String getLastMonthEndDay() {
+        SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd");
+        Calendar calendar1 = Calendar.getInstance();
+        int month = calendar1.get(Calendar.MONTH);
+        calendar1.set(Calendar.MONTH, month - 1);
+        calendar1.set(Calendar.DAY_OF_MONTH, calendar1.getActualMaximum(Calendar.DAY_OF_MONTH));
+//        System.out.println("上个月最后一天:"+sf.format(calendar1.getTime()));
+        return sf.format(calendar1.getTime());
+    }
+
+    /**
+     * 获取过去或者未来 任意天内的日期数组
+     *
+     * @param intervals intervals天内
+     * @return 日期数组
+     */
+    public ArrayList<String> test(int intervals) {
+        ArrayList<String> pastDaysList = new ArrayList<>();
+        ArrayList<String> fetureDaysList = new ArrayList<>();
+        for (int i = 0; i < intervals; i++) {
+            pastDaysList.add(getPastDate(i));
+            fetureDaysList.add(getFetureDate(i));
+        }
+        return pastDaysList;
+    }
+
+    /**
+     * @Method : getPastIntervals
+     * @Description : 返回过去N天日期(倒排序)
+     * @Params : [intervals]
+     * @Return : java.util.ArrayList<java.lang.String>
+     * @Author : ZhuoNing
+     * @Date : 2022/3/7
+     * @Time : 15:27
+     */
+    public ArrayList<String> getPastIntervals(int intervals) {
+        ArrayList<String> pastDaysList = new ArrayList<>();
+        for (int i = 0; i < intervals; i++) {
+            pastDaysList.add(getPastDate(i));
+        }
+        return pastDaysList;
+    }
+
+    /**
+     * @Method : getPastIntervalsASC
+     * @Description : 正排序
+     * @Params : [intervals]
+     * @Return : java.util.ArrayList<java.lang.String>
+     * @Author : ZhuoNing
+     * @Date : 2022/3/7
+     * @Time : 16:33
+     */
+    public ArrayList<String> getPastIntervalsASC(int intervals) {
+        ArrayList<String> pastDaysList = new ArrayList<>();
+        for (int i = intervals - 1; i >= 0; i--) {
+            pastDaysList.add(getPastDate(i));
+        }
+        return pastDaysList;
+    }
+
+    /**
+     * @Method : getFetureIntervals
+     * @Description : 获取未来N天日期
+     * @Params : [intervals]
+     * @Return : java.util.ArrayList<java.lang.String>
+     * @Author : ZhuoNing
+     * @Date : 2022/3/7
+     * @Time : 15:28
+     */
+    public ArrayList<String> getFetureIntervals(int intervals) {
+        ArrayList<String> fetureDaysList = new ArrayList<>();
+        for (int i = 0; i < intervals; i++) {
+            fetureDaysList.add(getFetureDate(i));
+        }
+        return fetureDaysList;
+    }
+
+
+    /**
+     * 获取过去第几天的日期
+     *
+     * @param past
+     * @return
+     */
+    public String getPastDate(int past) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
+        Date today = calendar.getTime();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String result = format.format(today);
+        return result;
+    }
+
+    /**
+     * 获取未来 第 past 天的日期
+     *
+     * @param past
+     * @return
+     */
+    public String getFetureDate(int past) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + past);
+        Date today = calendar.getTime();
+        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+        String result = format.format(today);
+        return result;
+    }
+
+    //重新构建日期
+    public String rebuildDateTime(String text) {
+        return text.substring(0, 4) + "-" + text.substring(4, 6) + "-" + text.substring(6, 8) + " " + text.substring(8, 10) + ":" + text.substring(10, 12) + ":" + text.substring(12, 14);
+    }
+
+    public static void main(String[] args) {
+        DateUtil du = new DateUtil();
+        //
+//        du.test1();
+        List<String> pastList = du.getPastIntervalsASC(5);
+        for (String pastDate : pastList) {
+            System.out.println("pastDate>>" + pastDate);
+        }
+
+        List<String> fetureList = du.getFetureIntervals(5);
+        for (String fetureDate : fetureList) {
+            System.out.println("fetureDate>>" + fetureDate);
+        }
+
+    }
+
+    private void test1() {
+        String text = "20211201104300";
+//        String text = "1234567890abcd";
+        String date = text.substring(0, 4) + "-" + text.substring(4, 6) + "-" + text.substring(6, 8) + " " + text.substring(8, 10) + ":" + text.substring(10, 12) + ":" + text.substring(12, 14);
+        System.out.println("date=" + date);
+    }
+
+    //获取long时间
+    public Long getNowLong() {
+        Calendar calendar = Calendar.getInstance();
+        calendar.set(calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH) - 1, 0, 0, 0);
+        return calendar.getTime().getTime();
+    }
+
+    public Date getPastDate(Date date1, int past) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date1);
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) - past);
+        Date newDate = calendar.getTime();
+        return newDate;
+//        SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd");
+//        return format.parse(newDate);
+    }
+
+    public Date getFetureDate(Date date1, int days) {
+        Calendar calendar = Calendar.getInstance();
+        calendar.setTime(date1);
+        calendar.set(Calendar.DAY_OF_YEAR, calendar.get(Calendar.DAY_OF_YEAR) + days);
+        return calendar.getTime();
+    }
+
+    public String getTheMonthByDate(String dateText) throws ParseException {
+        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM");
+        Date date = sdf.parse(dateText);
+        return sdf.format(date);
+    }
+}

+ 25 - 0
huimv-cattle/src/main/java/com/huimv/cattle/utils/ResultUtil.java

@@ -0,0 +1,25 @@
+package com.huimv.cattle.utils;
+
+import com.huimv.common.utils.Result;
+import com.huimv.common.utils.ResultCode;
+import org.springframework.stereotype.Component;
+
+/**
+ * @Project : huimv-breed
+ * @Package : IntelliJ IDEA
+ * @Description : TODO
+ * @Version : 1.0
+ * @Author : ZhuoNing
+ * @Create : 2022/9/27
+ **/
+@Component
+public class ResultUtil {
+
+    public Result getResult(Integer rows){
+        if(rows > 0){
+            return new Result(ResultCode.SUCCESS);
+        }else{
+            return new Result(ResultCode.FAIL);
+        }
+    }
+}

+ 2 - 2
huimv-cattle/src/main/resources/application-dev.yml

@@ -5,7 +5,7 @@ spring:
     name: huimv-eartag2-manage2
 
   datasource:
-    url: jdbc:mysql://115.238.57.190:3306/huimv-demo-eartag20?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
+    url: jdbc:mysql://192.168.1.7:3306/huimv-farm-cattle?useUnicode=true&characterEncoding=UTF-8&useSSL=false&autoReconnect=true&serverTimezone=Asia/Shanghai
     username: root
     password: hm123456
     driver-class-name: com.mysql.cj.jdbc.Driver
@@ -110,4 +110,4 @@ mybatis-plus:
   configuration:
     log-impl: org.apache.ibatis.logging.stdout.StdOutImpl
   # mapper.xml文件所存放的位置
-  mapper-locations: classpath*:com/huimv/eartag2/manage2/mapper/xml/*.xml  # 不加这一行出错:“org.apache.ibatis.binding.BindingException:  Invalid bound statement (not found)”
+  mapper-locations: classpath*:com/huimv/cattle/mapper/xml/*.xml  # 不加这一行出错:“org.apache.ibatis.binding.BindingException:  Invalid bound statement (not found)”

+ 4 - 13
huimv-cattle/src/main/resources/application.properties

@@ -1,16 +1,8 @@
-#spring.profiles.active=dev2
-spring.profiles.active=prod2
+spring.profiles.active=dev
+#spring.profiles.active=prod2
 
-# mysql:/cache:
-device.online.access_mode=mysql
-
-# ��ӻ������豸����ʱ��
-cache.chipIdExpire=48
-
-#
-service.farmAllStatus.url=/deviceController/updateFarmAllStatus
-service.farmAllStatus.host=192.168.1.68
-service.farmAllStatus.ip=8092
+manager.defaultPassword=123456
+user.defaultPassword=123456
 
 ###################################################����undertowȡ��tomcat
 # �Ƿ�� undertow ��־��Ĭ��Ϊ false
@@ -24,7 +16,6 @@ server.undertow.worker-threads=
 # ���� HTTP POST ���ݵ���󳤶ȣ�Ĭ�ϲ�������
 server.undertow.max-http-post-size=0
 
-farmer.pig.price=11.84