ezhizao преди 1 година
родител
ревизия
0ca42f6cf4
променени са 36 файла, в които са добавени 1554 реда и са изтрити 847 реда
  1. 1 1
      pom.xml
  2. 0 15
      src/main/java/cn/ezhizao/common/utils/SecurityUtils.java
  3. 8 63
      src/main/java/cn/ezhizao/framework/aspectj/DataScopeAspect.java
  4. 1 1
      src/main/java/cn/ezhizao/framework/config/SecurityConfig.java
  5. 1 1
      src/main/java/cn/ezhizao/framework/security/service/PermissionService.java
  6. 0 6
      src/main/java/cn/ezhizao/framework/security/service/SysLoginService.java
  7. 0 144
      src/main/java/cn/ezhizao/framework/security/service/SysRegisterService.java
  8. 4 2
      src/main/java/cn/ezhizao/framework/security/service/UserDetailsServiceImpl.java
  9. 3 2
      src/main/java/cn/ezhizao/framework/web/controller/BaseController.java
  10. 49 40
      src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderController.java
  11. 0 35
      src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailController.java
  12. 0 36
      src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailProcessController.java
  13. 10 0
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrder.java
  14. 9 0
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetail.java
  15. 39 12
      src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetailProcess.java
  16. 62 0
      src/main/java/cn/ezhizao/project/business/domain/BizSupplier.java
  17. 7 0
      src/main/java/cn/ezhizao/project/business/domain/BizSupplierUser.java
  18. 17 0
      src/main/java/cn/ezhizao/project/business/mapper/BizSupplierMapper.java
  19. 14 0
      src/main/java/cn/ezhizao/project/business/service/IBizSupplierService.java
  20. 17 0
      src/main/java/cn/ezhizao/project/business/service/impl/BizSupplierServiceImpl.java
  21. 128 0
      src/main/java/cn/ezhizao/project/system/controller/SysDictDataController.java
  22. 131 0
      src/main/java/cn/ezhizao/project/system/controller/SysDictTypeController.java
  23. 88 0
      src/main/java/cn/ezhizao/project/system/controller/SysLoginController.java
  24. 100 0
      src/main/java/cn/ezhizao/project/system/mapper/SysDictDataMapper.java
  25. 91 0
      src/main/java/cn/ezhizao/project/system/mapper/SysDictTypeMapper.java
  26. 0 130
      src/main/java/cn/ezhizao/project/system/service/ISysDeptService.java
  27. 66 0
      src/main/java/cn/ezhizao/project/system/service/ISysDictDataService.java
  28. 106 0
      src/main/java/cn/ezhizao/project/system/service/ISysDictTypeService.java
  29. 0 349
      src/main/java/cn/ezhizao/project/system/service/impl/SysDeptServiceImpl.java
  30. 117 0
      src/main/java/cn/ezhizao/project/system/service/impl/SysDictDataServiceImpl.java
  31. 234 0
      src/main/java/cn/ezhizao/project/system/service/impl/SysDictTypeServiceImpl.java
  32. 2 2
      src/main/resources/application.yml
  33. 0 1
      src/main/resources/i18n/messages.properties
  34. 7 7
      src/main/resources/mybatis/business/BizOutsourcedOrderMapper.xml
  35. 129 0
      src/main/resources/mybatis/system/SysDictDataMapper.xml
  36. 113 0
      src/main/resources/mybatis/system/SysDictTypeMapper.xml

+ 1 - 1
pom.xml

@@ -4,7 +4,7 @@
     <modelVersion>4.0.0</modelVersion>
 
     <groupId>cn.ezhizao</groupId>
-    <artifactId>ezhizao_dms_production</artifactId>
+    <artifactId>ezhizao_dms_supplier_api</artifactId>
     <version>3.8.4</version>
     <packaging>jar</packaging>
 

+ 0 - 15
src/main/java/cn/ezhizao/common/utils/SecurityUtils.java

@@ -44,21 +44,6 @@ public class SecurityUtils
         }
     }
 
-    /**
-     * 获取部门ID
-     **/
-    public static Long getDeptId()
-    {
-        try
-        {
-            return getLoginUser().getDeptId();
-        }
-        catch (Exception e)
-        {
-            throw new ServiceException("获取部门ID异常", HttpStatus.UNAUTHORIZED);
-        }
-    }
-
     /**
      * 获取用户账户
      **/

+ 8 - 63
src/main/java/cn/ezhizao/framework/aspectj/DataScopeAspect.java

@@ -8,7 +8,7 @@ import cn.ezhizao.framework.security.LoginUser;
 import cn.ezhizao.framework.security.context.PermissionContextHolder;
 import cn.ezhizao.framework.web.domain.BaseEntity;
 import cn.ezhizao.project.system.domain.SysRole;
-import cn.ezhizao.project.system.domain.SysUser;
+import cn.ezhizao.project.business.domain.BizSupplierUser;
 import org.aspectj.lang.JoinPoint;
 import org.aspectj.lang.annotation.Aspect;
 import org.aspectj.lang.annotation.Before;
@@ -69,9 +69,9 @@ public class DataScopeAspect
         LoginUser loginUser = SecurityUtils.getLoginUser();
         if (StringUtils.isNotNull(loginUser))
         {
-            SysUser currentUser = loginUser.getUser();
+            BizSupplierUser currentUser = loginUser.getUser();
             // 如果是超级管理员,则不过滤数据
-            if (StringUtils.isNotNull(currentUser) && !currentUser.isAdmin())
+            if (StringUtils.isNotNull(currentUser) && !"1".equals(currentUser.getIsAdmin()))
             {
                 String permission = StringUtils.defaultIfEmpty(controllerDataScope.permission(), PermissionContextHolder.getContext());
                 dataScopeFilter(joinPoint, currentUser, controllerDataScope.deptAlias(),
@@ -89,67 +89,12 @@ public class DataScopeAspect
      * @param userAlias 用户别名
      * @param permission 权限字符
      */
-    public static void dataScopeFilter(JoinPoint joinPoint, SysUser user, String deptAlias, String userAlias, String permission)
-    {
+    public static void dataScopeFilter(JoinPoint joinPoint, BizSupplierUser user, String deptAlias, String userAlias, String permission) {
         StringBuilder sqlString = new StringBuilder();
-        List<String> conditions = new ArrayList<String>();
-
-        for (SysRole role : user.getRoles())
-        {
-            String dataScope = role.getDataScope();
-            if (!DATA_SCOPE_CUSTOM.equals(dataScope) && conditions.contains(dataScope))
-            {
-                continue;
-            }
-            if (StringUtils.isNotEmpty(permission) && StringUtils.isNotEmpty(role.getPermissions())
-                    && !StringUtils.containsAny(role.getPermissions(), Convert.toStrArray(permission)))
-            {
-                continue;
-            }
-            if (DATA_SCOPE_ALL.equals(dataScope))
-            {
-                sqlString = new StringBuilder();
-                break;
-            }
-            else if (DATA_SCOPE_CUSTOM.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_role_dept WHERE role_id = {} ) ", deptAlias,
-                        role.getRoleId()));
-            }
-            else if (DATA_SCOPE_DEPT.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(" OR {}.dept_id = {} ", deptAlias, 0L));
-            }
-            else if (DATA_SCOPE_DEPT_AND_CHILD.equals(dataScope))
-            {
-                sqlString.append(StringUtils.format(
-                        " OR {}.dept_id IN ( SELECT dept_id FROM sys_dept WHERE dept_id = {} or find_in_set( {} , ancestors ) )",
-                        deptAlias, 0L, 0L));
-            }
-            else if (DATA_SCOPE_SELF.equals(dataScope))
-            {
-                if (StringUtils.isNotBlank(userAlias))
-                {
-                    sqlString.append(StringUtils.format(" OR {}.user_id = {} ", userAlias, user.getUserId()));
-                }
-                else
-                {
-                    // 数据权限为仅本人且没有userAlias别名不查询任何数据
-                    sqlString.append(StringUtils.format(" OR {}.dept_id = 0 ", deptAlias));
-                }
-            }
-            conditions.add(dataScope);
-        }
-
-        if (StringUtils.isNotBlank(sqlString.toString()))
-        {
-            Object params = joinPoint.getArgs()[0];
-            if (StringUtils.isNotNull(params) && params instanceof BaseEntity)
-            {
-                BaseEntity baseEntity = (BaseEntity) params;
-                baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
-            }
+        Object params = joinPoint.getArgs()[0];
+        if (StringUtils.isNotNull(params) && params instanceof BaseEntity) {
+            BaseEntity baseEntity = (BaseEntity) params;
+            baseEntity.getParams().put(DATA_SCOPE, " AND (" + sqlString.substring(4) + ")");
         }
     }
 

+ 1 - 1
src/main/java/cn/ezhizao/framework/config/SecurityConfig.java

@@ -107,7 +107,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter {
                 // 过滤请求
                 .authorizeRequests()
                 // 对于登录login 注册register 验证码captchaImage 允许匿名访问
-                .antMatchers("/login", "/register", "/captchaImage", "/sms/sendSms", "/business/app/getUpdate", "/snms/**", "/mini/**", "/test/**").permitAll()
+                .antMatchers("/login", "/register", "/captchaImage", "/business/app/getUpdate", "/snms/**", "/mini/**", "/test/**").permitAll()
                 // 静态资源,可匿名访问
                 .antMatchers(HttpMethod.GET, "/", "/*.html", "/**/*.html", "/**/*.css", "/**/*.js", "/profile/**").permitAll()
                 .antMatchers("/swagger-ui.html", "/swagger-resources/**", "/webjars/**", "/*/api-docs", "/druid/**").permitAll()

+ 1 - 1
src/main/java/cn/ezhizao/framework/security/service/PermissionService.java

@@ -125,7 +125,7 @@ public class PermissionService
      */
     public boolean lacksRole(String role)
     {
-        return hasRole(role) != true;
+        return !hasRole(role);
     }
 
     /**

+ 0 - 6
src/main/java/cn/ezhizao/framework/security/service/SysLoginService.java

@@ -6,19 +6,13 @@ import cn.ezhizao.common.exception.ServiceException;
 import cn.ezhizao.common.exception.user.CaptchaException;
 import cn.ezhizao.common.exception.user.CaptchaExpireException;
 import cn.ezhizao.common.exception.user.UserPasswordNotMatchException;
-import cn.ezhizao.common.utils.DateUtils;
 import cn.ezhizao.common.utils.MessageUtils;
-import cn.ezhizao.common.utils.ServletUtils;
 import cn.ezhizao.common.utils.StringUtils;
-import cn.ezhizao.common.utils.ip.IpUtils;
-import cn.ezhizao.common.utils.uuid.SnowflakeIdWorker;
 import cn.ezhizao.framework.manager.AsyncManager;
 import cn.ezhizao.framework.manager.factory.AsyncFactory;
 import cn.ezhizao.framework.redis.RedisCache;
 import cn.ezhizao.framework.security.LoginUser;
 import cn.ezhizao.framework.security.context.AuthenticationContextHolder;
-import cn.ezhizao.project.system.domain.SysUser;
-import cn.ezhizao.project.system.service.ISysDeptService;
 import org.springframework.security.authentication.AuthenticationManager;
 import org.springframework.security.authentication.BadCredentialsException;
 import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;

+ 0 - 144
src/main/java/cn/ezhizao/framework/security/service/SysRegisterService.java

@@ -1,144 +0,0 @@
-package cn.ezhizao.framework.security.service;
-
-import cn.ezhizao.common.constant.CacheConstants;
-import cn.ezhizao.common.constant.Constants;
-import cn.ezhizao.common.constant.UserConstants;
-import cn.ezhizao.common.exception.user.CaptchaException;
-import cn.ezhizao.common.exception.user.CaptchaExpireException;
-import cn.ezhizao.common.utils.MessageUtils;
-import cn.ezhizao.common.utils.SecurityUtils;
-import cn.ezhizao.common.utils.StringUtils;
-import cn.ezhizao.framework.manager.AsyncManager;
-import cn.ezhizao.framework.manager.factory.AsyncFactory;
-import cn.ezhizao.framework.redis.RedisCache;
-import cn.ezhizao.framework.security.RegisterBody;
-import cn.ezhizao.project.system.domain.SysUser;
-import cn.ezhizao.project.system.domain.SysUserRole;
-import cn.ezhizao.project.system.mapper.SysUserRoleMapper;
-import cn.ezhizao.project.system.service.ISysConfigService;
-import cn.ezhizao.project.system.service.ISysUserService;
-import org.springframework.stereotype.Component;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.List;
-
-/**
- * 注册校验方法
- *
- * @author ruoyi
- */
-@Component
-public class SysRegisterService
-{
-    @Resource
-    private ISysUserService userService;
-
-    @Resource
-    private ISysConfigService configService;
-    @Resource
-    private RedisCache redisCache;
-
-    @Resource
-    SysUserRoleMapper userRoleMapper;
-
-
-    /**
-     * 注册
-     */
-    public String register(RegisterBody registerBody)
-    {
-        String  msg = "",
-                username = registerBody.getUsername(),
-                password = registerBody.getPassword(),
-                deptCode = registerBody.getCreditCode(),
-                phoneNumber = registerBody.getPhoneNumber(),
-                code = registerBody.getCode();
-        Long roleId = Long.parseLong(registerBody.getRole());
-        // 验证码开关
-        boolean captchaEnabled = configService.selectCaptchaEnabled();
-        if (captchaEnabled) {
-            validateCaptcha(phoneNumber, code);
-        }
-        SysUser sysUser = new SysUser();
-        sysUser.setUserName(username);
-        sysUser.setPhoneNumber(phoneNumber);
-        sysUser.setUserType("01");
-
-            if (StringUtils.isEmpty(username)) {
-                msg = "用户名不能为空";
-            } else if (StringUtils.isEmpty(password)) {
-                msg = "用户密码不能为空";
-            } else if (username.length() < UserConstants.USERNAME_MIN_LENGTH
-                    || username.length() > UserConstants.USERNAME_MAX_LENGTH) {
-                msg = "账户长度必须在2到20个字符之间";
-            } else if (password.length() < UserConstants.PASSWORD_MIN_LENGTH
-                    || password.length() > UserConstants.PASSWORD_MAX_LENGTH) {
-                msg = "密码长度必须在5到20个字符之间";
-            } else if (UserConstants.NOT_UNIQUE.equals(userService.checkUserNameUnique(sysUser))) {
-                msg = "注册账号已存在";
-            }else if (UserConstants.NOT_UNIQUE.equals(userService.checkPhoneUnique(sysUser))) {
-                msg = "注册手机号已存在";
-            } else {
-                sysUser.setNickName(username);
-                sysUser.setPassword(SecurityUtils.encryptPassword(password));
-
-                SysUserRole sysUserRoleAdmin = new SysUserRole();
-                sysUserRoleAdmin.setUserId(sysUser.getUserId());
-                sysUserRoleAdmin.setRoleId(roleId);
-                List<SysUserRole> sysUserRoles = new ArrayList<>();
-                sysUserRoles.add(sysUserRoleAdmin);
-                userRoleMapper.batchUserRole(sysUserRoles);
-
-                boolean regFlag = userService.registerUser(sysUser);
-
-                if (!regFlag) {
-                    msg = "注册失败,请联系系统管理人员";
-                } else {
-                    redisCache.deleteObject(phoneNumber);
-                    AsyncManager.me().execute(AsyncFactory.recordLogininfor(username, Constants.REGISTER, MessageUtils.message("user.register.success")));
-                }
-            }
-        return msg;
-    }
-
-    /**
-     * 校验验证码
-     *
-     * @param username 用户名
-     * @param code 验证码
-     * @param uuid 唯一标识
-     * @return 结果
-     */
-    public void validateCaptcha(String username, String code, String uuid)
-    {
-        String verifyKey = CacheConstants.CAPTCHA_CODE_KEY + StringUtils.nvl(uuid, "");
-        String captcha = redisCache.getCacheObject(verifyKey);
-        redisCache.deleteObject(verifyKey);
-        if (captcha == null)
-        {
-            throw new CaptchaExpireException();
-        }
-        if (!code.equalsIgnoreCase(captcha))
-        {
-            throw new CaptchaException();
-        }
-    }
-
-    /**
-     * 校验短信验证码
-     * @param key
-     */
-    public void validateCaptcha(String key,String value)
-    {
-        String verifyCode = redisCache.getCacheObject(key);
-        if (verifyCode == null)
-        {
-            throw new CaptchaExpireException();
-        }
-        if (!value.equalsIgnoreCase(verifyCode))
-        {
-            throw new CaptchaException();
-        }
-    }
-}

+ 4 - 2
src/main/java/cn/ezhizao/framework/security/service/UserDetailsServiceImpl.java

@@ -1,5 +1,6 @@
 package cn.ezhizao.framework.security.service;
 
+import cn.ezhizao.common.exception.ServiceException;
 import cn.ezhizao.framework.security.LoginUser;
 import cn.ezhizao.project.business.domain.BizSupplierUser;
 import cn.ezhizao.project.business.service.IBizSupplierUserService;
@@ -36,11 +37,12 @@ public class UserDetailsServiceImpl implements UserDetailsService {
 
     @Override
     public UserDetails loadUserByUsername(String userName) {
-        final String supplierId = request.getHeader("supplierId");
+        final String supplierId = request.getHeader("tenantId");
         BizSupplierUser user = userService.selectUserByUserNameAndSupplierId(userName, supplierId);
+        if (user == null)
+            throw new ServiceException("登录用户:" + userName + " 不存在");
 
         return createLoginUser(user);
-
     }
 
     public UserDetails createLoginUser(BizSupplierUser user) {

+ 3 - 2
src/main/java/cn/ezhizao/framework/web/controller/BaseController.java

@@ -1,5 +1,6 @@
 package cn.ezhizao.framework.web.controller;
 
+import cn.ezhizao.project.business.domain.BizSupplierUser;
 import cn.ezhizao.project.system.domain.SysUser;
 import cn.hutool.core.util.ReflectUtil;
 import com.baomidou.mybatisplus.extension.service.IService;
@@ -200,8 +201,8 @@ public class BaseController {
      * 利用反射 统一设置 当前登录用户 的companyId 作为查询条件
      */
     protected <T> void setTenantId(T t) throws NoSuchFieldException, IllegalAccessException {
-        SysUser user = SecurityUtils.getLoginUser().getUser();
-        if (!user.isAdmin()) {
+        BizSupplierUser user = SecurityUtils.getLoginUser().getUser();
+        if (!"1".equals(user.getIsAdmin())) {
             Field field = t.getClass().getDeclaredField("tenantId");
             field.setAccessible(true);
             field.set(t, user.getTenantId());

+ 49 - 40
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderController.java

@@ -1,8 +1,17 @@
 package cn.ezhizao.project.business.controller;
 
+import java.util.Arrays;
+import java.util.Comparator;
 import java.util.List;
+import java.util.stream.Collectors;
 import javax.annotation.Resource;
+import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+
+import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetail;
+import cn.ezhizao.project.business.domain.BizOutsourcedOrderDetailProcess;
+import cn.ezhizao.project.business.service.IBizOutsourcedOrderDetailProcessService;
+import cn.ezhizao.project.business.service.IBizOutsourcedOrderDetailService;
 import org.springframework.security.access.prepost.PreAuthorize;
 import org.springframework.web.bind.annotation.GetMapping;
 import org.springframework.web.bind.annotation.PostMapping;
@@ -34,7 +43,12 @@ public class BizOutsourcedOrderController extends BaseController
 {
     @Resource
     private IBizOutsourcedOrderService bizOutsourcedOrderService;
-
+    @Resource
+    private IBizOutsourcedOrderDetailService bizOutsourcedOrderDetailService;
+    @Resource
+    private IBizOutsourcedOrderDetailProcessService bizOutsourcedOrderDetailProcessService;
+    @Resource
+    HttpServletRequest request;
     /**
      * 查询外协单主
 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子列表
@@ -43,7 +57,8 @@ public class BizOutsourcedOrderController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException
     {
-        setTenantId(bizOutsourcedOrder);
+        final String supplierId = request.getHeader("tenantId");
+        bizOutsourcedOrder.setSupplierId(Long.parseLong(supplierId));
         startPage();
         List<BizOutsourcedOrder> list = bizOutsourcedOrderService.getList(bizOutsourcedOrder);
         return getDataTable(list);
@@ -65,51 +80,45 @@ public class BizOutsourcedOrderController extends BaseController
     }
 
     /**
-     * 获取外协单主
-带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子详细信息
+     * 获取外协单主 带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子详细信息
      */
     @PreAuthorize("@ss.hasPermi('business:outsource:query')")
     @GetMapping(value = "/{id}")
     public AjaxResult getInfo(@PathVariable("id") Long id)
     {
-        return success(bizOutsourcedOrderService.getById(id));
-    }
+        // 根据 id 获取到外协订单
+        BizOutsourcedOrder outsourcedOrder = bizOutsourcedOrderService.getById(id);
 
-    /**
-     * 新增外协单主
-带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsource:add')")
-    @Log(title = "外协单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrder);
-        return toAjax(bizOutsourcedOrderService.save(bizOutsourcedOrder));
-    }
+        // 根据外协订单id,获取到该外协订单的所有明细
+        List<BizOutsourcedOrderDetail> outsourcedOrderDetails = bizOutsourcedOrderDetailService.query()
+                .eq("master_id", id)
+                .list();
 
-    /**
-     * 修改外协单主
-带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsource:edit')")
-    @Log(title = "外协单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody BizOutsourcedOrder bizOutsourcedOrder) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrder);
-        return toAjax(bizOutsourcedOrderService.updateById(bizOutsourcedOrder));
-    }
+        // 将得到的外协明细的id,组合成一个集合,用于查询这个订单下的,所有外协出来的工序,
+        // 这里得到的工序清单,是混合的,并没有根据各自对应的明细,进行分组,仅仅是获取全部,为后续分组做准备
+        List<Long> detailIds = outsourcedOrderDetails.stream()
+                .map(BizOutsourcedOrderDetail::getId)
+                .collect(Collectors.toList());
+        List<BizOutsourcedOrderDetailProcess> detailProcesses = bizOutsourcedOrderDetailProcessService.query()
+                .in("detail_id", detailIds)
+                .orderByAsc(Arrays.asList("detail_id", "process_step_number"))
+                .list();
 
-    /**
-     * 删除外协单主
-带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsource:remove')")
-    @Log(title = "外协单主带箱方式,是整单的。如果换新箱子,明细中,都需要更换箱子", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable List<Long> ids)
-    {
-        return toAjax(bizOutsourcedOrderService.removeBatchByIds(ids));
+        // 遍历明细,将对应的工序,与订单明细进行匹配
+        outsourcedOrderDetails.forEach(item -> {
+            // 根据明细的id,获取到该明细对应的外协工序,并将得到的工序,组成中文逗号分割的字符串
+            String processNames = detailProcesses.stream()
+                    .filter(dp -> dp.getDetailId().equals(item.getId()))
+                    .sorted(Comparator.comparing((BizOutsourcedOrderDetailProcess::getProcessStepNumber)))
+                    .map(BizOutsourcedOrderDetailProcess::getProcessAlias)
+                    .collect(Collectors.joining(","));
+
+            item.setProcessNames(processNames);
+        });
+
+        // 将外协明细赋值给外协订单
+        outsourcedOrder.setDetails(outsourcedOrderDetails);
+
+        return success(outsourcedOrder);
     }
 }

+ 0 - 35
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailController.java

@@ -69,39 +69,4 @@ public class BizOutsourcedOrderDetailController extends BaseController
     {
         return success(bizOutsourcedOrderDetailService.getById(id));
     }
-
-    /**
-     * 新增外协单从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:add')")
-    @Log(title = "外协单从", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody BizOutsourcedOrderDetail bizOutsourcedOrderDetail) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrderDetail);
-        return toAjax(bizOutsourcedOrderDetailService.save(bizOutsourcedOrderDetail));
-    }
-
-    /**
-     * 修改外协单从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:edit')")
-    @Log(title = "外协单从", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody BizOutsourcedOrderDetail bizOutsourcedOrderDetail) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrderDetail);
-        return toAjax(bizOutsourcedOrderDetailService.updateById(bizOutsourcedOrderDetail));
-    }
-
-    /**
-     * 删除外协单从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:remove')")
-    @Log(title = "外协单从", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable List<Long> ids)
-    {
-        return toAjax(bizOutsourcedOrderDetailService.removeBatchByIds(ids));
-    }
 }

+ 0 - 36
src/main/java/cn/ezhizao/project/business/controller/BizOutsourcedOrderDetailProcessController.java

@@ -41,7 +41,6 @@ public class BizOutsourcedOrderDetailProcessController extends BaseController
     @GetMapping("/list")
     public TableDataInfo list(BizOutsourcedOrderDetailProcess bizOutsourcedOrderDetailProcess) throws NoSuchFieldException, IllegalAccessException
     {
-        setTenantId(bizOutsourcedOrderDetailProcess);
         startPage();
         List<BizOutsourcedOrderDetailProcess> list = bizOutsourcedOrderDetailProcessService.getList(bizOutsourcedOrderDetailProcess);
         return getDataTable(list);
@@ -70,39 +69,4 @@ public class BizOutsourcedOrderDetailProcessController extends BaseController
     {
         return success(bizOutsourcedOrderDetailProcessService.getById(id));
     }
-
-    /**
-     * 新增外协单从对应的外协工序的从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:add')")
-    @Log(title = "外协单从对应的外协工序的从", businessType = BusinessType.INSERT)
-    @PostMapping
-    public AjaxResult add(@RequestBody BizOutsourcedOrderDetailProcess bizOutsourcedOrderDetailProcess) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrderDetailProcess);
-        return toAjax(bizOutsourcedOrderDetailProcessService.save(bizOutsourcedOrderDetailProcess));
-    }
-
-    /**
-     * 修改外协单从对应的外协工序的从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:edit')")
-    @Log(title = "外协单从对应的外协工序的从", businessType = BusinessType.UPDATE)
-    @PutMapping
-    public AjaxResult edit(@RequestBody BizOutsourcedOrderDetailProcess bizOutsourcedOrderDetailProcess) throws NoSuchFieldException, IllegalAccessException
-    {
-        setTenantId(bizOutsourcedOrderDetailProcess);
-        return toAjax(bizOutsourcedOrderDetailProcessService.updateById(bizOutsourcedOrderDetailProcess));
-    }
-
-    /**
-     * 删除外协单从对应的外协工序的从
-     */
-    @PreAuthorize("@ss.hasPermi('business:outsourceDetail:remove')")
-    @Log(title = "外协单从对应的外协工序的从", businessType = BusinessType.DELETE)
-	@DeleteMapping("/{ids}")
-    public AjaxResult remove(@PathVariable List<Long> ids)
-    {
-        return toAjax(bizOutsourcedOrderDetailProcessService.removeBatchByIds(ids));
-    }
 }

+ 10 - 0
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrder.java

@@ -78,4 +78,14 @@ public class BizOutsourcedOrder extends BaseEntity
     /** 对应的产品明细 **/
     @TableField(exist = false)
     private List<BizOutsourcedOrderDetail> details;
+
+    /** 前端查询用 开始日期 **/
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date formStartDate;
+
+    /** 前端查询用 结束日期 **/
+    @JsonFormat(pattern = "yyyy-MM-dd")
+    @TableField(exist = false)
+    private Date formEndDate;
 }

+ 9 - 0
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetail.java

@@ -29,6 +29,11 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long tenantId;
 
+    /** 主表id */
+    @Excel(name = "主表id")
+    @ApiModelProperty(value = "主表id")
+    private Long masterId;
+
     /** 单据号 */
     @Excel(name = "单据号")
     @ApiModelProperty(value = "单据号")
@@ -81,6 +86,10 @@ public class BizOutsourcedOrderDetail extends BaseEntity
     @ApiModelProperty(value = "产品描述")
     private String productDescription;
 
+    /** 产品数量 */
+    @ApiModelProperty(value = "产品数量")
+    private Integer productNum;
+
     /** 工艺id(通过工艺id,获取版本号) */
     @ApiModelProperty(value = "产品描述")
     private Long technologicalProcessId;

+ 39 - 12
src/main/java/cn/ezhizao/project/business/domain/BizOutsourcedOrderDetailProcess.java

@@ -26,6 +26,16 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     @ApiModelProperty(value = "${comment}")
     private Long tenantId;
 
+    /** 明细id */
+    @Excel(name = "明细id")
+    @ApiModelProperty(value = "明细id")
+    private Long detailId;
+
+    /** 主表id */
+    @Excel(name = "主表id")
+    @ApiModelProperty(value = "主表id")
+    private Long masterId;
+
     /** 单据号 */
     @Excel(name = "单据号")
     @ApiModelProperty(value = "单据号")
@@ -46,18 +56,23 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     @ApiModelProperty(value = "外协商名称")
     private String supplierName;
 
-    /** 0:自提;1:物流 */
-    @Excel(name = "0:自提;1:物流")
+    /** 送货方式 */
+    @Excel(name = "送货方式")
     @ApiModelProperty(value = "0:自提;1:物流")
-    private Integer deliveryMethod;
+    private String deliveryMethod;
+
+    /** 结算方式 */
+    @Excel(name = "结算方式")
+    @ApiModelProperty(value = "0:无结算方式;1:按支结算;2:按炉结算")
+    private String settlementType;
 
-    /** 带箱方式:0:原箱;1:新箱 */
-    @Excel(name = "带箱方式:0:原箱;1:新箱")
+    /** 带箱方式 */
+    @Excel(name = "带箱方式")
     @ApiModelProperty(value = "带箱方式:0:原箱;1:新箱")
     private String packagingMethod;
 
     /** 批次id */
-    @ApiModelProperty(value = "带箱方式:0:原箱;1:新箱")
+    @ApiModelProperty(value = "批次id")
     private Long lotId;
 
     /** 批次号 */
@@ -66,11 +81,11 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     private String lotCode;
 
     /** 报工主表id */
-    @ApiModelProperty(value = "带箱方式:0:原箱;1:新箱")
+    @ApiModelProperty(value = "报工主表id")
     private Long dayworkId;
 
     /** 产品id */
-    @ApiModelProperty(value = "带箱方式:0:原箱;1:新箱")
+    @ApiModelProperty(value = "产品id")
     private Long productId;
 
     /** 产品描述 */
@@ -79,16 +94,16 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     private String productDescription;
 
     /** 工艺id(通过工艺id,获取版本号) */
-    @ApiModelProperty(value = "产品描述")
+    @ApiModelProperty(value = "工艺id")
     private Long technologicalProcessId;
 
     /** 工艺版本A,B,C */
-    @Excel(name = "工艺版本A,B,C")
+    @Excel(name = "工艺版本")
     @ApiModelProperty(value = "工艺版本A,B,C")
     private String technologyVersion;
 
     /** 工序id */
-    @ApiModelProperty(value = "工艺版本A,B,C")
+    @ApiModelProperty(value = "工序id")
     private Long processId;
 
     /** 工序简称 */
@@ -96,8 +111,20 @@ public class BizOutsourcedOrderDetailProcess extends BaseEntity
     @ApiModelProperty(value = "工序简称")
     private String processAlias;
 
-    /** 工序简称 */
+    /** 工序序号 */
     @Excel(name = "工序序号")
     @ApiModelProperty(value = "=seq1(2位)+seq2(1位)+0(第4位用于单批单改)")
     private String processStepNumber;
+
+    /** 批次产品数 */
+    @ApiModelProperty(value = "批次产品数")
+    private Integer productNum;
+
+    /** 投产数 */
+    @ApiModelProperty(value = "投产数")
+    private Integer productionNum;
+
+    /** 合格数 */
+    @ApiModelProperty(value = "合格数")
+    private Integer qualifiedNum;
 }

+ 62 - 0
src/main/java/cn/ezhizao/project/business/domain/BizSupplier.java

@@ -0,0 +1,62 @@
+package cn.ezhizao.project.business.domain;
+
+import cn.ezhizao.framework.aspectj.lang.annotation.Excel;
+import cn.ezhizao.framework.web.domain.BaseEntity;
+import com.baomidou.mybatisplus.annotation.TableName;
+import io.swagger.annotations.ApiModelProperty;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+
+import java.math.BigDecimal;
+
+/**
+ * 外协商主表
+ *
+ * @author ezhizao
+ * date    2024-04-24
+ */
+@Data
+@EqualsAndHashCode(callSuper = true)
+@TableName(value = "biz_supplier")
+public class BizSupplier extends BaseEntity {
+    private static final long serialVersionUID = 1L;
+
+    @ApiModelProperty(value = "租户(厂别)id")
+    private Long tenantId;
+
+    @Excel(name = "公司编码")
+    @ApiModelProperty(value = "公司编码")
+    private String code;
+
+    @Excel(name = "公司名称")
+    @ApiModelProperty(value = "公司名称")
+    private String name;
+
+    @Excel(name = "公司别名")
+    @ApiModelProperty(value = "公司别名")
+    private String alias;
+
+    @Excel(name = "助记码")
+    @ApiModelProperty(value = "助记码")
+    private String mnemonicCode;
+
+    @Excel(name = "地区")
+    @ApiModelProperty(value = "地区")
+    private String region;
+
+    @Excel(name = "送货方式")
+    @ApiModelProperty(value = "送货方式:0:自提;1:物流")
+    private String deliveryMethod;
+
+    @Excel(name = "结算方式")
+    @ApiModelProperty(value = "0:无结算方式,1:按支结算,2:按炉结算")
+    private String settlementType;
+
+    @Excel(name = "损耗上限")
+    @ApiModelProperty(value = "损耗上限")
+    private BigDecimal lossLimit;
+
+    @Excel(name = "备注")
+    @ApiModelProperty(value = "备注")
+    private String remark;
+}

+ 7 - 0
src/main/java/cn/ezhizao/project/business/domain/BizSupplierUser.java

@@ -1,11 +1,15 @@
 package cn.ezhizao.project.business.domain;
 
 import cn.ezhizao.framework.web.domain.BaseEntity;
+import cn.ezhizao.project.system.domain.SysRole;
+import com.baomidou.mybatisplus.annotation.TableField;
 import com.baomidou.mybatisplus.annotation.TableName;
 import io.swagger.annotations.ApiModelProperty;
 import lombok.Data;
 import lombok.EqualsAndHashCode;
 
+import java.util.List;
+
 /**
  * 外协商的用户表
  *
@@ -44,4 +48,7 @@ public class BizSupplierUser extends BaseEntity {
 
     @ApiModelProperty(value = "备注")
     private String remark;
+
+    @TableField(exist = false)
+    private List<SysRole> roles;
 }

+ 17 - 0
src/main/java/cn/ezhizao/project/business/mapper/BizSupplierMapper.java

@@ -0,0 +1,17 @@
+package cn.ezhizao.project.business.mapper;
+
+import cn.ezhizao.project.business.domain.BizSupplier;
+import com.baomidou.mybatisplus.core.mapper.BaseMapper;
+
+import java.util.List;
+
+
+/**
+ * 外协商主表Mapper接口
+ *
+ * @author ezhizao
+ * date    2024-04-24
+ */
+public interface BizSupplierMapper extends BaseMapper<BizSupplier> {
+
+}

+ 14 - 0
src/main/java/cn/ezhizao/project/business/service/IBizSupplierService.java

@@ -0,0 +1,14 @@
+package cn.ezhizao.project.business.service;
+
+import cn.ezhizao.project.business.domain.BizSupplier;
+import com.baomidou.mybatisplus.extension.service.IService;
+
+/**
+ * 外协商Service接口
+ *
+ * @author ezhizao
+ * date    2024-04-24
+ */
+public interface IBizSupplierService extends IService<BizSupplier> {
+
+}

+ 17 - 0
src/main/java/cn/ezhizao/project/business/service/impl/BizSupplierServiceImpl.java

@@ -0,0 +1,17 @@
+package cn.ezhizao.project.business.service.impl;
+
+import cn.ezhizao.project.business.domain.BizSupplier;
+import cn.ezhizao.project.business.mapper.BizSupplierMapper;
+import cn.ezhizao.project.business.service.IBizSupplierService;
+import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
+import org.springframework.stereotype.Service;
+
+/**
+ * 外协商主表Service业务层处理
+ *
+ * @author ezhizao
+ * date    2024-04-24
+ */
+@Service
+public class BizSupplierServiceImpl extends ServiceImpl<BizSupplierMapper, BizSupplier> implements IBizSupplierService {
+}

+ 128 - 0
src/main/java/cn/ezhizao/project/system/controller/SysDictDataController.java

@@ -0,0 +1,128 @@
+package cn.ezhizao.project.system.controller;
+
+import cn.ezhizao.common.utils.StringUtils;
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.system.domain.SysDictData;
+import cn.ezhizao.project.system.service.ISysDictDataService;
+import cn.ezhizao.project.system.service.ISysDictTypeService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * 数据字典信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/data")
+public class SysDictDataController extends BaseController
+{
+    @Resource
+    private ISysDictDataService dictDataService;
+
+    @Resource
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictData dictData)
+    {
+        startPage();
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典数据", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictData dictData)
+    {
+        List<SysDictData> list = dictDataService.selectDictDataList(dictData);
+        ExcelUtil<SysDictData> util = new ExcelUtil<SysDictData>(SysDictData.class);
+        util.exportExcel(response, list, "字典数据");
+    }
+
+    /**
+     * 查询字典数据详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictCode}")
+    public AjaxResult getInfo(@PathVariable Long dictCode)
+    {
+        return success(dictDataService.selectDictDataById(dictCode));
+    }
+
+    /**
+     * 根据字典类型查询字典数据信息
+     */
+    @GetMapping(value = "/type/{dictType}")
+    public AjaxResult dictType(@PathVariable String dictType)
+    {
+        List<SysDictData> data = dictTypeService.selectDictDataByType(dictType);
+        if (StringUtils.isNull(data))
+        {
+            data = new ArrayList<>();
+        }
+        return success(data);
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典数据", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setCreateBy(getUsername());
+        return toAjax(dictDataService.insertDictData(dict));
+    }
+
+    /**
+     * 修改保存字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典数据", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictData dict)
+    {
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictDataService.updateDictData(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictCodes}")
+    public AjaxResult remove(@PathVariable Long[] dictCodes)
+    {
+        dictDataService.deleteDictDataByIds(dictCodes);
+        return success();
+    }
+
+    /**
+     * 精确查询值
+     */
+    @GetMapping("/getDictData")
+    public SysDictData getDictData(String type, String value)
+    {
+        SysDictData sysDictData = new SysDictData();
+        sysDictData.setDictType(type.trim());
+        sysDictData.setDictValue(value.trim());
+
+        return dictDataService.getDictData(sysDictData);
+    }
+}

+ 131 - 0
src/main/java/cn/ezhizao/project/system/controller/SysDictTypeController.java

@@ -0,0 +1,131 @@
+package cn.ezhizao.project.system.controller;
+
+import cn.ezhizao.common.constant.UserConstants;
+import cn.ezhizao.common.utils.poi.ExcelUtil;
+import cn.ezhizao.framework.aspectj.lang.annotation.Log;
+import cn.ezhizao.framework.aspectj.lang.enums.BusinessType;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.framework.web.page.TableDataInfo;
+import cn.ezhizao.project.system.domain.SysDictType;
+import cn.ezhizao.project.system.service.ISysDictTypeService;
+import org.springframework.security.access.prepost.PreAuthorize;
+import org.springframework.validation.annotation.Validated;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import javax.servlet.http.HttpServletResponse;
+import java.util.List;
+
+/**
+ * 数据字典信息
+ *
+ * @author ruoyi
+ */
+@RestController
+@RequestMapping("/system/dict/type")
+public class SysDictTypeController extends BaseController
+{
+    @Resource
+    private ISysDictTypeService dictTypeService;
+
+    @PreAuthorize("@ss.hasPermi('system:dict:list')")
+    @GetMapping("/list")
+    public TableDataInfo list(SysDictType dictType)
+    {
+        startPage();
+        List<SysDictType> list = dictTypeService.selectDictTypeList(dictType);
+        return getDataTable(list);
+    }
+
+    @Log(title = "字典类型", businessType = BusinessType.EXPORT)
+    @PreAuthorize("@ss.hasPermi('system:dict:export')")
+    @PostMapping("/export")
+    public void export(HttpServletResponse response, SysDictType dictType)
+    {
+        List<SysDictType> list;
+        if (dictType.getIds().size() > 0){
+            list = dictTypeService.selectDictTypeListByIds(dictType.getIds());
+        }else{
+            list = dictTypeService.selectDictTypeList(dictType);
+        }
+        ExcelUtil<SysDictType> util = new ExcelUtil<SysDictType>(SysDictType.class);
+        util.exportExcel(response, list, "字典类型");
+    }
+
+    /**
+     * 查询字典类型详细
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:query')")
+    @GetMapping(value = "/{dictId}")
+    public AjaxResult getInfo(@PathVariable Long dictId)
+    {
+        return success(dictTypeService.selectDictTypeById(dictId));
+    }
+
+    /**
+     * 新增字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:add')")
+    @Log(title = "字典类型", businessType = BusinessType.INSERT)
+    @PostMapping
+    public AjaxResult add(@Validated @RequestBody SysDictType dict)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return error("新增字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setCreateBy(getUsername());
+        return toAjax(dictTypeService.insertDictType(dict));
+    }
+
+    /**
+     * 修改字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:edit')")
+    @Log(title = "字典类型", businessType = BusinessType.UPDATE)
+    @PutMapping
+    public AjaxResult edit(@Validated @RequestBody SysDictType dict)
+    {
+        if (UserConstants.NOT_UNIQUE.equals(dictTypeService.checkDictTypeUnique(dict)))
+        {
+            return error("修改字典'" + dict.getDictName() + "'失败,字典类型已存在");
+        }
+        dict.setUpdateBy(getUsername());
+        return toAjax(dictTypeService.updateDictType(dict));
+    }
+
+    /**
+     * 删除字典类型
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.DELETE)
+    @DeleteMapping("/{dictIds}")
+    public AjaxResult remove(@PathVariable Long[] dictIds)
+    {
+        dictTypeService.deleteDictTypeByIds(dictIds);
+        return success();
+    }
+
+    /**
+     * 刷新字典缓存
+     */
+    @PreAuthorize("@ss.hasPermi('system:dict:remove')")
+    @Log(title = "字典类型", businessType = BusinessType.CLEAN)
+    @DeleteMapping("/refreshCache")
+    public AjaxResult refreshCache()
+    {
+        dictTypeService.resetDictCache();
+        return success();
+    }
+
+    /**
+     * 获取字典选择框列表
+     */
+    @GetMapping("/optionselect")
+    public AjaxResult optionselect()
+    {
+        List<SysDictType> dictTypes = dictTypeService.selectDictTypeAll();
+        return success(dictTypes);
+    }
+}

+ 88 - 0
src/main/java/cn/ezhizao/project/system/controller/SysLoginController.java

@@ -0,0 +1,88 @@
+package cn.ezhizao.project.system.controller;
+
+import cn.ezhizao.common.constant.Constants;
+import cn.ezhizao.common.utils.SecurityUtils;
+import cn.ezhizao.framework.security.LoginBody;
+import cn.ezhizao.framework.security.service.SysLoginService;
+import cn.ezhizao.framework.security.service.SysPermissionService;
+import cn.ezhizao.framework.web.controller.BaseController;
+import cn.ezhizao.framework.web.domain.AjaxResult;
+import cn.ezhizao.project.business.domain.BizSupplierUser;
+import cn.ezhizao.project.business.service.IBizSupplierService;
+import cn.ezhizao.project.business.service.IBizSupplierUserService;
+import org.springframework.web.bind.annotation.*;
+
+import javax.annotation.Resource;
+import java.util.*;
+
+/**
+ * 登录验证
+ *
+ * @author ruoyi
+ */
+@RestController
+public class SysLoginController extends BaseController
+{
+    @Resource
+    private SysLoginService loginService;
+
+    @Resource
+    private SysPermissionService permissionService;
+
+    @Resource
+    private IBizSupplierUserService bizSupplierUserService;
+    @Resource
+    private IBizSupplierService bizSupplierService;
+
+    /**
+     * 登录方法
+     *
+     * @param loginBody 登录信息
+     * @return 结果
+     */
+    @PostMapping("/login")
+    public AjaxResult login(@RequestBody LoginBody loginBody)
+    {
+        AjaxResult ajax = AjaxResult.success();
+        // 正常登录
+        Map<String, Object> loginResult = loginService.login(loginBody.getUsername(), loginBody.getPassword());
+        ajax.put(Constants.TOKEN, loginResult.get(Constants.TOKEN));
+        return ajax;
+    }
+
+    /**
+     * 获取用户信息
+     *
+     * @return 用户信息
+     */
+    @GetMapping("getInfo")
+    public AjaxResult getInfo()
+    {
+        BizSupplierUser user = SecurityUtils.getLoginUser().getUser();
+        // 角色集合
+        Set<String> roles = new HashSet<>();
+        // 权限集合
+        Set<String> permissions = permissionService.getMenuPermission(user);
+        AjaxResult ajax = AjaxResult.success();
+        ajax.put("user", user);
+        ajax.put("roles", roles);
+        ajax.put("permissions", permissions);
+        return ajax;
+    }
+
+    @GetMapping("getRouters")
+    public AjaxResult getRouters()
+    {
+        return AjaxResult.success(new ArrayList<>());
+    }
+
+    /**
+     * 根据企业名称 模糊查询租户
+     * @param orgName 公司名
+     * @return AjaxResult
+     */
+    @GetMapping("/snms/getSupplierListByOrgName/{orgName}")
+    public AjaxResult getTenantListByOrgName(@PathVariable("orgName") String orgName){
+        return success(bizSupplierService.query().like("name",orgName).list());
+    }
+}

+ 100 - 0
src/main/java/cn/ezhizao/project/system/mapper/SysDictDataMapper.java

@@ -0,0 +1,100 @@
+package cn.ezhizao.project.system.mapper;
+
+import cn.ezhizao.project.system.domain.SysDictData;
+import org.apache.ibatis.annotations.Param;
+
+import java.util.List;
+
+/**
+ * 字典表 数据层
+ *
+ * @author ruoyi
+ */
+public interface SysDictDataMapper
+{
+    /**
+     * 根据条件分页查询字典数据
+     *
+     * @param dictData 字典数据信息
+     * @return 字典数据集合信息
+     */
+    public List<SysDictData> selectDictDataList(SysDictData dictData);
+
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    public List<SysDictData> selectDictDataByType(String dictType);
+
+    /**
+     * 根据字典类型和字典键值查询字典数据信息
+     *
+     * @param dictType 字典类型
+     * @param dictValue 字典键值
+     * @return 字典标签
+     */
+    public String selectDictLabel(@Param("dictType") String dictType, @Param("dictValue") String dictValue);
+
+    /**
+     * 根据字典数据ID查询信息
+     *
+     * @param dictCode 字典数据ID
+     * @return 字典数据
+     */
+    public SysDictData selectDictDataById(Long dictCode);
+
+    /**
+     * 查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据
+     */
+    public int countDictDataByType(String dictType);
+
+    /**
+     * 通过字典ID删除字典数据信息
+     *
+     * @param dictCode 字典数据ID
+     * @return 结果
+     */
+    public int deleteDictDataById(Long dictCode);
+
+    /**
+     * 批量删除字典数据信息
+     *
+     * @param dictCodes 需要删除的字典数据ID
+     * @return 结果
+     */
+    public int deleteDictDataByIds(Long[] dictCodes);
+
+    /**
+     * 新增字典数据信息
+     *
+     * @param dictData 字典数据信息
+     * @return 结果
+     */
+    public int insertDictData(SysDictData dictData);
+
+    /**
+     * 修改字典数据信息
+     *
+     * @param dictData 字典数据信息
+     * @return 结果
+     */
+    public int updateDictData(SysDictData dictData);
+
+    /**
+     * 查询单个字典数据
+     */
+    public SysDictData getDictData(SysDictData dictData);
+    /**
+     * 同步修改字典类型
+     *
+     * @param oldDictType 旧字典类型
+     * @param newDictType 新旧字典类型
+     * @return 结果
+     */
+    public int updateDictDataType(@Param("oldDictType") String oldDictType, @Param("newDictType") String newDictType);
+}

+ 91 - 0
src/main/java/cn/ezhizao/project/system/mapper/SysDictTypeMapper.java

@@ -0,0 +1,91 @@
+package cn.ezhizao.project.system.mapper;
+
+import cn.ezhizao.project.system.domain.SysDictType;
+
+import java.util.List;
+
+/**
+ * 字典表 数据层
+ *
+ * @author ruoyi
+ */
+public interface SysDictTypeMapper
+{
+    /**
+     * 根据条件分页查询字典类型
+     *
+     * @param dictType 字典类型信息
+     * @return 字典类型集合信息
+     */
+    public List<SysDictType> selectDictTypeList(SysDictType dictType);
+
+    /**
+     * 根据ids查询字典类型
+     * @param ids
+     * @return
+     */
+    public List<SysDictType> selectDictTypeListByIds(List<Long> ids);
+
+    /**
+     * 根据所有字典类型
+     *
+     * @return 字典类型集合信息
+     */
+    public List<SysDictType> selectDictTypeAll();
+
+    /**
+     * 根据字典类型ID查询信息
+     *
+     * @param dictId 字典类型ID
+     * @return 字典类型
+     */
+    public SysDictType selectDictTypeById(Long dictId);
+
+    /**
+     * 根据字典类型查询信息
+     *
+     * @param dictType 字典类型
+     * @return 字典类型
+     */
+    public SysDictType selectDictTypeByType(String dictType);
+
+    /**
+     * 通过字典ID删除字典信息
+     *
+     * @param dictId 字典ID
+     * @return 结果
+     */
+    public int deleteDictTypeById(Long dictId);
+
+    /**
+     * 批量删除字典类型信息
+     *
+     * @param dictIds 需要删除的字典ID
+     * @return 结果
+     */
+    public int deleteDictTypeByIds(Long[] dictIds);
+
+    /**
+     * 新增字典类型信息
+     *
+     * @param dictType 字典类型信息
+     * @return 结果
+     */
+    public int insertDictType(SysDictType dictType);
+
+    /**
+     * 修改字典类型信息
+     *
+     * @param dictType 字典类型信息
+     * @return 结果
+     */
+    public int updateDictType(SysDictType dictType);
+
+    /**
+     * 校验字典类型称是否唯一
+     *
+     * @param dictType 字典类型
+     * @return 结果
+     */
+    public SysDictType checkDictTypeUnique(String dictType);
+}

+ 0 - 130
src/main/java/cn/ezhizao/project/system/service/ISysDeptService.java

@@ -1,130 +0,0 @@
-package cn.ezhizao.project.system.service;
-
-import cn.ezhizao.project.business.domain.BizFurnaceNoInfo;
-import cn.ezhizao.project.system.domain.SysDept;
-import com.baomidou.mybatisplus.extension.service.IService;
-
-import java.util.List;
-
-/**
- * 部门管理 服务层
- *
- * @author ruoyi
- */
-public interface ISysDeptService
-{
-    /**
-     * 查询部门管理数据
-     *
-     * @param dept 部门信息
-     * @return 部门信息集合
-     */
-    public List<SysDept> selectDeptList(SysDept dept);
-
-    /**
-     * 查询部门树结构信息
-     *
-     * @param
-     * @return 部门树信息集合
-     */
-
-
-    public List<SysDept> getDeptOptions(List<Long> ids);
-    /**
-     * 构建前端所需要树结构
-     *
-     * @param depts 部门列表
-     * @return 树结构列表
-     */
-    public List<SysDept> buildDeptTree(List<SysDept> depts);
-
-    /**
-     * 构建前端所需要下拉树结构
-     *
-     * @param depts 部门列表
-     * @return 下拉树结构列表
-     */
-
-
-    /**
-     * 根据部门ID查询信息
-     *
-     * @param deptId 部门ID
-     * @return 部门信息
-     */
-    public SysDept selectDeptById(Long deptId);
-
-    /**
-     * 根据ID查询所有子部门(正常状态)
-     *
-     * @param deptId 部门ID
-     * @return 子部门数
-     */
-    public int selectNormalChildrenDeptById(Long deptId);
-
-    /**
-     * 是否存在部门子节点
-     *
-     * @param deptId 部门ID
-     * @return 结果
-     */
-    public boolean hasChildByDeptId(Long deptId);
-
-    /**
-     * 查询部门是否存在用户
-     *
-     * @param deptId 部门ID
-     * @return 结果 true 存在 false 不存在
-     */
-    public boolean checkDeptExistUser(Long deptId);
-
-    /**
-     * 校验部门名称是否唯一
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    public String checkDeptNameUnique(SysDept dept);
-
-    /**
-     * 校验统一社会信用编码是否唯一
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    public String checkDeptCodeUnique(SysDept dept);
-
-    /**
-     * 校验部门是否有数据权限
-     *
-     * @param deptId 部门id
-     */
-    public void checkDeptDataScope(Long deptId);
-
-    /**
-     * 新增保存部门信息
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    public int insertDept(SysDept dept);
-
-    /**
-     * 修改保存部门信息
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    public int updateDept(SysDept dept);
-
-    /**
-     * 删除部门管理信息
-     *
-     * @param deptId 部门ID
-     * @return 结果
-     */
-    public int deleteDeptById(Long deptId);
-
-
-
-}

+ 66 - 0
src/main/java/cn/ezhizao/project/system/service/ISysDictDataService.java

@@ -0,0 +1,66 @@
+package cn.ezhizao.project.system.service;
+
+import cn.ezhizao.project.system.domain.SysDictData;
+
+import java.util.List;
+
+/**
+ * 字典 业务层
+ *
+ * @author ruoyi
+ */
+public interface ISysDictDataService
+{
+    /**
+     * 根据条件分页查询字典数据
+     *
+     * @param dictData 字典数据信息
+     * @return 字典数据集合信息
+     */
+    public List<SysDictData> selectDictDataList(SysDictData dictData);
+
+    /**
+     * 根据字典类型和字典键值查询字典数据信息
+     *
+     * @param dictType 字典类型
+     * @param dictValue 字典键值
+     * @return 字典标签
+     */
+    public String selectDictLabel(String dictType, String dictValue);
+
+    /**
+     * 根据字典数据ID查询信息
+     *
+     * @param dictCode 字典数据ID
+     * @return 字典数据
+     */
+    public SysDictData selectDictDataById(Long dictCode);
+
+    /**
+     * 批量删除字典数据信息
+     *
+     * @param dictCodes 需要删除的字典数据ID
+     */
+    public void deleteDictDataByIds(Long[] dictCodes);
+
+    /**
+     * 新增保存字典数据信息
+     *
+     * @param dictData 字典数据信息
+     * @return 结果
+     */
+    public int insertDictData(SysDictData dictData);
+
+    /**
+     * 修改保存字典数据信息
+     *
+     * @param dictData 字典数据信息
+     * @return 结果
+     */
+    public int updateDictData(SysDictData dictData);
+
+    /**
+     * 查询单个字典数据
+     */
+    public SysDictData getDictData(SysDictData dictData);
+}

+ 106 - 0
src/main/java/cn/ezhizao/project/system/service/ISysDictTypeService.java

@@ -0,0 +1,106 @@
+package cn.ezhizao.project.system.service;
+
+import cn.ezhizao.project.system.domain.SysDictData;
+import cn.ezhizao.project.system.domain.SysDictType;
+
+import java.util.List;
+
+/**
+ * 字典 业务层
+ *
+ * @author ruoyi
+ */
+public interface ISysDictTypeService
+{
+    /**
+     * 根据条件分页查询字典类型
+     *
+     * @param dictType 字典类型信息
+     * @return 字典类型集合信息
+     */
+    public List<SysDictType> selectDictTypeList(SysDictType dictType);
+
+    /**
+     * 根据ids查询字典类型
+     * @param ids
+     * @return
+     */
+    public List<SysDictType> selectDictTypeListByIds(List<Long> ids);
+
+    /**
+     * 根据所有字典类型
+     *
+     * @return 字典类型集合信息
+     */
+    public List<SysDictType> selectDictTypeAll();
+
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    public List<SysDictData> selectDictDataByType(String dictType);
+
+    /**
+     * 根据字典类型ID查询信息
+     *
+     * @param dictId 字典类型ID
+     * @return 字典类型
+     */
+    public SysDictType selectDictTypeById(Long dictId);
+
+    /**
+     * 根据字典类型查询信息
+     *
+     * @param dictType 字典类型
+     * @return 字典类型
+     */
+    public SysDictType selectDictTypeByType(String dictType);
+
+    /**
+     * 批量删除字典信息
+     *
+     * @param dictIds 需要删除的字典ID
+     */
+    public void deleteDictTypeByIds(Long[] dictIds);
+
+    /**
+     * 加载字典缓存数据
+     */
+    public void loadingDictCache();
+
+    /**
+     * 清空字典缓存数据
+     */
+    public void clearDictCache();
+
+    /**
+     * 重置字典缓存数据
+     */
+    public void resetDictCache();
+
+    /**
+     * 新增保存字典类型信息
+     *
+     * @param dictType 字典类型信息
+     * @return 结果
+     */
+    public int insertDictType(SysDictType dictType);
+
+    /**
+     * 修改保存字典类型信息
+     *
+     * @param dictType 字典类型信息
+     * @return 结果
+     */
+    public int updateDictType(SysDictType dictType);
+
+    /**
+     * 校验字典类型称是否唯一
+     *
+     * @param dictType 字典类型
+     * @return 结果
+     */
+    public String checkDictTypeUnique(SysDictType dictType);
+}

+ 0 - 349
src/main/java/cn/ezhizao/project/system/service/impl/SysDeptServiceImpl.java

@@ -1,349 +0,0 @@
-package cn.ezhizao.project.system.service.impl;
-
-import cn.ezhizao.common.constant.UserConstants;
-import cn.ezhizao.common.core.text.Convert;
-import cn.ezhizao.common.exception.ServiceException;
-import cn.ezhizao.common.utils.SecurityUtils;
-import cn.ezhizao.common.utils.StringUtils;
-import cn.ezhizao.common.utils.spring.SpringUtils;
-import cn.ezhizao.framework.aspectj.lang.annotation.DataScope;
-import cn.ezhizao.project.business.domain.BizApp;
-import cn.ezhizao.project.business.mapper.BizAppMapper;
-import cn.ezhizao.project.system.domain.SysDept;
-import cn.ezhizao.project.system.domain.SysRole;
-import cn.ezhizao.project.system.domain.SysUser;
-import cn.ezhizao.project.system.mapper.SysDeptMapper;
-import cn.ezhizao.project.system.service.ISysDeptService;
-import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
-import org.springframework.stereotype.Service;
-
-import javax.annotation.Resource;
-import java.util.ArrayList;
-import java.util.Iterator;
-import java.util.List;
-import java.util.stream.Collectors;
-
-/**
- * 部门管理 服务实现
- *
- * @author ruoyi
- */
-@Service
-public class SysDeptServiceImpl implements ISysDeptService
-{
-    @Resource
-    private SysDeptMapper deptMapper;
-
-
-    /**
-     * 查询部门管理数据
-     *
-     * @param dept 部门信息
-     * @return 部门信息集合
-     */
-    @Override
-    @DataScope(deptAlias = "d")
-    public List<SysDept> selectDeptList(SysDept dept)
-    {
-        return deptMapper.selectDeptList(dept);
-    }
-
-    @Override
-    public List<SysDept> getDeptOptions(List<Long> ids) {
-        return deptMapper.getDeptOptions(ids);
-    }
-
-    /**
-     * 查询部门树结构信息
-     *
-     * @param dept 部门信息
-     * @return 部门树信息集合
-     */
-
-
-
-
-    /**
-     * 构建前端所需要树结构
-     *
-     * @param depts 部门列表
-     * @return 树结构列表
-     */
-    @Override
-    public List<SysDept> buildDeptTree(List<SysDept> depts)
-    {
-        List<SysDept> returnList = new ArrayList<>();
-        List<Long> tempList = depts.stream().map(SysDept::getDeptId).collect(Collectors.toList());
-        for (SysDept dept : depts)
-        {
-            // 如果是顶级节点, 遍历该父节点的所有子节点
-            if (!tempList.contains(dept.getParentId()))
-            {
-                recursionFn(depts, dept);
-                returnList.add(dept);
-            }
-        }
-        if (returnList.isEmpty())
-        {
-            returnList = depts;
-        }
-        return returnList;
-    }
-
-
-
-    /**
-     * 根据角色ID查询部门树信息
-     *
-     * @param roleId 角色ID
-     * @return 选中部门列表
-     */
-
-
-    /**
-     * 根据部门ID查询信息
-     *
-     * @param deptId 部门ID
-     * @return 部门信息
-     */
-    @Override
-    public SysDept selectDeptById(Long deptId)
-    {
-        return deptMapper.selectDeptById(deptId);
-    }
-
-    /**
-     * 根据ID查询所有子部门(正常状态)
-     *
-     * @param deptId 部门ID
-     * @return 子部门数
-     */
-    @Override
-    public int selectNormalChildrenDeptById(Long deptId)
-    {
-        return deptMapper.selectNormalChildrenDeptById(deptId);
-    }
-
-    /**
-     * 是否存在子节点
-     *
-     * @param deptId 部门ID
-     * @return 结果
-     */
-    @Override
-    public boolean hasChildByDeptId(Long deptId)
-    {
-        int result = deptMapper.hasChildByDeptId(deptId);
-        return result > 0;
-    }
-
-    /**
-     * 查询部门是否存在用户
-     *
-     * @param deptId 部门ID
-     * @return 结果 true 存在 false 不存在
-     */
-    @Override
-    public boolean checkDeptExistUser(Long deptId)
-    {
-        int result = deptMapper.checkDeptExistUser(deptId);
-        return result > 0;
-    }
-
-    /**
-     * 校验部门名称是否唯一
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    @Override
-    public String checkDeptNameUnique(SysDept dept)
-    {
-        Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
-        SysDept info = deptMapper.checkDeptNameUnique(dept.getDeptName(), dept.getParentId());
-        if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验统一社会信用编码是否唯一
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    @Override
-    public String checkDeptCodeUnique(SysDept dept)
-    {
-        Long deptId = StringUtils.isNull(dept.getDeptId()) ? -1L : dept.getDeptId();
-        SysDept info = deptMapper.checkDeptCodeUnique(dept.getDeptCode(), dept.getParentId());
-        if (StringUtils.isNotNull(info) && info.getDeptId().longValue() != deptId.longValue())
-        {
-            return UserConstants.NOT_UNIQUE;
-        }
-        return UserConstants.UNIQUE;
-    }
-
-    /**
-     * 校验部门是否有数据权限
-     *
-     * @param deptId 部门id
-     */
-    @Override
-    public void checkDeptDataScope(Long deptId)
-    {
-        if (!SysUser.isAdmin(SecurityUtils.getUserId()))
-        {
-            SysDept dept = new SysDept();
-            dept.setDeptId(deptId);
-            List<SysDept> depts = SpringUtils.getAopProxy(this).selectDeptList(dept);
-            if (StringUtils.isEmpty(depts))
-            {
-                throw new ServiceException("没有权限访问部门数据!");
-            }
-        }
-    }
-
-    /**
-     * 新增保存部门信息
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    @Override
-    public int insertDept(SysDept dept)
-    {
-        if(dept.getParentId() != 0) {
-            SysDept info = deptMapper.selectDeptById(dept.getParentId());
-            // 如果父节点不为正常状态,则不允许新增子节点
-            if (!UserConstants.DEPT_NORMAL.equals(info.getStatus())) {
-                throw new ServiceException("部门停用,不允许新增");
-            }
-            dept.setAncestors(info.getAncestors() + "," + dept.getParentId());
-        }
-        return deptMapper.insertDept(dept);
-    }
-
-    /**
-     * 修改保存部门信息
-     *
-     * @param dept 部门信息
-     * @return 结果
-     */
-    @Override
-    public int updateDept(SysDept dept)
-    {
-        SysDept newParentDept = deptMapper.selectDeptById(dept.getParentId());
-        SysDept oldDept = deptMapper.selectDeptById(dept.getDeptId());
-        if (StringUtils.isNotNull(newParentDept) && StringUtils.isNotNull(oldDept))
-        {
-            String newAncestors = newParentDept.getAncestors() + "," + newParentDept.getDeptId();
-            String oldAncestors = oldDept.getAncestors();
-            dept.setAncestors(newAncestors);
-            updateDeptChildren(dept.getDeptId(), newAncestors, oldAncestors);
-        }
-        int result = deptMapper.updateDept(dept);
-        if (UserConstants.DEPT_NORMAL.equals(dept.getStatus()) && StringUtils.isNotEmpty(dept.getAncestors())
-                && !StringUtils.equals("0", dept.getAncestors()))
-        {
-            // 如果该部门是启用状态,则启用该部门的所有上级部门
-            updateParentDeptStatusNormal(dept);
-        }
-        return result;
-    }
-
-    /**
-     * 修改该部门的父级部门状态
-     *
-     * @param dept 当前部门
-     */
-    private void updateParentDeptStatusNormal(SysDept dept)
-    {
-        String ancestors = dept.getAncestors();
-        Long[] deptIds = Convert.toLongArray(ancestors);
-        deptMapper.updateDeptStatusNormal(deptIds);
-    }
-
-    /**
-     * 修改子元素关系
-     *
-     * @param deptId 被修改的部门ID
-     * @param newAncestors 新的父ID集合
-     * @param oldAncestors 旧的父ID集合
-     */
-    public void updateDeptChildren(Long deptId, String newAncestors, String oldAncestors)
-    {
-        List<SysDept> children = deptMapper.selectChildrenDeptById(deptId);
-        for (SysDept child : children)
-        {
-            child.setAncestors(child.getAncestors().replaceFirst(oldAncestors, newAncestors));
-        }
-        if (children.size() > 0)
-        {
-            deptMapper.updateDeptChildren(children);
-        }
-    }
-
-    /**
-     * 删除部门管理信息
-     *
-     * @param deptId 部门ID
-     * @return 结果
-     */
-    @Override
-    public int deleteDeptById(Long deptId)
-    {
-        return deptMapper.deleteDeptById(deptId);
-    }
-
-    /**
-     * 递归列表
-     */
-    private void recursionFn(List<SysDept> list, SysDept t)
-    {
-        // 得到子节点列表
-        List<SysDept> childList = getChildList(list, t);
-        t.setChildren(childList);
-        for (SysDept tChild : childList)
-        {
-            if (hasChild(list, tChild))
-            {
-                recursionFn(list, tChild);
-            }
-        }
-    }
-
-    /**
-     * 得到子节点列表
-     */
-    private List<SysDept> getChildList(List<SysDept> list, SysDept t)
-    {
-        List<SysDept> tlist = new ArrayList<>();
-        Iterator<SysDept> it = list.iterator();
-        while (it.hasNext())
-        {
-            SysDept n = (SysDept) it.next();
-            if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getDeptId().longValue())
-            {
-                tlist.add(n);
-            }
-        }
-        return tlist;
-    }
-
-
-
-
-
-
-
-    /**
-     * 判断是否有子节点
-     */
-    private boolean hasChild(List<SysDept> list, SysDept t)
-    {
-        return getChildList(list, t).size() > 0 ? true : false;
-    }
-}

+ 117 - 0
src/main/java/cn/ezhizao/project/system/service/impl/SysDictDataServiceImpl.java

@@ -0,0 +1,117 @@
+package cn.ezhizao.project.system.service.impl;
+
+import cn.ezhizao.common.utils.DictUtils;
+import cn.ezhizao.project.system.domain.SysDictData;
+import cn.ezhizao.project.system.mapper.SysDictDataMapper;
+import cn.ezhizao.project.system.service.ISysDictDataService;
+import org.springframework.stereotype.Service;
+
+import javax.annotation.Resource;
+import java.util.List;
+
+/**
+ * 字典 业务层处理
+ *
+ * @author ruoyi
+ */
+@Service
+public class SysDictDataServiceImpl implements ISysDictDataService
+{
+    @Resource
+    private SysDictDataMapper dictDataMapper;
+
+    /**
+     * 根据条件分页查询字典数据
+     *
+     * @param dictData 字典数据信息
+     * @return 字典数据集合信息
+     */
+    @Override
+    public List<SysDictData> selectDictDataList(SysDictData dictData)
+    {
+        return dictDataMapper.selectDictDataList(dictData);
+    }
+
+    /**
+     * 根据字典类型和字典键值查询字典数据信息
+     *
+     * @param dictType 字典类型
+     * @param dictValue 字典键值
+     * @return 字典标签
+     */
+    @Override
+    public String selectDictLabel(String dictType, String dictValue)
+    {
+        return dictDataMapper.selectDictLabel(dictType, dictValue);
+    }
+
+    /**
+     * 根据字典数据ID查询信息
+     *
+     * @param dictCode 字典数据ID
+     * @return 字典数据
+     */
+    @Override
+    public SysDictData selectDictDataById(Long dictCode)
+    {
+        return dictDataMapper.selectDictDataById(dictCode);
+    }
+
+    /**
+     * 批量删除字典数据信息
+     *
+     * @param dictCodes 需要删除的字典数据ID
+     */
+    @Override
+    public void deleteDictDataByIds(Long[] dictCodes)
+    {
+        for (Long dictCode : dictCodes)
+        {
+            SysDictData data = selectDictDataById(dictCode);
+            dictDataMapper.deleteDictDataById(dictCode);
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+    }
+
+    /**
+     * 新增保存字典数据信息
+     *
+     * @param data 字典数据信息
+     * @return 结果
+     */
+    @Override
+    public int insertDictData(SysDictData data)
+    {
+        int row = dictDataMapper.insertDictData(data);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    /**
+     * 修改保存字典数据信息
+     *
+     * @param data 字典数据信息
+     * @return 结果
+     */
+    @Override
+    public int updateDictData(SysDictData data)
+    {
+        int row = dictDataMapper.updateDictData(data);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(data.getDictType());
+            DictUtils.setDictCache(data.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    @Override
+    public SysDictData getDictData(SysDictData dictData) {
+        return dictDataMapper.getDictData(dictData);
+    }
+}

+ 234 - 0
src/main/java/cn/ezhizao/project/system/service/impl/SysDictTypeServiceImpl.java

@@ -0,0 +1,234 @@
+package cn.ezhizao.project.system.service.impl;
+
+import cn.ezhizao.common.constant.UserConstants;
+import cn.ezhizao.common.exception.ServiceException;
+import cn.ezhizao.common.utils.DictUtils;
+import cn.ezhizao.common.utils.StringUtils;
+import cn.ezhizao.project.system.domain.SysDictData;
+import cn.ezhizao.project.system.domain.SysDictType;
+import cn.ezhizao.project.system.mapper.SysDictDataMapper;
+import cn.ezhizao.project.system.mapper.SysDictTypeMapper;
+import cn.ezhizao.project.system.service.ISysDictTypeService;
+import org.springframework.stereotype.Service;
+import org.springframework.transaction.annotation.Transactional;
+
+import javax.annotation.PostConstruct;
+import javax.annotation.Resource;
+import java.util.Comparator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.Collectors;
+
+/**
+ * 字典 业务层处理
+ *
+ * @author ruoyi
+ */
+@Service
+public class SysDictTypeServiceImpl implements ISysDictTypeService
+{
+    @Resource
+    private SysDictTypeMapper dictTypeMapper;
+
+    @Resource
+    private SysDictDataMapper dictDataMapper;
+
+    /**
+     * 项目启动时,初始化字典到缓存
+     */
+    @PostConstruct
+    public void init()
+    {
+        loadingDictCache();
+    }
+
+    /**
+     * 根据条件分页查询字典类型
+     *
+     * @param dictType 字典类型信息
+     * @return 字典类型集合信息
+     */
+    @Override
+    public List<SysDictType> selectDictTypeList(SysDictType dictType)
+    {
+        return dictTypeMapper.selectDictTypeList(dictType);
+    }
+
+    /**
+     * 根据ids查询字典类型
+     * @param ids 集合
+     * @return List<SysDictType>
+     */
+    public List<SysDictType> selectDictTypeListByIds(List<Long> ids)
+    {
+        return dictTypeMapper.selectDictTypeListByIds(ids);
+    }
+
+    /**
+     * 根据所有字典类型
+     *
+     * @return 字典类型集合信息
+     */
+    @Override
+    public List<SysDictType> selectDictTypeAll()
+    {
+        return dictTypeMapper.selectDictTypeAll();
+    }
+
+    /**
+     * 根据字典类型查询字典数据
+     *
+     * @param dictType 字典类型
+     * @return 字典数据集合信息
+     */
+    @Override
+    public List<SysDictData> selectDictDataByType(String dictType)
+    {
+        List<SysDictData> dictDatas = DictUtils.getDictCache(dictType);
+        if (StringUtils.isNotEmpty(dictDatas))
+        {
+            return dictDatas;
+        }
+        dictDatas = dictDataMapper.selectDictDataByType(dictType);
+        if (StringUtils.isNotEmpty(dictDatas))
+        {
+            DictUtils.setDictCache(dictType, dictDatas);
+            return dictDatas;
+        }
+        return null;
+    }
+
+    /**
+     * 根据字典类型ID查询信息
+     *
+     * @param dictId 字典类型ID
+     * @return 字典类型
+     */
+    @Override
+    public SysDictType selectDictTypeById(Long dictId)
+    {
+        return dictTypeMapper.selectDictTypeById(dictId);
+    }
+
+    /**
+     * 根据字典类型查询信息
+     *
+     * @param dictType 字典类型
+     * @return 字典类型
+     */
+    @Override
+    public SysDictType selectDictTypeByType(String dictType)
+    {
+        return dictTypeMapper.selectDictTypeByType(dictType);
+    }
+
+    /**
+     * 批量删除字典类型信息
+     *
+     * @param dictIds 需要删除的字典ID
+     */
+    @Override
+    public void deleteDictTypeByIds(Long[] dictIds)
+    {
+        for (Long dictId : dictIds)
+        {
+            SysDictType dictType = selectDictTypeById(dictId);
+            if (dictDataMapper.countDictDataByType(dictType.getDictType()) > 0)
+            {
+                throw new ServiceException(String.format("%1$s已分配,不能删除", dictType.getDictName()));
+            }
+            dictTypeMapper.deleteDictTypeById(dictId);
+            DictUtils.removeDictCache(dictType.getDictType());
+        }
+    }
+
+    /**
+     * 加载字典缓存数据
+     */
+    @Override
+    public void loadingDictCache()
+    {
+        SysDictData dictData = new SysDictData();
+        dictData.setStatus("0");
+        Map<String, List<SysDictData>> dictDataMap = dictDataMapper.selectDictDataList(dictData).stream().collect(Collectors.groupingBy(SysDictData::getDictType));
+        for (Map.Entry<String, List<SysDictData>> entry : dictDataMap.entrySet())
+        {
+            DictUtils.setDictCache(entry.getKey(), entry.getValue().stream().sorted(Comparator.comparing(SysDictData::getDictSort)).collect(Collectors.toList()));
+        }
+    }
+
+    /**
+     * 清空字典缓存数据
+     */
+    @Override
+    public void clearDictCache()
+    {
+        DictUtils.clearDictCache();
+    }
+
+    /**
+     * 重置字典缓存数据
+     */
+    @Override
+    public void resetDictCache()
+    {
+        clearDictCache();
+        loadingDictCache();
+    }
+
+    /**
+     * 新增保存字典类型信息
+     *
+     * @param dict 字典类型信息
+     * @return 结果
+     */
+    @Override
+    public int insertDictType(SysDictType dict)
+    {
+        int row = dictTypeMapper.insertDictType(dict);
+        if (row > 0)
+        {
+            DictUtils.setDictCache(dict.getDictType(), null);
+        }
+        return row;
+    }
+
+    /**
+     * 修改保存字典类型信息
+     *
+     * @param dict 字典类型信息
+     * @return 结果
+     */
+    @Override
+    @Transactional
+    public int updateDictType(SysDictType dict)
+    {
+        SysDictType oldDict = dictTypeMapper.selectDictTypeById(dict.getDictId());
+        dictDataMapper.updateDictDataType(oldDict.getDictType(), dict.getDictType());
+        int row = dictTypeMapper.updateDictType(dict);
+        if (row > 0)
+        {
+            List<SysDictData> dictDatas = dictDataMapper.selectDictDataByType(dict.getDictType());
+            DictUtils.setDictCache(dict.getDictType(), dictDatas);
+        }
+        return row;
+    }
+
+    /**
+     * 校验字典类型称是否唯一
+     *
+     * @param dict 字典类型
+     * @return 结果
+     */
+    @Override
+    public String checkDictTypeUnique(SysDictType dict)
+    {
+        Long dictId = StringUtils.isNull(dict.getDictId()) ? -1L : dict.getDictId();
+        SysDictType dictType = dictTypeMapper.checkDictTypeUnique(dict.getDictType());
+        if (StringUtils.isNotNull(dictType) && dictType.getDictId().longValue() != dictId.longValue())
+        {
+            return UserConstants.NOT_UNIQUE;
+        }
+        return UserConstants.UNIQUE;
+    }
+}

+ 2 - 2
src/main/resources/application.yml

@@ -16,7 +16,7 @@ ruoyi:
 # 开发环境配置
 server:
   # 服务器的HTTP端口,默认为8080
-  port: 8081
+  port: 8082
   servlet:
     # 应用的访问路径
     context-path: /
@@ -57,7 +57,7 @@ spring:
         #server-addr: 114.116.195.82:8848 # Nacos服务器地址
         #namespace: ezhizao_template_zs # 命名空间
   application:
-    name: ezhizao-dms-production       # 配置微服务名(服务名不能用下划线)
+    name: ezhizao-dms-supplier-api       # 配置微服务名(服务名不能用下划线)
   # 解决中文文件名下载404问题
   mvc:
     pathmatch:

+ 0 - 1
src/main/resources/i18n/messages.properties

@@ -19,7 +19,6 @@ user.password.not.valid=* 5-50个字符
 user.email.not.valid=邮箱格式错误
 user.mobile.phone.number.not.valid=手机号格式错误
 user.login.success=登录成功
-user.register.success=注册成功
 user.notfound=请重新登录
 user.forcelogout=管理员强制退出,请重新登录
 user.unknown.error=未知错误,请重新登录

+ 7 - 7
src/main/resources/mybatis/business/BizOutsourcedOrderMapper.xml

@@ -13,13 +13,13 @@ PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
         SELECT * FROM biz_outsourced_order
         <trim prefix=" WHERE" suffix="" suffixOverrides="AND">
             deleted = 0
-            <if test="formCode != null  and formCode != ''"> AND form_code = #{formCode}</if>
-            <if test="formDate != null "> AND form_date = #{formDate}</if>
-            <if test="supplierName != null  and supplierName != ''"> AND supplier_name like concat('%', #{supplierName}, '%')</if>
-            <if test="deliveryMethod != null "> AND delivery_method = #{deliveryMethod}</if>
-            <if test="freightPrice != null "> AND freight_price = #{freightPrice}</if>
-            <if test="freightAmount != null "> AND freight_amount = #{freightAmount}</if>
-            <if test="packagingMethod != null  and packagingMethod != ''"> AND packaging_method = #{packagingMethod}</if>
+            <if test="supplierId != null and supplierId != ''"> AND supplier_id = #{supplierId}</if>
+            <if test="formCode != null and formCode != ''"> AND form_code LIKE CONCAT('%', #{formCode}, '%')</if>
+            <if test="formStartDate != null"> AND form_date &gt;= DATE_FORMAT(#{formStartDate}, '%Y-%m-%d')</if>
+            <if test="formEndDate != null"> AND form_date &lt;= DATE_FORMAT(#{formEndDate}, '%Y-%m-%d')</if>
+            <if test="settlementType != null and settlementType != ''"> AND settlement_type = #{settlementType}</if>
+            <if test="deliveryMethod != null and deliveryMethod != ''"> AND delivery_method = #{deliveryMethod}</if>
+            <if test="packagingMethod != null and packagingMethod != ''"> AND packaging_method = #{packagingMethod}</if>
         </trim>
     </select>
 

+ 129 - 0
src/main/resources/mybatis/system/SysDictDataMapper.xml

@@ -0,0 +1,129 @@
+<?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="cn.ezhizao.project.system.mapper.SysDictDataMapper">
+
+	<resultMap type="SysDictData" id="SysDictDataResult">
+		<id     property="dictCode"   column="dict_code"   />
+		<result property="dictSort"   column="dict_sort"   />
+		<result property="dictLabel"  column="dict_label"  />
+		<result property="dictValue"  column="dict_value"  />
+		<result property="dictType"   column="dict_type"   />
+		<result property="cssClass"   column="css_class"   />
+		<result property="listClass"  column="list_class"  />
+		<result property="isDefault"  column="is_default"  />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+
+	<sql id="selectDictDataVo">
+        select dict_code, dict_sort, dict_label, dict_value, dict_type, css_class, list_class, is_default, status, create_by, create_time, remark
+		from sys_dict_data
+    </sql>
+
+	<select id="selectDictDataList" parameterType="SysDictData" resultMap="SysDictDataResult">
+	    <include refid="selectDictDataVo"/>
+		<where>
+		    <if test="dictType != null and dictType != ''">
+				AND dict_type = #{dictType}
+			</if>
+			<if test="dictLabel != null and dictLabel != ''">
+				AND dict_label like concat('%', #{dictLabel}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+		</where>
+		order by dict_sort asc
+	</select>
+
+	<select id="selectDictDataByType" parameterType="SysDictData" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where status = '0' and dict_type = #{dictType} order by dict_sort asc
+	</select>
+
+	<select id="selectDictLabel" resultType="String">
+		select dict_label from sys_dict_data
+		where dict_type = #{dictType} and dict_value = #{dictValue}
+	</select>
+
+	<select id="selectDictDataById" parameterType="Long" resultMap="SysDictDataResult">
+		<include refid="selectDictDataVo"/>
+		where dict_code = #{dictCode}
+	</select>
+
+	<select id="countDictDataByType" resultType="Integer">
+	    select count(1) from sys_dict_data where dict_type=#{dictType}
+	</select>
+
+	<delete id="deleteDictDataById" parameterType="Long">
+ 		delete from sys_dict_data where dict_code = #{dictCode}
+ 	</delete>
+
+ 	<delete id="deleteDictDataByIds" parameterType="Long">
+ 		delete from sys_dict_data where dict_code in
+ 		<foreach collection="array" item="dictCode" open="(" separator="," close=")">
+ 			#{dictCode}
+        </foreach>
+ 	</delete>
+	<select id="getDictData" parameterType="SysDictData" resultMap="SysDictDataResult">
+		select * from sys_dict_data where status = 0
+		<if test="dictType !='' and dictType != null"> and dict_type=#{dictType}</if>
+		<if test="dictLabel !='' and dictLabel != null"> and dict_label=#{dictLabel}</if>
+	</select>
+
+	<update id="updateDictData" parameterType="SysDictData">
+ 		update sys_dict_data
+ 		<set>
+ 			<if test="dictSort != null">dict_sort = #{dictSort},</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label = #{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value = #{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="cssClass != null">css_class = #{cssClass},</if>
+ 			<if test="listClass != null">list_class = #{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default = #{isDefault},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = sysdate()
+ 		</set>
+ 		where dict_code = #{dictCode}
+	</update>
+
+	<update id="updateDictDataType" parameterType="String">
+ 		update sys_dict_data set dict_type = #{newDictType} where dict_type = #{oldDictType}
+	</update>
+
+ 	<insert id="insertDictData" parameterType="SysDictData">
+ 		insert into sys_dict_data(
+ 			<if test="dictSort != null">dict_sort,</if>
+ 			<if test="dictLabel != null and dictLabel != ''">dict_label,</if>
+ 			<if test="dictValue != null and dictValue != ''">dict_value,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="cssClass != null and cssClass != ''">css_class,</if>
+ 			<if test="listClass != null and listClass != ''">list_class,</if>
+ 			<if test="isDefault != null and isDefault != ''">is_default,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 		    <if test="dictSort != null">#{dictSort},</if>
+ 		    <if test="dictLabel != null and dictLabel != ''">#{dictLabel},</if>
+ 			<if test="dictValue != null and dictValue != ''">#{dictValue},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="cssClass != null and cssClass != ''">#{cssClass},</if>
+ 			<if test="listClass != null and listClass != ''">#{listClass},</if>
+ 			<if test="isDefault != null and isDefault != ''">#{isDefault},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			sysdate()
+ 		)
+	</insert>
+
+</mapper>

+ 113 - 0
src/main/resources/mybatis/system/SysDictTypeMapper.xml

@@ -0,0 +1,113 @@
+<?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="cn.ezhizao.project.system.mapper.SysDictTypeMapper">
+
+	<resultMap type="SysDictType" id="SysDictTypeResult">
+		<id     property="dictId"     column="dict_id"     />
+		<result property="dictName"   column="dict_name"   />
+		<result property="dictType"   column="dict_type"   />
+		<result property="status"     column="status"      />
+		<result property="createBy"   column="create_by"   />
+		<result property="createTime" column="create_time" />
+		<result property="updateBy"   column="update_by"   />
+		<result property="updateTime" column="update_time" />
+	</resultMap>
+
+	<sql id="selectDictTypeVo">
+        select dict_id, dict_name, dict_type, status, create_by, create_time, remark
+		from sys_dict_type
+    </sql>
+
+	<select id="selectDictTypeList" parameterType="SysDictType" resultMap="SysDictTypeResult">
+	    <include refid="selectDictTypeVo"/>
+		<where>
+		    <if test="dictName != null and dictName != ''">
+				AND dict_name like concat('%', #{dictName}, '%')
+			</if>
+			<if test="status != null and status != ''">
+				AND status = #{status}
+			</if>
+			<if test="dictType != null and dictType != ''">
+				AND dict_type like concat('%', #{dictType}, '%')
+			</if>
+			<if test="params.beginTime != null and params.beginTime != ''"><!-- 开始时间检索 -->
+				and date_format(create_time,'%y%m%d') &gt;= date_format(#{params.beginTime},'%y%m%d')
+			</if>
+			<if test="params.endTime != null and params.endTime != ''"><!-- 结束时间检索 -->
+				and date_format(create_time,'%y%m%d') &lt;= date_format(#{params.endTime},'%y%m%d')
+			</if>
+	    </where>
+	</select>
+
+	<select id="selectDictTypeListByIds" parameterType="Long" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_id in
+		<foreach collection="list" item="userId" open="(" separator="," close=")">
+			#{userId}
+		</foreach>
+	</select>
+
+	<select id="selectDictTypeAll" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+	</select>
+
+	<select id="selectDictTypeById" parameterType="Long" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_id = #{dictId}
+	</select>
+
+	<select id="selectDictTypeByType" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType}
+	</select>
+
+	<select id="checkDictTypeUnique" parameterType="String" resultMap="SysDictTypeResult">
+		<include refid="selectDictTypeVo"/>
+		where dict_type = #{dictType} limit 1
+	</select>
+
+	<delete id="deleteDictTypeById" parameterType="Long">
+ 		delete from sys_dict_type where dict_id = #{dictId}
+ 	</delete>
+
+ 	<delete id="deleteDictTypeByIds" parameterType="Long">
+ 		delete from sys_dict_type where dict_id in
+ 		<foreach collection="array" item="dictId" open="(" separator="," close=")">
+ 			#{dictId}
+        </foreach>
+ 	</delete>
+
+ 	<update id="updateDictType" parameterType="SysDictType">
+ 		update sys_dict_type
+ 		<set>
+ 			<if test="dictName != null and dictName != ''">dict_name = #{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">dict_type = #{dictType},</if>
+ 			<if test="status != null">status = #{status},</if>
+ 			<if test="remark != null">remark = #{remark},</if>
+ 			<if test="updateBy != null and updateBy != ''">update_by = #{updateBy},</if>
+ 			update_time = sysdate()
+ 		</set>
+ 		where dict_id = #{dictId}
+	</update>
+
+ 	<insert id="insertDictType" parameterType="SysDictType">
+ 		insert into sys_dict_type(
+ 			<if test="dictName != null and dictName != ''">dict_name,</if>
+ 			<if test="dictType != null and dictType != ''">dict_type,</if>
+ 			<if test="status != null">status,</if>
+ 			<if test="remark != null and remark != ''">remark,</if>
+ 			<if test="createBy != null and createBy != ''">create_by,</if>
+ 			create_time
+ 		)values(
+ 			<if test="dictName != null and dictName != ''">#{dictName},</if>
+ 			<if test="dictType != null and dictType != ''">#{dictType},</if>
+ 			<if test="status != null">#{status},</if>
+ 			<if test="remark != null and remark != ''">#{remark},</if>
+ 			<if test="createBy != null and createBy != ''">#{createBy},</if>
+ 			sysdate()
+ 		)
+	</insert>
+
+</mapper>